"""OpenClaw Conversation integration for Home Assistant.""" from __future__ import annotations import logging from typing import Any import voluptuous as vol from homeassistant.config_entries import ConfigEntry from homeassistant.const import Platform from homeassistant.core import HomeAssistant from homeassistant.helpers import config_validation as cv from .const import ( CONF_AGENT_NAME, CONF_OPENCLAW_HOST, CONF_OPENCLAW_PORT, CONF_TIMEOUT, DEFAULT_AGENT, DEFAULT_HOST, DEFAULT_PORT, DEFAULT_TIMEOUT, DOMAIN, ) from .conversation import OpenClawCLIAgent _LOGGER = logging.getLogger(__name__) PLATFORMS = [Platform.CONVERSATION] CONFIG_SCHEMA = vol.Schema( { DOMAIN: vol.Schema( { vol.Optional(CONF_OPENCLAW_HOST, default=DEFAULT_HOST): cv.string, vol.Optional(CONF_OPENCLAW_PORT, default=DEFAULT_PORT): cv.port, vol.Optional(CONF_AGENT_NAME, default=DEFAULT_AGENT): cv.string, vol.Optional(CONF_TIMEOUT, default=DEFAULT_TIMEOUT): cv.positive_int, } ) }, extra=vol.ALLOW_EXTRA, ) async def async_setup(hass: HomeAssistant, config: dict[str, Any]) -> bool: """Set up the OpenClaw Conversation component.""" hass.data.setdefault(DOMAIN, {}) if DOMAIN not in config: return True conf = config[DOMAIN] # Store config hass.data[DOMAIN] = { "config": conf, } # Register the conversation agent agent = OpenClawCLIAgent(hass, conf) # Add to conversation agent registry from homeassistant.components import conversation conversation.async_set_agent(hass, DOMAIN, agent) _LOGGER.info("OpenClaw Conversation agent registered") return True async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: """Set up OpenClaw Conversation from a config entry.""" hass.data.setdefault(DOMAIN, {}) # Store entry data hass.data[DOMAIN][entry.entry_id] = entry.data # Register the conversation agent agent = OpenClawCLIAgent(hass, entry.data) from homeassistant.components import conversation conversation.async_set_agent(hass, DOMAIN, agent) _LOGGER.info("OpenClaw Conversation agent registered from config entry") return True async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: """Unload a config entry.""" # Unregister the conversation agent from homeassistant.components import conversation conversation.async_unset_agent(hass, DOMAIN) hass.data[DOMAIN].pop(entry.entry_id, None) return True