Alertas de copiloto
Las alertas de copiloto son notificaciones reales, dirigidas por eventos, escritas a Firestore por los servicios de backend de ARGUS y mostradas en la tira Master Caution del operador (icono de campana en la barra de herramientas). A diferencia de las advertencias locales en memoria, estas persisten a través de refresco y se propagan a cada participante de la misión.
De dónde vienen las alertas
Los servicios de backend escriben a missions/{missionId}/copilot_alerts:
- Agente CAS — lógica de evitación de colisiones. Escribe cuando dos
aeronaves entran en umbrales de proximidad configurados. Tipo
cas. - argus-copilot — el worker de inteligencia de misión respaldado por LLM. Escribe cuando correlaciona eventos que el operador debería conocer.
- argus-wifi-sensing (cuando está desplegado) — anomalías de espectro, advertencias de interferencia.
- DJI HMS — alertas del sistema de gestión de salud desde los docks. Traducidas a alertas de copiloto por el event-handler de argus-dji. Escritas con severidad + código + mensaje legible por humanos del diccionario DJI de 448 entradas.
Todos los escritores son exclusivamente del lado del servidor — la webapp no escribe alertas directamente, solo escucha.
El listener de Firestore
El componente de operación configura un listener en tiempo real con alcance a la sesión actual:
query( collection(fs, 'missions', missionId, 'copilot_alerts'), where('type', '==', 'cas'), where('createdOn', '>', sessionStart), orderBy('createdOn', 'desc'), firestoreLimit(20))Observa el filtro type === 'cas' — en la build actual solo las alertas
CAS aparecen en la consola. Otros tipos de alerta (HMS, wifi-sensing,
dirigidos por copilot) escriben a la misma colección pero aún no se
enrutan a master caution. Esto es una limitación, no un diseño — el
filtro del listener se ampliará a medida que más fuentes de alertas
maduren.
Forma de la alerta
Cada doc copilot_alert:
- type —
cas,hms,copilot, etc. - severity —
info/warning/critical. - source —
cas/flag/system/drone/geofence/comms. - title + detail — cadenas.
- location — lat/lng/alt opcional para integración con el mapa.
- createdOn — ms de época.
Integración con master-caution
Al llegar una alerta, el listener llama a
MasterCautionService.pushAlert():
- Actualización del badge — el icono de campana gana un badge de conteo.
- Estado de color — si la severidad es
critical, la campana se pone roja con un pulso sutil;warningla pone en ámbar. - Tono audible — un tono corto estilo F-18 suena para alertas
critical(a menos que el audio esté silenciado globalmente). - Registro en blackbox — cada alerta se escribe a la sesión de replay de blackbox para que la revisión after-action la vea.
Reconocer alertas
Desde el menú master-caution (haz clic en la campana):
- Clic por alerta — descarta esa alerta (tu descarte; los demás siguen viéndola).
- Borrar todo — descarte masivo.
El descarte es por usuario — el doc de alerta permanece en Firestore de modo que otros participantes siguen viéndola hasta que la descartan por sí mismos. Para eliminarla permanentemente, un admin debe borrar el doc directamente.
Silencio / snooze
Una opción silenciar durante N minutos suprime nuevas alertas de una clase durante N minutos. Útil cuando una advertencia de viento se repite cada 10 s — silénciala mientras te enfocas en otra tarea.
Click-jump desde el menú
Las alertas con un campo location obtienen un chip “ir a”. Al hacer clic:
- El mapa se desplaza a la lat/lng de la alerta.
- Un anillo pulsante destella en la ubicación durante unos segundos.
- El tile de mapa se pone en primer plano si está minimizado.
Integración con comandos de voz
Los operadores que dicen EMERGENCY (o cualquiera de las 43 variantes
de frase EMERGENCY — ver Comandos de voz)
durante una ráfaga PTT disparan una alerta master-caution critical
directamente desde el cliente, con la posición mapeada del hablante como
ubicación de la alerta. Este es el único caso en que la webapp escribe una
alerta (con una etiqueta source: 'voice') para difusión inmediata a
todo el equipo.
Elementos aspiracionales
- Coincidencias de watchlist en detección → alerta de copiloto — que YOLO encuentre una coincidencia de watchlist registraría una alerta de detection-hit. La infraestructura existe; aún no está cableada.
- Enrutamiento de alertas más allá del filtro CAS — el listener se ampliará.
Relacionado
- Barra de herramientas — donde vive la campana.
- Comandos de voz — una forma de levantar alertas.
- Tile de flujo de trabajo — los flujos de trabajo pueden escribir alertas de copiloto como acción.