Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 49 additions & 0 deletions veadk/cli/cli_web.py
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,54 @@ def wrapped_get_fast_api(self, *args, **kwargs):
google.adk.cli.adk_web_server.AdkWebServer.get_fast_api_app = wrapped_get_fast_api


def patch_agent_loader_list_agents():
"""
Monkey patch AgentLoader.list_agents to only return directories
that contain valid agent patterns.

This function filters out non-agent directories (like tools/, tests/, schemas/)
from the agent selection dropdown. A directory is considered a valid agent if
it contains any of the following:
- {dir}/agent.py file
- {dir}/__init__.py file
- {dir}/root_agent.yaml file
- {dir}.py file (as a module)
"""
import os
from pathlib import Path

from google.adk.cli.utils.agent_loader import AgentLoader

original_list_agents = AgentLoader.list_agents

def filtered_list_agents(self):
base_path = Path.cwd() / self.agents_dir
all_dirs = [
x
for x in os.listdir(base_path)
if os.path.isdir(os.path.join(base_path, x))
and not x.startswith(".")
and x != "__pycache__"
]

valid_agents = []
for d in all_dirs:
dir_path = base_path / d
if (dir_path / "agent.py").exists():
valid_agents.append(d)
elif (dir_path / "__init__.py").exists():
valid_agents.append(d)
elif (dir_path / "root_agent.yaml").exists():
valid_agents.append(d)
elif (base_path / f"{d}.py").exists():
valid_agents.append(d)

valid_agents.sort()
return valid_agents

AgentLoader.list_agents = filtered_list_agents


@click.command(
context_settings=dict(ignore_unknown_options=True, allow_extra_args=True)
)
Expand Down Expand Up @@ -199,6 +247,7 @@ async def wrapper(*args, **kwargs) -> ADKRunner:
)

patch_adkwebserver_disable_openapi()
patch_agent_loader_list_agents()

from google.adk.cli.cli_tools_click import cli_web

Expand Down