Головна/AI Інженерія/Блупринти/Мультиагентні системи/Self-Healing CI/CD агент: автоматическая локализация и исправление упавших тестов
До карток розділу «Мультиагентні системи»
Мультиагентні системи(ТЗ 4 из 6)
ТЗ: Self-Healing CI/CD агент: автоматическая локализация и исправление упавших тестов
Мультиагентні системи1 шагов • +5 XP

ТЗ: Self-Healing CI/CD агент: автоматическая локализация и исправление упавших тестов

Коммерческая спецификация создания автономного агента самовосстановления для GitHub Actions: перехват падений юнит-тестов Vitest, локализация регрессии, генерация патча и создание Pull Request с объяснением.

~12 ч работыУровень: SeniorGitHub Actions WorkflowVitest JSON ReporterAnthropic Claude 3.5 Sonnet / GeminiGit Patch AutomationOctokit (GitHub API)
+5 XP за шаг
Выполнено 0 из 1 шагов (0%)
Трудозатраты~12 рабочих часов
Фриланс вилка~$540 – $900 (€480 – €840)
Оценка веб-студии~$1,140 – $1,920 (€1080 – €1800)

ТЗ заказчика (исходный бриф):

Инженеры не должны тратить утро на починку тривиальных опечаток в тестах. Если упал юнит-тест, агент должен сам понять ошибку, проверить фикс запуском тестов и предложить готовый PR.
Ключевые требования:
  • •Перехват статуса failure() в GitHub Actions и парсинг test-results.json
  • •Строгое системное ограничение: агенту РАЗРЕШЕНО править только файл реализации, файл теста трогать ЗАПРЕЩЕНО
  • •Верификация: локальный перезапуск тестов перед созданием Pull Request
  • •Генерация ветки auto-fix/<branch-name> и открытие PR через Octokit
Ограничения проекта:
  • •Никаких прямых пушей в main / develop
  • •Агент не должен пытаться исправить архитектурные переломы, затрагивающие более 2 файлов
Критерии приёмки (KPI):
  • Успешное закрытие рутинных багов тестов > 75%
  • Время от падения CI до готового PR < 2 минут

Пошаговое практическое руководство по ТЗ

Подробный разбор архитектуры, код реализации и советы эксперта по каждому этапу:

1
Этап 1 из 1

GitHub Actions Workflow и Node.js раннер агента восстановления

~60 мин

Практическое руководство:

Создать .github/workflows/self-heal.yml и скрипт scripts/self-heal.mjs, читающий отчет Vitest, запрашивающий фикс у LLM и применяющий git diff.

Важные технические нюансы и подводные камни:

Убедитесь, что GITHUB_TOKEN имеет права contents: write и pull-requests: write.

Архитектурная база (Почему выбрано такое решение):

Автоматическая верификация фикса повторным запуском pnpm test гарантирует, что агент не создает галлюцинированных PR с нерабочим кодом.

Совет эксперта (Best Practice):

Всегда проверяйте git diff перед коммитом, чтобы убедиться, что изменены только ожидаемые строки.

Ожидаемый артефакт этапа:

Скрипт самовосстановления CI с интеграцией GitHub API.

JAVASCRIPT
// scripts/self-heal.mjs
import fs from 'fs'
import { GoogleGenAI } from '@google/genai'
import { execSync } from 'child_process'

const report = JSON.parse(fs.readFileSync('test-results.json', 'utf-8'))
const failedTest = report.testResults.find(t => t.status === 'failed')

if (!failedTest) {
  console.log('[Self-Heal] Ошибок не обнаружено. Выход.')
  process.exit(0)
}

const ai = new GoogleGenAI({ apiKey: process.env.GEMINI_API_KEY })
const sourceFile = failedTest.assertionResults[0].ancestorTitles[0] // Путь к файлу
const errorLog = failedTest.message

const prompt = `Ты — Senior Software Engineer в режиме Self-Healing CI.
Упал тест: ${failedTest.name}
Лог ошибки:
${errorLog}

Файл реализации:
${fs.readFileSync(sourceFile, 'utf-8')}

Задача: Исправь ТОЛЬКО файл реализации. Тест менять КАТЕГОРИЧЕСКИ ЗАПРЕЩЕНО.
Верни только готовый код файла внутри блока \`\`\`typescript ... \`\`\`.`

const response = await ai.models.generateContent({
  model: 'gemini-2.5-flash',
  contents: prompt
})

const codeMatch = response.text.match(/\`\`\`typescript([\s\S]*?)\`\`\`/)
if (codeMatch) {
  fs.writeFileSync(sourceFile, codeMatch[1].trim())
  console.log(`[Self-Heal] Файл ${sourceFile} успешно обновлен.`)
  
  // Проверка фикса
  execSync('pnpm test', { stdio: 'inherit' })
  console.log('[Self-Heal] Тесты зеленые! Готовим PR.')
}

Типичные грабли на этом ТЗ

1 антипаттерна

Что сдаём клиенту (Deliverables)

Чек-лист сдачи
GitHub Actions пайплайн перехвата сбоев
Раннер самовосстановления на Gemini / Claude
Автоматическое открытие Pull Request с описанием фикса