Gateway 组件深度分析
一、Gateway 的核心定位
Gateway 不仅仅是”转发器”,而是整个系统的”控制平面”(Control Plane)
你的理解”接收不同客户端,然后给到后端 Agent 执行”是对的,但这只是 Gateway 职责的一部分。Gateway 实际上承担了以下核心职责:
二、Gateway 的输入(Input)
1. HTTP 端点输入
a) Control UI(Web 管理界面)
数据格式:标准 HTTP 请求
来源:浏览器访问
b) OpenAI 兼容接口
数据格式:
来源:任何支持 OpenAI API 的客户端(Cursor、Continue、ChatGPT UI 等)
c) OpenResponses 接口
数据格式:
来源:支持 OpenResponses 协议的客户端
d) Hooks/Webhooks
数据格式:
来源:外部系统(GitHub Actions、CI/CD、定时任务等)
e) 渠道特定端点
来源:Slack、Discord 等平台的 Webhook
2. WebSocket 连接输入
a) Gateway Protocol(RPC 方法调用)
连接建立:
消息格式:
支持的方法(从 server-methods.ts 分析):
分类 | 方法 | 说明 |
Agent 相关 | agent.invoke | 调用 Agent |
ㅤ | agent.wait | 等待 Agent 完成 |
ㅤ | agents.list | 列出所有 Agent |
ㅤ | agent.identity.get | 获取 Agent 身份 |
Chat 相关 | chat.send | 发送聊天消息 |
ㅤ | chat.abort | 中止聊天 |
ㅤ | chat.history | 获取聊天历史 |
渠道相关 | channels.status | 获取渠道状态 |
ㅤ | send | 发送消息到渠道 |
配置相关 | config.get | 获取配置 |
ㅤ | config.set | 设置配置 |
ㅤ | config.patch | 部分更新配置 |
会话相关 | sessions.list | 列出会话 |
ㅤ | sessions.preview | 预览会话 |
设备相关 | node.invoke | 调用设备能力 |
ㅤ | node.list | 列出设备 |
ㅤ | node.pair.request | 设备配对请求 |
系统相关 | health | 健康检查 |
ㅤ | status | 系统状态 |
ㅤ | logs.tail | 日志尾随 |
Cron 相关 | cron.list | 列出定时任务 |
ㅤ | cron.create | 创建定时任务 |
技能相关 | skills.status | 技能状态 |
ㅤ | skills.bins | 技能二进制 |
审批相关 | exec.approval.request | 命令执行审批请求 |
ㅤ | exec.approval.resolve | 审批决策 |
来源:
- macOS/iOS/Android 客户端
- Web UI
- 第三方集成
3. 渠道消息输入
a) Telegram Bot
数据格式:Telegram Bot API 格式
b) Slack Bot
数据格式:Slack Events API 格式
c) 其他渠道
- Discord Bot
- Signal
- WhatsApp Web
- iMessage(通过 macOS 客户端)
三、Gateway 的处理流程
完整数据流
四、Gateway 的输出(Output)
1. HTTP 响应输出
a) JSON 响应
b) 流式响应(SSE)
2. WebSocket 消息输出
a) RPC 响应
b) 事件推送
c) 设备能力请求
3. 渠道消息输出
a) Telegram 消息
b) Slack 消息
五、关键组件详解
1. 路由解析器(Routing Resolver)
文件:
src/routing/resolve-route.ts功能:根据消息来源解析出对应的 Agent 和会话
输入:
输出:
匹配优先级:
1. Peer 绑定(最精确)
2. Guild/Team 绑定
3. Account 绑定
4. Channel 绑定
5. 默认 Agent
2. 方法处理器(Method Handlers)
文件:
src/gateway/server-methods.ts功能:处理 WebSocket RPC 方法调用
结构:
3. 权限控制(Authorization)
文件:
src/gateway/server-methods.ts角色:
-
operator:操作员(默认,Web UI/客户端)
- node:设备节点(macOS/iOS 客户端)
- device:设备(配对的设备)权限范围(Scopes):
-
operator.admin:管理员权限
- operator.read:只读权限
- operator.write:写入权限
- operator.approvals:审批权限
- operator.pairing:配对权限权限检查:
4. 渠道管理器(Channel Manager)
文件:
src/gateway/server-channels.ts功能:
- 启动和停止渠道连接
- 管理渠道状态
- 处理渠道消息
- 渠道健康检查
支持的渠道:
- Telegram
- Slack
- Discord
- Signal
- WhatsApp Web
- iMessage(通过 macOS 客户端)
- Web(内置 Web 渠道)
- 自定义渠道(通过插件)
5. 插件系统(Plugin System)
文件:
src/gateway/server-plugins.ts功能:
- 发现和加载插件
- 注册插件能力
- 管理插件生命周期
插件类型:
- 工具插件(Tools)
- 渠道插件(Channels)
- Hooks 插件
- HTTP 路由插件
- Gateway 方法插件
6. 会话管理器(Session Manager)
功能:
- 会话创建和恢复
- 会话持久化(文件系统)
- 会话历史管理
- 会话并发控制
会话 Key 格式:
示例:
7. 事件系统(Event System)
功能:
- 发布/订阅模式
- 实时事件推送
- 多端同步
事件类型:
-
agent.event:Agent 执行事件
- chat.message:聊天消息
- node.event:设备事件
- health.update:健康状态更新
- presence.update:在线状态更新六、典型处理流程示例
示例 1:用户在 Telegram 发消息
示例 2:macOS 客户端请求 Agent
示例 3:跨设备协作
七、Gateway 的关键特性
1. 多协议支持
- HTTP/HTTPS
- WebSocket
- SSE(Server-Sent Events)
- 各渠道的 Webhook
2. 统一路由
- 所有消息统一路由到 Agent
- 支持复杂的绑定规则
- 会话隔离和管理
3. 插件化扩展
- 工具插件
- 渠道插件
- Hooks 插件
- HTTP 路由插件
4. 安全控制
- 认证(Bearer Token、设备配对)
- 授权(角色和权限范围)
- 审批流程(敏感操作)
5. 高可用性
- 健康检查
- 自动重连
- 错误恢复
- 优雅关闭
6. 可观测性
- 结构化日志
- 使用量统计
- 性能监控
- 事件追踪
八、总结
Gateway 的本质
Gateway 是一个”智能路由器 + 控制平面 + 编排引擎”
- 智能路由器:
- 接收多种协议的输入
- 统一路由到正确的 Agent
- 分发结果到各个端点
- 控制平面:
- 管理所有渠道连接
- 管理所有设备节点
- 管理所有会话状态
- 编排引擎:
- 编排 Agent 执行
- 编排工具调用
- 编排设备能力请求
你的理解修正
原理解:“Gateway 接收不同客户端,然后给到后端 Agent 执行”
更准确的理解:
“Gateway 是整个系统的控制中心,它:
1. 接收来自多种来源的输入(客户端、渠道、Webhooks)
2. 进行认证、授权、路由解析
3. 调度 Agent 执行(包括模型选择、工具注册)
4. 协调设备能力请求(跨设备协作)
5. 管理会话状态和持久化
6. 分发结果到各个端点
7. 提供插件扩展能力
8. 监控系统健康状态”
类比:
- Gateway 不是简单的”转发器”
- 而是像”交通指挥中心 + 任务调度中心 + 资源管理中心”的综合体
Loading...
