docs: адаптеры, типы задач, ревью, БД
- Разделение агент/адаптер (capabilities на адаптере) - JSON конфиг для разных провайдеров - Типы задач: coding, analytics, design, testing, docs - Не каждая задача = PR - Флоу ревью для задач с PR и без - Итерации ревью - Схема БД: adapters, agents, tasks, dependencies, files
This commit is contained in:
parent
cf2289516e
commit
51a091148f
211
IDEAS.md
211
IDEAS.md
@ -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)?
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user