docs: адаптеры, типы задач, ревью, БД

- Разделение агент/адаптер (capabilities на адаптере)
- JSON конфиг для разных провайдеров
- Типы задач: coding, analytics, design, testing, docs
- Не каждая задача = PR
- Флоу ревью для задач с PR и без
- Итерации ревью
- Схема БД: adapters, agents, tasks, dependencies, files
This commit is contained in:
Markov 2026-02-15 18:14:29 +01:00
parent cf2289516e
commit 51a091148f

215
IDEAS.md
View File

@ -128,6 +128,13 @@ team-board/
описание: "Markdown текст с деталями" описание: "Markdown текст с деталями"
статус: draft | ready | in_progress | review | completed | blocked статус: draft | ready | in_progress | review | completed | blocked
# Тип задачи (флаги/теги)
теги: ["кодинг", "api", "auth"]
тип: coding | analytics | design | testing | docs | other
# PR (только для задач с кодом)
требует_pr: true | false # автоматически по типу задачи
# Назначение # Назначение
назначен: agent_id (или null) назначен: agent_id (или null)
@ -215,39 +222,91 @@ Task A ──depends_on──→ Task B
--- ---
## Агенты ## Агенты и адаптеры
### Типы провайдеров (адаптеры) ### Адаптер (провайдер)
| Провайдер | Описание | Адаптер — это подключение к конкретной нейросети. Один адаптер может использоваться несколькими агентами.
|-----------|----------|
| `anthropic` | Claude API (Opus, Sonnet) |
| `openai` | GPT, Codex |
| `google` | Gemini |
| `openclaw` | Через OpenClaw Gateway (с инструментами) |
| `cli` | Claude Code CLI (без API токенов) |
### Настройки агента ```yaml
Адаптер:
id: uuid
название: "Claude Opus"
провайдер: anthropic | openai | google | openclaw | cli
# Конфиг — JSON поле, разное для каждого провайдера
config:
# Anthropic
api_key: "sk-ant-..."
model: "claude-opus-4-5"
max_tokens: 8192
# Или OpenAI
api_key: "sk-..."
model: "gpt-4"
organization: "org-..."
# Или OpenClaw
gateway_url: "http://localhost:18789"
gateway_token: "..."
agent_id: "main"
# Или CLI
command: "claude"
working_dir: "/workspace"
# Возможности адаптера (что умеет эта нейросеть)
capabilities: ["coding", "analytics", "review", "design", "docs", "testing"]
```
**Важно:** Capabilities привязаны к адаптеру, не к агенту. Потому что возможности определяются нейросетью.
### Агент
Агент — это "личность" с ролью, которая использует адаптер.
```yaml ```yaml
Агент: Агент:
id: uuid
имя: "Кодер" имя: "Кодер"
slug: "coder" slug: "coder"
провайдер: anthropic
модель: claude-sonnet-4-20250514
api_key: "sk-..." # зашифрован
# Привязка к адаптеру
адаптер_id: uuid
# Роль
системный_промпт: "Ты — backend разработчик..." системный_промпт: "Ты — backend разработчик..."
# Подписка
подписка: подписка:
режим: mentions # all | mentions | assigned режим: mentions # all | mentions | assigned
проекты: ["*"] # или конкретные проекты: ["*"] # или конкретные
ограничения: # Ограничения
макс_параллельных: 2 макс_параллельных: 2
таймаут: 600 # секунд таймаут: 600 # секунд
``` ```
### Связка: типы задач ↔ адаптеры
```
Задача с тегом "coding" → только агенты с адаптером, у которого capability "coding"
Задача с тегом "design" → только агенты с адаптером, у которого capability "design"
Задача с тегом "analytics" → только агенты с адаптером, у которого capability "analytics"
```
Агент-дизайнер НЕ возьмёт задачу на кодинг — у его адаптера нет такой возможности.
### Типы провайдеров
| Провайдер | Описание | Конфиг |
|-----------|----------|--------|
| `anthropic` | Claude API | api_key, model, max_tokens |
| `openai` | GPT, Codex | api_key, model, organization |
| `google` | Gemini | api_key, model |
| `openclaw` | OpenClaw Gateway | gateway_url, gateway_token, agent_id |
| `cli` | Claude Code CLI | command, working_dir |
### Подписка на события ### Подписка на события
| Режим | Агент получает | | Режим | Агент получает |
@ -288,6 +347,64 @@ agent.heartbeat — пульс
--- ---
## Ревью и PR
### Не каждая задача = PR
| Тип задачи | Нужен PR? |
|------------|-----------|
| coding | Да |
| testing | Да |
| analytics | Нет — результат в виде файла/отчёта |
| design | Нет — результат в виде файла |
| docs | Возможно — зависит от проекта |
Поле ребует_pr` определяется автоматически по типу, но можно переопределить вручную.
### Флоу ревью (для задач с PR)
```
1. Агент работает → коммитит в feature branch
2. Создаёт PR в Gitea
3. Сдвигает задачу в Review
4. Трекер назначает ревьюера (другой агент, НЕ автор)
5. Ревьюер смотрит PR, пишет комментарии В ЗАДАЧЕ
6. Ок → Approve → Done, PR мержится
7. Не ок → замечания → обратно In Progress → автор исправляет
```
### Флоу ревью (для задач без PR)
```
1. Агент работает → прикрепляет результат (файл/отчёт) к задаче
2. Сдвигает в Review
3. Ревьюер проверяет результат
4. Ок → Done
5. Не ок → замечания → обратно In Progress
```
### Правила ревью
- Автор ≠ ревьюер (всегда)
- Максимум 3 итерации — потом эскалация к человеку
- Все комментарии в задаче (единый контекст)
- Чат проекта = лог событий (всё видно)
### Итерации ревью
```yaml
review_history:
- iteration: 1
reviewer: analyst
status: changes_requested
comments: ["Нужна валидация", "Нет тестов"]
- iteration: 2
reviewer: analyst
status: approved
```
---
## Workflow: от идеи до деплоя ## Workflow: от идеи до деплоя
### Фаза 1: Идея → Проект ### Фаза 1: Идея → Проект
@ -335,6 +452,72 @@ agent.heartbeat — пульс
--- ---
## База данных (ключевые таблицы)
```sql
-- Адаптеры (подключения к нейросетям)
CREATE TABLE adapters (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
name TEXT NOT NULL,
provider TEXT NOT NULL, -- anthropic, openai, google, openclaw, cli
config JSONB NOT NULL, -- всё специфичное для провайдера
capabilities TEXT[] NOT NULL, -- ["coding", "analytics", "review", ...]
created_at TIMESTAMPTZ DEFAULT NOW()
);
-- Агенты (личности с ролями)
CREATE TABLE agents (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
name TEXT NOT NULL,
slug TEXT UNIQUE NOT NULL,
adapter_id UUID REFERENCES adapters(id),
system_prompt TEXT,
subscription_mode TEXT DEFAULT 'mentions', -- all, mentions, assigned
max_concurrent INT DEFAULT 1,
timeout_seconds INT DEFAULT 600,
status TEXT DEFAULT 'idle',
created_at TIMESTAMPTZ DEFAULT NOW()
);
-- Задачи
CREATE TABLE tasks (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
project_id UUID REFERENCES projects(id),
parent_id UUID REFERENCES tasks(id), -- подзадачи
title TEXT NOT NULL,
description TEXT,
status TEXT DEFAULT 'draft',
task_type TEXT DEFAULT 'other', -- coding, analytics, design, testing, docs
tags TEXT[],
requires_pr BOOLEAN DEFAULT FALSE,
assigned_agent_id UUID REFERENCES agents(id),
priority TEXT DEFAULT 'medium',
pr_url TEXT,
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW()
);
-- Зависимости задач
CREATE TABLE task_dependencies (
task_id UUID REFERENCES tasks(id) ON DELETE CASCADE,
depends_on_id UUID REFERENCES tasks(id) ON DELETE CASCADE,
PRIMARY KEY (task_id, depends_on_id)
);
-- Файлы задач
CREATE TABLE task_files (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
task_id UUID REFERENCES tasks(id) ON DELETE CASCADE,
filename TEXT NOT NULL,
mime_type TEXT,
file_path TEXT NOT NULL,
uploaded_by UUID, -- agent_id или null (человек)
created_at TIMESTAMPTZ DEFAULT NOW()
);
```
---
## Открытые вопросы ## Открытые вопросы
1. Как интегрировать CLI-агентов (Claude Code, Cline)? 1. Как интегрировать CLI-агентов (Claude Code, Cline)?