Project

General

Profile

Actions

Agent Protocol » History » Revision 1

Revision 1/2 | Next »
Hardelele User, 02/18/2026 11:34 AM
Initial content — agent protocol specification


h1. Agent Protocol

Протокол взаимодействия между Rust Agent (на Windows-машинах) и NestJS API (Control Plane).

h2. Транспорт

  • Протокол: WebSocket (WSS)
  • Endpoint: @wss://app.reckue.com/ws/agent@
  • Формат сообщений: JSON

h2. Аутентификация

  • Агент подключается с машинным токеном (JWT)
  • Токен передаётся при WebSocket handshake в заголовке @Authorization: Bearer @
  • Токен выдаётся при регистрации агента через API

h2. Типы сообщений

h3. Agent -> Server

|. Тип |. Описание |_. Payload |
| @register@ | Регистрация агента при подключении | @{ hostname, os, version, capabilities }@ |
| @heartbeat@ | Подтверждение активности | @{ timestamp, cpu_usage, memory_usage }@ |
| @session_output@ | Вывод терминальной сессии | @{ session_id, data (base64) }@ |
| @session_status@ | Статус сессии изменился | @{ session_id, status: "started" / "stopped" / "error", exit_code? }@ |

h3. Server -> Agent

|. Тип |. Описание |_. Payload |
| @session_start@ | Запустить новую терминальную сессию | @{ session_id, shell?, cols?, rows? }@ |
| @session_stop@ | Остановить сессию | @{ session_id }@ |
| @session_input@ | Ввод пользователя в сессию | @{ session_id, data (base64) }@ |
| @workspace_init@ | Инициализировать рабочее пространство | @{ workspace_id, config }@ |

h2. Формат сообщения

Каждое сообщение — JSON-объект:

{
  "type": "message_type",
  "id": "uuid-v4",
  "timestamp": "2026-01-15T12:00:00Z",
  "payload": { ... }
}

h2. Heartbeat

  • Агент отправляет @heartbeat@ каждые 30 секунд
  • Если сервер не получает heartbeat в течение 90 секунд, агент считается оффлайн
  • Сервер может отправить @ping@, агент должен ответить @pong@

h2. Reconnect (переподключение)

Стратегия: exponential backoff

|. Попытка |. Задержка |
| 1 | 1 секунда |
| 2 | 2 секунды |
| 3 | 4 секунды |
| 4 | 8 секунд |
| 5 | 16 секунд |
| 6 | 32 секунды |
| 7+ | 60 секунд (максимум) |

  • После успешного подключения счётчик сбрасывается
  • При переподключении агент повторно отправляет @register@

h2. Пример сценария

Агент запускается на Windows-машине

Агент подключается к @wss://app.reckue.com/ws/agent@ с JWT-токеном

Агент отправляет @register@ с информацией о машине

Сервер подтверждает регистрацию

Агент начинает отправлять @heartbeat@ каждые 30 секунд

Пользователь в браузере открывает терминал

Сервер отправляет агенту @session_start@

Агент создаёт PTY-процесс и отправляет @session_status: started@

Пользователь вводит команды -> сервер отправляет @session_input@ -> агент пишет в PTY

PTY выдаёт вывод -> агент отправляет @session_output@ -> сервер передаёт в браузер

Пользователь закрывает терминал -> сервер отправляет @session_stop@

Агент завершает PTY-процесс и отправляет @session_status: stopped@

h2. Безопасность

  • Все соединения через WSS (TLS)
  • JWT-токены с ограниченным сроком действия
  • Каждый агент привязан к конкретному пользователю/организации
  • Данные сессий передаются в base64 (бинарный контент)

Updated by Hardelele User about 18 hours ago · 2 revisions