在開發智能體或調整配置時,修改 bundle、插件或主題後需要重啓服務。手動操作依賴桌面啓動器,路徑或啓動參數可能不一致,導致環境差異。本插件在 DSH 設置頁的 General 區添加“重啓 Web 服務”按鈕,直接複用當前運行進程的配置進行重啓,頁面會在服務就緒後自動重新載入。
dsh-restart-btn 是一個由 SiriusWJ 維護的 DSH 插件。它通過複用桌面啓動器機制(node + lib/bin.js、日誌重定向、TCP 就緒輪詢)解決非 ASCII 路徑下計劃任務靜默失敗的問題,並提供一鍵重啓入口。
核心功能¶
- 設置頁入口:在 DSH 設置頁 General 區添加“重啓 Web 服務”按鈕。
- 自動重啓與刷新:點擊後重啓
dsh web,服務就緒後頁面自動重新載入。 - 跨平臺兼容:兼容 Windows(終端/桌面/服務/計劃任務)、Linux/macOS/WSL、源碼樹運行及 nvm/volta/pnpm 全局安裝。
- 非 ASCII 路徑修復:使用 UTF-8 JSON 配置文件替代命令行,避免中文路徑在計劃任務中靜默失敗。
- 端口衝突處理:當端口被佔用時,退化爲停掉髮起重啓的那個進程(
selfPid)。 - 就緒驗證:通過 GET
/dsh-restart-btn/ping驗證,最多等待 45 秒,檢查helper.launch是否出現。 - 界面語言:界面中英雙語,跟隨 DSH 語言設置。
安裝¶
使用以下命令安裝插件:
dsh plugin --profile web add github:SiriusWJ/dsh-restart-btn
典型用法¶
- 界面操作:在 DSH 設置頁 General 區點擊“重啓 Web 服務”按鈕。
- API 重啓:發送
POST /dsh-restart-btn/restart,Body 爲{"port":"3080"}。 - 狀態檢測:發送
GET /dsh-restart-btn/ping,返回{ok, instance, pid, platform}判斷新進程是否就緒。 - 工作流:改完 bundle 需要重啓一次 dsh 生效(第一次請手動重啓)。
注意事項¶
- 標籤頁行爲:重啓時不加
--no-open,會多開一個已授權的標籤頁(與桌面快捷方式一致),舊標籤頁靠 Cookie 自動重載。 - 進程管理:只停監聽該端口的進程。若 dsh 被 supervisor 託管,可能自動拉起,導致端口未釋放。
- 系統依賴:macOS 需要
lsof,極簡 Linux 鏡像若無lsof/fuser/ss會報錯。 - 會話問題:重啓後有時會話需要重新授權(Cookie 壽命問題),頁面會提示用桌面快捷方式。
- 身份識別:前端只在 ping 到另一個 instance 時才刷新頁面。
日誌與排錯¶
插件運行時會將日誌輸出到暫存目錄。若路徑含非 ASCII 字符會依次回退。
- Windows:
%LOCALAPPDATA%\dsh-restart-btn - Linux/macOS:
$TMPDIR/dsh-restart-btn
主要日誌文件包括:
| 文件 | 說明 |
|---|---|
restart.log |
重啓全過程(停進程、端口釋放、啓動、就緒、失敗原因及 stderr 尾部)。 |
helper.launch |
助手啓動憑證(PID),用於驗證助手是否成功啓動。 |
dsh.out.log |
新服務的標準輸出(含 token 地址)。 |
dsh.err.log |
新服務的標準錯誤。 |
生態背景¶
DeepSeek Harness 理念是“一切皆插件”。本插件旨在標準化開發流程中的重啓操作。源代碼與文檔可在 GitHub 查看。