Gateway
Brugprotocol
Waarom het bestond
- Beveiligingsgrens: de bridge stelt een kleine allowlist beschikbaar in plaats van het volledige gateway-API-oppervlak.
- Koppeling + node-identiteit: toelating van nodes is eigendom van de Gateway en gekoppeld aan een token per node.
- Discovery-UX: nodes kunnen gateways ontdekken via Bonjour op LAN, of rechtstreeks verbinden via een tailnet.
- Loopback-WS: het volledige WS-besturingsvlak blijft lokaal tenzij het via SSH wordt getunneld.
Transport
- TCP, één JSON-object per regel (JSONL).
- Optionele TLS (wanneer
bridge.tls.enabledtrue is). - De historische standaardlistenerpoort was
18790(huidige builds starten geen TCP-bridge).
Wanneer TLS is ingeschakeld, bevatten discovery-TXT-records bridgeTls=1 plus
bridgeTlsSha256 als niet-geheim aanknopingspunt. Let erop dat Bonjour/mDNS-TXT-records
niet geauthenticeerd zijn; clients mogen de geadverteerde fingerprint niet behandelen als een
gezaghebbende pin zonder expliciete gebruikersintentie of andere out-of-band-verificatie.
Handshake + koppeling
- Client verzendt
hellomet nodemetadata + token (als deze al gekoppeld is). - Als deze niet gekoppeld is, antwoordt de Gateway met
error(NOT_PAIRED/UNAUTHORIZED). - Client verzendt
pair-request. - Gateway wacht op goedkeuring en verzendt daarna
pair-okenhello-ok.
Historisch retourneerde hello-ok serverName; gehoste Plugin-oppervlakken worden nu
geadverteerd via pluginSurfaceUrls. Canvas/A2UI gebruikt
pluginSurfaceUrls.canvas; de verouderde alias canvasHostUrl maakt geen deel uit van
het gerefactorde protocol.
Frames
Client → Gateway:
req/res: scoped Gateway-RPC (chat, sessions, config, health, voicewake, skills.bins)event: nodesignalen (spraaktranscript, agentaanvraag, chatabonnement, exec-levenscyclus)
Gateway → Client:
invoke/invoke-res: node-opdrachten (canvas.*,camera.*,screen.record,location.get,sms.send)event: chatupdates voor geabonneerde sessiesping/pong: keepalive
Legacy-allowlistafdwinging stond in src/gateway/server-bridge.ts (verwijderd).
Exec-levenscyclusgebeurtenissen
Nodes kunnen exec.finished- of exec.denied-gebeurtenissen uitzenden om system.run-activiteit zichtbaar te maken.
Deze worden in de Gateway naar systeemgebeurtenissen gemapt. (Legacy-nodes kunnen nog steeds exec.started uitzenden.)
Payloadvelden (allemaal optioneel tenzij vermeld):
sessionKey(vereist): agentsessie die de systeemgebeurtenis moet ontvangen.runId: unieke exec-id voor groepering.command: ruwe of geformatteerde opdrachtreeks.exitCode,timedOut,success,output: voltooiingsdetails (alleen finished).reason: reden voor weigering (alleen denied).
Historisch tailnet-gebruik
- Bind de bridge aan een tailnet-IP:
bridge.bind: "tailnet"in~/.openclaw/openclaw.json(alleen historisch;bridge.*is niet langer geldig). - Clients verbinden via MagicDNS-naam of tailnet-IP.
- Bonjour werkt niet over netwerken heen; gebruik indien nodig handmatige host/poort of wide-area DNS-SD.
Versiebeheer
De bridge was impliciet v1 (geen min/max-onderhandeling). Deze sectie is alleen historische referentie; huidige node/operator-clients gebruiken het WebSocket- Gateway-protocol.