前言¶
在 DeepSeek Harness(DSH)里长期跑 Agent,工作区会积累大量会话日志、子代理记录,以及对话里 write、present 等工具落盘的文件和附件。界面上的归档或关闭并不能从磁盘上清干净;若需要合规清理、释放空间,或丢弃试验对话,往往只能手动翻 $DSH_HOME/sessions 等目录,容易漏删或误删共享附件。
下面介绍社区插件 dsh-plugin-conversation-purge(维护者 rz-123)。它在 DSH Web / Desktop 左侧栏增加「对话清理」入口,用确认预览和两种删除范围,把不可恢复的磁盘删除做成可核对的操作。插件归类为「记忆」,源码与 npm 包见 GitHub 与 SkillHub 目录页。SkillHub 为独立社区目录,与 DeepSeek / 幻方无官方从属关系。
这是什么¶
dsh-plugin-conversation-purge 是一个 DSH Web 插件(纯 JavaScript ESM,Host 端仅使用 Node 内置模块,无第三方运行时依赖)。一句话定位:在左侧栏提供全局面板,用于永久删除对话;可选一并删除该对话交付或创建的文件,以及仅被该对话引用的附件。
所有删除直接作用于磁盘,不进入回收站,且不可恢复。README 明确要求先用可丢弃的对话试用。
核心功能¶
界面与列表¶
- 左侧栏与「插件」「定时任务」并列的全局面板图标(垃圾桶),点击打开中央清理页。
- 对话按工作区分组,展示标题、创建时间、日志大小、是否正在使用;支持按标题、路径、会话 ID 搜索。
两种删除模式¶
删除前弹出确认框,逐项列出将删除的会话、文档、附件和子代理记录,可取消勾选。
- 仅删除对话与聊天记录:删除会话日志、隐藏的子代理聊天记录,并从工作区和侧栏移除;清理工作区归属、置顶/归档标记;标题/统计投影缓存尽力清理。
- 对话、文档与附件一并删除:在上一项基础上,再删除该对话相关文件与「仅被该对话使用」的附件;被其他对话共享的附件会保留。
| 内容 | 仅聊天 | 聊天 + 文档附件 |
|---|---|---|
会话日志(session*.jsonl*) |
是 | 是 |
| 该对话派生的子代理会话日志 | 是 | 是 |
| 工作区归属、置顶/归档标记 | 是 | 是 |
| 标题/统计投影缓存(尽力清理) | 是 | 是 |
| 对话交付/创建的文件 | — | 是(可勾选) |
| 仅被该对话使用的附件 | — | 是(可勾选) |
| 被其他对话共享的附件 | — | 保留 |
文档与附件识别(模式 2)¶
文档识别来源包括:
present工具交付的文件(deliverables/presented事件);write工具成功写入的文件(tool/result.meta.path);edit/str_replace_editor修改的文件(默认不勾选);- 可选「推测扫描」:按该对话时间段内工作目录中新建文件的创建时间推测(默认不勾选)。
附件只删除引用计数上仅属于该对话的对象;共享附件跳过。
安全防护与补删¶
- 删除前停止该对话正在运行的回合。
- 只删除普通文件,不递归删目录,跳过符号链接;拒绝删除会话目录、附件仓库、DSH profile、插件状态目录。
- 客户端提交的路径必须与服务端重新扫描结果取交集。
- 文件被占用时写入待删清单(
$DSH_HOME/conversation-purge/pending.json),对话先从界面消失,下次启动 DSH 后约 3 秒重试;清单清空后自动删除。 - 每次操作返回逐项结果,失败项单独报告。
隐私与网络¶
不联网、无遥测、无第三方依赖;只访问 $DSH_HOME/sessions、$DSH_HOME/attachments、$DSH_HOME/conversation-purge 和工作区注册表,不上传对话内容。
实现概要(供排查)¶
Host 半(index.js)注册三个需浏览器认证的精确路由:GET /api/conversation-purge.list、POST /api/conversation-purge.preview、POST /api/conversation-purge.delete。会话数据经 ctx.sessionQuery、ctx.sessionPersistence 读取;工作区归属经 ctx.workspaceRegistry 移除;日志目录位于 $DSH_HOME/sessions/<project>/<sessionId>。Client 半(client.js)向 sidebar.panellist 与 main 注册面板,样式使用 --dsw-alias-* 主题 token。
删除是用户界面操作,不向 Agent 暴露删除工具。
环境要求¶
- DSH Web / Desktop,profile 中启用
connection、sessionQuery、workspaceRegistry服务。 - 开发与验证环境:DSH 0.2.1-rc.3 / Windows 11(README 写明目前主要在 Windows 上验证,POSIX 文件锁语义未做跨平台验证)。
安装与启用¶
npm 包名与 package.json 中一致,当前版本 1.0.1,许可证 MIT。
从 npm 安装(推荐)¶
在 DSH 的「添加插件」对话框中输入包名:
dsh-plugin-conversation-purge
或使用 plugin manager:
plugin_manager action=install_bundle target=dsh-plugin-conversation-purge
从本地目录安装¶
将本仓库放到本地后,以该目录为 target 安装(README 示例为绝对路径,需替换为你的路径):
plugin_manager action=install_bundle target=<本仓库的绝对路径>
安装会把包加入当前 profile 的 bundle 列表;安装后左侧栏应出现「对话清理」图标。DSH 支持 HMR,通常无需重启;若图标未出现,刷新页面即可。
同一面板 id 只能存在一份:不要同时安装 npm 版与本地版。
插件以当前 DSH 进程权限运行;安装前建议阅读源码与 MIT 许可证,确认删除范围符合你的环境策略。
典型用法¶
- 点击左侧栏垃圾桶图标,打开「对话清理」。
- 找到目标对话,点击右侧「删除」。
- 选择范围:
- 仅删除对话与聊天记录:确认预览后直接「永久删除」;
- 对话、文档与附件一并删除:等待分析完成,按需勾选文档与附件(含是否启用推测扫描后的候选项),再确认。 - 点击「永久删除」。
若另一个标签页仍打开该对话,删除后该页可能继续写入并重建日志;操作前请先关闭对应对话标签页。
适用场景与注意¶
适合谁:需要在 DSH 内做可审计的、带预览的会话与磁盘清理;希望子代理日志、工作区侧栏状态与可选文件/附件一并处理,而不是手动删目录。
已知限制(来自 README):
- 通过 shell / Python 等创建、且没有
present的文件默认识别不到;需打开「推测扫描」并自行确认勾选项。 - 推测扫描依据文件创建时间,可能包含同期你手动创建的文件;默认不勾选。
- 标题/统计投影缓存为尽力清理;对应存储域不可用时可能残留少量元数据(不含聊天正文)。
- 会话日志被其他进程占用时,删除会延后到下次启动 DSH。
- 目前主要在 Windows 上验证。
结尾¶
dsh-plugin-conversation-purge 把 DSH 里「彻底删掉某次对话及其磁盘 footprint」做成左侧栏里的固定流程:两种范围、逐项预览、路径防护与占用文件补删。使用前请牢记操作不可恢复,并先在 disposable 对话上走通一遍。