- AudioPlayer: buffer chunks before threshold so first ~200ms of audio
is not lost; add onStarted callback so callers know when playback begins
- Main: trigger SPEAKING state when audio actually starts playing (not
before TTS API call), collect PCM chunks and store in message.audioChunks
for instant replay without re-requesting TTS
- Main: save audioText from SSE stream into message state after loadRoomMessages
so speaker button uses the TTS-optimized text instead of empty string
- types: make audioText optional since server-loaded history messages
don't carry this field
- FeedbackWidget: fallback to content when audioText is empty, enabling
speaker button to work on history messages and text-mode responses
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>