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
31 changes: 26 additions & 5 deletions agent/tools/search.py
Original file line number Diff line number Diff line change
Expand Up @@ -85,18 +85,39 @@ def get_full_path(partial_path: str) -> str:

return partial_path

SUPPORTED_EXTENSIONS = (
".py", ".js", ".jsx", ".ts", ".tsx",
".java", ".go", ".rb", ".rs", ".cpp", ".c", ".h",
".cs", ".php", ".swift", ".kt", ".scala",
".md", ".txt", ".yaml", ".yml", ".json", ".toml", ".cfg", ".ini",
)

@tool(parse_docstring=True)
def search_keyword_in_directory(directory: str, search_term: str, context: int = 2):
def search_keyword_in_directory(directory: str, search_term: str, file_extension: str = "", context: int = 2):
"""
A search tool that searchs for a keyword in all Python files contents in the specified directory. this tool is like cmd+f in your IDE. search_term MUST be at least 3 characters long.

A search tool that searches for a keyword in source files in the specified directory.
This tool is like cmd+f in your IDE. search_term MUST be at least 3 characters long.

Args:
directory: Directory path to search (can be partial or full path)
search_term: Term to search for in files contents (case-insensitive)
search_term: Term to search for in file contents (case-insensitive)
file_extension: Limit search to files with this extension e.g. '.py', '.ts', '.js'.
Leave empty to search all supported source file types.
context: Number of context lines to include before and after match (default: 2)
"""
full_directory = get_full_path(directory)
return search_directory(full_directory, search_term, extension=".py", context=context)
if file_extension:
# Normalise: ensure it starts with a dot
ext = file_extension if file_extension.startswith(".") else f".{file_extension}"
return search_directory(full_directory, search_term, extension=ext, context=context)

# Search across all supported extensions
results = []
for ext in SUPPORTED_EXTENSIONS:
result = search_directory(full_directory, search_term, extension=ext, context=context)
if result and result != "No matches found.":
results.append(result)
return "\n".join(results) if results else "No matches found."

# List of available tools
search_tools = [search_keyword_in_directory]
Expand Down