Appariement détenu par la Gateway (Option B)
Dans l’appariement détenu par la Gateway, la Gateway est la source de vérité concernant les nœuds autorisés à rejoindre. Les interfaces (application macOS, futurs clients) ne sont que des frontends qui approuvent ou rejettent les demandes en attente. Important : les nœuds WS utilisent l’appariement de l’appareil (rôlenode) pendant connect.
node.pair.* est un magasin d’appariement distinct et ne contrôle pas l’établissement de la connexion WS.
Seuls les clients qui appellent explicitement node.pair.* utilisent ce flux.
Concepts
- Demande en attente : un nœud a demandé à rejoindre ; une approbation est requise.
- Nœud apparié : nœud approuvé avec un jeton d’authentification émis.
- Transport : le point de terminaison WS de la Gateway relaie les requêtes mais ne décide pas de l’appartenance. (La prise en charge héritée du pont TCP est obsolète/supprimée.)
Comment fonctionne le jumelage
- Un nœud se connecte au WS de la Gateway et demande l’appariement.
- La Gateway enregistre une demande en attente et émet
node.pair.requested. - Vous approuvez ou rejetez la demande (CLI ou UI).
- En cas d’approbation, la Gateway émet un nouveau jeton (les jetons sont renouvelés lors d’un ré‑appariement).
- Le nœud se reconnecte en utilisant le jeton et est désormais « apparié ».
Flux CLI (adapté au headless)
nodes status affiche les nœuds appariés/connectés et leurs capacités.
Surface API (protocole de la Gateway)
Événements :node.pair.requested— émis lorsqu’une nouvelle demande en attente est créée.node.pair.resolved— émis lorsqu’une demande est approuvée/rejetée/expirée.
node.pair.request— créer ou réutiliser une demande en attente.node.pair.list— lister les nœuds en attente + appariés.node.pair.approve— approuver une demande en attente (émet un jeton).node.pair.reject— rejeter une demande en attente.node.pair.verify— vérifier{ nodeId, token }.
node.pair.requestest idempotent par nœud : les appels répétés renvoient la même demande en attente.- L’approbation génère toujours un jeton neuf ; aucun jeton n’est jamais renvoyé par
node.pair.request. - Les demandes peuvent inclure
silent: truecomme indication pour des flux d’auto‑approbation.
Auto‑approbation (application macOS)
L’application macOS peut, de manière optionnelle, tenter une approbation silencieuse lorsque :- la demande est marquée
silent, et - l’application peut vérifier une connexion SSH à l’hôte de la Gateway en utilisant le même utilisateur.
Stockage (local, privé)
L’état d’appariement est stocké sous le répertoire d’état de la Gateway (par défaut~/.openclaw) :
~/.openclaw/nodes/paired.json~/.openclaw/nodes/pending.json
OPENCLAW_STATE_DIR, le dossier nodes/ se déplace avec celui‑ci.
Notes de sécurité :
- Les jetons sont des secrets ; traitez
paired.jsoncomme sensible. - La rotation d’un jeton nécessite une ré‑approbation (ou la suppression de l’entrée du nœud).
Comportement du transport
- Le transport est sans état ; il ne stocke pas l’appartenance.
- Si la Gateway est hors ligne ou si l’appariement est désactivé, les nœuds ne peuvent pas s’apparier.
- Si la Gateway est en mode distant, l’appariement s’effectue toujours par rapport au magasin de la Gateway distante.