10 KiB
Team Board — План реализации
Дата: 2026-02-22 Метод: BMAD Planning
Текущее состояние
Tracker (Python/FastAPI)
- Модели: Project, Task, Agent, Chat, ChatMessage, Label, TaskDependency, TaskFile
- API: CRUD для tasks, projects, agents, chats, labels
- WS: базовый handler (auth, chat.subscribe, chat.send, chat.message broadcast)
- БД: PostgreSQL, Alembic миграции (3 штуки)
Web Client (Next.js)
- Страницы: login, projects list, project board
- Компоненты: KanbanBoard, TaskModal, ChatPanel, Sidebar, CreateProjectModal, AuthGuard
- API client, WS client
Что НЕ соответствует архитектуре v0.4
- Модель Agent отдельная (надо: Member + AgentConfig)
- ChatMessage привязана к Chat, нет task_id/parent_id (надо: Unified Message)
- Нет Steps модели
- Нет watchers на Task
- Нет Attachment модели (отдельные TaskFile)
- Project.git_repo = string (надо: repo_urls = array)
- Task статусы не совпадают (draft/ready/completed vs backlog/todo/done)
- WS handler не фильтрует по listen_mode
- Нет project.subscribe
- Нет heartbeat
Эпики
Epic 1: Новые модели БД
Приоритет: MUST (всё остальное зависит от этого)
Очистить БД, создать модели с нуля по ARCHITECTURE.md v0.4.
Stories:
E1-S1: Member + AgentConfig Заменить User + Agent на единую модель Member.
Member: id, name, slug, type(human|agent), role(owner|member|observer|bridge),
auth_method, password_hash?, token?, status, avatar_url
AgentConfig: member_id(FK), capabilities[], chat_listen, task_listen,
prompt, model
Acceptance: модели созданы, init_db создаёт владельца (admin)
E1-S2: Unified Message + Attachment Заменить Chat + ChatMessage на Message + Attachment.
Message: id, content, author_type, author_slug,
chat_id?(lobby/project), task_id?, parent_id?(thread),
mentions[], voice_url?, created_at
Attachment: id, message_id(FK), filename, mime_type, size, storage_path
Chat таблица остаётся (lobby, project chats), но Message может быть без chat_id (task comment). Acceptance: Message работает и для чата, и для комментариев
E1-S3: Task обновление
- status: backlog|todo|in_progress|in_review|done
- type: task|bug|epic|story
- labels: string[] (ARRAY, вместо отдельной таблицы TaskLabel)
- watchers: string[] (ARRAY of slugs)
- depends_on: UUID[] (ARRAY, вместо TaskDependency таблицы)
- assignee_slug: string (вместо assigned_agent_id FK)
- reviewer_slug: string?
- Убрать: requires_pr, pr_url (пока не нужны)
Acceptance: Task соответствует ARCHITECTURE.md
E1-S4: Step модель
Step: id, task_id(FK), title, done(bool), position(int)
Acceptance: Steps CRUD работает
E1-S5: Project обновление
- repo_urls: string[] (ARRAY, вместо git_repo)
- Убрать: key_prefix, task_counter (номера задач генерить иначе)
Acceptance: Project соответствует ARCHITECTURE.md
E1-S6: Очистка и init
- Удалить Alembic миграции
- DROP ALL + CREATE ALL при первом запуске
- Seed: создать admin (owner), lobby chat
Acceptance: чистый старт,
docker compose down -v && upработает
Epic 2: REST API (MCP-ready)
Приоритет: MUST
Обновить API эндпоинты для всех MCP tools.
Stories:
E2-S1: Auth API
POST /api/v1/auth/login— логин → JWTPOST /api/v1/auth/register— регистрация (disabled by default)- Token validation middleware Acceptance: JWT auth работает
E2-S2: Tasks API
GET /api/v1/tasks— list (фильтры: project_id, status, assignee, labels)GET /api/v1/tasks/{id}— getPOST /api/v1/tasks— createPATCH /api/v1/tasks/{id}— updateDELETE /api/v1/tasks/{id}— deletePOST /api/v1/tasks/{id}/take— take (атомарно)POST /api/v1/tasks/{id}/reject— reject с причинойPOST /api/v1/tasks/{id}/assign— assignPOST /api/v1/tasks/{id}/watch— watchDELETE /api/v1/tasks/{id}/watch— unwatch Acceptance: все эндпоинты работают, take атомарный
E2-S3: Steps API
GET /api/v1/tasks/{id}/stepsPOST /api/v1/tasks/{id}/stepsPATCH /api/v1/tasks/{task_id}/steps/{step_id}DELETE /api/v1/tasks/{task_id}/steps/{step_id}Acceptance: CRUD steps
E2-S4: Messages API (unified)
GET /api/v1/messages— list (фильтры: chat_id, task_id, parent_id, limit/offset)POST /api/v1/messages— send (chat_id или task_id)POST /api/v1/messages/{id}/reply— thread reply Acceptance: работает для чатов и комментариев задач
E2-S5: Files API
POST /api/v1/messages/{id}/attachments— uploadGET /api/v1/attachments/{id}— downloadGET /api/v1/attachments— list (фильтры: task_id, chat_id) Acceptance: upload/download работает
E2-S6: Projects API
- Обновить существующий API под новые поля (repo_urls) Acceptance: CRUD проектов работает
E2-S7: Members API
GET /api/v1/members— list (фильтр: project_id)GET /api/v1/members/{slug}— getPOST /api/v1/members— create (agent с токеном)PATCH /api/v1/members/{slug}— updatePATCH /api/v1/members/me/status— update own status Acceptance: CRUD members, генерация токенов для агентов
Epic 3: WebSocket Protocol v2
Приоритет: MUST
Stories:
E3-S1: Auth + Heartbeat
auth→ token validation →auth.okс контекстом (проекты, online members)heartbeat→ обновление status, last_seen_at- Timeout 90s → status=offline, уведомление Acceptance: агент подключается и держит сессию
E3-S2: Project Subscribe
project.subscribe/project.unsubscribe- Подписка = получение chat + task events для этого проекта Acceptance: подписка/отписка работает
E3-S3: Event Filtering
message.new— фильтрация по chat_listen + ownershiptask.created/updated/assigned— фильтрация по task_listen + assignee/reviewer/watchers Acceptance: агент с mentions получает только своё, агент с all — всё
E3-S4: chat.send через WS
- Отправка сообщения через WS (помимо REST)
- Broadcast по подписчикам с фильтрацией Acceptance: чат работает в реальном времени
Epic 4: Web Client обновление
Приоритет: SHOULD
Stories:
E4-S1: TaskModal — комментарии
- Лента сообщений (Message с task_id) внизу модалки
- Input для нового комментария
- Значки авторов: 👤/🤖/⚙️ Acceptance: комментарии к задаче работают
E4-S2: TaskModal — Steps
- Чеклист между описанием и комментариями
- Добавление/завершение/удаление steps
- Live-обновление через WS Acceptance: steps отображаются и обновляются
E4-S3: TaskModal — watchers
- Кнопка "👁 Наблюдать" / "Отписаться"
- Список watchers в сайдбаре модалки Acceptance: подписка/отписка работает
E4-S4: Agent Management
- Страница /agents — список агентов со статусами
- Создание агента (name, slug, capabilities) → генерация токена
- Отображение токена (один раз при создании) Acceptance: можно создать агента и получить токен
E4-S5: Обновление моделей в клиенте
- api.ts: обновить типы (Member вместо Agent, Message вместо ChatMessage)
- ws.ts: обновить события (message.new, project.subscribe, heartbeat)
- ChatPanel: использовать Unified Message Acceptance: клиент работает с новым API
Epic 5: Picogent интеграция
Приоритет: COULD (после Epic 1-3)
Stories:
E5-S1: MCP Tools Provider
- Обёртка над Tracker REST API
- Все 21+ tools из BRAINSTORM-MCP-TOOLS Acceptance: агент может вызывать tools
E5-S2: Router v2
- WS event → текст → единственная сессия
- Фильтрация по listen_mode на стороне picogent (дополнительно к серверной) Acceptance: агент получает события как текст
E5-S3: Single Session
- Одна сессия на агента (не per-task)
- session.resume при reconnect Acceptance: контекст сохраняется между задачами
Порядок выполнения
Phase 1: Backend Foundation
E1 (модели) → E2 (API) → E3 (WS v2)
Phase 2: Frontend
E4-S5 (типы) → E4-S1 (комменты) → E4-S2 (steps) → E4-S4 (agents)
Phase 3: Agent
E5-S1 (MCP) → E5-S2 (router) → E5-S3 (session)
Оценка объёма
| Epic | Stories | Сложность | ~Часы |
|---|---|---|---|
| E1: Модели | 6 | Средняя | 4-6 |
| E2: REST API | 7 | Средняя | 8-12 |
| E3: WS v2 | 4 | Высокая | 6-8 |
| E4: Web Client | 5 | Средняя | 8-10 |
| E5: Picogent | 3 | Высокая | 10-14 |
| Итого | 25 | 36-50 |