Сопряжение, принадлежащее 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 выдаёт новый токен (токены ротируются при повторном сопряжении).
- Узел переподключается с использованием токена и теперь считается «сопряжённым».
Ожидающие запросы автоматически истекают через 5 минут.
CLI workflow (headless friendly)¶
openclaw nodes pending
openclaw nodes approve <requestId>
openclaw nodes reject <requestId>
openclaw nodes status
openclaw nodes rename --node <id|name|ip> --name "Living Room iPad"
nodes status показывает сопряжённые/подключённые узлы и их возможности.
API surface (gateway protocol)¶
Events:
node.pair.requested— генерируется при создании нового ожидающего запроса.node.pair.resolved— генерируется при одобрении/отклонении/истечении запроса.
Methods:
node.pair.request— создать или повторно использовать ожидающий запрос.node.pair.list— вывести список ожидающих + сопряжённых узлов.node.pair.approve— одобрить ожидающий запрос (выдаёт токен).node.pair.reject— отклонить ожидающий запрос.node.pair.verify— проверить{ nodeId, token }.
Notes:
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.