Skip to content

Registry

provide.foundation.tools.registry

TODO: Add module docstring.

Classes

ToolRegistry

ToolRegistry()

Wrapper around the hub registry for tool management.

Uses the main hub registry with dimension="tool_manager" to avoid namespace pollution while leveraging existing registry infrastructure.

Initialize the tool registry.

Source code in provide/foundation/tools/registry.py
def __init__(self) -> None:
    """Initialize the tool registry."""
    self.hub = get_hub()
    self._discover_tools()
Functions
create_tool_manager
create_tool_manager(
    name: str, config: BaseConfig
) -> BaseToolManager | None

Create a tool manager instance.

Parameters:

Name Type Description Default
name str

Tool name or alias.

required
config BaseConfig

Configuration object.

required

Returns:

Type Description
BaseToolManager | None

Tool manager instance, or None if not found.

Source code in provide/foundation/tools/registry.py
def create_tool_manager(self, name: str, config: BaseConfig) -> BaseToolManager | None:
    """Create a tool manager instance.

    Args:
        name: Tool name or alias.
        config: Configuration object.

    Returns:
        Tool manager instance, or None if not found.

    """
    manager_class = self.get_tool_manager_class(name)
    if manager_class:
        return manager_class(config)
    return None
get_tool_info
get_tool_info(name: str) -> dict[str, Any] | None

Get information about a specific tool.

Parameters:

Name Type Description Default
name str

Tool name or alias.

required

Returns:

Type Description
dict[str, Any] | None

Tool metadata dictionary, or None if not found.

Source code in provide/foundation/tools/registry.py
def get_tool_info(self, name: str) -> dict[str, Any] | None:
    """Get information about a specific tool.

    Args:
        name: Tool name or alias.

    Returns:
        Tool metadata dictionary, or None if not found.

    """
    entry = self.hub._component_registry.get_entry(name, dimension=self.DIMENSION)
    if entry and hasattr(entry, "metadata"):
        return entry.metadata
    return None
get_tool_manager_class
get_tool_manager_class(
    name: str,
) -> type[BaseToolManager] | None

Get a tool manager class by name.

Parameters:

Name Type Description Default
name str

Tool name or alias.

required

Returns:

Type Description
type[BaseToolManager] | None

Tool manager class, or None if not found.

Source code in provide/foundation/tools/registry.py
def get_tool_manager_class(self, name: str) -> type[BaseToolManager] | None:
    """Get a tool manager class by name.

    Args:
        name: Tool name or alias.

    Returns:
        Tool manager class, or None if not found.

    """
    return self.hub._component_registry.get(name, dimension=self.DIMENSION)
is_tool_registered
is_tool_registered(name: str) -> bool

Check if a tool is registered.

Parameters:

Name Type Description Default
name str

Tool name or alias.

required

Returns:

Type Description
bool

True if registered, False otherwise.

Source code in provide/foundation/tools/registry.py
def is_tool_registered(self, name: str) -> bool:
    """Check if a tool is registered.

    Args:
        name: Tool name or alias.

    Returns:
        True if registered, False otherwise.

    """
    return self.get_tool_manager_class(name) is not None
list_tools
list_tools() -> list[tuple[str, dict[str, Any]]]

List all registered tools.

Returns:

Type Description
list[tuple[str, dict[str, Any]]]

List of (name, metadata) tuples.

Source code in provide/foundation/tools/registry.py
def list_tools(self) -> list[tuple[str, dict[str, Any]]]:
    """List all registered tools.

    Returns:
        List of (name, metadata) tuples.

    """
    tools = []
    dimension_list = self.hub._component_registry.list_dimension(self.DIMENSION)
    for item in dimension_list:
        name, entry = item  # type: ignore[misc]
        metadata = entry.metadata if hasattr(entry, "metadata") else {}  # type: ignore[has-type]
        tools.append((name, metadata))  # type: ignore[has-type]
    return tools
register_tool_manager
register_tool_manager(
    name: str,
    manager_class: type[BaseToolManager],
    aliases: list[str] | None = None,
) -> None

Register a tool manager with the hub.

Parameters:

Name Type Description Default
name str

Tool name (e.g., "terraform").

required
manager_class type[BaseToolManager]

Tool manager class.

required
aliases list[str] | None

Optional aliases for the tool.

None
Source code in provide/foundation/tools/registry.py
def register_tool_manager(
    self,
    name: str,
    manager_class: type[BaseToolManager],
    aliases: list[str] | None = None,
) -> None:
    """Register a tool manager with the hub.

    Args:
        name: Tool name (e.g., "terraform").
        manager_class: Tool manager class.
        aliases: Optional aliases for the tool.

    """
    # Prepare metadata
    metadata = {
        "tool_name": manager_class.tool_name,
        "executable": manager_class.executable_name,
        "platforms": manager_class.supported_platforms,
    }

    # Register with hub
    self.hub._component_registry.register(
        name=name,
        value=manager_class,
        dimension=self.DIMENSION,
        metadata=metadata,
        aliases=aliases,
        replace=True,  # Allow re-registration for updates
    )

    log.info(f"Registered tool manager: {name}")

Functions

get_tool_manager

get_tool_manager(
    name: str, config: BaseConfig
) -> BaseToolManager | None

Get a tool manager instance from the global registry.

Parameters:

Name Type Description Default
name str

Tool name or alias.

required
config BaseConfig

Configuration object.

required

Returns:

Type Description
BaseToolManager | None

Tool manager instance, or None if not found.

Source code in provide/foundation/tools/registry.py
def get_tool_manager(name: str, config: BaseConfig) -> BaseToolManager | None:
    """Get a tool manager instance from the global registry.

    Args:
        name: Tool name or alias.
        config: Configuration object.

    Returns:
        Tool manager instance, or None if not found.

    """
    registry = get_tool_registry()
    return registry.create_tool_manager(name, config)

get_tool_registry

get_tool_registry() -> ToolRegistry

Get the global tool registry instance.

Returns:

Type Description
ToolRegistry

Tool registry instance.

Source code in provide/foundation/tools/registry.py
def get_tool_registry() -> ToolRegistry:
    """Get the global tool registry instance.

    Returns:
        Tool registry instance.

    """
    global _tool_registry
    if _tool_registry is None:
        _tool_registry = ToolRegistry()
    return _tool_registry

register_tool_manager

register_tool_manager(
    name: str,
    manager_class: type[BaseToolManager],
    aliases: list[str] | None = None,
) -> None

Register a tool manager with the global registry.

Parameters:

Name Type Description Default
name str

Tool name.

required
manager_class type[BaseToolManager]

Tool manager class.

required
aliases list[str] | None

Optional aliases.

None
Source code in provide/foundation/tools/registry.py
def register_tool_manager(
    name: str,
    manager_class: type[BaseToolManager],
    aliases: list[str] | None = None,
) -> None:
    """Register a tool manager with the global registry.

    Args:
        name: Tool name.
        manager_class: Tool manager class.
        aliases: Optional aliases.

    """
    registry = get_tool_registry()
    registry.register_tool_manager(name, manager_class, aliases)