docs/BRAINSTORM-WS-V2-2026-02-22.md

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:

  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 определяют контекст.