dsh-plugin-healthcheck:装完插件不重启,先验再上线

前言

在 DeepSeek Harness(DSH)里,dsh plugin add 负责把插件登记进 profile,但装完并不会自动验证插件能否正常加载。常见问题要等到下次后端重启才暴露:缺构建产物导致 loader fibers failed、依赖声明不当引发 ERR_MODULE_NOT_FOUND、核心包被装成副本造成模块双实例,乃至供应链投毒。下面介绍社区插件 dsh-plugin-healthcheck,它把静态检查、配置组合校验、隔离试跑和木马扫描串成一条链路,让你在重启后端之前就能发现问题,并提供一键修复、自动回滚或预制提示词等处置手段。

这是什么

dsh-plugin-healthcheck 是 DSH 的插件健康检查工具,维护者为 chenw2759-wq,在 SkillHub 社区目录中归类为 admin-security,当前 GitHub 星标 14、fork 1,许可证为 MIT(版本 0.1.0)。

它在 Web GUI 设置面板中提供「插件检测」入口,核心思路是:纯静态检查 + 配置组合 + 隔离试跑 + 木马扫描,发现异常后可自动修复、自动回滚,或把复杂问题打包成预制提示词交给 agent 处理。

它解决什么问题

DSH 的插件安装流程只完成登记,不做启动验证。README 中列举了若干真实事故类型及对应拦截方式:

事故 根因 拦截方式
启动报 ERR_MODULE_NOT_FOUND files 白名单漏掉代码分割产物 C1 files 完整性
后端启动报缺 zod / schemastery 插件登记成 link: 依赖,绕过 profile 的 node_modules C2 依赖声明审计
agent 报 Cannot read properties of undefined (reading 'prepare') file: 依赖装出 harness 核心包副本,模块双实例 C3 高危副本检测
dsh-skin CLI not found(Windows) 命令不在注册表 PATH C5 Windows 命令
改了 link:file: 不生效 pnpm 不重解析 lockfile C6 lockfile 一致性
被禁用的插件长期残留在依赖里 禁用只压制症状 C7 禁用插件识别
供应链投毒 / 恶意代码 发布包内注入恶意逻辑 C8 木马扫描
启动报 loader fibers failed 插件未构建或 cordis 用法错误 C9 cordis 用法检测 + L2 隔离试跑

README 还以 dsh-ssh-workspace 为例说明:插件 lib/ 未构建、异步 ctx.plugin() 后同步取服务,会在重启时触发 cannot get property "fs" without inject。L2 隔离试跑能在子进程完整 boot 中提前复现同类错误,而不必等用户重启后端。

核心功能

L0 静态检查(不加载、不启动)

在完全不加载插件代码的前提下,逐项审计:

  1. C1 files 完整性files 白名单与实际 lib 产物对比,缺 chunk 即报错。
  2. C2 依赖声明:检查 link: 是否带运行时依赖、file: 是否带 harness peer。
  3. C3 高危副本:检测 cordis、cosmokit、dsh-tools、schemastery、dsh-credentials、dsh-home-paths 六个核心包是否被装成真实目录副本。
  4. C4 依赖可解析:从插件锚点逐个试解析依赖。
  5. C5 Windows 命令execFile/spawn 引用的命令在注册表 PATH 中是否有对应 .exe
  6. C6 lockfile 一致性:specifier 与 lockfile version: 前缀是否一致。
  7. C7 禁用插件:识别被 disabled 但仍登记的插件。
  8. C9 cordis 用法:静态检测三类错误——ctx.plugin() 后同步取服务、直接 new 需 config 的 Service 却缺 config、访问的服务不在 inject 声明里。

L1 配置组合

复用基座 composeEntries 组合 bundle、profile 与 home 补丁层,与真实启动使用同一算法,检测补丁语法错误、行 id 冲突、补丁跳失。

L2 隔离试跑

这是「不重启试跑」的核心能力。插件在子进程中完整执行 boot() 加载全树,webserver 端口偏置为 0,与运行中后端零冲突;基座 assertEntriesActivated 断言每个启用插件都已激活,超时 90 秒捕获 hang。失败后可自动回滚——写 home patch 禁用行,HMR 热生效,无需重启。

