dsh-reclaim:审计并安全回收 DSH 磁盘占用

前言

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 会逐项列出插件依赖的宿主接口是否存在,以及缺了会影响什么;版本不匹配时适合先做这一步诊断。

典型用法

  1. 在 设置 → 空间回收 打开审计面板,查看会话、附件、缓存分项占用与风险分级。
  2. 对标记为安全的可重建缓存族,可批量移入隔离区;需确认项建议逐项核对后再操作。
  3. 误移入隔离区的批次,从隔离区恢复;确认不再需要某批隔离数据后,再在界面执行彻底清空(仅影响该批隔离内容)。
  4. 需要脚本或自动化排查时,用 /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
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye