This is the major change. All the _is_speaking, _run_finished, etc. flags are gone, replaced by a single self._state variable and a _set_state method. The logic is now much cleaner.
Adds a handler for the VOICE_ASSISTANT_ERROR event, publishing a voice_error event to the EventBus so the LedController can provide visual feedback.
Fixes a race condition where the "Responding" LED effect was being cancelled prematurely, ensuring it now plays for the full duration of the TTS audio.
Instantiates the MicMuteSwitchEntity on startup to register it with Home Assistant.
Updates the central message handler to correctly route SwitchCommandRequest messages from Home Assistant to the appropriate entity.