Gateway

Протокол моста

Навіщо він існував

  • Межа безпеки: міст відкриває невеликий список дозволеного замість повної поверхні API Gateway.
  • Сполучення + ідентичність вузла: допуск вузла належить Gateway і прив’язаний до токена для окремого вузла.
  • UX виявлення: вузли можуть виявляти Gateway через Bonjour у LAN або підключатися безпосередньо через tailnet.
  • Локальний WS: повна площина керування WS залишається локальною, якщо її не тунельовано через SSH.

Транспорт

  • TCP, по одному JSON-об’єкту на рядок (JSONL).
  • Необов’язковий TLS (коли bridge.tls.enabled має значення true).
  • Історичний стандартний порт прослуховувача був 18790 (поточні збірки не запускають TCP-міст).

Коли TLS увімкнено, записи TXT виявлення містять bridgeTls=1 плюс bridgeTlsSha256 як несекретну підказку. Зауважте, що записи TXT Bonjour/mDNS не автентифікуються; клієнти не повинні вважати оголошений відбиток авторитетним закріпленням без явного наміру користувача або іншої позасмугової перевірки.

Рукостискання + сполучення

  1. Клієнт надсилає hello з метаданими вузла + токеном (якщо вже сполучено).
  2. Якщо не сполучено, Gateway відповідає error (NOT_PAIRED/UNAUTHORIZED).
  3. Клієнт надсилає pair-request.
  4. Gateway чекає на схвалення, потім надсилає pair-ok і hello-ok.

Історично hello-ok повертав serverName; розміщені поверхні Plugin тепер оголошуються через pluginSurfaceUrls. Canvas/A2UI використовує pluginSurfaceUrls.canvas; застарілий псевдонім canvasHostUrl не є частиною переробленого протоколу.

Фрейми

Клієнт → Gateway:

  • req / res: обмежений за областю RPC Gateway (чат, сеанси, конфігурація, справність, voicewake, skills.bins)
  • event: сигнали вузла (голосова транскрипція, запит агента, підписка на чат, життєвий цикл виконання)

Gateway → клієнт:

  • invoke / invoke-res: команди вузла (canvas.*, camera.*, screen.record, location.get, sms.send)
  • event: оновлення чату для сеансів із підпискою
  • ping / pong: підтримання з’єднання

Застаріле застосування списку дозволеного містилося в src/gateway/server-bridge.ts (видалено).

Події життєвого циклу виконання

Вузли можуть випромінювати події exec.finished, щоб показувати завершену активність system.run. Вони зіставляються із системними подіями в Gateway. (Застарілі вузли все ще можуть випромінювати exec.started.) Вузли можуть випромінювати exec.denied для відхилених спроб system.run; Gateway приймає подію як кінцеву відмову й не ставить системну подію в чергу та не пробуджує роботу агента.

Поля корисного навантаження (усі необов’язкові, якщо не зазначено інше):

  • sessionKey (обов’язкове): сеанс агента для кореляції подій і, для exec.finished, доставки системної події.
  • runId: унікальний ідентифікатор виконання для групування.
  • command: сирий або форматований рядок команди.
  • exitCode, timedOut, success, output: деталі завершення (лише завершені).
  • reason: причина відмови (лише відхилені).

Історичне використання tailnet

  • Прив’язати міст до IP tailnet: bridge.bind: "tailnet" у ~/.openclaw/openclaw.json (лише історично; bridge.* більше не є чинним).
  • Клієнти підключаються через ім’я MagicDNS або IP tailnet.
  • Bonjour не проходить між мережами; за потреби використовуйте ручний хост/порт або широкозонний DNS-SD.

Версіювання

Міст був неявною v1 (без узгодження мінімуму/максимуму). Цей розділ є лише історичною довідкою; поточні клієнти вузлів/операторів використовують WebSocket протокол Gateway.

Пов’язане

Was this useful?
On this page

On this page