前言¶
在 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。因此插件拆成:
- host(
lib/index.js):提供/dsh-retry/status、/prepare、/restart、/update等路由。 - client(
lib/client.js):經dsh.client加載,註冊設置頁,不依賴補丁即可顯示重啓與狀態面板。 - 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 才生效。
首次完整流程建議:
- 托盤 → 退出 DeepSeek Harness,再重新打開(不是隻刷新窗口)。
- 新實例加載 client bundle 後,設置頁「重啓與更新」應出現。
- 同一實例約 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;瀏覽與安裝入口見 目錄頁 與 倉庫。