- Clean up voice sessions on WebSocket disconnect (prevents timer leak) - Guard against missing LLM config in voice_stop send path - Return overlay to idle on goal_failed (prevents stuck UI)
- Clean up voice sessions on WebSocket disconnect (prevents timer leak) - Guard against missing LLM config in voice_stop send path - Return overlay to idle on goal_failed (prevents stuck UI)