| 1 | # Local dev: Docker + MCP (рекомендуемый пилот) |
| 2 | |
| 3 | **Идея:** Forge всегда в Docker; агент в Cursor ходит через **AgentForge.Mcp** на `http://127.0.0.1:8770`. Терминалы с `dotnet run` не нужны. |
| 4 | |
| 5 | ## 1. Поднять стек |
| 6 | |
| 7 | ```powershell |
| 8 | cd agent-forge |
| 9 | .\scripts\docker-up.ps1 |
| 10 | ``` |
| 11 | |
| 12 | Создаёт `.env` из `.env.example`, собирает и запускает: |
| 13 | |
| 14 | | Сервис | Порт | Роль | |
| 15 | |--------|------|------| |
| 16 | | `forge` | 8770 | API + UI + WitDB (volume `forge-data`) | |
| 17 | | `git-ssh` | 2222 | `git clone` / push по SSH | |
| 18 | |
| 19 | Остановить: `.\scripts\docker-up.ps1 -Down` |
| 20 | Логи: `docker compose logs -f forge` |
| 21 | |
| 22 | **Схема WitDB:** EF migrations (`src/AgentForge/Data/Migrations/`). При старте — `Migrate()`; старые volume после `EnsureCreated` допатчиваются автоматически. Полный сброс данных: `docker compose down -v`. |
| 23 | |
| 24 | Новая миграция после смены модели (из корня репо, `dotnet-ef` 10.0.9 в `dotnet-tools.json`): |
| 25 | |
| 26 | ```powershell |
| 27 | dotnet tool restore |
| 28 | cd src/AgentForge |
| 29 | dotnet ef migrations add <Name> --output-dir Data/Migrations |
| 30 | ``` |
| 31 | |
| 32 | ## 2. Auth (один раз на хосте) |
| 33 | |
| 34 | Токен живёт на **хосте** в `~/.forge/credentials.json` — контейнер его не монтирует. |
| 35 | |
| 36 | ```powershell |
| 37 | forge auth login --device --host http://127.0.0.1:8770 |
| 38 | # Approve в http://127.0.0.1:8770/view/auth/device с FORGE_BOOTSTRAP_TOKEN из .env |
| 39 | ``` |
| 40 | |
| 41 | ## 3. MCP в Cursor |
| 42 | |
| 43 | ```powershell |
| 44 | .\scripts\publish-mcp.ps1 |
| 45 | ``` |
| 46 | |
| 47 | В Cursor → MCP: |
| 48 | |
| 49 | ```json |
| 50 | { |
| 51 | "mcpServers": { |
| 52 | "forge": { |
| 53 | "command": "D:\\agent-forge-mcp\\AgentForge.Mcp.exe", |
| 54 | "env": { |
| 55 | "FORGE_BASE_URL": "http://127.0.0.1:8770" |
| 56 | } |
| 57 | } |
| 58 | } |
| 59 | } |
| 60 | ``` |
| 61 | |
| 62 | После `forge auth login` MCP подхватит Bearer из `~/.forge/credentials.json`. |
| 63 | |
| 64 | ## 4. Git (опционально) |
| 65 | |
| 66 | В `.env` задай `FORGE_GIT_AUTHORIZED_KEYS` (содержимое `id_ed25519.pub`), перезапусти compose. |
| 67 | |
| 68 | ## Почему не `dotnet run` |
| 69 | |
| 70 | - один `docker compose up` вместо фоновых терминалов; |
| 71 | - данные в volume, перезапуск ОС не теряет репо; |
| 72 | - тот же compose ближе к IT CAD deploy. |
| 73 | |
| 74 | MCP остаётся **на хосте** (stdio + Cursor) — так у всех MCP-серверов; в Docker кладём только HTTP API. |
| 75 | |