diff --git a/BRAINSTORM-WS-V2-2026-02-22.md b/BRAINSTORM-WS-V2-2026-02-22.md new file mode 100644 index 0000000..6e2d511 --- /dev/null +++ b/BRAINSTORM-WS-V2-2026-02-22.md @@ -0,0 +1,67 @@ +# Брейншторм: 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` определяют контекст. diff --git a/brainstorm-status.yaml b/brainstorm-status.yaml index 148f9f1..04c2f5d 100644 --- a/brainstorm-status.yaml +++ b/brainstorm-status.yaml @@ -110,9 +110,6 @@ topics: ws_protocol_v2: name: "WebSocket протокол v2 (реализация)" - status: planned - doc: null - notes: | - - Синхронизация picogent WS с tracker - - Auth, event dispatch, ack - - Room subscriptions + status: done + doc: BRAINSTORM-WS-V2-2026-02-22.md + summary: "Раздельные listen modes (chat/task), watchers, project.subscribe, unified message.new"