from gitea.client import GiteaClient from core.interfaces import ( IssuesClient, PullRequestsClient, FilesClient, RefsClient, ReposClient, ) from core.coding_agent import CodingAgent from core.agent import CavemanAgent from gitea.workspace import WorkspaceManager class GiteaClientFactory: """Factory for creating Gitea client components with dependency injection support.""" @staticmethod def create_full_client() -> GiteaClient: return GiteaClient() @staticmethod def create_issues_client(client: GiteaClient | None = None) -> IssuesClient: if client is None: client = GiteaClient() return client @staticmethod def create_prs_client(client: GiteaClient | None = None) -> PullRequestsClient: if client is None: client = GiteaClient() return client @staticmethod def create_files_client(client: GiteaClient | None = None) -> FilesClient: if client is None: client = GiteaClient() return client @staticmethod def create_refs_client(client: GiteaClient | None = None) -> RefsClient: if client is None: client = GiteaClient() return client @staticmethod def create_repos_client(client: GiteaClient | None = None) -> ReposClient: if client is None: client = GiteaClient() return client class AgentFactory: """Factory for creating AI agent instances.""" @staticmethod def create_coding_agent(model_name: str) -> CodingAgent: return CodingAgent(model_name) @staticmethod def create_caveman_agent(model_name: str) -> CavemanAgent: return CavemanAgent(model_name) class WorkspaceFactory: """Factory for creating workspace manager instances.""" @staticmethod def create_workspace() -> WorkspaceManager: return WorkspaceManager()