diff --git a/codex-rs/core/src/approval_mode_cli_arg.rs b/codex-rs/core/src/approval_mode_cli_arg.rs index f4e64febae..c231ef1807 100644 --- a/codex-rs/core/src/approval_mode_cli_arg.rs +++ b/codex-rs/core/src/approval_mode_cli_arg.rs @@ -7,6 +7,7 @@ use clap::ArgAction; use clap::Parser; use clap::ValueEnum; +use crate::config::parse_sandbox_permission_with_base_path; use crate::protocol::AskForApproval; use crate::protocol::SandboxPermission; @@ -72,49 +73,3 @@ fn parse_sandbox_permission(raw: &str) -> std::io::Result { let base_path = std::env::current_dir()?; parse_sandbox_permission_with_base_path(raw, base_path) } - -pub(crate) fn parse_sandbox_permission_with_base_path( - raw: &str, - base_path: PathBuf, -) -> std::io::Result { - use SandboxPermission::*; - - if let Some(path) = raw.strip_prefix("disk-write-folder=") { - return if path.is_empty() { - Err(std::io::Error::new( - std::io::ErrorKind::InvalidInput, - "--sandbox-permission disk-write-folder= requires a non-empty PATH", - )) - } else { - use path_absolutize::*; - - let file = PathBuf::from(path); - let absolute_path = if file.is_relative() { - file.absolutize_from(base_path) - } else { - file.absolutize() - } - .map(|path| path.into_owned())?; - Ok(DiskWriteFolder { - folder: absolute_path, - }) - }; - } - - match raw { - "disk-full-read-access" => Ok(DiskFullReadAccess), - "disk-write-platform-user-temp-folder" => Ok(DiskWritePlatformUserTempFolder), - "disk-write-platform-global-temp-folder" => Ok(DiskWritePlatformGlobalTempFolder), - "disk-write-cwd" => Ok(DiskWriteCwd), - "disk-full-write-access" => Ok(DiskFullWriteAccess), - "network-full-access" => Ok(NetworkFullAccess), - _ => Err( - std::io::Error::new( - std::io::ErrorKind::InvalidInput, - format!( - "`{raw}` is not a recognised permission.\nRun with `--help` to see the accepted values." - ), - ) - ), - } -} diff --git a/codex-rs/core/src/config.rs b/codex-rs/core/src/config.rs index 1557ce2752..554173c537 100644 --- a/codex-rs/core/src/config.rs +++ b/codex-rs/core/src/config.rs @@ -1,4 +1,3 @@ -use crate::approval_mode_cli_arg::parse_sandbox_permission_with_base_path; use crate::flags::OPENAI_DEFAULT_MODEL; use crate::protocol::AskForApproval; use crate::protocol::SandboxPermission; @@ -257,6 +256,52 @@ pub fn log_dir() -> std::io::Result { Ok(p) } +pub(crate) fn parse_sandbox_permission_with_base_path( + raw: &str, + base_path: PathBuf, +) -> std::io::Result { + use SandboxPermission::*; + + if let Some(path) = raw.strip_prefix("disk-write-folder=") { + return if path.is_empty() { + Err(std::io::Error::new( + std::io::ErrorKind::InvalidInput, + "--sandbox-permission disk-write-folder= requires a non-empty PATH", + )) + } else { + use path_absolutize::*; + + let file = PathBuf::from(path); + let absolute_path = if file.is_relative() { + file.absolutize_from(base_path) + } else { + file.absolutize() + } + .map(|path| path.into_owned())?; + Ok(DiskWriteFolder { + folder: absolute_path, + }) + }; + } + + match raw { + "disk-full-read-access" => Ok(DiskFullReadAccess), + "disk-write-platform-user-temp-folder" => Ok(DiskWritePlatformUserTempFolder), + "disk-write-platform-global-temp-folder" => Ok(DiskWritePlatformGlobalTempFolder), + "disk-write-cwd" => Ok(DiskWriteCwd), + "disk-full-write-access" => Ok(DiskFullWriteAccess), + "network-full-access" => Ok(NetworkFullAccess), + _ => Err( + std::io::Error::new( + std::io::ErrorKind::InvalidInput, + format!( + "`{raw}` is not a recognised permission.\nRun with `--help` to see the accepted values." + ), + ) + ), + } +} + #[cfg(test)] mod tests { use super::*;