前言¶
在 DeepSeek Harness(DSH)里长时间跑多个工作区与对话后,磁盘占用往往来自三块:项目里的 node_modules 与构建产物、会话记录与投影缓存、以及全局附件库。单靠系统自带的「关于本机」或手动 du,很难把「哪个工作区、哪条 Session、哪类文件」拆开看;多仓库并行时,Node 版本与 npm 锁文件是否在项目之间漂移,也缺少一个只读、不改项目的汇总视角。
下面介绍社区插件 dsh-plugin-storage-inspector(维护者 Siom126,分类 admin-security)。它在 DSH 设置页提供独立分区,侧栏带磁盘占用徽标,把本地存储全景与跨项目依赖治理(只读)放在同一面板的两 Tab 里;不向模型暴露工具,也不发起外网请求,宿主侧只注册本地路由 /api/storage-inspector/*。
这是什么¶
一句话定位:DeepSeek Harness 的本地存储分析器,以及只读的跨项目依赖治理插件。
- 仓库:
github:Siom126/dsh-plugin-storage-inspector - 当前
package.json版本:1.1.1 - 许可证:MIT
- 运行要求:Node >= 20.0.0
与「全盘清理脚本」的区别在于:统计与依赖分析默认只读;唯一会写磁盘的能力是用户勾选后的白名单内目录清理,且每条路径删除前经 isPathSafeToClean() 校验。
核心功能¶
存储 Tab:工作区、会话与文件分类¶
- 工作区与对话统计:按工作区汇总项目磁盘体积与会话记录体积;列出该工作区下每条 Session(活跃/已归档),分别统计记录文件(
*.jsonl.zstd)与投影缓存session_projcache的体积及时间。 - 物理文件分类:将文件归入 Code、Dependencies、Build、VCS & Metadata、Docs & Configs、Media & Assets 等类别,以色条展示占比,并列出大目录与大文件。
- 全局概览:本地总空间、工作区文件总计、会话记录总计、
~/.dsh/attachments全局附件库,以及各类别分布。 - 可选清理:通过 API 先拉取分组目标,用户显式勾选后提交删除;仅针对构建目录、依赖目录、归档会话与已知缓存等,且受路径白名单约束(见下文「安全边界」)。
依赖治理 Tab:四层只读事实链¶
该 Tab 不修改任何项目文件,不写入私有 CAS,不创建符号链接。
- Layer 1 项目发现:在受管目录内遍历,深度 ≤ 4,黑名单跳过,并用
realpath去重。 - Layer 2 环境指纹:对每个含
package.json的项目,按优先级读取 Node 主版本:.nvmrc>.node-version>engines.node,置信度为exact/multi/missing。 - Layer 3 依赖事实:解析 npm 的
package-lock.json(v2/v3)精确版本;pnpm/yarn 等未受管锁文件保守跳过,不臆测版本。 - Layer 4 漂移矩阵:对多项目共用的三方包输出
identical、drift-minor、drift-major、bucket-conflict,并分级为blocked/warn/candidate/info,附带证据链与收敛建议。
后端对治理请求使用 single-flight 与 60s TTL 缓存,减轻频繁刷新带来的 IO 压力。
安装与启用¶
官方安装命令(来自仓库 README):
dsh plugin add github:Siom126/dsh-plugin-storage-inspector
仓库声明了 dsh.bundle(cordis.patch.yml 挂载 storage-inspector),上述一条命令即可。安装后重启 DSH 或刷新页面;面板出现在 设置 → 存储空间分析,侧栏图标可全屏打开同一界面。
本地联调时,可在 profile 的 package.json 中用 link: 指到工作副本,并在 dsh.profile.bundles 中注册 bundle 名,将 node_modules/dsh-plugin-storage-inspector 链到同一目录后重启 DSH(详见 README「本地开发」小节)。
典型用法¶
查看存储与刷新扫描¶
GET /api/storage-inspector/data:聚合数据。GET|POST /api/storage-inspector/refresh:触发或配合刷新。GET /api/storage-inspector/workspace、GET /api/storage-inspector/disk:工作区与磁盘相关视图。
界面侧以设置页双 Tab 与侧栏入口为主;具体交互随 DSH 主题(深/浅)切换。
只读依赖总览¶
GET /api/storage-inspector/deps/overview:跨项目概览。GET /api/storage-inspector/deps/project:单项目细节。POST /api/storage-inspector/deps/refresh:刷新治理缓存。
显式清理(会写磁盘)¶
GET /api/storage-inspector/cleanup/targets:获取可分组的清理目标。- 在 UI 中勾选目标。
POST /api/storage-inspector/cleanup/execute:执行删除(内部为对白名单内路径的fs.rm -rf)。
清理前插件会拒绝位于主目录之外的路径,以及 /、~、~/.dsh、~/.dsh/profiles 等关键路径;未知目录仅当叶子名为 dist、build、node_modules、venv 等已知构建/依赖名时才允许;已归档 DSH 会话仅允许落在 ~/.dsh/sessions 与 ~/.dsh/storages/session_projcache/sessions 之下。
适用场景与注意¶
适合谁
- 长期在单机 DSH 上维护多个工作区,需要按 Session 与文件类别定位「谁在占盘」。
- 本机多仓 Node 项目并存,希望用只读方式发现跨项目的 Node 分桶冲突与 npm 锁版本漂移,再人工决定是否统一版本或升级策略。
使用注意
- 插件以当前 DSH 进程的用户权限运行,能遍历与
stat其可访问的主目录下项目;安装前宜阅读源码与 MIT 许可证,确认清理白名单逻辑符合你的目录布局。 - 无出站网络、无模型工具:适合对「管理类插件」有边界要求的场景;依赖治理目前以 npm lockfile v2/v3 为主,非 npm 生态需接受「保守跳过」。
- 仓库测试:
npm test(node --test tests/**/*.test.mjs),README 记载 28 passing;可自行在插件目录验证后再用于生产 profile。
结尾¶
dsh-plugin-storage-inspector 把 DSH 本地的「盘从哪来」和「多项目依赖是否一致」收到同一设置分区:前者支持可选的白名单清理,后者全程只读。社区目录页:skillhub.cn 插件条目;源码与文档:GitHub 仓库。