Live turn rendering used to show the streaming assistant text as one blob with tool calls pooled in a separate section below, so the live view drifted from the reload view (which threads tool rows inline via toTranscriptMessages). Model now mirrors reload: - turnStore gains streamSegments (completed assistant chunks, each with any tool rows that landed between its predecessor and itself) and streamPendingTools (tool rows waiting for the next chunk) - turnController.flushStreamingSegment() seals the current bufRef into a segment when a new tool.start fires; pending tools get attached to that next chunk so order matches reload hydration - recordMessageComplete returns finalMessages instead of one payload, so appendMessage gets the same shape for live-ending turns as for reloaded ones - appLayout renders segments before the progress/streaming area, and the streaming message + pending-tools fallback carry whatever tools arrived after the last assistant chunk |
||
|---|---|---|
| .. | ||
| appChrome.tsx | ||
| appLayout.tsx | ||
| appOverlays.tsx | ||
| branding.tsx | ||
| markdown.tsx | ||
| maskedPrompt.tsx | ||
| messageLine.tsx | ||
| modelPicker.tsx | ||
| prompts.tsx | ||
| queuedMessages.tsx | ||
| sessionPicker.tsx | ||
| textInput.tsx | ||
| themed.tsx | ||
| thinking.tsx | ||