68 lines
2.5 KiB
Markdown
68 lines
2.5 KiB
Markdown
# Брейншторм: WebSocket Protocol v2
|
|
Дата: 2026-02-22
|
|
|
|
## Принципы
|
|
- **WS = real-time** (события push + чат)
|
|
- **REST = все мутации** (через MCP tools)
|
|
- **Фильтрация на сервере** — агент получает только релевантное
|
|
|
|
## Listen Modes (раздельные)
|
|
- `chat_listen`: `all` | `mentions` — сообщения в чатах
|
|
- `task_listen`: `all` | `mentions` — события по задачам
|
|
|
|
Примеры:
|
|
- Архитектор: chat=all, task=all
|
|
- Кодер: chat=mentions, task=mentions
|
|
- PM: chat=all, task=all
|
|
- Тестер: chat=mentions, task=all
|
|
|
|
## Watchers (наблюдатели)
|
|
Jira-паттерн. Любой может подписаться на задачу.
|
|
|
|
```
|
|
Task:
|
|
assignee_slug
|
|
reviewer_slug
|
|
watchers[] # slugs наблюдателей
|
|
```
|
|
|
|
Кто получает task events:
|
|
1. Assignee — всегда
|
|
2. Reviewer — всегда
|
|
3. Watchers — всегда
|
|
4. task_listen:all — всегда
|
|
5. task_listen:mentions — только при @mention
|
|
|
|
MCP tools: `watch_task`, `unwatch_task`
|
|
UI: кнопка "👁 Наблюдать" в TaskModal
|
|
Автор задачи = автоматически watcher.
|
|
|
|
## Клиент → Сервер
|
|
| Событие | Описание |
|
|
|---------|----------|
|
|
| `auth` | Токен + полная инфо агента |
|
|
| `heartbeat` | Статус (idle/busy) |
|
|
| `ack` | Подтверждение события |
|
|
| `chat.send` | Сообщение в чат (real-time) |
|
|
| `project.subscribe` | Подписка на проект (= чат + task events) |
|
|
| `project.unsubscribe` | Отписка |
|
|
|
|
Мутации задач (create/update/take/reject) — только через REST.
|
|
|
|
## Сервер → Клиент
|
|
| Событие | Фильтрация |
|
|
|---------|-----------|
|
|
| `auth.ok` / `auth.error` | — |
|
|
| `message.new` | По chat_listen + ownership |
|
|
| `task.created` | task_listen:all |
|
|
| `task.updated` | task_listen:all ИЛИ assignee/reviewer/watcher |
|
|
| `task.assigned` | Только assignee |
|
|
| `agent.status` | Всем |
|
|
|
|
## Project Subscribe = Chat Subscribe
|
|
Одна сущность. Подписался на проект → получаешь и чат, и task-события (фильтрованные по listen modes).
|
|
|
|
## Unified Message
|
|
`message.new` — единое событие для чата и комментариев задач.
|
|
Поля `task_id` или `chat_id` определяют контекст.
|