在 DSH 的插件化架構中,升級 host 或修復插件後通常需要重啓服務。以往需要手動在終端執行 kill 命令,且運行中的會話會被中斷。dsh-web-restart 插件通過 UI 提供重啓入口,並配合獨立的監督進程處理真正的服務重啓,同時支持自動恢復被中斷的會話。
核心功能¶
- 界面重啓:在側邊欄底部提供重啓按鈕,支持任何佈局。
- 狀態監控:通過圓點顏色指示服務與監督進程狀態(綠=運行中,黃=排隊中,紅=未運行)。
- 確認機制:點擊按鈕後彈出居中確認框,防止誤觸。
- 自動繼續:重啓後自動掃描並恢復被中斷的會話(需配置開啓)。
- 崩潰自愈:服務意外退出時,監督進程可自動拉起服務。
安裝與啓用¶
1. 安裝插件¶
在終端中執行以下命令安裝插件:
dsh plugin --profile web add dsh-web-restart
安裝完成後,重啓 DSH web 服務以生效。
2. 部署監督進程¶
插件本身只負責發送重啓請求,真正的 kill + start 操作由獨立的監督進程執行。安裝插件後,必須手動部署監督進程,否則按鈕將顯示紅色狀態。
- 複製腳本:
mkdir -p ~/.dsh/scripts
cp scripts/dsh-web-supervisor.sh ~/.dsh/scripts/ && chmod +x ~/.dsh/scripts/dsh-web-supervisor.sh
- 配置 launchd:
cp scripts/com.dsh.web-supervisor.plist.example ~/Library/LaunchAgents/com.dsh.web-supervisor.plist
# 編輯 plist 文件,將 YOUR_USER 替換爲實際用戶名
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.dsh.web-supervisor.plist
- 驗證狀態:
等待約 5 秒後,執行以下命令檢查狀態:
~/.dsh/scripts/dsh-web-supervisor.sh status
輸出 `running` 且 UI 按鈕變爲綠色點表示部署成功。
3. 配置自動繼續¶
在 設置 → 插件 → 插件配置 中,找到“重啓服務設置”卡片,開啓“重啓後自動繼續中斷的會話”開關並保存。
監督進程機制¶
插件運行在 DSH web 進程內部,無法直接殺死宿主進程(會導致自身隨宿主一同退出)。因此,插件僅作爲請求方,真正的服務重啓由 launchd 託管的監督進程執行。
監督腳本(dsh-web-supervisor.sh)負責輪詢請求文件、執行停止與啓動、處理端口釋放,並在服務崩潰時自動拉起。如果啓動失敗,它會將錯誤日誌寫入監督日誌文件,便於排查。
自動繼續邏輯¶
當開啓自動繼續功能後,服務重啓完成(約 2 秒後)會執行一次掃描:
- 掃描範圍:僅恢復上次啓動標記之後被中斷的會話。
- 恢復條件:識別被強制終止(進程被殺)或因非用戶原因中止的會話。用戶主動停止的會話不會被恢復。
- 恢復行爲:
- 頂層會話及其子代理會被恢復。
- 如果有 active goal,會自動重新武裝並繼續運行。
- 如果沒有 active goal,會注入一條合成消息提示繼續之前的工作。
相關文件與命令¶
- 請求文件:
~/.dsh/dsh-web.restart-request - 運行狀態:
~/.dsh/dsh-web-restart.json - 監督日誌:
~/.dsh/dsh-web-restart.log - 服務日誌:
~/.dsh/dsh-web.log
常用命令:
# 查看監督進程狀態
~/.dsh/scripts/dsh-web-supervisor.sh status
# 徹底停止守護進程
~/.dsh/scripts/dsh-web-supervisor.sh halt
已知限制¶
- 在 include 方式掛載的部署(如倉庫
link:工作區插件)下,插件配置卡片可能因命名空間原因在 UI 中不顯示。此時可使用重啓彈窗內的開關,或直接編輯~/.dsh/settings.yaml文件。