Назначение: Сбор и объединение результатов от всех агентов в итоговый отчёт
{
"task_id": str,
"task_type": str,
"execution_plan": ExecutionPlan,
"agent_results": List[AgentResult],
"context": Context
}
AgentResult:
{
"agent_name": str,
"task_description": str,
"status": "SUCCESS" | "PARTIAL" | "ERROR",
"output": Any,
"duration": float, # секунды
"tokens_used": int,
"errors": List[str],
"warnings": List[str],
"metadata": dict
}
def calculate_overall_status(results: List[AgentResult]) -> str:
"""
Определяет общий статус выполнения задачи.
"""
if all(r.status == "SUCCESS" for r in results):
return "SUCCESS" # ✅ Всё отлично
if any(r.status == "ERROR" for r in results):
# Проверить критичность ошибок
critical_errors = [r for r in results
if r.status == "ERROR" and r.metadata.get("critical")]
if critical_errors:
return "FAILED" # ❌ Критические ошибки
return "PARTIAL" # ⚠️ Некритичные ошибки, но есть результат
if any(r.status == "PARTIAL" for r in results):
return "PARTIAL" # ⚠️ Частичный успех
return "SUCCESS"
def collect_artifacts(results: List[AgentResult]) -> dict:
"""
Собирает все созданные файлы, проекты, документы.
"""
artifacts = {
"created_files": [],
"modified_files": [],
"created_projects": [],
"created_docs": [],
"test_results": {},
"deployments": []
}
for result in results:
if result.agent_name == "Projector":
artifacts["created_projects"].extend(
result.output.get("projects", [])
)
elif result.agent_name == "Developer":
artifacts["created_files"].extend(
result.output.get("files", [])
)
elif result.agent_name == "Tester":
artifacts["test_results"] = result.output
elif result.agent_name == "Deployer":
artifacts["deployments"].append(
result.output.get("deployment_info")
)
elif result.agent_name == "Documenter":
artifacts["created_docs"].extend(
result.output.get("documents", [])
)
return artifacts
def calculate_metrics(results: List[AgentResult]) -> dict:
"""
Вычисляет общие метрики выполнения.
"""
return {
"total_agents": len(results),
"successful_agents": len([r for r in results if r.status == "SUCCESS"]),
"failed_agents": len([r for r in results if r.status == "ERROR"]),
"total_duration": sum(r.duration for r in results),
"avg_duration_per_agent": sum(r.duration for r in results) / len(results),
"total_tokens": sum(r.tokens_used for r in results),
"tokens_per_agent": {r.agent_name: r.tokens_used for r in results},
"total_errors": sum(len(r.errors) for r in results),
"total_warnings": sum(len(r.warnings) for r in results),
}
def generate_recommendations(results: List[AgentResult], artifacts: dict) -> List[str]:
"""
Генерирует рекомендации на основе результатов.
"""
recommendations = []
# Проверить тесты
if "test_results" in artifacts and artifacts["test_results"]:
tests = artifacts["test_results"]
if tests.get("coverage", 100) < 80:
recommendations.append(
f"Покрытие тестами: {tests['coverage']}% (рекомендуется ≥80%)"
)
# Проверить ошибки
error_results = [r for r in results if r.status == "ERROR"]
if error_results:
recommendations.append(
f"Исправить ошибки в: {', '.join(r.agent_name for r in error_results)}"
)
# Проверить производительность
slow_agents = [r for r in results if r.duration > 60]
if slow_agents:
recommendations.append(
f"Оптимизировать: {', '.join(r.agent_name for r in slow_agents)} "
f"(выполнение >1 минуты)"
)
# Проверить документацию
if not any(r.agent_name == "Documenter" for r in results):
recommendations.append("Создать документацию для проекта")
# Проверить деплой
if not any(r.agent_name == "Deployer" for r in results):
recommendations.append("Развернуть на production (если готово)")
return recommendations
🎉 ЗАДАЧА ВЫПОЛНЕНА
**Задача:** {{task_description}}
**Тип:** {{task_type}}
**Статус:** ✅ Успешно
---
## 📊 Сводка
| Метрика | Значение |
|---------|----------|
| Агентов задействовано | {{total_agents}} |
| Успешно выполнено | {{successful_agents}}/{{total_agents}} |
| Время выполнения | {{duration}} |
| Токены использованы | {{total_tokens}} |
---
## 📦 Результаты
### Созданные проекты:
{{#created_projects}}
- **{{name}}** ({{path}})
- Структура: {{components}}
- Размер: {{size}}
{{/created_projects}}
### Созданные файлы:
{{#created_files}}
- `{{path}}` ({{lines}} строк)
{{/created_files}}
### Документация:
{{#created_docs}}
- `{{path}}`
{{/created_docs}}
### Тесты:
{{#if test_results}}
- Пройдено: {{test_results.passed}}/{{test_results.total}}
- Покрытие: {{test_results.coverage}}%
{{/if}}
---
## 💡 Рекомендации
{{#recommendations}}
- {{.}}
{{/recommendations}}
---
## 🔍 Детали выполнения
{{#agent_results}}
### {{agent_name}}
- ✅ Статус: {{status}}
- ⏱️ Время: {{duration}}с
- 📝 Задача: {{task_description}}
- 📦 Результат: {{output_summary}}
{{/agent_results}}
⚠️ ЗАДАЧА ВЫПОЛНЕНА ЧАСТИЧНО
**Задача:** {{task_description}}
**Статус:** ⚠️ С замечаниями
---
## 📊 Сводка
| Метрика | Значение |
|---------|----------|
| Успешно | {{successful_agents}}/{{total_agents}} |
| С ошибками | {{failed_agents}} |
| Время | {{duration}} |
---
## ⚠️ Проблемы
{{#errors}}
### {{agent_name}}
**Ошибка:** {{error_message}}
**Влияние:** {{impact}}
**Решение:** {{solution}}
{{/errors}}
---
## 📦 Результаты
[То что удалось выполнить...]
---
## 🔧 Что нужно сделать
{{#todos}}
- [ ] {{.}}
{{/todos}}
❌ ЗАДАЧА НЕ ВЫПОЛНЕНА
**Задача:** {{task_description}}
**Статус:** ❌ Ошибка
---
## 🚨 Критические ошибки
{{#critical_errors}}
### {{agent_name}}
**Ошибка:**
{{error_details}}
**Лог:**
{{error_log}}
**Что сделано для восстановления:**
{{#recovery_attempts}}
- {{.}}
{{/recovery_attempts}}
{{/critical_errors}}
---
## 🔧 План восстановления
1. {{recovery_step_1}}
2. {{recovery_step_2}}
3. {{recovery_step_3}}
---
## 📞 Нужна помощь?
Обратись к:
- **Recovery** агенту для автоматического восстановления
- **Architect** для архитектурных решений
- **Administrator** для системных проблем
Вход:
{
"task_id": "uuid-123",
"task_type": "CREATE_PROJECT",
"agent_results": [
{
"agent_name": "Projector",
"status": "SUCCESS",
"duration": 2.3,
"tokens_used": 1200,
"output": {
"project": "projects/analytics/",
"components": ["design", "management", "solution", "infrastructure"]
}
},
{
"agent_name": "Designer",
"status": "SUCCESS",
"duration": 15.7,
"tokens_used": 3400,
"output": {
"architecture": "design/ARCHITECTURE.md",
"database": {"tables": 5, "relations": 3}
}
},
# ... остальные агенты
]
}
Выход:
🎉 ЗАДАЧА ВЫПОЛНЕНА
**Задача:** Создать проект analytics
**Тип:** CREATE_PROJECT
**Статус:** ✅ Успешно
---
## 📊 Сводка
| Метрика | Значение |
|---------|----------|
| Агентов задействовано | 5 |
| Успешно выполнено | 5/5 |
| Время выполнения | 2м 15с |
| Токены использованы | 12,450 |
---
## 📦 Результаты
### Созданные проекты:
- **analytics** (projects/analytics/)
- Структура: design, management, solution, infrastructure
- Компоненты: 4
### Созданные файлы:
- `design/ARCHITECTURE.md` (150 строк)
- `design/DATABASE.md` (80 строк)
- `solution/mvp/app.py` (200 строк)
- `solution/mvp/pages/*.py` (5 файлов, 400 строк)
- `tests/test_basic.py` (50 строк)
### Документация:
- `design/PROJECT.md`
- `management/README.md`
- `management/CHANGELOG.md`
### Тесты:
- Пройдено: 8/8
- Покрытие: 75%
---
## 💡 Рекомендации
- Увеличить покрытие тестами до ≥80%
- Развернуть на dev окружение для тестирования
- Настроить CI/CD для автоматического тестирования
---
## 🔍 Детали выполнения
### Projector
- ✅ Статус: SUCCESS
- ⏱️ Время: 2.3с
- 📝 Задача: Создать структуру проекта analytics
- 📦 Результат: projects/analytics/ с 4 компонентами
### Designer
- ✅ Статус: SUCCESS
- ⏱️ Время: 15.7с
- 📝 Задача: Спроектировать архитектуру
- 📦 Результат: ARCHITECTURE.md (5 таблиц БД, 3 связи)
[...]
Статус: ✅ Готов к использованию