# 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