dsh-session-cleanup-pro
给 DeepSeek Harness(DSH)补上官方缺失的会话删除能力:
- 设置 → 会话清理:按工作区分级列出全部会话,搜索、多选、批量删除;
- 删除是真删:会话日志目录、投影缓存、工作区登记一起清掉;
- 删除后立即推送给界面:冷会话不用重启就从会话列表消失;
- 同时给 Agent 提供 3 个工具,对话里就能清理会话。
本插件是社区项目,与 DeepSeek 官方无隶属关系。
安装
方式一:应用内插件管理器(推荐,桌面端 / Web 均可)
设置 → 插件 → 添加插件(Add plugin),粘贴仓库地址:
https://github.com/gcluffy/dsh-session-cleanup-pro
装完重启一次 DSH(首次安装宿主半侧需要重新加载),然后在 设置 → 会话清理 使用。
方式二:命令行(仅纯 web profile)
dsh plugin --profile web add github:gcluffy/dsh-session-cleanup-pro
web 换成你实际的 profile 名。桌面端(Electron)的 profile 只允许应用自己管理,
请在应用内插件管理器里安装。
关于 npm 包名
npm 上已有一个同名项目 dsh-session-delete(其他作者维护),与本插件无关;本插件的包名是 dsh-session-cleanup-pro,请勿用 npm 包名安装。
本插件的 0.2.0 目前只通过 GitHub 分发;若之后以独立包名发布到 npm,这里会补充对应命令。
功能
设置页:会话清理
- 按工作区分组,可折叠;组头显示会话数与占用体积;
- 搜索会话名称 / 路径 / id;
- 单选、多选(点击整行切换,Shift 连选)、全选本组 / 全选 / 清空;
- 每行可展开详情:完整 id、目录、创建时间、累计 token、轮次;
- 删除前弹确认框,列出待删会话;运行中会话会明确提示需要重启;
- 默认开启「保护运行中的会话」,避免误删当前会话。
删除范围
| 目标 | 位置 |
|---|
| 会话日志 | $DSH_HOME/sessions/<project>/<id>/session.vN.jsonl.zstd(整个目录) |
| 投影缓存 | $DSH_HOME/storages/session_projcache/sessions/<id>.json |
| 工作区登记 | 优先走宿主 workspaceRegistry(detachSession / unarchiveSession / unpinSession),没有该服务时退回直接改 workspace.json |
登记走宿主 API 时,DSH 会自己发出 domain/changed;删除完成后插件再让宿主广播一次
api-session/removed,已连接的客户端会立即把该行从会话列表移除——不需要刷新页面。
什么时候要重启
| 情况 | 表现 |
|---|
| 删的是冷会话(不在内存里) | 登记 + 文件 + 推送都完成后,界面即时更新,不需要重启 |
| 删的是运行中会话 | 行会先消失,但宿主 SessionStore 仍持有实例 → 界面提示重启 DeepSeek Harness 彻底释放 |
宿主是否支持即时更新,可以看 GET /dsh-session-cleanup-pro-4c1d/health 返回的 features
是否包含 host-registry 与 emit-removed。
Agent 工具
| 工具 | 作用 |
|---|
session_delete_list | 分级列出全部工作区与会话(名称 / 大小 / 时间 / 状态) |
session_delete_scan | 只报统计:总数、运行中数量、每个工作区占多大 |
session_delete_remove | 批量删除;返回结果里 needRestart 为真时要提醒用户重启 |
HTTP 接口(设置页使用)
GET /dsh-session-cleanup-pro-4c1d/api/tree → 工作区分级树
POST /dsh-session-cleanup-pro-4c1d/api/delete { ids: [...] } → 批量删除
GET /dsh-session-cleanup-pro-4c1d/health → 探活 + features
安全边界
- 只读 + 删除会话产物:不碰 DSH 自己的代码、配置树、其他插件的数据;
- 工作区登记原子写回:临时文件 + rename,写到一半崩溃不会留下半个 JSON;
- 并发串行化:同时删多个会话时,登记写回排队执行,不会互相覆盖;
- 失败不静默:哪一步失败、失败原因都会显示在设置页上;
- 默认保护运行中会话:想删当前会话需要先关掉保护开关;
- 会删除数据:删除不可恢复,请确认后再勾选。
兼容性
- 需要 DSH ≥ 0.2.1-rc.1(
package.json 的 engines.dsh);
- 客户端半侧声明
dsh.client.platform: "web";桌面客户端加载的也是同一套 web 客户端;
- 插件不写自己的状态文件,所有数据都直接来自
$DSH_HOME。
开发
node --experimental-vm-modules tools/syntax-check.mjs # 语法检查
node --test test/ # 全部测试
node test/smoke.mjs # 在真实数据副本上跑删除
node test/dump.mjs # 打印真实扫描结果
smoke.mjs 会把真实的 $DSH_HOME 复制到临时目录再删,不动真实数据。
目录结构:
dsh-session-cleanup-pro/
├── index.js # 宿主半侧入口:HTTP 路由 + Agent 工具
├── client.js # 浏览器半侧:设置分区「会话清理」
├── cordis.patch.yml # bundle 声明
├── src/
│ ├── shared/constants.js
│ └── host/
│ ├── layout.js # 会话在磁盘上的落点
│ ├── registry.js # workspace.json 读写(原子替换 + 串行化)
│ ├── scanner.js # 扫描并分级成树
│ ├── deleter.js # 删除执行(宿主登记 API + 文件 + 推送)
│ ├── service.js # 服务层
│ ├── api.js # HTTP 路由
│ └── tools.js # 3 个 Agent 工具
├── tools/ # 语法检查 / 市场索引生成
└── test/ # 冒烟 / API / 删除 / 配置树 / 客户端翻译测试
收录与插件市场
本仓库按 dsh-plugin.org 的收录要求组织:
- 公开仓库 + 根目录
package.json(包名、版本、engines);
- 导出的插件入口符合 DSH 规范(
apply(ctx));
- README 含可复制的安装命令;
- MIT 许可证。
GitHub 仓库需要添加 topic dsh-plugin,站点才会自动发现与收录;提交入口:
https://dsh-plugin.org/zh/submit。
注意:想出现在 DSH 应用内的「插件中心」,还需要把 0.2.x 发布到 npm;
只发 GitHub 时仍会被站点收录,安装方式为 dsh plugin --profile web add github:gcluffy/dsh-session-cleanup-pro。
English
A DSH plugin that adds real session deletion: a Settings → Session cleanup section listing
sessions grouped by workspace with search, multi-select and batch delete, plus three agent tools
(session_delete_list, session_delete_scan, session_delete_remove). Deletion removes the
session log directory, its projection cache and the workspace record (through the host registry),
then broadcasts api-session/removed so the UI updates without a restart. Running sessions still
need a DSH restart before the host releases them.
Install with the in-app plugin manager (paste https://github.com/gcluffy/dsh-session-cleanup-pro) or:
dsh plugin --profile web add github:gcluffy/dsh-session-cleanup-pro
Requires DSH ≥ 0.2.1-rc.1. MIT licensed. Not affiliated with DeepSeek.
License
MIT