dsh-auto-update:DSH 启动时检查已启用插件更新

前言

在 DeepSeek Harness(dsh)里,插件往往随 profile 的 dependencies 与 dsh.profile.bundles 一起安装、启用。版本分散在 npm registry 上,手动对照 package.json 再执行 dsh plugin add 容易漏项,也不符合「打开环境就能干活」的习惯。

下面介绍社区插件 dsh-auto-update(维护者 1708994293-hue):每次打开 DSH 后,在后台检查你已下载且已启用的插件是否有可前向升级的 semver 新版本,有则在界面列出并询问,确认后才走官方 dsh plugin add 通道更新;无更新则静默。分类为工作流,目录页见 SkillHub,源码与说明见 GitHub。

这是什么

dsh-auto-update 是 DSH 的 bundle 插件(npm 包名 @sueleven/dsh-auto-update,当前资料版本 1.0.1)。它解决的是:启动后自动发现已启用插件的可升级版本,由你决定是否更新,且不覆盖 profile 配置。

与「完全手动查版本、逐条安装」相比,检查在启动约 8 秒后后台进行,不阻塞界面;更新语义与插件市场一致,完成后提示重启 DSH 后生效。

核心功能

资料中可核对的行为如下:

  1. 检查范围:profile package.json 的 dependencies 与 dsh.profile.bundles 的交集(已下载且已启用);排除市场里被禁用的包、file: / link: / git: 等非 registry 依赖,以及插件自身。
  2. 版本比较:使用 semver,只列出可前向升级的项,不会建议降级。
  3. 界面:有新版本时右下角出现 shell.overlay 提示卡,逐条显示「插件 当前版本 → 最新版本」;按钮为全部更新与稍后提醒;无更新时不打扰。
  4. 更新路径:调用与 DSH 插件市场相同的官方 CLI 通道(dsh plugin ... add,并带 --config.minimum-release-age=0),不直接改 profile 文件。

实现上分为 Host(lib/index.js:延时检查、状态机、路由 /dsh-auto-update/status|check|apply|dismiss)、Client(lib/client.js:提示卡与轮询)、以及检查/更新器(lib/update.mjs:读 profile、查 npm、按需执行官方 add)。

安装与启用

要求 dsh 0.2.1 及以上(插件声明了 dsh.bundle manifest)。Node 引擎要求 >=20(见 package.json)。

从 npm 安装(推荐,任意平台)

npm 上无 scope 名 dsh-auto-update 因与已有包名过于相似被拒绝,因此发布名为带 scope 的 @sueleven/dsh-auto-update:

dsh plugin --profile desktop add @sueleven/dsh-auto-update

从 GitHub 安装

dsh plugin --profile desktop add github:1708994293-hue/dsh-auto-update

从本地目录安装

# Windows:脚本会复制插件并调用官方 dsh plugin 通道安装
pwsh -NoProfile -File scripts/install.ps1

任意平台也可用 link 安装(将路径换成本仓库绝对路径):

dsh plugin --profile desktop add link:<本仓库绝对路径>

装完后完全退出并重启 DSH,侧边栏「插件」页里应出现 dsh-auto-update。

从 1.0.0 升级

1.0.0 的前端模块注册名遗漏 npm scope,可能导致 Desktop 启动失败并记录 duplicate factory registration for "dsh-auto-update";1.0.1 已修复。完全退出 DSH 后执行:

dsh plugin --profile desktop add '@sueleven/dsh-auto-update@1.0.1' --config.minimum-release-age=0

重新打开 DSH;若此前因恢复操作停用了插件,在插件页重新启用即可。

典型用法

日常使用无需额外操作:启动 DSH 后等待默认约 8 秒,若有可升级项会弹出提示卡,按需点「全部更新」或「稍后提醒」。

需要脚本或排障时,可在插件目录下直接调用更新器(路径随安装方式不同:npm 安装一般在 profile 的 node_modules/@sueleven/dsh-auto-update,本地 link: 多在 ~/.dsh/plugins/dsh-auto-update):

# 只检查,不做任何修改
node <插件目录>/lib/update.mjs --check

# 列出可更新项(JSON)
node <插件目录>/lib/update.mjs --check --json

update.mjs 还支持 --profile、--dry-run、--help。

环境变量与日志

可通过环境变量调整行为(均为资料原文):

变量 作用
DSH_AUTO_UPDATE_DELAY_MS 启动后延时多久开始检查(默认 8000)
DSH_AUTO_UPDATE_DISABLE=1 本次启动不检查、不显示提示
DSH_AUTO_UPDATE_PROFILE 覆盖 profile 名(默认读 DSH_PROFILE,否则 desktop)
DSH_AUTO_UPDATE_DATA_DIR 覆盖日志/状态目录(默认插件包目录)

日志与状态:

  • <插件目录>/logs/auto-update.log:检查与更新记录
  • <插件目录>/logs/plugin.log:生命周期与错误
  • <插件目录>/state/last-run.json:最近一次检查的结构化结果

适用场景与注意

适合谁:长期在 Desktop profile 下启用多个来自 npm 的 DSH 插件、希望启动时被动收到升级提醒、且希望更新仍经官方 dsh plugin add 的开发者。

注意:

  • 插件以当前 dsh 进程权限运行,安装前请自行阅读 仓库源码 与 MIT 许可证。
  • 仅对 registry 依赖做检查;link:、Git 等非 registry 安装不会出现在可更新列表中。
  • 社区目录(如 awesome-dsh-plugin)与 SkillHub 等为社区索引,与 DeepSeek / 幻方无官方从属关系;本插件是生态中的工作流类扩展,不是 DSH 内置功能。

卸载示例:

dsh plugin --profile desktop remove @sueleven/dsh-auto-update

Windows 本地安装还可使用仓库中的 scripts/uninstall.ps1 删除插件目录。

结尾

dsh-auto-update 把「已启用插件的版本对齐」收拢到每次启动后的单次检查与用户确认流程里,减少手工查 registry 与漏更。需要安装说明、环境变量与手动检查命令时,以 README 为准:

  • 目录页:https://www.skillhub.cn/plugins/1708994293-hue/dsh-auto-update
  • GitHub:https://github.com/1708994293-hue/dsh-auto-update
羽毛球分组比赛记分
小程序二维码

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

小夜