前言¶
在 DeepSeek Harness(DSH)中,归档会话只是把会话从列表中移除,对应的文件仍然保留在磁盘上,可以取消归档恢复。对于需要彻底清理会话数据的场景,这个原生行为不够直接。DSH Session Delete 插件在会话菜单的「归档会话」下方增加了一个「删除会话」项,一次点按即可删除该会话及其全部数据,且不进入回收站。
这是什么¶
DSH Session Delete 是一个 DSH 插件,由 Dubai1210 维护。它扩展了 DSH 客户端的会话菜单,在「归档会话」之后插入一个「删除会话」选项。点击后,会话标题显示在确认框中,确认后该会话及其磁盘上的所有数据都会被移除。
核心功能¶
菜单项位置¶
菜单项被插入到 sidebar.workspaces.session.menu.item 插槽,顺序为 410,位于「归档会话」之后、「会话 ID」之前。
删除范围¶
一次删除操作会清理以下内容:
- 正在运行的 agent:调用
cancel({kind:"user"})并执行agent.scope.dispose(),释放日志文件句柄 - 会话日志目录:
~/.dsh/sessions/<project>/<session-id>/整目录删除,包括session.v4.jsonl.zstd等世代日志 - 投影缓存:
storages/session_projcache中该会话的行(含投影后的消息正文) - 工作区归属:从每个工作区的
sessionIds中调用detachSession - 归档 / 置顶集合:从全局
archivedSessionIds、pinnedSessionIds中移除 - 客户端列表:通过
ctx.emit("api-session/removed", id)通知所有客户端窗口移除该行
删除操作不进入回收站,无法恢复。
安装与启用¶
从 GitHub 安装:
dsh plugin --profile web add github:Dubai1210/dsh-session-delete
本地目录安装(用于开发调试):
dsh plugin --profile desktop add link:/path/to/dsh-session-delete
安装后刷新 DSH 窗口(Ctrl+R)让 client bundle 加载;如果菜单中没有出现新项,重启一次 DSH。
典型用法¶
- 在左侧工作区列表中找到目标会话行,点击行尾的「⋯」
- 在菜单中选择「归档会话」下方的「删除会话」
- 在确认框中核对会话标题,点击「删除」
- 会话行消失,磁盘上的对应目录同时被删除
权限与风险¶
- Host 侧注册了一个同源 HTTP 路由
POST /dsh-session-delete/delete,请求体为{"sessionId":"..."}。同源校验遵循 DSH 官方插件的做法:拒绝sec-fetch-site: cross-site、origin: null以及origin.host与host头不一致的请求 - 只操作本机
~/.dsh下的会话数据和工作区注册表,不发起任何外部网络请求,不依赖任何第三方服务 - 没有遥测,没有后台常驻任务
- 唯一的风险是删除是永久性的,确认框是唯一的刹车
兼容与运行要求¶
- DSH:0.2.x(desktop profile 与 web profile 均可)
- 平台:Windows / macOS / Linux
- 运行时:Node.js >= 18(Host 侧仅使用
node:fs/promises与node:path) - 依赖的服务:
webServer、sessions、agents、sessionPersistence、workspaceRegistry、storageDomain,全部来自 DSH 基础 bundle,无额外依赖
适用场景与注意¶
适合需要彻底清理会话及其数据(包括日志、投影缓存、工作区归属等)的场景。安装前建议查看源码与许可证,确保符合项目安全要求。
结尾¶
DSH Session Delete 补上了 DSH 原生「归档」与真正「删除」之间的空白,为会话管理提供了不可逆清理的能力。目录页与源码地址如下:
- 技能目录页:https://www.skillhub.cn/plugins/Dubai1210/dsh-session-delete
- GitHub:https://github.com/Dubai1210/dsh-session-delete