diff --git a/backend/autometabuilder/__init__.py b/backend/autometabuilder/__init__.py index 9579bdc..3eb319c 100644 --- a/backend/autometabuilder/__init__.py +++ b/backend/autometabuilder/__init__.py @@ -5,7 +5,7 @@ import json import os from pathlib import Path -from .metadata_loader import load_metadata +from .loaders.metadata_loader import load_metadata def _load_messages_path(path: Path) -> dict: diff --git a/backend/autometabuilder/app_runner.py b/backend/autometabuilder/app_runner.py index 10a71d4..f4bb1df 100644 --- a/backend/autometabuilder/app_runner.py +++ b/backend/autometabuilder/app_runner.py @@ -1,14 +1,12 @@ """Application runner.""" import logging import os -from .cli_args import parse_args -from .env_loader import load_env +from .utils import parse_args +from .loaders import load_env from .logging_config import configure_logging -from .metadata_loader import load_metadata +from .loaders import load_metadata from .web.server import start_web_ui -from .workflow_config_loader import load_workflow_config -from .workflow_context_builder import build_workflow_context -from .workflow_engine_builder import build_workflow_engine +from .engine import load_workflow_config, build_workflow_context, build_workflow_engine def run_app() -> None: diff --git a/backend/autometabuilder/engine/__init__.py b/backend/autometabuilder/engine/__init__.py new file mode 100644 index 0000000..3fea340 --- /dev/null +++ b/backend/autometabuilder/engine/__init__.py @@ -0,0 +1,18 @@ +""" +Workflow engine initialization and building. + +This module contains the workflow engine setup components: +- workflow_config_loader: Load workflow configuration JSON +- workflow_context_builder: Build workflow runtime context +- workflow_engine_builder: Assemble workflow engine with dependencies +""" + +from .workflow_config_loader import load_workflow_config +from .workflow_context_builder import build_workflow_context +from .workflow_engine_builder import build_workflow_engine + +__all__ = [ + "load_workflow_config", + "build_workflow_context", + "build_workflow_engine", +] diff --git a/backend/autometabuilder/workflow_config_loader.py b/backend/autometabuilder/engine/workflow_config_loader.py similarity index 100% rename from backend/autometabuilder/workflow_config_loader.py rename to backend/autometabuilder/engine/workflow_config_loader.py diff --git a/backend/autometabuilder/workflow_context_builder.py b/backend/autometabuilder/engine/workflow_context_builder.py similarity index 90% rename from backend/autometabuilder/workflow_context_builder.py rename to backend/autometabuilder/engine/workflow_context_builder.py index 86602e8..be52570 100644 --- a/backend/autometabuilder/workflow_context_builder.py +++ b/backend/autometabuilder/engine/workflow_context_builder.py @@ -1,5 +1,5 @@ """Build workflow runtime context.""" -from .model_resolver import resolve_model_name +from ..utils.model_resolver import resolve_model_name def build_workflow_context(parts: dict) -> dict: diff --git a/backend/autometabuilder/workflow_engine_builder.py b/backend/autometabuilder/engine/workflow_engine_builder.py similarity index 67% rename from backend/autometabuilder/workflow_engine_builder.py rename to backend/autometabuilder/engine/workflow_engine_builder.py index efcd917..749ea80 100644 --- a/backend/autometabuilder/workflow_engine_builder.py +++ b/backend/autometabuilder/engine/workflow_engine_builder.py @@ -1,11 +1,11 @@ """Build workflow engine with dependencies.""" -from .workflow.engine import WorkflowEngine -from .workflow.input_resolver import InputResolver -from .workflow.loop_executor import LoopExecutor -from .workflow.node_executor import NodeExecutor -from .workflow.plugin_registry import PluginRegistry, load_plugin_map -from .workflow.runtime import WorkflowRuntime -from .workflow.tool_runner import ToolRunner +from ..workflow.engine import WorkflowEngine +from ..workflow.input_resolver import InputResolver +from ..workflow.loop_executor import LoopExecutor +from ..workflow.node_executor import NodeExecutor +from ..workflow.plugin_registry import PluginRegistry, load_plugin_map +from ..workflow.runtime import WorkflowRuntime +from ..workflow.tool_runner import ToolRunner def build_workflow_engine(workflow_config: dict, context: dict, logger): diff --git a/backend/autometabuilder/loaders/__init__.py b/backend/autometabuilder/loaders/__init__.py new file mode 100644 index 0000000..1c32b3c --- /dev/null +++ b/backend/autometabuilder/loaders/__init__.py @@ -0,0 +1,33 @@ +""" +Loaders module for AutoMetabuilder. + +This module contains various loader utilities: +- callable_loader: Load callables by dotted path +- env_loader: Load environment variables from .env +- metadata_loader: Load metadata.json +- plugin_loader: Load custom tools from plugins directory +- prompt_loader: Load prompt configuration +- tool_policy_loader: Load tool policies from JSON +- tool_registry_loader: Load tool registry entries +- tools_loader: Load tool specs from JSON +""" + +from .callable_loader import load_callable +from .env_loader import load_env +from .metadata_loader import load_metadata +from .plugin_loader import load_plugins +from .prompt_loader import load_prompt_yaml +from .tool_policy_loader import load_tool_policies +from .tool_registry_loader import load_tool_registry +from .tools_loader import load_tools + +__all__ = [ + "load_callable", + "load_env", + "load_metadata", + "load_plugins", + "load_prompt_yaml", + "load_tool_policies", + "load_tool_registry", + "load_tools", +] diff --git a/backend/autometabuilder/callable_loader.py b/backend/autometabuilder/loaders/callable_loader.py similarity index 100% rename from backend/autometabuilder/callable_loader.py rename to backend/autometabuilder/loaders/callable_loader.py diff --git a/backend/autometabuilder/env_loader.py b/backend/autometabuilder/loaders/env_loader.py similarity index 100% rename from backend/autometabuilder/env_loader.py rename to backend/autometabuilder/loaders/env_loader.py diff --git a/backend/autometabuilder/metadata_loader.py b/backend/autometabuilder/loaders/metadata_loader.py similarity index 100% rename from backend/autometabuilder/metadata_loader.py rename to backend/autometabuilder/loaders/metadata_loader.py diff --git a/backend/autometabuilder/plugin_loader.py b/backend/autometabuilder/loaders/plugin_loader.py similarity index 100% rename from backend/autometabuilder/plugin_loader.py rename to backend/autometabuilder/loaders/plugin_loader.py diff --git a/backend/autometabuilder/prompt_loader.py b/backend/autometabuilder/loaders/prompt_loader.py similarity index 100% rename from backend/autometabuilder/prompt_loader.py rename to backend/autometabuilder/loaders/prompt_loader.py diff --git a/backend/autometabuilder/tool_policy_loader.py b/backend/autometabuilder/loaders/tool_policy_loader.py similarity index 100% rename from backend/autometabuilder/tool_policy_loader.py rename to backend/autometabuilder/loaders/tool_policy_loader.py diff --git a/backend/autometabuilder/tool_registry_loader.py b/backend/autometabuilder/loaders/tool_registry_loader.py similarity index 100% rename from backend/autometabuilder/tool_registry_loader.py rename to backend/autometabuilder/loaders/tool_registry_loader.py diff --git a/backend/autometabuilder/tools_loader.py b/backend/autometabuilder/loaders/tools_loader.py similarity index 100% rename from backend/autometabuilder/tools_loader.py rename to backend/autometabuilder/loaders/tools_loader.py diff --git a/backend/autometabuilder/services/__init__.py b/backend/autometabuilder/services/__init__.py new file mode 100644 index 0000000..4b8d008 --- /dev/null +++ b/backend/autometabuilder/services/__init__.py @@ -0,0 +1,22 @@ +""" +Services module for AutoMetabuilder. + +This module contains service integrations: +- github_integration: GitHub API integration +- github_service: GitHub service builder +- openai_client: OpenAI client helpers +- openai_factory: OpenAI client factory +""" + +from .github_integration import GitHubIntegration, get_repo_name_from_env +from .github_service import create_github_integration +from .openai_client import get_completion +from .openai_factory import create_openai_client + +__all__ = [ + "GitHubIntegration", + "get_repo_name_from_env", + "create_github_integration", + "get_completion", + "create_openai_client", +] diff --git a/backend/autometabuilder/github_integration.py b/backend/autometabuilder/services/github_integration.py similarity index 98% rename from backend/autometabuilder/github_integration.py rename to backend/autometabuilder/services/github_integration.py index 4634cf1..cd60018 100644 --- a/backend/autometabuilder/github_integration.py +++ b/backend/autometabuilder/services/github_integration.py @@ -7,7 +7,7 @@ from github.Issue import Issue from github.PullRequest import PullRequest from tenacity import retry, stop_after_attempt, wait_exponential -from . import load_messages +from .. import load_messages class GitHubIntegration: diff --git a/backend/autometabuilder/github_service.py b/backend/autometabuilder/services/github_service.py similarity index 100% rename from backend/autometabuilder/github_service.py rename to backend/autometabuilder/services/github_service.py diff --git a/backend/autometabuilder/openai_client.py b/backend/autometabuilder/services/openai_client.py similarity index 100% rename from backend/autometabuilder/openai_client.py rename to backend/autometabuilder/services/openai_client.py diff --git a/backend/autometabuilder/openai_factory.py b/backend/autometabuilder/services/openai_factory.py similarity index 100% rename from backend/autometabuilder/openai_factory.py rename to backend/autometabuilder/services/openai_factory.py diff --git a/backend/autometabuilder/tools/run_docker_task.py b/backend/autometabuilder/tools/run_docker_task.py index 82092bc..e003262 100644 --- a/backend/autometabuilder/tools/run_docker_task.py +++ b/backend/autometabuilder/tools/run_docker_task.py @@ -1,6 +1,6 @@ """Run a task inside Docker.""" import os -from ..docker_utils import run_command_in_docker +from ..utils.docker_utils import run_command_in_docker def run_docker_task(image: str, command: str, workdir: str = "/workspace") -> str: diff --git a/backend/autometabuilder/utils/__init__.py b/backend/autometabuilder/utils/__init__.py new file mode 100644 index 0000000..79889e0 --- /dev/null +++ b/backend/autometabuilder/utils/__init__.py @@ -0,0 +1,28 @@ +""" +Utilities module for AutoMetabuilder. + +This module contains various utility functions: +- cli_args: CLI argument parsing +- context_loader: Load SDLC context from repo and GitHub +- docker_utils: Docker command utilities +- model_resolver: Resolve LLM model names +- roadmap_utils: Roadmap file utilities +- tool_map_builder: Build tool map from registry +""" + +from .cli_args import parse_args +from .context_loader import get_sdlc_context +from .docker_utils import run_command_in_docker +from .model_resolver import resolve_model_name +from .roadmap_utils import is_mvp_reached, update_roadmap +from .tool_map_builder import build_tool_map + +__all__ = [ + "parse_args", + "get_sdlc_context", + "run_command_in_docker", + "resolve_model_name", + "is_mvp_reached", + "update_roadmap", + "build_tool_map", +] diff --git a/backend/autometabuilder/cli_args.py b/backend/autometabuilder/utils/cli_args.py similarity index 100% rename from backend/autometabuilder/cli_args.py rename to backend/autometabuilder/utils/cli_args.py diff --git a/backend/autometabuilder/context_loader.py b/backend/autometabuilder/utils/context_loader.py similarity index 95% rename from backend/autometabuilder/context_loader.py rename to backend/autometabuilder/utils/context_loader.py index 60a2404..943060c 100644 --- a/backend/autometabuilder/context_loader.py +++ b/backend/autometabuilder/utils/context_loader.py @@ -1,7 +1,7 @@ """Load SDLC context from repo and GitHub.""" import os import logging -from .github_integration import GitHubIntegration +from ..services.github_integration import GitHubIntegration logger = logging.getLogger("autometabuilder") diff --git a/backend/autometabuilder/docker_utils.py b/backend/autometabuilder/utils/docker_utils.py similarity index 100% rename from backend/autometabuilder/docker_utils.py rename to backend/autometabuilder/utils/docker_utils.py diff --git a/backend/autometabuilder/model_resolver.py b/backend/autometabuilder/utils/model_resolver.py similarity index 100% rename from backend/autometabuilder/model_resolver.py rename to backend/autometabuilder/utils/model_resolver.py diff --git a/backend/autometabuilder/roadmap_utils.py b/backend/autometabuilder/utils/roadmap_utils.py similarity index 100% rename from backend/autometabuilder/roadmap_utils.py rename to backend/autometabuilder/utils/roadmap_utils.py diff --git a/backend/autometabuilder/tool_map_builder.py b/backend/autometabuilder/utils/tool_map_builder.py similarity index 93% rename from backend/autometabuilder/tool_map_builder.py rename to backend/autometabuilder/utils/tool_map_builder.py index 4247fb5..8009eb8 100644 --- a/backend/autometabuilder/tool_map_builder.py +++ b/backend/autometabuilder/utils/tool_map_builder.py @@ -1,5 +1,5 @@ """Build tool map from registry entries.""" -from .callable_loader import load_callable +from ..loaders.callable_loader import load_callable def build_tool_map(gh, registry_entries: list) -> dict: diff --git a/backend/autometabuilder/web/data/metadata.py b/backend/autometabuilder/web/data/metadata.py index 500d376..a8dc698 100644 --- a/backend/autometabuilder/web/data/metadata.py +++ b/backend/autometabuilder/web/data/metadata.py @@ -3,7 +3,7 @@ from __future__ import annotations import json from typing import Any -from autometabuilder.metadata_loader import load_metadata as load_metadata_full +from autometabuilder.loaders.metadata_loader import load_metadata as load_metadata_full from .json_utils import read_json from .paths import PACKAGE_ROOT diff --git a/backend/autometabuilder/workflow/plugin_loader.py b/backend/autometabuilder/workflow/plugin_loader.py index 8d3ce52..e42eb74 100644 --- a/backend/autometabuilder/workflow/plugin_loader.py +++ b/backend/autometabuilder/workflow/plugin_loader.py @@ -1,5 +1,5 @@ """Load workflow plugins by dotted path.""" -from ..callable_loader import load_callable +from ..loaders.callable_loader import load_callable def load_plugin_callable(path: str): diff --git a/backend/autometabuilder/workflow/plugins/backend/backend_build_tool_map.py b/backend/autometabuilder/workflow/plugins/backend/backend_build_tool_map.py index 6d326e3..2529f2f 100644 --- a/backend/autometabuilder/workflow/plugins/backend/backend_build_tool_map.py +++ b/backend/autometabuilder/workflow/plugins/backend/backend_build_tool_map.py @@ -1,6 +1,6 @@ """Workflow plugin: build tool map.""" -from ....tool_map_builder import build_tool_map -from ....tool_registry_loader import load_tool_registry +from ....utils.tool_map_builder import build_tool_map +from ....loaders.tool_registry_loader import load_tool_registry def run(runtime, _inputs): diff --git a/backend/autometabuilder/workflow/plugins/backend/backend_create_github.py b/backend/autometabuilder/workflow/plugins/backend/backend_create_github.py index c61925b..7e2b6e2 100644 --- a/backend/autometabuilder/workflow/plugins/backend/backend_create_github.py +++ b/backend/autometabuilder/workflow/plugins/backend/backend_create_github.py @@ -1,5 +1,5 @@ """Workflow plugin: create GitHub integration.""" -from ....github_service import create_github_integration +from ....services.github_service import create_github_integration def run(runtime, _inputs): diff --git a/backend/autometabuilder/workflow/plugins/backend/backend_create_openai.py b/backend/autometabuilder/workflow/plugins/backend/backend_create_openai.py index 1454052..f83dfff 100644 --- a/backend/autometabuilder/workflow/plugins/backend/backend_create_openai.py +++ b/backend/autometabuilder/workflow/plugins/backend/backend_create_openai.py @@ -1,5 +1,5 @@ """Workflow plugin: create OpenAI client.""" -from ....openai_factory import create_openai_client +from ....services.openai_factory import create_openai_client def run(runtime, _inputs): diff --git a/backend/autometabuilder/workflow/plugins/backend/backend_load_env.py b/backend/autometabuilder/workflow/plugins/backend/backend_load_env.py index 323e195..9ac56d6 100644 --- a/backend/autometabuilder/workflow/plugins/backend/backend_load_env.py +++ b/backend/autometabuilder/workflow/plugins/backend/backend_load_env.py @@ -1,5 +1,5 @@ """Workflow plugin: load environment variables.""" -from ....env_loader import load_env +from ....loaders.env_loader import load_env def run(_runtime, _inputs): diff --git a/backend/autometabuilder/workflow/plugins/backend/backend_load_metadata.py b/backend/autometabuilder/workflow/plugins/backend/backend_load_metadata.py index 7373c2e..b7f1770 100644 --- a/backend/autometabuilder/workflow/plugins/backend/backend_load_metadata.py +++ b/backend/autometabuilder/workflow/plugins/backend/backend_load_metadata.py @@ -1,5 +1,5 @@ """Workflow plugin: load metadata.""" -from ....metadata_loader import load_metadata +from ....loaders.metadata_loader import load_metadata def run(runtime, _inputs): diff --git a/backend/autometabuilder/workflow/plugins/backend/backend_load_plugins.py b/backend/autometabuilder/workflow/plugins/backend/backend_load_plugins.py index 8b8acce..99812ff 100644 --- a/backend/autometabuilder/workflow/plugins/backend/backend_load_plugins.py +++ b/backend/autometabuilder/workflow/plugins/backend/backend_load_plugins.py @@ -1,5 +1,5 @@ """Workflow plugin: load and register plugins.""" -from ....plugin_loader import load_plugins +from ....loaders.plugin_loader import load_plugins def run(runtime, _inputs): diff --git a/backend/autometabuilder/workflow/plugins/backend/backend_load_prompt.py b/backend/autometabuilder/workflow/plugins/backend/backend_load_prompt.py index ac16993..2e8d5ef 100644 --- a/backend/autometabuilder/workflow/plugins/backend/backend_load_prompt.py +++ b/backend/autometabuilder/workflow/plugins/backend/backend_load_prompt.py @@ -1,6 +1,6 @@ """Workflow plugin: load prompt configuration.""" -from ....prompt_loader import load_prompt_yaml -from ....model_resolver import resolve_model_name +from ....loaders.prompt_loader import load_prompt_yaml +from ....utils.model_resolver import resolve_model_name def run(runtime, _inputs): diff --git a/backend/autometabuilder/workflow/plugins/backend/backend_load_tool_policies.py b/backend/autometabuilder/workflow/plugins/backend/backend_load_tool_policies.py index e864aae..ba2a59f 100644 --- a/backend/autometabuilder/workflow/plugins/backend/backend_load_tool_policies.py +++ b/backend/autometabuilder/workflow/plugins/backend/backend_load_tool_policies.py @@ -1,5 +1,5 @@ """Workflow plugin: load tool policies.""" -from ....tool_policy_loader import load_tool_policies +from ....loaders.tool_policy_loader import load_tool_policies def run(runtime, _inputs): diff --git a/backend/autometabuilder/workflow/plugins/backend/backend_load_tool_registry.py b/backend/autometabuilder/workflow/plugins/backend/backend_load_tool_registry.py index 303da3b..c0bbf04 100644 --- a/backend/autometabuilder/workflow/plugins/backend/backend_load_tool_registry.py +++ b/backend/autometabuilder/workflow/plugins/backend/backend_load_tool_registry.py @@ -1,5 +1,5 @@ """Workflow plugin: load tool registry.""" -from ....tool_registry_loader import load_tool_registry +from ....loaders.tool_registry_loader import load_tool_registry def run(runtime, _inputs): diff --git a/backend/autometabuilder/workflow/plugins/backend/backend_load_tools.py b/backend/autometabuilder/workflow/plugins/backend/backend_load_tools.py index ebd7202..8ec19af 100644 --- a/backend/autometabuilder/workflow/plugins/backend/backend_load_tools.py +++ b/backend/autometabuilder/workflow/plugins/backend/backend_load_tools.py @@ -1,5 +1,5 @@ """Workflow plugin: load tools.""" -from ....tools_loader import load_tools +from ....loaders.tools_loader import load_tools def run(runtime, _inputs): diff --git a/backend/autometabuilder/workflow/plugins/backend/backend_parse_cli_args.py b/backend/autometabuilder/workflow/plugins/backend/backend_parse_cli_args.py index 5b89157..ba4c74b 100644 --- a/backend/autometabuilder/workflow/plugins/backend/backend_parse_cli_args.py +++ b/backend/autometabuilder/workflow/plugins/backend/backend_parse_cli_args.py @@ -1,5 +1,5 @@ """Workflow plugin: parse CLI arguments.""" -from ....cli_args import parse_args +from ....utils.cli_args import parse_args def run(runtime, _inputs): diff --git a/backend/autometabuilder/workflow/plugins/core/core_ai_request.py b/backend/autometabuilder/workflow/plugins/core/core_ai_request.py index e9a4c65..d5825c0 100644 --- a/backend/autometabuilder/workflow/plugins/core/core_ai_request.py +++ b/backend/autometabuilder/workflow/plugins/core/core_ai_request.py @@ -1,5 +1,5 @@ """Workflow plugin: AI request.""" -from ....openai_client import get_completion +from ....services.openai_client import get_completion def run(runtime, inputs): diff --git a/backend/autometabuilder/workflow/plugins/core/core_append_tool_results.py b/backend/autometabuilder/workflow/plugins/core/core_append_tool_results.py index 517d2fb..39a9f2c 100644 --- a/backend/autometabuilder/workflow/plugins/core/core_append_tool_results.py +++ b/backend/autometabuilder/workflow/plugins/core/core_append_tool_results.py @@ -1,6 +1,6 @@ """Workflow plugin: append tool results.""" from ....integrations.notifications import notify_all -from ....roadmap_utils import is_mvp_reached +from ....utils.roadmap_utils import is_mvp_reached def run(runtime, inputs): diff --git a/backend/autometabuilder/workflow/plugins/core/core_load_context.py b/backend/autometabuilder/workflow/plugins/core/core_load_context.py index 7616143..68eb2c8 100644 --- a/backend/autometabuilder/workflow/plugins/core/core_load_context.py +++ b/backend/autometabuilder/workflow/plugins/core/core_load_context.py @@ -1,5 +1,5 @@ """Workflow plugin: load SDLC context.""" -from ....context_loader import get_sdlc_context +from ....utils.context_loader import get_sdlc_context def run(runtime, _inputs): diff --git a/backend/autometabuilder/workflow/plugins/tools/tools_run_docker.py b/backend/autometabuilder/workflow/plugins/tools/tools_run_docker.py index 12d0d52..8702dc1 100644 --- a/backend/autometabuilder/workflow/plugins/tools/tools_run_docker.py +++ b/backend/autometabuilder/workflow/plugins/tools/tools_run_docker.py @@ -1,5 +1,5 @@ """Workflow plugin: run command in Docker container.""" -from ....docker_utils import run_command_in_docker +from ....utils.docker_utils import run_command_in_docker def run(_runtime, inputs): diff --git a/backend/autometabuilder/workflow/plugins/utils/utils_check_mvp.py b/backend/autometabuilder/workflow/plugins/utils/utils_check_mvp.py index 0b3c853..1af20ac 100644 --- a/backend/autometabuilder/workflow/plugins/utils/utils_check_mvp.py +++ b/backend/autometabuilder/workflow/plugins/utils/utils_check_mvp.py @@ -1,5 +1,5 @@ """Workflow plugin: check if MVP is reached.""" -from ....roadmap_utils import is_mvp_reached +from ....utils.roadmap_utils import is_mvp_reached def run(_runtime, _inputs): diff --git a/backend/autometabuilder/workflow/plugins/utils/utils_update_roadmap.py b/backend/autometabuilder/workflow/plugins/utils/utils_update_roadmap.py index 62b29a3..af84fbf 100644 --- a/backend/autometabuilder/workflow/plugins/utils/utils_update_roadmap.py +++ b/backend/autometabuilder/workflow/plugins/utils/utils_update_roadmap.py @@ -1,5 +1,5 @@ """Workflow plugin: update roadmap file.""" -from ....roadmap_utils import update_roadmap +from ....utils.roadmap_utils import update_roadmap def run(_runtime, inputs):