dsh-plugin-reload:按单个条目重启 Cordis Loader 的 DSH 插件

前言

在 DeepSeek Harness(DSH)中,插件、MCP 连接和工具贡献通常由 Cordis Loader 管理。改了一个 in-process plugin 的磁盘代码,或者改了某个 mcp-client 对应的 MCP server 代码后,常见做法是重启 host。

dsh-plugin-reload 提供的粒度更细:它给 agent 一个 reload_plugin 工具,可按 entry id、module name 或 MCP config.serverName 重启单个 Cordis Loader 条目,其他条目继续运行。

定位

dsh-plugin-reload 是一个 DeepSeek Harness 插件,许可证为 MIT。

它的目标不是提供设置界面,而是给 agent 一个可调用工具,用来在线重启指定条目。仓库地址:

https://github.com/reina4xa/dsh-plugin-reload

核心能力

插件提供 reload_plugin 工具。下面按条目类型说明行为。

mcp-client 条目

mcp-client 条目,重启会重新拉起 MCP server 子进程,并重新注册其工具。sibling MCP 连接不受影响。

in-process plugin 条目

对 in-process plugin 条目,插件执行 hard reload:

  • 清除该条目的 ESM/CJS 模块缓存。
  • 从磁盘重新导入代码。
  • 把 fiber 切换到新模块。
  • 如果重新导入或重新应用失败,回滚到之前的代码。

模式与预览

reload_plugin 支持以下参数:

name     必填。entry id(优先)、module name,或 MCP config.serverName
mode     可选。auto、soft、hard
dry_run  可选。true 时只报告匹配结果和将执行的策略,不实际重启

mode 的语义:

  • auto:in-process plugin 使用 hard reload;mcp-client 重启 MCP server 子进程并重新注册工具。
  • soft:只 dispose 并重新应用;不会取到 in-process 代码变更。
  • hard:清除 ESM/CJS 缓存,并从磁盘重新导入 entry 代码。

dry_run: true 适合先确认会匹配到哪个条目、会使用哪种策略,再真正执行。

匹配规则

匹配只遍历非 group entries,优先级如下:

exact entry id > module name > mcp-client serverName

失败行为:

  • 零匹配:报错,并列出可用条目。
  • 多匹配:报错,列出候选 entry ids,不修改状态。
  • group entries:不参与匹配。要重启插件子树,需要逐个 leaf entry 调用。

成功返回包括 entry id、module、可选 serverName、前后 fiber phases、策略和语义说明。

安装与挂载

从 v0.1.2 起,包声明了 dsh.bundle。使用 dsh plugin 安装后会自动挂载:

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

后续更新:

dsh plugin --profile web update dsh-plugin-reload

如果使用普通 npm 安装,或希望显式维护 patch 行,可以插入 profile patch:~/.dsh/profiles/<name>/cordis.patch.yml,或 --patch overlay:

- insert:
    - id: plugin-reload
      name: 'dsh-plugin-reload'

注意:不要同时保留 bundle mount 和 manual row。重复工具注册会在加载时失败。

运行要求

需要 DeepSeek Harness profile 提供 web 或 headless bundle,并且可用:

@deepseek-ai/dsh-tools
@deepseek-ai/cordis-plugin-loader

适用场景与注意

适合:

  • 只想重启某个 in-process plugin,不影响其他条目。
  • 修改某个 mcp-client 的 MCP server 代码后,重新注册该 server 的工具。
  • agent 在 DSH 会话中执行受控的插件级 reload。

注意:

  • 插件以当前 dsh 进程权限运行。安装前请检查源码与 MIT 许可证。
  • 重载期间存在短暂工具中断。被重载条目的贡献,例如 MCP 工具,在 disposal 和 re-application 之间不可用,期间调用会失败。
  • hard reload 只覆盖插件自身代码;node_modules 中的依赖不会被重新导入。修改这些依赖仍需要重启 host。
  • reload 会重新执行插件顶层代码。插件不应依赖顶层持久状态跨 reload 存活。
  • 该插件面向 agent,没有浏览器/UI surface;Settings plugin-inventory 标签页保持只读。
  • 不支持 group reload;需要逐个 leaf entry 重启插件子树。

开发命令

npm install
npm run build
npm test
npm pack

链接

  • GitHub:https://github.com/reina4xa/dsh-plugin-reload
  • 插件目录页:https://www.skillhub.cn/plugins/reina4xa/dsh-plugin-reload
羽毛球分组比赛记分
小程序二维码

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

小夜