dsh-plugin-update:在插件详情页一键检查并更新 npm / Git 插件

前言

DeepSeek Harness(DSH)的配置文件里,通过 npm 或 Git 安装的插件会停留在安装当天 pnpm 解析到的版本。Web 界面里的 Plugins 页只对安装包自带的官方目录条目提供 Update;list_bundles 只会报告已安装版本和保存的 spec,不会对比 registry 上的最新发布;install_bundle 对已安装的包会返回 already-installed,因此升级只能是「先卸载、再安装」。手工做这套流程容易漏步骤,也容易在失败时把插件弄丢。下面介绍社区插件 dsh-plugin-update:在单个插件的详情页回答「有没有新版本」,并在条件允许时一键完成更新。

这是什么

dsh-plugin-update 由维护者 YiZhiQvQ 发布,在 SkillHub 社区目录中归类为「联网工具」。它不往侧边栏加菜单,而是通过 Cordis patch 扩展 Plugins 页的插件详情视图,把「检查更新」和「一键更新」放在与原有开关、卸载同一区域。插件当前版本为 0.1.0,许可证 MIT,源码与说明见 GitHub 仓库。

它解决什么问题

已安装插件若来自 npm,会长期停在旧版本,界面没有统一提示;官方 Update 不覆盖你从 npm 或 Git 自行添加的 bundle。本插件补的是「对当前 profile 里每个可远程查询的依赖,对比已装版本与远端最新版本,并在 DSH 版本兼容时执行与 plugin_manager 相同的 remove + install」。

核心功能

详情页上的控件与信息

位置 内容
详情页头部 Check for updates(检查更新),与 bundle 开关、卸载并列
标题旁 存在更新时显示 New version x.y.z
页面内容下方 已安装版本 → 最新版本、应答来源;检查失败或最新版需要更高 DSH 时给出原因

支持的来源

  • npm:通过 profile 的 plugin manager 使用的 registry 顺序查询 registry 文档的 latest 标签;若 profile 使用 registry.npmmirror.com 等镜像,则对镜像查询,而非固定走 npmjs。
  • Git:从默认分支读取仓库根目录 package.json 的 version 字段。支持 github:、gitlab:、bitbucket:、git+https://,以及 git@host:owner/repo 等形式。Git 依赖通常写分支而非版本号,更新时会用同一 spec 重装,由分支提供新代码。

本地 link:、tarball、file: 或别名没有可对比的远端,页面会说明原因,不提供无效按钮。自托管 Git 若无法通过 HTTPS 读取 raw 文件,同样按不支持处理。

检查的五种状态

  1. update — 存在更新,且 engines.dsh(或 @deepseek-ai/dsh 的 peer 范围)允许当前运行的 DSH 版本;可一键更新。
  2. incompatible — 远端有更新,但要求更高的 DSH;展示要求及来源,不出现更新按钮。
  3. current — 已装版本即为最新。
  4. error — 无法读取远端(离线、404、文档 malformed 等);展示原因,Check for updates 可重试。
  5. unsupported — 本地链接、tarball、别名或无法读取的 Git 主机;不会尝试修改安装。

打开某一插件详情页时,只对该包发起即时查询;其他 bundle 的检查结果来自约 十分钟 的缓存。

更新如何执行

Host 侧调用 profile 自带的 pluginManager 服务,与 Plugins 页、plugin_manager 工具一致:

  1. removeBundle(name) — 取消选中、卸载行、执行 pnpm remove。
  2. installBundle(spec, { enabled, registry }) — 安装新版本并重新选中;enabled 保留用户曾关闭的 bundle 状态。
  3. 若第 2 步失败,会用之前的 spec 再装回去,避免更新失败后插件缺失。

保存的 spec 会保留原有范围运算符:例如 ^4.8.1 会变为 ^4.10.0,而不是裸版本号;若 profile 钉死精确版本则仍钉死;Git 依赖保持 Git 地址。

