The live server-sent-events feed: one snapshot, then generation-stamped deltas.
GET/api/stream
On connect the stream emits one snapshot event carrying the current track
picture (tracks plus the generation it reflects), then pushes events as they
happen. Every delta carries the stream generation (stream_gen on domain events,
generation on the snapshot and resync); a gap in the sequence tells the
client to re-hydrate from GET /api/picture.
Stream-control events, never filtered by kinds:
snapshot: the initial track picture,{ tracks, generation }.resync: this connection lagged and deltas were dropped,{ generation, dropped }; re-hydrate fromGET /api/picture.
Picture-slice events, pushed when the underlying state changes, never filtered:
live_state: the autonomy ceiling (engagement_mode) or the tracker's self-report (fusion_health), whichever changed.engagement_slice:{ threats, plan, candidate_plans, sim }, the engagement picture that replaces wholesale rather than merging.fleet_slice:{ assets }, our forces.sensor_slice:{ sensors }, one view per placed or observed sensor.integration_slice:{ integrations, candidates }, per-protocol status and the unclaimed-source candidate list.
Domain events (subject to the kinds filter), each a wire JSON body named by its
frozen SSE event name: track_update, track_removed, obs, alert, coa,
engagement, bda, swarm_command, tasking, tasking_status, threat,
plan, posture, influence.
A comment ping keeps the connection alive every 15 seconds.
Request
Responses
- 200
the SSE stream: a snapshot event, then generation-stamped deltas until the client disconnects