Gateway-eigenes Pairing (Option B)
Beim Gateway-eigenen Pairing ist das Gateway die maßgebliche Instanz dafür, welche Nodes beitreten dürfen. UIs (macOS-App, zukünftige Clients) sind lediglich Frontends, die ausstehende Anfragen genehmigen oder ablehnen. Wichtig: WS-Nodes verwenden Geräte-Pairing (Rollenode) während connect.
node.pair.* ist ein separater Pairing-Speicher und steuert den WS-Handshake nicht.
Nur Clients, die explizit node.pair.* aufrufen, nutzen diesen Flow.
Konzepte
- Ausstehende Anfrage: Eine Node hat um Beitritt gebeten; Genehmigung erforderlich.
- Gepaarte Node: Genehmigte Node mit ausgegebenem Auth-Token.
- Transport: Der Gateway-WS-Endpunkt leitet Anfragen weiter, entscheidet aber nicht über die Mitgliedschaft. (Legacy-TCP-Bridge-Unterstützung ist veraltet/entfernt.)
Wie Pairing funktioniert
- Eine Node verbindet sich mit dem Gateway-WS und fordert Pairing an.
- Das Gateway speichert eine ausstehende Anfrage und sendet
node.pair.requested. - Sie genehmigen oder lehnen die Anfrage ab (CLI oder UI).
- Bei Genehmigung stellt das Gateway ein neues Token aus (Tokens werden beim erneuten Pairing rotiert).
- Die Node verbindet sich erneut mit dem Token und ist nun „gepaart“.
CLI-Workflow (headless-freundlich)
nodes status zeigt gepaarte/verbundene Nodes und deren Fähigkeiten an.
API-Oberfläche (Gateway-Protokoll)
Events:node.pair.requested— wird ausgelöst, wenn eine neue ausstehende Anfrage erstellt wird.node.pair.resolved— wird ausgelöst, wenn eine Anfrage genehmigt/abgelehnt/abgelaufen ist.
node.pair.request— erstellt oder verwendet eine ausstehende Anfrage erneut.node.pair.list— listet ausstehende + gepaarte Nodes auf.node.pair.approve— genehmigt eine ausstehende Anfrage (stellt Token aus).node.pair.reject— lehnt eine ausstehende Anfrage ab.node.pair.verify— überprüft{ nodeId, token }.
node.pair.requestist pro Node idempotent: Wiederholte Aufrufe geben dieselbe ausstehende Anfrage zurück.- Die Genehmigung erzeugt immer ein neues Token; von
node.pair.requestwird niemals ein Token zurückgegeben. - Anfragen können
silent: trueals Hinweis für Auto-Genehmigungs-Flows enthalten.
Auto-Genehmigung (macOS-App)
Die macOS-App kann optional eine stille Genehmigung versuchen, wenn:- die Anfrage als
silentmarkiert ist und - die App eine SSH-Verbindung zum Gateway-Host mit demselben Benutzer verifizieren kann.
Speicherung (lokal, privat)
Der Pairing-Status wird unter dem Gateway-State-Verzeichnis gespeichert (Standard~/.openclaw):
~/.openclaw/nodes/paired.json~/.openclaw/nodes/pending.json
OPENCLAW_STATE_DIR überschreiben, wird der Ordner nodes/ entsprechend mitverschoben.
Sicherheitshinweise:
- Tokens sind Geheimnisse; behandeln Sie
paired.jsonals sensibel. - Das Rotieren eines Tokens erfordert eine erneute Genehmigung (oder das Löschen des Node-Eintrags).
Transportverhalten
- Der Transport ist zustandslos; er speichert keine Mitgliedschaften.
- Wenn das Gateway offline ist oder Pairing deaktiviert ist, können Nodes kein Pairing durchführen.
- Befindet sich das Gateway im Remote-Modus, erfolgt das Pairing weiterhin gegen den Store des entfernten Gateways.