dsh-plugin-updater:在 DSH 裏檢查並一鍵更新已安裝插件

前言

DeepSeek Harness(DSH)把能力拆成可安裝的 bundle 插件,profile 裏插件一多,版本就容易和 npm registry 上的 latest 脫節。手動在終端裏對照版本、再執行卸載與重裝,步驟重複且容易漏。社區插件 dsh-plugin-updater(維護者 shehuilaoliumang,分類 admin-security)把「查新版本」和「按內置插件管理器語義更新」收進 Web UI:側欄、插件頁總覽、單插件詳情頁三處入口,並支持批量更新、忽略某版本與可選的自動更新。

下面介紹它做什麼、怎麼裝、日常怎麼用,以及更新範圍與常見失敗該怎麼處理。

這是什麼

dsh-plugin-updater 是 DSH 的插件更新助手:列出當前 profile 裏經 plugin_manager 安裝的插件,對比註冊表最新版本,對可更新項提供一鍵或批量更新(先卸舊再裝新,失敗時儘量回滾)。

  • 目錄頁:https://www.skillhub.cn/plugins/shehuilaoliumang/dsh-plugin-updater
  • 源碼:https://github.com/shehuilaoliumang/dsh-plugin-updater
  • 當前 package 版本:0.4.3(頁腳會顯示「更新檢查 v0.4.3」與 Host 端版本,不一致時 Host 版本標紅並提示重啓 DSH)
  • 許可證:MIT

社區目錄站點與 DeepSeek / 幻方無官方從屬關係;安裝前請自行審閱源碼與許可證。插件以當前 DSH 進程權限運行。

入口與界面

功能入口分三處,內容複用同一套檢查面板邏輯:

  1. 側欄 → 更新檢查(sidebar.panellist + 同名 main 面板):日常入口;有可更新插件時圖標右上角帶提示點。
  2. 插件 → 更新檢查(plugins.tab):插件頁內總覽,支持搜索、按狀態篩選、逐條與批量更新;頂部可配置自動更新。
  3. 插件詳情頁(plugins.detail.badge + plugins.detail.actions):僅在 bundle 詳情頁顯示「可更新 x.y.z」標籤與「更新到 x.y.z」按鈕;行配置頁與官方插件頁無整包可替換對象,不渲染多餘控件。

啓動後若檢測到可更新項,右下角會出現 5 秒自動消失的限時提醒卡,可「全部更新」或跳轉插件頁;同一批可更新插件在同一瀏覽器會話內只提醒一次。自動更新設置不單獨佔設置頁,集中在「更新檢查」總覽與側欄面板頂部。

核心功能

版本檢查與狀態

  • 聚合 plugin_manager 已裝插件,向 registry 查詢 packument 的 dist-tags.latest。
  • 行狀態包括:可更新 / 已是最新 / 本地版本更新 / 檢查失敗 / 已忽略,以及本地、link:/file:、Git、壓縮包、隨 DSH 提供的 official bundle 等跳過狀態;跳過與失敗會在行內給出原因。
  • registry 優先級:pluginManager.registries() 的 resolved / registry / fallbackRegistries → pluginRegistryProbe.fastest() → https://registry.npmjs.org/。
  • 版本比較使用 SemVer,含 pre-release 排序規則。

更新與進度

  • 單條更新:點擊「更新」立即執行 remove + install;安裝失敗時自動嘗試裝回舊版本;前端輪詢 Host 進度,顯示「卸載舊版本 → 安裝 x.y.z → 確認結果」與已用時長。
  • 批量更新:「全部更新(N)」先確認,再由 Host 順序執行,結束彙總成功/失敗;失敗行可單獨重試。遇到需要重啓 DSH 或全局性 pnpm 故障時,批量會在當前項之後 暫停,後續項標記爲暫停。
  • 忽略此版本:按「包名 + 版本」寫入 Host 端設置;忽略後不計入可更新數量,上游再發新版本會重新出現在「可更新」。舊版瀏覽器 localStorage 忽略記錄在首次升級後會遷移到 Host。

自動更新(默認關閉)

在「更新檢查」頁頂部可開啓:

  • 打開頁面時自動更新:Web UI 每次打開時檢查一次,並更新全部可更新項,完成後用限時提醒彙總。
  • 定時後臺更新:DSH 運行期間按間隔檢查並更新,間隔可設 30 分鐘~30 天;開啓後約 1.5 秒會先執行一次。

自動更新同樣只處理 npm 第三方插件,並複用帶失敗回滾的更新流程。

其他 UI 行爲

  • 「可更新」與「其他插件」兩組可摺疊;有可更新項時「其他插件」默認收起。
  • 檢查完成、單條/批量更新結束、忽略/取消忽略後,側欄提示點即時刷新,無需重開頁面。
  • 需要重啓時會有提示;安裝日誌寫入 profile 的插件管理器日誌。
  • 桌面端插件仍被加載時(bundle-in-use)會提示重啓後再更新;profile 啓動項缺失時有對應文案。
  • pnpm 鎖文件損壞、新版本等待期攔截等會在錯誤行下給出可執行修復提示(見下文常見問題)。

