HJLR / agents_daemon.py
hectorruiz9's picture
Create agents_daemon.py
3b77c7e verified
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)