From fa2dc027213e6a77ab35554286012e010aaeca9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A0=20Arrufat?= Date: Sun, 12 Jul 2026 22:10:29 +0200 Subject: [PATCH] fix(agent): reset stream_active at turn start `stream_active` relied on every runTools exit path balancing pause with `endStreamedText`. If one is ever missed, a stale-true flag skips the spinner pause on the next turn, interleaving frames with streamed text. Reset it alongside `streamed_text` so the invariant is local. --- src/agent/Agent.zig | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/agent/Agent.zig b/src/agent/Agent.zig index 8c340f3c8..6ca6c9b8b 100644 --- a/src/agent/Agent.zig +++ b/src/agent/Agent.zig @@ -1663,6 +1663,10 @@ fn processUserMessage(self: *Agent, input: TurnInput) !?[]const u8 { const ma = self.conversation.arena.allocator(); self.api_error_detail = null; self.streamed_text = false; + // Defensive: if an exit path ever missed `endStreamedText`, a stale-true + // `stream_active` would skip the spinner pause on the next turn's first + // delta and let frames interleave with the text. Reset it at the source. + self.stream_active = false; self.http_interrupt.reset(); try self.conversation.ensureSystemPrompt();