Gateway
Brugprotocol
Waarom het bestond
- Beveiligingsgrens: de bridge stelt een kleine toestemmingslijst beschikbaar in plaats van het volledige Gateway-API-oppervlak.
- Koppeling + Node-identiteit: Node-toelating is eigendom van de Gateway en gekoppeld aan een token per Node.
- Ontdekkings-UX: Nodes kunnen Gateways ontdekken via Bonjour op LAN, of rechtstreeks verbinding maken 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.enabledwaar is). - De historische standaard luisterpoort was
18790(huidige builds starten geen TCP-bridge).
Wanneer TLS is ingeschakeld, bevatten discovery-TXT-records bridgeTls=1 plus
bridgeTlsSha256 als niet-geheime hint. Let op dat Bonjour/mDNS-TXT-records
niet geauthenticeerd zijn; clients mogen de geadverteerde vingerafdruk niet als
gezaghebbende pin behandelen zonder expliciete gebruikersintentie of andere out-of-band verificatie.
Handshake + koppeling
- Client stuurt
hellomet Node-metadata + token (als al gekoppeld). - Als er geen koppeling is, antwoordt de Gateway met
error(NOT_PAIRED/UNAUTHORIZED). - Client stuurt
pair-request. - Gateway wacht op goedkeuring en stuurt daarna
pair-okenhello-ok.
Historisch gaf hello-ok serverName terug; 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, sessies, configuratie, gezondheid, voicewake, skills.bins)event: Node-signalen (spraaktranscript, agentverzoek, chatabonnement, exec-levenscyclus)
Gateway → Client:
invoke/invoke-res: Node-commando's (canvas.*,camera.*,screen.record,location.get,sms.send)event: chatupdates voor geabonneerde sessiesping/pong: keepalive
Verouderde handhaving van de toestemmingslijst stond in src/gateway/server-bridge.ts (verwijderd).
Exec-levenscyclusgebeurtenissen
Nodes kunnen exec.finished-gebeurtenissen uitzenden om voltooide system.run-activiteit zichtbaar te maken.
Deze worden in de Gateway naar systeemgebeurtenissen gemapt. (Verouderde Nodes kunnen nog steeds exec.started uitzenden.)
Nodes kunnen exec.denied uitzenden voor geweigerde system.run-pogingen; de Gateway accepteert
de gebeurtenis als een terminale weigering en plaatst geen systeemgebeurtenis in de wachtrij en wekt geen agentwerk.
Payloadvelden (allemaal optioneel tenzij vermeld):
sessionKey(verplicht): agentsessie voor gebeurteniscorrelatie en, voorexec.finished, levering van systeemgebeurtenissen.runId: unieke exec-id voor groepering.command: ruwe of geformatteerde commandoreeks.exitCode,timedOut,success,output: voltooiingsdetails (alleen voltooid).reason: reden van weigering (alleen geweigerd).
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 maken verbinding via MagicDNS-naam of tailnet-IP.
- Bonjour werkt niet tussen netwerken; gebruik indien nodig een 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-/operatorclients gebruiken het WebSocket- Gateway Protocol.