dsh-restart-and-update:側欄重啓 Harness 與版本感知更新插件

前言

在 DeepSeek Harness(DSH)裏裝插件、改客戶端 bundle 之後,常見做法是手動關進程再開,或在命令行裏逐個 dsh plugin add。Windows 上若用腳本拉起 GUI,還容易踩到「控制台窗口殘留、關窗即殺進程」的問題。側欄裏也沒有統一的「哪些插件有新版本、更新後要刷新還是完全重啓」入口。

下面介紹社區插件 dsh-restart-and-update(維護者 dolacmeo,分類:客戶端)。它在側欄底部動作行提供「重啓」與「更新插件 / 插件市場」,並用 Host 側路由完成檢測、安裝與(在 Windows 上)脫離進程樹的完全重啓。

這是什麼

dsh-restart-and-update 是 DSH 的雙半插件:Client 半在側欄 footArea 的 sidebar.footer.action(order 1000)註冊兩個按鈕;Host 半註冊 HTTP 路由,讀 profile 的 package.json、查 npm registry,並調用桌面自帶的 dsh.cmd 執行更新與重啓。

官方簡介:從側欄重啓 DeepSeek Harness 並按版本更新插件——包含在 Windows 上能 survive console trap 的完全重啓、帶發佈時間的版本比對,以及回到插件市場的入口。

側欄入口與彈窗

入口行

兩個按鈕共用側欄底部一行,排在官方/第三方條目之後:

  • 左:重啓——44px 行高,帶圖標與文字。只有「已經更新完、等着重啓生效」的插件纔會出現橙色提醒 badge(tooltip:「N 個插件已更新,等重啓生效」)。僅有可選更新、尚未執行更新時,重啓按鈕不會出現數字。
  • 右:有更新時顯示「更新插件」,帶藍色數量 badge;沒有更新時變爲「插件市場」(提包圖標),在本插件自己的全屏浮層裏打開市場的 discover 分欄(不是依賴默認可能不存在的 dsh-market 主面板 key)。

側欄收進 56px 軌道時,兩按鈕退成 36×36 圖標,badge 變爲右上角小圓點。

重啓彈窗

標題、說明,以及兩行按鈕:第一行 重啓GUI / 完全重啓,第二行 取消 通欄。

更新彈窗

可滾動插件列表(每行:插件名、當前版本與發佈時間 → 新版本與發佈時間,行尾標 需完全重啓 或 刷新即可),底部 取消(左)與 更新 (n)(右)。列表過長只滾動列表區域,底部按鈕不會被擠出屏幕。

檢測時機

Client 模塊掛載後約 300ms 檢測一次;窗口重新可見時再檢測。Host 側 packument 有 10 分鐘緩存。

兩種重啓的區別

按鈕 行爲 影響
重啓GUI 瀏覽器 location.reload() 只重載前端、重新拉客戶端插件代碼;後端、會話、正在跑的任務不受影響
完全重啓 POST /dsh-restart-and-update/restart,由 Host 拉起脫離進程樹的 PowerShell worker:可選先更新插件 → taskkill /T /F 殺應用 → 再啓動 DeepSeek Harness.exe 整個應用與後端一起重啓;日誌在 %TEMP%\dsh-restart-and-update\restart-*.log
取消 關閉彈窗 無

完全重啓目前只在 Windows 上有實現;重啓GUI 各平臺可用。

Worker 通過 WMI Win32_Process.Create 啓動,避免 Electron 主進程 AttachConsole 認領 worker 控制台而導致「關控制台窗口殺掉 Harness」;寫操作還要求請求頭 x-dsh-restart-and-update: full 並與 Origin/Host 同源校驗。

插件市場入口

沒有待更新插件時,第二個按鈕打開本插件浮層內的市場面板:優先 ctx.get('market') 的 render({ preferredSubsectionId: 'discover' })(市場 README 中的官方嵌入方式)。Client 側 ctx 只有 get / on / provide / effect,不能用 ctx.inject。

  • 未安裝 dshmarket 時:浮層顯示安裝確認,確認後 POST /dsh-restart-and-update/install-market,走 dsh plugin --profile <p> add dshmarket@<最新版本>,成功後提示重啓並可直接點 完全重啓。
  • 取不到 market 服務時:回退爲 layout.selectPanel('plugins'),在插件頁的 Discover tab 瀏覽。

更新插件

檢測

GET /dsh-restart-and-update/updates 對 profile 裏 npm 依賴查 registry.npmjs.org 完整 packument(需 time 字段),比較 semver,返回 updatable(驅動更新按鈕藍色 badge)與 pending(已裝新版本、進程尚未加載,驅動重啓按鈕橙色 badge)。pending persisted 在 %TEMP%\dsh-restart-and-update\pending-updates.json,刷新頁面不會清掉;完全重啓前 worker 會清空。

「刷新即可」與「需完全重啓」的判定與市場一致:manifest 裏 dsh.bundle === undefined && dsh.client !== undefined 爲純客戶端插件,刷新 GUI 即可;其餘含 Host 半的必須完全重啓。

執行

POST /dsh-restart-and-update/update,body { "names": [...] },需頭 x-dsh-restart-and-update: full。通過 resources/runtime/cli/bin/dsh.cmd 執行 dsh plugin --profile <p> add <name>@<精確版本>(不用 @latest,避免 pnpm release-age 導致版本不動仍報成功)。裝完回讀 node_modules 校驗版本。dshmarket 不能自我替換,記爲 deferred,由完全重啓 worker 在殺進程前更新。

安裝與版本要求

在已安裝 DSH CLI 的環境中執行:

dsh plugin add dsh-restart-and-update
  • Node.js:20+
  • dsh:>=0.2.0-rc.1 <0.3.0-0

改 Host 半 index.js 後需 dsh plugin remove dsh-restart-and-update 再重新 add,才能換掉已加載的模塊代際。

典型用法

  1. 安裝插件後啓動或刷新 Harness,看側欄底部是否出現「重啓」與「更新插件 / 插件市場」。
  2. 若有藍色 badge,點 更新插件,在彈窗勾選列表後點 更新 (n);行尾提示 刷新即可 的,更新後點 重啓GUI;提示 需完全重啓 的,更新後點 完全重啓(Windows)。
  3. 若橙色 badge 提示待生效插件,打開重啓彈窗確認文案後選擇 重啓GUI 或 完全重啓。
  4. 無待更新項時,用 插件市場 瀏覽 discover;未裝市場時按浮層引導安裝 dshmarket。

Host 狀態可查:GET /dsh-restart-and-update/state(平臺、exe、canRestart、profile、市場是否安裝等)。

適用場景與注意

適合經常在 Harness 裏維護 npm 插件、需要在 GUI 內完成「查更新 → 安裝 → 選對重啓方式」的開發者。完全重啓依賴 Windows 與本地 DeepSeek Harness.exe 路徑;Linux/macOS 用戶仍可用 GUI 重載與更新檢測,但無法使用該插件文檔中的完全重啓 worker 路徑。

插件以當前 DSH 進程權限運行,安裝前建議閱讀倉庫源碼與 MIT 許可證。SkillHub 目錄爲社區站點,與 DeepSeek / 幻方無官方從屬關係。

結尾

dsh-restart-and-update 把重啓 Harness、按 semver 與發佈時間更新插件、以及回到市場 discover,收斂到側欄底部一行操作,並在 Windows 上處理了控制台陷阱與 Host 半插件必須進程級重啓的差異。

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

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

小夜