前言¶
DeepSeek Harness(DSH)侧栏里可以归档会话,核心侧提供的是 archiveSession——给会话打归档标记。WorkspaceRegistry 没有 delete-session,SessionPersistence 也只有 create、open、flush、stat、list 等能力,界面上因此删不掉已归档会话占用的日志和缓存,长期积累会占满 ~/.dsh/sessions 等目录。社区插件 dsh-session-admin(维护者 hehf21,分类:客户端)在宿主注册两条路由,并在侧栏底部提供入口,把「删日志、清投影缓存、摘归档标记」固化成可调用接口,避免每次手写脚本。
这是什么¶
dsh-session-admin 面向本机 DSH 桌面用户:列出已归档会话,经二次确认后从磁盘删除对应数据,并更新 workspace.json 里的归档与工作区引用。插件版本 0.1.0,MIT 许可,要求 Node.js >= 20。目录页见 SkillHub,源码与说明见 GitHub。
核心功能¶
侧栏与会话清理面板¶
客户端通过 Cordis patch 注入 @deepseek-ai/dsh-client-ui-sidebar,在侧栏底部(设置上方)增加「会话清理」入口。打开后面板会:
- 列出全部已归档会话:id、占用大小、最后活动时间、是否有数据、是否正在运行;
- 支持勾选后「删除选中」,或「全部删除」;
- 删除前二次确认;执行完显示释放空间、剩余归档数量,并提示刷新页面以同步侧栏。
宿主路由¶
宿主侧注册两条同源路由(仅 POST 删除、单次最多 500 个 id,id 须匹配 ^[A-Za-z0-9_-]{1,128}$):
GET /session-admin/state
→ { ok, home, counts:{archived,onDisk,bytes}, items:[{id,bucket,onDisk,bytes,mtimeMs,live}] }
POST /session-admin/delete body: { ids: string[] }
→ { ok, deleted:[], skipped:[{id,reason}], freedBytes, freedMB, remainingArchived, backup, needRestart }
skipped 中 reason 可为:not-archived(未归档)、live(运行中)、no-data(只剩标记、数据已不存在,仍会清标记)。
两条硬闸门¶
下面两条限制在路由层强制执行,避免误删:
- 只删已归档会话:id 不在
global.archivedSessionIds内一律拒绝(not-archived)。要删常用会话,需先在侧栏归档。 - 活着的拒删:
ctx.agents.get(id)能取到的会话(含当前对话)一律拒绝(live)。
删除时改动的文件¶
经 POST 删除且通过闸门后,插件会:
- 移除
~/.dsh/sessions/<bucket>/<id>/整目录(含session.v4.jsonl.zstd等); - 移除
~/.dsh/storages/session_projcache/sessions/<id>.json投影缓存; - 更新
~/.dsh/storages/workspace.json:从global.archivedSessionIds与各workspaces[*].sessionIds去掉该 id;写前备份为.bak-session-admin-<时间戳>。
已知行为:宿主进程仍可能按内存中的旧集合渲染;若其它操作回写 workspace.json,归档标记可能被写回,但会话数据已不在。重启后启动期会剪掉指向不存在会话的标记。面板提示的「刷新页面」用于让侧栏立刻同步。
安装与启用¶
README 给出的本机安装示例(路径需换成你本机插件目录):
dsh plugin --profile desktop add 'link:D:/大龙虾/dsh-plugins/dsh-session-admin'
dsh plugin 会把包写入 profile 的 package.json 的 dependencies 与 dsh.profile.bundles,并在 node_modules 建立 junction。装完后重启一次 DSH 桌面(宿主侧为进程内插件,不重启不生效);浏览器侧刷新页面即可看到侧栏入口。
回滚:
dsh plugin --profile desktop remove dsh-session-admin
必要时用 profile 下的 package.json.bak-session-admin-20261026、pnpm-lock.yaml.bak-session-admin-20261026 覆盖回去。
典型用法¶
- 在 DSH 侧栏把不再需要的会话归档。
- 打开侧栏底部「会话清理」,查看列表中的大小与
live状态。 - 勾选目标会话,点「删除选中」或「全部删除」,在确认框中确认。
- 根据面板提示刷新页面,使侧栏与会话列表与磁盘状态一致。
开发者可在仓库 tests/ 下用 Node 自测(不依赖真实 DSH 进程):
node tests/session-admin-test.mjs # 删除核心逻辑(临时 DSH_HOME)
node tests/session-admin-route-test.mjs # 桩 Context 打两条路由
node tests/session-admin-client-test.mjs # 最小 hook 运行时渲面板并点删除
适用场景与注意¶
适合长期在本机 DSH 桌面跑多工作区、归档会话较多、需要回收磁盘空间的开发者。不适合当作「一键清空所有会话」工具:未归档与正在运行的会话会被跳过。
插件以当前 DSH 进程权限读写 ~/.dsh;安装前建议阅读 源码与 LICENSE,确认行为符合预期。SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系;星标与版本以仓库与目录页为准。
结尾¶
dsh-session-admin 补的是 DSH 核心「能归档、不能删盘」的空档:侧栏入口加 /session-admin/state 与 /session-admin/delete,在归档与 live 两道闸门下清理日志、投影缓存和 workspace 标记。需要时可从 SkillHub 目录页 进入说明,或直接在 GitHub 查看 README 与 issue。