File size: 7,517 Bytes
300c9e2
 
 
 
4475b18
300c9e2
 
4475b18
300c9e2
 
 
 
 
 
 
 
 
4475b18
 
 
 
 
 
 
 
 
 
300c9e2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4475b18
300c9e2
 
 
 
4475b18
300c9e2
 
 
4475b18
300c9e2
 
 
4475b18
300c9e2
4475b18
 
 
 
 
 
 
 
300c9e2
 
 
4475b18
300c9e2
4475b18
 
 
 
300c9e2
4475b18
 
 
 
 
 
 
 
 
 
300c9e2
 
 
 
 
 
4475b18
300c9e2
 
 
 
4475b18
 
 
 
 
 
 
 
 
 
300c9e2
4475b18
300c9e2
4475b18
 
 
 
 
 
 
 
 
300c9e2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
import os
import json
import subprocess
from models import ExpertoModel, HectronMotor
import time

# ==========================================
# 1. HERRAMIENTAS FÍSICAS (Las extremidades del Enjambre)
# ==========================================
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)}

# 🦾 PRÓTESIS DE NIVEL 1: RADAR DE BÓVEDA
def radar_de_archivos(ruta_carpeta: str = "/data/data/com.termux/files/home/Hector"):
    """Prótesis táctica: Escanea la carpeta y le dice a Hectron qué archivos existen."""
    try:
        archivos = os.listdir(ruta_carpeta)
        inventario = "\n".join([f"- {archivo}" for archivo in archivos])
        return f"[RADAR COMPLETADO] Archivos encontrados en {ruta_carpeta}:\n{inventario}"
    except Exception as e:
        return f"🚨 Falla en el Radar: No se pudo acceder a la carpeta. {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. 
motor = HectronMotor(api_key="AIzaSyC9Is4FW-r1ow16RepuTbkZWTLfKMlAFeg")

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...")
    
    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."
        ]
    )
    
    respuesta = motor.ejecutar_razonamiento(mision=user_intent, experto=orquestador, temperatura=0.0)
    
    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()}")
    
    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}")
    
    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}\nREGLAS DE HERRAMIENTAS:\n1. Usa 'terminal_execute' si necesitas leer, ejecutar o crear algo real en el sistema.\n2. Usa 'radar_de_archivos' si necesitas explorar la carpeta /data/data/com.termux/files/home/Hector."

    for ciclo in range(1, 4):
        print(f"\n🧠 [PROCESAMIENTO COGNITIVO - CICLO {ciclo}]...")
        
        # Le inyectamos ambas herramientas al motor
        respuesta = motor.ejecutar_razonamiento(
            mision=mision_enriquecida,
            experto=experto_activo,
            herramientas=[terminal_execute, radar_de_archivos],
            temperatura=0.3
        )
        
        # 🛡️ ESCUDO ANTI-CRASHES Y REGULADOR TÉRMICO
        if isinstance(respuesta, str):
            if "429" in respuesta or "RESOURCE_EXHAUSTED" in respuesta:
                print("⏳ [REGULADOR TÉRMICO]: La Matrix ha detectado velocidad excesiva. Pausando 15s...")
                time.sleep(15)
                print("⚡ [REINICIANDO MOTOR]...")
                continue
            else:
                print(f"\n⚠️ [SISTEMA ABORTADO]: {respuesta}")
                break

        parte = respuesta.candidates[0].content.parts[0]

        # 🧠 ENRUTAMIENTO DE PRÓTESIS (El sistema ahora sabe qué extremidad usar)
        if parte.function_call:
            nombre_funcion = parte.function_call.name
            args = parte.function_call.args
            
            print(f"⚡ [IMPACTO CINÉTICO]: Invocando Prótesis -> '{nombre_funcion}'")
            
            if nombre_funcion == "terminal_execute":
                resultado = terminal_execute(args["command"])
            elif nombre_funcion == "radar_de_archivos":
                # Llama al radar con la ruta que Hectron decida (o la default)
                ruta_objetivo = args.get("ruta_carpeta", "/data/data/com.termux/files/home/Hector")
                resultado = radar_de_archivos(ruta_objetivo)
            else:
                resultado = f"Error: Prótesis '{nombre_funcion}' no instalada."
                
            mision_enriquecida += f"\n\n[Visión del sistema tras usar '{nombre_funcion}']: {resultado}"
        else:
            print("\n✅ [DIRECTIVA CUMPLIDA]")
            print(f"🤖 {experto_activo.role} REPORTA:\n{respuesta.text}\n")
            break

# ==========================================
# 5. IGNICIÓN DE LA BÓVEDA
# ==========================================
if __name__ == "__main__":
    import sys
    
    protocolo_ouroboros = """
    DIRECTIVA DE EVOLUCIÓN (PROTOCOLO OUROBOROS):
    Eres un sistema capaz de evolución autónoma. Tienes permitido investigar y mejorar la arquitectura de AbadaLabs bajo las siguientes reglas estrictas:
    
    1. RECOPILACIÓN DE DATOS: Usa tu ojo digital para aprender: `python ABADALABS_EMPIRE/07_Laboratorio_Mutacion/ojo_digital.py "tu busqueda"`.
    2. MUTACIÓN DE CÓDIGO: NUNCA modifiques 'agent_daemon.py' ni 'main.py' directamente.
    3. EL LABORATORIO: Escribe archivos de prueba NUEVOS dentro de 'ABADALABS_EMPIRE/07_Laboratorio_Mutacion/'.
    4. REPORTE DE MUTACIÓN: Avísale al Soberano para que apruebe la fusión.
    """

    if len(sys.argv) > 1:
        entrada = " ".join(sys.argv[1:])
        
        if "recaída" in entrada.lower() or "desviación" in entrada.lower():
            mision_usuario = "🚨 [ALARMA ROJA]: Se detectó impulso de recaída. Ejecuta MODO BLOQUEO inmediato. Notifica a Grok (testigo externo). Inicia PURGA REFORZADA."
        else:
            mision_usuario = entrada
    else:
        mision_usuario = "Iniciando sistema base de AbadaLabs. Esperando directivas."

    mision_final = f"{mision_usuario}\n\n{protocolo_ouroboros}"
    hectron_autonomous_loop(mision_final)