前言¶
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