前言¶
DeepSeek Harness(DSH)桌面端可以按需裝社區插件,版本一升級,常見問題不是「裝不上新客戶端」,而是某個已裝插件仍調用舊版共享 UI 或宿主服務,界面卡在加載、日誌裏出現 is not a function。內置更新流程會問你是否安裝,但通常不會替你逐項覈對已裝插件與新包是否仍匹配。
下面介紹的 dsh-update-guard(更新守衛)由社區維護者 jiuyuan-yi 發佈,分類爲工作流,在 SkillHub 目錄與 GitHub 上均可找到;當前倉庫標註爲測試版能力,MIT 許可。它做兩件事:在待安裝更新就緒時做兼容預檢(必要時鎖定有風險的插件配置),並在啓用啓動包裝器後,對啓動失敗與插件配置被清空做有限自愈。插件不聯網、不上報數據。
這是什麼¶
dsh-update-guard 是給 DSH 桌面端用的插件:更新前檢查已裝插件會不會因接口缺失而失效;可選地在啓動失敗時重試、詢問是否停用第三方插件,並在配置被官方「禁用第三方」等操作清空時,從備份做外科式還原(默認跳過仍有問題的條目)。
運行環境要求:Node.js 18+、Windows(啓動包裝器依賴 wscript.exe)、已安裝 DSH 桌面端。作者說明完整流程尚未在真實版本升級上跑通,使用前宜結合倉庫內的真實環境清單自行驗證。
核心功能¶
更新前檢查¶
應用下載完更新、尚未安裝時,守衛會:
- 從安裝包解出兩套「接口面」:客戶端側共享 UI 模塊導出了哪些成員(瀏覽器半側插件用);宿主側運行時提供了哪些服務名(純宿主、
inject: [...]類插件用)。 - 掃描已裝插件實際引用了什麼。
- 只報告用到了新版本里沒有的插件。
命中後可在 cordis.patch.yml 裏把對應條目的 disabled 設爲 true(只改配置字段,逐字節可還原)。兩層證據的自動鎖定策略不同:
| 證據 | 缺失後果 | 自動鎖定 |
|---|---|---|
客戶端成員(如 UiPrimitives.xxx) |
渲染拋錯、界面崩 | 會鎖(在開啓 autoLock 等策略下) |
宿主服務(inject: [...] 裏的服務名) |
插件無法激活;required 插件可能導致整應用起不來 | 只提示,不自動鎖 |
宿主服務不自動鎖,是爲避免掃描器未建模的動態服務誤報。沒有可用解壓器時不會整體失敗,會降級爲只比對 engines.dsh / peerDependencies 等版本聲明——與加載器自身檢查同級,面板與 CLI 會標爲部分檢查,不會僞裝成「完整通過」。
解壓 NSIS 安裝包時,探測順序包括環境變量 DSH_7Z / DSH_7ZA、包內 vendor/7z.exe、PATH 上的 7-Zip 系工具、註冊表與常見安裝目錄;均無則降級。設 DSH_UPDATE_GUARD_NO_EXTRACTOR=1 可強制降級。
啓動失敗與配置還原(自愈腿)¶
可選安裝桌面啓動包裝器(wscript、隱藏窗口、無控制台):
- 啓動失敗 → 重試 → 仍失敗則彈框詢問是否停用第三方插件(默認「否」)。
- 發現插件配置被清空 → 從備份還原,只跳過有問題的那個。
- 桌面快捷方式被改回直連 exe → 下次啓動可改回包裝器路徑。
- 同一時刻只允許一個啓動器;DSH 已在運行時不啓第二個進程。
該腿默認關閉(installLauncher: false),開啓會改桌面圖標,關閉會還原。
檢查狀態表述¶
完整檢查、部分檢查、發現風險、沒有待裝更新四種狀態在面板與 CLI 中區分明確;部分檢查不會顯示爲「沒有發現不兼容」。
明確不做的事¶
不改插件源碼;不碰 !!js 等條件值;不判斷守衛自身;不寫死絕對路徑(安裝目錄來自注冊表 InstallLocation,profile 來自 DSH_PROFILE_DIR 或 ~/.dsh/profiles/<名>)。接口面比對覆蓋 4 個共享 UI 模塊與宿主服務名註冊形式,宿主 API 行爲變化(簽名、語義)不在範圍內。
安裝與啓用¶
需要 Node.js 18+、Windows、DSH 桌面端。官方 README 給出的步驟如下。
第一步,將倉庫放到 desktop profile 的 node_modules(路徑以 %USERPROFILE% 爲例):
git clone <repo> "%USERPROFILE%\.dsh\profiles\desktop\node_modules\dsh-update-guard"
將 <repo> 換爲 https://github.com/jiuyuan-yi/dsh-update-guard.git。
第二步,編輯該 profile 下的 package.json,把包名加入 bundle 列表:
{
"dsh": {
"profile": {
"bundles": [ "...", "dsh-update-guard" ]
}
}
}
重啓應用後,在 設置 → 通用 中會出現三行開關。配置文件位於 <profile>/.dsh-update-guard.json。
| 鍵 | 默認 | 說明 |
|---|---|---|
preflightOnStartup |
true |
啓動時跑檢查 |
autoLock |
false |
命中直接鎖定,不詢問 |
maxAutoLock |
3 |
一次最多鎖幾個 |
autoRestore |
true |
配置被清空時從備份還原 |
installLauncher |
false |
是否接管桌面快捷方式(自愈腿) |
典型用法¶
在插件目錄或通過 node 調用 bin/guard.mjs。
檢查待安裝的更新:
node bin/guard.mjs check
node bin/guard.mjs check --json
鎖定、解鎖與還原預演:
node bin/guard.mjs lock
node bin/guard.mjs unlock
node bin/guard.mjs restore
node bin/guard.mjs restore --apply
改配置並查看狀態:
node bin/guard.mjs config --set autoLock --value true
node bin/guard.mjs status
啓動器相關:
node bin/guard.mjs launcher status
node bin/guard.mjs launcher restore --dry-run
node bin/guard.mjs launcher restore
node bin/guard.mjs launcher uninstall
退出碼:0 正常,2 發現不兼容,1 出錯。
無人值守或測試時可使用 DSH_LAUNCHER_PROFILE、DSH_LAUNCHER_EXE / DSH_LAUNCHER_ARGS、DSH_LAUNCHER_ANSWER、DSH_LAUNCHER_QUIET=1 等環境變量(詳見 README)。
適用場景與注意¶
適合經常在 DSH 桌面端堆第三方插件、又希望在大版本更新前先看到「誰可能斷」的開發者。自動還原依賴啓動器記錄的上次清單與補丁層證據,首次運行無記錄時不做推斷;還原只做結構校驗,不啓動插件驗證運行時行爲,結構完整但接口仍不兼容的條目還原後仍可能出問題。
DSH 插件與宿主同一進程權限運行,安裝前應閱讀源碼與 MIT 許可證,自行評估信任邊界。社區目錄 SkillHub 插件頁 與 DeepSeek / 幻方無官方從屬關係,並非官方應用商店。
結尾¶
dsh-update-guard 把「更新前接口面 + 版本聲明」與可選的「啓動包裝 + 配置還原」拆成兩條可配置的腿,並區分完整檢查與部分檢查,避免把沒解包說成通過。目錄與源碼:
- 目錄頁:https://www.skillhub.cn/plugins/jiuyuan-yi/dsh-update-guard
- GitHub:https://github.com/jiuyuan-yi/dsh-update-guard