Streaming chat
Model output is pushed as assistant.delta events, token by token; each surface folds the stream into UI state with the same applyEvent reducer. Delta events are live-only: never persisted, and the durable assistant.message rebuilds the final state after reconnect.
assistant.delta · reasoning.delta · tool.progress = live-only