dsh-plugin-updater:在 DSH 里检查并一键更新已安装插件

前言

DeepSeek Harness(DSH)把能力拆成可安装的 bundle 插件,profile 里插件一多,版本就容易和 npm registry 上的 latest 脱节。手动在终端里对照版本、再执行卸载与重装,步骤重复且容易漏。社区插件 dsh-plugin-updater(维护者 shehuilaoliumang,分类 admin-security)把「查新版本」和「按内置插件管理器语义更新」收进 Web UI:侧栏、插件页总览、单插件详情页三处入口,并支持批量更新、忽略某版本与可选的自动更新。

下面介绍它做什么、怎么装、日常怎么用,以及更新范围与常见失败该怎么处理。

这是什么

dsh-plugin-updater 是 DSH 的插件更新助手:列出当前 profile 里经 plugin_manager 安装的插件,对比注册表最新版本,对可更新项提供一键或批量更新(先卸旧再装新,失败时尽量回滚)。

  • 目录页:https://www.skillhub.cn/plugins/shehuilaoliumang/dsh-plugin-updater
  • 源码:https://github.com/shehuilaoliumang/dsh-plugin-updater
  • 当前 package 版本:0.4.3(页脚会显示「更新检查 v0.4.3」与 Host 端版本,不一致时 Host 版本标红并提示重启 DSH)
  • 许可证:MIT

社区目录站点与 DeepSeek / 幻方无官方从属关系;安装前请自行审阅源码与许可证。插件以当前 DSH 进程权限运行。

入口与界面

功能入口分三处,内容复用同一套检查面板逻辑:

  1. 侧栏 → 更新检查(sidebar.panellist + 同名 main 面板):日常入口;有可更新插件时图标右上角带提示点。
  2. 插件 → 更新检查(plugins.tab):插件页内总览,支持搜索、按状态筛选、逐条与批量更新;顶部可配置自动更新。
  3. 插件详情页(plugins.detail.badge + plugins.detail.actions):仅在 bundle 详情页显示「可更新 x.y.z」标签与「更新到 x.y.z」按钮;行配置页与官方插件页无整包可替换对象,不渲染多余控件。

启动后若检测到可更新项,右下角会出现 5 秒自动消失的限时提醒卡,可「全部更新」或跳转插件页;同一批可更新插件在同一浏览器会话内只提醒一次。自动更新设置不单独占设置页,集中在「更新检查」总览与侧栏面板顶部。

核心功能

版本检查与状态

  • 聚合 plugin_manager 已装插件,向 registry 查询 packument 的 dist-tags.latest。
  • 行状态包括:可更新 / 已是最新 / 本地版本更新 / 检查失败 / 已忽略,以及本地、link:/file:、Git、压缩包、随 DSH 提供的 official bundle 等跳过状态;跳过与失败会在行内给出原因。
  • registry 优先级:pluginManager.registries() 的 resolved / registry / fallbackRegistries → pluginRegistryProbe.fastest() → https://registry.npmjs.org/。
  • 版本比较使用 SemVer,含 pre-release 排序规则。

更新与进度

  • 单条更新:点击「更新」立即执行 remove + install;安装失败时自动尝试装回旧版本;前端轮询 Host 进度,显示「卸载旧版本 → 安装 x.y.z → 确认结果」与已用时长。
  • 批量更新:「全部更新(N)」先确认,再由 Host 顺序执行,结束汇总成功/失败;失败行可单独重试。遇到需要重启 DSH 或全局性 pnpm 故障时,批量会在当前项之后 暂停,后续项标记为暂停。
  • 忽略此版本:按「包名 + 版本」写入 Host 端设置;忽略后不计入可更新数量,上游再发新版本会重新出现在「可更新」。旧版浏览器 localStorage 忽略记录在首次升级后会迁移到 Host。

自动更新(默认关闭)

在「更新检查」页顶部可开启:

  • 打开页面时自动更新:Web UI 每次打开时检查一次,并更新全部可更新项,完成后用限时提醒汇总。
  • 定时后台更新:DSH 运行期间按间隔检查并更新,间隔可设 30 分钟~30 天;开启后约 1.5 秒会先执行一次。

自动更新同样只处理 npm 第三方插件,并复用带失败回滚的更新流程。

其他 UI 行为

  • 「可更新」与「其他插件」两组可折叠;有可更新项时「其他插件」默认收起。
  • 检查完成、单条/批量更新结束、忽略/取消忽略后,侧栏提示点即时刷新,无需重开页面。
  • 需要重启时会有提示;安装日志写入 profile 的插件管理器日志。
  • 桌面端插件仍被加载时(bundle-in-use)会提示重启后再更新;profile 启动项缺失时有对应文案。
  • pnpm 锁文件损坏、新版本等待期拦截等会在错误行下给出可执行修复提示(见下文常见问题)。

