dsh-auto-update:在 DSH Web 标题栏一键检查并升级 dsh

前言

DeepSeek Harness(dsh)通过 npm 全局安装后,版本升级往往要自行查 registry、执行 npm install -g,再手动停掉旧进程并重新拉起 dsh web。对长期开着 Web 界面的开发者来说,这一步容易拖后,也可能在重启环节失手。

下面介绍社区插件 dsh-auto-update(npm 包名 @marvinlee2011/dsh-auto-update,仓库 lee-nihao2333/dsh-auto-update)。它在会话标题栏右上角提供「更新」按钮:仅在 registry 上确有更新时显示,点击后由当前用户执行全局安装并重启 dsh,新进程就绪后页面自动刷新。与静默自更新不同,是否升级完全由你点按钮决定。

这是什么

该插件属于 DSH 生态中的客户端类 bundle:Host 侧无构建步骤、无额外运行时依赖,仅在 Web profile 下向会话 UI 注入控件,并与内置 /api 共用同一套 Host/Origin 校验与浏览器认证。

维护者 GitHub 账号为 lee-nihao2333;源码与文档托管于上述仓库,npm 发布名为 @marvinlee2011/dsh-auto-update(当前资料记载版本 1.0.0),许可证 MIT。插件与 DeepSeek 官方无隶属关系。

核心功能

  1. 版本探测:读取 npm registry 上目标包的 dist-tags(默认 latest),与当前磁盘上的 dsh 版本比较;无更新时不显示按钮。
  2. 一键升级:点击后在当前用户权限下执行 npm install --global,使用解析后的精确版本号(例如 @deepseek-ai/dsh@x.y.z)。
  3. 安装后校验:安装完成后重新读取 package.json 核对版本;不一致则不重启并报错。
  4. 受控重启:通过独立脚本等待当前进程退出,再以相同 node、启动脚本、参数与工作目录拉起 dsh;当前进程经 appExit 优雅退出。
  5. 周期检查:默认启动时检查一次,之后每 30 分钟检查一次;页面约每 60 秒读取一次 Host 状态。检查只读 packument,不改动磁盘。
  6. 失败可重试:安装失败时按钮变为「重试更新」;安装成功但重启未完成时显示「重启」,可单独重试。

对外暴露三个经认证的路由:GET /dsh-auto-update/status、POST /dsh-auto-update/apply、POST /dsh-auto-update/restart。页面侧无法指定包名、版本或 shell 命令。

安装与启用

环境要求(来自插件 engines):

  • dsh:>=0.2.1-rc.2 且 <0.3.0
  • Node.js:^22.19.0 || >=24.0.0
  • 当前用户对 npm 全局前缀具备写权限(升级动作为 npm install --global)

方式一:插件管理器(推荐)

  1. 打开 DSH Web → 设置 → 插件。
  2. 点击 安装第三方插件,输入包名 @marvinlee2011/dsh-auto-update 并确认。
  3. 插件出现在列表中并启用后,刷新页面。

插件管理器会同时将包装进 profile、把 bundle 加入启动列表并启用。

方式二:命令行

先安装依赖:

dsh plugin --profile web add @marvinlee2011/dsh-auto-update

再把包名加入 profile 启动列表 ~/.dsh/profiles/web/package.json 中的 dsh.profile.bundles:

{
  "dsh": {
    "profile": {
      "bundles": [
        "@deepseek-ai/dsh-base",
        "@deepseek-ai/dsh-web-app",
        "@marvinlee2011/dsh-auto-update"
      ]
    }
  }
}

然后重启 dsh web。注意:dsh plugin add 只安装依赖,不会自动把 bundle 写入启动列表;漏配时启动日志会提示 bundle 未启动。

典型用法

  1. 打开任意会话,在标题栏右上角工具区最右侧查看是否出现「更新」(英文界面为 “Update”)。
  2. 悬停按钮可看到「当前版本 → 目标版本」。
  3. 点击后状态依次为「正在更新…」「正在重启…」,随后页面自动刷新。

按钮出现条件:registry 上 distTag 指向的版本高于本机;或上次安装成功但重启尚未完成(此时显示「重启」)。

配置

在 profile 的 cordis.patch.yml 中覆盖插件行,修改后需重启 dsh(或在插件管理器中重载插件):

- id: dsh-auto-update
  name: '@marvinlee2011/dsh-auto-update'
  config:
    packageName: '@deepseek-ai/dsh'  # 要升级的包
    distTag: latest                  # 比较的 dist-tag
    registry: ''                     # 空 = 沿用 npm 自身的 registry 配置
    checkIntervalMinutes: 30         # 自动检查间隔,1–1440

常见调整:

  • 跟进预发布:将 distTag 改为 next 或 alpha(视目标包实际标签而定)。
  • 降低检查频率:增大 checkIntervalMinutes;打开页面仍会反映当前状态。
  • 镜像或私有源:registry 留空时插件执行 npm config get registry,也可写死地址。

调整 distTag 后,点击「更新」会按该标签当时解析出的精确版本安装。

适用场景与注意

适合谁:经常在浏览器里用 DSH Web、希望 registry 有新版本时能一眼看到、并愿意在确认后让本机全局 dsh 升级的用户。

务必注意:

  • 插件以当前 dsh 进程的 Node 用户身份执行全局 npm 安装与重启脚本。安装前建议在 GitHub 阅读源码与 MIT 许可证,确认行为符合你的环境策略。
  • 只在 Web profile 生效;CLI 或其它 profile 不会出现该按钮。
  • 不会静默升级;无更新时界面无额外提示,属预期行为。
  • 诊断文件位于 <DSH_HOME>/cache/dsh-auto-update/:state.json(最近检查与阶段)、restart.log(重启脚本输出)、restart.json(最近重启记录)。

右上角没有按钮时,可按 README 排查:当前 latest 是否等于已装版本(可用 npm view @deepseek-ai/dsh dist-tags 核对)、是否已打开会话、页面是否已加载插件(可刷新)。预发布在 next/alpha 时需改 distTag。

卸载

在插件管理器中停用或移除;或执行:

dsh plugin --profile web remove @marvinlee2011/dsh-auto-update

并从 dsh.profile.bundles 中删除 @marvinlee2011/dsh-auto-update,重启 dsh web。

结尾

dsh-auto-update 把「查 registry → 全局安装 → 重启进程 → 刷新页面」收成标题栏上的一个显式操作,默认只跟 latest,也可通过 cordis.patch.yml 改包名、dist-tag 与检查间隔。社区插件目录页:skillhub.cn/plugins/lee-nihao2333/dsh-auto-update;源码与完整 FAQ:github.com/lee-nihao2333/dsh-auto-update。

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

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

小夜