dsh-dialogue-cleanup:在 Web 界面里真正删掉 Harness 会话

前言

在 DeepSeek Harness(DSH)里用 Web GUI 跑智能体时,侧边栏会积累大量会话。如果只是从列表里「看不见」某条记录,往往并不等于磁盘和运行时状态已经清干净:Harness 会把同一会话同时落在 live store、workspace 记录、注册表残留(pin / archive)以及磁盘目录里,只动其中一层容易留下幽灵行、过期 workspace 或仍占空间的目录。

社区插件 dsh-dialogue-cleanup(维护者 Winnie-0721,SkillHub 分类为客户端)针对的是「删除会话应当真的删掉」这件事:在不重启进程、不离开当前窗口的前提下,从正在运行的 Web 运行时里发起删除,并由 Host 侧统一实现删除逻辑,避免单删与批量两条路径行为不一致。

这是什么

一句话定位:从运行中的 Web GUI 删除 DSH 会话——包括 live store 条目、workspace 记录、注册表残留与磁盘产物。一个 npm 包同时包含 Host 半部(Cordis 插件)与 Web 客户端半部,按官方插件规范安装进 Host。

核心功能

下面介绍插件在资料中明确写出的能力,不涉及未在 README / package.json 中出现的配置项。

单条删除与批量管理

  1. 单条删除:在侧边栏会话行悬停,打开 ... 菜单,选择 Delete session(注册在 order: 500,位于官方 Archive 项之后)。确认后会移除 live 条目、workspace 记录、注册表残留与磁盘产物。
  2. 批量删除:打开 Settings → Dialogue Cleanup,可搜索、按项目 / 状态 / 会话类型 / 归档筛选、排序与分页;勾选可删行或使用「Select all deletable」,一次请求批量删除。

Host 侧删除语义

删除实现集中在 Host 的 lib/service.js(deleteSession),经 HTTP 与 slot UI 两条薄适配器接入,使单删与批量不会各自演化出一套逻辑。资料中描述的删除顺序要点包括:

  1. 运行中的会话拒绝删除(409 refused),由 Host 判定 deletable,UI 不自行猜测是否安全。
  2. 从 live store detach,避免删后仍出现幽灵行。
  3. 清理 workspace 记录及后续步骤(README 在截断处继续描述注册表与磁盘产物;路径与审计分别由 lib/artifacts.js、lib/audit.js 承担)。

与上游「总是返回 200」不同,本插件对错误使用真实 HTTP 状态码(如 400 / 403 / 404 / 405 / 409 / 429 / 500)。结果行会报告 ok / failed / degraded、已移除目录数等;若 live store 无法 detach,会标明 detached: false 而非假装成功。

客户端展示上的设计选择

  • 已归档会话默认仍显示:归档不等于删除,默认隐藏会挡住需要清理的磁盘占用;面板提供三态筛选(hide archived / all / archived only),默认展示含归档。
  • 子代理行显式标注:官方侧栏会隐藏 origin: 'subagent' 行;在本插件列表里出现时以徽章区分(资料示例:空闲 / 运行中(不可选)/ 子代理 / 已归档)。
  • 不可逆确认:使用原生 <dialog> + showModal(),仅 Cancel 或 Esc 关闭,点击遮罩不会关闭,避免误点不可逆删除。

客户端通过官方 slot 注册,且不直接操作 DOM:

  • sidebar.workspaces.session.menu.item → 单删菜单项。
  • settings.section(id: dialogue-cleanup,order: 25)→ 设置页入口与批量面板。

安装与启用

在已具备 DSH CLI 的环境中,按 README Quick Start 安装 Web 侧插件:

dsh plugin --profile web add dsh-dialogue-cleanup

说明:

  • 包名与 npm 发布一致:dsh-dialogue-cleanup(当前资料中 package.json 版本为 1.1.2)。
  • 运行环境要求 Node >= 20.0.0(package.json 的 engines)。
  • Host 侧代码变更需要重启 DSH 进程;纯客户端变更不需要(细节见仓库 docs/RELEASING.md)。

典型用法

经过上面的安装步骤后,可按 README 中的两条路径操作:

  1. 清理当前对话:侧边栏目标会话 → ... → Delete session → 在确认层阅读警告与会话 id → 确认永久删除。
  2. 集中清理历史:Settings → Dialogue Cleanup → 用筛选缩小范围 → 勾选可删会话 → 执行批量删除;运行中的行不可选,需先结束或切换会话后再删。

批量面板截图与确认层截图由仓库内 scripts/render-shot.mjs 基于实际组件树与 CSS 生成(README 的 Honest limitations 一节说明其并非手工 mock,也不是实拍 live GUI)。

适用场景与注意

适合谁:长期在本地或单机 Web GUI 使用 DSH、会话与 workspace 目录堆积、需要可核对结果的批量清理,且希望删除路径与 Host 权限模型一致的开发者。

使用前请知悉:

  • 插件以当前 dsh 进程权限执行文件系统删除与 API 调用;安装前应阅读 源码 与 MIT 许可证,确认符合你的安全与合规要求。
  • 删除不可逆;对运行中会话的删除会被拒绝,这是刻意设计而非缺陷。
  • SkillHub 为社区插件目录,与 DeepSeek / 幻方无官方从属关系;星标与 fork 数以目录/GitHub 当时展示为准(线索中为 GitHub 2 stars)。

结尾

dsh-dialogue-cleanup 把「删会话」做成一次 Host 侧可审计、UI 双入口(侧栏单删 + 设置页批量)的操作,并尽量如实反馈 detach 与磁盘清理结果。若要查看说明、发布链与限制,可从 GitHub 仓库 或 SkillHub 目录页 进入。

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

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

小夜