前言¶
DeepSeek Harness(DSH)左侧边栏里,每个会话的 … 菜单自带 Archive(归档):可撤销,会话仍留在 Archived 列表里。若你只想从列表里彻底去掉某条会话、并清掉其日志与 Host 侧注册关系,手动删 session 目录往往不够——下一次 sessions.refresh() 仍可能把 live 会话的行拉回来。下面介绍社区插件 dsh-tool-session-delete,在侧边栏增加带确认框的 Delete session,走 Host 与浏览器一致的 teardown 流程,而不是 naive 的 rm。
这是什么¶
dsh-tool-session-delete 由维护者 Jaylor-Wang 发布,分类为客户端插件;npm 包名与仓库同名,当前资料中的版本为 1.2.0,许可证 MIT。它在每条会话的 Pin / Rename / Fork / Archive 之后增加一行 Delete session,点击后弹出模态框说明即将删除的内容,确认后停止会话工作、解除目录与 projection checkpoint 的关联,并从各 registry 释放 id,侧边栏刷新后该行消失。无撤销、无回收站——对话框会明确说明这一点。
核心功能¶
菜单与确认信息¶
选择 Delete session 后,确认框会报告:
- 该会话在本机是否仍处打开状态(删除后无法再以同一方式 reopen);
- 即将移除的 log 大小;
- 绑定在该会话上的 running turns、subagents、background jobs、reminders;
- 一并删除的 reminder 数量。
确认后执行完整删除序列;README 截图展示的是简体中文界面。
与 Archive、与直接删目录的区别¶
DSH 自带的 Archive 可逆;本插件提供不可逆的对应能力,且与「只删日志文件」不同——Host 的 session corpus 是 persistence ∪ live,仅删目录时常见现象是:浏览器暂时去掉一行,sessions.refresh() 又从 Host 列表 fold live summary,行会回来;连续删多个会话时,较早的还可能复现;已归档 id 若未从 archive set 移除,也可能在 Archived 里长期残留 dead id。
插件 Host 侧通过 release() 等步骤,按 agent loop disposal 顺序(agents 先于 sessions)拆链,并调用 unarchiveSession、unpinSession、workspace.detachSession 等;删日志使用带退避的 rmWithRetry,并在磁盘上 stat 验证路径是否真的消失,否则抛出 delete/failed。浏览器维护 retired 集合,每次 refresh 后仍保持行 retired,直到 Host 发出 api-session/removed。
实现要点(供排查与信任源码时参考)¶
- Host 注册 TypertRemoteService
sessionDelete(describe/deleteSession),浏览器经ctx.connection.rpc.call('/api', 'sessionDelete/${method}', …)调用,不是单独注册的 HTTP 路由;桌面端 renderer 使用dsh-app://app等场景下,刻意不依赖Origin校验,避免桌面壳与dsh web行为不一致。 - 包内声明 zero dependencies,
@deepseek-ai/*由 Host 解析;随包提供dsh.bundle与cordis.patch.yml,bundle id 为tool-session-delete。 - 内置 简体中文(zh) 与 English(en) 文案,随应用语言切换;繁体中文不在本包内,需另行安装社区语言包 dsh-zh-hant 才会显示繁体措辞。
主要文件:lib/index.js(Host)、lib/client.js(菜单与 shell.overlay 对话框)、cordis.patch.yml(profile 层注入)。
安装与启用¶
推荐通过 DSH Plugin CLI 安装到 web profile(命令来自官方 README,勿自行拼接 github:owner/repo 形式):
dsh plugin --profile web add dsh-tool-session-delete
也可通过包管理器安装依赖,但 bundle 是否生效取决于 profile 的 dsh.profile.bundles 是否包含该包;dsh plugin add 会同时加依赖并写入 bundle 列表。本地源码可用 file: 路径:
dsh plugin --profile web add file:/path/to/dsh-tool-session-delete
验证 bundle 是否进入合成树(应出现在 插件自身 cordis.patch.yml 的 banner 下,而非仅 profile 手改 patch):
dsh --profile <profile> --dump-config | grep -B1 tool-session-delete
期望看到类似:
# == …/dsh-tool-session-delete/cordis.patch.yml
- id: tool-session-delete
name: dsh-tool-session-delete
必须重启 Harness:bundle 在启动时 compose,未重启前菜单不会出现新行。
若安装后无变化:同版本重复 add 为 no-op,可先删除 profile 内旧拷贝再装,例如:
rm -rf ~/.dsh/profiles/<profile>/node_modules/dsh-tool-session-delete
dsh plugin 需要 pnpm 在 PATH(如 corepack enable pnpm);pnpm 对新 release 有 minimumReleaseAge 限制,极新版本可能暂时装到略旧版本,可等待或调整 semver 范围。开发时 pnpm 会 copy 包进 profile,改 clone 不会自动生效;热更 client.js 可拷到 profile 的 node_modules/.../lib/,Host 侧 index.js 需重启。
典型用法¶
- 安装并重启 DSH,打开 web(或已加载该 profile bundle 的桌面壳)会话界面。
- 在左侧边栏目标会话行点击
…,在 Archive 下方选择 Delete session。 - 阅读确认框中的 log 大小、live 活动与 reminder 数量;确认本机是否仍打开该会话。
- 确认删除;等待侧边栏刷新,会话行应消失且不可通过 Archive 恢复。
无额外配置项;语言跟随 DSH 应用设置。
适用场景与注意¶
适合:需要 irreversible 清理测试会话、过期对话记录,或要从 sidebar / registry 彻底移除 id 的 Harness 用户与插件开发者(可参考其 Remote service 与 teardown 顺序写法)。
注意:
- 删除不可恢复,操作前务必确认会话 id 与确认框内容。
- 插件在当前 DSH 进程权限下运行;安装前建议阅读 GitHub 源码 与 MIT 许可证,自行评估是否用于生产环境。
- 社区目录 SkillHub 插件页 与 GitHub 为独立生态信息源,与 DeepSeek / 幻方无官方从属关系;星标等元数据以各站点当时展示为准(资料中 GitHub 2 stars)。
结尾¶
dsh-tool-session-delete 补上了 DSH 侧边栏「永久删除会话」这一环:确认框先交代代价,Host 侧 release() 与日志删除验证避免「删了又回来」。需要安装命令、排障与架构说明时,以仓库 README 为准。