71 lines
2.6 KiB
Python
71 lines
2.6 KiB
Python
"""AgentSubagentDefaults round-trips and exposes documented semantics."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from opensquilla.gateway.config import (
|
|
AgentDefaults,
|
|
AgentEntryConfig,
|
|
AgentSubagentDefaults,
|
|
GatewayConfig,
|
|
SubagentsGatewayConfig,
|
|
)
|
|
|
|
|
|
def test_subagent_defaults_optional_fields_default_to_none() -> None:
|
|
d = AgentSubagentDefaults()
|
|
assert d.model is None
|
|
assert d.max_children_per_session is None
|
|
assert d.allow_agents is None
|
|
assert d.cascade_on_parent_kill is True
|
|
|
|
|
|
def test_allow_agents_distinguishes_unset_self_only_and_wildcard() -> None:
|
|
unset = AgentSubagentDefaults()
|
|
self_only = AgentSubagentDefaults(allow_agents=[])
|
|
wildcard = AgentSubagentDefaults(allow_agents=["*"])
|
|
|
|
# Round-trip via model_dump preserves the three distinct shapes
|
|
assert unset.model_dump()["allow_agents"] is None
|
|
assert self_only.model_dump()["allow_agents"] == []
|
|
assert wildcard.model_dump()["allow_agents"] == ["*"]
|
|
|
|
|
|
def test_agent_entry_carries_optional_subagents_block() -> None:
|
|
bare = AgentEntryConfig(id="research")
|
|
assert bare.subagents is None
|
|
|
|
configured = AgentEntryConfig(
|
|
id="research",
|
|
subagents=AgentSubagentDefaults(model="haiku", max_children_per_session=5),
|
|
)
|
|
assert configured.subagents is not None
|
|
assert configured.subagents.model == "haiku"
|
|
assert configured.subagents.max_children_per_session == 5
|
|
|
|
|
|
def test_gateway_config_exposes_agents_defaults_and_subagents_subtree() -> None:
|
|
cfg = GatewayConfig()
|
|
# Defaults exist and are additive — current behavior preserved.
|
|
assert isinstance(cfg.agents_defaults, AgentDefaults)
|
|
assert cfg.agents_defaults.subagents is None # unset → no global override
|
|
assert isinstance(cfg.subagents, SubagentsGatewayConfig)
|
|
assert cfg.subagents.enforce_disabled_agents is False
|
|
assert cfg.subagents.subagent_reserved_slots == 2
|
|
assert cfg.subagents.archive_after_minutes == 60
|
|
|
|
|
|
def test_gateway_config_accepts_explicit_subagent_defaults() -> None:
|
|
cfg = GatewayConfig(
|
|
agents_defaults=AgentDefaults(subagents=AgentSubagentDefaults(model="haiku")),
|
|
subagents=SubagentsGatewayConfig(
|
|
enforce_disabled_agents=True,
|
|
subagent_reserved_slots=4,
|
|
archive_after_minutes=0,
|
|
),
|
|
)
|
|
assert cfg.agents_defaults.subagents is not None
|
|
assert cfg.agents_defaults.subagents.model == "haiku"
|
|
assert cfg.subagents.enforce_disabled_agents is True
|
|
assert cfg.subagents.subagent_reserved_slots == 4
|
|
assert cfg.subagents.archive_after_minutes == 0
|