TypeBox est une bibliothèque de schémas conçue d’abord pour TypeScript. Nous l’utilisons pour définir le protocole WebSocket du Gateway (handshake, requête/réponse, événements serveur). Ces schémas alimentent la validation à l’exécution, l’export JSON Schema et la génération de code Swift pour l’application macOS. Une seule source de vérité ; tout le reste est généré. Si vous voulez le contexte de protocole de plus haut niveau, commencez par Architecture du Gateway.Documentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
Modèle mental (30 secondes)
Chaque message WS du Gateway est l’une de trois trames :- Requête :
{ type: "req", id, method, params } - Réponse :
{ type: "res", id, ok, payload | error } - Événement :
{ type: "event", event, payload, seq?, stateVersion? }
connect. Ensuite, les clients peuvent appeler
des méthodes (par exemple health, send, chat.send) et s’abonner à des événements (par exemple
presence, tick, agent).
Flux de connexion (minimal) :
| Catégorie | Exemples | Notes |
|---|---|---|
| Noyau | connect, health, status | connect doit être en premier |
| Messagerie | send, agent, agent.wait, system-event, logs.tail | les effets de bord nécessitent idempotencyKey |
| Chat | chat.history, chat.send, chat.abort | WebChat les utilise |
| Sessions | sessions.list, sessions.patch, sessions.delete | administration des sessions |
| Automatisation | wake, cron.list, cron.run, cron.runs | réveil + contrôle Cron |
| Nœuds | node.list, node.invoke, node.pair.* | WS du Gateway + actions de nœud |
| Événements | tick, presence, agent, chat, health, shutdown | push serveur |
src/gateway/server-methods-list.ts (listGatewayMethods, GATEWAY_EVENTS).
Où vivent les schémas
- Source :
src/gateway/protocol/schema.ts - Validateurs à l’exécution (AJV) :
src/gateway/protocol/index.ts - Registre annoncé des fonctionnalités/discovery :
src/gateway/server-methods-list.ts - Handshake serveur + dispatch des méthodes :
src/gateway/server.impl.ts - Client Node :
src/gateway/client.ts - JSON Schema généré :
dist/protocol.schema.json - Modèles Swift générés :
apps/macos/Sources/OpenClawProtocol/GatewayModels.swift
Pipeline actuel
pnpm protocol:gen- écrit le JSON Schema (draft-07) dans
dist/protocol.schema.json
- écrit le JSON Schema (draft-07) dans
pnpm protocol:gen:swift- génère les modèles Swift du Gateway
pnpm protocol:check- exécute les deux générateurs et vérifie que la sortie est validée dans le dépôt
Comment les schémas sont utilisés à l’exécution
- Côté serveur : chaque trame entrante est validée avec AJV. Le handshake n’accepte qu’une requête
connectdont les paramètres correspondent àConnectParams. - Côté client : le client JS valide les trames d’événement et de réponse avant de les utiliser.
- Discovery des fonctionnalités : le Gateway envoie une liste prudente
features.methodsetfeatures.eventsdanshello-okdepuislistGatewayMethods()etGATEWAY_EVENTS. - Cette liste de discovery n’est pas un dump généré de chaque helper appelable dans
coreGatewayHandlers; certains RPC helpers sont implémentés danssrc/gateway/server-methods/*.tssans être énumérés dans la liste de fonctionnalités annoncée.
Exemples de trames
Connect (premier message) :Client minimal (Node.js)
Plus petit flux utile : connexion + health.Exemple travaillé : ajouter une méthode de bout en bout
Exemple : ajouter une nouvelle requêtesystem.echo qui renvoie { ok: true, text }.
- Schéma (source de vérité)
src/gateway/protocol/schema.ts :
ProtocolSchemas et exportez les types :
- Validation
src/gateway/protocol/index.ts, exportez un validateur AJV :
- Comportement serveur
src/gateway/server-methods/system.ts :
src/gateway/server-methods.ts (qui fusionne déjà systemHandlers),
puis ajoutez "system.echo" à l’entrée listGatewayMethods dans
src/gateway/server-methods-list.ts.
Si la méthode est appelable par des clients opérateur ou nœud, classez-la aussi dans
src/gateway/method-scopes.ts afin que l’application des portées et l’annonce des fonctionnalités hello-ok restent alignées.
- Regénération
- Tests + docs
src/gateway/server.*.test.ts et mentionnez la méthode dans la documentation.
Comportement de la génération de code Swift
Le générateur Swift émet :- l’énumération
GatewayFrameavec les casreq,res,eventetunknown - des structs/énumérations de payload fortement typées
- les valeurs
ErrorCode,GATEWAY_PROTOCOL_VERSIONetGATEWAY_MIN_PROTOCOL_VERSION
Versionnement + compatibilité
PROTOCOL_VERSIONse trouve danssrc/gateway/protocol/version.ts.- Les clients envoient
minProtocol+maxProtocol; le serveur rejette les plages qui n’incluent pas son protocole actuel. - Les modèles Swift conservent les types de trame inconnus afin d’éviter de casser les anciens clients.
Motifs et conventions de schéma
- La plupart des objets utilisent
additionalProperties: falsepour des payloads stricts. NonEmptyStringest la valeur par défaut pour les ID et les noms de méthode/événement.- Le
GatewayFramede premier niveau utilise un discriminateur surtype. - Les méthodes avec effets de bord nécessitent généralement un
idempotencyKeydans les paramètres (exemple :send,poll,agent,chat.send). agentaccepteinternalEventsen option pour le contexte d’orchestration généré à l’exécution (par exemple la transmission de fin de tâche subagent/Cron) ; traitez cela comme une surface d’API interne.
JSON de schéma en direct
Le JSON Schema généré se trouve dans le dépôt àdist/protocol.schema.json. Le fichier brut publié est généralement disponible à l’adresse :
Quand vous modifiez des schémas
- Mettez à jour les schémas TypeBox.
- Enregistrez la méthode/l’événement dans
src/gateway/server-methods-list.ts. - Mettez à jour
src/gateway/method-scopes.tsquand le nouveau RPC nécessite une classification de portée opérateur ou nœud. - Exécutez
pnpm protocol:check. - Validez le schéma regénéré + les modèles Swift.