Private
Public Access
refactor(consumers): migrate 85 'from src.models import' sites to direct subsystem imports
Per post_module_taxonomy_de_cruft_20260627 Phase 2 (FR7). Each
'from src.models import X' for a moved class is rewritten to
'from src.<destination> import X':
Ticket, Track, WorkerContext, TrackState, TrackMetadata,
ThinkingSegment, EMPTY_TRACK_STATE -> src.mma
ProjectContext, ProjectMeta, ProjectOutput, ProjectFiles,
ProjectScreenshots, ProjectDiscussion, EMPTY_PROJECT_CONTEXT -> src.project
FileItem, Preset, ContextPreset, ContextFileEntry,
NamedViewPreset -> src.project_files
Tool, ToolPreset -> src.tool_presets
BiasProfile -> src.tool_bias
TextEditorConfig, ExternalEditorConfig,
EMPTY_TEXT_EDITOR_CONFIG -> src.external_editor
Persona -> src.personas
WorkspaceProfile -> src.workspace_manager
MCPServerConfig, MCPConfiguration, VectorStoreConfig,
RAGConfig, load_mcp_config -> src.mcp_client
NOT touched (kept on src.models; Phase 3 or Phase 4 will move them):
GenerateRequest, ConfirmRequest, DEFAULT_TOOL_CATEGORIES, Metadata, PROVIDERS
Migration was performed by the one-time script
scripts/tier2/artifacts/post_module_taxonomy_de_cruft_20260627/migrate_imports.py
which uses a class-to-module map and re.sub() to rewrite each
'from src.models import X' line.
Total: 85 import lines rewritten across 71 files.
Note: this commit depends on the v2 SHIPPED work
(origin/tier2/module_taxonomy_refactor_20260627) being merged into
this branch NEXT. On master (without the v2 SHIPPED commits), the
destination modules do not exist and these imports would fail.
This commit is contained in:
+6
-4
@@ -49,7 +49,9 @@ from src.vendor_capabilities import VendorCapabilities, get_capabilities
|
||||
# TODO(Ed): Eliminate these?
|
||||
from src.events import EventEmitter
|
||||
from src.gemini_cli_adapter import GeminiCliAdapter
|
||||
from src.models import FileItem, ToolPreset, BiasProfile, Tool
|
||||
from src.project_files import FileItem
|
||||
from src.tool_bias import BiasProfile
|
||||
from src.tool_presets import ToolPreset, Tool
|
||||
from src.paths import get_credentials_path
|
||||
from src.tool_bias import ToolBiasEngine
|
||||
from src.tool_presets import ToolPresetManager
|
||||
@@ -2561,7 +2563,7 @@ def _send_grok(md_content: str, user_message: str, base_dir: str,
|
||||
if file_items:
|
||||
for fi in file_items:
|
||||
if fi.get("is_image") and fi.get("base64_data"):
|
||||
from src.models import FileItem as _FIC
|
||||
from src.project_files import FileItem as _FIC
|
||||
fi_item = fi if isinstance(fi, _FIC) else _FIC.from_dict(fi)
|
||||
user_content = f"[IMAGE: {fi_item.path or 'attachment'}]\n{user_content}"
|
||||
if discussion_history and not history:
|
||||
@@ -2805,7 +2807,7 @@ def _send_qwen(md_content: str, user_message: str, base_dir: str,
|
||||
if file_items:
|
||||
for fi in file_items:
|
||||
if fi.get("is_image") and fi.get("base64_data"):
|
||||
from src.models import FileItem as _FIC
|
||||
from src.project_files import FileItem as _FIC
|
||||
fi_item = fi if isinstance(fi, _FIC) else _FIC.from_dict(fi)
|
||||
user_content = f"[IMAGE: {fi_item.path or 'attachment'}]\n{user_content}"
|
||||
if discussion_history and not history:
|
||||
@@ -2898,7 +2900,7 @@ def _send_llama(md_content: str, user_message: str, base_dir: str,
|
||||
if file_items:
|
||||
for fi in file_items:
|
||||
if fi.get("is_image") and fi.get("base64_data"):
|
||||
from src.models import FileItem as _FIC
|
||||
from src.project_files import FileItem as _FIC
|
||||
fi_item = fi if isinstance(fi, _FIC) else _FIC.from_dict(fi)
|
||||
user_content = f"[IMAGE: {fi_item.path or 'attachment'}]\n{user_content}"
|
||||
if discussion_history and not history:
|
||||
|
||||
@@ -101,7 +101,7 @@ def generate_tickets(track_brief: str, module_skeletons: str) -> list[dict[str,
|
||||
ai_client.set_current_tier(None)
|
||||
|
||||
from src.dag_engine import TrackDAG
|
||||
from src.models import Ticket
|
||||
from src.mma import Ticket
|
||||
from src.result_types import ErrorInfo, ErrorKind, Result
|
||||
|
||||
def topological_sort(tickets: list[Ticket]) -> list[Ticket]:
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
from typing import Dict, Any
|
||||
|
||||
from src.models import ContextPreset
|
||||
from src.project_files import ContextPreset
|
||||
from src.result_types import Result, ErrorInfo, ErrorKind
|
||||
|
||||
|
||||
|
||||
+1
-1
@@ -28,7 +28,7 @@ See Also:
|
||||
"""
|
||||
from typing import List
|
||||
|
||||
from src.models import Ticket
|
||||
from src.mma import Ticket
|
||||
from src.performance_monitor import get_monitor
|
||||
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ import tempfile
|
||||
from pathlib import Path
|
||||
from typing import Optional, List, Dict, Any
|
||||
|
||||
from src.models import ExternalEditorConfig, TextEditorConfig
|
||||
from src.external_editor import ExternalEditorConfig, TextEditorConfig
|
||||
from src.result_types import ErrorInfo, ErrorKind, Result
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@ class ExternalEditorLauncher:
|
||||
"""
|
||||
[C: tests/test_external_editor.py:TestExternalEditorLauncher.test_get_editor_by_name, tests/test_external_editor.py:TestExternalEditorLauncher.test_get_editor_returns_default, tests/test_external_editor.py:TestExternalEditorLauncher.test_get_editor_unknown_name]
|
||||
"""
|
||||
from src.models import EMPTY_TEXT_EDITOR_CONFIG
|
||||
from src.external_editor import EMPTY_TEXT_EDITOR_CONFIG
|
||||
if editor_name:
|
||||
return self.config.editors.get(editor_name) or EMPTY_TEXT_EDITOR_CONFIG
|
||||
return self.config.get_default()
|
||||
@@ -96,7 +96,7 @@ def _find_vscode_common_paths() -> str:
|
||||
|
||||
|
||||
def auto_detect_vscode() -> TextEditorConfig:
|
||||
from src.models import EMPTY_TEXT_EDITOR_CONFIG
|
||||
from src.external_editor import EMPTY_TEXT_EDITOR_CONFIG
|
||||
global _cached_vscode_config
|
||||
if _cached_vscode_config is not None:
|
||||
return _cached_vscode_config
|
||||
|
||||
@@ -44,7 +44,7 @@ from src import paths
|
||||
from src import summarize
|
||||
|
||||
from src.dag_engine import TrackDAG, ExecutionEngine
|
||||
from src.models import Ticket, Track, WorkerContext
|
||||
from src.mma import Ticket, Track, WorkerContext
|
||||
from src.personas import PersonaManager
|
||||
from src.result_types import ErrorInfo, ErrorKind, Result
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ from src import ai_client
|
||||
from src import mma_prompts
|
||||
from src import paths
|
||||
from src import summarize
|
||||
from src.models import FileItem
|
||||
from src.project_files import FileItem
|
||||
from src.result_types import Result, ErrorInfo, ErrorKind
|
||||
from src.type_aliases import Metadata
|
||||
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@ import tomli_w
|
||||
from pathlib import Path
|
||||
from typing import Dict, Any, Optional
|
||||
|
||||
from src.models import Persona
|
||||
from src.personas import Persona
|
||||
from src import paths
|
||||
|
||||
class PersonaManager:
|
||||
|
||||
+1
-1
@@ -5,7 +5,7 @@ import tomli_w
|
||||
from pathlib import Path
|
||||
from typing import Dict, Any, Optional
|
||||
|
||||
from src.models import Preset
|
||||
from src.project_files import Preset
|
||||
from src.paths import get_global_presets_path, get_project_presets_path
|
||||
from src.result_types import ErrorInfo, ErrorKind, Result
|
||||
|
||||
|
||||
@@ -32,7 +32,7 @@ from src.type_aliases import (
|
||||
)
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from src.models import TrackState
|
||||
from src.mma import TrackState
|
||||
|
||||
TS_FMT: str = "%Y-%m-%dT%H:%M:%S"
|
||||
|
||||
@@ -270,7 +270,7 @@ def flat_config(proj: Metadata, disc_name: Optional[str] = None, track_id: Optio
|
||||
The returned dataclass supports dict-compat (__getitem__ / get) so
|
||||
existing consumers using .get() and [] continue to work unchanged
|
||||
(Phase 2 Option A per SPEC_CORRECTION_phase_2.md)."""
|
||||
from src.models import ProjectContext, ProjectMeta, ProjectOutput, ProjectFiles, ProjectScreenshots, ProjectDiscussion
|
||||
from src.project import ProjectContext, ProjectMeta, ProjectOutput, ProjectFiles, ProjectScreenshots, ProjectDiscussion
|
||||
disc_sec = proj.get("discussion", {})
|
||||
if track_id:
|
||||
history = load_track_history(track_id, proj.get("files", {}).get("base_dir", "."))
|
||||
@@ -321,7 +321,7 @@ def load_track_state(track_id: str, base_dir: Union[str, Path] = ".") -> "TrackS
|
||||
Returns empty TrackState (zero-init) if not found.
|
||||
[C: tests/test_track_state_persistence.py:test_track_state_persistence]
|
||||
"""
|
||||
from src.models import TrackState, EMPTY_TRACK_STATE
|
||||
from src.mma import TrackState, EMPTY_TRACK_STATE
|
||||
state_file = paths.get_track_state_dir(track_id, project_path=str(base_dir)) / 'state.toml'
|
||||
if not state_file.exists(): return EMPTY_TRACK_STATE
|
||||
try:
|
||||
|
||||
@@ -2,7 +2,7 @@ import re
|
||||
|
||||
from typing import List, Tuple
|
||||
|
||||
from src.models import ThinkingSegment
|
||||
from src.mma import ThinkingSegment
|
||||
|
||||
|
||||
def parse_thinking_trace(text: str) -> Tuple[List[ThinkingSegment], str]:
|
||||
|
||||
+3
-1
@@ -1,6 +1,8 @@
|
||||
from typing import List, Dict, Any, Optional
|
||||
|
||||
from src.models import Tool, ToolPreset, BiasProfile
|
||||
from src.tool_bias import BiasProfile
|
||||
|
||||
from src.tool_presets import Tool, ToolPreset
|
||||
|
||||
|
||||
class ToolBiasEngine:
|
||||
|
||||
+2
-1
@@ -5,7 +5,8 @@ from pathlib import Path
|
||||
from typing import Dict, List, Optional, Union, Any
|
||||
|
||||
from src import paths
|
||||
from src.models import ToolPreset, BiasProfile
|
||||
from src.tool_bias import BiasProfile
|
||||
from src.tool_presets import ToolPreset
|
||||
|
||||
|
||||
class ToolPresetManager:
|
||||
|
||||
@@ -4,7 +4,7 @@ import tomli_w
|
||||
from pathlib import Path
|
||||
from typing import Dict, Any, Optional, Union
|
||||
|
||||
from src.models import WorkspaceProfile
|
||||
from src.workspace_manager import WorkspaceProfile
|
||||
from src import paths
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user