前言¶
DeepSeek Harness(DSH)官方只提供会话归档,持久化层没有删除接口。侧栏会话列表是核心交互面,长期积累会产生大量归档会话,需要一种可逆、可清理的移除方式。
是什么¶
这是一个给 DSH 工作区侧栏增加「一键永久删除」的客户端插件。维护者为 LINJJ749。插件通过官方扩展 Slot 实现删除操作,不注入 DOM、不改官方 UI。
核心功能¶
- 会话行悬停按钮:在每行操作区末尾增加垃圾桶图标,位于官方归档、置顶按钮之后。
- 菜单项:在会话
...菜单中增加「删除会话」操作,位置在「复制会话 ID」之后。 - 轻量确认:弹出对话框显示会话标题与不可恢复警告,提供取消/确认;删除中显示进度,失败时显示错误信息。
- 运行中保护:正在打开或运行的会话被拒绝删除,避免写句柄在文件删除后重建无 header 的日志。需先切换到其它会话。
- 派生会话处理:目标会话若有派生子会话(子代理或带
parentSession的分叉),首次删除被拒绝并返回数量;确认框提供「一并删除 N 个会话」选项,按先子后父删除整棵子树;子树内有运行中会话则整体拒绝。 - 完整且边界明确的删除:
- 会话日志目录:
<DSH_HOME>/sessions/--<cwd>--/<sessionId>/。先把 canonical 日志改名为*.deleted-<时间戳>作为唯一原子提交点,此后该会话对 list/stat/open 立即不可见,再尽力删除目录。 - 投影缓存:通过
session_projcache存储域的写链删除记录,保证内存与磁盘一致。 - 工作区记账:从所属工作区的
sessionIds、归档集合与置顶集合中移除。 - 无需刷新页面:删除成功后本地移除该行,后台与 Host 会话基线对齐。
- 中英双语:继承宿主主题 token 与语言设置。
安装与启用¶
dsh plugin --profile <your-profile> add github:LINJJ749/dsh-one-click-session-delete
替换 <your-profile> 为你的 profile 名称(例如 desktop 或 web)。包内声明了 dsh.bundle 清单,dsh plugin add 会自动安装并挂载,无需手动修改 cordis.patch.yml。
典型用法¶
在左侧工作区侧栏把鼠标悬停到会话行上,点击垃圾桶按钮;或打开该行的 ... 菜单选择「删除会话」,在确认框中确认。该行会消失,会话的本地记录被永久删除。
若只想从侧栏收起、保留记录,请使用官方「归档会话」。
适用场景与注意¶
- 永久删除没有回收站、不可撤销;归档会话也可删除,会从归档集合一并清理。
- 正在打开/运行的会话总是被拒绝;删除当前正在查看的会话需要先切换会话。
- 附件是内容寻址且跨会话共享,本插件不删除附件。
- 若部署启用了持久 SQLite 内容搜索索引,本插件不触碰索引文件(该索引自带 reconcile 自愈)。
- 会话根目录来自运行时
sessionPersistence服务,回退到启动器提供的 home 路径,不硬编码。 - Host 半只注册一个同源 JSON 路由(
POST /session-delete/api/delete),由 Host 的 connection 信任栅栏保护;Client 半只做 Slot 注册。 - Host 半以宿主进程权限运行(插件不受沙箱约束),会删除 DSH home 下所选会话自己的存储路径。请阅读源码。
兼容性¶
- DeepSeek Harness
0.2.1-rc.2(已实测)。 - Node.js >= 20。
- Windows / macOS / Linux。
结尾¶
该插件为 DSH 提供了明确边界、可审计的会话删除能力,适合需要定期清理历史会话的场景。查看目录页与源码:
- 技术目录:https://www.skillhub.cn/plugins/LINJJ749/dsh-one-click-session-delete
- GitHub:https://github.com/LINJJ749/dsh-one-click-session-delete