dsh-plugin-update-checker:在 DSH 设置中检查插件更新与兼容性

前言

DeepSeek Harness(DSH)采用「一切皆插件」的理念,内置的插件列表通常只能查看已安装的包,看不到是否有更新或与当前运行时版本是否兼容。开发者需要手动去 npm 查询版本、比对 peerDependencies,或者打开浏览器逐个检查。这种割裂的检查方式容易遗漏更新,也容易在升级 DSH 后遇到不兼容的插件。

这是什么

dsh-plugin-update-checker 是一个 DeepSeek Harness 插件,为「内置插件」设置页增加了一个「Check updates」选项卡。点击按钮后,插件会扫描所有已安装的插件包,分别检查它们在 npm 上的最新版本,以及与当前 DSH 运行时的 peerDependencies 兼容性,并在表格中逐行展示结果。它不提供自己的配置,只负责报告和提供一键更新动作。

核心功能

更新可用性检查

插件通过 npm registry 的 latest 标签,对比已安装版本和 registry 上的最新版本。对于通过 tarball / git / path 安装的包,插件会将其标记为「Unsupported」,而不是错误地显示「Up to date」。这意味着本地或私有仓库的包不会因为无法访问 registry 而被误判为最新。

兼容性检查

插件复用 @deepseek-ai/dsh-app-boot 的 evaluatePluginCompatibility 逻辑,将每个插件的 @deepseek-ai/dsh* peerDependencies 与当前 DSH 版本进行比对。如果存在精确版本豁免(在 compatibility.json 中声明),会显示「Compatible (exempted)」。兼容性检查与更新可用性检查相互独立:即使 registry 无响应或很慢,也不会隐藏不兼容的 peer 范围;即使本地包无法访问 registry,也会给出兼容性结论。

注册表探测策略

插件不再硬编码 registry.npmjs.org,而是从环境变量、用户 profile 的 .npmrc、以及用户全局的 ~/.npmrc 中读取配置,按顺序查找第一个有效的配置。然后并发探测多个候选注册表,取第一个成功响应的。探测策略分三种情况:

  • 未配置任何注册表:同时探测 launcher 的镜像和公共注册表。
  • 公共注册表被默认配置:保留公共注册表,并在其后添加镜像,两者都是公开,不会泄露内部包名。
  • 配置了其他注册表(企业或内部):仅使用该注册表,不与公共注册表并发,避免内部包名泄露。

如果一个包声明了 publishConfig.registry,则使用该注册表。探测到的注册表会随结果行一起传递,用于后续的一键更新,确保版本读取和安装来自同一个源。

安装与启用

从 npm 安装(推荐)

dsh install-plugin dsh-plugin-update-checker

从 npm 安装后,插件从 0.1.4 开始使用普通版本号解析,面板上的「Update」按钮可以正常工作。

从 GitHub 安装

  1. 打开侧边栏的「Plugins」页面 →「Add plugin」。
  2. 在源字段中输入以下安装规格之一(launcher 通过 installBundle 解析):
github:windrover/dsh-plugin-update-checker
# 或完整 URL:
https://github.com/windrover/dsh-plugin-update-checker
  1. 重启以加载新插件:
dsh check     # 启动前检查
dsh restart   # 重载 web profile,加载新插件
  1. 打开「Settings → Built-in plugins → Check updates」,点击「Check updates」按钮。检查按钮的 /api/plugin-update-checker/scan 接口在已认证的浏览器会话中运行,无需手动提供 token。

本地链接(开发用)

  1. 在 DSH 工作区克隆仓库:
git clone https://github.com/windrover/dsh-plugin-update-checker dsh-plugin-update-checker
  1. 在 profile manifest 中添加 link: 依赖和 bundles 入口:
// ~/.dsh/profiles/web/package.json
{
  "dependencies": {
    "dsh-plugin-update-checker": "link:/abs/path/to/dsh-plugin-update-checker"
  },
  "dsh": { "profile": { "bundles": [ "…", "dsh-plugin-update-checker" ] } }
}
  1. 安装依赖。由于 profile 是 pnpm workspace,npm install 会拒绝 link: 协议,应使用 pnpm:
cd ~/.dsh/profiles/web
pnpm install --registry=https://registry.npmmirror.com
  1. 手动链接 semver 包到插件目录,因为 dsh 的 wire_link_plugin_deps 只处理 @deepseek-ai/* 依赖:
mkdir -p dsh-plugin-update-checker/node_modules
ln -sfn ~/.npm/_npx/<active-dsh-hash>/node_modules/semver \
        dsh-plugin-update-checker/node_modules/semver
  1. 重启并打开插件(dsh check && dsh restart,路径同上)。

典型用法

  1. 安装插件后,打开「Settings → Built-in plugins → Check updates」。
  2. 点击「Check updates」按钮,插件会扫描所有已安装的插件。
  3. 查看结果表格:每行显示插件名称、已安装版本、最新版本、兼容性状态,以及「Update」按钮。
  4. 对有更新的插件,点击「Update」即可执行安装(底层使用与「Add plugin」对话框相同的 installBundle 原语)。

适用场景与注意事项

  • 适合需要统一管理 DSH 插件更新与兼容性的开发者,尤其是频繁升级 DSH 版本或管理大量插件的团队。
  • 插件以当前 DSH 进程的权限运行,安装前应检查仓库源码与许可证。
  • 插件只报告和提供更新动作,不负责启用、禁用或删除插件,也不修改插件配置。
  • 更新失败会逐行报告,不会因某个包的问题而阻塞整体扫描。

结尾

dsh-plugin-update-checker 在 DSH 的内置插件设置中提供了一站式的更新与兼容性检查入口,让开发者无需离开设置页面即可掌握插件状态。安装后即可在「Settings → Built-in plugins → Check updates」中使用,点击按钮即可扫描并更新。

  • 插件目录页:https://www.skillhub.cn/plugins/windrover/dsh-plugin-update-checker
  • GitHub 仓库:https://github.com/windrover/dsh-plugin-update-checker
羽毛球分组比赛记分
小程序二维码

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

Xiaoye