🖥 Dashboard Web
Archivo: agentes/supervisores/dashboard-web.ts · Plist: com.rifai.dashboard-web (solo cargado en ~/Library/LaunchAgents, no versionado en cron/) · Horario: cada 1 h (StartInterval 3600s) + RunAtLoad
Qué hace
Genera un panel HTML estático con todo el estado del sistema RifAI: ventas/ROAS reales del último día, estadísticas del Brain corporativo, contenido publicado acumulado, estado de todos los crones launchd, salud de los servicios externos (Meta/Shopify) y últimos blogs/patrones. Se regenera cada hora en dashboard/index.html (abrir con file://) y vuelca también dashboard/state.json para que otros scripts lo consuman.
Cómo funciona
1. Lee métricas históricas de SQLite data/metrics.db (daily_metrics, social_posts, comments/dms_replied).
2. Lee estadísticas del Brain de brain/brain.db (patrones, learnings, corrections, signals, docs indexados) y el tamaño del vector store.
3. Lista los crones con launchctl list | grep com.rifai. y su estado/PID.
4. Comprueba salud de Meta (debug_token, días hasta expirar) y Shopify (/shop.json).
5. Trae los últimos 5 blogs publicados de Shopify.
6. Renderiza un HTML con la estética de marca (charcoal/oro) y tablas, y escribe dashboard/index.html + dashboard/state.json.
Datos/APIs
- SQLite:
data/metrics.dbybrain/brain.db(víabetter-sqlite3, solo lectura). - Meta Graph API (
debug_token). Var:META_PAGE_TOKEN. - Shopify Admin API (
/shop.json,/blogs/.../articles.json). Vars:SHOPIFY_STORE,SHOPIFY_ACCESS_TOKEN. - launchctl para el estado de crones. No envía nada a Telegram.
Cómo probarlo
cd /Users/user/rifai-agents && npx tsx agentes/supervisores/dashboard-web.ts
Esperar: 📊 Dashboard generado: file://…/dashboard/index.html. Ábrelo con open file:///Users/user/rifai-agents/dashboard/index.html.
Si se rompe / recuperar
launchctl unload ~/Library/LaunchAgents/com.rifai.dashboard-web.plist && launchctl load ~/Library/LaunchAgents/com.rifai.dashboard-web.plist
Logs: /Users/user/rifai-agents/logs/dashboard-web.log. Si el HTML sale vacío, suele ser que las DBs SQLite no existen aún (los try/catch lo dejan pasar).
Cómo replicarlo
Lectores SQLite de metrics.db y brain.db, checks de salud Meta/Shopify, parseo de launchctl list, fetch de blogs y un generador de HTML estático con plantilla de marca. Output a dashboard/index.html + state.json. Requiere better-sqlite3.