> ## Documentation Index
> Fetch the complete documentation index at: https://openclaw.veiseule.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Сопряжение, принадлежащее Gateway

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

```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
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.
