"""Public contract for the automation plugin. Exposes models, services, scheduler, and agent communication for other plugins. """ from __future__ import annotations from app.plugins.builtins.automation.agent_comm import send_agent_message from app.plugins.builtins.automation.agent_runner import run_agent from app.plugins.builtins.automation.execution_engine import run_automation from app.plugins.builtins.automation.models import ( AgentDefinition, AgentRun, AgentVersion, AutomationCronJob, AutomationDefinition, AutomationRun, AutomationVersion, ) from app.plugins.builtins.automation.scheduler import ( calculate_next_run, scheduler_tick, ) from app.plugins.builtins.automation.services import ( AgentService, AutomationService, CronJobService, RunLogService, ) from app.plugins.builtins.contracts import get_contract_registry class AutomationContract: """Public API surface for the automation plugin.""" contract_name = "automation" # ─── models ─── AgentDefinition = AgentDefinition Automation = AutomationDefinition CronJob = AutomationCronJob AgentRun = AgentRun AgentVersion = AgentVersion AutomationRun = AutomationRun AutomationVersion = AutomationVersion # ─── services ─── AgentService = AgentService AutomationService = AutomationService CronJobService = CronJobService RunLogService = RunLogService # ─── agent_runner ─── run_agent = staticmethod(run_agent) # ─── execution_engine ─── run_automation = staticmethod(run_automation) # ─── scheduler ─── calculate_next_run = staticmethod(calculate_next_run) scheduler_tick = staticmethod(scheduler_tick) # ─── agent_comm ─── send_agent_message = staticmethod(send_agent_message) @classmethod def get_function(cls, name: str): """Return a callable exposed by this contract, or None if absent.""" return getattr(cls, name, None) # ─── self-registration ─── _contract = AutomationContract() get_contract_registry().register("automation", _contract) __all__ = [ "AutomationContract", "AgentDefinition", "AgentService", "AutomationService", "CronJobService", "RunLogService", ]