dsh-retry:爲 DSH 桌面端補上原生「重啓 DeepSeek Harness」入口

前言

在 Windows 上使用 DeepSeek Harness(DSH)桌面端時,托盤右鍵和左下角賬戶菜單裏通常只有「打開 / 退出」或「設置 / 退出登錄」一類項;打包版主進程裏也沒有面向普通用戶的可點擊重啓入口。改插件、換 profile、或等 app.asar 補丁重裝時,往往需要整進程退出再開,卻缺少與官方 UI 同級的操作。社區插件 dsh-retry(維護者 kouzerror)針對的是這一類場景:在托盤、賬戶菜單和設置頁提供統一的優雅重啓,並說明補丁與官方 slot 如何分工。

這是什麼

dsh-retry 是 DSH 的客戶端類插件:在 Windows 桌面端增加原生的 Restart DeepSeek Harness 操作,樣式與位置貼近官方菜單;同時在設置裏註冊「重啓與更新」區塊,部分能力不依賴對安裝目錄 app.asar 的改寫。倉庫:github.com/kouzerror/dsh-retry;社區目錄頁:skillhub.cn/plugins/kouzerror/dsh-retry。許可證 MIT(見倉庫 README)。

三個入口分別在哪

入口 位置 是否依賴核心補丁
系統托盤 右下角托盤圖標 → 右鍵菜單 是(與「打開 / 退出」並列)
賬戶菜單 左下角頭像 → 彈出菜單 是(帶刷新圖標,與設置等並列)
設置頁 設置 → 重啓與更新 否(官方 settings.section slot,id dsh-retry)

三個入口最終都調用宿主同源路由 POST /dsh-retry/restart。已裝好補丁且 asar 爲最新時,走 app.relaunch() 類優雅重啓:先正常退出再自動重開,不硬殺進程。補丁尚未裝入時,同一路由可返回 202,由 PowerShell helper 完成「結束進程 → 替換 asar → 再拉起 DSH」。

爲什麼分「補丁半」和「客戶端半」

DSH 桌面端的托盤與賬戶菜單模板寫在安裝目錄 resources/app.asar 內,沒有向插件開放的菜單 slot,也沒有 quit/restart 類 IPC。因此插件拆成:

  1. host(lib/index.js):提供 /dsh-retry/status、/prepare、/restart、/update 等路由。
  2. client(lib/client.js):經 dsh.client 加載,註冊設置頁,不依賴補丁即可顯示重啓與狀態面板。
  3. patch(lib/patch.js + scripts/restart-helper.ps1):在內存中改 lib/main.js 與賬戶菜單 bundle,重建補丁版 asar。

DSH 升級會覆蓋 app.asar;自 0.4.0 起,插件在啓動約 3 秒後檢查補丁,必要時自動重啓一次 DSH 完成重裝。同一已安裝構建最多自動重啓 2 次(guard 與桌面端版本、未補丁 asar 大小相關);restart-guard.json 損壞時按 fail-closed 停止自愈。0.5.0 起設置頁走官方 slot,即使更新把補丁抹掉,設置頁仍可重啓;托盤與賬戶項在補丁自愈後恢復。

安裝與啓用

方式一:DSH 插件市場。 條目見 awesome-dsh-plugin.com/p/kouzerror/dsh-retry/,或在 DSH 插件市場搜索 dsh-retry。市場按 github:kouzerror/dsh-retry 源碼安裝,發版後可提示更新。

方式二:本地目錄或 Release 的 tgz。 在 profile 目錄用 pnpm 安裝(與插件管理器同類方式):

cd "$env:USERPROFILE\.dsh\profiles\desktop"
pnpm add file:C:\path\to\dsh-retry
# 或從 Release 安裝
pnpm add file:C:\path\to\dsh-retry-0.6.1.tgz

安裝後在 DSH 設置 → 插件 中啓用 dsh-retry。用 file: 安裝時 pnpm 會複製目錄而非軟鏈,改源碼後需重新安裝 bundle 才生效。

首次完整流程建議:

  1. 托盤 → 退出 DeepSeek Harness,再重新打開(不是隻刷新窗口)。
  2. 新實例加載 client bundle 後,設置頁「重啓與更新」應出現。
  3. 同一實例約 3 秒後可能自動重啓一次,用於把補丁寫入 app.asar;之後托盤與賬戶菜單項一併出現。

從 0.4.x 升到 0.5.x 或升到 0.6.x 時,README 均要求完整重啓 DSH 一次,以便 dsh.client 與 client-modules 重新組合 bundle。

典型用法與自檢

從 UI 重啓: 任選托盤項、賬戶菜單項,或設置 → 重啓與更新中的按鈕。

用 HTTP 看補丁狀態(端口爲當前 GUI 對應 host 端口):

Invoke-RestMethod http://127.0.0.1:<port>/dsh-retry/status | ConvertTo-Json

關注 patched、mainPatched、accountPatched、missing、writeAccess、autoRestart、foreignPatch 等字段。patched: true 且 missing 爲空表示兩處菜單補丁已生效;foreignPatch.detected: true 表示 asar 可能被其他同樣改 lib/main.js 的插件動過,插件會暫停自動覆蓋並在設置頁提示。

/dsh-retry/restart 常見響應:

狀態碼 含義
200 已是最新補丁,寫觸發文件後優雅重啓
202 已暫存補丁,helper 執行殺進程、替換、再拉起
409 15 秒內重複點擊或 restart 進行中
503 當前用戶無法寫入 resources

0.6.0 起,設置頁「插件更新」可從 GitHub Releases 拉 tgz、校驗 sha256 後安裝到 profile,再引導重啓生效。

適用場景與注意

  • 適合: 經常在 Windows DSH 桌面端調試插件、依賴 profile 內 client bundle 或需在不丟會話前提下整應用重開的用戶。
  • 環境: /dsh-retry/status 返回 not_desktop(409)時,說明非 Windows 桌面宿主,插件不生效。
  • 權限與安全: 插件以當前 DSH 進程用戶權限運行,補丁會改寫安裝目錄下的 app.asar(經 helper 與備份策略);安裝前應閱讀倉庫源碼與 MIT 許可證,並確認對 resources 有寫權限(否則易見 503)。
  • 兼容性: package.json 聲明 engines.dsh 爲 >=0.2.0-rc.1 <0.3.0-0,node 爲 >=22.19.0;與具體 DSH 桌面版本不匹配時以官方文檔與倉庫 issue 爲準。
  • 生態: DSH 社區插件目錄(含 skillhub 條目)爲獨立站點,與 DeepSeek / 幻方無官方從屬關係;安裝方式以 README 與市場條目爲準,勿自行拼接未在資料中出現的 CLI 安裝命令。

結尾

dsh-retry 的價值可以概括爲:在官方未開放托盤/賬戶菜單擴展的前提下,用可控的 asar 補丁補上兩個原生入口,並用設置頁 slot 保留「隨時能重啓」的兜底;升級 DSH 後靠啓動自愈或設置頁手動重啓即可恢復。進一步瞭解實現與排障表見 GitHub README;瀏覽與安裝入口見 目錄頁 與 倉庫。

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

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

小夜