in src/cli/utils/template.py [0:0]
def get_available_agents(deployment_target: str | None = None) -> dict:
"""Dynamically load available agents from the agents directory.
Args:
deployment_target: Optional deployment target to filter agents
"""
# Define priority agents that should appear first
PRIORITY_AGENTS = ["adk_base", "agentic_rag", "langgraph_base_react"]
agents_list = []
priority_agents_dict = dict.fromkeys(PRIORITY_AGENTS) # Track priority agents
agents_dir = pathlib.Path(__file__).parent.parent.parent.parent / "agents"
for agent_dir in agents_dir.iterdir():
if agent_dir.is_dir() and not agent_dir.name.startswith("__"):
template_config_path = agent_dir / "template" / ".templateconfig.yaml"
if template_config_path.exists():
try:
with open(template_config_path) as f:
config = yaml.safe_load(f)
agent_name = agent_dir.name
# Skip if deployment target specified and agent doesn't support it
if deployment_target:
targets = config.get("settings", {}).get(
"deployment_targets", []
)
if isinstance(targets, str):
targets = [targets]
if deployment_target not in targets:
continue
description = config.get("description", "No description available")
agent_info = {"name": agent_name, "description": description}
# Add to priority list or regular list based on agent name
if agent_name in PRIORITY_AGENTS:
priority_agents_dict[agent_name] = agent_info
else:
agents_list.append(agent_info)
except Exception as e:
logging.warning(f"Could not load agent from {agent_dir}: {e}")
# Sort the non-priority agents
agents_list.sort(key=lambda x: x["name"])
# Create priority agents list in the exact order specified
priority_agents = [
info for name, info in priority_agents_dict.items() if info is not None
]
# Combine priority agents with regular agents
combined_agents = priority_agents + agents_list
# Convert to numbered dictionary starting from 1
agents = {i + 1: agent for i, agent in enumerate(combined_agents)}
return agents