DSH 插件自动更新

前言

在 DSH 的「一切皆插件」架构下,每个插件都可能独立演进。手动逐个检查更新既耗时又容易遗漏,尤其是对多 profile 场景。插件自动更新直接连接已安装插件的原 GitHub 仓库,默认每 24 小时检查并安装更新,支持人工控制和失败回退。

是什么

这是 InariNGT-Ofiicial 维护的 DSH 原生插件,用于自动检查并安装已安装插件的新版本。插件本身通过官方 DSH CLI 与包管理器完成检查和安装,不发起模型调用。

核心功能

  • 默认每 24 小时检查一次已安装插件;首次启动延迟 15 秒;重启后读取上次检查时间,未到期不重复检查
  • 自动安装范围包括同一 DSH 主目录下所有 profile 的直接安装插件,保留原有的启用状态;安装完成后需在对应 profile 重新加载或重启 DSH 才生效
  • 支持人工控制:在对话中直接说“把检查间隔改成 48 小时”“关闭自动更新,只保留检查”“开启自动更新”“现在检查并更新插件”等
  • 通过 plugin_updates_schedule 和 plugin_updates_auto_update 接口,可读取、设置或重置检查间隔(0~168 小时)与自动更新开关
  • 自动安装时,优先从本地安装信息确定原仓库(用户配置 → GitHub 安装来源 → .git origin → package.json.repository)
  • 对 npm 正式包安装的插件,从 profile 配置的包源读取同名、精确版本包,重新核对其 GitHub 仓库、包名、版本和 DSH 要求后安装
  • 对 GitHub 或 tarball 安装的插件,优先取对应 Release 的 .tgz,没有时尝试标签归档,核对包名、版本、可运行入口和 bundle patch;Release 提供 SHA-256 digest 时同时校验
  • 多包仓库、本地 link/workspace 源码、仅开发分支的新版本、缺少可安装包等情况会在报告中说明原因,保留原安装
  • 安装前保存旧包 tarball 和 profile 的 manifest、lockfile、workspace 设置、patch;失败且文件已改变时尝试通过官方 CLI 安装旧版本,回退也失败则标记 needs_attention,暂停自动重试
  • 默认报告位于 $DSH_HOME/plugin-updates/<当前profile>/,没有设置 DSH_HOME 时使用 ~/.dsh/;包含 latest.html / latest.json(可读报告与结构化结果)、cache.json(GitHub ETag、HTTP 缓存和限流退避)、schedule.json / auto-update.json(人工检查间隔与开关)、update-history.json(最近 50 次安装记录及恢复结果)、backups/(更新前的可安装旧包和 profile 文件)、downloads/(核对过的 GitHub 安装包)
  • 公开仓库不强制 token;私有仓库或更高 API 额度可通过环境变量 DSH_GITHUB_TOKEN 配置,或用 githubTokenEnv 指定变量名;GitHub 检查与归档下载支持配置的 HTTP/HTTPS 代理,其次使用 HTTPS_PROXY
  • 插件市场适配 v0.2.2,提供中英文标题、说明、作者和蓝白更新图标;支持 format 1 自定义索引的市场可添加 https://raw.githubusercontent.com/InariNGT-Ofiicial/dsh-plugin-updates/main/market/index.json

安装与启用

需要 Node.js 24+、DSH 0.2.1-rc.2。可直接安装 Release URL:

dsh plugin --profile desktop add https://github.com/InariNGT-Ofiicial/dsh-plugin-updates/releases/download/v0.2.2/dsh-plugin-updates-0.2.2.tgz

桌面版命令未加入 PATH 时:

& 'D:\DSH\resources\runtime\cli\bin\dsh.cmd' plugin --profile desktop add https://github.com/InariNGT-Ofiicial/dsh-plugin-updates/releases/download/v0.2.2/dsh-plugin-updates-0.2.2.tgz

命令安装后重新加载或重启 DSH。也可从 Release 下载 .tgz 后通过本地路径安装。

原生配置

在当前 profile 的 cordis.patch.yml 中设置已有条目:

- id: plugin-updates
  config:
    autoUpdate: true
    intervalHours: 24
    checkOnStart: true
    startupDelaySeconds: 15
    allProfiles: true
    includePrereleases: false
    timeoutMs: 12000
    maxRequests: 40
    githubTokenEnv: DSH_GITHUB_TOKEN
    proxyUrl: ""
    repositories: []
  • autoUpdate: false 只关闭安装,intervalHours: 0 暂停全部定时任务
  • checkOnStart: false 在启动时不立即进行到期检查
  • 插件只在 DSH 运行且启用时执行,不创建操作系统计划任务
  • 缺少来源或子目录时,可以通过可信本地配置补充

典型用法

在 DSH 对话中,可以直接说以下命令进行人工控制:

  • “现在检查并更新插件” → 调用 plugin_updates_auto_update 的 run 行为,按当前开关立即检查并更新
  • “把检查间隔改成 48 小时” → 调用 plugin_updates_schedule 的 set 行为,将检查间隔设为 48 小时
  • “关闭自动更新,只保留检查” → 调用 plugin_updates_auto_update 的 set 行为,将自动更新开关设为 false
  • “开启自动更新” → 调用 plugin_updates_auto_update 的 set 行为,将自动更新开关设为 true
  • “查看最近报告、检查时间和自动更新开关” → 调用 plugin_updates_status 接口,查看最近报告、检查时间和自动更新开关
  • “恢复插件配置的开关” → 调用 plugin_updates_auto_update 的 reset 行为

检查间隔支持 0~168 小时,非零间隔最短按 1 分钟计时;开关更改在当前安装结束后阻止后续更新,不强行终止正在执行的包管理操作;人工设置优先于原生配置,调用对应 reset 后重新使用原生配置。

适用场景与注意

  • 适合需要统一管理多 profile 插件版本、希望减少手动检查和更新的 DSH 使用者
  • 插件以当前 DSH 进程权限运行,安装前应检查源码与许可证
  • 安装更新后,不同插件、依赖和宿主版本可能仍需重新加载后检查;无法确认的结果不会显示为成功
  • 插件不会自动重启 DSH,更新完成后需在对应 profile 重新加载或重启 DSH

短结尾

插件自动更新通过原生 CLI 完成检查与安装,默认每 24 小时检查一次,支持人工控制和失败回退,适合需要统一管理多 profile 插件版本的使用者。目录页:https://www.skillhub.cn/plugins/InariNGT-Ofiicial/dsh-plugin-updates;GitHub:https://github.com/InariNGT-Ofiicial/dsh-plugin-updates

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

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

Xiaoye