dsh-web-restart: 確保/重啓 DSH Web 服務

前言

DeepSeek Harness(DSH)的理念是「一切皆插件」。在本地開發或調試時,如果 dsh 的 agent 運行在 web 服務進程內部,直接通過命令殺掉 web 進程(如 Stop-Process),等於殺掉了 agent 所在的進程樹,導致重啓命令無法執行,出現“自殺式重啓”的問題。

dsh-web-restart 通過 WMI (Win32_Process.Create) 將新服務進程創建在 WMI 宿主下,使其完全脫離 agent 進程樹。加載該插件後,服務掛了會自動拉起;需要加載新代碼時,可以通過 flag 觸發脫管重啓。

這是什麼

這是一個 DSH bundle 插件,用於確保或重啓 DeepSeek Harness 的 web 服務。它由 LnsiAxe 維護,採用 MIT 許可證。

安裝與啓用

安裝前請確保 DSH 版本大於等於 0.1.0-rc.6。

# 在 headless profile 下安裝,用於服務掛了時通過任務復活 web 服務
dsh plugin --profile headless add @lnsiaxe/dsh-web-restart

# 在 web profile 下安裝,用於啓用 flag 文件觸發重啓功能
dsh plugin --profile web add @lnsiaxe/dsh-web-restart

# 啓動 dsh web,插件會在加載時生效
dsh web

核心功能

該插件提供兩種運行模式和一個觸發機制:

  • ensure 模式(默認):檢查端口是否監聽。未監聽時脫管啓動,已監聽時不做任何操作。
  • rotate 模式:檢查端口是否監聽。已監聽時脫管重啓(調用方返回後 kill 再拉起),未監聽時直接啓動。
  • flag 文件觸發:在 web profile 下運行時,創建特定 flag 文件,下一個會話回合開始時插件會刪除 flag 並脫管重啓服務。

典型用法

場景一:服務掛掉後

# 運行 headless 任務,插件會在 boot 時自動拉起 web 服務
dsh --profile headless "啓動 web 服務"

場景二:加載新代碼後重啓

# 1. 在 web profile 下創建 flag 文件
New-Item C:\Users\<you>\.dsh\dsh-web-restart.flag

# 2. 發送一條消息觸發新回合
# 插件檢測到 flag,刪除 flag 並重啓 web 服務

配置

通過 cordis.patch.yml 配置端口和模式:

- insert:
    - id: web-restart
      name: '@lnsiaxe/dsh-web-restart'
      config:
        port: 3080        # web 服務端口
        mode: ensure      # ensure | rotate
        # workspace: C:\Users\<you>\my-workspace  # 可選,默認取進程 cwd
        # gitDir: C:\Users\<you>\git\cmd  # 可選,默認 ~\git\cmd(給 side-panel 的 git 用)

工作原理

  1. 腳本生成:激活時,插件會在 DSH_HOME 目錄下生成 dsh-web-restart-launch.cmd 和 dsh-web-restart-rotate.cmd。這兩個腳本負責設置環境變量、切換目錄並執行 node ... web --port <port>。
  2. 進程啓動:通過 PowerShell 的 Invoke-CimMethod Win32_Process.Create 調用 WMI。在 Windows 平臺上,新進程的父進程是 WMI 宿主,因此不受 agent/服務進程樹的回收影響;非 Windows 平臺則回退爲 spawn(..., { detached: true }).unref()。
  3. 自重啓跳過:插件在 web profile 里加載時會檢測 argv 是否包含 web,如果包含則跳過自重啓邏輯,僅響應 flag 觸發。

注意事項

  • 平臺依賴:Windows 平臺依賴 WMI;非 Windows 平臺使用 detached spawn。
  • 版本要求:需要 DSH 版本 0.1.0-rc.6 及以上。
  • 權限安全:插件以當前 dsh 進程的權限運行,使用前請檢查源碼與許可證。

鏈接

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

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

小夜