前言¶
在 DeepSeek Harness(DSH)桌面端里,侧栏会列出当前工作区下的任务会话。官方只提供「归档会话」:会话从列表里藏起,但转录等文件仍留在磁盘上。如果你希望从侧栏菜单直接清掉某个会话及其相关数据,需要社区插件补齐。下面介绍维护者 chichi233 发布的客户端插件 dsh-session-delete(仓库 chichi233/dsh-delete-session),在每条会话的 ⋯ 菜单里增加「删除会话」,并按可选确认流程完成磁盘侧清理与界面刷新。
这是什么¶
dsh-session-delete 是 DSH 的客户端 bundle 插件(npm 包名 dsh-session-delete,当前版本 0.3.0,MIT 许可)。它在会话侧栏的上下文菜单中注册「删除会话」,删除时按官方目录规则定位 ~/.dsh/sessions/ 下的会话目录,清理关联的子代理会话、投影缓存与 spill 临时文件,并向宿主广播 api-session/removed,使侧栏行立即消失。界面文案支持中英双语,跟随 DSH 语言设置。
核心功能¶
侧栏菜单¶
- 鼠标移到侧栏任一会话行,点右侧
⋯,在「归档会话」下方可见「删除会话」(垃圾桶图标)。 - 默认删除前弹出确认框;可在 设置 → 通用 →「删除前再次确认」 关闭,关闭后点删除直接生效。
删除范围与安全边界¶
插件按会话 id 扫描并处理会话目录,主要目标包括:
| 目标 | 说明 |
|---|---|
| 会话转录目录 | ~/.dsh/sessions/--<cwd>--/<sessionId>/ 等;同一 id 在多个 cwd 下存在时一并处理 |
| 子代理会话 | parentSession 指向被删会话的会话,递归处理(最多 8 层) |
| 投影缓存行 | sessionProjectionCache 表中对应行(服务存在时清理) |
| spill 临时文件 | <spillStore.root>/<sessionId>/(服务存在时清理) |
| 运行时句柄 | 会话仍存活时先 flush,再 detach |
安全防护:仅删除符合官方 encodeSegment(id) 命名规则的目录;路径中出现符号链接则拒绝操作,避免误删链接目标以外的路径。
在 Windows 上,会话目录默认移入系统回收站(可在资源管理器中还原);非 Windows、回收站不可用或跨卷等情况下,目录进入插件兜底目录 ~/.dsh/plugin-data/dsh-session-delete/trash/,设置页支持还原、彻底删除与清空。设置页还提供「打开回收站」入口。
与归档管理插件共存¶
若同时安装 @michengai/dsh-archive-manager,两侧都可能注册「删除会话」。本插件会保留自己的菜单项并隐藏对方的同名项;归档插件未挂载时不做隐藏。删除与是否确认以本插件设置为准。
安装与启用¶
插件通过 desktop profile 的 pnpm 依赖与 dsh.profile.bundles 启用;不要在 profile 的 cordis.patch.yml 里手写 insert 条目,应依赖包内自带的 cordis.patch.yml 由 bundle 层自动应用,否则可能被插件控制台判为模块缺失并写入 disabled: true。
从 GitHub 安装(推荐)¶
cd ~/.dsh/profiles/desktop
pnpm add github:chichi233/dsh-delete-session
在 ~/.dsh/profiles/desktop/package.json 的 dsh.profile.bundles 数组中增加:
"dsh-session-delete"
从本地目录安装(开发)¶
cd ~/.dsh/profiles/desktop
pnpm add link:/absolute/path/to/dsh-session-delete
同样在 dsh.profile.bundles 中加入 "dsh-session-delete"。
装好后必须重启 DSH 桌面端:宿主为 ESM,进程内模块缓存不会因改文件或插件控制台 toggle 而失效。重启后可在设置页「插件」列表中看到该插件。
卸载:从 dsh.profile.bundles 与 dependencies 中移除对应项并重启;可选删除 ~/.dsh/plugin-data/dsh-session-delete/。
运行环境要求(见 package.json):Node >=20,DSH >=0.2.0。
典型用法¶
- 在侧栏选中目标会话,打开
⋯菜单。 - 点击「删除会话」。
- 若未关闭确认开关,在对话框中再次确认「删除会话」后执行;若已关闭「删除前再次确认」,则一步完成。
删除成功后侧栏对应行会自行消失,无需手动刷新。
设置与 HTTP 接口¶
用户设置保存在:
~/.dsh/plugin-data/dsh-session-delete/settings.json
{ "confirmBeforeDelete": true }
直接编辑文件可在下次读取时生效(宿主有内存缓存时需重载插件)。亦可通过 HTTP 读写,例如:
GET/POST/dsh-session-delete/api/settingsPOST/dsh-session-delete/api/delete,body{ "sessionId": "..." }GET/dsh-session-delete/api/state(体检;?id=<sessionId>可查单会话是否存在)
完整路由表见仓库 README。
适用场景与注意¶
适合谁: 经常在 DSH 侧栏积累大量任务会话、希望用菜单一次性删掉转录与关联数据(而非仅归档)的开发者。
权限与安全: 插件以当前 DSH 进程的用户权限读写 ~/.dsh/sessions/ 及插件数据目录。安装前请阅读 GitHub 源码 与 MIT 许可证,确认删除与回收站行为符合你的环境(尤其非 Windows 时使用插件兜底 trash)。
兼容性: 依赖插槽 sidebar.workspaces.session.menu.item、shell.overlay、settings.general.item;侧栏插槽不存在时静默跳过菜单注册。客户端仅在 platform: web 生效(桌面端内置 web 前端)。官方 sessionPersistence、sessions 等为可选增强,缺失时仍可走文件系统完成删除。
排错提示: 侧栏无菜单项时,可请求 GET /dsh-session-delete/api/state 查看 graph.self、client.stage 等字段;装完插件未重启是常见原因。仓库 README「排错」一节有更细的 stage 说明。
结尾¶
dsh-session-delete 补上了 DSH 侧栏「真删除」能力:菜单入口、可选确认、级联清理与 api-session/removed 刷新一条链完成。社区目录页:SkillHub - dsh-delete-session;源码与文档:github.com/chichi233/dsh-delete-session。