diff --git a/CHANGELOG.md b/CHANGELOG.md index 2a31b58c8..bf0fcb59b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,7 +20,7 @@ - ElevenLabs: add retry/backoff for 429/5xx and include content-type in errors for debugging. - Talk Mode: align to the gateway’s main session key and fall back to history polling when chat events drop (prevents stuck “thinking” / missing messages). - Talk Mode: treat history timestamps as seconds or milliseconds to avoid stale assistant picks (macOS/iOS/Android). -- Chat UI: dedupe identical history messages to avoid duplicate bubbles. +- Chat UI: clear streaming/tool bubbles when external runs finish, preventing duplicate assistant bubbles. - Chat UI: user bubbles use `ui.seamColor` (fallback to a calmer default blue). - Talk Mode: wait for chat history to surface the assistant reply before starting TTS (macOS/iOS/Android). - iOS Talk Mode: fix chat completion wait to time out even if no events arrive (prevents “Thinking…” hangs). diff --git a/apps/shared/ClawdisKit/Sources/ClawdisChatUI/ChatViewModel.swift b/apps/shared/ClawdisKit/Sources/ClawdisChatUI/ChatViewModel.swift index 85799fbe7..087ef912c 100644 --- a/apps/shared/ClawdisKit/Sources/ClawdisChatUI/ChatViewModel.swift +++ b/apps/shared/ClawdisKit/Sources/ClawdisChatUI/ChatViewModel.swift @@ -325,6 +325,8 @@ public final class ClawdisChatViewModel { // Keep multiple clients in sync: if another client finishes a run for our session, refresh history. switch chat.state { case "final", "aborted", "error": + self.streamingAssistantText = nil + self.pendingToolCallsById = [:] Task { await self.refreshHistoryAfterRun() } default: break