Mentaal model (30 seconden)
Elk Gateway WS-bericht is een van drie frames:- Verzoek:
{ type: "req", id, method, params } - Antwoord:
{ type: "res", id, ok, payload | error } - Gebeurtenis:
{ type: "event", event, payload, seq?, stateVersion? }
connect-verzoek zijn. Daarna roepen clients methoden aan (bijv. health, send, chat.send) en abonneren ze zich op gebeurtenissen (bijv. presence, tick, agent).
Verbindingsverloop (minimaal):
De gezaghebbende geadverteerde inventaris voor detectie bevindt zich in
src/gateway/server-methods-list.ts (listGatewayMethods, GATEWAY_EVENTS).
Waar de schema’s zich bevinden
- Bronbarrel:
packages/gateway-protocol/src/schema.tsexporteert domeinmodules onderpackages/gateway-protocol/src/schema/*.tsopnieuw (frames.tsvoor de enveloppen en handshake op het hoogste niveau,agent.ts,sessions.ts,cron.ts, enzovoort per functiegebied).protocol-schemas.tsis het centraleProtocolSchemas-register dat schemanamen aan hun TypeBox-definities koppelt. - Runtimevalidators (AJV):
packages/gateway-protocol/src/index.ts - Geïntroduceerd functie-/detectieregister:
src/gateway/server-methods-list.ts - Serverhandshake en methodedispatch:
src/gateway/server.impl.ts - Node-client:
src/gateway/client.ts - Gegenereerd JSON Schema:
dist/protocol.schema.json(builduitvoer, niet gecommit) - Gegenereerde Swift-modellen:
apps/shared/OpenClawKit/Sources/OpenClawProtocol/GatewayModels.swift
Huidige pijplijn
pnpm protocol:genschrijft JSON Schema (draft-07) naardist/protocol.schema.json.pnpm protocol:gen:swiftgenereert de Swift Gateway-modellen.pnpm protocol:checkvoert beide generatoren uit en verifieert dat de Swift-uitvoer is gecommit (de JSON Schema-uitvoer is een door Git genegeerd buildartefact).
Hoe de schema’s tijdens runtime worden gebruikt
- Serverzijde: elk binnenkomend frame wordt met AJV gevalideerd. De handshake accepteert alleen een
connect-verzoek waarvan de parameters overeenkomen metConnectParams. - Clientzijde: de JS-client valideert gebeurtenis- en antwoordframes voordat deze worden gebruikt.
- Functiedetectie: de Gateway verzendt in
hello-okeen conservatieve lijst metfeatures.methodsenfeatures.events, afkomstig uitlistGatewayMethods()enGATEWAY_EVENTS. - Die detectielijst is geen gegenereerde dump van elke aanroepbare helper in
coreGatewayHandlers; sommige helper-RPC’s zijn geïmplementeerd insrc/gateway/server-methods/*.tszonder dat ze in de geadverteerde functielijst zijn opgenomen.
Voorbeeldframes
Verbinden (eerste bericht):Minimale client (Node.js)
Kleinste bruikbare verloop: verbinden + statuscontrole.Uitgewerkt voorbeeld: een methode van begin tot eind toevoegen
Voorbeeld: voeg een nieuwsystem.echo-verzoek toe dat { ok: true, text } retourneert.
- Schema (gezaghebbende bron)
packages/gateway-protocol/src/schema/system.ts (of de best passende functiemodule):
packages/gateway-protocol/src/schema/protocol-schemas.ts, voeg ze toe aan het ProtocolSchemas-register en exporteer de afgeleide typen:
- Validatie
packages/gateway-protocol/src/index.ts een AJV-validator:
- Servergedrag
src/gateway/server-methods/system.ts:
src/gateway/server-methods.ts (voegt systemHandlers al samen) en voeg vervolgens "system.echo" toe aan de listGatewayMethods-invoer in src/gateway/server-methods-list.ts.
Als de methode door operator- of node-clients kan worden aangeroepen, classificeer je deze ook in src/gateway/method-scopes.ts, zodat scopehandhaving en hello-ok-functieadvertenties op elkaar afgestemd blijven.
- Opnieuw genereren
- Tests en documentatie
src/gateway/server.*.test.ts en vermeld de methode in de documentatie.
Gedrag van Swift-codegeneratie
De Swift-generator produceert:- een
GatewayFrame-enum met de casesreq,res,eventenunknown - sterk getypeerde payloadstructs/-enums
ErrorCode-waarden,GATEWAY_PROTOCOL_VERSIONenGATEWAY_MIN_PROTOCOL_VERSION
Versiebeheer en compatibiliteit
PROTOCOL_VERSIONbevindt zich inpackages/gateway-protocol/src/version.ts(huidige waarde:4).- Clients verzenden
minProtocolenmaxProtocol; de server weigert bereiken die het huidige protocol niet omvatten. - De Swift-modellen behouden onbekende frametypen om te voorkomen dat oudere clients niet meer werken.
Schemapatronen en conventies
- De meeste objecten gebruiken
additionalProperties: falsevoor strikte payloads. NonEmptyString(Type.String({ minLength: 1 })) is de standaard voor ID’s en namen van methoden/gebeurtenissen.- De
GatewayFrameop het hoogste niveau gebruikt een discriminator optype. - Methoden met neveneffecten vereisen doorgaans een
idempotencyKeyin de parameters (voorbeeld:send,poll,agent,chat.send). agentaccepteert een optioneleinternalEventsvoor tijdens runtime gegenereerde orkestratiecontext (bijvoorbeeld overdracht na voltooiing van een subagent-/cron-taak); behandel dit als een intern API-oppervlak.
Live schema-JSON
Het gegenereerde JSON Schema is een buildartefact en wordt niet in de repository gecommit. Het gepubliceerde onbewerkte bestand is doorgaans beschikbaar op:Wanneer je schema’s wijzigt
- Werk de TypeBox-schema’s bij in de verantwoordelijke
packages/gateway-protocol/src/schema/*.ts-module en registreer ze inprotocol-schemas.ts. - Registreer de methode/gebeurtenis in
src/gateway/server-methods-list.ts. - Werk
src/gateway/method-scopes.tsbij wanneer de nieuwe RPC een scopeclassificatie voor operators of nodes nodig heeft. - Voer
pnpm protocol:checkuit. - Commit de opnieuw gegenereerde Swift-modellen.