Stream events (SSE)
The global event firehose as server-sent events (text/event-stream). Every client consumes this one stream; events are encoded once per update and fanned out per connection, and a slow client is dropped rather than blocking the others. Filter to one session with the sessionId query parameter. Each SSE frame’s id field carries the event id; on reconnect, send it in the Last-Event-ID request header to resume from the first event after it — delivery survives client restarts. Event ids are monotonic integers and the replay buffer is time-boxed: when Last-Event-ID is older than the oldest retained event, the server starts the stream live rather than erroring; the client detects the gap between its last id and the first received id and must re-sync state through the GET endpoints before trusting the stream again. The data field of each frame is one JSON Event envelope, discriminated by its type property. A REPLAY MAY BE SERVED IN BLOCKS. When the backlog past Last-Event-ID is long, the server writes a bounded block of frames and then ends the connection rather than materialising the whole backlog onto it. The block-end is an ordinary end of connection carrying no marker: a client resumes as it would from any drop, sending the last id it received as Last-Event-ID, and continues from exactly there. Nothing is lost and nothing is duplicated — a client that already skips ids at or below the last one it delivered needs no change at all, and a replay short enough to fit in one block is served exactly as before. A CURSOR THIS STORE CANNOT HONOUR IS REFUSED, not served. A Last-Event-ID naming an event newer than anything the store holds gets 409 (NRY-0026) instead of an open stream: the replay past it is empty by definition and every live event is below it, so a 200 there is a connection that can never carry a frame — silent for the life of the process, with nothing timing out to say so. It is what a client holds after the store underneath it was replaced. A cursor that is merely OLD is unaffected and still starts the stream live. The remedy is to resume with no Last-Event-ID, never to retry the same cursor.
Headers
Resume the stream from the first event after this id, as defined by the SSE specification.
Query Parameters
Only stream events for this session.
When sessionId narrows the stream, also deliver the events that belong to no session at all — things true of the whole machine, like an installed package's files changing under everybody (ladder-changed). Off by default, so an existing consumer's stream is unchanged. Ignored without sessionId, where the unfiltered firehose already carries them.
Response
An open server-sent event stream. Each frame's data field is one Event envelope.
- Option 1
- Option 2
- Option 3
- Option 4
- Option 5
- Option 6
- Option 7
- Option 8
- Option 9
- Option 10
- Option 11
- Option 12
- Option 13
- Option 14
- Option 15
- Option 16
- Option 17
- Option 18
- Option 19
- Option 20
- Option 21
- Option 22
- Option 23
- Option 24
- Option 25
- Option 26
- Option 27
- Option 28
- Option 29
- Option 30
- Option 31
- Option 32
- Option 33
The typed event envelope carried in each SSE frame's data field, discriminated by type.
Monotonic per-stream event id, usable as Last-Event-ID.
The event type, discriminating the payload.
"session-created"A session came into existence.

