fix(orchestrator): add worktree path to agent writable dirs

This commit is contained in:
thibaud-lclr 2026-04-21 16:49:31 +02:00
parent ae9b4c1474
commit ebf6197279

View file

@ -204,6 +204,12 @@ fn resolve_path_from_working_dir(working_dir: &Path, path: &str) -> Option<PathB
}
fn codex_additional_writable_dirs(working_dir: &str) -> Vec<String> {
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<String> {
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"])