Observation inventory
Generated from EnsoObservation, the pi-event mapper, the prompt route, the follow carrier, the AG-UI adapter and the browser chunk router. One vocabulary (#162 workstream 5): a CUSTOM chunk is named by the observation kind (or the frame type) it carries whole.
Parser limitation: schemas must be direct identifiers in
EnsoObservation = Type.Union([…])and directType.Objectdeclarations with one inlinekindliteral. Producers are recognized from object-literalkindfields. Adapter output recognizescaseblocks,EventType.*,custom(observation)and explicit empty-array branches; router branches arecase '<kind>':lines; browser store semantics remain explicit checked metadata.
A carrier marked ELIDED does not reach the browser in that state (#279): the observation is still numbered, still logged at trace and still counted in the emitted tail of /api/threads/:id/events, but no frame is written — the adapter emission for that state is dropped, so the bytes would be serialised and schema-checked for nothing. The sent tail claims only what crossed, and frame seq skips the elided numbers.
| Kind | Schema | Producer | Follow carrier | Adapter emissions | Browser consumer / store |
|---|---|---|---|---|---|
custom-entry |
EnsoCustomEntry |
mapper | observation frame |
custom-entry (CUSTOM) |
recentChunks; a guard refusal (enso-guard-denial, #387) lands in guardDenials — every other entry is rendered by nothing (L3) |
dialog-settled |
EnsoDialogSettled |
mapper | observation frame |
dialog-settled (CUSTOM) |
recentChunks; dialog |
extension-error |
EnsoExtensionError |
mapper | observation frame |
EventType.RUN_ERROR |
TanStack chat state |
extension-ui-request |
EnsoExtensionUiRequest |
mapper | observation frame |
EventType.RUN_ERRORextension-ui-request (CUSTOM)dropped |
recentChunks; dialog (a blocking question; or notifications if unreadable); notifications (a notify)TanStack chat state nothing consumes the dropped branch |
message-end |
EnsoMessageEnd |
mapper | observation frame |
dropped |
nothing consumes the dropped branch |
message-start |
EnsoMessageStart |
mapper | observation frame |
dropped |
nothing consumes the dropped branch |
model |
EnsoModelObservation |
mapper | observation frame |
model (CUSTOM) |
recentChunks; model (the composer chip and thinking level, #338 slice 2) |
permission-mode |
EnsoPermissionMode |
mapper | observation frame |
permission-mode (CUSTOM) |
recentChunks; permissionMode; modeLines |
permission-mode-rejected |
EnsoPermissionModeRejected |
prompt route | observation frame |
permission-mode-rejected (CUSTOM) |
recentChunks; notifications (a warning) |
prompt-rejected |
EnsoPromptRejected |
prompt route | observation frame |
EventType.RUN_ERROR |
TanStack chat state |
provider-refused |
EnsoProviderRefused |
mapper | observation frame |
provider-refused (CUSTOM) |
recentChunks; notifications (an error); refusal (the status bar’s class word, #340) |
provider-retry |
EnsoProviderRetrying |
mapper | observation frame |
provider-retry (CUSTOM) |
recentChunks; notifications (a warning, #340) |
provider-retry-ended |
EnsoProviderRetryEnded |
mapper | observation frame |
provider-retry-ended (CUSTOM) |
recentChunks; notifications (an error, when no retry got through — #380 review) |
queue |
EnsoQueue |
mapper | observation frame |
queue (CUSTOM) |
recentChunks; queue |
run-ended |
EnsoRunEnded |
mapper | observation frame |
EventType.STEP_FINISHED |
TanStack chat state |
session-usage |
EnsoSessionUsageObservation |
mapper | observation frame |
session-usage (CUSTOM) |
recentChunks; usage (the status bar’s cost and context meter, #45); clears refusal once output grows (#340) |
settled |
EnsoSettled |
mapper | observation frame |
EventType.RUN_FINISHED |
TanStack chat state |
text-delta |
EnsoTextDelta |
mapper | observation frame |
EventType.TEXT_MESSAGE_CONTENT |
TanStack chat state |
thinking-delta |
EnsoThinkingDelta |
mapper | observation frame |
EventType.REASONING_MESSAGE_CONTENT |
TanStack chat state |
tool-call |
EnsoToolCall |
mapper | observation frame |
EventType.TOOL_CALL_STARTEventType.TOOL_CALL_ARGS |
TanStack chat state |
tool-result |
EnsoToolResultObservation |
mapper | observation frame — ELIDED while complete: false |
EventType.TOOL_CALL_RESULTdropped |
TanStack chat state nothing consumes the dropped branch |
turn-end |
EnsoTurnEnd |
mapper | observation frame |
EventType.STEP_FINISHED |
TanStack chat state |
turn-start |
EnsoTurnStart |
mapper | observation frame |
EventType.STEP_STARTED |
TanStack chat state |
unmapped |
EnsoUnmapped |
mapper | observation frame |
unmapped (CUSTOM) |
recentChunks only; nothing else consumes it |
Chunks that are not observations
Section titled “Chunks that are not observations”| Chunk | Carries | Browser consumer / store |
|---|---|---|
snapshot |
the follow’s snapshot frame, whole (follow.ts) |
recentChunks; permissionMode; modeLines; model; cwd; usage; refusal (the status bar’s class word off the branch’s last reply, #381); dialog (the complete open list); generation; disconnected |
status |
the follow’s status frame, whole (follow.ts) |
recentChunks; generation; disconnected |
follow-ended |
the adapter, when the follow closes under the page (follow-connection.ts) |
recentChunks; disconnected; notifications |
Diagnostics
Section titled “Diagnostics”- Schemas with no producer: none
- CUSTOM kinds the router records but does not route:
unmapped - Kinds with an unclassified cell: none
Inventory: 24 union members; 12 ride CUSTOM by kind; 3 chunks that are not observations; every chunk name has a checked browser classification.