feat: add agent registry manifests and coverage
Introduce a manifest-backed agent registry surface and align graph tests with the new runtime prompt and tool indexing behavior.
This commit is contained in:
55
backend/app/agents/registry/validator.py
Normal file
55
backend/app/agents/registry/validator.py
Normal file
@@ -0,0 +1,55 @@
|
||||
from collections.abc import Iterable
|
||||
|
||||
from app.agents.registry.models import (
|
||||
AgentManifest,
|
||||
CapabilityManifest,
|
||||
SpecialistTemplateManifest,
|
||||
SubCommanderManifest,
|
||||
)
|
||||
|
||||
|
||||
def _validate_unique_ids(values: Iterable[str], label: str) -> set[str]:
|
||||
unique_values: set[str] = set()
|
||||
for value in values:
|
||||
if value in unique_values:
|
||||
raise ValueError(f"duplicate {label}: {value}")
|
||||
unique_values.add(value)
|
||||
return unique_values
|
||||
|
||||
|
||||
def validate_registry_bundle(
|
||||
*,
|
||||
agents: list[AgentManifest],
|
||||
sub_commanders: list[SubCommanderManifest],
|
||||
capabilities: list[CapabilityManifest],
|
||||
specialist_templates: list[SpecialistTemplateManifest],
|
||||
) -> None:
|
||||
agent_ids = _validate_unique_ids((agent.agent_id for agent in agents), "agent id")
|
||||
_validate_unique_ids(
|
||||
(sub_commander.sub_commander_id for sub_commander in sub_commanders),
|
||||
"sub commander id",
|
||||
)
|
||||
capability_ids = _validate_unique_ids(
|
||||
(capability.capability_id for capability in capabilities),
|
||||
"capability id",
|
||||
)
|
||||
_validate_unique_ids(
|
||||
(specialist_template.template_id for specialist_template in specialist_templates),
|
||||
"template id",
|
||||
)
|
||||
|
||||
for sub_commander in sub_commanders:
|
||||
if sub_commander.parent_agent_id not in agent_ids:
|
||||
raise ValueError(f"unknown parent agent id: {sub_commander.parent_agent_id}")
|
||||
|
||||
for capability_id in sub_commander.capability_ids:
|
||||
if capability_id not in capability_ids:
|
||||
raise ValueError(f"unknown capability id: {capability_id}")
|
||||
|
||||
for specialist_template in specialist_templates:
|
||||
if specialist_template.allowed_capability_ids is None:
|
||||
continue
|
||||
|
||||
for capability_id in specialist_template.allowed_capability_ids:
|
||||
if capability_id not in capability_ids:
|
||||
raise ValueError(f"unknown capability id: {capability_id}")
|
||||
Reference in New Issue
Block a user