"""Built-in tool to hot-reload user tools and context providers without restarting."""
from ._internal.base import Tool, ToolContext, ToolResult
class ReloadToolsTool(Tool):
name = "reload_tools"
description = (
"Hot-reload all tools from the tools/ directory, context providers from "
"context_providers/, and reconnect all configured MCP servers without "
"restarting the server. Call this after writing or editing a tool, context "
"provider, or MCP server configuration. Returns a report of what was loaded "
"and any errors per file or server."
)
parameters = {
"type": "object",
"properties": {},
"required": [],
}
def __init__(self, registry=None, cp_registry=None, mcp_manager=None) -> None:
self._registry = registry
self._cp_registry = cp_registry
self._mcp_manager = mcp_manager
async def execute(self, params: dict, ctx: ToolContext | None = None) -> ToolResult:
if self._registry is None:
return ToolResult(success=False, output="Tool registry not available.", error="no_registry")
from navi.core.reload import reload_all
report = await reload_all(self._registry, self._cp_registry, self._mcp_manager)
return ToolResult(success=report.ok, output="\n".join(report.lines()))