butler/mcp/tools_engine_ops.py
Rama main · réplica de lectura del repositorio original.
"""ToolsEngine manifest merge best-effort helpers (P0-A)."""
from __future__ import annotations
from typing import Any, cast
from butler.core.best_effort import safe_best_effort
def filter_tools_manifest_safe(
tools: list[dict[str, Any]],
) -> tuple[list[dict[str, Any]], dict[str, Any]]:
def _run() -> tuple[list[dict[str, Any]], dict[str, Any]]:
from butler.mcp.tools_manifest import filter_tools_by_mcp_ssot
return cast(tuple[list[dict[str, Any]], dict[str, Any]], filter_tools_by_mcp_ssot(list(tools)))
result = safe_best_effort(
_run,
label="tools_engine.manifest_merge",
default=(list(tools), {}),
)
if isinstance(result, tuple) and len(result) == 2:
working, diag = result
if isinstance(working, list) and isinstance(diag, dict):
return working, diag
return list(tools), {}