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,它实现了安全、原地的插件替换。配合状态文件和日志报告机制,它能够在不中断服务的前提下更新代码,适合需要频繁迭代插件逻辑的开发场景。

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

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

小夜