dsh-archived-session-delete: Permanently delete archived sessions in the Web GUI sidebar

前言

DeepSeek Harness(DSH)的 Web GUI 侧栏会列出当前工作区下的会话,归档后条目会进入「已归档」分组,便于与进行中的会话分开查看。归档只改变列表归类,并不会从本机删掉 JSONL 会话日志、子代理记录和 Workspace 记账;若长期积累大量试验会话或敏感 cwd 下的历史,仅靠归档无法真正腾出磁盘或降低本地暴露面。社区插件 dsh-archived-session-delete(维护者 Ediblewildfungi)在已归档会话行尾的 ... 菜单中增加 删除会话,经二次确认后由 Host 清理本地持久化与相关集合,并通知浏览器刷新列表。下面介绍其定位、能力与安装方式。

这是什么

dsh-archived-session-delete 是一个面向 DSH web profile 的普通 bundle 插件(dsh.bundle.patch + dsh.client)。它在侧栏 已归档 会话的 ... 菜单里追加一项 删除会话(位于内置「复制 Session ID」之后,带分隔线);点击后弹出确认对话框,确认后永久删除该会话的本地记录。运行中或未归档的会话不会出现删除入口,Host 端也会拒绝删除请求。

源码与说明见 GitHub 仓库 Ediblewildfungi/dsh-archived-session-delete;包名 dsh-archived-session-delete,当前 README 对应 npm 版本 1.0.0,许可证 MIT。插件目录页:skillhub.cn/plugins/Ediblewildfungi/dsh-archived-session-delete(社区目录站点,与 DeepSeek / 幻方无官方从属关系)。

核心功能

侧栏交互与 Host 清理范围在 README 中写得很具体,可概括为以下几点。

  1. 菜单与确认:仅已归档行显示 删除会话;对话框展示会话标题、不可恢复警告,以及取消 / 删除按钮;删除进行中与失败信息都在对话框内展示。
  2. 磁盘与记账:删除时会清理会话 JSONL 目录(默认 $DSH_HOME/sessions/<project>/<session-id>/)、该会话下 origin: 'subagent' 的子代理日志(递归,不删除从该会话 fork 出来的会话)、Workspace 的 detachSession、全局归档与置顶集合。
  3. 活跃表与刷新:若 Host 仍为该归档会话保留空闲 Agent 实例,会调用 SessionStore.detachEntered 分离,避免列表出现日志已删的「幽灵」行;并通过 api-session/removed 让已打开页面刷新会话列表。
  4. 只读排查:Connection RPC 通道 /archived-session-delete 提供 plan({ sessionId }),先解析将删除哪些文件与会话,不写盘,便于测试与排查。

Host 半侧在 lib/index.js 注册上述 RPC;浏览器半侧在 lib/client.js 向 slot sidebar.workspaces.session.menu.item 与 shell.overlay 注册菜单项和确认层,依赖 DSH 公开 slot 与 Connection 服务(README 注明当前针对 DSH 0.2.1-rc.5 验证;升级 DSH 后若接口改名需同步调整插件)。

安装与启用

推荐从 npm 安装到 web profile:

dsh plugin --profile web add dsh-archived-session-delete

若从本地目录安装并在运行中即时生效(示例路径来自 README,请换成你的 clone 路径):

dsh plugin --profile web add link:/home/jiang/agent-talk/dsh-archived-session-delete

也可在 Web GUI 的 插件 页面安装本地目录;profile 启用 HMR 时,bundle 补丁与 client 可热更新,无需重启。

手工写入 profile 时,在 $DSH_HOME/profiles/web/cordis.patch.yml 末尾追加:

- insert:
    - id: archived-session-delete
      name: 'dsh-archived-session-delete'

并把包装进 profile 的 node_modules(例如 pnpm add dsh-archived-session-delete),然后重启 dsh web。

可选配置

Host 侧仅一个可选字段(仅当 JSONL 持久化根目录与默认不一致时需要):

字段 默认值 含义
sessionsRoot $DSH_HOME/sessions JSONL 会话持久化根目录

在 patch 中示例:

- id: archived-session-delete
  name: 'dsh-archived-session-delete'
  config:
    sessionsRoot: /data/dsh-sessions

典型用法

安装并激活插件后,用法集中在 Web GUI 侧栏,无需额外 CLI。

  1. 在侧栏筛选或展开 已归档 会话列表。
  2. 在目标已归档会话行点击 ...,选择 删除会话。
  3. 在二次确认对话框中核对标题与警告,点击 删除;成功后该行从侧栏消失,其他归档会话不受影响。

若需在不点 UI 的情况下核对删除范围,可调用 Host 暴露的 plan({ sessionId })(走 Connection 鉴权);实际删除由 delete({ sessionId }) 执行,逻辑与 UI 确认后相同。

适用场景与注意

适合:本地 DSH Web GUI 用户,希望归档后仍能一键清掉试验会话、子代理日志和 Workspace 记账,而不是长期堆在 $DSH_HOME/sessions 下。

务必知晓的限制(均来自 README):

  • 删除不可撤销,无回收站;只清理本地记录,已上传到模型或外部的备份不在范围内。
  • 运行中会话(Agent running,或仍有 turn / 子代理 / 后台任务 / 定时提醒)会返回 session-active 并被拒绝。
  • 若另一进程以写者身份打开同一会话,删除可能失败,需先停止该进程。
  • $DSH_HOME/storages/session_projcache/ 中可能残留检查点文件,不会让已删会话重新出现在列表,可后续手工清理。
  • 插件以当前 dsh 进程权限操作文件系统;安装前应阅读 源码 与 MIT 许可证,确认符合你的安全策略。

维护者在 2026-11-02 记录了离线单测、Host 端到端与浏览器 UI 端到端验证(README 中 PASS 33/33 等),可作为质量参考,不构成对你环境的保证。

结尾

dsh-archived-session-delete 补上了 DSH Web GUI 在「已归档」之上的永久本地删除能力:菜单入口、二次确认、Host 侧完整清理与列表刷新一条链路完成。需要安装命令与行为细节时,以 README 为准。

  • 目录页:https://www.skillhub.cn/plugins/Ediblewildfungi/dsh-archived-session-delete
  • GitHub:https://github.com/Ediblewildfungi/dsh-archived-session-delete
羽毛球分组比赛记分
小程序二维码

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

Xiaoye