feat(project): project-level logs and scripts path isolation

This commit is contained in:
2026-05-10 14:02:51 -04:00
parent 16b99d16a4
commit bb00793696
+21 -3
View File
@@ -1125,9 +1125,6 @@ class AppController:
self.ui_separate_tool_calls_panel = False self.ui_separate_tool_calls_panel = False
self.ui_separate_external_tools = False self.ui_separate_external_tools = False
self.config = models.load_config() 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) theme.load_from_config(self.config)
ai_cfg = self.config.get("ai", {}) ai_cfg = self.config.get("ai", {})
self._current_provider = ai_cfg.get("provider", "gemini") self._current_provider = ai_cfg.get("provider", "gemini")
@@ -1140,6 +1137,27 @@ class AppController:
self.project_paths = list(projects_cfg.get("paths", [])) self.project_paths = list(projects_cfg.get("paths", []))
self.active_project_path = projects_cfg.get("active", "") self.active_project_path = projects_cfg.get("active", "")
self._load_active_project() 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: 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" name = Path(self.active_project_path).stem if self.active_project_path else "unnamed"
self.project = project_manager.default_project(name) self.project = project_manager.default_project(name)