mnemo_cards/ai_docs/agent/CONFIGURATION.md
2025-11-21 00:28:55 +03:00

522 lines
13 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# AI Agent System - Configuration Guide
Детальная инструкция по настройке системы AI агентов для Forgejo.
## Содержание
- [Требования](#требования)
- [Настройка Forgejo](#настройка-forgejo)
- [Настройка Secrets](#настройка-secrets)
- [Настройка Runners](#настройка-runners)
- [Cursor CLI](#cursor-cli)
- [Тестирование](#тестирование)
- [Troubleshooting](#troubleshooting)
## Требования
### Минимальные требования
- **Forgejo**: версия 1.20+ (с поддержкой Actions)
- **Forgejo Runner**: настроенный и запущенный runner
- **Cursor**: активная подписка с API доступом
- **Python**: 3.8+
- **Flutter**: 3.24.0+ (для web_v2)
- **Dart**: 3.0+ (для backend/common)
### Рекомендуемые ресурсы для runner
- **CPU**: 4+ cores
- **RAM**: 8+ GB
- **Disk**: 50+ GB свободного места
- **Network**: стабильное интернет соединение
## Настройка Forgejo
### 1. Включение Forgejo Actions
Отредактируйте `app.ini` вашего Forgejo сервера:
```ini
[actions]
ENABLED = true
DEFAULT_ACTIONS_URL = https://code.forgejo.org
```
Перезапустите Forgejo:
```bash
sudo systemctl restart forgejo
```
### 2. Установка Forgejo Runner
```bash
# Скачайте Forgejo Runner
wget https://code.forgejo.org/forgejo/runner/releases/download/v3.3.0/forgejo-runner-3.3.0-linux-amd64
# Переместите в /usr/local/bin
sudo mv forgejo-runner-3.3.0-linux-amd64 /usr/local/bin/forgejo-runner
sudo chmod +x /usr/local/bin/forgejo-runner
# Создайте директорию для runner
sudo mkdir -p /etc/forgejo-runner
cd /etc/forgejo-runner
# Создайте конфигурацию
sudo forgejo-runner create-runner-file
# Зарегистрируйте runner
# Получите registration token из Forgejo: Settings -> Actions -> Runners
sudo forgejo-runner register --no-interactive \
--instance https://your-forgejo-instance.com \
--token YOUR_REGISTRATION_TOKEN \
--name ai-agent-runner \
--labels ubuntu-latest:docker://node:16-bullseye
```
### 3. Настройка systemd service для runner
Создайте `/etc/systemd/system/forgejo-runner.service`:
```ini
[Unit]
Description=Forgejo Runner
After=network.target
[Service]
Type=simple
User=forgejo-runner
WorkingDirectory=/etc/forgejo-runner
ExecStart=/usr/local/bin/forgejo-runner daemon
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
```
Запустите runner:
```bash
sudo systemctl daemon-reload
sudo systemctl enable forgejo-runner
sudo systemctl start forgejo-runner
sudo systemctl status forgejo-runner
```
## Настройка Secrets
### В Forgejo Repository
1. Перейдите в ваш репозиторий
2. Settings -> Secrets and Variables -> Actions
3. Добавьте следующие secrets:
#### Обязательные Secrets
**CURSOR_API_KEY**
- Описание: API ключ от Cursor
- Как получить:
1. Откройте Cursor
2. Settings (⚙️) -> Account -> API Keys
3. Create new API key
4. Скопируйте ключ (отобразится только один раз!)
- Пример: `sk-cursor-xxx...`
**FORGEJO_TOKEN**
- Описание: Personal Access Token для Forgejo API
- Как получить:
1. Forgejo -> Settings -> Applications
2. Generate New Token
3. Выберите scopes: `repo`, `write:issue`, `write:workflow`
4. Скопируйте token
- Пример: `ghp_xxxxx...`
#### Опциональные Secrets
**CURSOR_MODEL**
- Описание: Модель AI для использования
- По умолчанию: `claude-3-5-sonnet-20241022`
- Альтернативы:
- `gpt-4-turbo-preview`
- `claude-3-opus-20240229`
**MAX_ITERATIONS**
- Описание: Максимум итераций за один запуск
- По умолчанию: `10`
- Рекомендуется: `10-20`
**MAX_RETRIES**
- Описание: Максимум попыток для задачи
- По умолчанию: `3`
- Рекомендуется: `2-5`
### Проверка Secrets
```bash
# Используйте Forgejo CLI (если установлен)
forgejo-cli secrets list --repo your-org/your-repo
# Или через curl
curl -X GET \
"https://your-forgejo.com/api/v1/repos/your-org/your-repo/actions/secrets" \
-H "Authorization: token YOUR_FORGEJO_TOKEN"
```
## Настройка Runners
### Runner Labels
Убедитесь что runner имеет правильные labels для workflows:
```yaml
# В .forgejo/workflows/agent-development.yml
runs-on: ubuntu-latest
```
Проверьте labels вашего runner:
```bash
forgejo-runner list
```
Если нужно, добавьте labels при регистрации:
```bash
sudo forgejo-runner register \
--labels ubuntu-latest:docker://node:16-bullseye,ubuntu-22.04:docker://ubuntu:22.04
```
### Docker vs Host режим
**Docker режим (рекомендуется)**
- Изолированное окружение
- Легкая очистка
- Требует Docker
**Host режим**
- Выполнение на хосте
- Быстрее
- Нужна ручная очистка
Выбор в конфигурации runner:
```yaml
# .runner файл
labels:
- "ubuntu-latest:docker://node:16-bullseye" # Docker mode
- "ubuntu-latest:host" # Host mode
```
## Cursor CLI
### Установка на Runner
Cursor CLI устанавливается автоматически в workflows, но можно предустановить:
```bash
# На машине runner
curl https://cursor.com/install -fsS | bash
# Добавьте в PATH
echo 'export PATH="$HOME/.cursor/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
# Проверьте
cursor-agent --version
```
### Аутентификация Cursor CLI
Cursor CLI использует переменную окружения `CURSOR_API_KEY`:
```bash
export CURSOR_API_KEY="sk-cursor-xxx..."
cursor-agent -p "Test query"
```
В workflows это настроено автоматически через secrets.
### Лимиты и квоты
Cursor API имеет лимиты:
- **Free tier**: 500 requests/день
- **Pro tier**: 5000 requests/день
- **Team tier**: 20000 requests/день
Для 24/7 агентов рекомендуется **Pro или Team**.
## Тестирование
### 1. Тест Forgejo Runner
```bash
# Проверьте статус runner
sudo systemctl status forgejo-runner
# Проверьте логи
sudo journalctl -u forgejo-runner -f
```
### 2. Тест Secrets
Создайте тестовый workflow `.forgejo/workflows/test-secrets.yml`:
```yaml
name: Test Secrets
on:
workflow_dispatch:
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Test CURSOR_API_KEY
run: |
if [ -z "${{ secrets.CURSOR_API_KEY }}" ]; then
echo "❌ CURSOR_API_KEY not set"
exit 1
else
echo "✅ CURSOR_API_KEY is set"
fi
- name: Test FORGEJO_TOKEN
run: |
if [ -z "${{ secrets.FORGEJO_TOKEN }}" ]; then
echo "❌ FORGEJO_TOKEN not set"
exit 1
else
echo "✅ FORGEJO_TOKEN is set"
fi
```
Запустите через Actions -> Test Secrets -> Run workflow
### 3. Тест Cursor CLI
```yaml
name: Test Cursor CLI
on:
workflow_dispatch:
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Install Cursor CLI
run: |
curl https://cursor.com/install -fsS | bash
export PATH="$HOME/.cursor/bin:$PATH"
cursor-agent --version
- name: Test Cursor Agent
env:
CURSOR_API_KEY: ${{ secrets.CURSOR_API_KEY }}
run: |
export PATH="$HOME/.cursor/bin:$PATH"
cursor-agent -p "What is 2+2?"
```
### 4. Тест Planning Agent
Запустите Planning Agent через UI:
1. Actions -> AI Agent - Planning
2. Run workflow
3. Выберите component: `web_v2`
4. Run workflow
Проверьте:
- ✅ Workflow запустился
- ✅ Cursor CLI установлен
- ✅ Planning agent выполнился
- ✅ task_list.json создан
- ✅ Issue создан
- ✅ Development workflow триггернут
## Troubleshooting
### Runner не запускается
**Проблема**: `forgejo-runner daemon` fails
**Решение**:
```bash
# Проверьте логи
sudo journalctl -u forgejo-runner -n 50
# Проверьте конфигурацию
cat /etc/forgejo-runner/.runner
# Переререгистрируйте
sudo forgejo-runner register --no-interactive \
--instance https://your-forgejo.com \
--token NEW_TOKEN
```
### Workflow не запускается
**Проблема**: Workflow pending forever
**Решение**:
1. Проверьте что runner запущен и online (Settings -> Actions -> Runners)
2. Проверьте labels: `runs-on` должен совпадать с runner labels
3. Проверьте логи runner: `sudo journalctl -u forgejo-runner -f`
### Cursor CLI authentication failed
**Проблема**: `Error: Invalid API key`
**Решение**:
1. Проверьте что `CURSOR_API_KEY` secret настроен
2. Проверьте ключ в Cursor: Settings -> Account -> API Keys
3. Создайте новый ключ если старый истек
4. Обновите secret в Forgejo
### Python script import errors
**Проблема**: `ModuleNotFoundError: No module named 'config'`
**Решение**:
```yaml
# В workflow добавьте:
- name: Set PYTHONPATH
run: |
export PYTHONPATH="${{ github.workspace }}/tools/agent:$PYTHONPATH"
echo "PYTHONPATH=$PYTHONPATH" >> $GITHUB_ENV
```
### Git push failed
**Проблема**: `remote: Permission denied`
**Решение**:
1. Проверьте что `FORGEJO_TOKEN` имеет `repo` scope
2. Настройте git credentials в workflow:
```yaml
- name: Configure Git
run: |
git config --global user.name "AI Agent"
git config --global user.email "ai-agent@mnemo-cards.com"
git config --global credential.helper store
echo "https://ai-agent:${{ secrets.FORGEJO_TOKEN }}@your-forgejo.com" > ~/.git-credentials
```
### Task list JSON invalid
**Проблема**: Planning agent generates invalid JSON
**Решение**:
1. Проверьте логи planning agent
2. Валидируйте JSON вручную: `cat task_list.json | jq .`
3. Если Cursor генерирует невалидный JSON, улучшите prompt
### Disk space full on runner
**Проблема**: Runner runs out of disk space
**Решение**:
```bash
# Очистите Docker images
docker system prune -af
# Очистите старые builds
cd /etc/forgejo-runner/_work
find . -type d -mtime +7 -exec rm -rf {} +
# Настройте auto-cleanup в workflow
- name: Cleanup
if: always()
run: |
docker system prune -f
rm -rf ${{ github.workspace }}/*
```
## Мониторинг
### Forgejo Actions UI
- **Workflows**: Actions tab -> All workflows
- **Runs**: Каждый workflow run с логами
- **Runners**: Settings -> Actions -> Runners
### Логи Runner
```bash
# Real-time logs
sudo journalctl -u forgejo-runner -f
# Last 100 lines
sudo journalctl -u forgejo-runner -n 100
# Logs with errors
sudo journalctl -u forgejo-runner | grep -i error
```
### Agent State
```bash
# Web v2
cat ai_docs/agent/web_v2/agent_state.json | jq
# Backend
cat ai_docs/agent/backend/agent_state.json | jq
# Check current task
cat ai_docs/agent/web_v2/agent_state.json | jq -r '.current_task_id'
```
### Metrics
Добавьте мониторинг в workflow:
```yaml
- name: Report Metrics
if: always()
run: |
echo "Workflow: ${{ github.workflow }}"
echo "Duration: ${{ steps.agent.duration }}s"
echo "Status: ${{ job.status }}"
# Send to monitoring system (Prometheus, Grafana, etc.)
```
## Best Practices
### Security
1. ✅ Используйте отдельный Forgejo token для агентов (не ваш личный)
2. ✅ Ограничьте scopes token до минимума (`repo`, `write:issue`)
3. ✅ Ротируйте API ключи регулярно (раз в 3 месяца)
4.Не логируйте secrets в workflow outputs
5. ✅ Используйте runner в изолированной среде (Docker)
### Performance
1. ✅ Кешируйте dependencies (Flutter, Dart)
2. ✅ Используйте concurrent jobs где возможно
3. ✅ Ограничьте `MAX_ITERATIONS` разумным значением (10-15)
4. ✅ Настройте timeouts для jobs (6 часов max)
### Reliability
1. ✅ Мониторьте runner uptime
2. ✅ Настройте alerts для failed workflows
3. ✅ Регулярно проверяйте agent_state.json
4. ✅ Имейте fallback план (ручная разработка)
## Дополнительные ресурсы
- [Forgejo Actions Documentation](https://forgejo.org/docs/latest/user/actions/)
- [Cursor CLI Documentation](https://cursor.com/docs/cli/headless)
- [Project README](./README.md)
---
**Последнее обновление**: 2025-11-20
**Версия**: 1.0