前言¶
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 安装¶
- 打开侧边栏的「Plugins」页面 →「Add plugin」。
- 在源字段中输入以下安装规格之一(launcher 通过
installBundle解析):
github:windrover/dsh-plugin-update-checker
# 或完整 URL:
https://github.com/windrover/dsh-plugin-update-checker
- 重启以加载新插件:
dsh check # 启动前检查
dsh restart # 重载 web profile,加载新插件
- 打开「Settings → Built-in plugins → Check updates」,点击「Check updates」按钮。检查按钮的
/api/plugin-update-checker/scan接口在已认证的浏览器会话中运行,无需手动提供 token。
本地链接(开发用)¶
- 在 DSH 工作区克隆仓库:
git clone https://github.com/windrover/dsh-plugin-update-checker dsh-plugin-update-checker
- 在 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" ] } }
}
- 安装依赖。由于 profile 是 pnpm workspace,
npm install会拒绝link:协议,应使用pnpm:
cd ~/.dsh/profiles/web
pnpm install --registry=https://registry.npmmirror.com
- 手动链接
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
- 重启并打开插件(
dsh check && dsh restart,路径同上)。
典型用法¶
- 安装插件后,打开「Settings → Built-in plugins → Check updates」。
- 点击「Check updates」按钮,插件会扫描所有已安装的插件。
- 查看结果表格:每行显示插件名称、已安装版本、最新版本、兼容性状态,以及「Update」按钮。
- 对有更新的插件,点击「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