前言¶
DSH Desktop 走 electron-builder 的 app-update.yml 更新通道,常见做法是等主进程弹出更新对话框再确认安装。对经常挂着对话、装了一堆 profile 插件的开发者来说,手动点确认只是一半麻烦:升级后主程序换了版本,插件目录、storages 和各类数据目录若没一并处理,容易出现设置回退不全或 bundle 状态对不上的情况。
下面介绍的 dsh-auto-update 是维护者 zhkkjF 发布的 Host + Web 插件(当前 package 版本 1.0.0,MIT 许可证)。它在读取与官方相同的更新 feed 的前提下,自动检查、校验并安装新版本,并在首次启动新版本时按更新前快照恢复 profile、插件与相关数据目录。
这是什么¶
插件面向已打包的 DSH Desktop:依赖安装目录中的 app-update.yml 与 app.asar,在普通 dsh web 会话里设置面板会提示「仅在 DSH Desktop 中可用」。社区目录页:SkillHub - dsh-auto-update;源码与说明:GitHub zhkkjF/dsh-auto-update。
与官方「手动确认」更新的主要差别在确认与安装环节:插件通过一次性 Windows 计划任务先结束 Electron 主进程,再以与 electron-updater quitAndInstall(true, true) 一致的参数静默跑 NSIS 安装器,不经过主进程更新对话框。安装过程中 DSH 会关闭并重新打开,进行中的对话会中断;默认开启「等待运行中的任务结束」,有对话回合或后台任务时会推迟安装。
核心功能¶
更新检查¶
- 读取
<resources>/app-update.yml中的 feed 地址与 channel(支持nightly/latest)。 - 请求
<url>/<channel>.yml,解析version以及安装包的url、size、sha512。 - 与
<resources>/app.asar/package.json中的当前版本比较,判断是否有新版本。
更新前快照¶
发现新版本并准备安装时,在 $DSH_HOME/dsh-auto-update/snapshots/<timestamp>/ 创建快照,内容包括:
- profile 侧:
package.json、cordis.patch.yml、pnpm-lock.yaml、pnpm-workspace.yaml、compatibility.json、.npmrc storages/(插件设置存储)data/<插件目录>/(默认包含dsh-pet、dsh-market、skills-manager等目录,可在配置中修改)manifest.json:版本、bundle 列表、依赖、禁用行
下载与校验¶
安装包流式下载到 $DSH_HOME/dsh-auto-update/downloads/,边下载边计算 SHA-512,仅在与 feed 中记录一致后才用于安装。
静默安装(Windows)¶
写入 pending.json 后创建一次性计划任务,由 Task Scheduler 服务执行(绕开仍在运行的 Host 插件进程,避免 NSIS 安装器在应用未退出时异常退出,参见 electron-builder#8026):
- 等待 3 秒,核对当前 Electron 主进程 PID 与可执行文件路径。
taskkill /PID <pid> /T /F,释放安装目录占用。- 以
--updated /S --force-run启动安装器,装完后自动重新打开应用;任务结束时自行删除。
新版本首次启动后的恢复¶
插件若发现 pending.json 的 fromVersion 与当前版本不同,则:
- 从快照恢复 profile 文件、
storages与插件数据目录(覆盖前会把当前状态备份到<snapshot>/pre-restore-<timestamp>/)。 - 使用 Desktop 自带的 pnpm 在 profile 目录执行
pnpm install重建node_modules。 - 通过 Plugin Manager 服务补装缺失或损坏的 bundle,恢复启用与禁用状态。
- 结果写入
$DSH_HOME/dsh-auto-update/recovery.json,并在面板展示。
设置面板¶
路径:设置 → 自动更新(settings.section,id auto-update)。面板提供状态展示、自动更新开关、立即检查/安装、手动快照、重装插件、恢复设置等操作。面板中的开关与检查间隔会写入 $DSH_HOME/dsh-auto-update/settings.json,优先于 cordis.patch.yml 中的默认值。
配置说明¶
默认配置在插件 bundle 的 cordis.patch.yml 中,常用字段如下:
| 字段 | 默认 | 说明 |
|---|---|---|
checkIntervalMinutes |
30 |
自动检查间隔(分钟);0 表示关闭定时检查 |
autoInstall |
true |
发现新版本时自动下载并静默安装 |
autoInstallWhenIdle |
true |
有运行中的任务时推迟安装 |
snapshotKeep |
5 |
保留最近几份快照 |
restoreSettings |
true |
更新后恢复 storages 与插件数据目录 |
restorePolicy |
overwrite |
overwrite 覆盖为更新前设置;missing-only 只补缺失文件 |
dataDirs |
见 README | 需要一并备份/恢复的 $DSH_HOME 下插件数据目录 |
示例片段(实际以仓库内 cordis.patch.yml 为准):
checkIntervalMinutes: 30
autoInstall: true
autoInstallWhenIdle: true
snapshotKeep: 5
restoreSettings: true
restorePolicy: overwrite
插件要求 DSH 引擎版本:>=0.2.1-rc.1 <0.2.2-0 或 >=0.2.2-rc.1 <0.3.0-0(见 package.json 中 engines.dsh)。
安装与启用¶
已抓取资料中未给出固定的 CLI 安装命令字符串。可从社区目录页 SkillHub 或 GitHub 仓库说明获取与当前 DSH 版本一致的安装方式;安装前请阅读源码与 MIT 许可证,确认你愿意以当前 DSH 进程权限运行该插件。
启用后,在 DSH Desktop 打开 设置 → 自动更新 即可查看状态并调整行为。若 checkIntervalMinutes 大于 0 且开启了自动安装,插件会按间隔检查官方 feed;也可在面板中手动触发「立即检查」或「立即安装」。进行安装前请先保存当前工作。
典型用法¶
- 日常静默跟进 latest / nightly:保持默认
autoInstall: true与autoInstallWhenIdle: true,在有新版本且当前无运行中任务时自动完成下载与安装,启动后自动恢复插件环境。 - 大版本前先留底:在面板执行「手动快照」,确认
$DSH_HOME/dsh-auto-update/snapshots/下有新目录后再允许自动或手动安装。 - 更新后不想让新默认值覆盖手工改动:将
restorePolicy设为missing-only,只补缺失文件,避免overwrite把更新前的 storages 写回并覆盖你在新版本里改过的同名设置。 - 安装或恢复失败:查看面板错误信息与
$DSH_HOME/dsh-auto-update/下的日志与recovery.json,必要时用保留的快照或面板中的「恢复设置」「重装插件」尝试修复。
适用场景与注意¶
适合需要长期在 Windows 上使用打包版 DSH Desktop、并希望跟进官方 app-update.yml 通道、同时尽量减少「升完版插件和环境要对半天」成本的开发者。
使用前请注意:
- 仅支持存在
app-update.yml与app.asar的 Desktop 打包环境;静默安装依赖 Windows 计划任务,流程以 README 描述为准。 - 下载源与
app-update.yml一致,仅接受 SHA-512 校验通过的安装包;状态与日志均在$DSH_HOME/dsh-auto-update/,不写 profile 之外的其他系统位置。 pnpm install在 profile 目录执行,失败时面板会报错并保留快照供手动处理。- 插件在 DSH 当前进程权限下运行,安装前请自行审阅 GitHub 仓库 源码。DeepSeek Harness 社区插件目录由 SkillHub 等站点维护,与 DeepSeek / 幻方无官方从属关系。
结尾¶
dsh-auto-update 把「读官方 feed → 校验安装包 → 静默装 Desktop → 按快照恢复 profile 与插件」串成一条可配置的流水线,并把关键步骤暴露在设置面板里。若你需要在 Desktop 上尽量少打断工作地跟进 nightly 或 latest,可以结合 SkillHub 目录说明安装插件,再从 设置 → 自动更新 调整检查间隔与恢复策略。
- 目录页:https://www.skillhub.cn/plugins/zhkkjF/dsh-auto-update
- GitHub:https://github.com/zhkkjF/dsh-auto-update