前言¶
DeepSeek Harness(DSH)本地附件由 @deepseek-ai/dsh-attachment-local 管理,官方 README 写明:Images are kept forever——已存图片不会自动删除,也没有组件去收集无引用对象。推迟做回收,是因为 resumed / forked 会话可能共享不可变对象,需要先保证正确性。
长期用 DSH 做智能体开发,会话、附件和各类缓存会持续增长,却缺少一套「看清占用、按风险清理、误删可恢复」的管理手段。社区插件 dsh-reclaim(仓库 @was35/dsh-reclaim,维护者 was35)面向 admin-security 场景,在尊重官方约束的前提下补这一块。
这是什么¶
dsh-reclaim 是 DSH 插件:审计会话、附件、可重建缓存各自占多少空间、还被谁引用;按规则给风险分级;清理时数据搬进插件自带隔离区而非直接删除,可随时恢复。附带只读 Agent 审计工具——模型能查、不能删。
功能已完成,尚未发布到 npm(package.json 当前版本为 0.3.0,MIT 许可证)。目录页:was35/dsh-reclaim;源码:github.com/was35/dsh-reclaim。
核心功能¶
审计与分级¶
插件会统计并展示:
- 会话占用
- 附件占用及引用关系
- 可重建缓存占用及引用关系
按分档规则标注风险:
| 级别 | 含义 |
|---|---|
| 安全 | 可批量清理 |
| 需确认 | 建议逐个查看 |
| 危险 | 不可清理 |
| 未分类 | 仅报告 |
可清什么、不可清什么¶
可重建缓存会被枚举(例如派生图片、原子写暂存残留等族),可移入隔离区;仓库测试与文档说明这类数据可以逐字节还原回原处。
附件对象不在可重建缓存之列:它们至少被一个会话引用,分级规则恒为「危险」。这是设计取舍,不是遗漏,详见仓库 docs/safety.md。
隔离区与彻底清空¶
清理不是删除:选中项搬进插件隔离区,需要时可恢复。
唯一不可恢复的操作,是你在界面上对某一批隔离区内容明确选择彻底清空——只销毁隔离区里已经搬进去的批次,不碰仍在使用的活数据。
Agent 侧¶
提供只读审计工具,供 Agent 查询占用与引用;不能通过工具执行删除。
安装与启用¶
装进带 web 层的 profile(平时用来开界面的那个),不要用全新空 profile 单独装插件——空 profile 只有 @deepseek-ai/dsh-base,没有 web 连接层,插件会停在 pending (waiting for service: connection)。若自建 profile,需包含 @deepseek-ai/dsh-web-app(例如以官方 web 模板为底)。
当前唯一安装路径(仓库尚未提供 Release 包):
# 从 GitHub 安装(尚未发布到 npm)
dsh plugin --profile web add "git+https://github.com/was35/dsh-reclaim.git#main"
dsh web
装好后打开 设置 → 空间回收。
将来发布 npm 后,README 提到可用更短命令:dsh plugin --profile web add @was35/dsh-reclaim。注意上游无 scope 包名 dsh-reclaim 与本仓库 @was35/dsh-reclaim 不是同一产物,add dsh-reclaim 装到的是上游版本。
确认服务是否正常,可请求健康检查(需带上 web 会话 cookie 与本地端口):
curl -b <会话 cookie> http://127.0.0.1:<端口>/api/dsh-reclaim/health
响应里的 capabilities 会逐项列出插件依赖的宿主接口是否存在,以及缺了会影响什么;版本不匹配时适合先做这一步诊断。
典型用法¶
- 在 设置 → 空间回收 打开审计面板,查看会话、附件、缓存分项占用与风险分级。
- 对标记为安全的可重建缓存族,可批量移入隔离区;需确认项建议逐项核对后再操作。
- 误移入隔离区的批次,从隔离区恢复;确认不再需要某批隔离数据后,再在界面执行彻底清空(仅影响该批隔离内容)。
- 需要脚本或自动化排查时,用
/api/dsh-reclaim/health看能力与路径解析(例如request-images是否解析到cache/attachments/request-images、dshCachePathExported等)。
仓库维护者提供的本地验证命令(克隆仓库后,非 DSH 用户日常使用不必跑):
npm test # 单元测试
npm run test:host # 真宿主闭环:安装、启动、探 /health,清一个缓存族并还原
npm run test:all # 单元 + 宿主
npm run test:host 默认在 /tmp/dsh-reclaim-verify 建一次性 web profile,跑完删除;KEEP_HOME=1 npm run test:host 可保留该 home 继续验其他插件。脚本拒绝把 VERIFY_HOME 指向真实 $HOME(退出码 2)。
适用场景与注意¶
适合谁
- 长期在单机 DSH 上跑会话、贴图、工具调用,磁盘占用不透明、又不敢手动删
~/.dsh里文件的开发者。 - 需要在清理前看到「谁还在引用」、并希望误操作可回滚的管理员。
DSH 版本
DSH 处于 developer preview,官方说明会有兼容性破坏变更;插件声明的 engines.dsh 范围安装器不强制校验,装得上不等于跑得对。
README 与 package.json 声明的支持范围为(逐 minor 的 OR 子句,与 peer 依赖一致):
>=0.1.5-rc.1 <0.3.0-0 || >=0.1.6-0 <0.1.7-0 || >=0.1.7-0 <0.1.8-0 || >=0.2.0-rc.1 <0.3.0-0
维护者在 README 中标注 已验证 的宿主包括 0.1.5-rc.1 … 0.1.5-rc.3、0.1.7-rc.1、0.2.0-rc.2(含 desktop 端「无需专属适配」的自动化断言);0.1.6-* 为推断未实测。Node 需 >=20.0.0。
权限与安全
插件以当前 DSH 进程权限读写 home(主要依赖环境变量 DSH_HOME,与 web / desktop 共用同一 home worldview)。安装前应自行查看源码与 MIT 许可证,确认符合你的安全策略。SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系。
desktop
官方 desktop profile 不能从普通 CLI 启动(由 desktop carrier 写死端口等方式拉起);插件所需 sessions、attachments、sessionQuery 等服務在维护者测试中由 dsh-base + dsh-web-app 提供,不依赖 profile 名称。Electron 内逐点击 UI 的完整人工验证 README 仍列为待办。
结尾¶
DSH 官方暂不自动回收附件与共享对象场景下的缓存;dsh-reclaim 提供可审计、分级、隔离区可恢复的回收路径,并限制 Agent 只读。若你正在维护本地 DSH 磁盘,可从 GitHub 按上述 git+https:// 命令安装,在 设置 → 空间回收 使用。
- 目录页:https://www.skillhub.cn/plugins/was35/dsh-reclaim
- GitHub:https://github.com/was35/dsh-reclaim