0.3.9 fixes the biggest remaining mismatch between Keating's chat UI and the underlying model stream. Assistant replies no longer wait for the final committed message before appearing in the transcript: the thread now renders the live partial assistant message as it arrives.
Live Reply Stream
The chat panel now merges agent.state.streamingMessage into the visible transcript while a run is active. That means token streaming works for the browser model path and for provider-backed models that already emit normal text deltas through @earendil-works/pi-ai.
Thinking Stream
Keating already had a dedicated Reasoning renderer for assistant content parts of type thinking. 0.3.9 connects that renderer to the live stream, so models that emit thinking_start, thinking_delta, and thinking_end events now reveal their in-progress reasoning in real time instead of only after the assistant turn finishes.
Prefill State
Before the first streamed text or reasoning chunk arrives, the thread keeps a lightweight rotating status line in place. Once the stream contains real content, Keating swaps that placeholder for the live assistant bubble rather than flashing an empty panel.