DSH 採用“一切皆插件”的理念。在 Windows 環境下,直接啓動 dsh web 往往面臨依賴複雜、進程殘留或窗口閃爍等問題。dsh-launcher 作爲一個輕量級啓動器,旨在解決這些問題,提供一個無需額外運行時、關閉瀏覽器即自動清理的啓動方案。
這是什麼¶
dsh-launcher 是一個用 Rust 編寫的單文件 Windows OS 啓動器,專門用於啓動 dsh (DeepSeek Harness) 的 Web UI。它不依賴 WebView2,不攜帶額外的運行時依賴,體積僅幾百 KB。
安裝與啓用¶
該插件以 dsh 插件的形式分發,安裝過程無額外攔截。
dsh plugin --profile web add github:alvinpro/dsh-launcher
安裝後,可執行文件會隨包進入 node_modules\dsh-launcher\dist\dsh-launcher.exe。
基本用法¶
1. 默認啓動¶
雙擊 dsh-launcher.exe 即可運行。無需配置文件,默認以 dsh web 啓動,監聽端口 3080。
2. 命令行啓動¶
如需自定義端口或參數,可通過命令行覆蓋。
dsh-launcher.exe --port 8899 --args "web --port 8899"
3. 配置文件(可選)¶
config.json 是可選的。優先級順序爲:命令行參數 > config.json > 內置默認值。
若需固定端口或參數,可複製 config.example.json 並修改。
{
"dsh_path": "",
"url": "http://127.0.0.1:8899",
"port": 8899,
"timeout_secs": 40,
"package": "dsh",
"args": ["web", "--port", "8899"]
}
4. 驗證解析鏈¶
在不實際啓動的情況下,僅驗證 dsh 命令的解析鏈。
.\dsh-launcher.exe --check
工作原理¶
該啓動器通過六個步驟管理 dsh 的生命週期:
- 探測:檢查端口是否已就緒。若已就緒,直接打開瀏覽器並退出,避免重複啓動。
- 解析:按順序嘗試從配置路徑、本地離線包 (
vendor\dsh\)、系統 PATH 以及npx獲取 dsh,並用dsh --version校驗可用性。 - 拉起:使用
CREATE_NO_WINDOW隱藏窗口拉起cmd.exe,並立即綁定 JobObject,確保後續的進程樹管理。 - 就緒:進行 TCP 連通性檢查與 HTTP 響應雙重校驗(端口通 ≠ 服務就緒)。校驗通過後,使用
ShellExecuteExW前臺喚起瀏覽器。 - 聯動:關閉拉起的瀏覽器會導致 dsh 自動停服;若瀏覽器本就在運行,則進入常駐模式,通過托盤圖標退出。
- 清理:無論通過何種方式退出(正常、托盤、強殺),JobObject 均會終止整個進程樹,實現零殘留。
核心特性¶
- 自動發現:支持配置路徑、本地離線包、系統 PATH 和 npx 的自動發現,無需全局安裝。
- 真實就緒探測:採用 TCP + HTTP 雙重校驗,並具備自適應退避和超時保護機制。
- 零殘留:利用 JobObject 的
KILL_ON_JOB_CLOSE屬性,確保任何退出路徑下進程樹被徹底清理。 - 瀏覽器聯動:關閉瀏覽器自動停服,共享實例則進入常駐模式,不會誤殺正在使用的瀏覽器窗口。
- 調用系統默認瀏覽器:不捆綁瀏覽器,直接調用系統默認瀏覽器打開服務地址。
- 無窗體驗:GUI 子系統運行,無控制台窗口,無黑屏閃爍。日誌落盤於
dsh-launcher.log,出錯時彈窗提示。 - 異常守護:探測期 dsh 提前退出或超時均有明確的錯誤處理邏輯。
- 單文件:約 360KB 的 exe,內嵌圖標,零運行時依賴。
- 不依賴 WebView2:原生 Win32 托盤與彈窗,無需安裝 Edge/WebView2 運行時,兼容 Windows 7+。
退出碼說明¶
| 退出碼 | 含義 |
|---|---|
| 0 | 正常退出 |
| 1 | 配置錯誤或 dsh 啓動失敗 |
| 2 | 端口已就緒但服務響應異常 |
| 3 | 等待服務超時 |
| 4 | dsh 進程提前或異常退出 |
| 5 | dsh 命令解析或自動安裝失敗(含 npm 不存在) |
適用場景與注意事項¶
- 系統要求:僅支持 Windows 7 及以上系統。
- 權限說明:插件以當前 dsh 進程的權限運行。安裝前建議檢查源碼與許可證(MIT)。
- 快捷方式:首次運行
dsh plugin add後,桌面快捷方式會自動創建一次,指向隨包附帶的 exe,之後不再重建。
總結¶
DSH-Launcher 解決了 Windows 下啓動 DSH Web UI 的核心痛點:依賴複雜、進程殘留和窗口閃爍。通過 Rust 實現的單文件、零依賴設計,它提供了一個極簡且可靠的啓動方案。