前言¶
DeepSeek Harness(DSH)侧栏里的「归档会话」只会把对话从列表里藏起来,会话日志仍留在 ~/.dsh/sessions/ 下。官方在 @deepseek-ai/dsh-session-persistence-jsonl 的已知限制里说明:持久化层没有删除 API,日志会一直累积,除非外部工具主动清理。若你本地试过多项目、多子会话,或需要合规地清掉某次对话的落盘内容,仅靠归档解决不了「磁盘上是否还存在」的问题。下面介绍社区插件 dsh-plugin-session-delete(维护者 Yelj20001223,分类:客户端),它在 Web GUI 会话行菜单里提供真正的删除能力。
这是什么¶
dsh-plugin-session-delete 给 DSH Web GUI 侧栏每个会话行的「…」菜单增加「删除对话…」入口,在宿主侧删除对应会话目录及投影缓存记录,而不是只做 UI 层面的隐藏。插件版本 0.1.0,依赖 DSH >=0.2.0-rc.1、Node >=18,许可证 MIT。目录页:SkillHub 插件页;源码:GitHub 仓库。
与原生归档的差异¶
| 能力 | 原生「归档」 | 本插件 |
|---|---|---|
| 侧栏是否还显示 | 隐藏 | 删除后通过 api-session/removed 同步移除行 |
| 磁盘上的会话目录 | 保留 | 删除 <root>/--<project>--/<id>/(含各代际日志) |
| 可撤销 | 可取消归档 | 不可撤销,无回收站 |
核心功能¶
- 菜单入口:「删除对话…」排在官方「归档会话」之后。
- 多选与确认:弹框列出全部会话(含已归档、子会话),可多选;须手动输入
DELETE才能确认。 - 落盘删除:宿主删除该会话目录,并清理投影缓存中对应记录。
- 运行中拦截:当前进程内有活动 Agent、正在产出回合的会话返回
blocked;仅打开且空闲的会话允许删除。 - 删当前会话后切走:若删除的是当前打开的对话,主面板回到空白新会话页。
- 列表热更新:删除后发出
api-session/removed,已连接页面无需刷新即可更新侧栏。
宿主侧 HTTP 接口(经 Host / Origin 校验后可用):
GET /session-delete/candidates → { ok, sessions: [{ sessionId, title, cwd, origin, createdAt, sizeBytes, archived, running }] }
POST /session-delete/delete → { ok, deleted[], blocked[{ sessionId, reason }], failed[{ sessionId, message }] }
body: { "sessionIds": ["<id>", …] } (1..500)
安装与启用¶
从 DSH 仓库根目录(<harness>)执行;desktop profile 由桌面端管理,请用桌面端命令行。安装命令须使用 link:,不要用 file:——file: 会复制一份实体目录,改代码后需重新 add;link: 在 Windows 上为目录联接,改完可立即生效(配合 HMR 甚至不必重启)。
dsh plugin --profile desktop add link:<仓库路径>/session-delete
卸载:
dsh plugin --profile desktop remove dsh-plugin-session-delete
插件以当前 DSH 进程权限运行;安装前请自行阅读仓库源码与 MIT 许可证,确认删除行为符合你的环境策略。
典型用法¶
- 在侧栏目标会话行打开「…」菜单,选择「删除对话…」。
- 在弹框中勾选要删的会话(可含已归档项或带
subagent标记的子会话)。 - 阅读后果说明,输入
DELETE并确认。 - 若某会话正在本进程内跑 Agent,会出现在
blocked结果中且不会被删;其余成功项会从磁盘移除,侧栏同步更新。
批量删除时,sessionIds 一次最多 500 个,由 GUI 调用宿主 POST /session-delete/delete 完成。
安全设计(宿主侧)¶
宿主不信任客户端传来的路径,只根据持久化后端的 stat() 与会话日志 header 中的 cwd、id 重新推导目录,且 id 须严格落在 root 之内。找不到对应日志 id 时返回失败,不会误报「已删除」。删除前对仍有写入者的会话再次拦截;路由对 Host、Origin 不符的请求返回 403,降低本机端口被跨站滥用的风险。
适用场景与注意¶
适合:需要清理磁盘上的历史对话、归档仍占空间的会话,或希望子会话目录单独移除(删父会话不会连带删子会话)的 DSH 桌面 Web GUI 用户。
务必知晓的限制(来自 README 已知限制):
- 删除不可撤销;实现为对会话目录
rm(..., { recursive: true, force: true })。 - 不级联清理
~/.dsh/attachments/与工作区记录;会话删除后附件可能仍留在磁盘但不再被引用。 - 「运行中」判定是本进程视角;另一 DSH 进程正在写的会话,本进程可能判为可删(后端有单写者锁,属操作者明确要删的情形)。
- 社区插件目录 SkillHub 为独立站点,与 DeepSeek / 幻方无官方从属关系;星标与生态位以各站点展示为准(当前 GitHub 星标为 0)。
本地验证可运行仓库内测试(不修改你真实 ~/.dsh/sessions/ 中的数据,host.spec.mjs 只读复制样本到临时目录):
node tests/host.spec.mjs
node tests/client.spec.mjs
结尾¶
DSH 生态强调「一切皆插件」;dsh-plugin-session-delete 补上了会话持久化层缺少的「外部删除者」这一环,把 Web GUI 里的操作落到真实目录删除,并配合运行中拒绝与确认门槛降低误删风险。需要安装说明与 API 细节时,以 GitHub README 为准;在目录站浏览条目见 SkillHub。