* Decouple an emitted message from the projector's internal log. The reducer * stores emitted messages by reference; the projector keeps mutating its own * copy in place (`slot.text += delta`), so sharing the content objects makes * the reducer's delta-append run on already-appended text — the fi
(msg: AppMessage)
| 332 | * chunk of every text/thinking block rendered twice. |
| 333 | */ |
| 334 | function cloneMessage(msg: AppMessage): AppMessage { |
| 335 | return { ...msg, content: msg.content.map((c) => ({ ...c })) }; |
| 336 | } |
| 337 | |
| 338 | function startAssistantMessage(state: SessionState, sessionId: string, promptId: string): AppMessage { |
| 339 | const msg: AppMessage = { |
no outgoing calls
no test coverage detected