前言¶
在 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 安装来源 →
.gitorigin →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