init
This commit is contained in:
@@ -0,0 +1,299 @@
|
||||
# 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
|
||||
|
||||
Reference in New Issue
Block a user