dsh-restart-button:爲 DeepSeek Harness 桌面端補上「一鍵重啓」

前言

在 DeepSeek Harness(DSH)裏裝插件或改 profile 後,往往需要讓桌面進程重新跑一遍配置。官方打包版桌面應用本身幾乎沒有「重啓自身」的入口:托盤菜單隻有 Open 和 Quit;代碼裏雖有 Restart App and Host,但被 development = !app.isPackaged 擋在開發構建之外;關窗口只會縮到托盤而不是退出。常見做法是托盤 Quit → 再找圖標啓動。下面介紹社區插件 dsh-restart-button(維護者 FIZMIE,分類:客戶端),在側欄品牌行增加刷新按鈕,並暴露 HTTP 路由,供智能體或腳本觸發重啓。

這是什麼

dsh-restart-button 面向 DeepSeek Harness 桌面版:側欄 DeepSeek Harness 字標右側多一個小刷新按鈕,點擊確認後整應用重啓;同時掛載 POST /dsh-restart-button/restart,智能體可在不點 UI 的情況下請求重啓。

DSH 生態是「一切皆插件」;SkillHub 等社區目錄與 DeepSeek / 幻方無官方從屬關係,本文僅依據上述倉庫 README 與 package 信息。

環境與前提

項 要求
操作系統 Windows(重啓 worker 使用 WMI、wscript.exe 與 Win32 前臺激活)
宿主 DeepSeek Harness 桌面構建 0.2.0-rc.2
Profile 補丁 必須 — 見下文安裝步驟 1;不做則插件能裝、HTTP 可用,但按鈕不會出現

Node 引擎要求 >=22.6(見 package.json)。

核心功能

  1. 側欄品牌行按鈕 — 刷新圖標緊挨字標。確認後窗口消失、進程重啓、窗口回到前臺並刷新頁面。
  2. HTTP 路由 — 前綴 /dsh-restart-button,供腳本或 Agent 調用。
  3. 診斷與日誌 — GET /status、GET /health;重啓過程寫入 $DSH_HOME/.dsh-restart-button/restart.log。

側欄 brand 行在 Cordis 裏是 single 槽位:dsh-client-ui-slots 對同一 single 槽第二次註冊會 throw。因此需先禁用官方佔位的 @deepseek-ai/dsh-client-ui-brand-official;本插件會重繪官方字標,標題外觀保持不變。

安裝與啓用

1. 追加 profile 補丁(必須先做)

把下面片段追加到 $DSH_HOME/profiles/<profile>/cordis.patch.yml(完整說明見倉庫 install/profile-patch.yml):

- id: ui-brand-official
  name: "@deepseek-ai/dsh-client-ui-brand-official"
  disabled: true

ui-brand-official 爲 @deepseek-ai/dsh-web-app/cordis.patch.yml 中聲明的行 id。

2. 安裝插件 bundle

DSH 插件即 profile bundle,任選其一(README 原文):

# 從 Git 倉庫
dsh plugin --profile desktop add git+https://github.com/FIZMIE/dsh-restart-button.git

# 從本地目錄
dsh plugin --profile desktop add C:\path\to\dsh-restart-button

3. 刷新頁面

客戶端變更由 dsh-client-modules 熱更新,瀏覽器刷新即可,無需先重啓進程;按鈕應出現在字標右側。

HTTP API 與典型用法

路由均掛在宿主 Web 服務下:

Method Path 用途
GET /dsh-restart-button/status 進程身份、可執行路徑、是否可重啓
GET /dsh-restart-button/health bootId 與 uptime;瀏覽器側輪詢以感知新進程
POST /dsh-restart-button/restart 調度重啓,在應用退出前返回 202

POST /restart 僅接受 loopback 來源,且請求須帶應用自身 origin,或本地 token(寫入 $DSH_HOME/.dsh-restart-button/token)。Agent 常用 token 頭:

$token = (Get-Content "$env:DSH_HOME\.dsh-restart-button\token" -Raw).Trim()
Invoke-RestMethod -Method Post -Uri "http://127.0.0.1:19387/dsh-restart-button/restart" `
  -Headers @{ 'X-DSH-Restart-Token' = $token }

(端口 19387 爲 README 示例;以你當前 DSH 宿主實際監聽爲準。)

實現要點(爲何需要獨立 worker)

桌面殼(Electron main)以 ELECTRON_RUN_AS_NODE=1 拉起 DSH 宿主與插件子進程;插件無法調用 app.relaunch(),現有 IPC 也只有 ready,沒有「請重啓」消息,因此重啓必須由進程樹外的 helper 完成。

早期 helper 作爲應用子進程,隨應用 Job 對象一併被銷燬。當前做法是通過 WMI Win32_Process.Create 複製自身,父進程變爲 WmiPrvSE.exe,再在舊進程退出後 relaunch 並前臺化窗口;並用 wscript.exe + .vbs 無窗啓動 worker。README 還記錄了 Windows 上 ELECTRON_RUN_AS_NODE、windowsHide、detached 等與 GUI .spawn 相關的坑,以及以 Web 端口再次響應 作爲「重啓完成」判據。日誌與重試上限(5 次)見 $DSH_HOME/.dsh-restart-button/restart.log。

適用場景與注意

適合:在 Windows 上使用 DSH 桌面版,頻繁改插件或 profile、希望一鍵或自動化重啓,而不是每次走托盤 Quit。

務必注意:

  • 插件在當前 DSH 進程權限下運行;安裝前請自行審閱 源碼與 MIT 許可證。
  • 非 Windows 或未打 profile 補丁時,能力會與 README 描述不一致(例如無按鈕)。
  • 撤銷 brand 補丁可恢復官方 @deepseek-ai/dsh-client-ui-brand-official(見倉庫 install/profile-patch.yml 中的 revert 說明)。

結尾

dsh-restart-button 補上打包桌面版缺少的自重啓入口:側欄一點即重啓,再配合 token 化的 POST /restart 給 Agent 用。安裝順序是 profile 補丁 → dsh plugin add → 刷新頁面。

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

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

小夜