docs: agent integration research (runners model, contract, SDK)
This commit is contained in:
parent
bea657938e
commit
74f00799a1
192
AGENTS-INTEGRATION.md
Normal file
192
AGENTS-INTEGRATION.md
Normal file
@ -0,0 +1,192 @@
|
||||
# Интеграция агентов — ресёрч
|
||||
|
||||
## Аналогия с GitLab Runners
|
||||
|
||||
| GitLab | Team Board |
|
||||
|--------|------------|
|
||||
| Runner | Agent Instance |
|
||||
| Runner Token | Agent Token |
|
||||
| `.gitlab-ci.yml` | Контракт (contract.json) |
|
||||
| Job | Task |
|
||||
| Executor (docker/shell) | Adapter (OpenClaw/Anthropic/CLI) |
|
||||
| Runner registration | `POST /api/v1/agents/register` |
|
||||
| Runner tags | Agent capabilities |
|
||||
|
||||
## Архитектура подключения
|
||||
|
||||
```
|
||||
1. Админ создаёт Agent в UI → получает registration token
|
||||
2. На сервере запускается Agent Instance с этим токеном
|
||||
3. Agent Instance регистрируется: POST /ws?token=<reg_token>
|
||||
4. Tracker подтверждает → выдаёт session token
|
||||
5. Agent слушает задачи через WebSocket
|
||||
6. При получении задачи → выполняет через адаптер
|
||||
```
|
||||
|
||||
## Контракт агента (contract)
|
||||
|
||||
Файл, описывающий что агент умеет и как с ним взаимодействовать.
|
||||
Хранится в трекере, привязан к конкретному агенту.
|
||||
|
||||
```json
|
||||
{
|
||||
"version": "1",
|
||||
"capabilities": ["coding", "review", "docs"],
|
||||
"max_concurrent_tasks": 2,
|
||||
"timeout_seconds": 600,
|
||||
"accept_task_types": ["coding", "review"],
|
||||
"tools": {
|
||||
"file_read": true,
|
||||
"file_write": true,
|
||||
"git_commit": true,
|
||||
"git_pr": true,
|
||||
"web_search": false,
|
||||
"shell_exec": false
|
||||
},
|
||||
"limits": {
|
||||
"max_file_size_mb": 10,
|
||||
"max_files_per_task": 20,
|
||||
"max_comment_length": 5000
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Операции агента (через WebSocket)
|
||||
|
||||
Агент должен уметь:
|
||||
|
||||
### Задачи
|
||||
| Операция | WS Event | Описание |
|
||||
|----------|----------|----------|
|
||||
| Получить задачу | `task.assigned` (входящее) | Трекер назначает задачу агенту |
|
||||
| Взять задачу | `task.take` | Агент сам берёт задачу из TODO |
|
||||
| Обновить статус | `task.status` | draft→ready→in_progress→review→completed |
|
||||
| Обновить описание | `task.update` | Изменить title, description |
|
||||
| Создать задачу | `task.create` | Агент создаёт подзадачу |
|
||||
| Создать подзадачу | `task.create` (с parent_id) | Декомпозиция |
|
||||
| Добавить зависимость | `task.dependency.add` | TEA-3 depends on TEA-1 |
|
||||
|
||||
### Комментарии
|
||||
| Операция | WS Event | Описание |
|
||||
|----------|----------|----------|
|
||||
| Добавить комментарий | `task.comment` | Текст, code snippets |
|
||||
| Читать комментарии | `task.comments.list` | История обсуждения |
|
||||
|
||||
### Файлы
|
||||
| Операция | WS Event / HTTP | Описание |
|
||||
|----------|-----------------|----------|
|
||||
| Загрузить файл | `POST /api/v1/tasks/{id}/files` | Результат работы |
|
||||
| Скачать файл | `GET /api/v1/tasks/{id}/files/{fid}` | Входные данные |
|
||||
| Список файлов | `task.files.list` | Что есть в задаче |
|
||||
|
||||
### Чат
|
||||
| Операция | WS Event | Описание |
|
||||
|----------|----------|----------|
|
||||
| Сообщение в чат | `chat.send` | Обсуждение |
|
||||
| Читать чат | `chat.history` | Контекст |
|
||||
|
||||
## Страница настройки в UI
|
||||
|
||||
### /settings/agents
|
||||
```
|
||||
┌─────────────────────────────────────────────┐
|
||||
│ Агенты [+ Создать] │
|
||||
├─────────────────────────────────────────────┤
|
||||
│ ● Кодер online 2 tasks │
|
||||
│ claude-opus coding, review │
|
||||
│ Подключён: 2 часа назад │
|
||||
│ │
|
||||
│ ● Аналитик offline │
|
||||
│ gpt-4 analytics, docs │
|
||||
│ Последний раз: вчера │
|
||||
│ │
|
||||
│ ○ Тестировщик не зарегистрирован │
|
||||
│ Токен: tb-agent-abc123... [Копировать] │
|
||||
└─────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### Создание агента
|
||||
1. Имя + slug
|
||||
2. Системный промпт (роль)
|
||||
3. Контракт (capabilities, tools, limits)
|
||||
4. Генерация registration token
|
||||
5. Инструкция по запуску:
|
||||
```bash
|
||||
team-board-agent register \
|
||||
--tracker wss://team.uix.su/ws \
|
||||
--token tb-agent-abc123... \
|
||||
--adapter anthropic \
|
||||
--api-key sk-ant-...
|
||||
```
|
||||
|
||||
## Регистрация и аутентификация
|
||||
|
||||
### Шаг 1: Создание (UI)
|
||||
- Админ создаёт агента в UI
|
||||
- Генерируется одноразовый registration token
|
||||
- Токен показывается один раз
|
||||
|
||||
### Шаг 2: Регистрация (Agent Instance)
|
||||
```
|
||||
Agent → Tracker: ws connect + registration token
|
||||
Tracker: validates token, marks agent as registered
|
||||
Tracker → Agent: session token (долгоживущий)
|
||||
Agent: сохраняет session token локально
|
||||
```
|
||||
|
||||
### Шаг 3: Работа
|
||||
```
|
||||
Agent → Tracker: ws connect + session token
|
||||
Tracker: validates, marks online
|
||||
Agent ←→ Tracker: events (tasks, chat, files)
|
||||
```
|
||||
|
||||
### Отзыв токена
|
||||
- Админ в UI нажимает "Отозвать"
|
||||
- Tracker закрывает WebSocket
|
||||
- Agent не может переподключиться
|
||||
- Нужна новая регистрация
|
||||
|
||||
## SDK (Python)
|
||||
|
||||
```python
|
||||
from team_board import Agent, AnthropicAdapter
|
||||
|
||||
agent = Agent(
|
||||
tracker_url="wss://team.uix.su/ws",
|
||||
token="tb-session-xyz...",
|
||||
)
|
||||
|
||||
@agent.on_task
|
||||
async def handle_task(task):
|
||||
# Читаем описание и файлы
|
||||
files = await task.list_files()
|
||||
|
||||
# Работаем через адаптер
|
||||
result = await agent.adapter.complete(
|
||||
system=agent.system_prompt,
|
||||
messages=[{"role": "user", "content": task.description}],
|
||||
)
|
||||
|
||||
# Добавляем комментарий
|
||||
await task.comment(result.text)
|
||||
|
||||
# Загружаем файл
|
||||
await task.upload_file("result.py", result.code)
|
||||
|
||||
# Меняем статус
|
||||
await task.set_status("review")
|
||||
|
||||
agent.run()
|
||||
```
|
||||
|
||||
## Приоритеты реализации
|
||||
|
||||
1. [ ] Tracker: token generation + WS auth
|
||||
2. [ ] Tracker: agent events (task.take, task.status, task.comment, task.create)
|
||||
3. [ ] Tracker: file upload/download API
|
||||
4. [ ] UI: /settings/agents page
|
||||
5. [ ] SDK: Python package (team-board-agent)
|
||||
6. [ ] SDK: AnthropicAdapter + OpenClawAdapter
|
||||
7. [ ] Первый агент: тестовый (echo/summarize)
|
||||
8. [ ] Первый реальный агент: Кодер (через OpenClaw/Claude)
|
||||
Loading…
Reference in New Issue
Block a user