dsh-tool-session-delete:侧边栏永久删除会话

前言

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 需重启。

典型用法

  1. 安装并重启 DSH,打开 web(或已加载该 profile bundle 的桌面壳)会话界面。
  2. 在左侧边栏目标会话行点击 …,在 Archive 下方选择 Delete session。
  3. 阅读确认框中的 log 大小、live 活动与 reminder 数量;确认本机是否仍打开该会话。
  4. 确认删除;等待侧边栏刷新,会话行应消失且不可通过 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 为准。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