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