Protokół Bridge (transport węzłów legacy)
Protokół Bridge to legacy transport węzłów (TCP JSONL). Nowe klienty węzłów powinny zamiast tego używać ujednoliconego protokołu WebSocket Gateway. Jeśli tworzysz operatora lub klienta węzła, użyj protokołu Gateway. Uwaga: Aktualne kompilacje OpenClaw nie dostarczają już nasłuchu mostu TCP; ten dokument jest zachowany wyłącznie w celach historycznych. Legacy klucze konfiguracyjnebridge.* nie są już częścią schematu konfiguracji.
Dlaczego mamy oba
- Granica bezpieczeństwa: most udostępnia niewielką listę dozwolonych zamiast pełnej powierzchni API gateway.
- Parowanie + tożsamość węzła: dopuszczanie węzłów jest zarządzane przez gateway i powiązane z tokenem per węzeł.
- UX wykrywania: węzły mogą wykrywać gatewaye przez Bonjour w LAN lub łączyć się bezpośrednio przez tailnet.
- WS na loopback: pełna płaszczyzna sterowania WS pozostaje lokalna, o ile nie jest tunelowana przez SSH.
Transport
- TCP, jeden obiekt JSON na linię (JSONL).
- Opcjonalny TLS (gdy
bridge.tls.enabledma wartość true). - Legacy domyślny port nasłuchu wynosił
18790(bieżące kompilacje nie uruchamiają mostu TCP).
bridgeTls=1 oraz
bridgeTlsSha256, aby węzły mogły przypiąć certyfikat. Należy pamiętać, że rekordy TXT Bonjour/mDNS są
nieuwierzytelnione; klienci nie mogą traktować reklamowanego odcisku palca jako
autorytatywnego pinu bez wyraźnej intencji użytkownika lub innej weryfikacji poza kanałem.
Uścisk dłoni + parowanie
- Klient wysyła
helloz metadanymi węzła + tokenem (jeśli jest już sparowany). - Jeśli nie jest sparowany, gateway odpowiada
error(NOT_PAIRED/UNAUTHORIZED). - Klient wysyła
pair-request. - Gateway czeka na zatwierdzenie, a następnie wysyła
pair-okorazhello-ok.
hello-ok zwraca serverName i może zawierać canvasHostUrl.
Ramki
Klient → Gateway:req/res: RPC gateway o ograniczonym zakresie (czat, sesje, konfiguracja, zdrowie, voicewake, skills.bins)event: sygnały węzła (transkrypcja głosu, żądanie agenta, subskrypcja czatu, cykl życia exec)
invoke/invoke-res: polecenia węzła (canvas.*,camera.*,screen.record,location.get,sms.send)event: aktualizacje czatu dla subskrybowanych sesjiping/pong: keepalive
src/gateway/server-bridge.ts (usunięte).
Zdarzenia cyklu życia exec
Węzły mogą emitować zdarzeniaexec.finished lub exec.denied, aby ujawnić aktywność system.run.
Są one mapowane na zdarzenia systemowe w gateway. (Węzły legacy mogą nadal emitować exec.started).
Pola ładunku (wszystkie opcjonalne, o ile nie zaznaczono inaczej):
sessionKey(wymagane): sesja agenta, która ma otrzymać zdarzenie systemowe.runId: unikalny identyfikator exec do grupowania.command: surowy lub sformatowany ciąg polecenia.exitCode,timedOut,success,output: szczegóły zakończenia (tylko zakończone).reason: powód odmowy (tylko odmówione).
Użycie tailnet
- Zwiąż most z adresem IP tailnet:
bridge.bind: "tailnet"w~/.openclaw/openclaw.json. - Klienci łączą się przez nazwę MagicDNS lub adres IP tailnet.
- Bonjour nie przekracza sieci; w razie potrzeby użyj ręcznego hosta/portu lub szerokoobszarowego DNS‑SD.