TypeBox 作为 protocol 真相来源
最后更新: 2026-01-10 TypeBox 是 TypeScript 优先的 schema 库。我们使用它定义 Gateway WebSocket protocol(握手、request/response、server events)。这些 schemas 驱动 runtime 验证、JSON Schema 导出 和 macOS app 的 Swift codegen。一个真相来源;其他一切都是生成的。 如果你想要更高层次的 protocol context,请从 Gateway architecture 开始。心智模型(30 秒)
每个 Gateway WS 消息都是三种帧之一:- Request:
{ type: "req", id, method, params } - Response:
{ type: "res", id, ok, payload | error } - Event:
{ type: "event", event, payload, seq?, stateVersion? }
connect request。之后,clients 可以调用 methods(例如 health、send、chat.send)并订阅 events(例如 presence、tick、agent)。
连接流程(最小):
| 类别 | 示例 | 注意 |
|---|---|---|
| Core | connect, health, status | connect 必须是第一个 |
| Messaging | send, poll, agent, agent.wait | 副作用需要 idempotencyKey |
| Chat | chat.history, chat.send, chat.abort, chat.inject | WebChat 使用这些 |
| Sessions | sessions.list, sessions.patch, sessions.delete | session admin |
| Nodes | node.list, node.invoke, node.pair.* | Gateway WS + node actions |
| Events | tick, presence, agent, chat, health, shutdown | server push |
src/gateway/server.ts (METHODS, EVENTS)。
Schemas 位于何处
- 源:
src/gateway/protocol/schema.ts - Runtime validators (AJV):
src/gateway/protocol/index.ts - Server handshake + method dispatch:
src/gateway/server.ts - Node client:
src/gateway/client.ts - 生成的 JSON Schema:
dist/protocol.schema.json - 生成的 Swift models:
apps/macos/Sources/OpenClawProtocol/GatewayModels.swift
当前管道
pnpm protocol:gen- 将 JSON Schema (draft‑07) 写入
dist/protocol.schema.json
- 将 JSON Schema (draft‑07) 写入
pnpm protocol:gen:swift- 生成 Swift gateway models
pnpm protocol:check- 运行两个生成器并验证输出已提交
Schemas 在 runtime 如何使用
- Server side: 每个入站帧都用 AJV 验证。握手仅接受其参数匹配
ConnectParams的connectrequest。 - Client side: JS client 在使用之前验证 event 和 response 帧。
- Method surface: Gateway 在
hello-ok中公布支持的methods和events。
示例帧
Connect (第一条消息):最小 client (Node.js)
最小有用流程:connect + health。工作示例:端到端添加 method
示例:添加返回{ ok: true, text } 的新 system.echo request。
- Schema (真相来源)
src/gateway/protocol/schema.ts:
ProtocolSchemas 并导出类型:
- 验证
src/gateway/protocol/index.ts 中,导出 AJV validator:
- Server 行为
src/gateway/server-methods/system.ts 中添加 handler:
src/gateway/server-methods.ts 中注册它(已合并 systemHandlers),然后将 "system.echo" 添加到 src/gateway/server.ts 中的 METHODS。
- 重新生成
- Tests + docs
src/gateway/server.*.test.ts 中添加 server 测试,并在文档中注释该 method。
Swift codegen 行为
Swift 生成器发出:- 带有
req、res、event和unknowncases 的GatewayFrameenum - 强类型 payload structs/enums
ErrorCode值和GATEWAY_PROTOCOL_VERSION
版本控制 + 兼容性
PROTOCOL_VERSION位于src/gateway/protocol/schema.ts。- Clients 发送
minProtocol+maxProtocol;server 拒绝不匹配。 - Swift models 保留未知帧类型以避免破坏较旧的 clients。
Schema 模式和约定
- 大多数对象使用
additionalProperties: false以获得严格的 payloads。 NonEmptyString是 IDs 和 method/event 名称的默认值。- 顶级
GatewayFrame在type上使用 discriminator。 - 具有副作用的 Methods 通常需要参数中的
idempotencyKey(例如:send、poll、agent、chat.send)。
实时 schema JSON
生成的 JSON Schema 位于 repo 的dist/protocol.schema.json。发布的原始文件通常可从以下位置获得:
当你更改 schemas 时
- 更新 TypeBox schemas。
- 运行
pnpm protocol:check。 - 提交重新生成的 schema + Swift models。