C8 木马扫描(纯静态、隔离)

木马扫描遵守隔离铁律:只 readFile,绝不 import、require 或执行插件代码。覆盖 7 类恶意模式(下载执行、凭据窃取、外联回传、混淆后门、持久化、破坏性、环境劫持)。强组合命中(如下载执行、破坏性、凭据+外联)报 error,单一命中报 warn 提示人工复核。密钥、令牌、私钥在证据中一律脱敏为 [REDACTED]。扫描跳过 tests、node_modules 和构建产物,对 schemastery 惯用法、数据解码、回环 IP 等场景做了误报控制。

修复与铁律

修复执行器有一条硬性约束:严禁修改 harness 源码或安装本体,只允许修改:

  1. 插件代码(~/.dsh/plugins/**
  2. 配置层(~/.dsh/profiles/**~/.dsh/cordis.patch.yml

所有写路径经 assertSafeTarget 门禁校验,界面弹确认后路由仍要求 confirmed: true。需要判断力的修复打包成预制提示词交给 agent,修复执行器自身不跑 LLM。

安装与启用

下面三步来自插件 README 的官方安装说明:

# 1. 克隆到插件目录
mkdir -p ~/.dsh/plugins
cd ~/.dsh/plugins
git clone https://github.com/chenw2759-wq/dsh-plugin-healthcheck.git

# 2. 装进 web profile
npx @deepseek-ai/dsh plugin --profile web add "file:$HOME/.dsh/plugins/dsh-plugin-healthcheck"

# 3. 重启后端,打开左下角设置 → 「插件检测」

Windows 下 file: 路径需使用正斜杠绝对路径,例如 file:C:/Users/<你>/.dsh/plugins/dsh-plugin-healthcheck

典型用法

图形界面

  1. 打开 Web GUI 左下角设置,在导航中点「插件检测」;
  2. 选择作用域(全部插件或指定插件)与检测层级(L0 / L1 / L2 / 木马扫描);
  3. 点「开始检测」;
  4. 结果按 severity 徽标列出,每条含证据与修复动作:一键修复(确定性,弹确认)、自动回滚(L2 失败写 disabled 行,HMR 热生效)、复制提示词(复杂问题交给 agent)。

HTTP 路由

也可直接调用后端路由:

  • /healthcheck/inventory — 插件清单
  • /healthcheck/run — 执行检测
  • /healthcheck/status — 查询状态
  • /healthcheck/repair — 执行修复
  • /healthcheck/rollback — 自动回滚
  • /healthcheck/history — 历史记录

适用场景与注意

适合谁: 经常通过 dsh plugin add 安装社区插件的 DSH 用户;需要在 CI 化安装流程中做装后验证的团队;关注 admin-security 类供应链风险的维护者。

使用前注意:

  1. 插件以当前 dsh 进程权限运行,L2 隔离试跑会在子进程中完整 boot 全树,安装前应自行检查源码与 MIT 许可证。
  2. 木马扫描为纯静态模式,单一命中仅 warn,需人工复核;不能替代专业安全审计。
  3. 自动修复和回滚均会修改 ~/.dsh/plugins/** 或配置层,操作前界面会弹确认,但仍建议先备份 profile 与 patch 文件。
  4. SkillHub(https://www.skillhub.cn)是独立的 DSH 插件社区目录,与 DeepSeek / 幻方无官方从属关系。

结语

dsh-plugin-healthcheck 把「装完即验」补进了 DSH 插件生命周期:L0 看文件与依赖是否合规,L1 看配置组合是否正确,L2 在隔离子进程里试跑全树,C8 做静态木马扫描。发现异常后可直接修复、回滚或交给 agent,且修复范围被铁律限制在插件与配置层,不会动 harness 本体。

  • 社区目录页:https://www.skillhub.cn/plugins/chenw2759-wq/dsh-plugin-healthcheck
  • GitHub 仓库:https://github.com/chenw2759-wq/dsh-plugin-healthcheck
羽毛球分组比赛记分
小程序二维码

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

小夜