diff --git a/codex-rs/protocol/src/permissions.rs b/codex-rs/protocol/src/permissions.rs index 416d291fd1..84db365e13 100644 --- a/codex-rs/protocol/src/permissions.rs +++ b/codex-rs/protocol/src/permissions.rs @@ -279,7 +279,7 @@ impl FileSystemSandboxPolicy { } }); - if let Ok(cwd_root) = AbsolutePathBuf::from_absolute_path(cwd) { + if let Ok(cwd_root) = AbsolutePathBuf::relative_to_current_dir(cwd) { for protected_path in default_read_only_subpaths_for_writable_root( &cwd_root, /*protect_missing_dot_codex*/ true, ) { @@ -476,7 +476,7 @@ impl FileSystemSandboxPolicy { .iter() .filter(|path| normalize_effective_absolute_path((*path).clone()) == root) .collect(); - let protect_missing_dot_codex = AbsolutePathBuf::from_absolute_path(cwd) + let protect_missing_dot_codex = AbsolutePathBuf::relative_to_current_dir(cwd) .ok() .is_some_and(|cwd| normalize_effective_absolute_path(cwd) == root); let mut read_only_subpaths: Vec = @@ -562,7 +562,7 @@ impl FileSystemSandboxPolicy { return Vec::new(); } - let root = AbsolutePathBuf::from_absolute_path(cwd) + let root = AbsolutePathBuf::relative_to_current_dir(cwd) .ok() .map(|cwd| absolute_root_path_for_cwd(&cwd)); @@ -604,7 +604,7 @@ impl FileSystemSandboxPolicy { } } FileSystemSandboxKind::Restricted => { - let cwd_absolute = AbsolutePathBuf::from_absolute_path(cwd).ok(); + let cwd_absolute = AbsolutePathBuf::relative_to_current_dir(cwd).ok(); let mut include_platform_defaults = false; let mut has_full_disk_read_access = false; let mut has_full_disk_write_access = false; @@ -744,7 +744,7 @@ impl FileSystemSandboxPolicy { } fn resolved_entries_with_cwd(&self, cwd: &Path) -> Vec { - let cwd_absolute = AbsolutePathBuf::from_absolute_path(cwd).ok(); + let cwd_absolute = AbsolutePathBuf::relative_to_current_dir(cwd).ok(); self.entries .iter() .filter_map(|entry| { diff --git a/codex-rs/protocol/src/protocol.rs b/codex-rs/protocol/src/protocol.rs index 1f199b149b..39ea414089 100644 --- a/codex-rs/protocol/src/protocol.rs +++ b/codex-rs/protocol/src/protocol.rs @@ -772,7 +772,7 @@ impl ReadOnlyAccess { ReadOnlyAccess::FullAccess => return Vec::new(), ReadOnlyAccess::Restricted { readable_roots, .. } => { let mut roots = readable_roots.clone(); - match AbsolutePathBuf::from_absolute_path(cwd) { + match AbsolutePathBuf::relative_to_current_dir(cwd) { Ok(cwd_root) => roots.push(cwd_root), Err(err) => { error!("Ignoring invalid cwd {cwd:?} for sandbox readable root: {err}"); @@ -1023,7 +1023,7 @@ impl SandboxPolicy { // Always include defaults: cwd, /tmp (if present on Unix), and // on macOS, the per-user TMPDIR unless explicitly excluded. // TODO(mbolin): cwd param should be AbsolutePathBuf. - let cwd_absolute = AbsolutePathBuf::from_absolute_path(cwd); + let cwd_absolute = AbsolutePathBuf::relative_to_current_dir(cwd); match cwd_absolute { Ok(cwd) => { roots.push(cwd); @@ -1071,7 +1071,7 @@ impl SandboxPolicy { } // For each root, compute subpaths that should remain read-only. - let cwd_root = AbsolutePathBuf::from_absolute_path(cwd).ok(); + let cwd_root = AbsolutePathBuf::relative_to_current_dir(cwd).ok(); roots .into_iter() .map(|writable_root| {