# 会话彻底删除 DeepSeek Harness(DSH)插件:给会话加上**真正不可逆的删除**,并清理已删除会话遗留的临时文件。 DSH 原本只能归档会话——归档只是把会话从列表里移开,日志仍然留在磁盘上,越堆越多。这个插件补上的正是这一块:两处删除入口,以及插件页上的临时文件清理。 ## 功能 ### 1. 删除会话 两个入口,行为一致,都会先弹出确认弹窗(Esc 关闭、Tab 焦点圈定、打开时焦点进入、关闭后焦点归位): - 会话行右侧 **⋯** 菜单 → **删除会话** - 会话行悬停时的 🗑 按钮(在官方的「归档」「置顶」之前,是悬停区的第一个按钮) 确认后一次性处理: | 对象 | 处理方式 | | --- | --- | | 会话日志 | 整个删除 | | 子智能体会话 | 递归找出它的全部子会话,连同日志与临时文件一并删除 | | 工具输出的溢出临时文件 | 删除该会话(含子会话)对应的目录 | | 工作区登记项 | 解除绑定、取消置顶、取消归档 | | 会话列表 | 该行立即消失 | 有意**不**删除: - **附件**:同一份内容可能被多个会话共用,DSH 没有引用计数,跟着一个会话删除会破坏别的会话; - **派生缓存**:由日志生成,读取时带会话身份校验,不会串到别的会话。 ### 2. 清理临时文件 **设置 → 插件 → 会话彻底删除**,打开插件页就能看到。它清理的是**孤儿**临时文件——那些属于已经不存在会话的工具输出溢出目录。判定偏保守: 1. 只认 DSH 生成溢出目录时的固定命名(`session-` 加会话 id 哈希的前 12 位),形状不符的一概不动; 2. 该名字不属于任何已知会话(磁盘上的与正在运行的都算); 3. 只在 DSH 的临时目录范围内操作; 4. 符号链接一律跳过、不跟随;单项失败只记警告。 结果直接显示在页面上(清理了几个目录、几个文件、释放多少空间),可反复点击。 ## 行为与边界 - **仍在运行的会话**无法被插件从内存里移除:它会先被归档并停止,日志与临时文件在**下次启动 DSH 时**删除(界面会明确提示);在此之前取消归档就会取消这次删除。 - 删除**不可恢复**,但**不是安全擦除**:按普通文件删除处理,底层介质上可能有残留。 - 工作区里的代码文件不受影响。 - 临时文件被删除后,fork 出来的会话日志里若仍保留指向它的路径文本,那些路径会失效。 - 指针停在会话行上时,删除按钮的气泡可能和会话行自带的悬停预览卡同时出现。 ## 安装 DSH 的 **插件 → 添加插件** 里有两个输入,含义不同: - **上面那个输入框**:装什么(包名 / Git 地址 / 本地 tgz 的绝对路径); - **下面的「安装源」**:只决定**按包名安装时**去哪个注册表查。填 Git 地址或 tgz 时它不参与拉取,保持默认(官方源)即可,不必切到「自定义地址」。 ### 1. Git 仓库地址(推荐) 在上面的输入框里填: ```text https://gitea.iwake.top/dsh-plugin/session-delete.git#v2.0.2 ``` `#` 后面可以跟标签或提交,用来锁定版本;不写则取默认分支。仓库是公开的,不需要凭据,也不需要改安装源。 想跟随 2.x 的最新版本,可以把后缀写成 `#semver:^2.0.2`——以后发了新版本,移除旧版本再装一次就能拿到。 ### 2. 本地 tgz 把仓库打包成 tgz(得到 `dsh-plugin-session-delete-2.0.2.tgz`),把它在运行 DSH 那台机器上的绝对路径填进上面的输入框。 ### 升级 DSH 暂不支持插件自动更新,升级就是用新标签重装一次(建议先移除旧版本)。装好后刷新页面即可生效。 ## 兼容性 基于 **DeepSeek Harness 0.2.0-rc.2** 编写,其它版本与平台组合未逐一验证。 ## License [MIT](LICENSE)