在 DSH Web 環境中,進程崩潰或網絡波動會導致會話中斷,系統重啓後狀態難以恢復。DSH Maestro Supervisor 是一個守護進程與插件組合,用於自動檢測 DSH Web 的崩潰,回滾到已知良好的狀態(LKG),並恢復中斷的會話。
該插件由 ddtcorex 維護,採用 MIT 許可證。它通過一個獨立於 pnpm 樹的系統級守護進程來保證存活,同時作爲 DSH Web 內部的插件來處理會話恢復和瀏覽器重載。
核心功能¶
1. 崩潰檢測與 LKG 回滾¶
守護進程運行在 dsh web 進程樹之外,通過 Systemd 管理或手動啓動。它每 3 秒輪詢一次 Web 服務端口。當檢測到服務不可用或崩潰時,守護進程會嘗試將系統回滾到最近一次已知的良好快照(LKG)。
- 存儲位置:LKG 快照存儲在
~/.dsh/.supervisor/lkg/目錄下。 - 驗證機制:快照文件通過 SHA256 校驗。
- 回滾觸發:檢測到崩潰後,守護進程會等待 60 秒防抖,然後執行回滾。
2. 自動恢復中斷會話¶
當 DSH Web 重啓後,插件會自動掃描並恢復中斷的會話和未完成的輪次(open turns)。
- 掃描範圍:掃描最近 5 分鐘內(默認配置)的會話日誌。
- 恢復邏輯:查找包含中斷標記(
reason.kind === 'interrupted')的會話,或查找未閉合的輪次,並嘗試通過 RPC 重新連接或恢復上下文。 - 客戶端行爲:瀏覽器端插件會在離線、WebSocket 斷開或頁面可見性變化時,每 1 秒嘗試獲取頭部信息,成功後自動刷新頁面。
3. 健康報告¶
崩潰或回滾操作完成後,守護進程會生成一份健康報告。報告包含系統狀態摘要、Git Diff 以及最近的日誌片段。
安裝與啓用¶
1. 構建插件¶
如果從源碼安裝,需要執行構建命令。注意客戶端構建需要 build-client.mjs 包裝器,直接使用 tsc 會導致客戶端文件不完整。
pnpm --dir packages/dsh-maestro-supervisor install
pnpm --dir packages/dsh-maestro-supervisor build
pnpm --dir packages/dsh-maestro-supervisor verify
2. 添加到 DSH Web Profile¶
將插件添加到 Web 配置文件中。該包聲明瞭 dsh.client,瀏覽器端會自動加載。
dsh plugin --profile web add @ddtcorex/dsh-maestro-supervisor
pnpm --dir ~/.dsh/profiles/web install
前置檢查:在將插件添加到活躍配置的 bundles 之前,必須確保 dry-boot 通過。這能捕獲加載時失敗(如 lib/index.js 缺失、構建緩存陳舊等)。
DSH_HOME=$(mktemp -d) pnpm --dir deepseek-harness dsh web --port 0 &
# 等待啓動成功並 curl 200,然後 kill
3. 安裝守護進程¶
爲了在進程樹崩潰時存活,建議安裝 Systemd 守護進程。
bash packages/dsh-maestro-supervisor/scripts/install-systemd.sh
systemctl --user daemon-reload
systemctl --user enable --now dsh-web-supervisor
如果不使用 Systemd,可以在前臺手動運行守護進程進行調試。
node packages/dsh-maestro-supervisor/lib/index.js daemon
配置¶
插件的自動恢復行爲通過配置文件控制,優先級從高到低依次爲:Cordis 配置 > 環境變量 > Supervisor 配置文件 > Maestro 設置 > 默認值。
配置文件位於 ~/.dsh/.supervisor/config.json。
{
"autoResumeEnabled": true,
"autoResumeWithin": 5
}
| 配置項 | 類型 | 默認值 | 說明 |
|---|---|---|---|
autoResumeEnabled |
boolean | true |
是否啓用自動恢復。設爲 false 時僅通知。 |
autoResumeWithin |
number/string | 5 |
恢復窗口,單位爲分鐘或 5m 格式。 |
使用方法¶
守護進程管理¶
node packages/dsh-maestro-supervisor/lib/index.js status
node packages/dsh-maestro-supervisor/lib/index.js logs --tail 50
node packages/dsh-maestro-supervisor/lib/index.js daemon
手動回滾¶
當需要強制回滾到最新 LKG 時:
node packages/dsh-maestro-supervisor/lib/index.js rollback --latest
RPC 接口(Loopback)¶
守護進程通過 Loopback RPC 接口提供服務,用於手動掃描和恢復特定會話。
掃描中斷會話:
curl -s http://127.0.0.1:3080/dsh-maestro-supervisor-resume/scan -X POST \
-H 'content-type: application/json' \
-d '{"type":"client-request","rpcId":"r1","method":"scan","payload":{"withinMs":300000}}'
恢復指定會話:
curl -s http://127.0.0.1:3080/dsh-maestro-supervisor-resume/resume -X POST \
-H 'content-type: application/json' \
-d '{"type":"client-request","rpcId":"r2","method":"resume","payload":{"ids":["session-id"]}}'
注意事項¶
- 構建依賴:
src/目錄有任何修改後,必須運行pnpm build。客戶端構建依賴build-client.mjs,直接使用tsc無法生成正確的客戶端 bundle。 - 文件位置:LKG 快照存儲在用戶目錄下的
.supervisor文件夾中。 - 權限:守護進程以用戶權限運行,若需 Telegram 通知需在 Systemd 配置中取消相關環境變量的註釋。
- 生態說明:DSH 插件目錄與 DeepSeek 或幻方官方無隸屬關係,僅作爲社區資源索引。
鏈接¶
- 插件目錄:[catalog_url]
- GitHub 倉庫:[github_url]