dsh-plugin-health-check:装 DSH 插件前,在真实 profile 上做一次只读体检

前言

DeepSeek Harness(DSH)的插件能否加载,并不取决于包有没有装进目录,而取决于当前 profile 选了哪些 bundle、patch 按什么顺序覆盖、以及包声明的版本是否被宿主接纳。很多问题要到重启之后才会暴露,表现往往是某个插件或配置项「悄悄没了」,排查成本高。

下面介绍的 dsh-plugin-health-check 由社区维护者 GlariaLuminous 发布,分类为 admin-security,在 SkillHub 目录与 GitHub 上均可找到。它沿着 profile → bundle → patch → 配置条目 把合成链路在本地静态走一遍:不启动插件、不执行命令、不改动配置,并支持把尚未安装的候选插件目录交给检查器做安装前模拟。

这是什么

dsh-plugin-health-check 是面向 DSH 用户的只读插件体检工具。它在你真实的 profile 上按 DSH 官方规则合成配置,再扫描 bundle 解析、patch 覆盖、版本兼容与 MCP 冲突等问题;也可在装新插件前传入本地源码或解包目录,只看「加上这一层之后」会新增哪些发现。

当前 package 版本为 0.3.1,许可证 MIT。项目标注为实验性:检查引擎(命令行)已在 DSH Desktop 0.2.1-rc.2 上验证;agent 工具入口较新,注册流程有不依赖宿主的测试覆盖,但尚未在真实 DSH 里长期使用。需要 Node.js 22+。

核心功能

按宿主规则合成,再静态扫描

patch 合成使用官方 @deepseek-ai/cordis-plugin-include 的算法;版本准入遵循 DSH 的 engines.dsh 优先、否则看 DSH peers 的规则,预发布版本参与比较。覆盖层顺序与宿主一致:bundle → profile → home → 命令行 --patch,并处理 disabled、分组、静态 include 与循环引用。Desktop 内置包元数据可直接从 Electron ASAR 读取,无需启动 Electron。

常见现象与发现类型

你遇到的现象 常见原因 对应发现
装完重启,插件没出现 bundle 解析不到、未声明 dsh.bundle.patch、版本不被当前 DSH 接纳 DSH_PACKAGE · DSH_VERSION
配置被另一层悄悄换掉 patch 按 id 整体替换 config;id 重复、覆盖未命中、include 成环 DSH_PATCH
两个 MCP 服务只剩一个 同一作用域里 serverName 重复,重复注册会被拒绝 R1 · R8
检查结果为空,不确定算不算健康 动态表达式、未解析的模块、服务隔离 DSH_COVERAGE,状态为 incomplete

报告与退出码

命令行或 agent 工具会给出结构化结果。JSON 报告包含 packages、entries、findings、coverage、status 和 exit_code;配置正文、凭据和 YAML 错误片段不会写入报告,本地安装路径会保留以便定位,分享前请自行脱敏。

退出码 状态 含义
0 pass 已覆盖的静态配置检查通过
1 fail 存在致命发现
2 error 参数、路径或运行环境错误
3 incomplete 覆盖不完整,需补充信息或运行态核实

安装前模拟(candidate)

把候选插件的本地目录交给 --candidate 时,候选包不会被安装,也不会执行其构建脚本或 apply。同名包按包身份替换旧版本;否则作为新的一层加入。报告只列出新增问题并保留原环境 baseline;原环境本身失败或不完整时,不会给出干净的通过结论。

与生态里其他「体检」项目的分工

据各项目公开 README,侧重点不同、有重叠也互补:dsh-plugin-doctor 偏插件作者侧(manifest、patch、打包后在全新 profile 的安装验证);dsh-doctor 偏 profile 层字段丢失与 patch 引用;dsh-xray 偏运行中 DSH 的实际加载与运行时健康。本插件侧重用户侧:在真实 profile 上按官方算法合成后的静态检查,并支持安装前模拟。

安装与启用

作为 DSH 插件装进 profile,使用 README 中的命令(示例 profile 为 web,可按你的实际 profile 替换):

dsh plugin --profile web add github:GlariaLuminous/dsh-plugin-health-check

重启 DSH 后,对 agent 说明意图即可,例如:

检查我的 DSH 插件。

或安装前询问:

我想装 /path/to/plugin,会不会和现有插件冲突?

agent 会调用只读工具 plugin_health_check;后一种说法会把目录作为 candidate 传入。

不装成插件、仅跑命令行时,可在克隆仓库并 npm ci --ignore-scripts 后执行(默认读取 $DSH_HOME,未设置时使用 ~/.dsh):

node scripts/dsh_health_check.mjs --profile desktop

--profile web 检查 Web profile;--json 输出结构化报告。参数详见仓库内 docs/dsh.md。

也可把完整仓库放到 $DSH_HOME/skills/dsh-plugin-health-check/ 或项目根 .dsh/skills/dsh-plugin-health-check/,保留 SKILL.md 与 scripts/ 相对位置,使用 /dsh-plugin-health-check 或自然语言触发 skill 工作流。

典型用法

检查当前 profile

node scripts/dsh_health_check.mjs --profile desktop --json

安装前模拟候选插件

node scripts/dsh_health_check.mjs --profile desktop --candidate /path/to/plugin --json

通过插件安装后,用自然语言让 agent 调用 plugin_health_check 即可,无需记忆子命令。

适用场景与注意

适合谁: 经常在同一 profile 里叠加多个 DSH 插件、或准备从本地目录安装第三方包的用户;希望在重启前发现 bundle/patch/版本/MCP 冲突的人。

边界: 这是静态检查。未验证运行时注册的工具、命令和 hook,Agent preset 激活,MCP 实际连接与 tools/list,会话权限等。!!js 表达式只当数据,不求值。因此 STATIC PASS 仅表示「已覆盖的配置未发现问题」,不是「插件一定能运行」,更不是「插件安全」。无发现、版本未知或动态配置过多时,结果会标记为 incomplete,不会因为没采到数据就断言一切正常。

安全与权限: 作为 DSH 插件安装后,工具以当前 DSH 进程权限运行;安装前应阅读源码与 MIT 许可证,确认来源为 GlariaLuminous/dsh-plugin-health-check。DSH 仍为开发者预览版,升级后请重新检查;遇到问题请带上 DSH 版本到 GitHub Issues。

SkillHub 上的插件目录由社区维护,与 DeepSeek / 幻方无官方从属关系,并非官方应用商店。

结尾

dsh-plugin-health-check 把「装完才知道能不能加载」的问题前移到合成与静态扫描阶段:只读、可重复,并支持 candidate 安装前模拟。目录页:https://www.skillhub.cn/plugins/GlariaLuminous/dsh-plugin-health-check;源码与文档:https://github.com/GlariaLuminous/dsh-plugin-health-check。

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

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

小夜