fix(mcp): configure mcp_client on project load and switch

- Add _configure_mcp_for_project() helper method
- Call it at end of _load_active_project() to configure mcp_client on startup
- _switch_project() calls it after _refresh_from_project()
- This ensures mcp_client._base_dirs is populated before GUI buttons try to read files
This commit is contained in:
2026-05-10 21:15:41 -04:00
parent 4bb94ff909
commit 400a2fcfe4
+16 -3
View File
@@ -1521,24 +1521,30 @@ class AppController:
if self.active_project_path and Path(self.active_project_path).exists(): if self.active_project_path and Path(self.active_project_path).exists():
try: try:
self.project = project_manager.load_project(self.active_project_path) self.project = project_manager.load_project(self.active_project_path)
return
except Exception as e: except Exception as e:
print(f"Failed to load project {self.active_project_path}: {e}") print(f"Failed to load project {self.active_project_path}: {e}")
self.project = project_manager.migrate_from_legacy_config(self.config)
self.active_project_path = ""
else:
self.project = project_manager.migrate_from_legacy_config(self.config)
self.active_project_path = ""
if not self.active_project_path:
for pp in self.project_paths: for pp in self.project_paths:
if Path(pp).exists(): if Path(pp).exists():
try: try:
self.project = project_manager.load_project(pp) self.project = project_manager.load_project(pp)
self.active_project_path = pp self.active_project_path = pp
return break
except Exception: except Exception:
continue continue
self.project = project_manager.migrate_from_legacy_config(self.config) if not self.active_project_path:
name = self.project.get("project", {}).get("name", "project") name = self.project.get("project", {}).get("name", "project")
fallback_path = f"{name}.toml" fallback_path = f"{name}.toml"
project_manager.save_project(self.project, fallback_path) project_manager.save_project(self.project, fallback_path)
self.active_project_path = fallback_path self.active_project_path = fallback_path
if fallback_path not in self.project_paths: if fallback_path not in self.project_paths:
self.project_paths.append(fallback_path) self.project_paths.append(fallback_path)
self._configure_mcp_for_project()
def _prune_old_logs(self) -> None: def _prune_old_logs(self) -> None:
"""Asynchronously prunes old insignificant logs on startup.""" """Asynchronously prunes old insignificant logs on startup."""
@@ -2327,6 +2333,13 @@ class AppController:
self._create_discussion(nm) self._create_discussion(nm)
self.ui_disc_new_name_input = "" self.ui_disc_new_name_input = ""
def _configure_mcp_for_project(self) -> None:
if not self.active_project_path:
return
project_root = Path(self.active_project_path).parent
file_items_as_dicts = [{"path": f.path if hasattr(f, "path") else str(f)} for f in self.files]
mcp_client.configure(file_items_as_dicts, [str(project_root)])
def _switch_project(self, path: str) -> None: def _switch_project(self, path: str) -> None:
""" """
[C: src/gui_2.py:App._render_projects_panel] [C: src/gui_2.py:App._render_projects_panel]