JARVIS/verde/pruebas/06_privacidad.sh
sito 1e3e5ca20d carril verde (Hermes Agent): documentacion, panel, voz local y RAG
Rama JARVIS-GREEN, independiente de master (el nucleo naranja queda intacto).

- README propio del carril verde con diagrama de arquitectura y capturas del panel.
- verde/: arranque, panel web, puente de voz (escucha local con faster-whisper +
  habla con la voz del naranja), pruebas (07 voz, 08 escucha), config y notas.
- Integracion RAG: nucleo/saber/busca_cli.py + skill buscar-en-apuntes, para que
  el agente consulte el mismo indice que el nucleo.
- Todo local (127.0.0.1); sin datos personales (rutas y modelo de GPU scrubeados).
2026-08-18 11:26:42 +02:00

90 lines
3.6 KiB
Bash
Executable file

#!/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