from __future__ import annotations import logging logger = logging.getLogger(__name__) class AgentRegistry: def __init__(self): self._agents: dict = {} # agent_key -> BaseAgent instance self._active: set = set() self._capabilities: dict = {} async def load_from_odoo(self, odoo_client): try: rows = await odoo_client.search_read( 'ab.ai.agent.registry', [['is_active', '=', True]], ['agent_key', 'name', 'capabilities_summary', 'sweep_enabled', 'sweep_interval_hours']) self._active = {r['agent_key'] for r in rows} self._capabilities = {r['agent_key']: r.get('capabilities_summary', '') for r in rows} logger.info('AgentRegistry loaded: active=%s', list(self._active)) except Exception as exc: logger.error('AgentRegistry.load_from_odoo failed: %s', exc) async def get_active_agents(self): return [{'agent_key': k, 'capabilities_summary': self._capabilities.get(k, '')} for k in self._active] async def is_active(self, agent_key): return agent_key in self._active async def sync(self, active_keys): self._active = set(active_keys) logger.info('AgentRegistry synced: active=%s', active_keys) def register(self, agent_key, agent_instance): self._agents[agent_key] = agent_instance def get_agent_instance(self, agent_key): return self._agents.get(agent_key)