| from typing import Dict, Any, List |
| from tools.base_tool import BaseTool |
| from tools.repository_search_tool import RepositorySearchTool |
| from tools.graph_query_tool import GraphQueryTool |
| from tools.dependency_lookup_tool import DependencyLookupTool |
| from tools.file_reader_tool import FileReaderTool |
| from tools.architecture_lookup_tool import ArchitectureLookupTool |
| from tools.api_lookup_tool import ApiLookupTool |
|
|
| class ToolRegistry: |
| """ |
| Registry for managing and executing repository intelligence tools. |
| Compatible with agent planners and the Model Context Protocol (MCP). |
| """ |
| def __init__(self): |
| self._tools: Dict[str, BaseTool] = {} |
|
|
| def register(self, tool: BaseTool): |
| self._tools[tool.name] = tool |
|
|
| def get_tool(self, name: str) -> BaseTool: |
| return self._tools.get(name) |
|
|
| def list_tools(self) -> List[Dict[str, str]]: |
| return [ |
| {"name": tool.name, "description": tool.description} |
| for tool in self._tools.values() |
| ] |
|
|
| def execute_tool(self, name: str, **kwargs) -> Any: |
| tool = self.get_tool(name) |
| if not tool: |
| return {"error": f"Tool '{name}' not found in registry."} |
| try: |
| return tool.execute(**kwargs) |
| except Exception as e: |
| return {"error": f"Error executing tool '{name}': {str(e)}"} |
|
|
| |
| tool_registry = ToolRegistry() |
|
|
| def setup_default_registry(vector_store, retriever): |
| """Utility to register all standard repository tools with dependencies.""" |
| tool_registry.register(RepositorySearchTool(retriever)) |
| tool_registry.register(FileReaderTool(vector_store)) |
| tool_registry.register(GraphQueryTool()) |
| tool_registry.register(DependencyLookupTool()) |
| tool_registry.register(ArchitectureLookupTool()) |
| tool_registry.register(ApiLookupTool()) |
|
|