fix: prevent $defs mutation in Tool.from_tool transforms (#2493)

Deep copy parent_defs before passing to compress_schema to prevent
mutation from affecting parent tool schemas when child tools hide
parameters that remove all $ref usage.
This commit is contained in:
jason 2025-11-26 16:52:01 -05:00 committed by GitHub
commit d770a76c79
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -4,6 +4,7 @@ import inspect
import warnings
from collections.abc import Callable
from contextvars import ContextVar
from copy import deepcopy
from dataclasses import dataclass
from typing import Annotated, Any, Literal, cast
@ -620,7 +621,8 @@ class TransformedTool(Tool):
"""
# Build transformed schema and mapping
parent_defs = parent_tool.parameters.get("$defs", {})
# Deep copy to prevent compress_schema from mutating parent tool's $defs
parent_defs = deepcopy(parent_tool.parameters.get("$defs", {}))
parent_props = parent_tool.parameters.get("properties", {}).copy()
parent_required = set(parent_tool.parameters.get("required", []))