feat: Add review events persistence, version display, and auto-versioning system
This commit is contained in:
@@ -0,0 +1,261 @@
|
||||
# Архитектура AI Code Review Agent
|
||||
|
||||
## Общая схема
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ User │
|
||||
└───────────────────────────┬─────────────────────────────────┘
|
||||
│
|
||||
▼
|
||||
┌────────────────┐
|
||||
│ Frontend │
|
||||
│ React + WS │
|
||||
└────────┬───────┘
|
||||
│
|
||||
▼
|
||||
┌────────────────┐
|
||||
│ FastAPI │
|
||||
│ Backend │
|
||||
└────┬───┬───┬───┘
|
||||
│ │ │
|
||||
┌───────────────┘ │ └───────────────┐
|
||||
▼ ▼ ▼
|
||||
┌───────────────┐ ┌────────────────┐ ┌───────────────┐
|
||||
│ Git Platform │ │ LangGraph │ │ Database │
|
||||
│ (Webhook) │ │ Agent │ │ SQLite │
|
||||
└───────────────┘ └────────┬───────┘ └───────────────┘
|
||||
│
|
||||
▼
|
||||
┌────────────────┐
|
||||
│ Ollama │
|
||||
│ (codellama) │
|
||||
└────────────────┘
|
||||
```
|
||||
|
||||
## Backend архитектура
|
||||
|
||||
### 1. FastAPI Layer
|
||||
|
||||
**Отвечает за:**
|
||||
- HTTP endpoints
|
||||
- WebSocket connections
|
||||
- CORS и middleware
|
||||
- Request validation
|
||||
|
||||
**Компоненты:**
|
||||
- `app/main.py` - главное приложение
|
||||
- `app/api/` - REST endpoints
|
||||
- `app/database.py` - DB session management
|
||||
|
||||
### 2. Agent Layer (LangGraph)
|
||||
|
||||
**Отвечает за:**
|
||||
- Workflow управление
|
||||
- Анализ кода через LLM
|
||||
- Генерация комментариев
|
||||
|
||||
**Компоненты:**
|
||||
- `app/agents/reviewer.py` - главный агент
|
||||
- `app/agents/tools.py` - инструменты (анализ кода)
|
||||
- `app/agents/prompts.py` - промпты для LLM
|
||||
|
||||
**Граф агента:**
|
||||
```
|
||||
START
|
||||
│
|
||||
├─► fetch_pr_info (получение PR)
|
||||
│
|
||||
├─► fetch_files (список файлов)
|
||||
│
|
||||
├─► analyze_files (анализ через Ollama)
|
||||
│
|
||||
├─► post_comments (отправка комментариев)
|
||||
│
|
||||
└─► complete_review (завершение)
|
||||
│
|
||||
END
|
||||
```
|
||||
|
||||
### 3. Service Layer
|
||||
|
||||
**Отвечает за:**
|
||||
- Интеграция с Git платформами
|
||||
- API запросы к Gitea/GitHub/Bitbucket
|
||||
|
||||
**Компоненты:**
|
||||
- `app/services/base.py` - базовый класс
|
||||
- `app/services/gitea.py` - Gitea API
|
||||
- `app/services/github.py` - GitHub API
|
||||
- `app/services/bitbucket.py` - Bitbucket API
|
||||
|
||||
### 4. Data Layer
|
||||
|
||||
**Отвечает за:**
|
||||
- Хранение данных
|
||||
- ORM операции
|
||||
|
||||
**Модели:**
|
||||
- `Repository` - репозитории
|
||||
- `PullRequest` - PR
|
||||
- `Review` - ревью
|
||||
- `Comment` - комментарии
|
||||
|
||||
## Frontend архитектура
|
||||
|
||||
### 1. Router Layer
|
||||
|
||||
**React Router для навигации:**
|
||||
- `/` - Dashboard
|
||||
- `/repositories` - управление репозиториями
|
||||
- `/reviews` - список ревью
|
||||
- `/reviews/:id` - детали ревью
|
||||
|
||||
### 2. State Management
|
||||
|
||||
**TanStack Query для сервер-стейта:**
|
||||
- Кеширование данных
|
||||
- Auto-refetch
|
||||
- Optimistic updates
|
||||
|
||||
### 3. WebSocket Layer
|
||||
|
||||
**Real-time обновления:**
|
||||
- Singleton WebSocket клиент
|
||||
- Event-based подписки
|
||||
- Auto-reconnect
|
||||
|
||||
### 4. UI Components
|
||||
|
||||
**Переиспользуемые компоненты:**
|
||||
- `RepositoryForm` - форма добавления
|
||||
- `ReviewProgress` - прогресс бар
|
||||
- `CommentsList` - список комментариев
|
||||
- `WebSocketStatus` - статус подключения
|
||||
|
||||
## Поток данных
|
||||
|
||||
### Webhook → Review flow
|
||||
|
||||
```
|
||||
1. Git Platform отправляет webhook
|
||||
POST /api/webhooks/{platform}/{repo_id}
|
||||
|
||||
2. Webhook handler создает Review
|
||||
- Сохраняет PR в DB
|
||||
- Создает Review запись
|
||||
- Запускает background task
|
||||
|
||||
3. Background task запускает LangGraph агент
|
||||
- Получает информацию о PR
|
||||
- Скачивает измененные файлы
|
||||
- Анализирует через Ollama
|
||||
- Генерирует комментарии
|
||||
|
||||
4. Agent сохраняет комментарии в DB
|
||||
|
||||
5. Agent отправляет комментарии в PR
|
||||
|
||||
6. WebSocket broadcast обновлений
|
||||
|
||||
7. Frontend обновляет UI
|
||||
```
|
||||
|
||||
## Безопасность
|
||||
|
||||
### 1. Encryption
|
||||
|
||||
API токены шифруются перед сохранением (Fernet):
|
||||
```python
|
||||
cipher = Fernet(key)
|
||||
encrypted = cipher.encrypt(token.encode())
|
||||
```
|
||||
|
||||
### 2. Webhook Validation
|
||||
|
||||
Каждый webhook проверяется по signature:
|
||||
```python
|
||||
signature = hmac.new(secret, payload, hashlib.sha256)
|
||||
```
|
||||
|
||||
### 3. CORS
|
||||
|
||||
Только разрешенные origins в `settings.cors_origins`
|
||||
|
||||
## Масштабирование
|
||||
|
||||
### Horizontal scaling
|
||||
|
||||
1. **Multiple workers**
|
||||
```bash
|
||||
uvicorn app.main:app --workers 4
|
||||
```
|
||||
|
||||
2. **Queue system**
|
||||
- Celery для background tasks
|
||||
- Redis для очередей
|
||||
|
||||
3. **Database**
|
||||
- Миграция на PostgreSQL
|
||||
- Connection pooling
|
||||
|
||||
### Vertical scaling
|
||||
|
||||
- Увеличение ресурсов Ollama
|
||||
- Использование более мощных GPU
|
||||
- Оптимизация промптов
|
||||
|
||||
## Мониторинг
|
||||
|
||||
### Метрики
|
||||
|
||||
- Количество ревью
|
||||
- Среднее время ревью
|
||||
- Количество комментариев
|
||||
- Ошибки
|
||||
|
||||
### Логи
|
||||
|
||||
```python
|
||||
import logging
|
||||
logger = logging.getLogger(__name__)
|
||||
logger.info("Review started", extra={"review_id": id})
|
||||
```
|
||||
|
||||
## Deployment
|
||||
|
||||
### Development
|
||||
- SQLite
|
||||
- Local Ollama
|
||||
- Dev сервер
|
||||
|
||||
### Production
|
||||
- PostgreSQL
|
||||
- Redis
|
||||
- Nginx reverse proxy
|
||||
- Systemd services
|
||||
- HTTPS
|
||||
- Rate limiting
|
||||
|
||||
## Будущие улучшения
|
||||
|
||||
1. **Множественные LLM**
|
||||
- Поддержка OpenAI, Anthropic
|
||||
- Выбор модели на уровне репозитория
|
||||
|
||||
2. **Настраиваемые правила**
|
||||
- YAML конфиг с правилами
|
||||
- Custom промпты
|
||||
|
||||
3. **Кеширование**
|
||||
- Redis для результатов анализа
|
||||
- Избежание повторного анализа
|
||||
|
||||
4. **Metrics & Analytics**
|
||||
- Prometheus metrics
|
||||
- Grafana dashboards
|
||||
|
||||
5. **Notifications**
|
||||
- Email уведомления
|
||||
- Slack/Discord интеграция
|
||||
|
||||
Reference in New Issue
Block a user