前言¶
在 DSH 的插件機制裏,Web 側邊欄和 agent 工具都可以擴展。對於經常在前臺終端運行 dsh web 的場景,一次完整重啓通常需要手動結束當前進程,再用原始命令重新啓動;如果舊進程還沒有退出,或者 Web 端口仍被佔用,重啓就容易失敗。
dsh-web-restart 針對這個流程提供側邊欄按鈕和 agent 可調用工具:終止當前 dsh web 進程,並在舊進程退出、端口空閒後,以相同命令重新拉起。重啓期間頁面不刷新,同一會話標籤頁會自動恢復 UI。
這是什麼¶
dsh-web-restart 是一個 DSH Web 插件,用於從側邊欄一鍵完整重啓 harness。
它會做三件事:
- 結束當前
dsh web進程。 - 通過啓動守衛等待舊進程退出且 Web 端口空閒。
- 以相同命令行重新拉起
dsh web,並保留原有運行參數。
倉庫路徑爲 csdjl88/dsh-web-restart,許可證爲 MIT。由於 npm 名稱 dsh-restart 已被同目的項目佔用,該插件發佈爲 dsh-web-restart。
核心功能¶
側邊欄重啓按鈕¶
插件在 sidebar.footer.action 行提供一個重啓按鈕。點擊後會直接觸發重啓,沒有確認對話框。該設計適用於 single-user、trusted-host 場景。
完整進程重啓¶
插件會終止當前 dsh web 進程,並以相同命令行重新拉起。重啓會保留 --profile、--patch 及內部參數,並且始終確保新進程帶有 --no-open,避免再彈出一個瀏覽器窗口。
啓動守衛¶
新進程不會立即啓動。插件會等待舊進程退出,並且確認 Web 端口空閒後,才拉起新的 dsh web。因此,在不需要 systemd、Docker、pm2 等守護進程的情況下,也可以完成一次受控重啓。
頁面自動恢復¶
重啓期間,按鈕會顯示 Restarting…,並輪詢健康端點。頁面不會整頁刷新,也不會打開新標籤頁。DSH WebSocket 自動重連後,UI 會在同一會話標籤頁恢復。
Agent 可調用工具¶
插件提供 dsh_restart 工具,可以和 Web 按鈕共用同一套重啓核心。
單次執行保護¶
當一次重啓正在進行時,重複點擊按鈕或再次調用工具會被拒絕,避免併發觸發多次重啓。
雙語支持¶
插件提供中英文雙語 UI 文案和 README。
安裝與啓用¶
插件要求 DSH 0.1.0-rc.7 或更新版本。
安裝命令如下:
dsh plugin --profile web add github:csdjl88/dsh-web-restart
安裝完成後,需要重啓 DSH,重啓按鈕纔會出現在側邊欄底部。
典型用法¶
Web 按鈕¶
安裝並重啓 DSH 後,可以點擊側邊欄底部的 Restart DSH 按鈕。
重啓期間,按鈕會顯示 Restarting… 並自動輪詢。頁面不會刷新,DSH WebSocket 自動重連後恢復 UI。
如果新進程在 30 秒內未就緒,界面會顯示錯誤。此時應檢查運行 dsh 的終端。
Agent 工具¶
在對話中可以直接要求重啓 DSH。對應工具是 dsh_restart,可選參數爲 reason。
例如,可以在對話中要求:
restart DSH
需要注意:一次重啓會中斷所有正在運行的 agent 任務和後臺作業。
底層接口與契約¶
插件通過以下 HTTP 端點觸發和檢查重啓狀態:
POST /dsh-restart
GET /dsh-restart/health
其中 POST /dsh-restart 用於觸發重啓,GET /dsh-restart/health 返回存活信息,並返回 pid,便於前端識別新進程。
插件還會使用以下環境契約:
DSH_RESTARTED_BY
DSH_RESTART_OLD_PID
DSH_RESTART_PORT
適用場景與注意¶
適合的場景¶
該插件適用於在前臺終端運行 dsh web、且沒有 supervisor 自動拉起策略的環境。
它適合用於:
- 修改 DSH Web 插件、補丁或相關配置後重啓 harness。
- 從瀏覽器側邊欄觸發一次完整進程重啓。
- 讓 agent 在對話中直接調用重啓工具。
與 supervisor 同時使用時要謹慎¶
如果運行環境已經使用 systemd、Docker、pm2 等 supervisor,並且配置了自動重啓策略,插件的啓動守衛和 supervisor 可能同時嘗試拉起新進程。
這會導致兩個實例競爭端口,其中一個進程可能觸發 EADDRINUSE。
在受 supervisor 管理的環境中,建議禁用 supervisor 的自動重啓策略,或移除 dsh-web-restart 插件。
重啓後如何停止 DSH¶
重啓後的新 dsh web 會運行在自己的 session,也就是自己的進程組。舊的前臺進程組退出後,可能不再接收終端的 Ctrl+C。
停止重啓後的 DSH,可以使用以下任一方式:
- 關閉運行
dsh的終端窗口。 - 在該終端中按
Ctrl+D。 - 在新終端中執行:
pkill -f "dsh web"
或者:
kill <pid>
權限與安裝前檢查¶
該插件會終止並重新拉起當前 dsh web 進程,相當於對當前 DSH 運行環境執行完整重啓。安裝前建議檢查源碼、依賴和 MIT 許可證,確認其行爲符合當前使用環境的要求。
結尾¶
dsh-web-restart 解決的是前臺運行 dsh web 時的完整重啓問題:保留原命令參數,避免端口競爭,避免打開新標籤頁,並提供 Web 按鈕和 dsh_restart agent 工具。它適合無 supervisor 的前臺 DSH Web 環境,也可以讓 agent 在對話中直接觸發重啓。
目錄頁:
https://www.skillhub.cn/plugins/csdjl88/dsh-web-restart
GitHub 倉庫:
https://github.com/csdjl88/dsh-web-restart