import pytest from app.core.contracts import AgentDefinition, CoreResult, ResolvedAgentConfig from app.service.agent.base import BaseAgent from app.service.agent.factory import AgentFactory from app.service.agent.governance import review_output @pytest.fixture def governance(): class TestGovernance: async def resolve(self, definition, context): return ResolvedAgentConfig(config_version="test", prompt_version="test", model_endpoint="test") async def recall(self, context): return () async def review(self, result, context, config, memories, *, agent_type: str = ""): # 透传 `agent_type`:门禁 F5(面向客户输出 100% 附固定话术)由它判定, # 替身若不转发,`test_worker_runtime_mysql` 那条端到端断言会拿不到免责声明。 return review_output(result, context, config, memories, agent_type=agent_type) return TestGovernance() @pytest.fixture def acceptance_registry(monkeypatch, governance): """Explicit test registration; production does not silently create business Agents.""" class TestAgent(BaseAgent): async def handle(self, request, context): return CoreResult(text="test result") definition = AgentDefinition(agent_type="customer_service", version="test", allowed_roles=("customer",), allowed_portals=("api",)) registry = AgentFactory(governance) registry.register(definition, lambda _: TestAgent(definition)) monkeypatch.setattr("app.service.agent_run_application_service.get_agent_factory", lambda: registry) return registry