From ebf6197279cec55d25010f18c0fd1f4d682ff0bb Mon Sep 17 00:00:00 2001 From: thibaud-lclr Date: Tue, 21 Apr 2026 16:49:31 +0200 Subject: [PATCH] fix(orchestrator): add worktree path to agent writable dirs --- src-tauri/src/services/orchestrator.rs | 34 ++++++++++++++++++++------ 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/src-tauri/src/services/orchestrator.rs b/src-tauri/src/services/orchestrator.rs index f5823ca..e84bd9f 100644 --- a/src-tauri/src/services/orchestrator.rs +++ b/src-tauri/src/services/orchestrator.rs @@ -204,6 +204,12 @@ fn resolve_path_from_working_dir(working_dir: &Path, path: &str) -> Option Vec { + let working_dir_path = Path::new(working_dir); + let normalized_working_dir = + std::fs::canonicalize(working_dir_path).unwrap_or_else(|_| working_dir_path.to_path_buf()); + + let mut dirs = vec![normalized_working_dir.to_string_lossy().to_string()]; + let output = std::process::Command::new("git") .args(["rev-parse", "--git-dir", "--git-common-dir"]) .current_dir(working_dir) @@ -211,14 +217,8 @@ fn codex_additional_writable_dirs(working_dir: &str) -> Vec { let output = match output { Ok(value) if value.status.success() => value, - _ => return Vec::new(), + _ => return dirs, }; - - let working_dir_path = Path::new(working_dir); - let normalized_working_dir = - std::fs::canonicalize(working_dir_path).unwrap_or_else(|_| working_dir_path.to_path_buf()); - - let mut dirs = Vec::new(); for line in String::from_utf8_lossy(&output.stdout).lines() { let Some(path) = resolve_path_from_working_dir(working_dir_path, line) else { continue; @@ -1246,6 +1246,16 @@ mod tests { let agent = build_test_agent(crate::models::agent::AgentTool::Codex); let args = build_agent_cli_args(&agent, &worktree_path); let add_dirs = collect_add_dirs(&args); + let normalized_worktree = std::fs::canonicalize(&worktree_path) + .unwrap_or_else(|_| Path::new(&worktree_path).to_path_buf()) + .to_string_lossy() + .to_string(); + assert!( + add_dirs.contains(&normalized_worktree), + "Expected --add-dir to contain worktree '{}', got {:?}", + normalized_worktree, + add_dirs + ); let rev_parse = Command::new("git") .args(["rev-parse", "--git-dir", "--git-common-dir"]) @@ -1292,6 +1302,16 @@ mod tests { let agent = build_test_agent(crate::models::agent::AgentTool::ClaudeCode); let args = build_agent_cli_args(&agent, &worktree_path); let add_dirs = collect_add_dirs(&args); + let normalized_worktree = std::fs::canonicalize(&worktree_path) + .unwrap_or_else(|_| Path::new(&worktree_path).to_path_buf()) + .to_string_lossy() + .to_string(); + assert!( + add_dirs.contains(&normalized_worktree), + "Expected --add-dir to contain worktree '{}', got {:?}", + normalized_worktree, + add_dirs + ); let rev_parse = Command::new("git") .args(["rev-parse", "--git-dir", "--git-common-dir"])