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).
90 lines
3.6 KiB
Bash
Executable file
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
|