Fix thread-unsafe state writes; use conversation-agent dropdown

- entity.py: decorate the dispatcher target _handle_update with @callback so it
  runs on the event loop. Without it, async_dispatcher_send offloaded the plain
  sync callback to an executor thread, and async_write_ha_state raised
  "calls async_write_ha_state from a thread other than the event loop".
- config_flow.py: replace the free-text Assist agent field with
  ConversationAgentSelector (a proper agent dropdown), and use LanguageSelector
  for the language field.
- README: clarify that the built-in Assist agent only handles device commands;
  an LLM conversation agent is required for free-form chat.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
claude
2026-07-22 19:13:08 +03:00
parent f02d48777b
commit 66b5d4a64a
4 changed files with 20 additions and 9 deletions

View File

@@ -17,6 +17,10 @@ from homeassistant.core import callback
from homeassistant.helpers import config_validation as cv
from homeassistant.helpers.selector import (
BooleanSelector,
ConversationAgentSelector,
ConversationAgentSelectorConfig,
LanguageSelector,
LanguageSelectorConfig,
NumberSelector,
NumberSelectorConfig,
NumberSelectorMode,
@@ -170,16 +174,14 @@ class ReticulumOptionsFlow(OptionsFlow):
): BooleanSelector(),
vol.Optional(
CONF_ASSIST_AGENT,
description={
"suggested_value": opts.get(CONF_ASSIST_AGENT, "")
},
): TextSelector(),
description={"suggested_value": opts.get(CONF_ASSIST_AGENT)},
): ConversationAgentSelector(ConversationAgentSelectorConfig()),
vol.Optional(
CONF_ASSIST_LANGUAGE,
description={
"suggested_value": opts.get(CONF_ASSIST_LANGUAGE, "")
"suggested_value": opts.get(CONF_ASSIST_LANGUAGE)
},
): TextSelector(),
): LanguageSelector(LanguageSelectorConfig()),
vol.Required(
CONF_ALLOW_ALL, default=opts.get(CONF_ALLOW_ALL, True)
): BooleanSelector(),