300 lines
8.9 KiB
Markdown
300 lines
8.9 KiB
Markdown
# 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 и модели
|
||
|
||
```bash
|
||
# Установите Ollama с https://ollama.ai/
|
||
|
||
# Загрузите модель codellama
|
||
ollama pull codellama
|
||
|
||
# Запустите Ollama
|
||
ollama serve
|
||
```
|
||
|
||
### 2. Backend (FastAPI)
|
||
|
||
```bash
|
||
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)
|
||
|
||
```bash
|
||
cd frontend
|
||
|
||
# Установите зависимости
|
||
npm install
|
||
|
||
# Запустите dev сервер
|
||
npm run dev
|
||
```
|
||
|
||
Frontend будет доступен на `http://localhost:5173`
|
||
|
||
## 🔧 Настройка
|
||
|
||
### Backend (.env)
|
||
|
||
```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)
|
||
|
||
```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
|
||
|
||
```bash
|
||
cd backend
|
||
|
||
# Запуск с hot reload
|
||
uvicorn app.main:app --reload
|
||
|
||
# Миграции (если используется Alembic)
|
||
alembic upgrade head
|
||
```
|
||
|
||
### Frontend
|
||
|
||
```bash
|
||
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 (рекомендуется)
|
||
|
||
```bash
|
||
# 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](https://github.com/langchain-ai/langchain) - фреймворк для LLM
|
||
- [Ollama](https://ollama.ai/) - локальный запуск LLM
|
||
- [FastAPI](https://fastapi.tiangolo.com/) - веб-фреймворк
|
||
- [React](https://react.dev/) - UI библиотека
|
||
|
||
## 📞 Поддержка
|
||
|
||
Возникли проблемы? Создайте Issue в репозитории.
|
||
|
||
---
|
||
|
||
Made with ❤️ and 🤖 AI
|
||
|