前言¶
长期使用 DeepSeek Harness(DSH)时,~/.dsh 下会积累大量会话正文、列表缓存和归档条目。直接在文件系统里删目录,一旦误删或删了仍在使用的会话,恢复成本高。手动筛「哪些可以删」也费时。
dsh-session-janitor 是面向上述场景的第三方 DSH 插件:在侧边栏提供独立页面,列出会话记录与归档缓存,删除先进入回收站、可恢复,并对近期仍在写入的会话做拦截。下面介绍其定位、能力与安装方式。
这是什么¶
dsh-session-janitor(仓库 guokecloud/dsh-session-janitor)由 guokecloud 维护,在 SkillHub 等社区目录中归类为记忆类插件。一句话:DSH 会话清理工具,流程为列表 → 勾选 → 移入回收站 → 可恢复 → 确认后彻底清空;删除不会立刻从磁盘抹掉,先移到 ~/.dsh/session-trash/<时间戳>/,误操作可以救回。
插件版通过 Cordis patch 注册同源 HTTP 路由与侧边栏入口;也可不装插件、单独跑本地服务使用同一套界面逻辑。
核心功能¶
会话记录¶
在界面中勾选会话后移入回收站;支持「只选 30 天前」一键勾选老会话,以及「全选 / 清空选择」。删除会话时,会同时将 storages/session_projcache/sessions/<id>.json 移入回收站,恢复时一并还原,避免出现列表缓存还在、正文已删的孤儿条目。
归档缓存¶
可清理 storages/session_projcache_archive_manager_v2 下的历史归档条目(sessions/*.json)。
回收站¶
勾选后可恢复到原路径;「彻底清空回收站」为不可恢复操作。顶部还可「打开回收站文件夹」「打开会话目录」。
使用中保护¶
会话「最后活动时间」取 session.v4.jsonl.zstd 的 mtime;最近 10 分钟内被写过的会话在界面标黄,默认服务端拒绝删除,勾选顶部「强制」开关后才放行。判定依赖写入时间而非文件锁;正在写入的会话还有 rename 失败等额外保护。
安全与监听范围¶
服务只监听 127.0.0.1;请求校验 Host 须为本机回环、Origin 须同源、Sec-Fetch-Site 不能为 cross-site,否则返回 403。路径均做白名单校验,禁止 .. 与目录穿越。
明确不处理的范围¶
只处理会话与归档缓存;不动 schedule.json、workspace.json、用量账本等运行状态。
数据目录与 HTTP 接口¶
默认数据根为 ~/.dsh,测试可用环境变量 DSCC_ROOT 覆盖:
sessions/<项目>/<会话>/session.v4.jsonl.zstd
storages/session_projcache/sessions/<sessionId>.json
storages/session_projcache_archive_manager_v2/sessions/*.json
session-trash/<时间戳>/manifest.json
插件版挂在 DSH GUI 同源端口,独立版默认 8788。主要接口:
GET /dsh-session-janitor/
GET /dsh-session-janitor/api/ping
GET /dsh-session-janitor/api/list
POST /dsh-session-janitor/api/trash
POST /dsh-session-janitor/api/restore
POST /dsh-session-janitor/api/purge
POST /dsh-session-janitor/api/reveal
安装与启用¶
插件版(推荐,需已安装 DSH)¶
在插件仓库目录中执行安装脚本(会先备份 profile 的 package.json):
node install-plugin.mjs
上面命令只打印将要执行的操作。确认无误后:
node install-plugin.mjs --apply
安装依赖 profile 的 dsh.profile.bundles 通过 link: 指向本目录。重启 DSH 后生效:左侧边栏出现「会话清理」入口,点开为完整界面(独立页面,不占当前会话)。也可访问 http://127.0.0.1:<DSH GUI 端口>/dsh-session-janitor/。
package.json 要求 Node ^22.19.0 || >=24.0.0,DSH ^0.2.0-rc.2 || ^0.2.1-rc.2,peer 依赖 @deepseek-ai/cordis ^4.0.1。当前包版本为 0.2.4,许可 MIT。
卸载:从 profile package.json 的 dsh.profile.bundles 移除 dsh-session-janitor,执行 pnpm remove dsh-session-janitor(或用备份 package.json.bak-<时间戳> 覆盖),再重启 DSH。
独立版(无需重启 DSH)¶
双击目录内 启动会话清理.cmd,浏览器打开 http://127.0.0.1:8788/dsh-session-janitor/;关闭对应最小化窗口即停止服务。端口被占用时可手动指定:
node standalone.mjs --port 8899 --open
典型用法¶
- 打开侧边栏「会话清理」或上述独立版 / 同源 URL。
- 在「会话记录」中勾选要清理的项,或点「只选 30 天前」再微调;标黄项表示近期有写入,默认不可删,除非开启「强制」。
- 执行移入回收站;需要时在「回收站」恢复,或「彻底清空回收站」永久删除。
- 若有归档膨胀,在「归档缓存」区块勾选后同样走回收站流程。
- 顶部「刷新」更新列表;「打开会话目录」「打开回收站文件夹」便于对照磁盘内容。
适用场景与注意¶
适合需要定期整理 ~/.dsh 会话与归档、又希望删除可回滚的 DSH 用户。插件版改 profile 后必须重启 DSH 才会挂上路由;独立版即开即用。
插件以当前 DSH 进程权限读写本机 ~/.dsh(或 DSCC_ROOT)。安装前请自行查看 GitHub 仓库 源码与 MIT 许可证,确认符合你的环境与合规要求。DSH 生态强调「一切皆插件」;SkillHub 等目录为社区站点,与 DeepSeek / 幻方无官方从属关系,本文介绍的是第三方插件,非官方应用商店条目。