dsh-auto-update:在 DSH Web 標題欄一鍵檢查並升級 dsh

前言

DeepSeek Harness(dsh)通過 npm 全局安裝後,版本升級往往要自行查 registry、執行 npm install -g,再手動停掉舊進程並重新拉起 dsh web。對長期開着 Web 界面的開發者來說,這一步容易拖後,也可能在重啓環節失手。

下面介紹社區插件 dsh-auto-update(npm 包名 @marvinlee2011/dsh-auto-update,倉庫 lee-nihao2333/dsh-auto-update)。它在會話標題欄右上角提供「更新」按鈕:僅在 registry 上確有更新時顯示,點擊後由當前用戶執行全局安裝並重啓 dsh,新進程就緒後頁面自動刷新。與靜默自更新不同,是否升級完全由你點按鈕決定。

這是什麼

該插件屬於 DSH 生態中的客戶端類 bundle:Host 側無構建步驟、無額外運行時依賴,僅在 Web profile 下向會話 UI 注入控件,並與內置 /api 共用同一套 Host/Origin 校驗與瀏覽器認證。

維護者 GitHub 賬號爲 lee-nihao2333;源碼與文檔託管於上述倉庫,npm 發佈名爲 @marvinlee2011/dsh-auto-update(當前資料記載版本 1.0.0),許可證 MIT。插件與 DeepSeek 官方無隸屬關係。

核心功能

  1. 版本探測:讀取 npm registry 上目標包的 dist-tags(默認 latest),與當前磁盤上的 dsh 版本比較;無更新時不顯示按鈕。
  2. 一鍵升級:點擊後在當前用戶權限下執行 npm install --global,使用解析後的精確版本號(例如 @deepseek-ai/dsh@x.y.z)。
  3. 安裝後校驗:安裝完成後重新讀取 package.json 覈對版本;不一致則不重啓並報錯。
  4. 受控重啓:通過獨立腳本等待當前進程退出,再以相同 node、啓動腳本、參數與工作目錄拉起 dsh;當前進程經 appExit 優雅退出。
  5. 週期檢查:默認啓動時檢查一次,之後每 30 分鐘檢查一次;頁面約每 60 秒讀取一次 Host 狀態。檢查只讀 packument,不改動磁盤。
  6. 失敗可重試:安裝失敗時按鈕變爲「重試更新」;安裝成功但重啓未完成時顯示「重啓」,可單獨重試。

對外暴露三個經認證的路由:GET /dsh-auto-update/status、POST /dsh-auto-update/apply、POST /dsh-auto-update/restart。頁面側無法指定包名、版本或 shell 命令。

安裝與啓用

環境要求(來自插件 engines):

  • dsh:>=0.2.1-rc.2 且 <0.3.0
  • Node.js:^22.19.0 || >=24.0.0
  • 當前用戶對 npm 全局前綴具備寫權限(升級動作爲 npm install --global)

方式一:插件管理器(推薦)

  1. 打開 DSH Web → 設置 → 插件。
  2. 點擊 安裝第三方插件,輸入包名 @marvinlee2011/dsh-auto-update 並確認。
  3. 插件出現在列表中並啓用後,刷新頁面。

插件管理器會同時將包裝進 profile、把 bundle 加入啓動列表並啓用。

方式二:命令行

先安裝依賴:

dsh plugin --profile web add @marvinlee2011/dsh-auto-update

再把包名加入 profile 啓動列表 ~/.dsh/profiles/web/package.json 中的 dsh.profile.bundles:

{
  "dsh": {
    "profile": {
      "bundles": [
        "@deepseek-ai/dsh-base",
        "@deepseek-ai/dsh-web-app",
        "@marvinlee2011/dsh-auto-update"
      ]
    }
  }
}

然後重啓 dsh web。注意:dsh plugin add 只安裝依賴,不會自動把 bundle 寫入啓動列表;漏配時啓動日誌會提示 bundle 未啓動。

典型用法

  1. 打開任意會話,在標題欄右上角工具區最右側查看是否出現「更新」(英文界面爲 “Update”)。
  2. 懸停按鈕可看到「當前版本 → 目標版本」。
  3. 點擊後狀態依次爲「正在更新…」「正在重啓…」,隨後頁面自動刷新。

按鈕出現條件:registry 上 distTag 指向的版本高於本機;或上次安裝成功但重啓尚未完成(此時顯示「重啓」)。

配置

在 profile 的 cordis.patch.yml 中覆蓋插件行,修改後需重啓 dsh(或在插件管理器中重載插件):

- id: dsh-auto-update
  name: '@marvinlee2011/dsh-auto-update'
  config:
    packageName: '@deepseek-ai/dsh'  # 要升級的包
    distTag: latest                  # 比較的 dist-tag
    registry: ''                     # 空 = 沿用 npm 自身的 registry 配置
    checkIntervalMinutes: 30         # 自動檢查間隔,1–1440

常見調整:

  • 跟進預發佈:將 distTag 改爲 next 或 alpha(視目標包實際標籤而定)。
  • 降低檢查頻率:增大 checkIntervalMinutes;打開頁面仍會反映當前狀態。
  • 鏡像或私有源:registry 留空時插件執行 npm config get registry,也可寫死地址。

調整 distTag 後,點擊「更新」會按該標籤當時解析出的精確版本安裝。

適用場景與注意

適合誰:經常在瀏覽器裏用 DSH Web、希望 registry 有新版本時能一眼看到、並願意在確認後讓本機全局 dsh 升級的用戶。

務必注意:

  • 插件以當前 dsh 進程的 Node 用戶身份執行全局 npm 安裝與重啓腳本。安裝前建議在 GitHub 閱讀源碼與 MIT 許可證,確認行爲符合你的環境策略。
  • 只在 Web profile 生效;CLI 或其它 profile 不會出現該按鈕。
  • 不會靜默升級;無更新時界面無額外提示,屬預期行爲。
  • 診斷文件位於 <DSH_HOME>/cache/dsh-auto-update/:state.json(最近檢查與階段)、restart.log(重啓腳本輸出)、restart.json(最近重啓記錄)。

右上角沒有按鈕時,可按 README 排查:當前 latest 是否等於已裝版本(可用 npm view @deepseek-ai/dsh dist-tags 覈對)、是否已打開會話、頁面是否已加載插件(可刷新)。預發佈在 next/alpha 時需改 distTag。

卸載

在插件管理器中停用或移除;或執行:

dsh plugin --profile web remove @marvinlee2011/dsh-auto-update

並從 dsh.profile.bundles 中刪除 @marvinlee2011/dsh-auto-update,重啓 dsh web。

結尾

dsh-auto-update 把「查 registry → 全局安裝 → 重啓進程 → 刷新頁面」收成標題欄上的一個顯式操作,默認只跟 latest,也可通過 cordis.patch.yml 改包名、dist-tag 與檢查間隔。社區插件目錄頁:skillhub.cn/plugins/lee-nihao2333/dsh-auto-update;源碼與完整 FAQ:github.com/lee-nihao2333/dsh-auto-update。

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

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

小夜