🛠 Auto-Healer
Archivo: agentes/supervisores/auto-healer.ts · Plist: com.rifai.auto-healer · Horario: cada 30 min (StartInterval 1800s)
Qué hace
Intenta REPARAR automáticamente los agentes en rojo antes de molestar al CEO. Cada 30 minutos lee los estados de los departamentos, junta todos los agentes rojos y prueba reparaciones sencillas (reiniciar el cron, rotar un log gigante). Si lo arregla, avisa al CEOSEC en modo silencioso ("no tienes que hacer nada"). Si NO puede, escala el problema como urgente para intervención manual. Lleva un historial para no entrar en bucle reparando lo mismo.
Cómo funciona
1. Comprueba conectividad básica (ping a api.telegram.org). Sin red → salta la ronda (probable error transitorio).
2. Lee status/*.json y recolecta todos los agentes con color rojo.
3. Por cada rojo: si ya falló ≥3 veces en las últimas 4 h, no reintenta y lo escala directo (anti-loop).
4. Busca el plist del agente en ~/Library/LaunchAgents. Si no hay → es on-demand, escala como "requiere intervención manual".
5. Reparación 1 (kickstart): si el motivo es "sin ejecutarse/sin log" → launchctl kickstart -k gui/<uid>/<label>.
6. Reparación 2 (rotar log + reiniciar): si el motivo es error/exception/sigterm → si el log supera 10 MB lo rota (.old + touch) y vuelve a hacer kickstart.
7. Guarda el resultado en data/heal-history.json (últimos 200).
8. Notifica: reparados → CEOSEC silencioso (sendTo('ceosec', …, true)) + system_health; fallidos → urgente agent_down crítico con los intentos hechos.
Datos/APIs
- Sistema de archivos: lee
status/*.jsonylogs/, escribedata/heal-history.json, rota logs. - launchctl:
kickstartpara reiniciar crons; lista plists de~/Library/LaunchAgents. - Telegram vía
tools/notify-router.ts(notify,sendTo). Eventos:agent_down(crítico),system_health(info). - Lee
.envcon el parser estándar (para las vars que use el router).
Cómo probarlo
cd /Users/user/rifai-agents && npx tsx agentes/supervisores/auto-healer.ts
Esperar: 🛠 Auto-Healer …, nº de agentes en rojo y, si los hay, intentos de kickstart/rotación con resumen reparados/total. Si todo está verde, imprime "Nada que reparar". Ojo: en dry-run puede ejecutar launchctl kickstart real sobre agentes rojos.
Si se rompe / recuperar
launchctl unload ~/Library/LaunchAgents/com.rifai.auto-healer.plist && launchctl load ~/Library/LaunchAgents/com.rifai.auto-healer.plist
Logs: /Users/user/rifai-agents/logs/auto-healer.log. Historial de reparaciones: data/heal-history.json.
Cómo replicarlo
Lector de status/*.json, resolución de label de plist por nombre de agente, dos rutinas de reparación (kickstart launchctl y rotación de log >10 MB), historial anti-loop (≥3 fallos en 4 h → escala), check de conectividad y notificaciones diferenciadas (silenciosa si reparó, crítica si no) vía notify-router.