Сопряжение, принадлежащее Gateway (вариант B)
При сопряжении, принадлежащем Gateway, Gateway является источником истины относительно того, каким узлам разрешено подключаться. UI (приложение для macOS, будущие клиенты) — это лишь фронтенды, которые одобряют или отклоняют ожидающие запросы. Важно: WS‑узлы используют сопряжение устройств (рольnode) во время connect.
node.pair.* — это отдельное хранилище сопряжений и оно не ограничивает WS‑рукопожатие.
Только клиенты, которые явно вызывают node.pair.*, используют этот процесс.
Основные понятия
- Pending request: узел запросил подключение; требуется одобрение.
- Paired node: одобренный узел с выданным токеном аутентификации.
- Transport: WS‑эндпоинт Gateway пересылает запросы, но не принимает решений о членстве. (Поддержка устаревшего TCP‑моста устарела/удалена.)
How pairing works
- Узел подключается к WS Gateway и запрашивает сопряжение.
- Gateway сохраняет pending request и генерирует
node.pair.requested. - Вы одобряете или отклоняете запрос (CLI или UI).
- При одобрении Gateway выдаёт новый токен (токены ротируются при повторном сопряжении).
- Узел переподключается с использованием токена и теперь считается «сопряжённым».
CLI workflow (headless friendly)
nodes status показывает сопряжённые/подключённые узлы и их возможности.
API surface (gateway protocol)
Events:node.pair.requested— генерируется при создании нового ожидающего запроса.node.pair.resolved— генерируется при одобрении/отклонении/истечении запроса.
node.pair.request— создать или повторно использовать ожидающий запрос.node.pair.list— вывести список ожидающих + сопряжённых узлов.node.pair.approve— одобрить ожидающий запрос (выдаёт токен).node.pair.reject— отклонить ожидающий запрос.node.pair.verify— проверить{ nodeId, token }.
node.pair.requestявляется идемпотентным для каждого узла: повторные вызовы возвращают один и тот же ожидающий запрос.- Одобрение всегда генерирует новый токен; токен никогда не возвращается из
node.pair.request. - Запросы могут включать
silent: trueкак подсказку для автоматических процессов одобрения.
Auto-approval (macOS app)
Приложение для macOS может при необходимости попытаться выполнить тихое одобрение, когда:- запрос помечен как
silent, и - приложение может проверить SSH‑подключение к хосту шлюза Gateway с использованием того же пользователя.
Storage (local, private)
Состояние сопряжения хранится в каталоге состояния Gateway (по умолчанию~/.openclaw):
~/.openclaw/nodes/paired.json~/.openclaw/nodes/pending.json
OPENCLAW_STATE_DIR, папка nodes/ перемещается вместе с ним.
Примечания по безопасности:
- Токены являются секретами; рассматривайте
paired.jsonкак чувствительные данные. - Ротация токена требует повторного одобрения (или удаления записи узла).
Transport behavior
- Транспорт является статeless; он не хранит сведения о членстве.
- Если Gateway офлайн или сопряжение отключено, узлы не могут выполнить сопряжение.
- Если Gateway работает в удалённом режиме, сопряжение всё равно происходит с хранилищем удалённого Gateway.