Agent Protocol » History » Version 2
Hardelele User, 02/18/2026 11:41 AM
Fix: convert to CommonMark format
| 1 | 2 | Hardelele User | # Agent Protocol |
|---|---|---|---|
| 2 | 1 | Hardelele User | |
| 3 | 2 | Hardelele User | Протокол взаимодействия между **Rust Agent** (на Windows-машинах) и **NestJS API** (Control Plane). |
| 4 | 1 | Hardelele User | |
| 5 | 2 | Hardelele User | ## Транспорт |
| 6 | 1 | Hardelele User | |
| 7 | 2 | Hardelele User | - **Протокол:** WebSocket (WSS) |
| 8 | - **Endpoint:** `wss://app.reckue.com/ws/agent` |
||
| 9 | - **Формат сообщений:** JSON |
||
| 10 | 1 | Hardelele User | |
| 11 | 2 | Hardelele User | ## Аутентификация |
| 12 | 1 | Hardelele User | |
| 13 | 2 | Hardelele User | - Агент подключается с машинным токеном (JWT) |
| 14 | - Токен передаётся при WebSocket handshake в заголовке `Authorization: Bearer <token>` |
||
| 15 | - Токен выдаётся при регистрации агента через API |
||
| 16 | 1 | Hardelele User | |
| 17 | 2 | Hardelele User | ## Типы сообщений |
| 18 | 1 | Hardelele User | |
| 19 | 2 | Hardelele User | ### Agent → Server |
| 20 | 1 | Hardelele User | |
| 21 | 2 | Hardelele User | | Тип | Описание | Payload | |
| 22 | | --- | --- | --- | |
||
| 23 | | `register` | Регистрация агента при подключении | `{ hostname, os, version, capabilities }` | |
||
| 24 | | `heartbeat` | Подтверждение активности | `{ timestamp, cpu_usage, memory_usage }` | |
||
| 25 | | `session_output` | Вывод терминальной сессии | `{ session_id, data (base64) }` | |
||
| 26 | | `session_status` | Статус сессии изменился | `{ session_id, status, exit_code? }` | |
||
| 27 | 1 | Hardelele User | |
| 28 | 2 | Hardelele User | ### Server → Agent |
| 29 | 1 | Hardelele User | |
| 30 | 2 | Hardelele User | | Тип | Описание | Payload | |
| 31 | | --- | --- | --- | |
||
| 32 | | `session_start` | Запустить новую терминальную сессию | `{ session_id, shell?, cols?, rows? }` | |
||
| 33 | | `session_stop` | Остановить сессию | `{ session_id }` | |
||
| 34 | | `session_input` | Ввод пользователя в сессию | `{ session_id, data (base64) }` | |
||
| 35 | | `workspace_init` | Инициализировать рабочее пространство | `{ workspace_id, config }` | |
||
| 36 | 1 | Hardelele User | |
| 37 | 2 | Hardelele User | ## Формат сообщения |
| 38 | 1 | Hardelele User | |
| 39 | Каждое сообщение — JSON-объект: |
||
| 40 | |||
| 41 | 2 | Hardelele User | ```json |
| 42 | 1 | Hardelele User | { |
| 43 | "type": "message_type", |
||
| 44 | "id": "uuid-v4", |
||
| 45 | "timestamp": "2026-01-15T12:00:00Z", |
||
| 46 | "payload": { ... } |
||
| 47 | } |
||
| 48 | 2 | Hardelele User | ``` |
| 49 | 1 | Hardelele User | |
| 50 | 2 | Hardelele User | ## Heartbeat |
| 51 | 1 | Hardelele User | |
| 52 | 2 | Hardelele User | - Агент отправляет `heartbeat` каждые **30 секунд** |
| 53 | - Если сервер не получает heartbeat в течение **90 секунд**, агент считается оффлайн |
||
| 54 | - Сервер может отправить `ping`, агент должен ответить `pong` |
||
| 55 | 1 | Hardelele User | |
| 56 | 2 | Hardelele User | ## Reconnect (переподключение) |
| 57 | 1 | Hardelele User | |
| 58 | 2 | Hardelele User | Стратегия: **exponential backoff** |
| 59 | 1 | Hardelele User | |
| 60 | 2 | Hardelele User | | Попытка | Задержка | |
| 61 | | --- | --- | |
||
| 62 | 1 | Hardelele User | | 1 | 1 секунда | |
| 63 | | 2 | 2 секунды | |
||
| 64 | | 3 | 4 секунды | |
||
| 65 | | 4 | 8 секунд | |
||
| 66 | | 5 | 16 секунд | |
||
| 67 | | 6 | 32 секунды | |
||
| 68 | | 7+ | 60 секунд (максимум) | |
||
| 69 | |||
| 70 | 2 | Hardelele User | - После успешного подключения счётчик сбрасывается |
| 71 | - При переподключении агент повторно отправляет `register` |
||
| 72 | 1 | Hardelele User | |
| 73 | 2 | Hardelele User | ## Пример сценария |
| 74 | 1 | Hardelele User | |
| 75 | 2 | Hardelele User | 1. Агент запускается на Windows-машине |
| 76 | 2. Агент подключается к `wss://app.reckue.com/ws/agent` с JWT-токеном |
||
| 77 | 3. Агент отправляет `register` с информацией о машине |
||
| 78 | 4. Сервер подтверждает регистрацию |
||
| 79 | 5. Агент начинает отправлять `heartbeat` каждые 30 секунд |
||
| 80 | 6. Пользователь в браузере открывает терминал |
||
| 81 | 7. Сервер отправляет агенту `session_start` |
||
| 82 | 8. Агент создаёт PTY-процесс и отправляет `session_status: started` |
||
| 83 | 9. Пользователь вводит команды → сервер отправляет `session_input` → агент пишет в PTY |
||
| 84 | 10. PTY выдаёт вывод → агент отправляет `session_output` → сервер передаёт в браузер |
||
| 85 | 11. Пользователь закрывает терминал → сервер отправляет `session_stop` |
||
| 86 | 12. Агент завершает PTY-процесс и отправляет `session_status: stopped` |
||
| 87 | 1 | Hardelele User | |
| 88 | 2 | Hardelele User | ## Безопасность |
| 89 | 1 | Hardelele User | |
| 90 | 2 | Hardelele User | - Все соединения через WSS (TLS) |
| 91 | - JWT-токены с ограниченным сроком действия |
||
| 92 | - Каждый агент привязан к конкретному пользователю/организации |
||
| 93 | - Данные сессий передаются в base64 (бинарный контент) |