Community translations by veiseule.ai — Help improve them on Crowdin
Skip to main content

Сопряжение, принадлежащее 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

  1. Узел подключается к WS Gateway и запрашивает сопряжение.
  2. Gateway сохраняет pending request и генерирует node.pair.requested.
  3. Вы одобряете или отклоняете запрос (CLI или UI).
  4. При одобрении Gateway выдаёт новый токен (токены ротируются при повторном сопряжении).
  5. Узел переподключается с использованием токена и теперь считается «сопряжённым».

Ожидающие запросы автоматически истекают через 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.