前言¶
在 DeepSeek Harness(DSH)中,会话管理是日常使用的基础功能。虽然官方提供了归档、固定等操作,但缺少一种”彻底删除”的能力。已删除的会话往往因为各种复活机制重新出现在侧边栏,或者因为文件句柄占用导致磁盘删除失败,形成顽固的垃圾数据。dsh-forget-session-en 插件解决了这个问题,提供一条可靠的会话清理路径。
这是什么¶
dsh-forget-session-en 是 DeepSeek Harness 的一个插件,通过在会话行的”…”菜单中添加” Forget session”选项,实现两步确认后彻底删除会话。它是 dsh-forget-session 的英文分支,由 esketids 维护,专注于修复原版中会话删除后重新出现的三个复活路径问题。
核心功能¶
1. 菜单项集成¶
插件在会话行的”…”菜单中添加” Forget session”选项,排序为 500,位于官方的固定/重命名/分支/归档项之后。点击后进入两步确认机制:第一次点击后菜单项变为”Click again to confirm”,第二次点击才真正执行删除。
2. 彻底清理范围¶
删除操作覆盖以下对象:
- 运行中的工作:通过官方
workspace/session-stop水流停止并归档 - 活跃会话(Session store 内部):使用官方
entry.detach()通道,即store.delete+attachments.delete+emitDisposed - 工作区记账(
workspace.json中的sessionIds):通过官方detachSession通道 - 归档集 / 固定集:使用官方
unarchiveSession/unpinSession - 会话日志目录
~/.dsh/sessions/<project key>/<id>:整目录删除,包括_no-cwd、旧版无前缀布局和重试中的文件 - 投影缓存分片
~/.dsh/storages/session_projcache/sessions/<id>.json:删除 - 投影缓存主表
~/.dsh/storages/session_projcache.json:读取后修改对应条目,其他内容保持不变 - 复活文件:主机”复活守卫”会在约 2 分钟窗口内自动再次删除
- 侧边栏会话行:通过官方
sessions.handleSessionRemoved(id)+sessions.refresh()移除
3. 残留防护机制¶
插件内置”复活守卫”,在成功删除后启动:
- 指数退避重试:从 2 秒开始,上限 32 秒
- 窗口时长:约 130 秒
- 检查对象:日志目录(项目键已知时按项目扫描,否则全盘扫描)、缓存分片
- 每次成功删除也会清理对应的缓存分片
- 再次显式删除同一会话会重置守卫
安装与启用¶
从 npm 安装(替换 --profile 为实际使用的配置):
dsh plugin --profile web add dsh-forget-session-en
或直接从仓库安装:
dsh plugin --profile web add github:esketids/dsh-forget-session-en
安装后需重启 DSH 才能生效。
典型用法¶
- 在 DSH 侧边栏找到目标会话
- 点击会话行右侧的”…”菜单
- 选择” Forget session”
- 再次点击确认删除
- 删除成功后,会话行消失,顶部 Toast 显示删除摘要(删除的工件数量、警告数量)
适用场景与注意¶
此插件适合需要清理测试会话、废弃会话或保持工作区整洁的开发者。注意插件以当前 DSH 进程权限运行,安装前应检查源码与许可证(MIT)。
小结¶
dsh-forget-session-en 提供了一条完整的会话清理路径,从 UI 交互到磁盘删除再到复活防护,覆盖了官方机制无法完全处理的边界情况。它通过官方通道执行删除,避免绕过或破坏内部状态,同时不影响 Lingxu 记忆插件的数据。对于需要频繁清理会话的场景,这是一个可靠的补充工具。
- 目录页:https://www.skillhub.cn/plugins/esketids/dsh-forget-session-en
- GitHub:https://github.com/esketids/dsh-forget-session-en