From faa2dcd15ced4eddf601dfa28b8387fdf80a34d9 Mon Sep 17 00:00:00 2001 From: Markov Date: Sun, 22 Feb 2026 14:55:27 +0100 Subject: [PATCH] =?UTF-8?q?add:=20WS=20Protocol=20v2=20brainstorm=20?= =?UTF-8?q?=E2=80=94=20listen=20modes,=20watchers,=20event=20filtering?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BRAINSTORM-WS-V2-2026-02-22.md | 67 ++++++++++++++++++++++++++++++++++ brainstorm-status.yaml | 9 ++--- 2 files changed, 70 insertions(+), 6 deletions(-) create mode 100644 BRAINSTORM-WS-V2-2026-02-22.md 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"