#!/usr/bin/env bash
# Que siga siendo local. Es la premisa del carril, asi que se verifica igual que
# cualquier otra cosa en vez de darla por hecha.
#
# Misma idea que pruebas/06_privacidad.sh del naranja, con las preguntas que
# aplican aqui: alli se interroga a gsettings, aqui al .env, al YAML y a ss.
#
# Lo que SI puede salir, y no es fallo, se lista al final para que no sorprenda:
# el navegador si el agente decide navegar, y la comprobacion de versiones.

cd "$(dirname "$0")" && . ./comun.sh

titulo "Credenciales"

# Las 11 lineas con valor del .env no son claves: son TERMINAL_TIMEOUT,
# BROWSER_SESSION_TIMEOUT, banderas de depuracion y similares. Se busca por el
# NOMBRE de la variable, que es lo que distingue una clave de un ajuste.
CLAVES=$(grep -vE '^\s*#|^\s*$' "$HERMES/.env" 2>/dev/null \
    | grep -iE '^[A-Z_]*(API_KEY|TOKEN|SECRET|PASSWORD|CREDENTIAL)[A-Z_]*=.+' \
    | grep -vE '=\s*$' | wc -l)
comprueba "cero credenciales con valor en el .env" "$CLAVES" "0"

# Sin tokens de mensajeria el gateway no arranca, que es justo lo que se quiere:
# un canal de mensajeria es la unica pieza del carril que sacaria conversaciones
# de esta maquina.
MENSAJERIA=$(grep -vE '^\s*#|^\s*$' "$HERMES/.env" 2>/dev/null \
    | grep -icE '^(TELEGRAM|DISCORD|SLACK|WHATSAPP|SIGNAL|TEAMS|QQ)[A-Z_]*=.+')
comprueba "cero tokens de mensajeria" "$MENSAJERIA" "0"

titulo "La red"

# Ollama es el cerebro: tiene que escuchar, pero solo aqui.
FUERA=$(ss -ltn 2>/dev/null | awk 'NR>1 {print $4}' \
    | grep -E '^(0\.0\.0\.0|\*|\[::\]):(11434|8000|8080|3000)$' | wc -l)
comprueba "ningun puerto nuestro escucha fuera de loopback" "$FUERA" "0"

OLLAMA_LOCAL=$(ss -ltn 2>/dev/null | awk 'NR>1 {print $4}' | grep -c '127.0.0.1:11434')
comprueba "ollama escucha SOLO en 127.0.0.1" "$OLLAMA_LOCAL" "1"

# Conexiones salientes vivas de hermes en este momento. Cero es lo normal: la
# 04 y la 05 hablan con 127.0.0.1.
SALIENTES=$(ss -tnp 2>/dev/null | grep -c 'hermes' || true)
nota "conexiones de hermes ahora mismo: ${SALIENTES:-0}"

titulo "El cerebro no sale de aqui"

BASE=$(config_model base_url)
case "$BASE" in
    http://127.0.0.1:*|http://localhost:*)
        echo "  $(verde OK) inferencia en esta maquina ($BASE)"; _ok=$((_ok + 1)) ;;
    *)
        echo "  $(rojo FALLO) la inferencia sale a $BASE"; _fallo=$((_fallo + 1)) ;;
esac

# telemetry es de Hermes y viene en el config; si se enciende, sale. No es una
# bandera suelta sino un arbol —hoy telemetry.shared_metrics.enabled— asi que se
# recorre entero: leer solo la clave de arriba devolvia el diccionario y la
# prueba fallaba con la telemetria APAGADA, que es la peor forma de fallar.
ENCENDIDAS=$(python3 - "$CONFIG" <<'PY'
import sys, yaml

encendidas = []

def anda(nodo, ruta="telemetry"):
    if isinstance(nodo, dict):
        for k, v in nodo.items():
            if k == "enabled" and v is True:
                encendidas.append(ruta)
            else:
                anda(v, f"{ruta}.{k}")
    elif nodo is True and ruta.endswith("enabled"):
        encendidas.append(ruta)

anda(yaml.safe_load(open(sys.argv[1])).get('telemetry', {}) or {})
print(",".join(encendidas))
PY
)
if [ -z "$ENCENDIDAS" ]; then
    echo "  $(verde OK) telemetria apagada en todas sus ramas"; _ok=$((_ok + 1))
else
    echo "  $(rojo FALLO) telemetria encendida en: $ENCENDIDAS"; _fallo=$((_fallo + 1))
fi

titulo "Salidas conocidas, que no son fallo"

nota "el navegador (Playwright/Chromium) SOLO si el agente decide navegar"
nota "hermes update comprueba versiones contra su repo cuando se le pide"
nota "el driver de Computer Use esta INSTALADO pero nada lo invoca hoy"

resumen
