dsh-web-restart:側邊欄一鍵完整重啓 DSH Web 的插件

前言

在 DSH 的插件機制裏,Web 側邊欄和 agent 工具都可以擴展。對於經常在前臺終端運行 dsh web 的場景,一次完整重啓通常需要手動結束當前進程,再用原始命令重新啓動;如果舊進程還沒有退出,或者 Web 端口仍被佔用,重啓就容易失敗。

dsh-web-restart 針對這個流程提供側邊欄按鈕和 agent 可調用工具:終止當前 dsh web 進程,並在舊進程退出、端口空閒後,以相同命令重新拉起。重啓期間頁面不刷新,同一會話標籤頁會自動恢復 UI。

這是什麼

dsh-web-restart 是一個 DSH Web 插件,用於從側邊欄一鍵完整重啓 harness。

它會做三件事:

  1. 結束當前 dsh web 進程。
  2. 通過啓動守衛等待舊進程退出且 Web 端口空閒。
  3. 以相同命令行重新拉起 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 自動拉起策略的環境。

它適合用於:

  1. 修改 DSH Web 插件、補丁或相關配置後重啓 harness。
  2. 從瀏覽器側邊欄觸發一次完整進程重啓。
  3. 讓 agent 在對話中直接調用重啓工具。

與 supervisor 同時使用時要謹慎

如果運行環境已經使用 systemd、Docker、pm2 等 supervisor,並且配置了自動重啓策略,插件的啓動守衛和 supervisor 可能同時嘗試拉起新進程。

這會導致兩個實例競爭端口,其中一個進程可能觸發 EADDRINUSE。

在受 supervisor 管理的環境中,建議禁用 supervisor 的自動重啓策略,或移除 dsh-web-restart 插件。

重啓後如何停止 DSH

重啓後的新 dsh web 會運行在自己的 session,也就是自己的進程組。舊的前臺進程組退出後,可能不再接收終端的 Ctrl+C。

停止重啓後的 DSH,可以使用以下任一方式:

  1. 關閉運行 dsh 的終端窗口。
  2. 在該終端中按 Ctrl+D。
  3. 在新終端中執行:
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
羽毛球分组比赛记分
小程序二维码

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

小夜