| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- from __future__ import annotations
- from agent.core.presets import AGENT_PRESETS
- from script_build_host.agents.presets import register_script_presets
- from script_build_host.domain.phase_protocol import allowed_child_kinds
- from script_build_host.domain.task_capabilities import task_capabilities, task_capability
- from script_build_host.domain.task_contracts import ScriptTaskKind
- def test_capability_catalog_closes_worker_tool_schema_and_topology_contracts() -> None:
- register_script_presets()
- capabilities = task_capabilities()
- assert {item.task_kind for item in capabilities} == {
- kind
- for kind in ScriptTaskKind
- if kind
- not in {
- ScriptTaskKind.PATTERN_RETRIEVAL,
- ScriptTaskKind.DECODE_RETRIEVAL,
- ScriptTaskKind.EXTERNAL_RETRIEVAL,
- ScriptTaskKind.KNOWLEDGE_RETRIEVAL,
- }
- }
- for capability in capabilities:
- preset = AGENT_PRESETS[capability.worker_preset]
- assert set(preset.allowed_tools) == set(capability.allowed_tools)
- assert capability.output_schema() in capability.output_schemas
- assert allowed_child_kinds(
- phase=capability.phase,
- parent_kind=capability.task_kind,
- ) == capability.child_kinds
- def test_phase_root_topology_is_machine_readable_and_fail_closed() -> None:
- assert allowed_child_kinds(phase=1, parent_kind=None) == frozenset(
- {ScriptTaskKind.DIRECTION}
- )
- assert allowed_child_kinds(phase=2, parent_kind=None) == frozenset(
- {ScriptTaskKind.CANDIDATE_PORTFOLIO}
- )
- assert allowed_child_kinds(phase=3, parent_kind=None) == frozenset(
- {ScriptTaskKind.ROOT_DELIVERY}
- )
- assert not allowed_child_kinds(phase=99, parent_kind=None)
- assert not allowed_child_kinds(
- phase=1, parent_kind=ScriptTaskKind.PATTERN_RETRIEVAL
- )
- def test_catalog_keeps_element_write_ownership_narrow() -> None:
- capability = task_capability(ScriptTaskKind.ELEMENT_SET)
- assert capability.write_scope == ("script-build://writes/elements",)
- assert "save_script_paragraphs" not in capability.allowed_tools
|