2.5 KiB
2.5 KiB
Брейншторм: 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:
- Assignee — всегда
- Reviewer — всегда
- Watchers — всегда
- task_listen:all — всегда
- 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 определяют контекст.