docs/ARCHITECTURE.md

11 KiB
Raw Blame History

Team Board — Архитектура

Версия: 0.2 (драфт) Дата: 2026-02-21

Что это

Платформа для совместной работы людей и AI-агентов над проектами. Канбан-доска, чат, файлы — где агенты являются полноценными участниками: берут задачи, общаются, создают подзадачи, ревьюят код.

Ключевое отличие от MetaGPT, Claude Flow и подобных: человек — участник процесса, а не наблюдатель. Всё происходит на человеческом языке, в прозрачном чате.

Компоненты

┌─────────────┐     ┌──────────────┐     ┌──────────────┐
│  Web Client │────▶│     BFF      │────▶│   Tracker    │
│  (Next.js)  │     │  (FastAPI)   │     │  (FastAPI)   │
└─────────────┘     └──────────────┘     └──────┬───────┘
                                                │
       ┌────────────────────────────────────────┤
       │              │              │          │
  ┌────▼────┐   ┌────▼────┐   ┌────▼────┐  ┌──▼───┐
  │Picogent │   │Picogent │   │Telegram │  │ DB   │
  │ Кодер   │   │Архитект │   │ Bridge  │  │Pg+Red│
  └─────────┘   └─────────┘   └─────────┘  └──────┘
Компонент Стек Порт Описание
Tracker Python, FastAPI, SQLAlchemy, PostgreSQL 8100 Ядро. REST API + WebSocket. Не доступен извне.
BFF Python, FastAPI 8200 Прокси для Web Client. JWT auth.
Web Client Next.js 15, Tailwind CSS 3100 UI: канбан, чат, настройки.
Picogent Node.js, TypeScript, Pi Agent Core AI-агент. Подключается к Tracker по WS.
Telegram Bridge TBD Дублирует чат проекта в Telegram (с топиками).
PostgreSQL 16 5433 БД Tracker.
Redis 7 6380 Пока не используется.

Проекты

Проект = workspace для команды (людей + агентов).

Поля: name, slug, description, repo_urls[] (multi-repo), status (active/archived).

Вкладки UI: канбан, чат, дашборд, настройки, файлы, activity feed.

Правила: описываются в документации проекта (docs/ в repo или file storage). Агенты читают при онбординге.

Кросс-проектные ссылки: задача в проекте A может ссылаться на задачу в проекте B.

Задачи

Модель

Поле Тип Описание
id UUID
title string Название
description text Markdown
type enum task, bug, epic, story
status enum backlog, todo, in_progress, in_review, done
priority enum critical, high, medium, low
labels string[] bug, feature, refactor, docs...
parent_id UUID? Подзадача (бесконечная вложенность)
depends_on UUID[] Зависимости (нельзя начать пока не done)
assignee_slug string? Исполнитель
reviewer_slug string? Ревьюер
steps Step[] Этапы (прогресс агента, не видны на канбане)
time_spent int Минуты (для аналитики)
project_id UUID

Статусы

Любой → любой. Без жёсткого flow. todo → done — нормально, если задача простая.

Подзадачи vs Этапы

  • Подзадачи = полноценные задачи на канбан-доске (parent_id)
  • Этапы (steps) = чеклист внутри задачи. Агент обновляет по ходу работы. Не засоряют доску.

Комментарии

TaskComment: id, task_id, author_type (human|agent|system),
  content, mentions[], voice_url?, attachments[], 
  parent_comment_id? (threads), created_at

Mentions (@slug) → уведомление агенту через WS.

Особенности

  • Агент может отклонить задачу (reject_task) с обоснованием
  • Автообнаружение блокеров: зависимость застряла → пинг в чат
  • Задача-наблюдатель: мониторинг, не исполнение
  • Задача порождает подзадачи автоматически (агент создаёт через create_task)

Чаты

Типы

Тип Описание Файлы
Lobby Глобальный чат для всех Нет хранилища
Project Chat Per-project, координация Да
Task Comments Per-task, обсуждение задачи Да

