"""AI UI Control plugin — WebSocket-based UI control for AI agents. Phase 4: KI-UI-Steuerung Enables AI agents to control the frontend UI: navigate, filter, open contacts, manage modals, switch tabs, and change settings. Commands flow: AI agent → REST API → WebSocket → Frontend → executes → WebSocket feedback → REST poll """ from __future__ import annotations import logging from app.plugins.base import BasePlugin from app.plugins.manifest import PluginManifest, PluginRouteDef logger = logging.getLogger(__name__) class AIUIControlPlugin(BasePlugin): """AI UI Control plugin: lets AI agents control the frontend UI.""" manifest = PluginManifest( name="ai_ui_control", version="1.0.0", display_name="KI UI-Steuerung", description=( "Enables AI agents to control the frontend UI via WebSocket. " "Supports navigation, filtering, contact opening, modals, tabs, and settings." ), dependencies=["permissions"], routes=[ PluginRouteDef( path="/api/v1/ai-ui-control", module="app.plugins.builtins.ai_ui_control.routes", router_attr="router", ), ], events=[], migrations=[], permissions=[ "ai_ui_control:read", "ai_ui_control:write", ], is_core=True, ) async def on_install(self, db, service_container) -> None: """Register the WebSocket manager in the service container.""" from app.plugins.builtins.ai_ui_control.websocket_manager import AIUIControlWSManager ws_manager = AIUIControlWSManager() service_container.register("ai_ui_control_ws", ws_manager) logger.info("AI UI Control WebSocket manager registered") async def on_uninstall(self, db, service_container) -> None: """Clean up the WebSocket manager.""" if service_container.has("ai_ui_control_ws"): service_container.remove("ai_ui_control_ws") logger.info("AI UI Control WebSocket manager removed")