dsh-plugin-conversation-purge:在 DSH 中彻底删除对话及关联产物

前言

在 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 搜索。

两种删除模式

删除前弹出确认框,逐项列出将删除的会话、文档、附件和子代理记录,可取消勾选。

  1. 仅删除对话与聊天记录:删除会话日志、隐藏的子代理聊天记录,并从工作区和侧栏移除;清理工作区归属、置顶/归档标记;标题/统计投影缓存尽力清理。
  2. 对话、文档与附件一并删除:在上一项基础上,再删除该对话相关文件与「仅被该对话使用」的附件;被其他对话共享的附件会保留。
内容 仅聊天 聊天 + 文档附件
会话日志(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 许可证,确认删除范围符合你的环境策略。

典型用法

  1. 点击左侧栏垃圾桶图标,打开「对话清理」。
  2. 找到目标对话,点击右侧「删除」。
  3. 选择范围:
    - 仅删除对话与聊天记录:确认预览后直接「永久删除」;
    - 对话、文档与附件一并删除:等待分析完成,按需勾选文档与附件(含是否启用推测扫描后的候选项),再确认。
  4. 点击「永久删除」。

若另一个标签页仍打开该对话,删除后该页可能继续写入并重建日志;操作前请先关闭对应对话标签页。

适用场景与注意

适合谁:需要在 DSH 内做可审计的、带预览的会话与磁盘清理;希望子代理日志、工作区侧栏状态与可选文件/附件一并处理,而不是手动删目录。

已知限制(来自 README):

  • 通过 shell / Python 等创建、且没有 present 的文件默认识别不到;需打开「推测扫描」并自行确认勾选项。
  • 推测扫描依据文件创建时间,可能包含同期你手动创建的文件;默认不勾选。
  • 标题/统计投影缓存为尽力清理;对应存储域不可用时可能残留少量元数据(不含聊天正文)。
  • 会话日志被其他进程占用时,删除会延后到下次启动 DSH。
  • 目前主要在 Windows 上验证。

结尾

dsh-plugin-conversation-purge 把 DSH 里「彻底删掉某次对话及其磁盘 footprint」做成左侧栏里的固定流程:两种范围、逐项预览、路径防护与占用文件补删。使用前请牢记操作不可恢复,并先在 disposable 对话上走通一遍。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