Project

General

Profile

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 (бинарный контент)