feat(project): project-level logs and scripts path isolation
This commit is contained in:
+21
-3
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user