DeepSeek Harness (dsh) 採用插件化架構。內置的熱重載機制 (cordis-plugin-hmr) 會刻意忽略 node_modules,因此通常升級已安裝的插件 (dsh plugin add pkg@x) 需要完全重啓 dsh 才能生效。dsh-hot-reload 插件填補了這個缺口:它監視當前 profile 的 pnpm-lock.yaml,當已加載插件包的版本發生變化時,直接在運行中交換插件實例。
下面介紹如何使用這個插件。
功能概覽¶
dsh-hot-reload 提供以下核心能力:
- 熱重載:在不停止 dsh 進程的情況下,實時升級插件代碼,dsh 會自動失效模塊緩存並重新導入新代碼。
- 安全回滾:如果新代碼加載或初始化失敗,插件會自動回退到舊的穩定版本,確保服務不中斷。
- 狀態持久化:插件將其自身狀態寫入文件,支持插件自身的熱重載。
- 結果報告:將重載結果輸出到 dsh 的日誌和 Web 應用中。
- 通用性:可在任意 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,它實現了安全、原地的插件替換。配合狀態文件和日誌報告機制,它能夠在不中斷服務的前提下更新代碼,適合需要頻繁迭代插件邏輯的開發場景。