Parowanie należące do Gateway (Opcja B)
W parowaniu należącym do Gateway Gateway jest źródłem prawdy określającym, które węzły mają prawo dołączać. Interfejsy (aplikacja macOS, przyszli klienci) są jedynie frontendami, które zatwierdzają lub odrzucają oczekujące żądania. Ważne: Węzły WS używają parowania urządzenia (rolanode) podczas connect.
node.pair.* jest osobnym magazynem parowania i nie bramkuje uzgadniania WS.
Tylko klienci, którzy jawnie wywołują node.pair.*, korzystają z tego przepływu.
Pojęcia
- Oczekujące żądanie: węzeł poprosił o dołączenie; wymaga zatwierdzenia.
- Sparowany węzeł: zatwierdzony węzeł z wydanym tokenem uwierzytelniającym.
- Transport: punkt końcowy WS Gateway przekazuje żądania, ale nie decyduje o członkostwie. (Obsługa starszego mostu TCP jest przestarzała/usunięta).
Jak działa parowanie
- Węzeł łączy się z WS Gateway i żąda parowania.
- Gateway zapisuje oczekujące żądanie i emituje
node.pair.requested. - Zatwierdzasz lub odrzucasz żądanie (CLI lub UI).
- Po zatwierdzeniu Gateway wydaje nowy token (tokeny są rotowane przy ponownym parowaniu).
- Węzeł łączy się ponownie, używając tokenu, i jest teraz „sparowany”.
Przepływ CLI (przyjazny dla trybu bezgłowego)
nodes status pokazuje sparowane/połączone węzły oraz ich możliwości.
Powierzchnia API (protokół gateway)
Zdarzenia:node.pair.requested— emitowane, gdy tworzona jest nowa oczekująca prośba.node.pair.resolved— emitowane, gdy prośba zostaje zatwierdzona/odrzucona/wygasa.
node.pair.request— utworzenie lub ponowne użycie oczekującej prośby.node.pair.list— lista oczekujących + sparowanych węzłów.node.pair.approve— zatwierdzenie oczekującej prośby (wydaje token).node.pair.reject— odrzucenie oczekującej prośby.node.pair.verify— weryfikacja{ nodeId, token }.
node.pair.requestjest idempotentne na węzeł: powtarzane wywołania zwracają to samo oczekujące żądanie.- Zatwierdzenie zawsze generuje świeży token; żaden token nigdy nie jest zwracany z
node.pair.request. - Prośby mogą zawierać
silent: truejako wskazówkę dla przepływów autozatwierdzania.
Autozatwierdzanie (aplikacja macOS)
Aplikacja macOS może opcjonalnie spróbować cichego zatwierdzenia, gdy:- prośba jest oznaczona jako
silent, oraz - aplikacja może zweryfikować połączenie SSH z hostem gateway, używając tego samego użytkownika.
Przechowywanie (lokalne, prywatne)
Stan parowania jest przechowywany w katalogu stanu Gateway (domyślnie~/.openclaw):
~/.openclaw/nodes/paired.json~/.openclaw/nodes/pending.json
OPENCLAW_STATE_DIR, folder nodes/ przeniesie się wraz z nim.
Uwagi dotyczące bezpieczeństwa:
- Tokeny są sekretami; traktuj
paired.jsonjako wrażliwe. - Rotacja tokenu wymaga ponownego zatwierdzenia (lub usunięcia wpisu węzła).
Zachowanie transportu
- Transport jest bezstanowy; nie przechowuje członkostwa.
- Jeśli Gateway jest offline lub parowanie jest wyłączone, węzły nie mogą się parować.
- Jeśli Gateway działa w trybie zdalnym, parowanie nadal odbywa się względem magazynu zdalnego Gateway.