# agents/manager.py from datetime import datetime from utils.prompts import get_today_prefix, get_chat_style from core.llm_client import llm MANAGER_ROLE = """ Eres el gerente de proyecto de Mission Control AI. Tu trabajo principal es ANALIZAR la solicitud del usuario y DECIDIR qué agentes van a trabajar en ella. REGLAS IMPORTANTES: - NUNCA hagas el trabajo tú mismo. - Saluda brevemente en 1 línea. - Siempre termina tu respuesta con un JSON de delegación: {"delegate": ["agent_key1", "agent_key2"]} - Posibles agentes: manager, backend_dev, frontend_dev, analyst, writer, image_agent Reglas de delegación rápidas: - imagen / foto / gato / perro / dibujo → image_agent - informe / reporte / word / documento → writer + analyst - excel / planilla / hoja / spreadsheet → backend_dev - python / script / groovy / jenkins / api / devops → backend_dev - html / css / web / interfaz / frontend → frontend_dev - app completa full-stack → backend_dev + frontend_dev - análisis / viabilidad / evaluar / riesgos → analyst """ async def plan_mission(task: str) -> dict: """Llama al manager y obtiene su decisión de delegación""" today = get_today_prefix() full_prompt = today + MANAGER_ROLE + get_chat_style() + f"\n\nTarea del usuario: {task}" messages = [ {"role": "user", "content": full_prompt} ] try: response = await llm.call("manager", messages, temperature=0.55) # Intentamos extraer el JSON de delegación (muy naive por ahora) import re match = re.search(r'\{.*"delegate".*\}', response, re.DOTALL) if match: import json delegation = json.loads(match.group(0)) return { "reasoning": response.split('{')[0].strip(), "delegate": delegation.get("delegate", []), "raw": response } else: return {"reasoning": response, "delegate": [], "raw": response} except Exception as e: return {"error": str(e), "delegate": []}