Фичи

  • Threads (как в Slack) — ответ на сообщение создаёт ветку
  • Голосовые — запись → Thoth транскрибирует → текст + аудио
  • Файлы в чат — документы, изображения
  • Реакции — TBD (не попадают в промпт агента, чисто UI)

Модель сообщения

ChatMessage: id, chat_id, author_type, author_slug,
  content (markdown), thread_id?, mentions[],
  voice_url?, attachments[], reactions[], created_at

Агенты (Picogent)

Конфигурация

Один бинарник, роль = конфиг (agent.json):

{
  "name": "Кодер",
  "slug": "coder",
  "prompt": "Ты опытный разработчик...",
  "model": "sonnet",
  "capabilities": ["coding", "review"],
  "listen_mode": "mentions",
  "tracker_url": "http://localhost:8100",
  "token": "tb-agent-xxx"
}

Режимы прослушивания

  • listen: all — слышит всё в чате (архитектор, PM)
  • listen: mentions — только при @упоминании (кодер, тестер)

Одна сессия на агента

Всё в одном контексте: задачи, чат, ответы. Агент видит полную картину.

Онбординг

При подключении к проекту агент получает контекст: README, docs, архитектуру.

Memory

Per-agent + per-project. Агент дописывает findings после задач.

Что агент получает

Текстовые сообщения (максимум разговорной речи):

  • "Тебе назначена задача TB-42: Добавить авторизацию. Приоритет: high."
  • "[чат проекта] @architect: Используй JWT для авторизации"
  • "[комментарий к TB-42] @reviewer: В auth.py строка 42 не обработан expired token"

Агент сам решает что делать — вызывает MCP tools.

Label Matching

Задача имеет labels, агент поддерживает labels → автоматический matching для assign.

Протокол

Принцип

  • WebSocket = real-time: события (push) + сообщения чата
  • REST (MCP tools) = все мутации: задачи, этапы, файлы, статусы

WS Protocol

Инфраструктура:

Agent → Tracker: auth, heartbeat, ack
Tracker → Agent: auth.ok, auth.error, event

События (push):

Событие В промпт?
task.assigned Текстом
chat.message / По listen_mode
task.comment (mention) Текстом
task.taken Internal
task.status_changed Internal (кроме разблокировки зависимости)

MCP Tools (REST)

Tool Описание
get_task, list_tasks Чтение задач
create_task Создать задачу/подзадачу
update_task Обновить поля
take_task Взять себе (атомарно)
reject_task Отклонить с причиной
add_step, complete_step Управление этапами
add_comment Комментарий (с mentions)
send_message Сообщение в чат
upload_file, list_files Файлы

Router (в Picogent)

Тупой relay: WS event → текст → единственная сессия агента. Агент сам вызывает tools.

Файловое хранилище

  • Per-project директории
  • Upload/download через REST API
  • Связь с git repos (repo_urls[])
  • Версионирование файлов — TBD

Telegram Bridge (MVP)

  • Один бот, подключается по WS к Tracker
  • Дублирует сообщения из project chats в Telegram
  • Топики: если в Telegram включены topics → бот пишет в топик с именем проекта
  • Форматирование: [Кодер] текст сообщения

Безопасность

  • Агенту доступны определённые действия (allowed_paths, capabilities)
  • Разные уровни доступа — TBD
  • Rate limiting — TBD
  • Audit log — TBD

На будущее

  • Web MCP Server — отдельный пакет, любой LLM-клиент (Claude Code, Cursor) работает с трекером через MCP без Picogent
  • Multi-instance агентов — scaling, несколько кодеров
  • Аналитика — метрики, дашборды
  • OAuth / Authentik — мульти-пользователь
  • Notification Bridge — push-уведомления за пределами чата

Референсы

  • MetaGPT — промпты ролей (PM, Architect, Engineer, QA)
  • Claude Flow — claims, swarm coordination
  • BMAD Method — brainstorming workflows