from collections.abc import Callable from dataclasses import dataclass from typing import Any from pydantic import BaseModel from core.base import BaseWorker from core.schemas import ModuleManifest from reporting.models import PluginRuntimeError WorkerBuilder = Callable[[BaseModel | dict[str, Any]], BaseWorker] @dataclass(frozen=True) class LoadedModule: package_name: str manifest: ModuleManifest build_worker: WorkerBuilder config_model: type[BaseModel] @dataclass(frozen=True) class LoadedWorker: worker: BaseWorker manifest: ModuleManifest config: BaseModel | dict[str, Any] @dataclass(frozen=True) class ModuleLoadResult: loaded_workers: list[LoadedWorker] errors: list[PluginRuntimeError]