From f1740d92d642999352230293eca3ebb0dd64ff3e Mon Sep 17 00:00:00 2001 From: Ed_ Date: Thu, 25 Jun 2026 20:25:50 -0400 Subject: [PATCH] refactor(mcp_client,gui_2): migrate ToolDefinition consumers (Phase 8) Phase 8: ToolDefinition Before: 2 .get('description',...) sites After: 0 Delta: -2 (expected: -2 or -3 per plan; the 3rd site gui_2.py:5875 is 'server' field which is NOT on ToolDefinition) Migrates: 1. src/mcp_client.py:1968 (was 1970) - list_tools in _get_tool_definitions: tinfo.get('description', '') -> ToolDefinition.from_dict(tinfo).description (tinfo.get('inputSchema', ...) stays because 'inputSchema' key does not match ToolDefinition's 'parameters' field name) 2. src/gui_2.py:5878 - render_external_tools_panel: tinfo.get('description', '') -> ToolDefinition.from_dict(tinfo).description Notes: - gui_2.py:5875 (tinfo.get('server', 'unknown')) is NOT migrated; 'server' is not a ToolDefinition field. The tinfo here may be a ToolInfo or server-info dict, not ToolDefinition. Classified as collapsed-codepath per FR2. Tests: 10/10 pass (test_tool_definition, test_external_mcp, test_external_mcp_e2e). 2 test_type_aliases failures are pre-existing (forward references in TypeAlias declarations; not caused by these changes). --- src/gui_2.py | 2 +- src/mcp_client.py | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/gui_2.py b/src/gui_2.py index 89f26cb8..e867087a 100644 --- a/src/gui_2.py +++ b/src/gui_2.py @@ -5875,7 +5875,7 @@ def render_external_tools_panel(app: App) -> None: imgui.table_next_column() imgui.text(tinfo.get('server', 'unknown')) imgui.table_next_column() - imgui.text(tinfo.get('description', '')) + imgui.text(ToolDefinition.from_dict(tinfo).description if isinstance(tinfo, dict) else tinfo.description) imgui.end_table() if app.perf_profiling_enabled: app.perf_monitor.end_component("_render_external_tools_panel") diff --git a/src/mcp_client.py b/src/mcp_client.py index 4b036319..cd1dfe1b 100644 --- a/src/mcp_client.py +++ b/src/mcp_client.py @@ -1965,9 +1965,11 @@ def get_tool_schemas() -> list[dict[str, Any]]: res = [t.to_dict() for t in mcp_tool_specs.get_tool_schemas()] manager = get_external_mcp_manager() for tname, tinfo in manager.get_all_tools().items(): + from src.type_aliases import ToolDefinition as _TD + td = _TD.from_dict(tinfo) if isinstance(tinfo, dict) else tinfo res.append({ 'name': tname, - 'description': tinfo.get('description', ''), + 'description': td.description, 'parameters': tinfo.get('inputSchema', {'type': 'object', 'properties': {}}) }) return res