मानसिक मॉडल (30 सेकंड)
हर Gateway WS message इन तीन frames में से एक होता है:- 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) call कर सकते हैं और events (जैसे
presence, tick, agent) subscribe कर सकते हैं।
Connection flow (न्यूनतम):
| श्रेणी | उदाहरण | नोट्स |
|---|---|---|
| Core | connect, health, status | connect पहले होना चाहिए |
| Messaging | send, agent, agent.wait, system-event, logs.tail | side-effects को idempotencyKey चाहिए |
| Chat | chat.history, chat.send, chat.abort | WebChat इन्हें उपयोग करता है |
| Sessions | sessions.list, sessions.patch, sessions.delete | session admin |
| Automation | wake, cron.list, cron.run, cron.runs | wake + cron control |
| Nodes | node.list, node.invoke, node.pair.* | Gateway WS + node actions |
| Events | tick, presence, agent, chat, health, shutdown | server push |
src/gateway/server-methods-list.ts (listGatewayMethods, GATEWAY_EVENTS) में रहती है।
Schemas कहां रहते हैं
- Source:
packages/gateway-protocol/src/schema.ts - Runtime validators (AJV):
packages/gateway-protocol/src/index.ts - Advertised feature/discovery registry:
src/gateway/server-methods-list.ts - Server handshake + method dispatch:
src/gateway/server.impl.ts - Node client:
src/gateway/client.ts - Generated JSON Schema:
dist/protocol.schema.json - Generated Swift models:
apps/macos/Sources/OpenClawProtocol/GatewayModels.swift
मौजूदा pipeline
pnpm protocol:gen- JSON Schema (draft-07) को
dist/protocol.schema.jsonमें लिखता है
- JSON Schema (draft-07) को
pnpm protocol:gen:swift- Swift gateway models generate करता है
pnpm protocol:check- दोनों generators चलाता है और verify करता है कि output committed है
Runtime पर schemas का उपयोग कैसे होता है
- Server side: हर inbound frame AJV से validate किया जाता है। handshake केवल
वह
connectrequest accept करता है जिसके paramsConnectParamsसे match करते हैं। - Client side: JS client event और response frames को उपयोग करने से पहले validate करता है।
- Feature discovery: Gateway
listGatewayMethods()औरGATEWAY_EVENTSसेhello-okमें एक conservativefeatures.methodsऔरfeatures.eventslist भेजता है। - वह discovery list
coreGatewayHandlersमें मौजूद हर callable helper का generated dump नहीं है; कुछ helper RPCssrc/gateway/server-methods/*.tsमें implement होते हैं, बिना advertised feature list में enumerate हुए।
Example frames
Connect (पहला message):न्यूनतम client (Node.js)
सबसे छोटा उपयोगी flow: connect + health।Worked example: एक method end-to-end जोड़ें
Example: एक नयाsystem.echo request जोड़ें जो { ok: true, text } लौटाता है।
- Schema (सत्य का स्रोत)
packages/gateway-protocol/src/schema.ts में जोड़ें:
ProtocolSchemas में जोड़ें और types export करें:
- Validation
packages/gateway-protocol/src/index.ts में, एक AJV validator export करें:
- Server behavior
src/gateway/server-methods/system.ts में एक handler जोड़ें:
src/gateway/server-methods.ts में register करें (पहले से systemHandlers merge करता है),
फिर src/gateway/server-methods-list.ts में listGatewayMethods input में
"system.echo" जोड़ें।
यदि method operator या node clients द्वारा callable है, तो इसे
src/gateway/method-scopes.ts में भी classify करें ताकि scope enforcement और hello-ok feature
advertising aligned रहें।
- Regenerate
- Tests + docs
src/gateway/server.*.test.ts में एक server test जोड़ें और docs में method note करें।
Swift codegen behavior
Swift generator emit करता है:GatewayFrameenum, जिसमेंreq,res,event, औरunknowncases होते हैं- Strongly typed payload structs/enums
ErrorCodevalues,GATEWAY_PROTOCOL_VERSION, औरGATEWAY_MIN_PROTOCOL_VERSION
Versioning + compatibility
PROTOCOL_VERSIONpackages/gateway-protocol/src/version.tsमें रहता है।- Clients
minProtocol+maxProtocolभेजते हैं; server उन ranges को reject करता है जो उसके current protocol को include नहीं करते। - Swift models older clients को break करने से बचाने के लिए unknown frame types रखते हैं।
Schema patterns और conventions
- अधिकांश objects strict payloads के लिए
additionalProperties: falseउपयोग करते हैं। - IDs और method/event names के लिए
NonEmptyStringdefault है। - Top-level
GatewayFrametypeपर discriminator उपयोग करता है। - Side effects वाले methods को आमतौर पर params में
idempotencyKeyचाहिए होता है (example:send,poll,agent,chat.send)। agentruntime-generated orchestration context के लिए optionalinternalEventsaccept करता है (उदाहरण के लिए subagent/cron task completion handoff); इसे internal API surface मानें।
Live schema JSON
Generated JSON Schema repo मेंdist/protocol.schema.json पर है। Published raw file आमतौर पर यहां उपलब्ध होती है:
जब आप schemas बदलते हैं
- TypeBox schemas update करें।
- Method/event को
src/gateway/server-methods-list.tsमें register करें। - जब नए RPC को operator या node scope classification चाहिए हो, तो
src/gateway/method-scopes.tsupdate करें। pnpm protocol:checkचलाएं।- Regenerated schema + Swift models commit करें।