前言¶
用 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),避免两个入口并存。
| 操作 | 位置 | 说明 |
|---|---|---|
| 取消归档 | 每行右侧 | 放回侧边栏,日志保留(与上游一致) |
| 删除 | 每行右侧 | 删除该条及其会话日志,二次确认 |
| 全部删除 | 列表上方 | 删除所有已归档会话,二次确认 |
删除在宿主侧的三步顺序¶
- 从磁盘删除会话日志目录(
<DSH_HOME>/sessions/下由cwd推导的项目目录内的session-<id>/); - 通过 Cordis 从 Workspace 归档集合移除该 id;
- 客户端重新拉取会话列表(删除不会产生 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 接管该设置页。
典型用法¶
- 在 Web 客户端完成上述安装并重启。
- 进入 设置 → 已归档会话。
- 对单条会话点「删除」,在确认框中确认;或点列表上方「全部删除」清空归档列表(含仅列表移除的残留行)。
- 若提示部分失败,失败项仍保持归档状态,可重试;成功删除的条目会从磁盘与归档集合中移除(日志已不在的行则通过取消归档或批量流程清 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