メンタルモデル (30秒)
すべての Gateway WS メッセージは、次の 3 つのフレームの 1 つです。- リクエスト:
{ 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、poll、agent、agent.wait | 副作用には idempotencyKey が必要です。 | |
| チャット | chat.history、chat.send、chat.abort、chat.inject | WebChat はこれらを使用します。 | |
| セッション | sessions.list、sessions.patch、sessions.delete | セッション管理者 | |
| ノード | node.list、node.invoke、node.pair.* | ゲートウェイ WS + ノード アクション | |
| イベント | tick、presence、agent、chat、health、shutdown | サーバープッシュ |
src/gateway/server.ts (METHODS、EVENTS) にあります。
スキーマが存在する場所
-
出典:
src/gateway/protocol/schema.ts -
ランタイムバリデータ (AJV):
src/gateway/protocol/index.ts -
サーバー ハンドシェイク + メソッド ディスパッチ:
src/gateway/server.ts -
ノードクライアント:
src/gateway/client.ts -
生成された JSON スキーマ:
dist/protocol.schema.json -
生成された Swift モデル:
apps/macos/Sources/OpenClawProtocol/GatewayModels.swift## 現在のパイプライン -
pnpm protocol:gen- JSON スキーマ (ドラフト‑07) を
dist/protocol.schema.jsonに書き込みます
- JSON スキーマ (ドラフト‑07) を
-
pnpm protocol:gen:swift- Swift ゲートウェイ モデルを生成します
-
pnpm protocol:check- 両方のジェネレーターを実行し、出力がコミットされていることを確認します
実行時にスキーマがどのように使用されるか
- サーバー側: すべての受信フレームが AJV で検証されます。握手のみ
パラメータが
ConnectParamsと一致するconnectリクエストを受け入れます。 - クライアント側: JS クライアントはイベントと応答フレームを検証する前に それらを使って。
- メソッド サーフェス: ゲートウェイはサポートされている
methodsとeventsのhello-ok。
フレームの例
接続 (最初のメッセージ):最小限のクライアント (Node.js)
最小の有用なフロー: 接続 + 健康。成功した例: メソッドをエンドツーエンドで追加します
例:{ ok: true, text } を返す新しい system.echo リクエストを追加します。
- スキーマ (信頼できる情報源)
src/gateway/protocol/schema.ts に追加:
ProtocolSchemas に追加し、タイプをエクスポートします。
- 検証
src/gateway/protocol/index.ts で、AJV バリデーターをエクスポートします。
- サーバーの動作
src/gateway/server-methods/system.ts にハンドラーを追加します。
- テスト + ドキュメント
src/gateway/server.*.test.ts にサーバー テストを追加し、その方法をドキュメントに記載します。
Swift コード生成の動作
Swift ジェネレーターは次のものを出力します。req、res、event、およびunknownの場合のGatewayFrame列挙型- 厳密に型指定されたペイロード構造体/列挙型
ErrorCode値とGATEWAY_PROTOCOL_VERSION
バージョン管理 + 互換性
PROTOCOL_VERSIONはsrc/gateway/protocol/schema.tsに住んでいます。- クライアントは
minProtocol+maxProtocolを送信します。サーバーは不一致を拒否します。 - Swift モデルは、古いクライアントの破損を避けるために不明なフレーム タイプを保持します。
スキーマのパターンと規則- ほとんどのオブジェクトは、厳密なペイロードに additionalProperties: false を使用します
NonEmptyStringは、ID およびメソッド/イベント名のデフォルトです。- トップレベルの
GatewayFrameは、typeの 識別子 を使用します。 - 副作用のあるメソッドには通常、params に
idempotencyKeyが必要です (例:send、poll、agent、chat.send)。 agentは、ランタイムで生成されたオーケストレーション コンテキストのオプションのinternalEventsを受け入れます (例: サブエージェント/cron タスク完了ハンドオフ);これを内部 API サーフェスとして扱います。
ライブスキーマ JSON
生成された JSON スキーマは、dist/protocol.schema.json のリポジトリにあります。の
公開された生のファイルは通常、次の場所で入手できます。
スキーマを変更する場合
- TypeBox スキーマを更新します。
pnpm protocol:checkを実行します。- 再生成されたスキーマ + Swift モデルをコミットします。