dsh-hot-reload: DeepSeek Harness 插件熱重載

DeepSeek Harness (dsh) 採用插件化架構。內置的熱重載機制 (cordis-plugin-hmr) 會刻意忽略 node_modules,因此通常升級已安裝的插件 (dsh plugin add pkg@x) 需要完全重啓 dsh 才能生效。dsh-hot-reload 插件填補了這個缺口:它監視當前 profile 的 pnpm-lock.yaml,當已加載插件包的版本發生變化時,直接在運行中交換插件實例。

下面介紹如何使用這個插件。

功能概覽

dsh-hot-reload 提供以下核心能力:

  1. 熱重載:在不停止 dsh 進程的情況下,實時升級插件代碼,dsh 會自動失效模塊緩存並重新導入新代碼。
  2. 安全回滾:如果新代碼加載或初始化失敗,插件會自動回退到舊的穩定版本,確保服務不中斷。
  3. 狀態持久化:插件將其自身狀態寫入文件,支持插件自身的熱重載。
  4. 結果報告:將重載結果輸出到 dsh 的日誌和 Web 應用中。
  5. 通用性:可在任意 profile 中工作。

安裝與啓用

安裝插件需要指定 profile(例如 web):

dsh plugin --profile web add dsh-hot-reload

安裝完成後,必須重啓 dsh 一次。這是因爲插件配置(如 cordis.patch.yml)在啓動時加載。重啓後,插件即可生效。

典型用法

升級插件

安裝插件後,後續的插件升級會自動觸發熱重載。直接運行升級命令即可:

dsh plugin --profile web add some-plugin@newer

查看詳細日誌

插件只會在終端輸出一行簡略信息。若要查看所有日誌細節(包括警告和診斷信息),需額外添加控制台日誌插件:

dsh plugin --profile web add @deepseek-ai/cordis-plugin-logger-console

並在該 profile 的配置中啓用該插件,隨後重啓 dsh。

注意事項與限制

使用該插件前,請確認以下環境要求:

  • 版本要求:需要 dsh 版本 0.1.0-rc.6,以及 Node.js 版本 >= 22。
  • 狀態文件:插件運行依賴狀態文件 profileDir/.dsh-hot-reload-state。該文件由插件維護,記錄了已提交的版本、失敗的版本以及已通知的版本。
  • 失敗重試:插件不會自動重試失敗的版本。如果升級失敗,需要手動選擇其他版本或重啓 dsh。
  • 全屏界面:在 tui 等全屏 profile 中,熱重載的終端提示行可能會出現在屏幕中間,直到界面刷新。這不會影響功能,但會暫時影響顯示。
  • 瀏覽器消息:Web 應用中的消息提示僅顯示一次且不會保存。如果瀏覽器未打開,消息將丟失,但日誌中會有記錄。

總結

dsh-hot-reload 解決了 DSH 環境下升級插件必須重啓的痛點。通過監視 pnpm-lock.yaml,它實現了安全、原地的插件替換。配合狀態文件和日誌報告機制,它能夠在不中斷服務的前提下更新代碼,適合需要頻繁迭代插件邏輯的開發場景。

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

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

小夜