dsh-super-injector:运行中 DSH 的本地插件注入与热重载

前言

在 DSH 里做插件开发,常见路径是改 cordis.patch.yml、走 profile bundle 或 repository 装配,然后重启 web 进程才能看到效果。官方装配机制相当于「启动器装模组」:配置即持久状态,方向清晰,但迭代代码时重启成本高。若要在不碰 patch、不改 package.json bundles 列表的前提下,把已构建好的标准插件包(package.json + lib/)塞进正在运行的 DSH,并让 host 工具与 client UI 一并生效,还需要一层运行时管理能力。

下面介绍社区插件 dsh-super-injector(维护者 r-ayin,分类:工作流)。它在 README 中自定位为 DSH 生态的「BepInEx 式模组注入入口」:运行时注入本地包、热重载、一键卸载,并附带脚手架、自检与管理相关 dev 工具;与 agent 现场写单文件的 dsh-evolve 互补——注入器面向完整插件包的装换与开发闭环。

这是什么

dsh-super-injector(包名 dsh-super-injector,当前资料中 package.json 版本为 0.3.3,MIT 许可)是 DeepSeek Harness 的运行时插件注入层。简介原文:Runtime plugin injector: inject, hot-reload and uninstall local plugin packages in a running dsh without restarts, with plugin scaffolding, self-test and a management panel.

设计要点(来自 README):

  • 注入的是标准插件包格式,不另发明协议。
  • 双路径:运行时注入(免重启,开发态)与 dev_install_package 写入 profile bundles(重启后由官方接管,生产态);注入清单持久化在 ~/.dsh/super-injector/registry.json,用于重启后自动恢复,而非第二套安装数据库。
  • v0.3.0 起按 docs/SPEC.md(基于 DSH 0.1.0-rc.6 源码语义)重构为官方 REPLACE 结构;peerDependencies 使用范围声明,README 写明已在一行不改情况下兼容 DSH 0.1.0-rc.6。

目录页:skillhub.cn/plugins/r-ayin/dsh-super-injector
源码与文档:github.com/r-ayin/dsh-super-injector

社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系。

核心功能

以下能力均来自 README 与 package.json 描述,按使用面归纳。

注入、重载与卸载(免重启)

工具 说明
dev_inject_plugin 运行时注入本地插件包(junction + loader.create,hasActiveEntry 防重)
dev_uninject_plugin 卸载注入模组(fiber 全清理;bundle 插件可写 disabled 阻断自装配)
dev_reload_package 整包热重载(清缓存 → 重新 import → 重建 fiber,失败回滚保留旧代;含注入器自重载)
dev_injected_list 列出注入清单
dev_install_package 热装配本地 bundle 插件到 profile,重启后由 bundles 正常装配
dev_plugin_status 已装配插件、fiber 状态与操作成功率统计

注入后 host 与 client UI 应完整生效;README 提到对 loader entry 做 normalize、client 模块补扫与卸载清理。注入目录会被 自动 watch,构建完成后约 1.5 秒自动重载(也可手动 dev_reload_package)。

开发与侧挂(staging)

工具 说明
dev_stage_add / dev_stage_call / dev_stage_list 后侧挂测试工具(不进 tools schema)
dev_stage_promote / dev_stage_demote 转正或撤回侧挂工具;staging 可落盘,自重载或重启后转正工具可恢复

运维与自愈

  • dev_clear_routes:按 path 前缀清理 webserver 热重载残留的孤儿路由。
  • 操作自检:注入/重载等返回 host ✓ / client ✓ 双验证;失败可重试,残留 entry/缓存有清理逻辑。

插件生产线(脚手架与构建)

README 提供「一分钟起步」三件套,通过 dev 工具驱动(对 AI 调用工具,而非单独 CLI):

  1. dev_scaffold_plugin:生成骨架(toolkit / daemon-loop / ui-panel / hybrid 等形态)。
  2. dev_build_plugin:探测 DSH_CHECKOUT,构建 host/client 并 npm pack 产出 tgz。
  3. dev_release_plugin:配合 gh release create 发布 tgz。

另有 dev_self_test 用于改代码后跑注入/重载/卸载等全链路自检(README 开发规范中提及)。

安装与启用

package.json 要求 Node >=20。安装方式 README 给出三种,任选其一;命令以 README 原文为准。

方式 A:Release 包(推荐,免构建)

