dsh-true-delete:归档会话的本地彻底删除

前言

DeepSeek Harness(DSH)可以归档会话、重命名、再恢复,但默认不会把磁盘上的数据清掉。归档越久,%USERPROFILE%\.dsh(或 DSH_HOME 所指目录)里的 transcript、投影缓存和子 agent 会话文件会一直留着;侧边栏里若只删文件、不更新注册表与内存态,还可能出现打不开的「幽灵行」。下面介绍社区插件 dsh-true-delete(仓库 YIYuNCU/DSHTrueDelete),由维护者 YIYuNCU 发布,在确认后完成「列清单 → 删文件 → 清注册表与 live session → 刷新列表」的完整流程。

这是什么

dsh-true-delete 是 DSH 的 Cordis 插件包(npm 名 dsh-true-delete,当前资料中的版本为 0.2.1,MIT 许可证)。它在已归档会话的 … 菜单中增加 Delete local files…(中文环境随 locale 显示),先展示将要删除的真实路径与大小,经二次确认后再删除,并同步清理工作区注册表与 live session,使侧边栏对应行消失。

社区目录页:skillhub.cn/plugins/YIYuNCU/DSHTrueDelete。该目录为独立社区站点,与 DeepSeek / 幻方无官方从属关系;DSH 生态强调「一切皆插件」,本插件即其中一例。

核心功能

菜单与确认流程

对已归档会话,… 菜单在 Rename、Fork、Unarchive 之下多出一项 Delete local files…。点击后弹出只读清单:本机将被移除的路径、各路径大小,以及包含的子 agent 会话数量;在按下 Delete permanently 之前不会改动任何文件。可随时取消。

删除范围

对象 路径(<DSH_HOME> 默认为 %USERPROFILE%\.dsh) 说明
会话 transcript <DSH_HOME>/sessions/<encoded-cwd>/<sessionId>/ 含各代 session[.vN].jsonl.zstd 及 *.tmp 崩溃残留
投影缓存 <DSH_HOME>/storages/session_projcache/sessions/<sessionId>.json 标题、统计、todos、plan 等衍生数据;损坏记录的 .bak.* 一并删除
子 agent 会话 对上述两类路径,按父会话 subagentCatalog 中每个 childId 重复 子 agent 无独立侧边栏条目,仅随父会话清理

文件删除之后,插件还会:从工作区注册表移除 id(archive 集、pin 集、工作区成员关系)、释放 live session 对象、丢弃投影缓存记录,并等待约 0.25 秒再复查同一路径,避免 shutdown flush 或 write-behind 在删除后悄悄重建目录。

安全边界(资料原文要点)

  • 仅已归档会话;未归档或仍有 running work 的会话会被拒绝。
  • 不触碰跨会话共享内容(如 content-addressed 附件、request-image 缓存);不处理旧布局的 session_projcache.json。
  • 路径解析后必须落在 $DSH_HOME 内,session id 精确匹配。
  • Host 路由限制跨站、要求匹配 origin,写操作仅接受 loopback,并沿用 DSH 浏览器认证围栏。
  • 对已删过的会话重复操作会提示无本地文件,仍会清理残留注册表引用。

安装与启用

安装需两步同时完成:包进入 profile 的 node_modules,且名称写入 dsh.profile.bundles。Settings → Plugins 可一次完成;命令行只完成第一步,因此还需运行 enable-bundle.mjs。安装后重启 DSH 一次(插件 Host 半在启动时加载)。

按包名(registry 可用时):

"%ProgramFiles%\DeepSeek Harness\resources\runtime\cli\bin\dsh.cmd" plugin --profile desktop add dsh-true-delete
node "%USERPROFILE%\.dsh\profiles\desktop\node_modules\dsh-true-delete\scripts\enable-bundle.mjs" desktop

从 Git 仓库(无需 registry,适合尚未正式发布时):

"%ProgramFiles%\DeepSeek Harness\resources\runtime\cli\bin\dsh.cmd" plugin --profile desktop add github:YIYuNCU/DSHTrueDelete
node "%USERPROFILE%\.dsh\profiles\desktop\node_modules\dsh-true-delete\scripts\enable-bundle.mjs" desktop

本机目录 link(checkout 或离线包,路径按实际修改):

"%ProgramFiles%\DeepSeek Harness\resources\runtime\cli\bin\dsh.cmd" plugin --profile desktop add link:G:\Code\DSH\DSH-True-Delete
node G:\Code\DSH\DSH-True-Delete\scripts\enable-bundle.mjs desktop

enable-bundle.mjs 读取 $DSH_HOME(默认 %USERPROFILE%\.dsh),清理可能残留的重命名前条目,并只写入 bundle 列表。

package.json 声明 peerDependencies 为 @deepseek-ai/dsh ^0.2.0-rc.2(optional)。若出现与当前 DSH 运行时不兼容的提示,需按 README 使用 dsh plugin --profile desktop allow-version 等命令显式接受风险,或升级/对齐运行时。

按包名安装若报 declares no dsh.bundle:资料说明 registry 可能暂时解析到占位 stub;可改用 github:YIYuNCU/DSHTrueDelete 或本地 link,并按 README 处理 npm stage 相关问题。

典型用法

  1. 将会话归档,或选中已是归档状态的会话(未归档行不会出现删除入口)。
  2. 打开该行的 … 菜单,选择 Delete local files…。
  3. 阅读对话框中的路径与大小、子 agent 数量。
  4. 确认无误后点击 Delete permanently;toast 会报告删除的文件数与数据量。
  5. 页面重新拉取列表后,该行从侧边栏消失。

若删除后行仍在,且运行的是 0.2.0 之前的版本:旧版只删文件未释放 live session,重启 DSH 或再删一次即可(资料以 0.2.0+ 行为为准)。

适用场景与注意

适合:需要定期清理归档会话占用的本地磁盘;希望删除后侧边栏与注册表一致,而不是留下无法打开的残留行;父会话下挂有 subagent,需一并删除其 transcript 与缓存。

注意:

  • 插件以当前 dsh 进程权限运行,删除的是本机 $DSH_HOME 内、且经校验属于该 session id 的数据;安装前请自行查看 源码与 MIT 许可证。
  • 删除不可通过本插件恢复;共享附件不会因单会话删除而被 dedupe 存储误伤,但该会话专属的 transcript 与投影缓存会永久消失。
  • 菜单项缺失时:确认 dsh-true-delete 在 dsh.profile.bundles 中(可重跑 enable-bundle.mjs),并重启 DSH;入口仅出现在归档行。

卸载与其它排错见仓库 README 的 Uninstall / Troubleshooting 章节。

结尾

dsh-true-delete 补上了 DSH 归档模型里「真正移除本地会话数据」这一环:清单透明、仅归档可操作、文件与注册表/live 状态一起收尾。进一步了解与 issue 反馈:

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

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

Xiaoye