diff --git a/src/app_controller.py b/src/app_controller.py index 6f8e39e7..f21db854 100644 --- a/src/app_controller.py +++ b/src/app_controller.py @@ -2723,6 +2723,16 @@ class AppController: self.files.append(models.FileItem.from_dict(p)) else: self.files.append(models.FileItem(path=str(p))) + import copy + self.context_files = [] + for f in self.files: + if isinstance(f, models.FileItem): + fi = copy.deepcopy(f) + else: + fi = models.FileItem(path=str(f)) + self.context_files.append(fi) + if hasattr(self, "_app") and self._app is not None: + self._app.ui_selected_context_files = {f.path for f in self.context_files if f.auto_aggregate} self.screenshots = list(self.project.get("screenshots", {}).get("paths", [])) disc_sec = self.project.get("discussion", {}) self.disc_roles = list(disc_sec.get("roles", ["User", "AI", "Vendor API", "System"])) diff --git a/tests/test_project_switch_persona_preset.py b/tests/test_project_switch_persona_preset.py index d6f14da0..1c042806 100644 --- a/tests/test_project_switch_persona_preset.py +++ b/tests/test_project_switch_persona_preset.py @@ -170,3 +170,51 @@ def test_load_context_preset_missing_raises_keyerror(tmp_path, monkeypatch): with pytest.raises(KeyError, match="Context preset 'NonexistentPreset' not found"): ctrl.load_context_preset("NonexistentPreset") + + +def test_switch_project_resets_context_files(tmp_path, monkeypatch): + project_a_path, project_b_path = _setup_two_projects(tmp_path) + + proj_a_data = '''[project] +name = "project_a" +[files] +base_dir = "." +paths = [ + { path = "C:/projects/forth/bootslop/main.c", view_mode = "full" }, + { path = "C:/projects/Pikuma/ps1/code/gte_hello/hello_gte.c", view_mode = "full" }, +] +''' + project_a_path.write_text(proj_a_data) + + proj_b_data = '''[project] +name = "project_b" +[files] +base_dir = "." +paths = [ + { path = "C:/projects/gencpp/base/dependencies/timing.cpp", view_mode = "full" }, + { path = "C:/projects/gencpp/base/dependencies/timing.hpp", view_mode = "full" }, +] +''' + project_b_path.write_text(proj_b_data) + + ctrl = AppController() + monkeypatch.setattr(ctrl, "_rebuild_rag_index", lambda: None) + monkeypatch.setattr(ctrl, "_flush_to_project", lambda: None) + + ctrl.active_project_path = str(project_a_path) + ctrl.project = project_manager.load_project(str(project_a_path)) + ctrl.preset_manager = presets.PresetManager(Path(project_a_path).parent) + ctrl.tool_preset_manager = tool_presets.ToolPresetManager(Path(project_a_path).parent) + ctrl.persona_manager = PersonaManager(Path(project_a_path).parent) + ctrl._refresh_from_project() + + assert len(ctrl.context_files) == 2 + assert any("forth" in f.path for f in ctrl.context_files) + assert any("gte_hello" in f.path for f in ctrl.context_files) + + ctrl._switch_project(str(project_b_path)) + + assert len(ctrl.context_files) == 2 + assert all("gencpp" in f.path for f in ctrl.context_files) + assert not any("forth" in f.path for f in ctrl.context_files) + assert not any("gte_hello" in f.path for f in ctrl.context_files)