从 README 所列 Releases 下载 dsh-external-dsh-super-injector-0.0.1.tgz,解压得到含 lib/ 与 cordis.patch.yml 的目录后:

# 官方装配(重启后由 bundles 接管,生产态)
dsh plugin --profile web add <解压目录>

若环境中已有常驻注入器,也可在开发态对 AI 说明使用运行时注入,例如:dev_inject_plugin <解压目录>(README 表述为「对 AI 说」)。

方式 B:git 装配

dsh plugin --profile web add github:yjh051108/dsh-super-injector

README 说明:git 依赖拉取源码,安装时 prepare 会用 tsdown 构建 lib/;首次需网络,失败时可改用方式 A 的预构建 tgz。当前 package.json 中 repository 指向 github.com/r-ayin/dsh-super-injector,与 README 安装命令中的 yjh051108 组织不一致时,以你实际采用的 README 安装命令与 Release 来源为准,并自行核对 fork/镜像是否一致。

方式 C:引导装配(仅未走 bundles 时装一次)

在 ~/.dsh/profiles/web/cordis.patch.yml 增加:

- insert:
    - id: dsh-super-injector
      name: '@yjh051108/dsh-super-injector'
      config: {}

README 警告:若已通过方式 A/B 装配,不要再加本条,否则会与 bundle 自注册的 loader entry id 冲突(duplicate loader entry id)。引导器常驻后,可再通过运行时工具注入其他包。

典型用法

开发闭环:脚手架 → 构建 → 注入

# 1. 生成骨架
# 对 AI:dev_scaffold_plugin {"dir": "D:/dev/my-plugin", "name": "my-plugin", "form": "daemon-loop", "description": "..."}

# 2. 构建打包
# 对 AI:dev_build_plugin {"dir": "D:/dev/my-plugin"}

# 3. 可选发布
# 对 AI:dev_release_plugin {"dir": "D:/dev/my-plugin", "version": "0.1.0"}

# 注入:dev_inject_plugin {"dir": "D:/dev/my-plugin"}
# 改代码 → build → watch 约 1.5s 自动重载,或 dev_reload_package

路径请换成本机实际目录;示例中的盘符来自 README,在 Linux 上改为对应绝对路径即可。

与 dsh-evolve 的分工

dsh-evolve dsh-super-injector
形态 agent 现场写单文件插件(如 ~/.dsh/evolve/<name>.mjs)热挂载 注入预构建的完整插件包
适用 对话中长出小工具 装换成品模组、本地 build → 注入 → 热重载
联动 源码可升级为完整包后再走注入器 注入后可用 dev_reload_package 热重载

适用场景与注意

适合谁

  • 正在开发标准 DSH 插件包(含 UI),需要免重启注入、热重载、侧挂转正与干净卸载的开发者。
  • 希望 agent 通过 dev_* 工具自行管理运行时、与官方 bundle 装配并存的团队(README 将其对齐为「agent 自己管理运行时」方向的实践层)。

使用前请知悉

  1. 插件以当前 DSH 进程权限运行;安装前请阅读源码与 MIT 许可证,并从你信任的 GitHub 组织/Release 获取产物。
  2. 方式 C 与 A/B 互斥条件见上文;生产环境更宜走 dsh plugin --profile web add 与 bundles,运行时注入清单仅为恢复缓存。
  3. README 开发规范强调:资源须挂 ctx.effect 以便热重载/卸载清理;peerDependencies 宜用范围声明;含 client 时需单独构建 lib/client.js。
  4. 资料中 Git 安装命令指向 github:yjh051108/dsh-super-injector,而线索目录与 package.json 仓库为 r-ayin/dsh-super-injector;拉取与装配前请确认二者是否为同一维护链路的镜像,避免装错包。

结尾

dsh-super-injector 把「装完之后怎么改」收拢到一层:注入完整本地包、热重载与回滚、侧挂转正、路由与 fiber 清理,并尽量让 host 与 client 与官方包语义一致。若你的痛点是反复重启 web 才能验证插件,可以先按 README 方式 A 或 B 装入注入器本身,再用 dev_inject_plugin 与 dev_reload_package 跑通本地包闭环。

  • 目录页:https://www.skillhub.cn/plugins/r-ayin/dsh-super-injector
  • GitHub:https://github.com/r-ayin/dsh-super-injector
羽毛球分组比赛记分
小程序二维码

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

小夜