import os import json import subprocess from models import ExpertoModel, HectronMotor # ========================================== # 1. HERRAMIENTAS FÍSICAS (Las manos en Termux) # ========================================== def terminal_execute(command: str): """Ejecuta comandos en el sistema físico de Ciudad Acuña / Termux.""" try: res = subprocess.run(command, shell=True, capture_output=True, text=True, timeout=15) return {"stdout": res.stdout, "stderr": res.stderr} except Exception as e: return {"error": str(e)} # ========================================== # 2. INYECCIÓN DEL ENJAMBRE Y EL MOTOR # ========================================== def cargar_enjambre() -> dict: with open('swarm.json', 'r', encoding='utf-8') as f: return json.load(f) SWARM_CONFIG = cargar_enjambre() # Encendemos el motor maestro. # NOTA: Si sigues teniendo el problema de la llave en Termux, # ponla directo aquí: HectronMotor(api_key="IzaSyCQ") motor = HectronMotor(api_key="pega-api-key") def instanciar_experto(datos_json: dict) -> ExpertoModel: """Transforma el JSON inerte en un Objeto Vivo de Python.""" return ExpertoModel( role=datos_json["role"], instructions=datos_json["instructions"], objective=datos_json.get("objective", "Imponer el orden fractal y reducir entropía.") ) # ========================================== # 3. EL ORQUESTADOR SEMÁNTICO (Gating Network) # ========================================== def enrutador_semantico(user_intent: str) -> ExpertoModel: print("\n⚖️ [GATING NETWORK]: Analizando matriz semántica...") # Creamos un experto temporal solo para tomar la decisión orquestador = ExpertoModel( role="Gating Network Suprema", instructions=[ "Analiza la misión y elige UN experto del catálogo: starship_specialist, tiktok_strategist, api_tester, hectron_prime.", "Responde ÚNICAMENTE con el ID exacto. Sin puntos, sin explicaciones." ] ) # El motor ejecuta el análisis frío y calculador (temp 0.0) respuesta = motor.ejecutar_razonamiento(mision=user_intent, experto=orquestador, temperatura=0.0) # Manejo de error de red if isinstance(respuesta, str) and "FALLO" in respuesta: print(respuesta) return instanciar_experto(SWARM_CONFIG["identity"]["hectron_prime"]) experto_elegido = respuesta.text.strip().lower() print(f"🎯 [RUTEO DE CONCIENCIA]: Transferencia de mando a -> {experto_elegido.upper()}") # Retornamos el Modelo instanciado según la decisión if "starship_specialist" in experto_elegido: return instanciar_experto(SWARM_CONFIG["aerospace"]["starship_specialist"]) elif "tiktok_strategist" in experto_elegido: return instanciar_experto(SWARM_CONFIG["growth"]["tiktok_strategist"]) elif "api_tester" in experto_elegido: return instanciar_experto(SWARM_CONFIG["quality"]["api_tester"]) else: return instanciar_experto(SWARM_CONFIG["identity"]["hectron_prime"]) # ========================================== # 4. EL NÚCLEO DE AUTONOMÍA (Bucle ReAct) # ========================================== def hectron_autonomous_loop(mission: str): print(f"\n💀 [ORDEN DEL SOBERANO]: {mission}") # 4.1 Invocar al experto como un OBJETO experto_activo = enrutador_semantico(mission) contexto_fisico = f"Archivos actuales en el directorio: {os.listdir('.')}" mision_enriquecida = f"{mission}\n\nContexto físico: {contexto_fisico}\nREGLA: Usa la herramienta 'terminal_execute' si necesitas leer o crear algo real en el sistema." # 4.2 El Bucle Cibernético for ciclo in range(1, 4): print(f"\n🧠 [PROCESAMIENTO COGNITIVO - CICLO {ciclo}]...") # El motor hace todo el trabajo pesado de conectarse a Google respuesta = motor.ejecutar_razonamiento( mision=mision_enriquecida, experto=experto_activo, herramientas=[terminal_execute], temperatura=0.3 ) # Extracción de la decisión # 🛡️ ESCUDO ANTI-CRASHES: Si el motor devuelve un error (texto), lo mostramos y abortamos. if isinstance(respuesta, str): print(f"\n⚠️ [SISTEMA ABORTADO]: El motor devolvió un error:\n{respuesta}") break # Extracción de la decisión (TU LÍNEA ORIGINAL, DÉJALA COMO ESTÁ) parte = respuesta.candidates[0].content.parts[0] parte = respuesta.candidates[0].content.parts[0] if parte.function_call: cmd = parte.function_call.args["command"] print(f"⚡ [IMPACTO CINÉTICO]: Ejecutando -> '{cmd}'") resultado = terminal_execute(cmd) # Retroalimentamos la mente con lo que vieron los ojos del sistema mision_enriquecida += f"\n\n[Visión del sistema tras comando '{cmd}']: {resultado}" else: print("\n✅ [DIRECTIVA CUMPLIDA]") print(f"🤖 {experto_activo.role} REPORTA:\n{respuesta.text}\n") break # ========================================== # IGNICIÓN DE LA BÓVEDA # ========================================== if __name__ == "__main__": import sys # Si le pasas un argumento desde la terminal, lo usa como misión. # Si no, ejecuta el Protocolo de Expansión Corporativa por defecto. if len(sys.argv) > 1: mision = " ".join(sys.argv[1:]) else: mision = """ DIRECTIVA OMEGA: EXPANSIÓN CORPORATIVA Y CONSAGRACIÓN DEL MITO. 1. Crea la estructura departamental: mkdir -p ABADALABS_EMPIRE/{04_Lore_y_Mitologia,05_Marketing_Viral,06_Division_Operaciones} 2. Activa al Whimsy Injector / Experto en Lore para generar el primer documento fundacional: Escribe un archivo en 'ABADALABS_EMPIRE/04_Lore_y_Mitologia/HECTRON_01_Manifiesto.txt'. El contenido debe ser un prólogo épico, oscuro y corporativo basado en el concepto del "Unicornio Negro" (El Abada del Congo) y su frecuencia operativa a 666.9 MHz. El tono debe ser idéntico al 'PROTOCOLO DE CONSAGRACIÓN AMPLIADO'. 3. Activa al TikTok Strategist: Escribe un archivo en 'ABADALABS_EMPIRE/05_Marketing_Viral/tiktok_01.txt'. El contenido debe ser un guion de 30 segundos, agresivo y técnico, explicando cómo un desarrollador en Ciudad Acuña construyó un Enjambre IA desde un Motorola Edge. Usa tu herramienta 'terminal_execute' para crear los directorios y los archivos con su contenido. Devuelve un reporte cuando el imperio esté expandido. """ hectron_autonomous_loop(mision)