前言¶
DeepSeek Harness(DSH)CLI 本身沒有內置的 update 子命令。升級主程序需要手動運行 npm install,而且一旦在服務運行時原地覆蓋安裝,舊進程會緊握舊模塊,新版本啓動失敗時也無法回退。這個插件的前提只有一條:永不原地升級正在運行的實例。
這是什麼¶
這是 Wonderow666 維護的一個 DSH 插件,用於從網頁設置頁檢查、安裝並回滾 @deepseek-ai/dsh 的更新。新版本會裝到獨立目錄,先通過配置冒煙驗證,再切換啓動指針,失敗時自動回滾。插件運行在當前 dsh 進程權限下,安裝前建議檢查源碼與許可證。
核心能力¶
- 旁路安裝:新版本裝到
<installBase>\dsh-install-<version>,與當前實例隔離。 - 健康檢查與自動回滾:切換指針後由宿主之外(WMI 拉起)的進程重啓,失敗則回退指針並寫入
last-result.json(status: "rolled-back")。 - 安裝目錄可配置:支持在設置頁瀏覽/輸入目錄,支持遷移當前安裝到新目錄,失敗時指針與目錄一起回滾。
- 網頁端管理:設置頁“載具更新”卡片提供版本檢查、安裝、回滾、目錄配置與自動更新開關。
安裝與啓用¶
推薦從 GitHub 安裝:
dsh plugin --profile web add github:Wonderow666/dsh-auto-update
或從本地目錄安裝:
dsh plugin --profile web add link:C:\path\to\dsh-auto-update
安裝後需在 profile 的 bundles 裏啓用:
{
"dsh": { "profile": { "bundles": [ "...", "dsh-auto-update" ] } }
}
最後重啓一次 web 宿主讓插件加載。之後的升級無需再手動重啓。
配置¶
插件通過環境變量與 profile 配置來約定目錄結構與啓動方式:
| 變量 | 默認 | 說明 |
|---|---|---|
DSH_AUTO_UPDATE_LAUNCH_CMD |
(空) | 切換版本後重啓 web 宿主的腳本;未配置則不允許升級 |
DSH_AUTO_UPDATE_LAUNCHER_DIR |
%DSH_HOME%\auto-update\launcher |
啓動指針 current-root.txt 所在目錄 |
DSH_AUTO_UPDATE_BOOT_LOG |
(空) | 啓動日誌路徑;配了才能在卡片上顯示“起不來”的具體原因 |
DSH_HOME |
~/.dsh |
DSH 數據根;安裝目錄默認在它旁邊 |
DSH_AUTO_UPDATE_INSTALL_BASE |
(空) | 安裝目錄的兜底默認值,會被 install-base.txt 覆蓋 |
示例:
setx DSH_AUTO_UPDATE_LAUNCH_CMD "C:\tools\start-dsh-web.cmd"
setx DSH_AUTO_UPDATE_LAUNCHER_DIR "C:\tools\dsh-launcher"
setx DSH_AUTO_UPDATE_BOOT_LOG "C:\tools\start-dsh-web.log"
profile 配置(cordis.patch.yml):
- id: dsh-auto-update
name: dsh-auto-update
config:
enabled: true
channel: latest
intervalHours: 6
autoApply: false
registry: ""
運行時修改(設置頁開關、接口調用)落到 %DSH_HOME%\auto-update\config.json,優先級高於 patch 裏的默認值。
啓動腳本契約¶
插件只負責切換指針,起進程這一步交給你自己的腳本。examples/start-dsh-web.cmd 是一份可直接改的模板:
- 指針只寫版本號(如
0.2.1-rc.2),腳本自己拼出安裝目錄。 - 讀不到指針時,按
dsh-install-*目錄名倒序回退到最新的完整安裝。 - 一定要把 stdout/stderr 落盤(模板寫同目錄
web-run.out.log,並自行輪轉)。 - 用了自定義安裝目錄時,腳本還要讀同目錄的
install-base.txt決定去哪個目錄找dsh-install-<版本>,讀之前先執行chcp 65001。
安裝目錄(可改)¶
默認安裝目錄是 %DSH_HOME% 的上一級(例如 ...\w),每個版本裝在 <安裝目錄>\dsh-install-<版本> 裏。設置頁的「安裝目錄」區塊可以把它換到別的盤:
- 瀏覽…:彈出系統的選目錄窗口,選完直接把路徑填進輸入框。服務綁定在
127.0.0.1時是 Windows 原生對話框;從手機或別處訪問時對話框出現在運行 dsh 的那臺機器的屏幕上,這時手動輸入或粘貼路徑即可。 - 輸入框旁邊的提示會實時預覽落點:
將安裝到 <安裝目錄>\dsh-install-<當前版本>。你填/選的路徑裏出現 Windows 禁止的字符(" * ? < > |)會立刻標紅並禁用兩個寫入按鈕。中文目錄名可以。 - 改到這裏:只寫配置,不動正在跑的安裝;之後
/apply裝的新版本會落在新目錄。 - 把當前安裝遷過去:整體複製(robocopy)→ 自檢(版本號 +
--dump-config冒煙)→ 寫install-base.txt→ 切指針 → 重啓 → 健康檢查 + 版本覈對。任何一步失敗,指針和install-base.txt會一起回滾。 - 恢復默認位置:刪掉
install-base.txt。
契約(<指針目錄>\install-base.txt,默認 %DSH_HOME%\auto-update\launcher\):
D:\dsh-installs
- 只有一行、UTF-8(無 BOM)的絕對路徑、無換行。啓動腳本讀這個文件之前必須切到 UTF-8 代碼頁(
chcp 65001),否則 cmd 會按 OEM 代碼頁解碼,中文目錄名變成亂碼後靜默指向空目錄。 - 文件不存在 = 用默認安裝目錄。
- 遷移後舊目錄不會自動刪(它就是回滾路徑),確認新版穩定後自己清理。
- 指針存的是版本號而不是路徑,所以“同一版本在兩個目錄裏都有”時按
install-base.txt→ 默認目錄的順序找,再退到該目錄下最新的完整安裝。
限制:自定義目錄必須是絕對路徑、不含 " * ? < > |、不以空格或點結尾,磁盤剩餘空間需 ≥ 安裝體積的 1.2 倍(0.2.x 每個版本約 300–700 MB)。
接口¶
全部在 /dsh-auto-update/api 下。寫操作必須帶 x-dsh-auto-update: 1 頭。
| 方法 | 路徑 | 說明 |
|---|---|---|
| GET | /status |
當前/最新版本、通道、可用更新、上次結果、掛起任務、canRestart |
| GET | /health |
存活探針 |
| POST | /check |
查 registry 的 latest/next/alpha,寫 state.json |
| POST | /apply |
後臺安裝,body 可帶 {"version":"x.y.z"},默認最新版 |
| POST | /rollback |
回到 previous-root.txt 記錄的版本 |
| POST | /config |
改 autoApply / intervalHours / channel / registry,落 config.json |
| POST | /install-base |
設置安裝目錄,body {"base":"D:\\dsh-installs"};傳 "" 恢復默認位置(隻影響以後的新版本) |
| POST | /migrate |
把當前安裝複製到新目錄並重啓過去,body {"base":"..."};失敗自動回滾指針與目錄 |
示例:
$base = "http://127.0.0.1:3080/dsh-auto-update/api"
curl.exe -s "$base/status"
curl.exe -s -X POST "$base/check" -H "x-dsh-auto-update: 1"
curl.exe -s -X POST "$base/apply" -H "x-dsh-auto-update: 1" -H "content-type: application/json" -d "{}"
curl.exe -s -X POST "$base/rollback" -H "x-dsh-auto-update: 1"
curl.exe -s -X POST "$base/install-base" -H "x-dsh-auto-update: 1" -H "content-type: application/json" -d '{"base":"D:\\dsh-installs"}'
curl.exe -s -X POST "$base/migrate" -H "x-dsh-auto-update: 1" -H "content-type: application/json" -d '{"base":"D:\\dsh-installs"}'
適用場景與注意¶
適合需要頻繁升級 @deepseek-ai/dsh 的 DSH / 智能體開發場景,尤其是需要避免原地覆蓋、保證升級可回退的情況。插件以當前 dsh 進程權限運行,安裝前建議檢查源碼與許可證。注意:Windows Only(PowerShell 5.1 + cmd),依賴 WmiPrvSE.exe 進行進程交接,以宿主之外的重啓保證切換可靠性。
短結尾¶
這個插件在網頁端提供了一套完整的安全升級流程:旁路安裝、健康檢查與自動回滾,讓 DSH 主程序升級不再依賴手動 npm install。安裝與配置見上方代碼塊與說明。目錄頁與 GitHub 鏈接見下方。