Przeglądaj źródła

主机:在生产组合中注入统一领域服务

更新 Host composition 的 repository、planning、candidate、validation 和 runtime 装配,使 Goal 校验、Prompt 来源和 Trace 用量读取共享同一依赖边界。
SamLee 9 godzin temu
rodzic
commit
13ca3c4f46

+ 26 - 21
script_build_host/src/script_build_host/composition.py

@@ -139,18 +139,6 @@ def compose_host(dependencies: HostDependencies) -> HostComposition:
     prompt_resolver = SnapshotRoleSystemPromptResolver(
         dependencies.bindings, dependencies.input_snapshots
     )
-    coordinator = wire_orchestration(
-        dependencies.runner,
-        dependencies.task_store,
-        dependencies.framework_artifact_store,
-        dependencies.orchestration_config,
-        dependencies.event_sink,
-        validation_policy=ScriptBuildValidationPolicy(),
-        deterministic_validator=ScriptBuildDeterministicValidator(),
-        evidence_provider=evidence_provider,
-        role_run_config_resolver=model_resolver,
-        role_system_prompt_resolver=prompt_resolver,
-    )
     contract_store = dependencies.task_contract_store
     if contract_store is None:
         data_root = dependencies.agent_data_root
@@ -177,14 +165,6 @@ def compose_host(dependencies: HostDependencies) -> HostComposition:
         bindings=dependencies.bindings,
         accepted_inputs=accepted_inputs,
     )
-    planning_service = PhaseTwoPlanningService(
-        coordinator=coordinator,
-        bindings=dependencies.bindings,
-        contracts=contract_store,
-        artifacts=dependencies.business_artifacts,
-        closure_gate=boundary_verifier,
-        limits=dependencies.phase_two_limits,
-    )
     candidate_service = PhaseTwoCandidateService(
         bindings=dependencies.bindings,
         task_store=dependencies.task_store,
@@ -198,12 +178,35 @@ def compose_host(dependencies: HostDependencies) -> HostComposition:
         max_image_bytes=dependencies.max_image_bytes,
         max_total_image_bytes=dependencies.max_total_image_bytes,
     )
-    planning_service.workspace_lifecycle = candidate_service
     root_delivery = RootDeliveryService(
         bindings=dependencies.bindings,
         task_store=dependencies.task_store,
         artifacts=dependencies.business_artifacts,
     )
+    coordinator = wire_orchestration(
+        dependencies.runner,
+        dependencies.task_store,
+        dependencies.framework_artifact_store,
+        dependencies.orchestration_config,
+        dependencies.event_sink,
+        validation_policy=ScriptBuildValidationPolicy(),
+        deterministic_validator=ScriptBuildDeterministicValidator(
+            candidates=candidate_service,
+            root_delivery=root_delivery,
+        ),
+        evidence_provider=evidence_provider,
+        role_run_config_resolver=model_resolver,
+        role_system_prompt_resolver=prompt_resolver,
+    )
+    planning_service = PhaseTwoPlanningService(
+        coordinator=coordinator,
+        bindings=dependencies.bindings,
+        contracts=contract_store,
+        artifacts=dependencies.business_artifacts,
+        closure_gate=boundary_verifier,
+        limits=dependencies.phase_two_limits,
+    )
+    planning_service.workspace_lifecycle = candidate_service
     transition_gate = BuildTransitionGate()
     direction_reconciler = DirectionReconciler(
         coordinator=coordinator,
@@ -324,6 +327,8 @@ def compose_host(dependencies: HostDependencies) -> HostComposition:
         legacy_projection=dependencies.legacy_projection,
         legacy_api=dependencies.legacy_api,
         http_command_journal=dependencies.http_command_journal,
+        task_contract_store=contract_store,
+        input_snapshots=dependencies.input_snapshots,
     )
     return HostComposition(
         app=app,

+ 1 - 1
script_build_host/tests/test_legacy_input_and_adapters.py

@@ -20,6 +20,7 @@ from script_build_host.domain.ports import PromptRequest
 from script_build_host.infrastructure.legacy_tables import (
     build_strategy,
     build_strategy_version,
+    legacy_metadata,
     prompt,
     topic_build_composition_item,
     topic_build_item_relation,
@@ -29,7 +30,6 @@ from script_build_host.infrastructure.legacy_tables import (
     topic_build_record,
     topic_build_topic,
     topic_pattern_execution,
-    legacy_metadata,
 )
 from script_build_host.repositories.legacy_input import LegacySqlAlchemyInputReader