- Add empty text guard to prevent TTS call on empty turns
- Remove dead condition (ttsMode !== 'all' is always true when ttsMode === 'final')
- Fix test expectations for non-routed flow
Fixes review comments from greptile-apps[bot]
- Add text fallback when TTS synthesis fails or returns no media
- Skip fallback when blocks already delivered (prevents duplicates)
- Skip fallback for ttsMode='all' (blocks already processed with TTS)
- Use delivery.deliver for proper routing in cross-provider turns
- Add comprehensive test coverage for all scenarios
Fixes#46814