dsh-plugin-storage-inspector:DSH 本地存储分析与跨项目依赖治理

前言

在 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:工作区、会话与文件分类

  1. 工作区与对话统计:按工作区汇总项目磁盘体积与会话记录体积;列出该工作区下每条 Session(活跃/已归档),分别统计记录文件(*.jsonl.zstd)与投影缓存 session_projcache 的体积及时间。
  2. 物理文件分类:将文件归入 Code、Dependencies、Build、VCS & Metadata、Docs & Configs、Media & Assets 等类别,以色条展示占比,并列出大目录与大文件。
  3. 全局概览:本地总空间、工作区文件总计、会话记录总计、~/.dsh/attachments 全局附件库,以及各类别分布。
  4. 可选清理:通过 API 先拉取分组目标,用户显式勾选后提交删除;仅针对构建目录、依赖目录、归档会话与已知缓存等,且受路径白名单约束(见下文「安全边界」)。

依赖治理 Tab:四层只读事实链

该 Tab 不修改任何项目文件,不写入私有 CAS,不创建符号链接。

  1. Layer 1 项目发现:在受管目录内遍历,深度 ≤ 4,黑名单跳过,并用 realpath 去重。
  2. Layer 2 环境指纹:对每个含 package.json 的项目,按优先级读取 Node 主版本:.nvmrc > .node-version > engines.node,置信度为 exact / multi / missing。
  3. Layer 3 依赖事实:解析 npm 的 package-lock.json(v2/v3)精确版本;pnpm/yarn 等未受管锁文件保守跳过,不臆测版本。
  4. 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:刷新治理缓存。

显式清理(会写磁盘)

  1. GET /api/storage-inspector/cleanup/targets:获取可分组的清理目标。
  2. 在 UI 中勾选目标。
  3. 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 锁版本漂移,再人工决定是否统一版本或升级策略。

使用注意

  1. 插件以当前 DSH 进程的用户权限运行,能遍历与 stat 其可访问的主目录下项目;安装前宜阅读源码与 MIT 许可证,确认清理白名单逻辑符合你的目录布局。
  2. 无出站网络、无模型工具:适合对「管理类插件」有边界要求的场景;依赖治理目前以 npm lockfile v2/v3 为主,非 npm 生态需接受「保守跳过」。
  3. 仓库测试:npm test(node --test tests/**/*.test.mjs),README 记载 28 passing;可自行在插件目录验证后再用于生产 profile。

结尾

dsh-plugin-storage-inspector 把 DSH 本地的「盘从哪来」和「多项目依赖是否一致」收到同一设置分区:前者支持可选的白名单清理,后者全程只读。社区目录页:skillhub.cn 插件条目;源码与文档:GitHub 仓库。

羽毛球分组比赛记分
小程序二维码

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

小夜