Bridge-Protokoll (Legacy-Knotentransport)
Warum es existierte
- Sicherheitsgrenze: Die Bridge stellt statt der vollständigen Gateway-API-Oberfläche eine kleine Allowlist bereit.
- Pairing + Knotenidentität: Die Zulassung von Knoten gehört dem Gateway und ist an ein Token pro Knoten gebunden.
- Discovery-UX: Knoten können Gateways über Bonjour im LAN erkennen oder sich direkt über ein Tailnet verbinden.
- Loopback-WS: Die vollständige WS-Control-Plane bleibt lokal, sofern sie nicht per SSH getunnelt wird.
Transport
- TCP, ein JSON-Objekt pro Zeile (JSONL).
- Optionales TLS (wenn
bridge.tls.enabledauf true gesetzt ist). - Der historische Standard-Listener-Port war
18790(aktuelle Builds starten keine TCP-Bridge).
bridgeTls=1 plus
bridgeTlsSha256 als nicht geheimen Hinweis. Beachten Sie, dass Bonjour-/mDNS-TXT-Datensätze nicht authentifiziert sind; Clients dürfen den beworbenen Fingerprint nicht als maßgeblichen Pin behandeln, ohne ausdrückliche Benutzerabsicht oder andere Verifikation außerhalb des Bandes.
Handshake + Pairing
- Der Client sendet
hellomit Knotenmetadaten + Token (falls bereits gepairt). - Wenn nicht gepairt, antwortet das Gateway mit
error(NOT_PAIRED/UNAUTHORIZED). - Der Client sendet
pair-request. - Das Gateway wartet auf Freigabe und sendet dann
pair-okundhello-ok.
hello-ok serverName zurück und konnte
canvasHostUrl enthalten.
Frames
Client → Gateway:req/res: Scoped Gateway RPC (chat, sessions, config, health, voicewake, skills.bins)event: Knotensignale (Sprachtranskript, Agentenanfrage, Chat-Abonnement, Exec-Lebenszyklus)
invoke/invoke-res: Knotenbefehle (canvas.*,camera.*,screen.record,location.get,sms.send)event: Chat-Updates für abonnierte Sitzungenping/pong: Keepalive
src/gateway/server-bridge.ts (entfernt).
Exec-Lebenszyklusereignisse
Knoten könnenexec.finished- oder exec.denied-Ereignisse ausgeben, um system.run-Aktivität sichtbar zu machen.
Diese werden im Gateway auf Systemereignisse abgebildet. (Legacy-Knoten können weiterhin exec.started ausgeben.)
Payload-Felder (alle optional, sofern nicht anders angegeben):
sessionKey(erforderlich): Agentensitzung, die das Systemereignis empfangen soll.runId: eindeutige Exec-ID zur Gruppierung.command: rohe oder formatierte Befehlszeichenfolge.exitCode,timedOut,success,output: Abschlussdetails (nur finished).reason: Grund für die Verweigerung (nur denied).
Historische Tailnet-Nutzung
- Die Bridge an eine Tailnet-IP binden:
bridge.bind: "tailnet"in~/.openclaw/openclaw.json(nur historisch;bridge.*ist nicht mehr gültig). - Clients verbinden sich über den MagicDNS-Namen oder die Tailnet-IP.
- Bonjour überschreitet keine Netzwerke; verwenden Sie bei Bedarf manuellen Host/Port oder Wide-Area DNS‑SD.