docs: обновление архитектуры

- Tracker-centric модель
- Переименование: backend→tracker, frontend→web-client
- Канбан: Backlog + черновики + статусы
- Зависимости задач
- Файлы в задачах
- Три уровня чатов (лобби, проект, задача)
- Подписка агентов (all/mentions/assigned)
- WebSocket протокол
This commit is contained in:
Markov 2026-02-15 18:00:47 +01:00
parent 4209bc26fd
commit cf2289516e

553
IDEAS.md
View File

@ -19,279 +19,319 @@
--- ---
## Архитектура ## Архитектура: Tracker-Centric
### Микросервисы (Python + FastAPI) ### Принцип
| Сервис | Описание | **Tracker = центральный сервис.** Всё остальное — клиенты.
|--------|----------|
| Gateway | API Gateway, аутентификация |
| Projects | Проекты, Git интеграция |
| Tasks | Задачи, канбан, подзадачи |
| Agents | Управление AI агентами |
| Chat | Чаты проектов |
### Frontend (Next.js) ```
┌─────────────────────────────────────────────────────┐
│ WEB CLIENT │
│ ┌───────────┐ ┌────────────┐ │
│ │ Next.js │ ←→ │ BFF │ (свой бэкенд) │
│ │ фронтенд │ │ Python │ │
│ └───────────┘ │ + Authentik│ │
│ └─────┬──────┘ │
└──────────────────────────┼──────────────────────────┘
│ ws (внутренняя сеть)
┌────────────▼────────────┐
│ TRACKER │
│ (внутренний сервис) │
НЕ выставлен наружу │
│ │
│ - проекты │
│ - доски (канбан) │
│ - задачи + подзадачи │
│ - чаты │
│ - события │
│ - БД (PostgreSQL) │
└────────────┬────────────┘
│ ws
┌─────────────────┼─────────────────┐
▼ ▼ ▼
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Агент 1 │ │ Агент 2 │ │ Агент N │
│ (Claude) │ │ (Codex) │ │ (Gemini) │
│ отд. сервис │ │ отд. сервис │ │ отд. сервис │
└──────────────┘ └──────────────┘ └──────────────┘
```
Web UI для управления всем. ### Компоненты
### Database | Компонент | Описание |
|-----------|----------|
| **Tracker** | Ядро: проекты, задачи, чаты, события. Внутренний, WebSocket сервер |
| **Web Client** | Next.js + BFF (Python). Авторизация через Authentik. Единственное что торчит наружу |
| **Агенты** | Отдельные сервисы. Подключаются к трекеру по WebSocket |
PostgreSQL (существующий на сервере). ### Репозитории
```
team-board/
├── tracker/ — ядро (Python, WebSocket, PostgreSQL)
├── web-client/ — Next.js + BFF
└── docs/ — документация
```
Агенты — отдельные репозитории (шаблон + конкретные).
--- ---
## UI Layout ## Канбан-доска
### Колонки
``` ```
┌────────────────────────────────────────────────────────────────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
│ [Logo] Team Board [User Avatar] ▼ │ │ Backlog │ │ TODO │ │ In Prog │ │ Review │ │ Done │
├──────────────┬─────────────────────────────────────────────────────┤ ├──────────┤ ├──────────┤ ├──────────┤ ├──────────┤ ├──────────┤
│ │ Project Alpha [Settings] │ │ [draft] │ │ [ready] │ │ [active] │ │ [review] │ │[complete]│
│ PROJECTS │─────────────────────────────────────────────────────│ │ [draft] │ │ [ready] │ │ │ │ │ │[complete]│
│ │ 💬 Chat ▼ (сворачиваемый) │ │ │ │ │ │ │ │ │ │ │
│ ○ Alpha │ ┌──────────────────────────────────────────────┐ │ └──────────┘ └──────────┘ └──────────┘ └──────────┘ └──────────┘
│ ● Beta │ │ Agent-1: Закоммитил фикс для issue #42 │ │ ```
│ ○ Gamma │ │ Agent-2: Проверил, всё ок │ │
│ │ │ You: Мержите │ │ ### Статусы задач
│ [+ New] │ └──────────────────────────────────────────────┘ │
│ │─────────────────────────────────────────────────────│ | Статус | Описание |
│──────────────│ KANBAN │ |--------|----------|
│ │ │ | `draft` | Черновик. Можно обсуждать, но не выполнять |
│ AGENTS │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ | `ready` | Готова к выполнению. Перенос из Backlog → TODO автоматически ставит этот статус |
│ │ │ Backlog │ │ In Prog │ │ Review │ │ Done │ │ | `in_progress` | Агент взял в работу |
│ ● Claude │ ├─────────┤ ├─────────┤ ├─────────┤ ├─────────┤ │ | `review` | На ревью у другого агента |
│ ○ Codex │ │ [Task3] │ │ [Task1] │ │ [Task2] │ │ [Task0] │ │ | `completed` | Выполнена |
│ ○ Gemini │ │ │ │ └─sub │ │ │ │ │ │ | `blocked` | Заблокирована зависимостью |
│ │ │ │ │ └─sub │ │ │ │ │ │
│ [+ Add] │ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │ ### Жизненный цикл задачи
│ │ │
└──────────────┴─────────────────────────────────────────────────────┘ ```
1. Человек создаёт задачу → draft (Backlog)
2. Обсуждение в чате проекта
3. Человек перетаскивает в TODO → статус меняется на ready
4. Агент берёт задачу → in_progress
5. Агент завершает → review
6. Ревьюер проверяет → completed / возврат в in_progress
```
---
## Задачи
### Структура задачи
```yaml
Задача:
id: uuid
проект: project_id
название: "Реализовать API авторизации"
описание: "Markdown текст с деталями"
статус: draft | ready | in_progress | review | completed | blocked
# Назначение
назначен: agent_id (или null)
# Вложенные файлы
файлы:
- name: "schema.sql"
type: "text/sql"
content: "..."
- name: "mockup.png"
type: "image/png"
url: "/files/task-123/mockup.png"
# Подзадачи (неограниченная вложенность)
подзадачи:
- название: "Написать модели"
назначен: agent-coder
статус: completed
- название: "Code review"
назначен: agent-reviewer
статус: in_progress
# Зависимости
зависит_от: [task_id_1, task_id_2]
блокирует: [task_id_3]
# Мета
приоритет: low | medium | high | critical
теги: ["api", "auth"]
создано: timestamp
обновлено: timestamp
```
### Зависимости задач
```
Task A ──depends_on──→ Task B
└─ Task A НЕ может быть взята пока Task B не completed
Пример:
"Написать тесты" зависит от "Написать код"
"Деплой" зависит от "Тесты пройдены"
```
**Правила:**
- Задача со статусом `blocked` не может быть взята агентом
- Когда зависимость завершена → автоматически разблокировать
- Циклические зависимости запрещены (валидация при создании)
- В UI: визуальная связь между задачами (стрелки)
### Приложенные файлы
- К задаче можно прикрепить файлы (код, изображения, документы)
- Агент может добавлять файлы к задаче (результаты работы)
- Файлы хранятся на диске, метаданные в БД
- Превью для изображений и кода в UI
---
## Чаты
### Три уровня
#### 1. Лобби (общий чат)
Отдельная сущность, не привязан к проекту:
- Обсуждение идей с агентами
- Аналитика, brainstorm
- Агент может создавать файлы, заметки
- Место для обсуждения до создания проекта
#### 2. Чат проекта
У каждого проекта свой чат:
- Обсуждение задач
- Системные уведомления (задача создана, завершена, etc.)
- Агенты видят только чаты своих проектов
#### 3. Комментарии задачи
Внутри каждой задачи:
- Обсуждение деталей
- Код ревью
- Результаты подзадач
---
## Агенты
### Типы провайдеров (адаптеры)
| Провайдер | Описание |
|-----------|----------|
| `anthropic` | Claude API (Opus, Sonnet) |
| `openai` | GPT, Codex |
| `google` | Gemini |
| `openclaw` | Через OpenClaw Gateway (с инструментами) |
| `cli` | Claude Code CLI (без API токенов) |
### Настройки агента
```yaml
Агент:
имя: "Кодер"
slug: "coder"
провайдер: anthropic
модель: claude-sonnet-4-20250514
api_key: "sk-..." # зашифрован
системный_промпт: "Ты — backend разработчик..."
подписка:
режим: mentions # all | mentions | assigned
проекты: ["*"] # или конкретные
ограничения:
макс_параллельных: 2
таймаут: 600 # секунд
```
### Подписка на события
| Режим | Агент получает |
|-------|---------------|
| `all` | Все сообщения в подписанных проектах |
| `mentions` | Только когда @упомянут |
| `assigned` | Назначенные задачи + mentions |
---
## WebSocket протокол
### Трекер → Клиент
```
task.created — задача создана
task.updated — задача обновлена
task.ready — задача готова к выполнению (перенесена из Backlog)
task.assigned — задача назначена агенту
task.blocked — задача заблокирована зависимостью
task.unblocked — зависимость выполнена, задача разблокирована
chat.message — новое сообщение в чате
agent.status — статус агента изменился
file.attached — файл прикреплён к задаче
```
### Клиент → Трекер
```
task.take — агент берёт задачу
task.complete — агент завершил задачу
task.comment — комментарий к задаче
task.attach — прикрепить файл
chat.send — отправить сообщение в чат
agent.register — регистрация агента
agent.heartbeat — пульс
``` ```
--- ---
## Workflow: от идеи до деплоя ## Workflow: от идеи до деплоя
### Фаза 1: Инициация проекта ### Фаза 1: Идея → Проект
**Точки входа:** 1. Человек открывает Лобби
- Через главного агента (Марков) в Telegram 2. Обсуждает идею с агентом-аналитиком
- Через Web UI — кнопка "New Project" 3. Создаёт проект
- Через любого агента 4. Агент формирует BRIEF.md, REQUIREMENTS.md
**Результат:** Создаётся черновик проекта, открывается Discovery Chat. ### Фаза 2: Декомпозиция → Задачи
--- 1. На основе требований создаются задачи (черновики в Backlog)
2. Расставляются зависимости
3. Прикрепляются файлы (макеты, схемы)
4. Обсуждение в чате проекта
5. Готовые задачи переносятся в TODO
### Фаза 2: Discovery (Обсуждение) ### Фаза 3: Выполнение
**Участники:** Человек + Lead Agent 1. Задача в TODO → агент берёт → In Progress
2. Агент работает, коммитит, прикрепляет файлы
3. Создаёт подзадачу "Ревью" → другому агенту
4. Итерации до готовности
5. Задача → Done
**Цель:** Превратить размытую идею в чёткое ТЗ ### Фаза 4: Ревью и деплой
**Что делает Lead Agent:** 1. Автоматические проверки (CI/CD)
1. Задаёт уточняющие вопросы 2. Ревью агентом или человеком
2. Предлагает варианты реализации 3. Деплой
3. Указывает на риски
4. Формирует структуру
**Артефакты:**
- `BRIEF.md` — краткое описание проекта
- `REQUIREMENTS.md` — функциональные требования
- `ARCHITECTURE.md` — техническое решение
**Выход из фазы:** Человек подтверждает "Да, делаем так"
---
### Фаза 3: Planning (Декомпозиция)
**Кто делает:** Lead Agent (или человек вручную)
**Процесс:**
```
REQUIREMENTS.md → Декомпозиция → Epic → Tasks → Subtasks
```
**Пример:**
```
Epic: "Модуль авторизации"
├── Task: "Модель пользователя"
│ ├── Subtask: "Схема БД"
│ ├── Subtask: "SQLAlchemy модель"
│ └── Subtask: "Миграция"
├── Task: "API эндпоинты"
│ ├── Subtask: "POST /auth/register"
│ ├── Subtask: "POST /auth/login"
│ └── Subtask: "Tests"
└── Task: "Интеграция с frontend"
```
---
### Фаза 4: Execution (Разработка)
**Как агенты берут задачи:**
| Модель | Описание |
|--------|----------|
| **Pull** | Агент сам выбирает задачу по специализации |
| **Push** | Lead Agent назначает задачи |
| **Гибрид** | Критичные — назначаются, остальные — свободный выбор |
**Процесс работы агента:**
1. Взял задачу → "In Progress"
2. Читает контекст (Brief, Requirements, связанные задачи)
3. Работает (код, тесты, документация)
4. Коммитит в feature branch
5. Создаёт подзадачу "Review" → другому агенту
6. Ревью и итерации
7. Merge в main
---
### Фаза 5: Review & QA
**Принцип:** Никакой код не идёт в main без ревью.
**Кто ревьюит:**
- Другой агент (не автор)
- Специальный "Reviewer" агент
- Человек (для критичного)
**Автоматизация:**
- CI/CD запускает тесты
- Линтеры
- Security checks
**Escalation:** 3 итерации ревью без согласия → эскалация к Lead/Human.
---
### Фаза 6: Deploy
1. Integration тесты
2. Staging deploy
3. Human approval (опционально)
4. Production deploy
---
## Задачи и подзадачи
**Ключевой принцип:** Подзадачи внутри задачи — контекст НЕ теряется.
```
Task: "Реализовать API авторизации"
├── Subtask: "Написать модели" → Agent-1 ✓
├── Subtask: "Code review" → Agent-2 ✓
├── Subtask: "Написать тесты" → Agent-1 (in progress)
└── Subtask: "Final review" → Agent-2 (waiting)
```
Когда агент работает над подзадачей — видит всё дерево + историю.
---
## Роли агентов
| Роль | Обязанности |
|------|-------------|
| **Lead/Analyst** | Discovery, Planning, Coordination |
| **Developer** | Код, тесты |
| **Reviewer** | Code review, QA |
| **DevOps** | CI/CD, Deploy |
| **Documenter** | Документация |
---
## Типы агентов
| Тип | Описание |
|-----|----------|
| **OpenClaw** | Полноценный агент с инструментами |
| **Claude API** | Прямой вызов API |
| **Claude Code CLI** | Через CLI (без траты API токенов) |
| **Codex** | OpenAI |
| **Gemini** | Google |
| **Custom** | Любой через API |
---
## Проблема: CLI Integration
**Задача:** Использовать Claude Code CLI (авторизован через Max подписку) без траты API токенов.
**Варианты решения:**
### 1. Headless Mode (если поддерживается)
```bash
claude --message "prompt" --output result.txt
```
### 2. PTY Automation
```python
import pexpect
child = pexpect.spawn('claude')
child.sendline('Write a function...')
response = child.before
```
### 3. Session Bridge
```
Team Board → Agent Service → PTY Bridge → Claude CLI в tmux
```
### 4. MCP Integration
Если CLI поддерживает Model Context Protocol.
### 5. Гибридный подход
- Простые задачи → API (дёшево)
- Кодинг → CLI
- Роутинг по типу задачи
**Требуется исследование:** Проверить возможности `claude` CLI.
---
## Прозрачность
**Всё видно в Web UI:**
- Статус задач
- Кто над чем работает
- Коммиты
- Переписка в задачах
- Метрики
**Уведомления:**
- Задача застряла
- Нужно решение человека
- Deploy готов
---
## Настройки проекта
```yaml
Project:
name: "My Project"
git_enabled: true # default: true
git_url: "https://..."
lead_agent_id: "markov" # можно переназначить
agents: ["claude", "codex"]
```
--- ---
## Инфраструктура (уже есть) ## Инфраструктура (уже есть)
- **PostgreSQL** — БД | Сервис | Описание |
- **Thoth** — STT/TTS сервис |--------|----------|
- **Authentik** — SSO | PostgreSQL | База данных |
- **Nginx + certbot** — домены | Thoth | STT/TTS (голос↔текст) |
- **Gitea** — Git хостинг | Authentik | SSO для веб-интерфейса |
- **OpenClaw (Марков)** — главный агент | Nginx + certbot | Домены и SSL |
| Gitea | Git хостинг |
| OpenClaw (Марков) | Главный агент с инструментами |
| Redis | Очереди и pub/sub |
--- ---
@ -299,22 +339,25 @@ Project:
1. Как интегрировать CLI-агентов (Claude Code, Cline)? 1. Как интегрировать CLI-агентов (Claude Code, Cline)?
2. Workspace для агентов — общий или изолированный? 2. Workspace для агентов — общий или изолированный?
3. Реалтайм прогресс работы агента? 3. Прогресс работы агента в реалтайме?
4. Лимиты: макс агентов, макс задач? 4. Биллинг/учёт использования API?
5. Биллинг/учёт использования API? 5. Шаблоны агентов — как быстро создать нового?
--- ---
## Приоритеты реализации ## Приоритеты реализации
1. [ ] Базовый UI: проекты, доска 1. [ ] Tracker: базовый WebSocket сервер
2. [ ] Tasks Service: CRUD, подзадачи 2. [ ] Tracker: проекты, задачи, подзадачи
3. [ ] Agents Service: регистрация 3. [ ] Tracker: зависимости задач
4. [ ] Chat Service 4. [ ] Tracker: чаты (лобби + проект)
5. [ ] Git интеграция 5. [ ] Tracker: файлы в задачах
6. [ ] CLI Bridge для Claude Code 6. [ ] Web Client: авторизация (Authentik)
7. [ ] Подключение реальных агентов 7. [ ] Web Client: канбан-доска
8. [ ] Web Client: чат
9. [ ] Шаблон агента
10. [ ] Подключение первого агента (OpenClaw)
--- ---
*Документ для обсуждения. Финальная архитектура — отдельно.* *Документ для обсуждения и аналитики. Обновляется по мере развития идей.*