重构 改为标准化输出

This commit is contained in:
2026-09-01 14:10:23 +08:00
parent 7533b298f1
commit bc87bd6d2d
10151 changed files with 1709487 additions and 11776 deletions
+62
View File
@@ -0,0 +1,62 @@
"""Protocol v3 composition root. This is the only layer joining adapters."""
from __future__ import annotations
from dataclasses import dataclass
from app.cad_agent.adapters.artifact_store import FileArtifactStore
from app.cad_agent.adapters.event_publisher import IdempotentInProcessPublisher
from app.cad_agent.adapters.runtime import ProfileCadRuntime
from app.cad_agent.adapters.review_gateway import RenderedReviewGateway
from app.cad_agent.adapters.sqlite_repository import SqliteTaskRepository
from app.cad_agent.adapters.structured_llm import StructuredModelGateway
from app.cad_agent.adapters.verifier import RegistryVerifierExecutor
from app.cad_agent.application.action_handlers import ActionCommandHandler
from app.cad_agent.application.outbox import OutboxDispatcher
from app.cad_agent.application.requirements_review import RequirementsCommandHandler
from app.cad_agent.application.workflow import ModelIdentity, WorkflowConfig, WorkflowCoordinator
from app.cad_agent.domain.verifier_registry import default_registry
from app.settings import Settings
@dataclass(frozen=True, slots=True)
class V3Services:
repository: SqliteTaskRepository
artifacts: FileArtifactStore
workflow: WorkflowCoordinator
models: StructuredModelGateway
outbox: OutboxDispatcher
def compose_v3(settings: Settings) -> V3Services:
repository = SqliteTaskRepository(settings.task_root.parent / "autonomous-cad-v3.sqlite3")
artifacts = FileArtifactStore(settings.task_root)
runtime = ProfileCadRuntime(settings)
registry = default_registry()
verifier = RegistryVerifierExecutor(registry)
requirements = RequirementsCommandHandler(repository, artifacts, registry)
actions = ActionCommandHandler(repository, artifacts, runtime, verifier)
fallbacks = tuple(
ModelIdentity(provider.id, model.id)
for provider in settings.providers
if provider.configured
for model in provider.models[:1]
)
models = StructuredModelGateway(settings)
outbox = OutboxDispatcher(repository, IdempotentInProcessPublisher())
workflow = WorkflowCoordinator(
WorkflowConfig(
max_turns=max(8, settings.agent_tool_calls_per_cycle * 8),
format_error_limit=settings.agent_format_error_repeat_limit,
requirements_review_limit=3,
author_fallbacks=fallbacks,
),
repository,
artifacts,
runtime,
models,
RenderedReviewGateway(models),
requirements,
actions,
)
return V3Services(repository, artifacts, workflow, models, outbox)