前言¶
在 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 標明)。
核心功能¶
- 標題欄按鈕:裝好後重啓一次 DSH 桌面端,標題欄「應用 / 編輯」右側出現「重啓」(英文界面爲
Restart)。 - 兩步確認:單擊按鈕只彈框,不發起重啓請求;取消、
Esc、點擊遮罩均不執行任何操作。 - 會話提示:確認框標題爲「重啓 DeepSeek Harness?」,正文說明會關閉並重新打開,並顯示當前正在運行的會話數量(空閒時會說明沒有正在運行的會話),便於判斷重啓是否會中斷進行中的回合。
- Host 側保護:實際重啓需 Host 接受帶
?force=1的POST /dsh-restart/restart;未確認的調用返回409,不會重啓。 - 診斷路由(同源、需自定義請求頭):
GET /dsh-restart/state返回狀態、保護版本、是否桌面端、忙碌會話數、按鈕掛載時間、日誌路徑等;POST /dsh-restart/restart?dry=1僅說明「若現在確認會如何」,不會重啓。 - 日誌:行爲寫入
~/.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,屬於高影響操作,只應在可信來源安裝。
典型用法¶
- 點標題欄「重啓」(或
Restart)。 - 閱讀確認框中的會話數量說明,評估是否會中斷正在生成的回答。
- 選「取消」則關閉對話框;選「重啓應用」則立刻執行重啓流程。
- 若約 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。