dsh-plugin-selfcheck:DSH 启动时在终端输出插件清单与五项安装自检

前言

DeepSeek Harness(DSH)采用「一切皆插件」的加载方式:profile 里声明 bundle,启动时 cordis loader 递归挂载,实际装了多少、哪些被禁用、哪些挂载失败,往往要翻日志或猜。cordis 自带的 Loader.showLog() 能打印 apply plugin <name>,但默认关闭,且输出走 ctx.root.logger,在 dsh CLI 下既进不了启动 dsh 的那个控制台窗口,也进不了该窗口重定向的 dsh-run.log。

dsh-plugin-selfcheck 由社区维护者 xiaocxiaohai666 发布,分类为客户端插件。它在宿主进程内直接向 console 写报告:每次启动列出 loader 树里每一行插件的状态,再跑五项安装级检查;不依赖硬编码路径,读的是你当前 profile 里真实安装的插件。SkillHub 目录页:https://www.skillhub.cn/plugins/xiaocxiaohai666/dsh-plugin-selfcheck;源码与说明:https://github.com/xiaocxiaohai666/dsh-plugin-selfcheck。

这是什么

一句话:面向终端的 DSH 安装自检插件——启动时在启动 dsh 的控制台窗口打印完整插件 roster,以及依赖声明、peer 拒绝挂载、配置形状、Web 端口、已注册工具等检查结果,然后不再常驻干扰。

自 0.2 起,loader 树不能反映全貌:peerDependencies 与运行中宿主不兼容的插件会在挂载前被拒绝,roster 里不会出现一行,看起来会像「没装这个插件」而不是「装坏了」。插件用 deps.peer-gate 从 manifest 重算同一规则,补上这一盲区。

插件自身版本与 dsh 宿主版本无关;package.json 中当前版本为 0.2.0,表示本插件的第二次功能发布,不是「对应 dsh 0.2」。

核心功能

启动时插件 roster

输出前缀为 [selfcheck]。每一行对应 loader 树中的一个条目(递归枚举,因此行数常远大于 bundle 数量,例如一个 @linxin666/dsh-web-all 会展开成二十多行)。

状态 含义
ok 已挂载
skip 已禁用,行尾带 (disabled),不算失败
FAIL 从未成功挂载,写到 stderr

汇总行示例:plugins: 148 mounted, 28 disabled, 0 failed。挂载失败时会进入 problems / error details,并对 AggregateError 等沿 cause 链 unwrap,尽量给出最内层原因。

五项安装级检查

检查项 回答的问题
deps.version-drift 各插件 package.json 里 dsh.engines.dsh 是否仍声明支持当前已安装的 @deepseek-ai/dsh 版本(支持常见 range 与 prerelease;无法解析的 range 报 undecidable,不会误报通过)
deps.peer-gate 哪些插件会被宿主 拒绝挂载(只计 @deepseek-ai/dsh 与 @deepseek-ai/dsh-* peer;含 profile 声明但未进树的 bundle;compatibility.json 精确版本豁免会单独标注为有意挂载)
config.files profile 下 cordis.yml、cordis.patch.yml、package.json 等是否符合 loader 要求的结构
http.port 对 webServer 报告的端口做 loopback GET /,确认 HTTP 是否在应答
tools.registered 通过 ctx.tools.schemas() 统计面向模型的工具数量并做重复检测

运行时推导,无本机硬编码

  • 插件行来自 ctx.loader.entries(),报告你实际安装的插件;
  • profile 目录来自 loader 上下文的 baseUrl,不是猜 ~/.dsh/profiles/<name>;
  • manifest 从运行进程 entry 向上查找,dsh 安装路径变更仍可工作。

装上新插件、重启 dsh 即可出现在列表中;无需额外配置、白名单或注册步骤。设计约束包括 inject 为空等(详见仓库 README),目的是避免诊断插件本身因注入失败而无法挂载。

输出位置与 selfcheck_status 工具

位置 内容
启动 dsh 的控制台 启动时实时报告
$DSH_HOME/dsh-plugin-selfcheck.log 同一份文本($DSH_HOME 默认 ~/.dsh)
$DSH_HOME/dsh-plugin-selfcheck.json 同一份 JSON
工具 selfcheck_status 模型可查询并解释故障原因

