dsh-power-controls:DSH 電源控制與自動收尾插件

前言

DeepSeek Harness (DSH) 採用插件化架構,在本地開發或調試時,有時需要重啓後端或關閉服務。dsh-power-controls 在設置頁面的「普通設置」中增加了兩枚電源按鈕,提供重啓與關閉能力,並支持自動收尾機制,以防止頁面關閉後服務器進程繼續佔用內存。

核心功能

該插件主要解決 DSH 後端的重啓、關閉以及頁面關閉後的資源釋放問題。

  1. 重啓 DSH (電源循環)
    點擊按鈕後,插件會殺掉當前運行的 dsh web 進程,等待端口 3080 釋放,然後重新拉起新實例,最後驗證端口監聽是否成功。頁面斷線幾秒後會自動刷新回來。

  2. 關閉 DSH (僅關閉後端)
    只關閉後端服務。瀏覽器標籤頁會停留在斷線狀態,用戶需要雙擊桌面的 DSH Web 圖標重新打開。

  3. 自動收尾 (等待所有頁面停止 beaconing)
    默認開啓。當所有瀏覽器標籤頁都關閉或不可見時,插件會等待一段時間(默認 15 秒),確認沒有活躍的頁面請求後,才退出進程。配置項 autoCloseMs 可設爲 0 禁用此功能。

  4. 標籤頁圖標切換 (鯨魚娘)
    插件會將標籤頁的 favicon 替換爲鯨魚娘圖片(128px)。服務端通過 tapIndex 注入資源路由,客戶端通過 applyFavicon() 每次重渲染時重新確認圖標狀態。

重啓機制說明

在 Windows 上,重啓 DSH 依賴任務計劃程序,而非簡單的 spawn detached helper。

早期的實現方式是 spawn 一個 detached helper 進程,然後自己退出。這會導致問題:當父進程(dsh web)退出時,會回收整個進程樹,helper 進程也會隨之被殺掉,導致後端無法重新拉起。

爲了避免這個問題,現在的實現方案是:
1. 點擊「重啓 DSH」按鈕。
2. 後端註冊一個名爲 DSHPowerRestart 的計劃任務。
3. 任務啓動後執行 respawn-dsh-web.ps1 腳本:
* 按端口找到舊的 dsh web 並停掉。
* 等待 3080 端口釋放(最多 60 秒)。
* 執行 start-dsh-web.ps1 -NoOpen 拉起新實例。
* 驗證端口,最多重試 3 次。
4. 只有計劃任務註冊成功並啓動後,後端插件才允許自己退出。

安裝與啓用

安裝前必須先停止 DSH 後端。因爲插件安裝會讓 pnpm 重解析依賴樹,而正在運行的後端鎖定了 lightningcss 原生模塊,會導致後續安裝報錯(拒絕訪問)。

# 從 GitHub 安裝
dsh plugin --profile web add github:harmless0819-dev/dsh-power-controls

安裝完成後,刷新設置頁面,在「普通設置」中即可看到兩枚電源按鈕。

自檢與使用

由於沒有瀏覽器界面,可以通過命令行工具檢查插件狀態。

  1. 健康檢查端點
    插件提供了 /dsh-power/health 端點用於自檢。
    curl http://127.0.0.1:3080/dsh-power/health
返回數據包含 `lastReport`(上次上報時間)、`reportCount`(上報次數)、`clicks`(點擊次數)、`injected`(是否成功注入按鈕)、`reconnect`(重連次數)以及 `clients`(當前活躍客戶端列表)。
  1. 查看退出日誌
    插件會將自動收尾的退出原因記錄到日誌文件 D:\deepseek\logs\dsh-power-auto-close.log,並在下一次啓動時的 lastExit 字段中反饋。

總結

dsh-power-controls 通過在設置頁增加電源按鈕,簡化了 DSH 後端的重啓與關閉流程。其自動收尾機制能有效避免頁面關閉後服務器進程的資源佔用。安裝時需注意先停後端,並在 Windows 上依賴任務計劃程序完成重啓。

羽毛球分组比赛记分
小程序二维码

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

小夜