DSH Maestro Supervisor:DSH Web 恢復守護進程

在 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"]}}'

注意事項

  1. 構建依賴:src/ 目錄有任何修改後,必須運行 pnpm build。客戶端構建依賴 build-client.mjs,直接使用 tsc 無法生成正確的客戶端 bundle。
  2. 文件位置:LKG 快照存儲在用戶目錄下的 .supervisor 文件夾中。
  3. 權限:守護進程以用戶權限運行,若需 Telegram 通知需在 Systemd 配置中取消相關環境變量的註釋。
  4. 生態說明:DSH 插件目錄與 DeepSeek 或幻方官方無隸屬關係,僅作爲社區資源索引。

鏈接

  • 插件目錄:[catalog_url]
  • GitHub 倉庫:[github_url]
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