add: WS Protocol v2 brainstorm — listen modes, watchers, event filtering

This commit is contained in:
Markov 2026-02-22 14:55:27 +01:00
parent 444b2c94d5
commit faa2dcd15c
2 changed files with 70 additions and 6 deletions

View File

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

View File

@ -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"