diff --git a/docs/type_registry/src_mcp_client.md b/docs/type_registry/src_mcp_client.md index 4c7a650e..87137eb2 100644 --- a/docs/type_registry/src_mcp_client.md +++ b/docs/type_registry/src_mcp_client.md @@ -5,7 +5,7 @@ Auto-generated from source. 4 struct(s) defined in this module. ## `src\mcp_client.py::MCPConfiguration` **Kind:** `dataclass` -**Defined at:** line 112 +**Defined at:** line 111 **Fields:** - `mcpServers: Dict[str, MCPServerConfig]` @@ -14,7 +14,7 @@ Auto-generated from source. 4 struct(s) defined in this module. ## `src\mcp_client.py::MCPServerConfig` **Kind:** `dataclass` -**Defined at:** line 86 +**Defined at:** line 85 **Fields:** - `name: str` @@ -27,7 +27,7 @@ Auto-generated from source. 4 struct(s) defined in this module. ## `src\mcp_client.py::RAGConfig` **Kind:** `dataclass` -**Defined at:** line 157 +**Defined at:** line 156 **Fields:** - `enabled: bool` @@ -40,7 +40,7 @@ Auto-generated from source. 4 struct(s) defined in this module. ## `src\mcp_client.py::VectorStoreConfig` **Kind:** `dataclass` -**Defined at:** line 126 +**Defined at:** line 125 **Fields:** - `provider: str` diff --git a/src/commands.py b/src/commands.py index 0863cd49..7a3e362b 100644 --- a/src/commands.py +++ b/src/commands.py @@ -6,7 +6,7 @@ from dataclasses import dataclass from pathlib import Path from typing import TYPE_CHECKING, Any, Callable, Dict, List, Optional -from src import models + from src import theme_2 from src.hot_reloader import HotReloader diff --git a/src/mcp_client.py b/src/mcp_client.py index 8f409d96..ef5757f8 100644 --- a/src/mcp_client.py +++ b/src/mcp_client.py @@ -70,7 +70,6 @@ from typing import Dict, List, Optional, Callable, Any, cast from scripts import py_struct_tools from src import beads_client -from src import models from src import outline_tool from src import summarize from src import mcp_tool_specs diff --git a/src/models.py b/src/models.py index 1808372f..0be70722 100644 --- a/src/models.py +++ b/src/models.py @@ -1,5 +1,5 @@ """ -Models - legacy Metadata alias only. +Models - Pydantic proxies + Metadata alias only. Per module_taxonomy_refactor_20260627 Phase 5 (reduce to Pydantic proxies) and post_module_taxonomy_de_cruft_20260627 Phases 2-4 (de-cruft @@ -11,9 +11,6 @@ Remaining content: 'from src.models import Metadata' expecting the dataclass - The PROVIDERS lazy __getattr__ (loads from src.ai_client on first access; required to break a startup-speedup circular import) - -Phase 4 of this track has moved the Pydantic proxies to src.api_hooks.py. -The file is now ~40 lines. """ from __future__ import annotations diff --git a/src/multi_agent_conductor.py b/src/multi_agent_conductor.py index abc5a9ba..81b11a77 100644 --- a/src/multi_agent_conductor.py +++ b/src/multi_agent_conductor.py @@ -39,7 +39,7 @@ from typing import List, Optional, Tuple, Callable from src import ai_client from src import events from src.file_cache import ASTParser -from src import models +from src.mma import WorkerContext, Ticket, Track from src import paths from src import summarize diff --git a/src/project_manager.py b/src/project_manager.py index 0e381f69..a7e24d2d 100644 --- a/src/project_manager.py +++ b/src/project_manager.py @@ -193,7 +193,7 @@ def load_project(path: Union[str, Path]) -> Metadata: with open(path, "rb") as f: proj = tomllib.load(f) # Deserialise FileItems in files.paths if "files" in proj and "paths" in proj["files"]: - from src import models + from src.project_files import FileItem proj["files"]["paths"] = [FileItem.from_dict(p) if isinstance(p, dict) else p for p in proj["files"]["paths"]] hist_path = get_history_path(path) if "discussion" in proj: diff --git a/src/rag_engine.py b/src/rag_engine.py index e87b2096..f9af6830 100644 --- a/src/rag_engine.py +++ b/src/rag_engine.py @@ -9,7 +9,7 @@ from typing import List, Dict, Any, Optional from src import ai_client from src import mcp_client -from src import models +from src.mcp_client import RAGConfig from src.mcp_client import RAGConfig from src.result_types import ErrorInfo, ErrorKind, NilRAGState, Result from src.type_aliases import Metadata diff --git a/tests/test_ast_inspector_extended.py b/tests/test_ast_inspector_extended.py index 616fb2be..165f0a44 100644 --- a/tests/test_ast_inspector_extended.py +++ b/tests/test_ast_inspector_extended.py @@ -3,6 +3,7 @@ from unittest.mock import MagicMock, patch from src.gui_2 import App, render_ast_inspector_modal from src import models +from src.project_files import FileItem def test_ast_inspector_line_range_parsing(): # 1. Setup mock App instance app = MagicMock(spec=App) diff --git a/tests/test_auto_slices.py b/tests/test_auto_slices.py index 6d0bc95a..041a6cea 100644 --- a/tests/test_auto_slices.py +++ b/tests/test_auto_slices.py @@ -3,6 +3,7 @@ from unittest.mock import MagicMock, patch, mock_open from src.gui_2 import App from src import models +from src.project_files import FileItem @pytest.fixture def mock_app(): with ( diff --git a/tests/test_external_mcp.py b/tests/test_external_mcp.py index fee8981f..4d550f3c 100644 --- a/tests/test_external_mcp.py +++ b/tests/test_external_mcp.py @@ -5,6 +5,7 @@ import pytest from src import mcp_client from src import models +from src.mcp_client import MCPServerConfig @pytest.mark.asyncio async def test_external_mcp_real_process(): manager = mcp_client.ExternalMCPManager() diff --git a/tests/test_files_and_media_tree.py b/tests/test_files_and_media_tree.py index 53460d91..7169c73d 100644 --- a/tests/test_files_and_media_tree.py +++ b/tests/test_files_and_media_tree.py @@ -1,6 +1,7 @@ from unittest.mock import patch, MagicMock import os, tempfile from src import models +from src.project_files import FileItem from src.gui_2 import render_files_and_media def test_files_rendered_under_directory_grouping(app_instance): diff --git a/tests/test_gui_kill_button.py b/tests/test_gui_kill_button.py index 5416a5d8..ef3c1f6a 100644 --- a/tests/test_gui_kill_button.py +++ b/tests/test_gui_kill_button.py @@ -2,6 +2,7 @@ import pytest from unittest.mock import MagicMock, patch from src import models +from src.mma import Ticket def test_gui_has_kill_button_method(): from src.gui_2 import App assert hasattr(App, '_cb_kill_ticket'), "App must have _cb_kill_ticket method" diff --git a/tests/test_mcp_config.py b/tests/test_mcp_config.py index 29e8b7f4..d97db163 100644 --- a/tests/test_mcp_config.py +++ b/tests/test_mcp_config.py @@ -3,6 +3,7 @@ import json import pytest from src import models +from src.mcp_client import MCPServerConfig, MCPConfiguration, load_mcp_config def test_mcp_server_config_to_from_dict(): data = { "command": "node", diff --git a/tests/test_project_serialization.py b/tests/test_project_serialization.py index dacb9d99..14a0a1c1 100644 --- a/tests/test_project_serialization.py +++ b/tests/test_project_serialization.py @@ -4,6 +4,7 @@ import tempfile from pathlib import Path from src import project_manager from src import models +from src.project_files import FileItem from src.app_controller import AppController class TestProjectSerialization(unittest.TestCase): diff --git a/tests/test_rag_engine.py b/tests/test_rag_engine.py index e307ddc5..8bba8ea7 100644 --- a/tests/test_rag_engine.py +++ b/tests/test_rag_engine.py @@ -2,6 +2,7 @@ import pytest import os from unittest.mock import MagicMock, patch from src import models +from src.mcp_client import VectorStoreConfig, RAGConfig from src import rag_engine from src.rag_engine import RAGEngine, BaseEmbeddingProvider, LocalEmbeddingProvider, GeminiEmbeddingProvider diff --git a/tests/test_rag_integration.py b/tests/test_rag_integration.py index fdc97bd3..c567a21e 100644 --- a/tests/test_rag_integration.py +++ b/tests/test_rag_integration.py @@ -8,6 +8,7 @@ from src.app_controller import AppController from src import ai_client from src import events from src import models +from src.mcp_client import VectorStoreConfig, RAGConfig from src.result_types import Result @pytest.fixture diff --git a/tests/test_tool_presets_execution.py b/tests/test_tool_presets_execution.py index dcdfedec..4a864613 100644 --- a/tests/test_tool_presets_execution.py +++ b/tests/test_tool_presets_execution.py @@ -3,7 +3,7 @@ import asyncio from src import ai_client from src import mcp_client from src import models -from src.tool_presets import ToolPreset, Tool +from src.tool_presets import ToolPreset, Tool, Tool, ToolPreset from unittest.mock import MagicMock, patch @pytest.mark.asyncio diff --git a/tests/test_ui_summary_only_removal.py b/tests/test_ui_summary_only_removal.py index 3855b0e2..0371be91 100644 --- a/tests/test_ui_summary_only_removal.py +++ b/tests/test_ui_summary_only_removal.py @@ -3,6 +3,7 @@ import inspect from src import models +from src.project_files import FileItem def test_ui_summary_only_not_in_projects_panel(): import src.gui_2 as gui_2 diff --git a/tests/test_view_presets.py b/tests/test_view_presets.py index 26628563..fc27520c 100644 --- a/tests/test_view_presets.py +++ b/tests/test_view_presets.py @@ -2,6 +2,7 @@ import os import pytest import copy from src import models +from src.project_files import FileItem, NamedViewPreset from src.app_controller import AppController @pytest.fixture