Add WebSocket protocol docs + agent connection research
This commit is contained in:
parent
7849a1fddb
commit
ffe8f68806
1118
AGENT-CONNECTION-RESEARCH.md
Normal file
1118
AGENT-CONNECTION-RESEARCH.md
Normal file
File diff suppressed because it is too large
Load Diff
124
WEBSOCKET-PROTOCOL.md
Normal file
124
WEBSOCKET-PROTOCOL.md
Normal file
@ -0,0 +1,124 @@
|
||||
# Team Board WebSocket Protocol
|
||||
|
||||
## Подключение
|
||||
|
||||
```
|
||||
ws://localhost:8100/ws?client_type={type}&client_id={id}
|
||||
```
|
||||
|
||||
- `client_type`: `human` | `agent` | `bridge`
|
||||
- `client_id`: уникальный идентификатор клиента (slug агента, имя bridge и т.д.)
|
||||
|
||||
## Формат сообщений
|
||||
|
||||
Все сообщения — JSON с полем `event`:
|
||||
|
||||
```json
|
||||
{"event": "event.name", ...payload}
|
||||
```
|
||||
|
||||
## События: Клиент → Сервер
|
||||
|
||||
### auth
|
||||
Аутентификация (для агентов/bridge).
|
||||
```json
|
||||
{"event": "auth", "token": "agent-xxx"}
|
||||
```
|
||||
Ответ: `auth.ok` с `{"init": {}}`
|
||||
|
||||
### chat.subscribe
|
||||
Подписка на чат-комнату.
|
||||
```json
|
||||
{"event": "chat.subscribe", "chat_id": "uuid"}
|
||||
```
|
||||
Ответ: `chat.subscribed`
|
||||
|
||||
### chat.unsubscribe
|
||||
Отписка от чата.
|
||||
```json
|
||||
{"event": "chat.unsubscribe", "chat_id": "uuid"}
|
||||
```
|
||||
|
||||
### chat.send
|
||||
Отправка сообщения в чат.
|
||||
```json
|
||||
{
|
||||
"event": "chat.send",
|
||||
"chat_id": "uuid",
|
||||
"content": "текст сообщения",
|
||||
"sender_type": "human|agent|system|bridge",
|
||||
"sender_id": "optional-uuid",
|
||||
"sender_name": "Имя отправителя"
|
||||
}
|
||||
```
|
||||
Сообщение сохраняется в БД и broadcast'ится всем подписчикам чата.
|
||||
|
||||
### agent.heartbeat
|
||||
Пинг от агента (статус).
|
||||
```json
|
||||
{"event": "agent.heartbeat", "status": "idle|busy"}
|
||||
```
|
||||
Ответ: `agent.heartbeat.ack`
|
||||
|
||||
## События: Сервер → Клиент
|
||||
|
||||
### auth.ok
|
||||
```json
|
||||
{"event": "auth.ok", "init": {}}
|
||||
```
|
||||
|
||||
### chat.subscribed
|
||||
```json
|
||||
{"event": "chat.subscribed", "chat_id": "uuid"}
|
||||
```
|
||||
|
||||
### chat.message
|
||||
Новое сообщение в чате (broadcast всем подписчикам).
|
||||
```json
|
||||
{
|
||||
"event": "chat.message",
|
||||
"id": "msg-uuid",
|
||||
"chat_id": "uuid",
|
||||
"sender_type": "human|agent|system|bridge",
|
||||
"sender_id": "uuid|null",
|
||||
"sender_name": "Имя",
|
||||
"content": "текст",
|
||||
"created_at": "2026-02-20T12:00:00Z"
|
||||
}
|
||||
```
|
||||
|
||||
### error
|
||||
```json
|
||||
{"event": "error", "message": "описание ошибки"}
|
||||
```
|
||||
|
||||
## Чаты
|
||||
|
||||
- **Lobby**: общий чат, ID: `25c20eaa-fbf1-4259-8501-0854cc926d0d`
|
||||
- **Project chat**: чат проекта (один на проект)
|
||||
- **Task chat**: чат задачи (один на задачу)
|
||||
|
||||
### REST API для чатов
|
||||
```
|
||||
GET /api/v1/chats/lobby — получить lobby
|
||||
GET /api/v1/chats/{id}/messages — история сообщений
|
||||
POST /api/v1/chats/{id}/messages — отправить (без WS)
|
||||
```
|
||||
|
||||
## Telegram Bridge (планируется)
|
||||
|
||||
Bridge-клиент подключается как `client_type=bridge`, подписывается на нужные чаты и:
|
||||
|
||||
1. **Tracker → Telegram**: получает `chat.message`, форматирует и отправляет в Telegram группу
|
||||
2. **Telegram → Tracker**: получает сообщения из Telegram, отправляет `chat.send` с `sender_type=bridge`
|
||||
3. **Системные события**: статус задачи, новая задача и т.д.
|
||||
4. **Теги агентов**: парсит `@slug` в сообщениях из Telegram
|
||||
|
||||
### Формат сообщений в Telegram
|
||||
```
|
||||
[Имя Агента] Текст сообщения
|
||||
```
|
||||
или
|
||||
```
|
||||
🤖 Кодер: Задача выполнена, коммит abc123
|
||||
```
|
||||
Loading…
Reference in New Issue
Block a user