Git 更新会重新 clone 仓库,因此在卸载前会先验证主机可达;检查与 git 使用相同的无代理条件,避免「已卸载但 clone 失败」。启用 HMR 时替换可无需重启;自启动以来一直在跑的 bundle 可能报告 restart-required,页面会说明。

本 bundle 不能更新自身:卸载它会卸掉处理请求的 routes。

重装后 bundle 会排到 dsh.profile.bundles 末尾(与官方 Update 相同副作用),影响配置 precedence;两个 bundle 覆盖同一 row 时,更新后的那个之后生效。

HTTP 接口(Client ↔ Host)

纯 JS bundle 无法生成 @Remote 命名空间,因此暴露三条路由:

GET  /plugin-update/state    -> { ok, report, checking }
POST /plugin-update/check    -> { ok, report }           body: { refresh?: boolean, names?: string[] }
POST /plugin-update/update   -> { ok, result, report }   body: { name }

变更类请求需要请求头 x-plugin-update: 1,跨站表单无法设置,跨域 fetch 也无法在无 CORS 预检应答的情况下发送该头。

配置

无独立配置项。使用 plugin manager 的 registry 与 fallbackRegistries 决定问哪些 npm registry;Git 的 manifest 经 HTTPS 读取,在设置 HTTPS_PROXY / HTTP_PROXY 或 Windows 用户代理时会走相应代理。

安装与启用

从 GitHub 直接安装(无需先下载仓库):

dsh plugin --profile <profile> install https://github.com/YiZhiQvQ/dsh-plugin-update

本地 checkout 开发(路径改为你的绝对路径):

dsh plugin --profile <profile> install /absolute/path/to/dsh-plugin-update

从 Releases 安装 tarball 时:

dsh plugin --profile <profile> install /absolute/path/to/dsh-plugin-update-0.1.0.tgz

tarball 会记录 file: 依赖并钉在该文件路径,移动 .tgz 后需重装;目录安装记录 link:;GitHub URL 安装记录 Git 地址,便于 pnpm 再次拉取。

安装后无需额外配置;Client 注入 @deepseek-ai/dsh-client-ui-plugin-manager,在 Web 的 Plugins 详情页即可使用。

典型用法

  1. 打开 DSH Web UI 的 Plugins,进入某个已安装插件的详情页。
  2. 点击 Check for updates(或依赖缓存结果查看标题旁是否已有新版本提示)。
  3. 状态为 update 时,在页面上执行一键更新;若为 incompatible,先升级 profile 使用的 DSH 再试。
  4. 对 npm 源插件,更新后 spec 中的 semver 范围会随最新版抬升;对 Git 源,确认网络与代理下 git 能访问主机后再更新。

维护者在仓库中提供的测试命令(用于验证 bundle 逻辑,非终端用户日常步骤):

node --test test/helpers.test.js test/update.test.js
node test/dry-run.mjs

适用场景与注意

适合:profile 里混有 npm 与 Git 来源的社区插件、需要与官方目录无关的「有没有新版本」提示,并希望在详情页完成 remove + install 而不手写命令的场景。

注意:

  • 插件以当前 dsh 进程权限 运行,安装前请阅读源码与 MIT 许可证,确认可接受其行为(包括调用 pluginManager 卸载并重装其他 bundle)。
  • 社区目录 SkillHub 插件页 与 DeepSeek / 幻方无官方从属关系,仅为社区索引。
  • Git 更新依赖本机 git 环境与代理;与检查阶段不一致的代理可能导致更新失败,bundle 会在可能时回滚 spec。
  • 本地 link、tarball 与无法读取的 Git 主机不会提供更新按钮,属预期行为。

结尾

dsh-plugin-update 把「查 npm / Git 最新版」和「按 profile 规则一键重装」收进 Plugins 详情页,补上了官方 Update 未覆盖的自装插件路径。进一步了解可访问 SkillHub 目录页 与 GitHub:YiZhiQvQ/dsh-plugin-update。

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

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

小夜