gankudadiz/dsh-reclaim ↗★ 0

dsh-reclaim

审计并安全回收会话、附件及缓存占用的空间 适合磁盘空间紧张、需要安全清理历史附件与缓存的用户。

套件
dsh-reclaim
相容性
待驗證
Harness 依賴範圍
>=0.1.5-rc.1 <0.2.0 || >=0.1.6-0 <0.1.7-0 || >=0.1.7-0 <0.1.8-0
版本
0.1.0
授權
MIT
最近更新
2026年9月24日

安裝

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:gankudadiz/dsh-reclaim

dsh-reclaim

Audit and safely reclaim the disk space DeepSeek Harness keeps forever. 审计并安全回收 DeepSeek Harness 永久占用的磁盘空间。

DSH 插件。功能已完成,尚未发布到 npm——安装方式见下方「安装」。


为什么有这个项目

DSH 官方明确不回收附件。@deepseek-ai/dsh-attachment-local 的 README 原文:

Images are kept forever — stored images are never deleted automatically, and nothing collects unreferenced objects.

官方也说明了推迟的原因:

Retention and garbage collection are deferred because resumed and forked sessions may share immutable objects …

也就是说,这不是漏做,而是一个需要先解决正确性问题的功能。dsh-reclaim 把它做出来,并且尊重官方指出的那条约束。

它做什么

  • 审计 会话、附件、可重建缓存各自占了多少、还有谁在用
  • 按分档规则给风险分级:安全(可批量清理)/ 需确认(逐个查看)/ 危险(不可清理)/ 未分类(只报告)
  • 清理不是删除:数据搬进插件自带的隔离区,可随时恢复
  • 只读的 Agent 审计工具(模型能查、不能删)

安装

装进一个带 web 层的 profile(也就是平时用来开界面的那个):

# 从 GitHub 安装(尚未发布到 npm)
dsh plugin --profile web add "git+https://github.com/gankudadiz/dsh-reclaim.git#main"
dsh web

也可以下载本仓库 Release 里附带的预构建包,用 file: 安装——省去 clone 与依赖安装。

装完打开 设置 → 空间回收。

⚠️ 不要装进一个全新的空 profile。 dsh plugin --profile add 建出来的 profile 只带 @deepseek-ai/dsh-base,里面没有任何东西提供 web 连接层,插件会一直停在 pending (waiting for service: connection),宿主启动失败。要用自己的 profile 时,让它包含 @deepseek-ai/dsh-web-app(例如以自带的 web 模板为底),再装本插件。

装好后想确认它在服务,可以直接问它:

curl -b  http://127.0.0.1:/api/dsh-reclaim/health

已发布到 npm 时会多一条更短的路径:dsh plugin --profile web add dsh-reclaim。尚未发布, 所以上面那条 git+https:// 才是当前可用的方式。

支持的 DSH 版本

DSH 处于 developer preview,官方 README 明确写着「THERE WILL BE COMPATIBILITY-BREAKING CHANGES」。 而且它不强制检查插件声明的兼容范围(engines.dsh / dsh.manifestVersion 官方原话是"仅作声明", 安装器与加载器都不校验)。所以:装得上不等于跑得对,声明范围只能当文档读。

支持的 DSH状态说明
0.1.5-rc.1 … 0.1.5-rc.3已验证DSH 0.1.5-rc.1 宿主 + 0.1.5-rc.2 依赖包,真实数据 + 真实浏览器
0.1.7-rc.1已验证独立 home + 0.1.7-rc.1 的完整依赖树(277 个包)。能力探测 7/7 通过;该版本导出 dshCachePath,插件据此自动改选了新布局 cache/attachments/request-images;真实浏览器面板正常
0.1.6-*推断,未实测位于两个已验证版本之间,故一并纳入范围;真要依赖它之前建议先验一遍

版本范围的实现方式值得说明:必须逐 minor 串 OR 子句, >=0.1.5-rc.1 =0.1.6-0 =0.1.7-0 每条带**止于下一个 minor**,因此它只声明这三个已验证的 minor——未发布的 0.1.8不在其中。engines.dsh与peerDependencies` 里这段文本逐字相同,避免两者漂移。

装好之后,一条请求就能看出当前宿主对不对得上——/health 的 capabilities 字段逐项列出本插件依赖的 宿主接口在不在(ctx.effect、ctx.connection.fetch.register、ctx.get,以及 sessions / attachments / sessionQuery / tools 四个服务),每项都写明缺了会坏什么。版本对不上时,这是最快的诊断入口。

为什么不写成"看起来更合理"的范围

顺手记在这里,免得后人(包括我自己)把它"简化"回去:

  • `>=0.1.5-rc.1 =0.1.0-rc.8 =0.1.5-rc.1 =0.1.6-0 =0.1.7-0 只要有任何一个会话的引用关系读不出来,「孤儿附件」这一档就整体暂停。

宁可少删,不可删错。完整的分档判定规则、安全保证与已知边界见 docs/safety.md。

不做的事

不清理日志 / 临时文件 / 备份目录;不管理 profiles/ 下的插件依赖;不做定时自动清理;不允许模型替用户删数据;不支持远端 / 共享存储后端。

上面这些不是设计目标,而是已经实现的行为:所有破坏性操作都要人在界面上明确确认,Agent 侧只有只读工具。

许可

MIT