前言¶
DeepSeek Harness(DSH)的会话列表支持隐藏或归档,但本地仍保留会话日志、投影缓存、工作区关联和定时任务等数据。若需要彻底清掉某次对话及其子代理派生会话,而不是仅让它从列表里看不见,就需要在 Host 侧按 DSH 的数据布局做 staged 删除。社区插件 dsh-session-delete(维护者 Sartherland)在 Web 侧栏每条会话的 ... 菜单中增加 Delete permanently…,经确认后从 DSH 数据目录中移除对应会话及相关元数据;操作不可撤销。
下面介绍该插件的定位、删除范围、安装步骤与使用方式,并说明安全机制与使用限制。
这是什么¶
dsh-session-delete 是一个面向 DSH Web profile 的插件:在侧边栏会话行菜单里提供永久删除入口,由 Host 进程执行删除逻辑。它解决的是「仅归档/隐藏无法清除本地持久化数据」的问题;与手动删目录不同,插件会一并处理工作区归属、置顶/归档状态、投影缓存、定时任务、子代理子会话以及可选的全文搜索索引对账。
插件在 DSH 进程内运行,会直接改动 ~/.dsh 等 persistence 根下的文件。README 明确标注为 destructive plugin,安装前应阅读删除范围并自行审阅源码与 MIT 许可证。当前 package 版本为 0.1.0,要求 DSH >= 0.2.1-rc.3(Web profile),无构建步骤,客户端为预构建的 Module Loader bundle。
核心功能¶
菜单与确认¶
每条会话行悬停后点击 ...,会出现 Delete permanently…。确认对话框会写明会话名称并说明将被移除的内容;确认后执行删除,没有 undo。若 Host 拒绝(例如会话仍打开),对话框会显示原因且不改动数据。
会删除什么¶
针对选中的会话,Host 会移除或清理如下项(与 README 表格一致):
| 数据 | 行为 |
|---|---|
| Session log | 删除 sessions/<project>/<session-id>/ 下各格式版本的日志 |
| Subagent descendants | 递归删除 origin: "subagent" 的子会话;fork 不算后代,会保留 |
| Projection cache | 删除 session_projcache 记录及 .bak.* 备份 |
| Workspace membership | 从工作区 detach,陈旧行消失 |
| Pin / archive | 删除前先取消置顶与归档 |
| Scheduled tasks | 删除绑定到该会话的全部定时任务(含 inactive) |
| Spill files | 删除本地 spill 后端的 session-<hash> 目录( oversized 工具输出) |
| Search index | 若启用组合全文后端,触发一次 reconcile,去掉已删会话的索引行 |
当前 正在打开的会话会被拒绝删除:DSH 仍持有 Agent 与 log handle,删底层文件可能导致损坏或会话再次出现。需先切换到其他会话再删旧会话。
刻意保留的内容¶
- Attachments:位于
<DSH_HOME>/attachments,内容寻址,可能被其他会话引用,插件不触碰。 - 浏览器侧侧栏排序/草稿:非 Host 数据;列表刷新后陈旧 id 会被 UI 忽略。
- 已上传到模型提供商、手动导出或遥测捕获的外部副本:不在 Host 本地存储范围内。
HTTP 路由为 /api/session-delete,注册在 DSH 已认证的 owner-only Fetch channel 上,继承浏览器 cookie 与常规 /api 的 Host/Origin fence,无需单独配置未认证端口或密钥。
删除如何分阶段保证安全¶
README 描述的四步流程:
- Preflight — 解析会话及全部 subagent 后代,确认无 live 会话;拒绝符号链接的 session 目录;验证路径在 persistence 根内。
- Quarantine — 将会话目录重命名为隐藏 sibling;失败时回滚已移动的目录。
- Metadata cleanup — 清理工作区、pin/archive、投影缓存、定时任务、session-scoped spill;失败收集为 warning,不故意把 log 留在原位。
- Purge — 递归删除隔离目录;若 OS 仍占用文件,warning 会给出残留路径供手动清理。
安装与启用¶
要求 DSH Web profile >= 0.2.1-rc.3。任选一种方式安装后,在 Plugins 页面启用 Session Delete(bundle 名 dsh-session-delete);若 profile 未启用 HMR,需重启 DSH。
从 DSH UI¶
打开 Plugins → Install,粘贴 GitHub 仓库 URL,启用 Session Delete,按需重启。
从 CLI¶
官方命令:
dsh plugin add github:Sartherland/dsh-session-delete
本地 checkout 开发时可用 link:
dsh plugin add link:/absolute/path/to/dsh-session-delete
手动编辑 profile¶
在 ~/.dsh/profiles/<profile>/package.json 中加入依赖并在 dsh.profile.bundles 中列出 bundle 名;示例见仓库 README。bundle 通过 cordis.patch.yml 向 Host 注册 session-delete 行。
典型用法¶
- 打开侧边栏会话列表。
- 悬停目标会话,点击
...。 - 选择 Delete permanently…。
- 阅读确认文案,点击 Delete permanently。
菜单在 row 不可用时隐藏。若因会话仍打开而被拒绝,按提示先切换会话再试。
适用场景与注意¶
适合:需要在本机 DSH 数据中彻底移除某次对话及由其派生的 subagent 会话;清理投影缓存、定时任务与 spill,并同步工作区列表;在启用全文搜索时希望索引与本地删除一致。
务必注意:
- 插件以 当前 DSH Host 进程权限 运行,删除的是本机 persistence 数据,不可恢复。
- 安装前阅读 README 的「What it deletes / keeps」并查看
lib/delete.js等实现;社区目录 SkillHub 插件页 与 GitHub 仓库相互独立,非 DeepSeek / 幻方官方应用商店,归属与维护以 Sartherland 仓库为准。 - 附件、外部导出与 provider 侧副本不在删除范围内;隐私或合规需求需另行处理。
开发侧可运行 npm test(node –test)与 npm run check 做语法检查;Host 半无运行时依赖,Client 由 DSH Module Loader 注入 react 与 @deepseek-ai/dsh-client-ui-primitives。
结尾¶
dsh-session-delete 把 DSH Web 里「永久删除会话」做成一条可确认的菜单操作,并在 Host 侧按 preflight → quarantine → metadata → purge 删除日志、子代理后代、缓存、工作区与定时任务等,同时保留共享附件与 fork 会话。使用前确认 DSH 版本与 Web profile,并理解破坏性范围。