更新规则(务必知晓)

  • 只更新 来自 npm registry 的已安装 bundle;link:/file: 本地插件、Git、tarball 与随 DSH 分发的 official bundle 不在此更新。
  • 更新语义与内置插件管理器 Update 一致:remove + install(失败尽量回滚旧版)。
  • 忽略记录与自动更新设置保存在 ~/.dsh/plugin-updater/settings.json(可用环境变量 DSH_HOME 覆盖用户目录),不写入 profile 的 package.json 或 cordis.patch.yml。

安装与启用

在取得插件目录的绝对路径后,通过 profile 的插件管理器安装(命令以 README 原文为准):

plugin_manager action=install_bundle target=<本目录的绝对路径>

Host 半(index.js)改动需 重启 DSH 后才会载入;Client 半(client.js)通常由 HMR 自动更新。依赖注入包括 @deepseek-ai/dsh-client-locale 与 @deepseek-ai/dsh-client-ui-plugin-manager。

典型用法

  1. 安装并重启 DSH(若刚装 Host 半)。
  2. 打开 侧栏 → 更新检查,或 插件 → 更新检查,等待列表刷新;页脚可见最近检查时间与插件/Host 版本。
  3. 对单行点「更新」,或确认后使用「全部更新(N)」;需要时在行内「忽略此版本」,日后可在同页取消忽略。
  4. 进入某个 npm bundle 的 详情页,使用标题旁版本标签或页头「更新到 x.y.z」就地更新。
  5. 若希望少动手,在总览顶部开启「打开页面时自动更新」或「定时后台更新」,并设定间隔。

Host 侧 API 路径(供排查或二次开发参考,日常使用不必手动调用):

  • GET /dsh-plugin-updater/api/state[?force=1]
  • POST /dsh-plugin-updater/api/update,body { "name": "<package>" }
  • GET /dsh-plugin-updater/api/progress
  • GET|POST /dsh-plugin-updater/api/settings
  • POST /dsh-plugin-updater/api/update-batch,body { "names": ["..."] }(省略则用当前全部可更新项)

适用场景与注意

适合:经常从 npm 安装社区 DSH 插件、希望在一个界面里对照 registry、批量维护版本的用户;需要按版本忽略提醒、或希望在页面打开/定时后台静默更新的环境。

注意:

  • 插件以当前 DSH 进程权限读写 profile 与 ~/.dsh/plugin-updater/settings.json;安装前请检查源码与 MIT 许可证。
  • 本地 link、Git、tarball、官方内置 bundle 不会出现在可更新列表的更新目标中,需用各自方式维护。
  • 批量更新遇到「需重启」或全局锁文件问题时会在中途暂停,重启或修复后重新批量即可。

常见问题:更新失败 / 需要重启

  • 提示需要重启 DSH:官方桌面端不允许卸载正在被当前进程加载的插件;重启后再点更新。
  • 启动项缺失:早期卸载失败可能已从 dsh.profile.bundles 去掉启动行;重启后更新成功会写回,仍缺失可在「插件」页手动重新启用。
  • 批量更新中途暂停:第一个需重启项之后的项标记为暂停,重启后重新批量更新。
  • pnpm internal error / Broken lockfile:在 profile 目录执行:
pnpm install --lockfile-only --fix-lockfile

完成后重新检查;pnpm 可能同时把相关版本写入 pnpm-workspace.yaml 的 minimumReleaseAgeExclude。
- 刚发布版本更新失败(ERR_PNPM_RESOLUTION_POLICY_VIOLATIONS_UNHANDLED 等):pnpm 11 默认 24 小时新版本等待期;先按上条修锁文件再重试;CLI add 路径会自动把版本加入 minimumReleaseAgeExclude。
- 安装长时间无输出:插件管理器有 10 分钟空闲超时(idleTimeoutMs),超时终止并回滚,可重试或检查网络/registry。

结尾

dsh-plugin-updater 把 npm 已装插件的版本对照、单条/批量更新、忽略与自动更新收敛到 DSH Web UI 的三处入口,并与内置 plugin_manager 的 Update 语义对齐,同时区分需重启、启动项缺失与 pnpm 锁文件等失败类型。

  • 社区目录:https://www.skillhub.cn/plugins/shehuilaoliumang/dsh-plugin-updater
  • GitHub:https://github.com/shehuilaoliumang/dsh-plugin-updater
羽毛球分组比赛记分
小程序二维码

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

Xiaoye