dsh-restart-plugin:爲 DSH 桌面端提供應用內強制重啓

前言

在 DeepSeek Harness(DSH)上開發和試用插件時,經常會碰到必須完整重啓客戶端的情況:新裝或更新了 bundle、改了只在啓動時生效的配置,或者界面與任務卡住。常見做法是手動關窗口再重新打開,步驟不多,但在反覆迭代時仍會打斷節奏。

dsh-restart-plugin 由社區開發者 zhangmaorongXL 維護,在 DSH 側邊欄底部註冊一個重啓入口。用戶確認後,插件通過脫離 DSH 進程樹的 PowerShell 助手結束當前主進程,並用同一可執行路徑重新拉起應用。下面介紹它的定位、安裝方式、使用步驟,以及需要提前知曉的限制。

這是什麼

dsh-restart-plugin 是一個同時包含 Host 端和 Web 客戶端的 DSH 插件,當前版本爲 0.1.0,採用 MIT 許可證,面向 Windows 桌面環境(依賴 PowerShell 與 WMI)。

插件在 DSH 生態裏歸類爲客戶端類能力:按鈕掛在 Web 客戶端側邊欄,重啓邏輯由 Host 路由與系統腳本完成。DSH 社區插件目錄爲獨立站點,與 DeepSeek / 幻方無官方從屬關係;安裝前建議自行查閱源碼與許可證,插件以當前 DSH 進程及用戶權限運行。

核心功能

依據 README 已覈實的能力如下。

界面與交互

  • 在 sidebar.footer.action 插槽註冊按鈕,默認 order: 10。
  • 側邊欄展開時顯示圖標和 Restart 文案;收起時只顯示 ⟳ 圖標。
  • 點擊後二次確認,提示會中斷未保存內容與運行中任務。
  • 請求發出後按鈕禁用並顯示 Restarting...,避免重複點擊。

Host 與重啓機制

  • 客戶端向 POST /dsh-restart-plugin/force-restart 發請求;Host 先返回 200,再異步執行重啓,減輕前端因連接斷開報錯。
  • 在系統臨時目錄寫入 dsh-force-restart-<timestamp>.ps1,經 WMI Win32_Process.Create 啓動隱藏的 PowerShell 助手,該進程不在 DSH 進程樹下。
  • 助手等待 800 ms,查找主窗口標題包含 DeepSeek Harness 的進程,記錄可執行路徑後強制結束,等待 1 s 再用原路徑啓動;腳本執行完後刪除自身。
  • 源碼以 ESM 與瀏覽器模塊直接加載,無需單獨構建步驟。

警告:這是強制重啓,不等待會話保存,也不優雅關閉任務。未保存會話、正在執行的 Agent 任務與工具調用都可能被中斷。

工作原理(簡要)

經過上面的功能說明,流程可概括爲:

  1. 用戶點擊側邊欄底部 ⟳ 並確認。
  2. POST /dsh-restart-plugin/force-restart → Host 立即返回 {"ok":true,"message":"Restarting..."}。
  3. WMI 啓動脫離進程樹的 PowerShell 助手 → 定位並結束 DSH → 用原 exe 路徑重啓。
側邊欄按鈕
  │ POST /dsh-restart-plugin/force-restart
  ▼
DSH Host 路由 ── 立即返回 200 ──▶ 客戶端進入 Restarting...
  │
  │ WMI(脫離 DSH 進程樹)
  ▼
PowerShell 助手
  │ 等待 800 ms → 結束 DSH → 等待 1 s
  ▼
重新啓動 DeepSeek Harness.exe

安裝與啓用

環境要求

項目 要求
操作系統 Windows(PowerShell、WMI)
應用 DSH 桌面端,支持插件 bundle 與 Web 客戶端插件
DSH 能力 webServer 服務、sidebar.footer.action 插槽
進程標題 主窗口標題需包含 DeepSeek Harness
參考環境 Windows + DeepSeek Harness 0.2.2-rc.1

通過 CLI 安裝(推薦)

先在 PowerShell 中從 GitHub 添加插件(desktop 爲桌面端默認 profile 名,自定義 profile 請替換):

dsh plugin --profile desktop add github:zhangmaorongXL/dsh-restart-plugin

本地開發可使用 link:

dsh plugin --profile desktop add link:E:/path/to/dsh-restart-plugin

然後確認該 profile 的 package.json 同時包含依賴與 bundle 條目:

{
  "dsh": {
    "profile": {
      "bundles": [
        "dsh-restart-plugin"
      ]
    }
  },
  "dependencies": {
    "dsh-restart-plugin": "github:zhangmaorongXL/dsh-restart-plugin"
  }
}

若 dsh.profile.bundles 中沒有 dsh-restart-plugin,需手動加入,否則 cordis.patch.yml 不會應用,插件也不會加載。

首次加載

首次安裝完成後,需要手動重啓一次 DSH(此時側邊欄尚無重啓按鈕)。成功後,側邊欄底部會出現 ⟳ 按鈕。

典型用法

  1. 在 DSH 左側邊欄底部找到 ⟳ 按鈕。
  2. 點擊並在確認框中確認重啓。
  3. 按鈕變爲 Restarting... 並禁用;幾秒內應用被強制結束並自動重新啓動。
  4. 若重啓前頁面未斷開,按鈕可能一直顯示 Restarting...,屬預期行爲;應用重啓後頁面會重新加載。

也可直接調用 Host 暴露的 HTTP 接口(內置客戶端使用 POST):

POST /dsh-restart-plugin/force-restart

成功接受重啓流程時響應爲:

{"ok":true,"message":"Restarting..."}

200 僅表示流程已被接受,不保證進程一定結束或應用一定拉起。該接口無獨立鑑權,依賴 DSH Web 服務的訪問邊界,不宜將 Web 服務暴露到不可信網絡。

適用場景與注意

適合:

  • 安裝、更新或禁用插件後需要完整重啓 DSH;
  • 修改了只在啓動時讀取的配置;
  • 界面或任務卡住,希望快速重啓;
  • 不想手動關窗再打開。

限制與排查要點:

  • 只面向 Windows 桌面端;純 dsh web + 瀏覽器場景通常沒有標題爲 DeepSeek Harness 的窗口,不適合依賴此插件重啓。
  • 依賴窗口標題匹配;多個候選時只處理第一個。
  • 當前版本無配置項(超時、標題規則、按鈕位置等均未提供)。
  • 權限不足、安全軟件攔截 WMI 或 PowerShell 可能導致失敗;Host 錯誤帶 [dsh-restart-plugin] 前綴輸出到控制台。

常見現象與處理見項目 README 中的故障排查表(如無按鈕、點擊無反應、退出後未重現等)。

結尾

dsh-restart-plugin 把「完整重啓 DSH 桌面端」收攏到側邊欄一次確認,適合插件與配置迭代頻繁的 Windows 用戶。使用前務必接受強制結束帶來的數據與任務中斷風險。

  • 插件目錄:https://www.skillhub.cn/plugins/zhangmaorongXL/dsh-restart-plugin
  • 源碼與文檔:https://github.com/zhangmaorongXL/dsh-restart-plugin
羽毛球分组比赛记分
小程序二维码

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

小夜