dsh-plugin-autoupdater:爲 DSH 已安裝的 npm 插件做定期檢查與自動更新

前言

DeepSeek Harness(DSH)把能力拆成可安裝的插件 bundle,版本會隨 npm 發佈迭代。若只靠手動在設置裏逐個查看、升級,插件一多就容易滯後;而 DSH 對已安裝插件的直接 installBundle 有時會返回 already-installed,原地升級會被拒絕,需要卸載後再裝新版本。維護者 wy7779 在 GitHub 發佈的 dsh-plugin-autoupdater(目錄分類:聯網工具)面向上述場景:在宿主內輪詢 npm 的 latest,按需自動安裝,並在拒絕原地升級時走卸載重裝,重裝失敗則嘗試恢復舊版本。本文介紹其定位、能力與安裝用法,事實以倉庫 README 與 package.json 爲準。

這是什麼

dsh-plugin-autoupdater 是 DeepSeek Harness 的插件自動更新器:定期檢查已安裝插件是否有更新的 npm 發佈,自動更新;當 DSH 拒絕原地升級時,自動卸載後重裝;重裝失敗時嘗試把舊版本裝回去。

只處理從 npm 安裝的第三方插件;本地 link: / file: / git 插件、官方隨 DSH 發佈的插件、管理必需插件,以及本插件自身都不會被改動。

核心功能

下面能力均來自 README 說明。

定期檢查與安裝

  • 默認每 3 小時向 npm 查詢一次 latest(間隔可設爲 1 / 3 / 6 / 12 / 24 小時)。
  • 有新版本則安裝;原地安裝被拒時,在開關允許下自動「卸載 → 重裝」。
  • 重裝失敗時嘗試 installBundle 回舊版本,並在設置頁寫明失敗原因。

會話與重試策略

  • 自動執行僅在會話空閒 ≥5 分鐘時進行(依據會話日誌最後寫入時間),避免打斷正在進行的對話;設置頁「立即檢查並更新」不受此限制。
  • 同一包在同一目標版本上失敗後,12 小時內不再重試。

可配置與可見性

  • 三個開關:自動檢查、自動安裝、失敗時卸載重裝;檢查間隔可選。
  • 設置頁展示上次檢查時間,以及逐條結果(已更新 / 已更新待重啓 / 可更新 / 失敗原因 / 跳過原因)。
  • 配置與最近一次結果保存在 ~/.dsh/plugin-auto-updater/state.json。

宿主依賴

插件通過 pluginManager、connection、webServer 三個宿主服務工作;README 要求 DSH 0.2.1+(並在 0.2.1-rc.3 桌面端實測)。package.json 聲明 Node >=20。

安裝與啓用

安裝前請確認 DSH 版本滿足要求,並知悉插件以當前 DSH 進程權限運行;安裝前應自行查看源碼與 MIT 許可證。

從 GitHub 安裝(桌面端):

dsh plugin --profile desktop add github:wy7779/dsh-plugin-autoupdater

若當前 DSH 不支持 github: 源,README 給出克隆後按本地目錄安裝的方式(需自行準備目錄路徑):

git clone https://github.com/wy7779/dsh-plugin-autoupdater.git
dsh plugin --profile desktop add /path/to/dsh-plugin-autoupdater

也可在 設置 → 插件 → 添加插件 中填入本地目錄路徑,然後重啓 DSH。

典型用法

  1. 完成安裝並重啓 DSH 後,打開 設置 → 插件自動更新。
  2. 開啓「啓用自動檢查」:插件加載後約 10 分鐘做第一次檢查,之後按所選間隔輪詢。
  3. 若關閉「自動安裝更新」,則只報告新版本;需要安裝時點「立即檢查並更新」。
  4. 若關閉「失敗時自動卸載重裝」,遇到 already-installed 時只記錄失敗,不會改動已裝插件。

工作原理(概要)

經過上面的配置,後臺邏輯可概括爲 README 中的四步:

  1. pluginManager.listBundles() 列出 bundle,只保留可移除、無 readOnlyReason 的第三方 npm 包,跳過 link/file/git 與官方包、本插件自身。
  2. 從 npm 取 dist-tags.latest(默認源失敗時回退 npmmirror),做 semver 比較。
  3. 有新版本時 installBundle('name@latest');成功則完成;already-installed 且開啓修復則 removeBundle 再安裝;重裝失敗則嘗試裝回舊版本並記錄原因。
  4. 自動執行前檢查會話是否活躍;活躍則推遲約 10 分鐘再試。

適用場景與注意

適合誰

  • 桌面端 DSH 用戶,已安裝多個來自 npm 的社區插件,希望減少手動查版本、處理 already-installed 的成本。

已知邊界(README)

  • 部分插件更新後需重啓 DSH 才完整生效(結果中會標「已更新(重啓後生效)」)。
  • 更新如 dsh-ops 等提供 shell/文件工具的插件時,相關工具會短暫不可用,故自動更新限定在空閒窗口。
  • 是否可更新取決於 npm 是否存在 latest;私有源/私有包不在處理範圍。
  • 插件不直接改 ~/.dsh/profiles/*/package.json 以外內容,操作均經 DSH 的 pluginManager 完成。

DSH 生態強調「一切皆插件」;SkillHub 等社區目錄爲獨立站點,與 DeepSeek / 幻方無官方從屬關係,本文僅介紹該開源插件本身。

結尾

dsh-plugin-autoupdater 把「查 npm → 裝新版本 → 處理 already-installed → 失敗回滾」收進 DSH 設置頁與定時任務,並用手動「立即檢查並更新」覆蓋自動空閒窗口。進一步細節與 Issue 見 GitHub:https://github.com/wy7779/dsh-plugin-autoupdater;目錄入口:https://www.skillhub.cn/plugins/wy7779/dsh-plugin-autoupdater。

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

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

小夜