前言¶
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 中写得很具体,可概括为以下几点。
- 菜单与确认:仅已归档行显示 删除会话;对话框展示会话标题、不可恢复警告,以及取消 / 删除按钮;删除进行中与失败信息都在对话框内展示。
- 磁盘与记账:删除时会清理会话 JSONL 目录(默认
$DSH_HOME/sessions/<project>/<session-id>/)、该会话下origin: 'subagent'的子代理日志(递归,不删除从该会话 fork 出来的会话)、Workspace 的detachSession、全局归档与置顶集合。 - 活跃表与刷新:若 Host 仍为该归档会话保留空闲 Agent 实例,会调用
SessionStore.detachEntered分离,避免列表出现日志已删的「幽灵」行;并通过api-session/removed让已打开页面刷新会话列表。 - 只读排查: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。
- 在侧栏筛选或展开 已归档 会话列表。
- 在目标已归档会话行点击
...,选择 删除会话。 - 在二次确认对话框中核对标题与警告,点击 删除;成功后该行从侧栏消失,其他归档会话不受影响。
若需在不点 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