插件系统架构
插件架构总览
graph TB
subgraph 注册阶段
P1["Plugin A"] -->|registerBundle| PR["PluginRegistry"]
P2["Plugin B"] -->|registerBundle| PR
P3["Plugin C"] -->|registerBundle| PR
PR -->|buildAgentConfigs| AC["AgentConfig 集合"]
end
subgraph 运行阶段
Runner["WorkerRunner"] -->|onWorkerStartup| PR2["PluginRegistry"]
PR2 -->|onTaskStart| Hooks["Plugin Hooks"]
Hooks -->|onTaskComplete| PR2
Hooks -->|onTaskError| PR2
Runner -->|onWorkerShutdown| PR2
end
注册阶段 --> 运行阶段
核心组件关系
classDiagram
class Plugin {
<<abstract>>
+PluginManifest manifest
+registerAgentConfigs(ctx) AgentConfig[]
+onWorkerStartup(worker)
+onWorkerShutdown(worker)
+onTaskStart(context)
+onTaskComplete(context, result)
+onTaskError(context, error)
+onTaskCancel(context, command)
}
class PluginManifest {
+pluginId: string
+version: string
+priority: int
+enabled: boolean
}
class PluginBuildContext {
+listAgentConfigs() AgentConfig[]
+setAgentConfigs(configs)
}
class AgentConfig {
+agentId: string
+name: string
+tools: Map
+prompts: Map
+skills: Map
+callbacks: Map
+knowledge_bases: Map
+sub_agents: List
+extra: Map
+on_conflict: string
}
class PluginRegistry {
+registerBundle(plugin)
+getPlugin(pluginId) Plugin
+listPlugins() Plugin[]
+buildAgentConfigs() Map
+onTaskStart(context)
+onTaskComplete(context, result)
+onTaskError(context, error)
}
Plugin *-- PluginManifest
Plugin ..> PluginBuildContext : uses
Plugin ..> AgentConfig : produces
PluginRegistry o-- Plugin : manages
插件生命周期
sequenceDiagram
participant R as WorkerRunner
participant PR as PluginRegistry
participant P as Plugin
participant W as GatewayWorker
participant C as AgentContext
Note over R: === Worker 启动 ===
R->>PR: loadPluginsFromDir() / registerBundle()
PR->>P: new Plugin(manifest)
PR->>P: registerAgentConfigs(buildContext)
P-->>PR: AgentConfig[]
R->>PR: onWorkerStartup(worker)
PR->>P: onWorkerStartup(worker)
Note over R: === 任务处理 ===
loop 每个任务
R->>PR: onTaskStart(context)
PR->>P: onTaskStart(context)
R->>W: processCommand(command, context)
alt 正常完成
R->>PR: onTaskComplete(context, result)
PR->>P: onTaskComplete(context, result)
else 异常
R->>PR: onTaskError(context, error)
PR->>P: onTaskError(context, error)
else 取消
R->>PR: onTaskCancel(context, command)
PR->>P: onTaskCancel(context, command)
end
end
Note over R: === Worker 关闭 ===
R->>PR: onWorkerShutdown(worker)
PR->>P: onWorkerShutdown(worker)
PluginRegistry API
插件加载方式
graph TD
RW["runWorker()"]
RW -->|"pluginList"| M1["直接传入实例列表"]
RW -->|"pluginConfigurator"| M2["回调函数配置"]
RW -->|"pluginDir"| M3["从目录自动加载"]
M1 --> PR["PluginRegistry.registerBundle()"]
M2 --> PR
M3 -->|"loadPluginsFromDir()"| PR
PR --> Build["buildAgentConfigs()"]
Build --> Ready["✅ 插件就绪"]
工具注册