用 dsh-plugin-check 给 DSH 插件仓库做只读健康检查

前言

DeepSeek Harness(dsh)把模型、工具、技能、会话和界面都做成可替换插件。社区仓库增长很快,作者却经常在装进 profile 之后才发现问题:清单缺 main / typescordis.patch.yml 的 name 和包名对不上、tsconfig 缺关键项、构建产物里还留着 .ts 文件——运行时直接崩。

这些坑本可以在提交前拦下来。社区插件 dsh-plugin-check 把清单协议、patch 格式、构建陷阱和 hub 收录状态收成一次扫描:模型或 CI 对着仓库目录跑 plugin_check,拿到 JSON 合规报告和修复建议。检查过程只读,不改文件,也不对被检仓库执行构建。

本文按社区目录页、GitHub 仓库 README、package.json 和源码交叉核对后整理。社区目录站点 deepseek-harness-plugin.com 是独立收录页,与 DeepSeek / 幻方没有官方从属关系;官方运行时仍以 deepseek-ai/deepseek-harness 为准。

这是什么

dsh-plugin-check 是一款 DeepSeek Harness 的「工具与能力」插件,由 GitHub 组织 omdsh-dev 维护,仓库地址是 omdsh-dev/dsh-plugin-check,许可证为 MIT。目录页收录日期为 2026-08-15;本稿核对当天,GitHub 仓库为 23 stars(目录页仍显示 17,以仓库页面为准)。

它解决的是插件仓库的发布前门禁,而不是给智能体增加业务工具。安装后注册名为 plugin_check 的工具,row id 为 tool-plugin-check,npm 包名声明为 @deepseek-ai/dsh-plugin-check。这个作用域名称来自仓库 package.json,维护者仍是社区组织 omdsh-dev,不要把它理解成 DeepSeek 官方包。

当前 package.json 版本为 0.0.1private 为 true,主要语言 TypeScript。仓库 README 写明已按 @deepseek-ai/dsh@0.1.0-rc.6 依赖线做过隔离消费验证。

核心功能

只读、零业务依赖

README 把安全模型写得很明确:

  • 只读:对被检仓库只做 readdir / stat / readFile,不修改、不构建。
  • 零业务依赖:检查逻辑只用 Node 内置模块(fs / path / child_process)。作为插件挂载时,仍声明了 peer:@deepseek-ai/cordis@^4.0.1@deepseek-ai/dsh-tools@deepseek-ai/dsh-invariants;缺失项由 profile 的 node_modules 回退提供。
  • 不跑 tsc:构建陷阱全部是静态文本扫描。
  • hub 检查离线优先:先读本地 catalog(环境变量 DSH_HUB_SOURCE 或当前目录下的 hub/),gh 调用只作 fallback;全部失败则标为 skipped,不算警告。

源码注释还写了路径 containment(防止逃出目标目录 / 跟随 symlink)和资源预算。plugin_check 的工具超时是 5000 毫秒。scan 最多处理 50 个仓库,遇到符号链接目录会跳过。

三种 action

参数 类型 必填 说明
action string check / scan / schema
path string check 时为插件仓库目录,scan 时为父目录;默认当前工作目录
strict boolean 把 warning 升级为 error 并影响 verdict,默认 false

三种 action 的含义:

  • check:检查单个插件仓库,输出 verdict / errors / warnings / suggestions
  • scan:扫描父目录下以 dsh- 开头的子目录。README 概括为「有 package.json 者」;源码还会接受带 dsh.plugin.jsonSKILL.mdcatalog.json 的目录。
  • schema:输出全部检测项清单、严重级别和适用形态,方便人和模型核对规则。

verdict 规则:0 条 error 为 pass;有 error 为 fail;只有 warning 为 warnstrict=true 时 warning 会升级,从而改变结论。

按形态套检查项

插件会先识别仓库形态 kindregistry / skill / collection / tool-bundle / bundle / infra / unknown。README 写共 33 项检测,按形态适用,不是所有仓库都跑同一套 TypeScript bundle 规则。源码里的分流是:

  • registry:校验 dsh.plugin.json 契约
  • skill:检查 SKILL.md 是否存在,以及 frontmatter 是否有 name / description
  • collection:检查 catalog.jsoncollectionplugins
  • bundle / tool-bundle:清单 + patch + 构建陷阱 + Profile Bundle 生态合规
  • unknown / infra:标 unsupported-kind,跳过详细检查,也不做 hub 查询

bundle / tool-bundle 上,README 列出的主要类别是:

