openclaw/ARCHITECTURE_BLUEPRINT.md

813 lines
22 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# OpenClaw 架构蓝图
> 完整的系统架构可视化
---
## 1. 整体系统架构
```mermaid
graph TB
subgraph "客户端层 Clients"
APP1[macOS App]
APP2[iOS App]
APP3[Android App]
UI[Web UI]
CLI[CLI Tool]
NODES[Nodes<br/>macOS/iOS/Android]
end
subgraph "网关层 Gateway (18789)"
WS[WebSocket Server]
HTTP[HTTP Server]
PROTO[Protocol Validator<br/>AJV]
CHANNELS[Channel Manager]
EVENTS[Event Dispatcher]
METHODS[Method Handlers]
CRON[Cron Service]
CANVAS["Canvas Host<br/>a2ui (18793)"]
end
subgraph "通道层 Channels"
WA[WhatsApp Web<br/>Baileys]
TG[Telegram<br/>grammY]
DC[Discord]
SL[Slack]
SG[Signal]
IM[iMessage]
LN[LINE]
GO[Google Chat]
MS[MS Teams]
EXT[Extensions<br/>Matrix/Zalo/etc]
end
subgraph "Agent 层"
ROUTER[Message Router<br/>Bindings]
SESSION[Session Manager]
AGENT[Agent Runtime]
TOOLS[Tool Execution]
MEMORY[Memory Store]
PROVIDERS[Model Providers<br/>OpenAI/Anthropic/etc]
end
subgraph "基础设施层Infrastructure"
MEDIA[Media Pipeline<br/>Store/Fetch/Process]
CONFIG[Config System<br/>JSON5/Zod]
PAIRING[Device Pairing]
AUTH[Authentication]
LOGS[Logging System]
DIAG[Diagnostic Events]
end
subgraph "扩展层Plugins"
PLUGINSDK[Plugin SDK]
CHANNEL_PLG[Channel Plugins]
MEMORY_PLG[Memory Plugins]
PROVIDER_PLG[Provider Plugins]
HOOKS[Lifecycle Hooks]
end
%% 连接关系
APP1 -->|WebSocket| WS
APP2 -->|WebSocket| WS
APP3 -->|WebSocket| WS
UI -->|WebSocket| WS
CLI -->|WebSocket| WS
NODES -->|WebSocket| WS
WS --> PROTO
PROTO --> METHODS
PROTO --> EVENTS
HTTP --> METHODS
METHODS --> CHANNELS
METHODS --> ROUTER
METHODS --> CONFIG
METHODS --> MEDIA
CHANNELS --> WA
CHANNELS --> TG
CHANNELS --> DC
CHANNELS --> SL
CHANNELS --> SG
CHANNELS --> IM
CHANNELS --> LN
CHANNELS --> GO
CHANNELS --> MS
CHANNELS --> EXT
CHANNELS -.->|事件| EVENTS
EVENTS -.->|广播| WS
CRON -.->|触发| EVENTS
WA -->|入站| CHANNELS
TG -->|入站| CHANNELS
DC -->|入站| CHANNELS
SL -->|入站| CHANNELS
SG -->|入站| CHANNELS
IM -->|入站| CHANNELS
LN -->|入站| CHANNELS
GO -->|入站| CHANNELS
MS -->|入站| CHANNELS
EXT -->|入站| CHANNELS
CHANNELS -->|路由| ROUTER
ROUTER --> AGENT
AGENT --> TOOLS
AGENT --> MEMORY
AGENT --> PROVIDERS
AGENT -->|出站| CHANNELS
AGENT -.->|事件| EVENTS
SESSION -->|持久化| ROUTER
METHODS --> MEDIA
CONFIG -->|加载| CHANNELS
CONFIG -->|加载| ROUTER
WS --> AUTH
PAIRING --> AUTH
LOGS -->| everywhere | *
DIAG -->| everywhere | *
PLUGINSDK --> CHANNEL_PLG
PLUGINSDK --> MEMORY_PLG
PLUGINSDK --> PROVIDER_PLG
CHANNEL_PLG --> CHANNELS
MEMORY_PLG --> MEMORY
PROVIDER_PLG --> PROVIDERS
HOOKS --> AGENT
HOOKS --> CHANNELS
HOOKS --> EVENTS
style Gateway fill:#e1f5fe
style Clients fill:#f3e5f5
style Channels fill:#fff3e0
style Agent fill:#e8f5e9
style Infrastructure fill:#fce4ec
style Plugins fill:#fff9c4
```
---
## 2. Gateway 详细架构
```mermaid
graph TB
subgraph "Gateway Server端口 18789"
ENTER[客户端连接] --> WS_CONN
subgraph "WebSocket 层"
WS_CONN[WebSocket Server]
WS_HANDLER[WS Handler]
FRAME_PARSER[Frame Parser]
FRAME_VALIDATOR[Frame Validator<br/>JSON Schema]
end
subgraph "连接管理 Connect Management"
HELLO[req:connect]
AUTH_CHECK[Auth Check<br/>Token Check]
PAIRING_CHECK[Pairing Check<br/>Device Approval]
CLIENT_REGISTRY[Client Registry]
end
subgraph "方法层 Method Layer"
METHOD_DISPATCH[Method Dispatcher]
CORE_HANDLERS[Core Handlers<br/>health/status/send/agent]
GATEWAY_METHODS[Gateway Methods<br/>channels.* / media.*]
PLUGIN_METHODS[Plugin Methods]
end
subgraph "状态层 State Layer"
RUNTIME_STATE[Runtime State<br/>健康查看 / 缓冲]
CHANNEL_STATE[Channel State<br/>运行时实例]
NODE_REGISTRY[Node Registry]
end
subgraph "事件层 Event Layer"
EVENT_EMITTER[Event Emitter]
AGENT_EVENTS[agent Events]
CHAT_EVENTS[chat Events]
PRESENCE_EVENTS[presence Events]
HEARTBEAT[heartbeat Events]
DIAGNOSTICS[diagnostic Events]
end
subgraph "资源层 Resource Layer"
CONFIG_RELOAD[Config Reloader]
CHANNEL_MANAGER[Channel Manager]
CANVAS_HOST[Canvas Host<br/>a2ui:18793]
MEDIA_SERVER[Media Server]
CRON_SCHEDULER[Cron Scheduler]
end
end
%% 连接关系
WS_CONN --> WS_HANDLER
WS_HANDLER --> FRAME_PARSER
FRAME_PARSER --> FRAME_VALIDATOR
FRAME_VALIDATOR --> HELLO
FRAME_VALIDATOR --> METHOD_DISPATCH
HELLO --> AUTH_CHECK
AUTH_CHECK --> PAIRING_CHECK
PAIRING_CHECK --> CLIENT_REGISTRY
CLIENT_REGISTRY --> RUNTIME_STATE
METHOD_DISPATCH --> CORE_HANDLERS
METHOD_DISPATCH --> GATEWAY_METHODS
METHOD_DISPATCH --> PLUGIN_METHODS
CORE_HANDLERS -->|使用| RUNTIME_STATE
CORE_HANDLERS -->|使用| CHANNEL_STATE
CORE_HANDLERS -->|使用| CHANNEL_MANAGER
GATEWAY_METHODS --> CHANNEL_MANAGER
GATEWAY_METHODS --> MEDIA_SERVER
GATEWAY_METHODS --> NODE_REGISTRY
CHANNEL_MANAGER --> CHANNEL_STATE
CHANNEL_MANAGER -->|启动/停止| WA_SVC
CHANNEL_MANAGER -->|启动/停止| TG_SVC
CHANNEL_MANAGER -->|启动/停止| DC_SVC
RLGA_EVENTS -.->|广播| WS_HANDLER
HEARTBEAT -.->|广播| WS_HANDLER
DIAGNOSTICS -.->|广播| WS_HANDLER
CONFIG_RELOAD -.->|通知| CORE_HANDLERS
CONFIG_RELOAD -.->|通知| CHANNEL_MANAGER
CRON_SCHEDULER -.->|触发| EVENT_EMITTER
CRON_SCHEDULER -.->|触发| CANVAS_HOST
subgraph "外部服务 External Services"
WA_SVC[WhatsApp Service]
TG_SVC[Telegram Service]
DC_SVC[Discord Service]
end
style GatewayServer fill:#e1f5fe
style WebSocket层 fill:#e3f2fd
style MethodLayer fill:#bbdefb
style StateLayer fill:#90caf9
style EventLayer fill:#64b5f6
style ResourceLayer fill:#42a5f5
style ExternalServices fill:#ffecb3
```
---
## 3. 消息流转图 Message Flow
```mermaid
sequenceDiagram
participant USER as 用户
participant CH as 通道通道<br/>WhatsApp/Telegram/etc
participant GATEWAY as Gateway
participant ROUTER as Message Router
participant AGENT as Agent Runtime
participant PROVIDER as AI Provider
participant TOOLS as Tools
%% 入站消息流
USER->>CH: 发送消息
CH->>GATEWAY: 接入事件
GATEWAY->>ROUTER: 解析路由<br/>(channel/account/peer)
ROUTER-->>GATEWAY: 返回匹配结果<br/>(agentId, sessionKey)
GATEWAY->>AGENT: 调用 agent.execute
AGENT->>AGENT: 加载会话历史
AGENT->>AGENT: 构建系统提示
AGENT->>PROVIDER: 发起 LLM 调用
alt 需要工具调用
PROVIDER-->>AGENT: 返回 tool_calls
AGENT->>TOOLS: 执行工具
TOOLS-->>AGENT: 返回工具结果
AGENT->>PROVIDER: 继续调用 (with tool results)
end
PROVIDER-->>AGENT: 返回完整响应
AGENT->>AGENT: 更新会话历史
AGENT-->>GATEWAY: 返回响应 (events: agent)
GATEWAY->>CH: 发送消息 (channel.message.send)
CH->>USER: 接收回复
%% 出站消息流 (CLI/Web/App 触发)
rect rgb(255, 255, 200)
Note over GATEWAY,USER: 出站消息流 (从客户端触发)
USER->>GATEWAY: 调用 gateway.send
GATEWAY->>ROUTER: 解析路由
ROUTER-->>GATEWAY: 返回匹配结果
GATEWAY->>CH: 发送消息
CH->>USER: 接收消息
end
```
---
## 4. 插件系统架构 Plugin System
```mermaid
graph TB
subgraph "插件 API Plugin SDK"
API[OpenClawPluginApi]
end
subgraph "插件运行时 Plugin Runtime"
RUNTIME[Plugin Runtime]
CONFIG_API[Config API<br/>loadConfig/writeConfigFile]
SYSTEM_API[System API<br/>enqueueSystemEvent]
MEDIA_API[Media API<br/>loadWebMedia/detectMime]
TTS_API[TTS API<br/>textToSpeechTelephony]
TOOLS_API[Tools API<br/>createMemoryGetTool]
CHANNEL_API[Channel API<br/>routing/network/session]
LOGGING_API[Logging API<br/>getChildLogger]
end
subgraph "注册接口 Registrations"
REG_TOOL[registerTool]
REG_HOOK[registerHook]
REG_HTTP[registerHttpRoute/registerHttpHandler]
REG_CHANNEL[registerChannel]
REG_GW_METHOD[registerGatewayMethod]
REG_CLI[registerCli]
REG_SERVICE[registerService]
REG_PROVIDER[registerProvider]
REG_CMD[registerCommand]
end
subgraph "钩子系统 Hook System"
H_BEFORE_AGENT[before_agent_start]
H_AFTER_AGENT[after_agent_start]
H_BEFORE_SEND[before_message_send]
H_AFTER_SEND[after_message_send]
H_RECEIVED[message_received]
H_TOOL[tool_called]
H_CONFIG[config_changed]
end
subgraph "插件类型 Plugin Types"
P_CHANNEL[Channel Plugin<br/>must implement ChannelPlugin]
P_MEMORY[Memory Plugin<br/>LanceDB/etc]
P_PROVIDER[Provider Plugin<br/>Custom AI API]
end
subgraph "插件生命周期 Plugin Lifecycle"
LOAD[loadPlugin]
VALIDATE[validateConfig]
REGISTER[register]
ACTIVATE[activate]
DISPOSE[dispose]
end
%% 连接关系
API --> RUNTIME
RUNTIME --> CONFIG_API
RUNTIME --> SYSTEM_API
RUNTIME --> MEDIA_API
RUNTIME --> TTS_API
RUNTIME --> TOOLS_API
RUNTIME --> CHANNEL_API
RUNTIME --> LOGGING_API
API --> REG_TOOL
API --> REG_HOOK
API --> REG_HTTP
API --> REG_CHANNEL
API --> REG_GW_METHOD
API --> REG_CLI
API --> REG_SERVICE
API --> REG_PROVIDER
API --> REG_CMD
REG_HOOK --> H_BEFORE_AGENT
REG_HOOK --> H_AFTER_AGENT
REG_HOOK --> H_BEFORE_SEND
REG_HOOK --> H_AFTER_SEND
REG_HOOK --> H_RECEIVED
REG_HOOK --> H_TOOL
REG_HOOK --> H_CONFIG
REG_CHANNEL --> P_CHANNEL
LOAD --> VALIDATE
VALIDATE --> REGISTER
REGISTER --> ACTIVATE
ACTIVATE --> DISPOSE
P_CHANNEL -.->|loose coupling| H_RECEIVED
P_CHANNEL -.->|loose coupling| H_BEFORE_SEND
style PluginSDK fill:#fff9c4
style PluginRuntime fill:#fff59d
style Registrations fill:#ffee58
style HookSystem fill:#fdd835
style PluginTypes fill:#fbc02d
style PluginLifecycle fill:#f9a825
```
---
## 5. 路与绑定系统 Routing & Bindings
```mermaid
graph TD
subgraph "路由输入 Route Input"
CFG[User Config<br/>bindings 数组]
IN_CHANNEL[channel<br/>消息来源]
IN_ACCOUNT[accountId<br/>账户 ID]
IN_PEER[peer<br/>用户/组 ID]
IN_GUILD[guildId<br/>Discord 服务器]
IN_TEAM[teamId<br/>Slack/Teams]
end
subgraph "路由匹配优先级 Matching Priority"
P1[1. peer<br/>具体用户/组]
P2[2. peer.parent<br/>线程继承]
P3[3. guildId<br/>Discord 服务器]
P4[4. teamId<br/>Slack/Teams]
P5[5. account<br/>非通配符账户]
P6[6. account<br/>通配符账户]
P7[7. default<br/>默认绑定]
end
subgraph "路由输出 Route Output"
AGENT_ID[agentId<br/>目标 Agent]
SESSION_KEY[sessionKey<br/>会话唯一标识]
MAIN_KEY[mainSessionKey<br/>主会话]
MATCHED_BY[matchedBy<br/>匹配方式]
end
subgraph "会话管理 Session Management"
SESSION_STORE[Session Store<br/>~/.openclaw/sessions/]
SESSION_FILE[.jsonl 文件<br/>role/content/timestamp]
HISTORY[上下文历史<br/>消息 turnover]
end
%% 连接关系
CFG -->|解析| P1
IN_CHANNEL -->|输入| P1
IN_ACCOUNT -->|输入| P1
IN_PEER -->|输入| P1
IN_GUILD -->|输入| P1
IN_TEAM -->|输入| P1
P1 -->|无匹配| P2
P2 -->|无匹配| P3
P3 -->|无匹配| P4
P4 -->|无匹配| P5
P5 -->|无匹配| P6
P6 -->|无匹配| P7
P1 -->|匹配| AGENT_ID
P2 -->|匹配| AGENT_ID
P3 -->|匹配| AGENT_ID
P4 -->|匹配| AGENT_ID
P5 -->|匹配| AGENT_ID
P6 -->|匹配| AGENT_ID
P7 -->|匹配| AGENT_ID
AGENT_ID -->|构建| SESSION_KEY
AGENT_ID -->|构建| MAIN_KEY
P1 -->|设置| MATCHED_BY
P2 -->|设置| MATCHED_BY
P3 -->|设置| MATCHED_BY
P4 -->|设置| MATCHED_BY
P5 -->|设置| MATCHED_BY
P6 -->|设置| MATCHED_BY
P7 -->|设置| MATCHED_BY
SESSION_KEY -->|读写| SESSION_STORE
MAIN_KEY -->|读写| SESSION_STORE
SESSION_STORE -->|包含| SESSION_FILE
SESSION_FILE -->|构建| HISTORY
style RouteInput fill:#e8f5e9
style MatchingPriority fill:#c8e6c9
style RouteOutput fill:#a5d6a7
style SessionManagement fill:#81c784
```
---
## 6. 媒体管道架构 Media Pipeline
```mermaid
graph LR
subgraph "入站 Inbound"
A[收到媒体] --> B[parse<br/>提取媒体]
B --> C[mime.ts<br/>检测 MIME]
C -->|magic number<br/>+ content type| MIME_TYPE{MIME 类型?}
MIME_TYPE -->|image| D[store.ts<br/>保存到磁盘]
MIME_TYPE -->|audio| D
MIME_TYPE -->|video| D
MIME_TYPE -->|unknown| DROP[丢弃/警告]
end
subgraph "存储 Storage"
D --> STORAGE[~/.openclaw/media/inbound/]
STORAGE --> FILES["{original}---{uuid}.ext"]
end
subgraph "处理 Processing (可选)"
FILES --> E[image_ops.ts<br/>image/image-ops.ts]
E -->|resizeToJpeg| RESIZED[调整大小的 JPEG]
end
subgraph "出站 Outbound"
OUT_REQ[出站请求] --> OUT_MIME[mime.ts<br/>检测 MIME]
OUT_MIME -->|需要处理?| OUT_PROC[image_ops/audio.ts]
OUT_MIME -->|不需要处理| OUT_STORE[store.ts<br/>保存到磁盘]
OUT_PROC --> OUT_STORE
OUT_STORE --> OUT_STORAGE[~/.openclaw/media/outbound/]
end
subgraph "服务服务 & Fetch"
STORAGE --> HOST[host.ts<br/>HTTP 服务]
OUT_STORAGE --> HOST
HOST -->|GET /media/*| CLIENT[客户端]
FETCH[fetch.ts<br/>远程获取] --> STORAGE
end
style Inbound fill:#e3f2fd
style Storage fill:#bbdefb
style Processing fill:#90caf9
style Outbound fill:#64b5f6
style ServeFetch fill:#42a5f5
```
---
## 7. Gateway 通信协议 Gateway Protocol
```mermaid
stateDiagram-v2
direction LR
%% 定义带有复杂描述的状态名规避连线上的解析Bug
state "Authenticated (已认证)" as Authenticated
state "Connected (已就绪)" as Connected
state "Requesting (请求中)" as Requesting
state "Streaming (流式传输中)" as Streaming
state "Waiting (异步等待中)" as Waiting
state "Error (发生错误)" as Error
state "Closed (连接关闭)" as Closed
[*] --> Disconnected
note right of Disconnected
未连接状态
end note
Disconnected --> Connecting: 客户端发起WS连接
%% 连线描述尽量保持简洁,避开特殊字符
Connecting --> Authenticated: req_connect_auth_ok
Connecting --> Closed: 认证失败
Connecting --> Closed: 非首帧为connect
Authenticated --> Connected: res_hello_ok
Connected --> Requesting: req_method
Connected --> Streaming: event_stream
Requesting --> Connected: res_ok_sync
Requesting --> Waiting: method_processing
Waiting --> Connected: res_ok
Waiting --> Error: res_error
Streaming --> Connected: stream_end
Streaming --> Streaming: stream_continue
Connected --> Closed: 客户端断开
Error --> Connected: error_recovery
Authenticated --> Closed: connection_close
Closed --> [*]
note right of Streaming
agent 事件流示例:
{
"type": "event",
"event": "agent",
"payload": {
"agentId": "xxx",
"runId": "yyy",
"status": "running"
}
}
end note
note right of Requesting
request 示例:
{
"type": "req",
"id": 1,
"method": "send",
"params": {
"channel": "whatsapp",
"target": "...",
"text": "..."
}
}
end note
```
---
## 8. 认证与配对流程 Authentication & Pairing
```mermaid
sequenceDiagram
participant DEV as 设备(Device)<br/>CLI/App/Node
participant WS as Gateway<br/>WebSocket Server
participant AUTH as Auth Module
participant PAIRING as Pairing Store
participant USER as 操作员
%% 首次连接 - 本地
rect rgb(200, 255, 200)
Note over DEV,USER: 场景:首次本地连接 (自动批准)
DEV->>WS: WS connect
WS->>AUTH: 生成 deviceIdentity
AUTH-->>WS: deviceIdentity (含 deviceID)
WS-->>DEV: res:connect + deviceIdentity
DEV->>WS: req:connect (带 deviceID)
WS->>AUTH: 验证 deviceID 是否本地
AUTH->>PAIRING: 检查 pairing 状态
PAIRING-->>AUTH: 新设备 (需要批准)
AUTH->>AUTH: 本地地址 -> 自动批准
AUTH->>PAIRING: 生成 deviceToken
AUTH-->>WS: 设备已批准
WS-->>DEV: res:hello-ok (带 deviceToken)
end
%% 首次连接 - 远程
rect rgb(255, 200, 200)
Note over DEV,USER: 场景:首次远程连接 (需要批准)
DEV->>WS: WS connect (via Tailscale/VPN)
WS->>AUTH: 生成 deviceIdentity (带 challenge)
AUTH-->>WS: deviceIdentity + challenge
WS-->>DEV: res:connect + deviceIdentity + challenge
DEV->>DEV: 签名 challenge
DEV->>WS: req:connect (带 deviceID + signature)
WS->>AUTH: 验证签名
AUTH->>PAIRING: 检查 pairing 状态
PAIRING-->>AUTH: 新设备,非本地
AUTH-->>USER: 通知等待批准
USER-->>AUTH: 批准设备
AUTH->>PAIRING: 生成并保存 deviceToken
AUTH-->>WS: 设备已批准
WS-->>DEV: res:hello-ok (带 deviceToken)
end
%% 后续连接
rect rgb(200, 200, 255)
Note over DEV,USER: 场景:后续连接
DEV->>WS: WS connect
DEV->>WS: req:connect (带 deviceID + deviceToken)
WS->>PAIRING: 验证 deviceToken
PAIRING-->>WS: Token 有效
WS-->>DEV: res:hello-ok
end
```
---
## 9. 完整组件关系图 Component Relationships
```mermaid
graph TB
%% CLI 层
CLI[openclaw CLI<br/>openclaw.mjs]
PROG[src/index.ts<br/>buildProgram]
CMDS[src/commands/]
CLI --> PROG
PROG --> CMD_DEPS[createDefaultDeps]
%% Gateway 层
GW_SERVER[src/gateway/server.impl.ts<br/>startGatewayServer]
GW_PROT[src/gateway/protocol/]
GW_METHODS[src/gateway/server-methods/]
GW_CHAN[src/gateway/server-channels.ts]
GW_SERVER --> GW_PROT
GW_SERVER --> GW_METHODS
GW_SERVER --> GW_CHAN
%% 通道层
CHAN_SYS[src/channels/]
PLUG_TYPES[src/channels/plugins/types.plugin.ts]
PLUG_ADAPTER[src/channels/plugins/types.adapters.ts]
WHAST[whatsapp.ts]
TELEG[telegram.ts]
DISC[discord.ts]
SLACK[slack.ts]
SIGNL[signal.ts]
IMMSG[imessage.ts]
CHAN_SYS --> PLUG_TYPES
CHAN_SYS --> PLUG_ADAPTER
CHAN_SYS --> WA
CHAN_SYS --> TG
CHAN_SYS --> DC
CHAN_SYS --> SL
CHAN_SYS --> SI
CHAN_SYS --> IM
GW_CHAN --> CHAN_SYS
%% Agent 层
AGENT_RT[src/agents/runtime.ts]
AGENT_TOOLS[src/agents/tools/]
ROUTER[src/routing/resolve-route.ts]
ROUTER --> AGENT_RT
AGENT_RT --> AGENT_TOOLS
GW_METHODS --> ROUTER
%% 配置层
CONFIG[src/config/]
ZOD_TYPES[src/config/zod-schema.*.ts]
CONFIG --> ZOD_TYPES
GW_SERVER --> CONFIG
ROUTER --> CONFIG
%% 媒体层
MEDIA[src/media/]
MIME[mime.ts]
STORE[store.ts]
FETCH[fetch.ts]
MEDIA --> MIME
MEDIA --> STORE
MEDIA --> FETCH
GW_METHODS --> MEDIA
%% 插件层
PLUG_SYS[src/plugins/]
PLUG_SDK[src/plugin-sdk/]
PLUG_SYS --> PLUG_SDK
GW_SERVER --> PLUG_SYS
%% 钩子
HOOKS[src/hooks/types.ts]
HOOKS --> AGENT_RT
PLUG_SDK --> HOOKS
%% 基础设施
INFRA[src/infra/]
PORTS[ports.ts]
LOGG[logging/]
INFRA --> PORTS
INFRA --> LOGG
GW_SERVER --> INFRA
style CLI fill:#e1f5fe
style GatewayServer fill:#bbdefb
style ChannelLayer fill:#90caf9
style AgentLayer fill:#64b5f6
style ConfigLayer fill:#42a5f5
style MediaLayer fill:#1e88e5
style PluginLayer fill:#0d47a1
```
---
## 附录:组件职责
| 组件 | 职责 |
| ------------------ | ---------------------------------------------- |
| **CLI** | 命令行界面,启动 gateway、发送消息、配置管理等 |
| **Gateway** | WebSocket 服务器,协议验证,事件广播,通道管理 |
| **Channels** | 消息平台适配器,入站/出站消息,状态管理 |
| **Routing** | 消息路由解析,绑定匹配,会话键构建 |
| **Agent Runtime** | AI Agent 执行,工具调用,会话管理 |
| **Media Pipeline** | 媒体上传、存储、处理、服务 |
| **Config System** | 配置加载、验证、迁移、监听 |
| **Plugin SDK** | 插件开发接口,运行时 API |
| **Hooks** | 生命周期钩子,插件扩展点 |
| **Infrastructure** | 端口管理、日志、诊断事件、SSRF 防护 |
---
**文档结束**