更新規則(務必知曉)

  • 只更新 來自 npm registry 的已安裝 bundle;link:/file: 本地插件、Git、tarball 與隨 DSH 分發的 official bundle 不在此更新。
  • 更新語義與內置插件管理器 Update 一致:remove + install(失敗儘量回滾舊版)。
  • 忽略記錄與自動更新設置保存在 ~/.dsh/plugin-updater/settings.json(可用環境變量 DSH_HOME 覆蓋用戶目錄),不寫入 profile 的 package.json 或 cordis.patch.yml。

安裝與啓用

在取得插件目錄的絕對路徑後,通過 profile 的插件管理器安裝(命令以 README 原文爲準):

plugin_manager action=install_bundle target=<本目錄的絕對路徑>

Host 半(index.js)改動需 重啓 DSH 後纔會載入;Client 半(client.js)通常由 HMR 自動更新。依賴注入包括 @deepseek-ai/dsh-client-locale 與 @deepseek-ai/dsh-client-ui-plugin-manager。

典型用法

  1. 安裝並重啓 DSH(若剛裝 Host 半)。
  2. 打開 側欄 → 更新檢查,或 插件 → 更新檢查,等待列表刷新;頁腳可見最近檢查時間與插件/Host 版本。
  3. 對單行點「更新」,或確認後使用「全部更新(N)」;需要時在行內「忽略此版本」,日後可在同頁取消忽略。
  4. 進入某個 npm bundle 的 詳情頁,使用標題旁版本標籤或頁頭「更新到 x.y.z」就地更新。
  5. 若希望少動手,在總覽頂部開啓「打開頁面時自動更新」或「定時後臺更新」,並設定間隔。

Host 側 API 路徑(供排查或二次開發參考,日常使用不必手動調用):

  • GET /dsh-plugin-updater/api/state[?force=1]
  • POST /dsh-plugin-updater/api/update,body { "name": "<package>" }
  • GET /dsh-plugin-updater/api/progress
  • GET|POST /dsh-plugin-updater/api/settings
  • POST /dsh-plugin-updater/api/update-batch,body { "names": ["..."] }(省略則用當前全部可更新項)

適用場景與注意

適合:經常從 npm 安裝社區 DSH 插件、希望在一個界面裏對照 registry、批量維護版本的用戶;需要按版本忽略提醒、或希望在頁面打開/定時後臺靜默更新的環境。

注意:

  • 插件以當前 DSH 進程權限讀寫 profile 與 ~/.dsh/plugin-updater/settings.json;安裝前請檢查源碼與 MIT 許可證。
  • 本地 link、Git、tarball、官方內置 bundle 不會出現在可更新列表的更新目標中,需用各自方式維護。
  • 批量更新遇到「需重啓」或全局鎖文件問題時會在中途暫停,重啓或修復後重新批量即可。

常見問題:更新失敗 / 需要重啓

  • 提示需要重啓 DSH:官方桌面端不允許卸載正在被當前進程加載的插件;重啓後再點更新。
  • 啓動項缺失:早期卸載失敗可能已從 dsh.profile.bundles 去掉啓動行;重啓後更新成功會寫回,仍缺失可在「插件」頁手動重新啓用。
  • 批量更新中途暫停:第一個需重啓項之後的項標記爲暫停,重啓後重新批量更新。
  • pnpm internal error / Broken lockfile:在 profile 目錄執行:
pnpm install --lockfile-only --fix-lockfile

完成後重新檢查;pnpm 可能同時把相關版本寫入 pnpm-workspace.yaml 的 minimumReleaseAgeExclude。
- 剛發佈版本更新失敗(ERR_PNPM_RESOLUTION_POLICY_VIOLATIONS_UNHANDLED 等):pnpm 11 默認 24 小時新版本等待期;先按上條修鎖文件再重試;CLI add 路徑會自動把版本加入 minimumReleaseAgeExclude。
- 安裝長時間無輸出:插件管理器有 10 分鐘空閒超時(idleTimeoutMs),超時終止並回滾,可重試或檢查網絡/registry。

結尾

dsh-plugin-updater 把 npm 已裝插件的版本對照、單條/批量更新、忽略與自動更新收斂到 DSH Web UI 的三處入口,並與內置 plugin_manager 的 Update 語義對齊,同時區分需重啓、啓動項缺失與 pnpm 鎖文件等失敗類型。

  • 社區目錄:https://www.skillhub.cn/plugins/shehuilaoliumang/dsh-plugin-updater
  • GitHub:https://github.com/shehuilaoliumang/dsh-plugin-updater
羽毛球分组比赛记分
小程序二维码

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

小夜