dsh-session-cleanup:为 DSH Web 补上已归档会话的真实删除

前言

用 DeepSeek Harness(DSH)做智能体或日常对话开发时,会话会不断累积。归档能把侧边栏收干净,但官方「已归档会话」页面原先只能「取消归档」——把条目放回侧边栏,磁盘上的会话日志并不会消失。归档列表越涨越长,却没有把记录从本机清掉的手段。

dsh-session-cleanup 是面向 DSH Web 客户端的社区插件:在 设置 → 已归档会话 里为每条归档会话提供单独删除,并为整页提供全部删除;删除对象是真实的会话日志目录,不是仅从 UI 列表里挪走。删除不可恢复,日志会从磁盘移除。

下面介绍它的定位、能力边界、安装步骤和用法要点。

这是什么

  • 名称:dsh-session-cleanup(npm 包名同)
  • 分类:客户端(含宿主侧路由,见下文)
  • 维护者:社区目录登记为 DPH-1121;包内作者字段为 HaydenSmith1121
  • 简介(与仓库一致):Archived-session cleanup for the dsh web client: per-row delete and delete-all over the real session logs
  • 许可:MIT

DSH 上游在 Workspace / Session 持久化层没有删除会话的现成能力:控制器只有归档与取消归档,持久化接口只有 create / open / stat / list。侧边栏上的「删除」针对的是工作区注册,日志会保留。因此本插件除了替换设置页 UI,还需要在宿主进程里新增删除接口——README 里称为「宿主半」。

核心功能

设置页上的三项操作

插件通过 cordis.patch.yml 关闭上游只读的 ui-settings-unarchive-sessions,再注册同名设置区(archived-sessions),避免两个入口并存。

操作 位置 说明
取消归档 每行右侧 放回侧边栏,日志保留(与上游一致)
删除 每行右侧 删除该条及其会话日志,二次确认
全部删除 列表上方 删除所有已归档会话,二次确认

删除在宿主侧的三步顺序

  1. 从磁盘删除会话日志目录(<DSH_HOME>/sessions/ 下由 cwd 推导的项目目录内的 session-<id>/);
  2. 通过 Cordis 从 Workspace 归档集合移除该 id;
  3. 客户端重新拉取会话列表(删除不会产生 Session 生命周期事件,不重拉会出现「列表里还在、却打不开」)。

顺序是安全设计:先删日志、后清归档 id,中途崩溃时最多留下「归档着但日志已不在」的条目,页面会标成不可恢复,仍可用取消归档清掉。

「日志已不在磁盘上」的归档残留

归档 id 可能比日志活得久(中途失败删除或手工删目录)。本插件仍会显示这类行(标题为「会话记录已不在磁盘上」),只提供「取消归档」、无「删除」按钮;「全部删除」会一并处理,确认框会说明条数。上游只读页会隐藏它们,而归档集合没有别的入口,隐藏等于永远清不掉。

搜索与「全部删除」

搜索只影响展示。「全部删除」针对全部已归档会话,不是当前筛选结果;若筛选仍生效,确认框会明确提示。

未删除的内容

<DSH_HOME>/storages/session_projcache/sessions/<id>.json(会话投影检查点)会保留。README 说明这是另一存储域,带外维护;直接删可能造成内存表与磁盘不一致,且不影响列表来源。

安全边界(宿主接口)

  • 仅 POST /plugins/dsh-session-cleanup/delete
  • 仅本机回环(127.0.0.1 / ::1 / ::ffff:127.0.0.1),其他来源 403
  • 目标路径必须在 <DSH_HOME>/sessions 内;会话 id 按后端规则转义为单一路径段

安装与启用

安装命令以仓库 README 为准(路径中的 <本仓库> 需换成你获取 tarball 的仓库或发布路径):

dsh plugin --profile web add <本仓库>/plugins/dsh-session-cleanup/0.2.1-rc.2/dsh-session-cleanup-0.1.3.tgz
dsh plugin --profile web install

装完后重启 dsh web,以便宿主半在进程启动时挂载路由。然后打开 设置 → 已归档会话。

package.json 中声明的 DSH 引擎范围为:>=0.1.6-alpha.1 等若干区间,以及 Node ^22.19.0 || >=24.0.0。安装前请对照你本地的 dsh 版本。

本插件不替换官方包,只通过 patch 接管该设置页。

典型用法

  1. 在 Web 客户端完成上述安装并重启。
  2. 进入 设置 → 已归档会话。
  3. 对单条会话点「删除」,在确认框中确认;或点列表上方「全部删除」清空归档列表(含仅列表移除的残留行)。
  4. 若提示部分失败,失败项仍保持归档状态,可重试;成功删除的条目会从磁盘与归档集合中移除(日志已不在的行则通过取消归档或批量流程清 id)。

删除部分失败时页面会分别报成功与失败条数,不会假装全部成功。

适用场景与注意

适合谁:长期使用 DSH Web、频繁归档会话、希望在本机释放磁盘并真正去掉归档记录的用户。

务必注意:

  • 删除不可恢复;操作前确认不再需要该会话日志。
  • 插件以当前 dsh 进程权限 读写 DSH_HOME;安装前应阅读源码与 MIT 许可证,自行判断信任边界。
  • 宿主半需在同时注入 webServer 与 workspaceRegistry 的 Cordis 作用域挂路由;无 Workspace 注册表的 profile 不会暴露删除接口。
  • 社区目录 SkillHub 插件页 与 GitHub 为独立生态入口,与 DeepSeek / 幻方无官方从属关系;DSH 本身倡导「一切皆插件」,本插件即其中一例。

结尾

dsh-session-cleanup 补上的是上游缺失的「删真实会话日志 + 清归档 id + 刷新列表」闭环,并把历史上「日志没了、归档 id 还在」的残渣暴露出来以便清理。若你需要在归档页做可确认的磁盘级清理,可按 README 安装并重启 Web 客户端。

  • 目录页:https://www.skillhub.cn/plugins/DPH-1121/dsh-session-cleanup
  • 源码与详细设计:https://github.com/DPH-1121/dsh-session-cleanup
羽毛球分组比赛记分
小程序二维码

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

小夜