Desarrollo local — Development Setup
Requisitos
| Herramienta | Versión | Propósito |
|---|---|---|
| Bun | 1.x+ | Runtime del backend (Master Bot, Child Bot, MCP) |
| Node.js | 22+ | Build del frontend (npm) |
| Docker | Latest | Opcional — para containerización |
| Git | Latest | Repositorio |
Inicio rápido
git clone [email protected]:SerhiiInUa/citadel-v2.git
cd citadel-v2
cp .env.example .env
# Edita .env — agrega los tokens de los bots
# Una sola vez: activar el hook de doc-coverage pre-push (Phase 49.1)
bash scripts/setup-hooks.sh
Por qué el hook: bloquea
git pushcuando cambias código sin actualizar los docs. Bypass:git push --no-verify. Detalles en la sección "Documentation Law" deCLAUDE.md.
Frontend
cd frontend
npm install
npm run dev # → http://localhost:5173
Vite hace proxy automáticamente de:
/api/crm/*→http://localhost:19210(Master Bot)/api/*→http://localhost:19200(MCP Server)/ws/*→ WebSocket a través dehttp://localhost:19200
Comandos de build
npm run dev— servidor de desarrollo con hot reloadnpm run build— build de producción →dist/npm run i18n:extract— extraer nuevas cadenas de traducciónnpm run i18n:compile— compilar traducciones (obligatorio antes del build)
Backend
Master Bot (CRM API)
cd master-bot
bun install
bun run bot.ts # → http://localhost:19210
Este es el servidor API principal con 68+ endpoints. Requiere MASTER_BOT_TOKEN en .env.
Child Bot (AI Proxy)
cd child-bot
bun install
bun run bot.ts # → http://localhost:19211
Proxy Telegram ↔ Claude CLI por proyecto. Requiere CITADEL_BOT_TOKEN en .env.
MCP State Bridge
cd mcp-server
bun install
bun run server.ts # → http://localhost:19200
Gestor de estado, SSE, WebSocket.
Puertos
| Puerto | Servicio | Descripción |
|---|---|---|
| 5173 | Vite Dev Server | Frontend + API proxy |
| 19200 | MCP State Bridge | Estado, SSE, WebSocket |
| 19210 | Master Bot | CRM API (68+ endpoints) |
| 19211 | Child Bot | Health check |
| 18888 | Nginx (VPS) | Solo producción |
| 18889 | Nginx (Docker) | Frontend Docker |
Variables de entorno (.env)
Obligatorias
MASTER_BOT_TOKEN=... # Telegram @BotFather
CRM_ALLOWED_ORIGINS=http://localhost:5173
Para funcionalidad completa
CITADEL_BOT_TOKEN=... # Token del Child Bot
GITHUB_CLIENT_ID=... # GitHub OAuth
GITHUB_CLIENT_SECRET=...
GOOGLE_CLIENT_ID=... # Google OAuth
GOOGLE_CLIENT_SECRET=...
Opcionales
HEALTH_PORT=19210
CITADEL_DIR=/path/to/citadel-v2
EMAIL_PROVIDER=console # 'console' para dev (imprime en la terminal)
[email protected]
Docker (opcional)
# Stack completo
docker compose -f docker/docker-compose.yml up -d --build
# Solo frontend
docker compose -f docker/docker-compose.yml up -d frontend
Estructura del proyecto
citadel-v2/
├── master-bot/ # Telegram оркестратор + CRM API (:19210)
├── child-bot/ # Per-project AI proxy (:19211)
├── mcp-server/ # State bridge (:19200)
├── shared/ # Спільний код (db, auth, routes, migrations)
├── frontend/ # React CRM + Phaser (Vite)
├── clients/ # ARC CLI
├── services/ # NotebookLM Bridge (Python)
├── config/ # Registry, vault, workers
├── skills/ # Skill definitions + evals
├── docker/ # Compose + Dockerfiles + Nginx
├── infra/nginx/ # VPS Nginx config
├── scripts/ # Deploy, build scripts
├── docs/ # Documentation
└── data/ # SQLite DB (auto-created)
Flujo de trabajo de desarrollo típico
- Inicia el frontend:
cd frontend && npm run dev - Inicia el Master Bot:
cd master-bot && bun run bot.ts - Abre
http://localhost:5173 - Regístrate con email (
email_provider=console→ código en la terminal) - Crea un proyecto desde la UI
- Trabaja con los workers desde el Workspace
Verificación rápida de tipos
cd master-bot && bun build --no-bundle bot.ts # Type-check backend
cd frontend && npx vite build # Type-check + build frontend
Troubleshooting
| Problema | Solución |
|---|---|
| Port already in use | lsof -i :19210 → kill <PID> |
| Error de CORS | Verifica CRM_ALLOWED_ORIGINS en .env |
| El frontend no ve la API | Verifica que el Master Bot esté corriendo en :19210 |
| Bun no encuentra módulos | bun install en el directorio correspondiente |
| Errores de i18n | cd frontend && npm run i18n:compile |