selfcheck_status 仅在能解析 @deepseek-ai/dsh-tools 时注册;插件刻意不自带 fallback 编译器,避免与宿主 defineTool 行为不一致。无 SDK 时仍保留启动控制台报告这一主功能。

安装与启用

官方安装命令(profile 以 web 为例,与 README 一致):

dsh plugin --profile web add dsh-plugin-selfcheck

从本地目录链接安装:

dsh plugin --profile web add link:/path/to/dsh-plugin-selfcheck

安装后必须重启 dsh——bundle 行在启动时加载。

环境要求(来自 package.json):Node >=22.0.0;dsh.engines.dsh 与可选 peer @deepseek-ai/dsh-tools 的 range 见仓库 manifest。许可证为 MIT。

Windows 跨盘符时,pnpm 可能无法创建 symlink 导致空目录安装;README 给出了手动 junction 与 dsh plugin --profile web install reconciling 的步骤,可按原文操作。

典型输出示例

健康启动时,控制台大致类似(具体插件名与数量随你的 profile 变化):

[selfcheck] plugin self-check
[selfcheck]  ok   @deepseek-ai/dsh-base                       include
[selfcheck]  ok   dshmarket                                   include:dsh-market
[selfcheck]  skip @deepseek-ai/cordis-plugin-hmr  51ad9c62    (disabled)
[selfcheck]  ---- plugins: 148 mounted, 28 disabled, 0 failed
[selfcheck]  ---- install checks:
[selfcheck]  ok   deps.version-drift    all 9 plugins declaring dsh.engines.dsh accept 0.2.0-rc.2
[selfcheck]  ok   deps.peer-gate        no plugin rejects dsh 0.2.0-rc.2 (11 candidate(s) scanned, 0 incompatible)
[selfcheck]  ok   config.files          ~/.dsh/profiles/web (3 files checked)
[selfcheck]  ok   http.port             http://127.0.0.1:3080/ answered 200 in 3ms
[selfcheck]  ok   tools.registered      34 model-facing tools registered
[selfcheck]  ---- selfcheck OK - 148 mounted, 0 failed, checks 5 ok / 0 warn / 0 fail (742ms)

当 peer 拒绝导致插件未出现在 roster 时,deps.peer-gate 会 fail 并列出包名;README 说明可通过 dsh plugin --profile <profile> allow-version <pkg>@<version> --dsh-version <host> --accept-risk 等方式处理,或移除/升级冲突插件。

适用场景与注意

适合谁

  • 本地或 CI 启动 dsh 后,需要一眼看到「挂了哪些、禁了哪些、挂了什么错」;
  • 升级 dsh 或批量加插件后,要核对 engines 声明与 peer 门控,避免「树里根本没有这一行」的 silent refuse;
  • 怀疑 Web 端口被旧进程占用、profile YAML 结构错误或工具重复注册时,用五项检查快速定位。

注意

  • 插件在当前 dsh 进程权限下读取 profile、打 HTTP 探测、写 $DSH_HOME 日志;安装前请自行审阅源码与 MIT 许可证,SkillHub 为社区目录,与 DeepSeek / 幻方无官方从属关系。
  • 无 Web 控制台、无客户端半部、无后台服务;primary 场景是终端优先。
  • 若依赖 @deepseek-ai/dsh-tools 以使用 selfcheck_status,需保证 peer 可解析;否则仍可使用启动报告与 log/json 文件。

结尾

dsh-plugin-selfcheck 把「人类能看到的插件 roster + 五项安装自检」固定在每次启动的控制台,并同步到 log/json,必要时通过 selfcheck_status 交给模型解释。适合作为 DSH 日常运维与排障的第一屏信息。

  • 目录页:https://www.skillhub.cn/plugins/xiaocxiaohai666/dsh-plugin-selfcheck
  • GitHub:https://github.com/xiaocxiaohai666/dsh-plugin-selfcheck
羽毛球分组比赛记分
小程序二维码

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

小夜