类别 作为 error 的例子 作为 warning 的例子
清单协议 no-manifestinvalid-namemissing-main-or-typesno-patch incomplete-filesmissing-peerno-bundle-decl
patch 格式 malformed-patchpatch-name-mismatchduplicate-row-id unexpected-fields
构建陷阱 no-source-entryno-tsconfigmissing-ts-ext-importslib-layout-mismatchstale-ts-imports missing-rewrite-importstypes-path-mismatchimplicit-node-typesno-build-script
生态合规 core-row-id(patch 占用官方核心 row:tools / session / llm / web / permission) missing-profile-install-examplemanual-install-onlycore-modification-required
hub 收录 not-in-hubhub-skipped 为 info)

报告里的 checks 是固定检查项的执行结果(total / passed / failed / warned / skipped),不是 issue 条数。

仓库 README 还记载:2026-08-08 对组织内 8 个插件(time / encoding / json / calculator / csv / regex / markdown / session-health)自检,结果全部 pass;过程中修过 4 个旧插件的真实缺陷(tsconfig 缺三件套、缺 build / prepack scripts)。这是维护者自述,不是第三方评测。

安装与启用

社区目录页给出的安装命令是:

dsh plugin add github:omdsh-dev/dsh-plugin-check

在 DeepSeek Harness 终端里运行即可。需要可复现安装时,按目录页说明固定 commit:

dsh plugin add github:omdsh-dev/dsh-plugin-check#<commit哈希>

仓库 README 推荐按 Profile Bundle 装到具体 profile(针对 DSH 0.1.0-rc.6)。webheadless 是两套配置,装到 web 不会自动覆盖 headless;dsh run 默认走 headless:

# 交互式(web)profile
dsh plugin --profile web add github:omdsh-dev/dsh-plugin-check

# 一次性任务(headless)profile
dsh plugin --profile headless add github:omdsh-dev/dsh-plugin-check

包内 dsh.bundle.patch(仓库文件是 cordis.patch.yml)会在安装后把插件插入 profile 的 layer stack,id 为 tool-plugin-check

不走 GitHub、改用本地 tarball 时,README 的写法是:

npm pack
dsh plugin --profile web add <npm pack 产物 tarball 路径>

验证 row 是否挂上:

dsh --profile web --dump-config | grep tool-plugin-check

运行时冒烟可以用:

dsh run "使用 plugin_check 工具检查一个插件仓库"

package.json 声明的 Node 引擎是 ^22.19.0 || >=24.0.0。README 建议用 npx -p @deepseek-ai/dsh@0.1.0-rc.6 dsh web 启动 lib 生产模式,不要 npm install -g 全局安装。Windows 路径请用正斜杠,例如 C:/Users/...

典型用法

装好之后,把工作目录指到要检查的插件仓库,让模型调用 plugin_check。下面两个例子直接来自仓库 README。

检查单个仓库:

plugin_check { action: "check", path: "C:/Users/admin/Desktop/dshext/dsh-tool-csv" }

README 给出的成功形态类似:

{"repo":"dsh-tool-csv","kind":"tool-bundle","verdict":"pass","checks":{"total":24,"passed":24}}

扫描父目录下一批 dsh-* 仓库:

plugin_check { action: "scan", path: "C:/Users/admin/Desktop/dshext" }

返回结构是 rootscannedreports 数组。不合规仓库会带上 error 和 suggestions。

先看规则再扫仓库时,把 action 设为 schemapath 省略则使用当前工作目录。需要把 warning 也当成失败时,加上 "strict": true

适用场景与注意事项

适合这些情况:

  • 自己写 DSH 插件,提交或打包前做一次门禁
  • 维护一组 dsh-* 仓库,用 scan 看汇总
  • 让智能体在改插件代码后自己跑 plugin_check,按 suggestions 修清单和 patch

使用前注意:

  1. 权限:插件以当前 dsh 进程的权限运行,安装时可能执行代码。安装前应阅读源码和 MIT 许可证;生产环境建议固定 commit 哈希。
  2. 它不是官方 CLI:本插件注册的是工具 plugin_check,和社区讨论里有人提议的 dsh plugin check 子命令不是一回事。
  3. 只读不等于零风险:检查逻辑声称不改被检仓库,但插件本身仍运行在 dsh 进程里,能读你指定的路径。
  4. 形态识别会跳过infra / unknown 不会套 bundle 那套 33 项;hub 查不到只标 skipped,不要当成「已收录」。
  5. 扫描上限:一次 scan 最多 50 个仓库,工具调用超时 5 秒;仓库很多或磁盘很慢时,拆目录分别 check 更稳。
  6. 运行时仍在预览期:README 针对的是 npm 线上的 0.1.0-rc.6。DeepSeek Harness 还在开发者预览,peer 范围和 patch 协议都可能变,以仓库当前 README 为准。

小结

dsh-plugin-check 把「插件装上去才发现清单和产物不对」提前变成一次只读扫描。它按仓库形态套规则,输出 JSON 结论和修复建议,适合插件作者和批量维护场景。

目录页:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-plugin-check/

GitHub:https://github.com/omdsh-dev/dsh-plugin-check

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

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

小夜