TypeBox 是 TypeScript 優先的結構描述函式庫。我們使用它來定義 Gateway WebSocket 協定(交握、請求/回應、伺服器事件)。這些結構描述會驅動 執行階段驗證、JSON Schema 匯出,以及 macOS 應用程式的 Swift 程式碼產生。單一真相來源;其他所有內容皆由此產生。 如果你想了解較高階的協定脈絡,請從 Gateway 架構開始。Documentation Index
Fetch the complete documentation index at: https://docs2.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
心智模型(30 秒)
每個 Gateway WS 訊息都是以下三種框架之一:- 請求:
{ type: "req", id, method, params } - 回應:
{ type: "res", id, ok, payload | error } - 事件:
{ type: "event", event, payload, seq?, stateVersion? }
connect 請求。之後,客戶端可以呼叫
方法(例如 health、send、chat.send)並訂閱事件(例如
presence、tick、agent)。
連線流程(最小版):
| 類別 | 範例 | 備註 |
|---|---|---|
| 核心 | connect、health、status | connect 必須最先執行 |
| 訊息 | send、agent、agent.wait、system-event、logs.tail | 有副作用的操作需要 idempotencyKey |
| 聊天 | chat.history、chat.send、chat.abort | WebChat 使用這些 |
| 工作階段 | sessions.list、sessions.patch、sessions.delete | 工作階段管理 |
| 自動化 | wake、cron.list、cron.run、cron.runs | 喚醒 + cron 控制 |
| 節點 | node.list、node.invoke、node.pair.* | Gateway WS + 節點動作 |
| 事件 | tick、presence、agent、chat、health、shutdown | 伺服器推送 |
src/gateway/server-methods-list.ts(listGatewayMethods、GATEWAY_EVENTS)。
結構描述所在位置
- 來源:
src/gateway/protocol/schema.ts - 執行階段驗證器(AJV):
src/gateway/protocol/index.ts - 已宣告功能/探索登錄:
src/gateway/server-methods-list.ts - 伺服器交握 + 方法分派:
src/gateway/server.impl.ts - Node 客戶端:
src/gateway/client.ts - 產生的 JSON Schema:
dist/protocol.schema.json - 產生的 Swift 模型:
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 模型
pnpm protocol:check- 執行兩個產生器並驗證輸出已提交
結構描述在執行階段的使用方式
- 伺服器端:每個傳入框架都會使用 AJV 驗證。交握只接受
params 符合
ConnectParams的connect請求。 - 客戶端:JS 客戶端會在使用事件與回應框架前先驗證它們。
- 功能探索:Gateway 會在
hello-ok中從listGatewayMethods()和GATEWAY_EVENTS傳送保守的features.methods與features.events清單。 - 該探索清單不是
coreGatewayHandlers中每個可呼叫 helper 的產生式傾印; 有些 helper RPC 實作於src/gateway/server-methods/*.ts,但未列舉在已宣告的 功能清單中。
範例框架
Connect(第一個訊息):最小客戶端(Node.js)
最小實用流程:connect + health。實作範例:端到端新增方法
範例:新增一個system.echo 請求,回傳 { ok: true, text }。
- 結構描述(真相來源)
src/gateway/protocol/schema.ts:
ProtocolSchemas 並匯出型別:
- 驗證
src/gateway/protocol/index.ts 中,匯出 AJV 驗證器:
- 伺服器行為
src/gateway/server-methods/system.ts 新增 handler:
src/gateway/server-methods.ts 中註冊它(已合併 systemHandlers),
然後將 "system.echo" 加入 src/gateway/server-methods-list.ts 中的
listGatewayMethods 輸入。
如果該方法可由操作者或節點客戶端呼叫,也要在
src/gateway/method-scopes.ts 中分類,使範圍強制執行與 hello-ok 功能宣告
保持一致。
- 重新產生
- 測試 + 文件
src/gateway/server.*.test.ts 新增伺服器測試,並在文件中註記該方法。
Swift 程式碼產生行為
Swift 產生器會輸出:- 含
req、res、event與unknowncase 的GatewayFrameenum - 強型別 payload struct/enum
ErrorCode值、GATEWAY_PROTOCOL_VERSION與GATEWAY_MIN_PROTOCOL_VERSION
版本控管 + 相容性
PROTOCOL_VERSION位於src/gateway/protocol/version.ts。- 客戶端傳送
minProtocol+maxProtocol;伺服器會拒絕不包含其目前協定版本的範圍。 - Swift 模型會保留未知框架類型,以避免破壞較舊客戶端。
結構描述模式與慣例
- 多數物件使用
additionalProperties: false來保持 payload 嚴格。 NonEmptyString是 ID 與方法/事件名稱的預設值。- 最上層的
GatewayFrame在type上使用鑑別器。 - 有副作用的方法通常要求 params 中包含
idempotencyKey(範例:send、poll、agent、chat.send)。 agent接受選用的internalEvents,用於執行階段產生的協調脈絡 (例如子代理/Cron 任務完成交接);請將此視為內部 API 介面。
即時結構描述 JSON
產生的 JSON Schema 位於 repo 的dist/protocol.schema.json。已發布的原始檔案通常可在以下位置取得:
變更結構描述時
- 更新 TypeBox 結構描述。
- 在
src/gateway/server-methods-list.ts中註冊方法/事件。 - 當新的 RPC 需要操作者或節點範圍分類時,更新
src/gateway/method-scopes.ts。 - 執行
pnpm protocol:check。 - 提交重新產生的 schema + Swift 模型。