Spaces:
Running
Running
| # main.py (versión actualizada – copia-pega completa) | |
| from fastapi import FastAPI, Request, Body | |
| from fastapi.responses import HTMLResponse, JSONResponse | |
| from fastapi.staticfiles import StaticFiles | |
| from pathlib import Path | |
| from datetime import datetime | |
| from agents.manager import plan_mission | |
| from agents.specialized import run_specialized_agent | |
| from agents.registry import AGENT_REGISTRY # asegúrate de tener este archivo | |
| app = FastAPI(title="Mission Control v2 - Docker") | |
| # Servir frontend | |
| templates_dir = Path("templates") | |
| if templates_dir.exists(): | |
| app.mount("/static", StaticFiles(directory=templates_dir), name="static") # ajusta si usas /templates o /static | |
| async def root(): | |
| index_path = templates_dir / "index.html" | |
| if index_path.exists(): | |
| return index_path.read_text(encoding="utf-8") | |
| return HTMLResponse(content="<h1>Mission Control v2 – Frontend no encontrado</h1>") | |
| async def health(): | |
| return {"status": "ok", "docker": True, "time": datetime.now().isoformat()} | |
| async def list_agents(): | |
| return {"agents": [{"key": k, "name": v.get("name", k)} for k, v in AGENT_REGISTRY.items()]} | |
| async def create_mission(request: Request): | |
| data = await request.json() | |
| task = data.get("task", "").strip() | |
| if not task: | |
| return JSONResponse({"error": "No task provided"}, status_code=400) | |
| # Planificar con el manager | |
| plan = await plan_mission(task) | |
| # Ejecutar agentes delegados | |
| results = [] | |
| for agent_key in plan.get("delegate", []): | |
| result = await run_specialized_agent(agent_key, task) | |
| results.append(result) | |
| file_path = None | |
| if results and results[0].get("file_path"): | |
| file_path = results[0]["file_path"] | |
| # Guardar en DB | |
| from core.storage import save_mission | |
| mission_data = { | |
| "task": task, | |
| "started_at": datetime.now().isoformat(), # o usa el que ya tengas | |
| "ended_at": datetime.now().isoformat(), | |
| "results": results, # lista de dicts | |
| "doc_file": file_path, # path o None | |
| "events": [] # si tienes logs de eventos, ponlos aquí | |
| } | |
| save_mission(mission_data) # ← ahora sí pasa un solo dict | |
| return JSONResponse({ | |
| "success": True, | |
| "task": task, | |
| "plan": plan, | |
| "results": results, | |
| "file_path": file_path | |
| }) | |
| print("Mission Control v2 - Docker iniciado") |