dsh-plugin-updater: Check for Updates and Enable One-Click Updates on the DSH Plugins Page

前言

DeepSeek Harness(DSH)的插件生态依赖社区目录与 GitHub 上的各类扩展。日常开发里,装完插件后往往还要自己到仓库或 npm 看有没有新版本;官方插件市场 UI 的 README 也写明没有升级操作,已安装插件若仅有新版本可用,多半只能显示状态。官方 @deepseek-ai/dsh-plugin-manager 在 HMR 场景下对已安装包直接返回 already-installed,社区插件常见做法是「去 GitHub 看 → 卸载 → 重装」。下面介绍维护者 YukiSuoug 的 dsh-plugin-updater(分类:联网工具):在插件页增加「更新」标签,复用官方 pnpm 安装管线完成检查与升级,而不是单独实现一套下载器。

这是什么

dsh-plugin-updater 面向已在 DSH 中安装社区插件的用户与开发者。浏览器半区在插件页的第三个标签「更新」(排在「已安装 / 发现」之后);宿主半区提供 /dsh-plugin-updater/api/* 等只服务本机的接口。插件当前版本为 0.2.4(MIT 许可证),仓库:https://github.com/YukiSuoug/dsh-plugin-updater,社区目录页:https://www.skillhub.cn/plugins/YukiSuoug/dsh-plugin-updater。

核心功能

版本检查

按 listBundles().source 区分安装来源,采用不同判定方式:

安装来源 判定方式
注册表包(name / name@^1.2.3) 依次问 pnpm 配置的源 → registry.npmjs.org → registry.npmmirror.com,读 dist-tags,比 SemVer
Git 源(git+… / github:…) git ls-remote <repo> HEAD 与 pnpm-lock.yaml 里锁定的 commit 比对
本地目录(link: / file:) 无远程版本,标「本地目录」
压缩包地址 无法比对,提供「重装」
随 DSH 提供(无 source) 跳过,写明由 DSH 自己更新

注册表结果缓存 5 分钟,落盘在 $DSH_HOME/dsh-plugin-updater/cache.json;重开窗口仍可用缓存。点「刷新」或切换安装源会强制重查。

安装源

页面右上角 安装源 下拉与官方「添加插件」语义一致:自动(默认,pnpm 源 → npm 官方 → 中国大陆镜像)、npm 官方源、中国大陆镜像源、宿主 pluginManager.registries() 中的其它源(含私有源)、自定义地址。检查与安装共用同一源;选择保存在浏览器 localStorage(dsh-plugin-updater:source:v1)。

兼容性预检

对目标版本判定能否在当前 DSH 上运行,规则与官方 @deepseek-ai/dsh-app-boot 的 evaluatePluginCompatibility 一致:优先 engines.dsh;否则检查 @deepseek-ai/dsh / @deepseek-ai/dsh-* 的 peerDependencies 范围。不兼容的行带标签且「更新」置灰;服务端 /update 也会返回 400。

列表与快捷打开

列表按 已启用 / 已停用 分组并带数量;组内按「有更新 > 查询失败 > 可重装 > 已最新 > 本地/随包」排序。每行可按安装方式打开本地 node_modules 真实路径(文件夹图标)或仓库 / npm 外链(经 repository 等字段归一化后的 https 地址)。

一键更新

确认后执行:

removeBundle(name)  →  installBundle('name@<最新>', { enabled: 原启用状态, saveExact: false, registry: 查出该版本的源 })

必须先卸载再安装,以避免 HMR 下 already-installed;失败时插件可能处于未安装状态,弹窗内可重试。一次只允许一个更新任务。

安装与启用

推荐与「添加插件」相同:DSH 侧栏 → 插件 → 添加插件,粘贴仓库地址:

https://github.com/YukiSuoug/dsh-plugin-updater

或命令行(<你的 profile> 通常为 desktop 或 web):

dsh plugin --profile <你的 profile> add github:YukiSuoug/dsh-plugin-updater

装完后打开 插件 → 更新 即可使用。

本地改代码开发时,可在 clone 后 npm install && npm run build,再用 dsh plugin --profile <你的 profile> add link:<绝对路径> 链接安装;改 src/ 需重新 build,改宿主侧 index.js 需重启 DSH。

典型用法

  1. 打开 插件 → 更新,查看已安装插件的当前版本与最新版本。
  2. 若网络或镜像策略需要,在右上角选择 安装源(例如中国大陆镜像源),列表会按新源重查。
  3. 对有更新且兼容性通过的条目,点 更新,在确认框中核对将使用的源与风险说明,等待卸载 / 安装进度与 pnpm 输出。
  4. 需要对照源码时,点行右侧图标:本地 link: 装法则打开开发目录,远程装法则在浏览器打开归一化后的仓库或 npm 页面。
  5. 查询 stale 时点 刷新,或带 refresh=1 调用状态接口(由界面触发)。

宿主 API 概览(均仅同源可写):

方法 路径 说明
GET /dsh-plugin-updater/api/state[?refresh=1][&registry=<url>] 已安装插件与版本信息
POST /dsh-plugin-updater/api/update { name } 启动更新任务
GET /dsh-plugin-updater/api/job?id= 轮询任务状态
POST /dsh-plugin-updater/api/cancel { id } 取消
POST /dsh-plugin-updater/api/open { name } 打开目录或网址

适用场景与注意

适合经常安装社区 DSH 插件、希望在一处完成版本对比与升级的用户。DSH 生态理念是「一切皆插件」;SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系,本文仅介绍该插件能力。

使用前请注意:

  • 插件以当前 DSH 进程权限运行,更新会修改 profile 与依赖;安装前应自行审查源码与 MIT 许可证条款。
  • 本地 link: 插件无远程版本概念;别名安装(foo@npm:bar@1.2.3)不参与版本比对。
  • 注册表查询走 Node fetch,不读 pnpm 代理;企业代理下可能查不到最新版(安装仍走 pnpm)。
  • 第三方插件在 profile 授权文件中的兼容性例外,本插件界面不做判断;已授权但仍标不兼容时,需用「添加插件」手动安装。

Node 引擎要求:>=22.19.0(见 package.json)。

结尾

dsh-plugin-updater 把「查新版本 + 换源 + 卸载重装」收成插件页里的一次操作,并沿用官方 plugin-manager 的 inspect、源回退、镜像与失败回滚行为。需要详情与 issue 请见 GitHub:https://github.com/YukiSuoug/dsh-plugin-updater;目录索引:https://www.skillhub.cn/plugins/YukiSuoug/dsh-plugin-updater。

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

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

Xiaoye