Forge
markdown3407750f
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
8cd 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
27dotnet tool restore
28cd src/AgentForge
29dotnet ef migrations add <Name> --output-dir Data/Migrations
30```
31
32## 2. Auth (один раз на хосте)
33
34Токен живёт на **хосте** в `~/.forge/credentials.json` — контейнер его не монтирует.
35
36```powershell
37forge 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
74MCP остаётся **на хосте** (stdio + Cursor) — так у всех MCP-серверов; в Docker кладём только HTTP API.
75
View only · write via MCP/CIDE