Copilot alerts
Copilot alerts are real, event-driven notifications written to Firestore by ARGUS backend services and surfaced in the operator’s Master Caution strip (bell icon in the toolbar). Unlike in-memory local warnings, these persist through refresh and propagate to every participant in the mission.
Where alerts come from
Backend services write to missions/{missionId}/copilot_alerts:
- CAS agent — collision-avoidance logic. Writes when two aircraft come
within configured proximity thresholds. Type
cas. - argus-copilot — the LLM-backed mission intelligence worker. Writes when it correlates events the operator should know about.
- argus-wifi-sensing (when deployed) — spectrum anomalies, interference warnings.
- DJI HMS — health-management system alerts from docks. Translated
into copilot alerts by argus-dji’s event-handler. Written with severity
- code + human-readable message from the 448-entry DJI code dictionary.
All writers are server-side only — the webapp doesn’t write alerts directly, it only listens.
The Firestore listener
The operation component sets up a real-time listener scoped to the current session:
query( collection(fs, 'missions', missionId, 'copilot_alerts'), where('type', '==', 'cas'), where('createdOn', '>', sessionStart), orderBy('createdOn', 'desc'), firestoreLimit(20))Note the type === 'cas' filter — in the current build only CAS alerts
surface in the console. Other alert types (HMS, wifi-sensing, copilot-
driven) write to the same collection but aren’t yet routed to master
caution. This is a limitation, not a design — the listener’s filter will
broaden as more alert sources mature.
Alert shape
Each copilot_alert doc:
- type —
cas,hms,copilot, etc. - severity —
info/warning/critical. - source —
cas/flag/system/drone/geofence/comms. - title + detail — strings.
- location — optional lat/lng/alt for map integration.
- createdOn — epoch ms.
Master-caution integration
On incoming alert, the listener calls MasterCautionService.pushAlert():
- Badge updates — the bell icon gains a count badge.
- Colour state — if severity is
critical, the bell goes red with a subtle pulse;warningmakes it amber. - Audible tone — a short F-18-style caution tone plays for critical alerts (unless audio is muted globally).
- Blackbox record — every alert is written to the blackbox replay session so after-action review sees it.
Acknowledging alerts
From the master-caution menu (click the bell):
- Per-alert click — dismisses that alert (your dismissal; others still see it).
- Clear All — bulk dismiss.
Dismissal is per-user — the alert doc stays in Firestore so other participants still see it until they dismiss themselves. To permanently remove, an admin must delete the doc directly.
Silence / snooze
A silence for N minutes option suppresses new alerts of a class for N minutes. Useful when a wind warning is repeating every 10 s — mute it while you focus on a different task.
Click-jump from the menu
Alerts with a location field get a “go to” chip. Clicking:
- Pans the map to the alert’s lat/lng.
- Flashes a pulsing ring at the location for a few seconds.
- Switches the map tile to the foreground if minimised.
Voice-command integration
Operators saying EMERGENCY (or any of the 43 EMERGENCY phrase variants
— see Voice commands) during a PTT burst
fire a critical master-caution alert directly from the client, with
the speaker’s mapped position as the alert location. This is the one case
where the webapp writes an alert (with a source: 'voice' tag) for
immediate team-wide broadcast.
Aspirational items
- Watchlist detection hits → copilot alert — YOLO finding a watchlist match would log a detection-hit alert. Plumbing exists; not wired yet.
- Alert routing beyond CAS filter — listener will broaden.
Related
- Toolbar — where the bell lives.
- Voice commands — one way alerts are raised.
- Workflow tile — workflows can write copilot alerts as an action.