08 插件系统
模块目标
理解 OpenClaw 如何在不改核心代码的前提下扩展通道、工具、命令和网关能力。
步骤一:实现拆解(执行链路)
- 插件发现与加载:
src/plugins/loader.ts - 插件能力注册:
src/plugins/registry.ts - 运行时上下文:
src/plugins/runtime/index.ts - 活跃注册表:
src/plugins/runtime.ts - 插件服务生命周期:
src/plugins/services.ts - 网关整合点:
src/gateway/server.impl.ts(loadGatewayPlugins+ sidecars)
步骤二:细粒度讲解(小白版)
- loader 先做“发现 + 验证”
- 扫描候选插件
- 读取 manifest
- 校验配置 schema
- 处理启用/禁用与来源优先级
- 用 jiti 动态加载 TS/JS 插件
- registry 是“能力总线”
- 插件可注册:
- tools
- hooks
- channels
- providers
- gateway methods
- HTTP 路由
- CLI 命令
- services
- 重名/冲突会写入 diagnostics
- runtime 给插件提供“安全可控工具箱”
- 统一提供 config/media/channel/session 等能力
- 插件不直接乱 import 核心内部,减少耦合
- active registry 是全局单例状态
- 网关、CLI、通道层都从同一个活动注册表读取插件能力
- 支持缓存 key 与重载替换
- services 提供后台能力
- 插件可以有
start/stop - 网关启动时启动,关闭时逆序停止