Skip to content

08 插件系统

模块目标

理解 OpenClaw 如何在不改核心代码的前提下扩展通道、工具、命令和网关能力。

步骤一:实现拆解(执行链路)

  1. 插件发现与加载: src/plugins/loader.ts
  2. 插件能力注册: src/plugins/registry.ts
  3. 运行时上下文: src/plugins/runtime/index.ts
  4. 活跃注册表: src/plugins/runtime.ts
  5. 插件服务生命周期: src/plugins/services.ts
  6. 网关整合点: src/gateway/server.impl.tsloadGatewayPlugins + sidecars)

步骤二:细粒度讲解(小白版)

  1. loader 先做“发现 + 验证”
  • 扫描候选插件
  • 读取 manifest
  • 校验配置 schema
  • 处理启用/禁用与来源优先级
  • 用 jiti 动态加载 TS/JS 插件
  1. registry 是“能力总线”
  • 插件可注册:
    • tools
    • hooks
    • channels
    • providers
    • gateway methods
    • HTTP 路由
    • CLI 命令
    • services
  • 重名/冲突会写入 diagnostics
  1. runtime 给插件提供“安全可控工具箱”
  • 统一提供 config/media/channel/session 等能力
  • 插件不直接乱 import 核心内部,减少耦合
  1. active registry 是全局单例状态
  • 网关、CLI、通道层都从同一个活动注册表读取插件能力
  • 支持缓存 key 与重载替换
  1. services 提供后台能力
  • 插件可以有 start/stop
  • 网关启动时启动,关闭时逆序停止

用工程视角拆解 AI 智能体框架