@@ -381,11 +381,10 @@ class NodeRuntime(
381381 parseChatSendRunId(response) ? : idempotencyKey
382382 },
383383 speakAssistantReply = { text ->
384- // Skip if TalkModeManager is handling TTS (ttsOnAllResponses) to avoid
385- // double-speaking the same assistant reply from both pipelines.
386- if (! talkMode.ttsOnAllResponses) {
387- voiceReplySpeaker.speakAssistantReply(text)
388- }
384+ // Voice-tab replies should speak through the dedicated reply speaker.
385+ // Relying on talkMode.ttsOnAllResponses here can drop playback if the
386+ // chat-event path misses the terminal event for this turn.
387+ voiceReplySpeaker.speakAssistantReply(text)
389388 },
390389 )
391390 }
@@ -596,12 +595,11 @@ class NodeRuntime(
596595
597596 scope.launch {
598597 prefs.talkEnabled.collect { enabled ->
599- // MicCaptureManager handles STT + send to gateway.
600- // TalkModeManager plays TTS on assistant responses .
598+ // MicCaptureManager handles STT + send to gateway, while the dedicated
599+ // reply speaker handles TTS for assistant replies in the voice tab .
601600 micCapture.setMicEnabled(enabled)
602601 if (enabled) {
603- // Mic on = user is on voice screen and wants TTS responses.
604- talkMode.ttsOnAllResponses = true
602+ talkMode.ttsOnAllResponses = false
605603 scope.launch { talkMode.ensureChatSubscribed() }
606604 }
607605 externalAudioCaptureActive.value = enabled
@@ -763,7 +761,7 @@ class NodeRuntime(
763761 if (value) {
764762 // Tapping mic on interrupts any active TTS (barge-in)
765763 talkMode.stopTts()
766- talkMode.ttsOnAllResponses = true
764+ talkMode.ttsOnAllResponses = false
767765 scope.launch { talkMode.ensureChatSubscribed() }
768766 }
769767 micCapture.setMicEnabled(value)
@@ -778,7 +776,7 @@ class NodeRuntime(
778776 if (voiceReplySpeakerLazy.isInitialized()) {
779777 voiceReplySpeaker.setPlaybackEnabled(value)
780778 }
781- // Keep TalkMode in sync so speaker mute works when ttsOnAllResponses is active .
779+ // Keep TalkMode in sync so any active Talk playback also respects speaker mute .
782780 talkMode.setPlaybackEnabled(value)
783781 }
784782
0 commit comments