| from __future__ import annotations |
|
|
| import logging |
| from dataclasses import dataclass |
| from pathlib import Path |
|
|
| from adam.config import ConfigManager |
| from adam.executor import ToolExecutor |
| from adam.job_manager import JobManager |
| from adam.logging_setup import configure_logging |
| from adam.monitoring import SystemMonitor |
| from adam.planner import Planner |
| from adam.registry import ToolRegistry |
| from adam.tool_folders import ToolFolderManager |
| from adam.ui.main_window import MainWindow |
|
|
|
|
| @dataclass(slots=True) |
| class ApplicationServices: |
| jobs: JobManager |
| monitor: SystemMonitor |
| logger: logging.Logger |
|
|
| def shutdown(self) -> None: |
| self.jobs.shutdown() |
| self.monitor.close() |
| for handler in list(self.logger.handlers): |
| self.logger.removeHandler(handler) |
| handler.close() |
|
|
|
|
| def build_application(root: Path) -> tuple[MainWindow, ApplicationServices]: |
| root = root.resolve() |
| logger = configure_logging(root) |
| config = ConfigManager(root) |
| registry = ToolRegistry(root) |
| tool_folders = ToolFolderManager(config) |
| monitor = SystemMonitor(root) |
| executor = ToolExecutor( |
| root, |
| registry, |
| logger, |
| step_delay=float(config.get("demo_step_delay", 0.24)), |
| ) |
| jobs = JobManager(root, executor, logger, config) |
| planner = Planner(root, registry, config) |
| window = MainWindow( |
| root, |
| planner, |
| registry, |
| jobs, |
| config, |
| monitor, |
| tool_folders, |
| ) |
| services = ApplicationServices(jobs=jobs, monitor=monitor, logger=logger) |
| return window, services |
|
|