diff --git a/codex-rs/app-server/src/codex_message_processor.rs b/codex-rs/app-server/src/codex_message_processor.rs index 8c24467329..a8a52ca865 100644 --- a/codex-rs/app-server/src/codex_message_processor.rs +++ b/codex-rs/app-server/src/codex_message_processor.rs @@ -8072,9 +8072,7 @@ impl CodexMessageProcessor { Ok(config) => { let setup_request = WindowsSandboxSetupRequest { mode, - policy: config - .permissions - .legacy_sandbox_policy(config.cwd.as_path()), + permission_profile: config.permissions.permission_profile(), policy_cwd: config.cwd.to_path_buf(), command_cwd, env_map: std::env::vars().collect(), diff --git a/codex-rs/core/src/windows_sandbox.rs b/codex-rs/core/src/windows_sandbox.rs index a094545bab..aefe9f96c7 100644 --- a/codex-rs/core/src/windows_sandbox.rs +++ b/codex-rs/core/src/windows_sandbox.rs @@ -9,7 +9,9 @@ use codex_features::FeaturesToml; use codex_login::default_client::originator; use codex_otel::sanitize_metric_tag_value; use codex_protocol::config_types::WindowsSandboxLevel; +use codex_protocol::models::PermissionProfile; use codex_protocol::protocol::SandboxPolicy; +use codex_sandboxing::compatibility_sandbox_policy_for_permission_profile; use std::collections::BTreeMap; use std::collections::HashMap; use std::path::Path; @@ -272,7 +274,7 @@ pub enum WindowsSandboxSetupMode { #[derive(Debug, Clone)] pub struct WindowsSandboxSetupRequest { pub mode: WindowsSandboxSetupMode, - pub policy: SandboxPolicy, + pub permission_profile: PermissionProfile, pub policy_cwd: PathBuf, pub command_cwd: PathBuf, pub env_map: HashMap, @@ -311,13 +313,20 @@ async fn run_windows_sandbox_setup_and_persist( request: WindowsSandboxSetupRequest, ) -> anyhow::Result<()> { let mode = request.mode; - let policy = request.policy; + let permission_profile = request.permission_profile; let policy_cwd = request.policy_cwd; let command_cwd = request.command_cwd; let env_map = request.env_map; let codex_home = request.codex_home; let active_profile = request.active_profile; let setup_codex_home = codex_home.clone(); + let file_system_sandbox_policy = permission_profile.file_system_sandbox_policy(); + let policy = compatibility_sandbox_policy_for_permission_profile( + &permission_profile, + &file_system_sandbox_policy, + permission_profile.network_sandbox_policy(), + policy_cwd.as_path(), + ); let setup_result = tokio::task::spawn_blocking(move || -> anyhow::Result<()> { match mode {