dsh-restart:爲 DeepSeek Harness Desktop 標題欄增加「重啓」按鈕

前言

在 DeepSeek Harness(DSH)桌面端裏改插件、調 Host 或驗證 bundle 時,往往需要整進程重新加載:插件腳本、原生菜單和 Host 路由都要走一遍冷啓動。Windows 上「應用」菜單裏的「退出」只能關進程,沒有「退出並立刻再開」的入口;完全手動關窗口再點快捷方式,步驟多且容易漏掉「先保存當前狀態」的判斷。社區插件 dsh-restart(維護者 mwk719)針對的是這一類操作:在 Windows 桌面端標題欄「應用 / 編輯」同一行追加「重啓 / Restart」,點一次先彈確認框,確認後再關閉並重新打開應用,效果接近「退出後重新打開」。

下面按定位、能力、安裝用法、實現要點與限制說明;事實以 GitHub 倉庫 README 爲準。該插件屬於社區客戶端類插件,與 DeepSeek / 幻方無官方從屬關係;DSH 生態裏插件目錄爲獨立站點,並非官方應用商店。

這是什麼

dsh-restart 給 DeepSeek Harness Desktop(Windows) 的標題欄加一顆「重啓」按鈕:單擊只打開確認對話框,在對話框裏確認後,應用關閉並用同一可執行文件再次啓動。倉庫地址:https://github.com/mwk719/dsh-restart,插件目錄頁:https://www.skillhub.cn/plugins/mwk719/dsh-restart。許可證爲 MIT(README 標明)。

核心功能

  1. 標題欄按鈕:裝好後重啓一次 DSH 桌面端,標題欄「應用 / 編輯」右側出現「重啓」(英文界面爲 Restart)。
  2. 兩步確認:單擊按鈕只彈框,不發起重啓請求;取消、Esc、點擊遮罩均不執行任何操作。
  3. 會話提示:確認框標題爲「重啓 DeepSeek Harness?」,正文說明會關閉並重新打開,並顯示當前正在運行的會話數量(空閒時會說明沒有正在運行的會話),便於判斷重啓是否會中斷進行中的回合。
  4. Host 側保護:實際重啓需 Host 接受帶 ?force=1 的 POST /dsh-restart/restart;未確認的調用返回 409,不會重啓。
  5. 診斷路由(同源、需自定義請求頭):GET /dsh-restart/state 返回狀態、保護版本、是否桌面端、忙碌會話數、按鈕掛載時間、日誌路徑等;POST /dsh-restart/restart?dry=1 僅說明「若現在確認會如何」,不會重啓。
  6. 日誌:行爲寫入 ~/.dsh/dsh-restart.log(彈框、確認、取消、重啓及助手進程步驟均有記錄)。

插件爲零依賴、零構建:Host 端 index.js、瀏覽器端 client.js、助手 restart-child.mjs 均爲手寫 ESM,安裝後可直接使用,無需 pnpm install 或構建步驟。

安裝與啓用

先用 DSH CLI 爲 desktop profile 添加插件(命令來自 README 原文):

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

也可以從插件市場(dsh-market)安裝。裝完後再重啓一次 DeepSeek Harness 應用,標題欄纔會出現「重啓」按鈕。

安裝前建議自行查看倉庫源碼與 MIT 許可證;插件在 當前 dsh 進程權限 下運行,重啓會結束 Electron 主進程與 Host,屬於高影響操作,只應在可信來源安裝。

典型用法

  1. 點標題欄「重啓」(或 Restart)。
  2. 閱讀確認框中的會話數量說明,評估是否會中斷正在生成的回答。
  3. 選「取消」則關閉對話框;選「重啓應用」則立刻執行重啓流程。
  4. 若約 20 秒後應用仍在運行(重啓未生效),確認框會改爲報錯文案並允許重試;細節可查 ~/.dsh/dsh-restart.log。

卸載:設置 → 插件 → dsh-restart → 停用或卸載,按鈕隨之消失。

爲什麼放在標題欄而不是「應用」菜單

「應用」菜單是 Electron 主進程裏的原生菜單,由 app.asar 內 lib/main.js 的 applicationItems() 構造(最後一項爲「退出」)。DSH 插件系統未給該菜單留插槽,桌面端也未把 quit / restart 暴露給網頁或插件,因此無法向該菜單追加條目。

本插件改爲向桌面端 preload 在頁面中創建的 [data-windows-menu] 元素下手:在其 shadow root 內的 [role="menubar"](即「應用 / 編輯」所在行)追加一個按鈕,樣式與佈局與該 row 一致,並隨界面語言顯示「重啓 / Restart」。此處是插件唯一依賴桌面端內部結構的地方:只讀 shadow root 並 append 按鈕,不修改既有按鈕、不攔截事件。若未來桌面端不再提供該元素,插件在 20 秒內找不到目標則不渲染(不報錯、不影響其它插件)。

重啓如何實現

  • 桌面端 Host 進程即 DeepSeek Harness.exe 以 Node 模式運行(ELECTRON_RUN_AS_NODE=1,由 Electron 主進程 spawn 並帶 IPC)。因此在 Host 裏 process.execPath 爲應用可執行文件,process.ppid 爲 Electron 主進程。
  • 確認後,Host 啓動 detached 助手進程(restart-child.mjs):助手先結束 Electron 主進程,再結束 Host(釋放 HTTP 端口),約 2 秒後用同一可執行文件重新啓動。
  • 效果等同手動「退出後重新打開」:插件代碼、原生菜單、Host 全部重新加載。實現方式是結束進程再拉起,不是優雅退出;若某次重啓後應用未起來,可手動再打開一次(日誌中有各步結果)。

代價:正在生成的回答會中斷;會話記錄、消息與文件在磁盤上,重開後仍在列表中。

適用場景與注意

適合:在 Windows 上頻繁驗證插件或 Host 變更、需要整應用冷啓動而不想反覆手動關開窗口的 DSH 桌面用戶。

限制(README 明確要求):

  • 僅 Windows 桌面端:macOS 使用原生應用菜單,Linux 桌面端沒有該 menubar,其它平臺插件不渲染任何 UI。
  • 需要 dsh >= 0.2.0-rc.1(package.json 中 engines.dsh 與 dsh.engines.dsh 一致)。
  • 重啓會中斷進行中的回合;安全設計上單擊絕不直接重啓,Host 側 ?force=1 爲第二道閘。

結尾

dsh-restart 用標題欄一顆按鈕和雙重確認,把 Windows 桌面端「整應用重啓」收成可預期的幾步操作,並附帶會話數提示與 Host 診斷路由。需要安裝或源碼細節時,可看目錄頁 https://www.skillhub.cn/plugins/mwk719/dsh-restart 與 GitHub https://github.com/mwk719/dsh-restart。

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

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

小夜