code-review-agent/README.md
Primakov Alexandr Alexandrovich 09cdd06307 init
2025-10-12 23:15:09 +03:00

8.9 KiB
Raw Blame History

AI Code Review Agent 🤖

AI агент для автоматического ревью Pull Request с поддержкой Gitea, GitHub и Bitbucket.

Работает на LangChain/LangGraph с локальной LLM через Ollama.

🌟 Особенности

  • Поддержка множества Git платформ: Gitea (приоритет), GitHub, Bitbucket
  • 🤖 AI-анализ кода: использует Ollama с моделью codellama
  • 🔄 Real-time обновления: WebSocket для отслеживания прогресса
  • 🎯 Умный анализ: находит баги, проблемы безопасности, нарушения best practices
  • 🌐 Современный UI: React + TypeScript + Tailwind CSS
  • 📊 Дашборд: статистика и мониторинг ревью
  • 🪝 Webhook интеграция: автоматический запуск при создании/обновлении PR

🏗️ Архитектура

┌─────────────┐      ┌──────────────┐      ┌─────────────┐
│  Git Platform│─────▶│   Backend    │─────▶│   Ollama    │
│  (Webhook)  │      │  FastAPI +   │      │  (codellama)│
└─────────────┘      │  LangGraph   │      └─────────────┘
                     └──────┬───────┘
                            │
                            ▼
                     ┌──────────────┐
                     │   Frontend   │
                     │  React + WS  │
                     └──────────────┘

📋 Требования

  • Python 3.11+
  • Node.js 18+
  • Ollama (установлен и запущен)

🚀 Быстрый старт

1. Установка Ollama и модели

# Установите Ollama с https://ollama.ai/

# Загрузите модель codellama
ollama pull codellama

# Запустите Ollama
ollama serve

2. Backend (FastAPI)

cd backend

# Создайте виртуальное окружение
python -m venv venv
source venv/bin/activate  # На Windows: venv\Scripts\activate

# Установите зависимости
pip install -r requirements.txt

# Создайте .env файл
cp .env.example .env

# Отредактируйте .env и установите:
# - SECRET_KEY (генерируйте случайную строку)
# - ENCRYPTION_KEY (генерируйте случайную строку)

# Запустите сервер
python -m uvicorn app.main:app --reload --host 0.0.0.0 --port 8000

Backend будет доступен на http://localhost:8000

Swagger документация: http://localhost:8000/docs

3. Frontend (React)

cd frontend

# Установите зависимости
npm install

# Запустите dev сервер
npm run dev

Frontend будет доступен на http://localhost:5173

🔧 Настройка

Backend (.env)

# Ollama
OLLAMA_BASE_URL=http://localhost:11434
OLLAMA_MODEL=codellama

# Database
DATABASE_URL=sqlite+aiosqlite:///./review.db

# Security
SECRET_KEY=your-secret-key-here
ENCRYPTION_KEY=your-encryption-key-here

# Server
HOST=0.0.0.0
PORT=8000
DEBUG=True

# CORS
CORS_ORIGINS=http://localhost:5173,http://localhost:3000

Frontend (.env)

VITE_API_URL=http://localhost:8000
VITE_WS_URL=ws://localhost:8000

📖 Использование

1. Добавление репозитория

  1. Откройте UI: http://localhost:5173
  2. Перейдите на страницу Репозитории
  3. Нажмите + Добавить репозиторий
  4. Заполните форму:
    • Название: имя вашего проекта
    • Платформа: Gitea / GitHub / Bitbucket
    • URL: полный URL репозитория
    • API токен: токен доступа к Git платформе

2. Настройка webhook в Gitea

  1. Скопируйте Webhook URL из карточки репозитория
  2. В Gitea: Settings → Webhooks → Add Webhook
  3. Вставьте URL
  4. Выберите события: Pull Request
  5. Сохраните

3. Создание Pull Request

  1. Создайте PR в вашем репозитории
  2. Webhook автоматически запустит ревью
  3. Следите за прогрессом в UI (страница Ревью)
  4. Комментарии появятся в PR автоматически

🎯 Что анализирует AI

  • 🐛 Потенциальные баги: логические ошибки, null/undefined
  • 🔒 Безопасность: SQL injection, XSS, утечки данных
  • 📝 Best practices: SOLID, чистый код, паттерны
  • Производительность: неэффективные алгоритмы, утечки памяти
  • 📖 Читаемость: понятность кода, комментарии

📊 API Endpoints

Repositories

  • GET /api/repositories - список репозиториев
  • POST /api/repositories - добавить репозиторий
  • PUT /api/repositories/{id} - обновить
  • DELETE /api/repositories/{id} - удалить

Reviews

  • GET /api/reviews - список ревью
  • GET /api/reviews/{id} - детали ревью
  • POST /api/reviews/{id}/retry - повторить ревью
  • GET /api/reviews/stats/dashboard - статистика

Webhooks

  • POST /api/webhooks/gitea/{repository_id} - Gitea webhook
  • POST /api/webhooks/github/{repository_id} - GitHub webhook
  • POST /api/webhooks/bitbucket/{repository_id} - Bitbucket webhook

WebSocket

  • ws://localhost:8000/ws/reviews - real-time обновления

🛠️ Разработка

Backend

cd backend

# Запуск с hot reload
uvicorn app.main:app --reload

# Миграции (если используется Alembic)
alembic upgrade head

Frontend

cd frontend

# Dev сервер
npm run dev

# Сборка
npm run build

# Предпросмотр сборки
npm run preview

# Линтинг
npm run lint

🗂️ Структура проекта

platform/review/
├── backend/
│   ├── app/
│   │   ├── agents/         # LangGraph агенты
│   │   ├── api/            # API endpoints
│   │   ├── models/         # Database модели
│   │   ├── schemas/        # Pydantic схемы
│   │   ├── services/       # Git платформы
│   │   ├── webhooks/       # Webhook обработчики
│   │   ├── config.py
│   │   ├── database.py
│   │   └── main.py
│   └── requirements.txt
├── frontend/
│   ├── src/
│   │   ├── api/            # API клиент
│   │   ├── components/     # React компоненты
│   │   ├── pages/          # Страницы
│   │   ├── types/          # TypeScript типы
│   │   └── App.tsx
│   └── package.json
├── cloud.md                # План проекта
└── README.md               # Этот файл

🔐 Безопасность

  • API токены шифруются перед сохранением (Fernet)
  • Webhook signature validation
  • CORS настроен для конкретных доменов
  • Rate limiting (рекомендуется для production)

🚀 Production развертывание

Docker (рекомендуется)

# TODO: Добавить Dockerfile и docker-compose.yml

Manual

  1. Используйте PostgreSQL вместо SQLite
  2. Настройте reverse proxy (nginx)
  3. Используйте HTTPS
  4. Настройте environment variables
  5. Используйте process manager (systemd/supervisor)

🤝 Вклад в разработку

Contributions welcome!

  1. Fork проект
  2. Создайте feature branch
  3. Commit изменения
  4. Push в branch
  5. Создайте Pull Request

📝 Лицензия

MIT License

🙏 Благодарности

  • LangChain - фреймворк для LLM
  • Ollama - локальный запуск LLM
  • FastAPI - веб-фреймворк
  • React - UI библиотека

📞 Поддержка

Возникли проблемы? Создайте Issue в репозитории.


Made with ❤️ and 🤖 AI