From bb007936969e01b80d2139e970b45696a99eaffd Mon Sep 17 00:00:00 2001 From: Ed_ Date: Sun, 10 May 2026 14:02:51 -0400 Subject: [PATCH] feat(project): project-level logs and scripts path isolation --- src/app_controller.py | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/src/app_controller.py b/src/app_controller.py index d85e3ef..b8684ac 100644 --- a/src/app_controller.py +++ b/src/app_controller.py @@ -1125,9 +1125,6 @@ class AppController: self.ui_separate_tool_calls_panel = False self.ui_separate_external_tools = False self.config = models.load_config() - path_info = paths.get_full_path_info() - self.ui_logs_dir = str(path_info['logs_dir']['path']) - self.ui_scripts_dir = str(path_info['scripts_dir']['path']) theme.load_from_config(self.config) ai_cfg = self.config.get("ai", {}) self._current_provider = ai_cfg.get("provider", "gemini") @@ -1140,6 +1137,27 @@ class AppController: self.project_paths = list(projects_cfg.get("paths", [])) self.active_project_path = projects_cfg.get("active", "") self._load_active_project() + + # Track 5: Path isolation overrides + if self.project and 'paths' in self.project: + project_root = Path(self.active_project_path).parent if self.active_project_path else Path.cwd() + proj_paths = self.project.get('paths', {}) + if 'logs_dir' in proj_paths: + lpath = Path(proj_paths['logs_dir']) + if not lpath.is_absolute(): + lpath = project_root / lpath + os.environ['SLOP_LOGS_DIR'] = str(lpath) + if 'scripts_dir' in proj_paths: + spath = Path(proj_paths['scripts_dir']) + if not spath.is_absolute(): + spath = project_root / spath + os.environ['SLOP_SCRIPTS_DIR'] = str(spath) + paths.reset_resolved() + + path_info = paths.get_full_path_info() + self.ui_logs_dir = str(path_info['logs_dir']['path']) + self.ui_scripts_dir = str(path_info['scripts_dir']['path']) + if not self.project or not isinstance(self.project, dict) or "project" not in self.project: name = Path(self.active_project_path).stem if self.active_project_path else "unnamed" self.project = project_manager.default_project(name)