Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
69 changes: 57 additions & 12 deletions src/autocoder/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,31 @@
A powerful autonomous coding system with parallel agents, web UI, and MCP tools.
"""

__version__ = "0.1.0"
from __future__ import annotations

import importlib
from typing import TYPE_CHECKING, Any

# Core system exports
from autocoder.core.orchestrator import Orchestrator, create_orchestrator
from autocoder.core.gatekeeper import Gatekeeper
from autocoder.core.worktree_manager import WorktreeManager
from autocoder.core.knowledge_base import KnowledgeBase, get_knowledge_base
from autocoder.core.model_settings import ModelSettings, ModelPreset, get_full_model_id
from autocoder.core.test_framework_detector import TestFrameworkDetector
from autocoder.core.database import Database, get_database
__version__ = "0.1.0"

# Agent exports
from autocoder.agent.agent import run_autonomous_agent
from autocoder.agent.client import ClaudeSDKClient
_LAZY_EXPORTS: dict[str, tuple[str, str]] = {
# Core system
"Orchestrator": ("autocoder.core.orchestrator", "Orchestrator"),
"create_orchestrator": ("autocoder.core.orchestrator", "create_orchestrator"),
"Gatekeeper": ("autocoder.core.gatekeeper", "Gatekeeper"),
"WorktreeManager": ("autocoder.core.worktree_manager", "WorktreeManager"),
"KnowledgeBase": ("autocoder.core.knowledge_base", "KnowledgeBase"),
"get_knowledge_base": ("autocoder.core.knowledge_base", "get_knowledge_base"),
"ModelSettings": ("autocoder.core.model_settings", "ModelSettings"),
"ModelPreset": ("autocoder.core.model_settings", "ModelPreset"),
"get_full_model_id": ("autocoder.core.model_settings", "get_full_model_id"),
"TestFrameworkDetector": ("autocoder.core.test_framework_detector", "TestFrameworkDetector"),
"Database": ("autocoder.core.database", "Database"),
"get_database": ("autocoder.core.database", "get_database"),
# Agent
"run_autonomous_agent": ("autocoder.agent.agent", "run_autonomous_agent"),
"ClaudeSDKClient": ("autocoder.agent.client", "ClaudeSDKClient"),
}

__all__ = [
# Core system
Expand All @@ -37,3 +48,37 @@
"run_autonomous_agent",
"ClaudeSDKClient",
]

if TYPE_CHECKING:
from autocoder.agent.agent import run_autonomous_agent as run_autonomous_agent
from autocoder.agent.client import ClaudeSDKClient as ClaudeSDKClient
from autocoder.core.database import Database as Database
from autocoder.core.database import get_database as get_database
from autocoder.core.gatekeeper import Gatekeeper as Gatekeeper
from autocoder.core.knowledge_base import KnowledgeBase as KnowledgeBase
from autocoder.core.knowledge_base import get_knowledge_base as get_knowledge_base
from autocoder.core.model_settings import ModelPreset as ModelPreset
from autocoder.core.model_settings import ModelSettings as ModelSettings
from autocoder.core.model_settings import get_full_model_id as get_full_model_id
from autocoder.core.orchestrator import Orchestrator as Orchestrator
from autocoder.core.orchestrator import create_orchestrator as create_orchestrator
from autocoder.core.test_framework_detector import (
TestFrameworkDetector as TestFrameworkDetector,
)
from autocoder.core.worktree_manager import WorktreeManager as WorktreeManager


def __getattr__(name: str) -> Any:
spec = _LAZY_EXPORTS.get(name)
if not spec:
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")

module_name, attr_name = spec
module = importlib.import_module(module_name)
value = getattr(module, attr_name)
globals()[name] = value # Cache for future access
return value


def __dir__() -> list[str]:
return sorted(list(globals().keys()) + list(_LAZY_EXPORTS.keys()))
58 changes: 51 additions & 7 deletions src/autocoder/core/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,25 @@
- Database: SQLite database wrapper
"""

from autocoder.core.orchestrator import Orchestrator, create_orchestrator
from autocoder.core.gatekeeper import Gatekeeper
from autocoder.core.worktree_manager import WorktreeManager
from autocoder.core.knowledge_base import KnowledgeBase, get_knowledge_base
from autocoder.core.model_settings import ModelSettings, ModelPreset, get_full_model_id
from autocoder.core.test_framework_detector import TestFrameworkDetector
from autocoder.core.database import Database, get_database
from __future__ import annotations

import importlib
from typing import TYPE_CHECKING, Any

_LAZY_EXPORTS: dict[str, tuple[str, str]] = {
"Orchestrator": ("autocoder.core.orchestrator", "Orchestrator"),
"create_orchestrator": ("autocoder.core.orchestrator", "create_orchestrator"),
"Gatekeeper": ("autocoder.core.gatekeeper", "Gatekeeper"),
"WorktreeManager": ("autocoder.core.worktree_manager", "WorktreeManager"),
"KnowledgeBase": ("autocoder.core.knowledge_base", "KnowledgeBase"),
"get_knowledge_base": ("autocoder.core.knowledge_base", "get_knowledge_base"),
"ModelSettings": ("autocoder.core.model_settings", "ModelSettings"),
"ModelPreset": ("autocoder.core.model_settings", "ModelPreset"),
"get_full_model_id": ("autocoder.core.model_settings", "get_full_model_id"),
"TestFrameworkDetector": ("autocoder.core.test_framework_detector", "TestFrameworkDetector"),
"Database": ("autocoder.core.database", "Database"),
"get_database": ("autocoder.core.database", "get_database"),
}

__all__ = [
"Orchestrator",
Expand All @@ -33,3 +45,35 @@
"Database",
"get_database",
]

if TYPE_CHECKING:
from autocoder.core.database import Database as Database
from autocoder.core.database import get_database as get_database
from autocoder.core.gatekeeper import Gatekeeper as Gatekeeper
from autocoder.core.knowledge_base import KnowledgeBase as KnowledgeBase
from autocoder.core.knowledge_base import get_knowledge_base as get_knowledge_base
from autocoder.core.model_settings import ModelPreset as ModelPreset
from autocoder.core.model_settings import ModelSettings as ModelSettings
from autocoder.core.model_settings import get_full_model_id as get_full_model_id
from autocoder.core.orchestrator import Orchestrator as Orchestrator
from autocoder.core.orchestrator import create_orchestrator as create_orchestrator
from autocoder.core.test_framework_detector import (
TestFrameworkDetector as TestFrameworkDetector,
)
from autocoder.core.worktree_manager import WorktreeManager as WorktreeManager


def __getattr__(name: str) -> Any:
spec = _LAZY_EXPORTS.get(name)
if not spec:
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")

module_name, attr_name = spec
module = importlib.import_module(module_name)
value = getattr(module, attr_name)
globals()[name] = value # Cache for future access
return value


def __dir__() -> list[str]:
return sorted(list(globals().keys()) + list(_LAZY_EXPORTS.keys()))
Loading