protocol: drop legacy sandbox from user turns

This commit is contained in:
Michael Bolin
2026-04-30 08:35:50 -07:00
parent b42ea0a808
commit dd07fb5a2a
42 changed files with 137 additions and 265 deletions
@@ -713,7 +713,6 @@ async fn run_review_on_session(
cwd: params.parent_turn.cwd.to_path_buf(),
approval_policy: AskForApproval::Never,
approvals_reviewer: None,
sandbox_policy: None,
permission_profile,
model: params.model.clone(),
effort: params.reasoning_effort,
-1
View File
@@ -134,7 +134,6 @@ pub(super) async fn user_input_or_turn_inner(
cwd,
approval_policy,
approvals_reviewer,
sandbox_policy: _,
permission_profile,
model,
effort,
-1
View File
@@ -4247,7 +4247,6 @@ async fn user_turn_updates_approvals_reviewer() {
cwd: config.cwd.to_path_buf(),
approval_policy: config.permissions.approval_policy.value(),
approvals_reviewer: Some(codex_config::types::ApprovalsReviewer::AutoReview),
sandbox_policy: None,
permission_profile: config.permissions.permission_profile(),
model: turn_context.model_info.slug.clone(),
effort: config.model_reasoning_effort,
+4 -11
View File
@@ -202,19 +202,13 @@ pub enum ShellModelOutput {
// UnifiedExec has its own set of tests
}
/// Returns the permission fields required by `Op::UserTurn` for tests that
/// Returns the permission profile required by `Op::UserTurn` for tests that
/// construct the op directly.
///
/// The legacy sandbox field is intentionally omitted when a canonical
/// `PermissionProfile` is available.
pub fn turn_permission_fields(
pub fn turn_permission_profile(
permission_profile: PermissionProfile,
_cwd: &Path,
) -> (
Option<codex_protocol::protocol::SandboxPolicy>,
PermissionProfile,
) {
(None, permission_profile)
) -> PermissionProfile {
permission_profile
}
pub struct TestCodexBuilder {
@@ -716,7 +710,6 @@ impl TestCodex {
cwd: self.config.cwd.to_path_buf(),
approval_policy,
approvals_reviewer: None,
sandbox_policy: None,
permission_profile,
model: session_model,
effort: None,
+2 -4
View File
@@ -35,7 +35,7 @@ use core_test_support::skip_if_remote;
use core_test_support::test_codex::TestCodexBuilder;
use core_test_support::test_codex::TestCodexHarness;
use core_test_support::test_codex::test_codex;
use core_test_support::test_codex::turn_permission_fields;
use core_test_support::test_codex::turn_permission_profile;
use core_test_support::wait_for_event;
use core_test_support::wait_for_event_with_timeout;
use serde_json::json;
@@ -64,8 +64,7 @@ async fn apply_patch_harness_with(
async fn submit_without_wait(harness: &TestCodexHarness, prompt: &str) -> Result<()> {
let test = harness.test();
let session_model = test.session_configured.model.clone();
let (sandbox_policy, permission_profile) =
turn_permission_fields(PermissionProfile::Disabled, harness.cwd());
let permission_profile = turn_permission_profile(PermissionProfile::Disabled, harness.cwd());
test.codex
.submit(Op::UserTurn {
environments: None,
@@ -77,7 +76,6 @@ async fn submit_without_wait(harness: &TestCodexHarness, prompt: &str) -> Result
cwd: harness.cwd().to_path_buf(),
approval_policy: AskForApproval::Never,
approvals_reviewer: None,
sandbox_policy,
permission_profile,
model: session_model,
effort: None,
+3 -7
View File
@@ -33,7 +33,7 @@ use core_test_support::responses::start_mock_server;
use core_test_support::skip_if_no_network;
use core_test_support::test_codex::TestCodex;
use core_test_support::test_codex::test_codex;
use core_test_support::test_codex::turn_permission_fields;
use core_test_support::test_codex::turn_permission_profile;
use core_test_support::wait_for_event;
use core_test_support::wait_for_event_with_timeout;
use core_test_support::zsh_fork::build_zsh_fork_test;
@@ -590,8 +590,7 @@ async fn submit_turn(
permission_profile: PermissionProfile,
) -> Result<()> {
let session_model = test.session_configured.model.clone();
let (sandbox_policy, permission_profile) =
turn_permission_fields(permission_profile, test.cwd.path());
let permission_profile = turn_permission_profile(permission_profile, test.cwd.path());
test.codex
.submit(Op::UserTurn {
@@ -604,7 +603,6 @@ async fn submit_turn(
cwd: test.cwd.path().to_path_buf(),
approval_policy,
approvals_reviewer: Some(ApprovalsReviewer::User),
sandbox_policy,
permission_profile,
model: session_model,
effort: None,
@@ -2381,8 +2379,7 @@ async fn matched_prefix_rule_runs_unsandboxed_under_zsh_fork() -> Result<()> {
.await;
let session_model = test.session_configured.model.clone();
let (sandbox_policy, permission_profile) =
turn_permission_fields(permission_profile, test.cwd.path());
let permission_profile = turn_permission_profile(permission_profile, test.cwd.path());
test.codex
.submit(Op::UserTurn {
environments: None,
@@ -2394,7 +2391,6 @@ async fn matched_prefix_rule_runs_unsandboxed_under_zsh_fork() -> Result<()> {
cwd: test.cwd.path().to_path_buf(),
approval_policy,
approvals_reviewer: Some(ApprovalsReviewer::User),
sandbox_policy,
permission_profile,
model: session_model,
effort: None,
+3 -5
View File
@@ -63,7 +63,7 @@ use core_test_support::responses::sse_failed;
use core_test_support::skip_if_no_network;
use core_test_support::test_codex::TestCodex;
use core_test_support::test_codex::test_codex;
use core_test_support::test_codex::turn_permission_fields;
use core_test_support::test_codex::turn_permission_profile;
use core_test_support::wait_for_event;
use dunce::canonicalize as normalize_path;
use futures::StreamExt;
@@ -1726,7 +1726,7 @@ async fn user_turn_collaboration_mode_overrides_model_and_effort() -> anyhow::Re
session_configured,
..
} = test_codex().with_model("gpt-5.4").build(&server).await?;
let (sandbox_policy, permission_profile) = turn_permission_fields(
let permission_profile = turn_permission_profile(
config.permissions.permission_profile(),
config.cwd.as_path(),
);
@@ -1750,7 +1750,6 @@ async fn user_turn_collaboration_mode_overrides_model_and_effort() -> anyhow::Re
cwd: config.cwd.to_path_buf(),
approval_policy: config.permissions.approval_policy.value(),
approvals_reviewer: None,
sandbox_policy,
permission_profile,
model: session_configured.model.clone(),
effort: Some(ReasoningEffort::Low),
@@ -1861,7 +1860,7 @@ async fn user_turn_explicit_reasoning_summary_overrides_model_catalog_default()
})
.build(&server)
.await?;
let (sandbox_policy, permission_profile) = turn_permission_fields(
let permission_profile = turn_permission_profile(
config.permissions.permission_profile(),
config.cwd.as_path(),
);
@@ -1876,7 +1875,6 @@ async fn user_turn_explicit_reasoning_summary_overrides_model_catalog_default()
cwd: config.cwd.to_path_buf(),
approval_policy: config.permissions.approval_policy.value(),
approvals_reviewer: None,
sandbox_policy,
permission_profile,
model: session_configured.model,
effort: None,
+2 -4
View File
@@ -30,7 +30,7 @@ use core_test_support::skip_if_no_network;
use core_test_support::stdio_server_bin;
use core_test_support::test_codex::TestCodex;
use core_test_support::test_codex::test_codex;
use core_test_support::test_codex::turn_permission_fields;
use core_test_support::test_codex::turn_permission_profile;
use core_test_support::wait_for_event;
use core_test_support::wait_for_event_match;
use pretty_assertions::assert_eq;
@@ -2610,8 +2610,7 @@ text(
.await;
let cwd = test.cwd.path().to_path_buf();
let (sandbox_policy, permission_profile) =
turn_permission_fields(PermissionProfile::Disabled, cwd.as_path());
let permission_profile = turn_permission_profile(PermissionProfile::Disabled, cwd.as_path());
test.codex
.submit(Op::UserTurn {
@@ -2624,7 +2623,6 @@ text(
cwd,
approval_policy: AskForApproval::Never,
approvals_reviewer: None,
sandbox_policy,
permission_profile,
model: test.session_configured.model.clone(),
effort: None,
@@ -14,7 +14,7 @@ use core_test_support::responses::sse;
use core_test_support::responses::start_mock_server;
use core_test_support::skip_if_no_network;
use core_test_support::test_codex::test_codex;
use core_test_support::test_codex::turn_permission_fields;
use core_test_support::test_codex::turn_permission_profile;
use core_test_support::wait_for_event;
use pretty_assertions::assert_eq;
use serde_json::Value;
@@ -175,7 +175,7 @@ async fn collaboration_instructions_added_on_user_turn() -> Result<()> {
let test = test_codex().build(&server).await?;
let collab_text = "turn instructions";
let collaboration_mode = collab_mode_with_instructions(Some(collab_text));
let (sandbox_policy, permission_profile) = turn_permission_fields(
let permission_profile = turn_permission_profile(
test.config.permissions.permission_profile(),
test.config.cwd.as_path(),
);
@@ -190,7 +190,6 @@ async fn collaboration_instructions_added_on_user_turn() -> Result<()> {
cwd: test.config.cwd.to_path_buf(),
approval_policy: test.config.permissions.approval_policy.value(),
approvals_reviewer: None,
sandbox_policy,
permission_profile,
model: test.session_configured.model.clone(),
effort: None,
@@ -284,7 +283,7 @@ async fn user_turn_overrides_collaboration_instructions_after_override() -> Resu
let base_mode = collab_mode_with_instructions(Some(base_text));
let turn_text = "turn override";
let turn_mode = collab_mode_with_instructions(Some(turn_text));
let (sandbox_policy, permission_profile) = turn_permission_fields(
let permission_profile = turn_permission_profile(
test.config.permissions.permission_profile(),
test.config.cwd.as_path(),
);
@@ -316,7 +315,6 @@ async fn user_turn_overrides_collaboration_instructions_after_override() -> Resu
cwd: test.config.cwd.to_path_buf(),
approval_policy: test.config.permissions.approval_policy.value(),
approvals_reviewer: None,
sandbox_policy,
permission_profile,
model: test.session_configured.model.clone(),
effort: None,
+2 -4
View File
@@ -28,7 +28,7 @@ use core_test_support::responses::ev_reasoning_item;
use core_test_support::responses::mount_models_once;
use core_test_support::skip_if_no_network;
use core_test_support::test_codex::test_codex;
use core_test_support::test_codex::turn_permission_fields;
use core_test_support::test_codex::turn_permission_profile;
use core_test_support::wait_for_event;
use core_test_support::wait_for_event_match;
use std::path::PathBuf;
@@ -73,8 +73,7 @@ const PRETURN_CONTEXT_DIFF_CWD: &str = "/tmp/PRETURN_CONTEXT_DIFF_CWD";
pub(super) const COMPACT_WARNING_MESSAGE: &str = "Heads up: Long threads and multiple compactions can cause the model to be less accurate. Start a new thread when possible to keep threads small and targeted.";
fn disabled_permission_user_turn(text: impl Into<String>, cwd: PathBuf, model: String) -> Op {
let (sandbox_policy, permission_profile) =
turn_permission_fields(PermissionProfile::Disabled, cwd.as_path());
let permission_profile = turn_permission_profile(PermissionProfile::Disabled, cwd.as_path());
Op::UserTurn {
environments: None,
items: vec![UserInput::Text {
@@ -85,7 +84,6 @@ fn disabled_permission_user_turn(text: impl Into<String>, cwd: PathBuf, model: S
cwd,
approval_policy: AskForApproval::Never,
approvals_reviewer: None,
sandbox_policy,
permission_profile,
model,
effort: None,
+4 -7
View File
@@ -18,7 +18,7 @@ use core_test_support::responses::mount_sse_once;
use core_test_support::responses::sse;
use core_test_support::responses::start_mock_server;
use core_test_support::test_codex::test_codex;
use core_test_support::test_codex::turn_permission_fields;
use core_test_support::test_codex::turn_permission_profile;
use core_test_support::wait_for_event;
use serde_json::Value;
use serde_json::json;
@@ -43,8 +43,7 @@ async fn submit_user_turn(
collaboration_mode: Option<CollaborationMode>,
) -> Result<()> {
let session_model = test.session_configured.model.clone();
let (sandbox_policy, permission_profile) =
turn_permission_fields(permission_profile, test.config.cwd.as_path());
let permission_profile = turn_permission_profile(permission_profile, test.config.cwd.as_path());
test.codex
.submit(Op::UserTurn {
environments: None,
@@ -56,7 +55,6 @@ async fn submit_user_turn(
cwd: test.cwd_path().to_path_buf(),
approval_policy,
approvals_reviewer: None,
sandbox_policy,
permission_profile,
model: session_model,
effort: None,
@@ -128,8 +126,8 @@ async fn execpolicy_blocks_shell_invocation() -> Result<()> {
.await;
let session_model = test.session_configured.model.clone();
let (sandbox_policy, permission_profile) =
turn_permission_fields(PermissionProfile::Disabled, test.config.cwd.as_path());
let permission_profile =
turn_permission_profile(PermissionProfile::Disabled, test.config.cwd.as_path());
test.codex
.submit(Op::UserTurn {
environments: None,
@@ -141,7 +139,6 @@ async fn execpolicy_blocks_shell_invocation() -> Result<()> {
cwd: test.cwd_path().to_path_buf(),
approval_policy: AskForApproval::Never,
approvals_reviewer: None,
sandbox_policy,
permission_profile,
model: session_model,
effort: None,
+3 -7
View File
@@ -18,7 +18,7 @@ use core_test_support::responses::start_mock_server;
use core_test_support::skip_if_no_network;
use core_test_support::test_codex::TestCodex;
use core_test_support::test_codex::test_codex;
use core_test_support::test_codex::turn_permission_fields;
use core_test_support::test_codex::turn_permission_profile;
use core_test_support::wait_for_event;
use image::ImageBuffer;
use image::Rgba;
@@ -109,8 +109,7 @@ async fn copy_paste_local_image_persists_rollout_request_shape() -> anyhow::Resu
responses::mount_sse_once(&server, response).await;
let session_model = session_configured.model.clone();
let (sandbox_policy, permission_profile) =
turn_permission_fields(PermissionProfile::Disabled, cwd.path());
let permission_profile = turn_permission_profile(PermissionProfile::Disabled, cwd.path());
codex
.submit(Op::UserTurn {
@@ -128,7 +127,6 @@ async fn copy_paste_local_image_persists_rollout_request_shape() -> anyhow::Resu
cwd: cwd.path().to_path_buf(),
approval_policy: AskForApproval::Never,
approvals_reviewer: None,
sandbox_policy,
permission_profile,
model: session_model,
effort: None,
@@ -199,8 +197,7 @@ async fn drag_drop_image_persists_rollout_request_shape() -> anyhow::Result<()>
responses::mount_sse_once(&server, response).await;
let session_model = session_configured.model.clone();
let (sandbox_policy, permission_profile) =
turn_permission_fields(PermissionProfile::Disabled, cwd.path());
let permission_profile = turn_permission_profile(PermissionProfile::Disabled, cwd.path());
codex
.submit(Op::UserTurn {
@@ -218,7 +215,6 @@ async fn drag_drop_image_persists_rollout_request_shape() -> anyhow::Result<()>
cwd: cwd.path().to_path_buf(),
approval_policy: AskForApproval::Never,
approvals_reviewer: None,
sandbox_policy,
permission_profile,
model: session_model,
effort: None,
+2 -4
View File
@@ -35,7 +35,7 @@ use core_test_support::responses::start_mock_server;
use core_test_support::skip_if_no_network;
use core_test_support::test_codex::TestCodex;
use core_test_support::test_codex::test_codex;
use core_test_support::test_codex::turn_permission_fields;
use core_test_support::test_codex::turn_permission_profile;
use core_test_support::wait_for_event;
use core_test_support::wait_for_event_match;
use pretty_assertions::assert_eq;
@@ -48,8 +48,7 @@ fn disabled_plan_turn(
collaboration_mode: CollaborationMode,
) -> anyhow::Result<Op> {
let cwd = std::env::current_dir()?;
let (sandbox_policy, permission_profile) =
turn_permission_fields(PermissionProfile::Disabled, cwd.as_path());
let permission_profile = turn_permission_profile(PermissionProfile::Disabled, cwd.as_path());
Ok(Op::UserTurn {
environments: None,
items: vec![UserInput::Text {
@@ -60,7 +59,6 @@ fn disabled_plan_turn(
cwd,
approval_policy: AskForApproval::Never,
approvals_reviewer: None,
sandbox_policy,
permission_profile,
model,
effort: None,
+2 -4
View File
@@ -9,7 +9,7 @@ use core_test_support::responses;
use core_test_support::skip_if_no_network;
use core_test_support::test_codex::TestCodex;
use core_test_support::test_codex::test_codex;
use core_test_support::test_codex::turn_permission_fields;
use core_test_support::test_codex::turn_permission_profile;
use core_test_support::wait_for_event;
use pretty_assertions::assert_eq;
use responses::ev_assistant_message;
@@ -70,8 +70,7 @@ async fn codex_returns_json_result(model: String) -> anyhow::Result<()> {
responses::mount_sse_once_match(&server, match_json_text_param, sse1).await;
let TestCodex { codex, cwd, .. } = test_codex().build(&server).await?;
let (sandbox_policy, permission_profile) =
turn_permission_fields(PermissionProfile::Disabled, cwd.path());
let permission_profile = turn_permission_profile(PermissionProfile::Disabled, cwd.path());
// 1) Normal user input – should hit server once.
codex
@@ -85,7 +84,6 @@ async fn codex_returns_json_result(model: String) -> anyhow::Result<()> {
cwd: cwd.path().to_path_buf(),
approval_policy: AskForApproval::Never,
approvals_reviewer: None,
sandbox_policy,
permission_profile,
model,
effort: None,
+2 -4
View File
@@ -19,7 +19,7 @@ use core_test_support::responses::mount_sse_sequence;
use core_test_support::responses::start_mock_server;
use core_test_support::test_codex::TestCodex;
use core_test_support::test_codex::test_codex;
use core_test_support::test_codex::turn_permission_fields;
use core_test_support::test_codex::turn_permission_profile;
use core_test_support::wait_for_event;
use tokio::time::timeout;
@@ -47,8 +47,7 @@ fn contains_skill_body(request: &ResponsesRequest, skill_body: &str) -> bool {
async fn submit_skill_turn(test: &TestCodex, skill_path: PathBuf, prompt: &str) -> Result<()> {
let session_model = test.session_configured.model.clone();
let (sandbox_policy, permission_profile) =
turn_permission_fields(PermissionProfile::Disabled, test.cwd_path());
let permission_profile = turn_permission_profile(PermissionProfile::Disabled, test.cwd_path());
test.codex
.submit(Op::UserTurn {
environments: None,
@@ -66,7 +65,6 @@ async fn submit_skill_turn(test: &TestCodex, skill_path: PathBuf, prompt: &str)
cwd: test.cwd_path().to_path_buf(),
approval_policy: AskForApproval::Never,
approvals_reviewer: None,
sandbox_policy,
permission_profile,
model: session_model,
effort: None,
+3 -4
View File
@@ -31,7 +31,7 @@ use core_test_support::responses::start_mock_server;
use core_test_support::skip_if_no_network;
use core_test_support::test_codex::TestCodex;
use core_test_support::test_codex::test_codex;
use core_test_support::test_codex::turn_permission_fields;
use core_test_support::test_codex::turn_permission_profile;
use core_test_support::wait_for_event;
use pretty_assertions::assert_eq;
use std::path::Path;
@@ -39,8 +39,8 @@ use std::path::PathBuf;
use wiremock::MockServer;
fn read_only_user_turn(test: &TestCodex, items: Vec<UserInput>, model: String) -> Op {
let (sandbox_policy, permission_profile) =
turn_permission_fields(PermissionProfile::read_only(), test.cwd_path());
let permission_profile =
turn_permission_profile(PermissionProfile::read_only(), test.cwd_path());
Op::UserTurn {
environments: None,
items,
@@ -48,7 +48,6 @@ fn read_only_user_turn(test: &TestCodex, items: Vec<UserInput>, model: String) -
cwd: test.cwd_path().to_path_buf(),
approval_policy: AskForApproval::Never,
approvals_reviewer: None,
sandbox_policy,
permission_profile,
model,
effort: test.config.model_reasoning_effort,
@@ -24,7 +24,7 @@ use core_test_support::responses::sse;
use core_test_support::responses::start_mock_server;
use core_test_support::skip_if_no_network;
use core_test_support::test_codex::test_codex;
use core_test_support::test_codex::turn_permission_fields;
use core_test_support::test_codex::turn_permission_profile;
use core_test_support::wait_for_event;
use serde_json::json;
@@ -113,8 +113,8 @@ async fn snapshot_model_visible_layout_turn_overrides() -> Result<()> {
let preturn_context_diff_cwd = test.cwd_path().join(PRETURN_CONTEXT_DIFF_CWD);
fs::create_dir_all(&preturn_context_diff_cwd)?;
let first_turn_cwd = test.cwd_path().to_path_buf();
let (first_sandbox_policy, first_permission_profile) =
turn_permission_fields(PermissionProfile::read_only(), first_turn_cwd.as_path());
let first_permission_profile =
turn_permission_profile(PermissionProfile::read_only(), first_turn_cwd.as_path());
test.codex
.submit(Op::UserTurn {
@@ -127,7 +127,6 @@ async fn snapshot_model_visible_layout_turn_overrides() -> Result<()> {
cwd: first_turn_cwd,
approval_policy: AskForApproval::Never,
approvals_reviewer: None,
sandbox_policy: first_sandbox_policy,
permission_profile: first_permission_profile,
model: test.session_configured.model.clone(),
effort: test.config.model_reasoning_effort,
@@ -142,7 +141,7 @@ async fn snapshot_model_visible_layout_turn_overrides() -> Result<()> {
})
.await;
let (second_sandbox_policy, second_permission_profile) = turn_permission_fields(
let second_permission_profile = turn_permission_profile(
PermissionProfile::read_only(),
preturn_context_diff_cwd.as_path(),
);
@@ -157,7 +156,6 @@ async fn snapshot_model_visible_layout_turn_overrides() -> Result<()> {
cwd: preturn_context_diff_cwd,
approval_policy: AskForApproval::OnRequest,
approvals_reviewer: None,
sandbox_policy: second_sandbox_policy,
permission_profile: second_permission_profile,
model: test.session_configured.model.clone(),
effort: test.config.model_reasoning_effort,
@@ -226,8 +224,8 @@ async fn snapshot_model_visible_layout_cwd_change_does_not_refresh_agents() -> R
cwd_two.join("AGENTS.md"),
"# AGENTS two\n\n<INSTRUCTIONS>\nTurn two agents instructions.\n</INSTRUCTIONS>\n",
)?;
let (first_sandbox_policy, first_permission_profile) =
turn_permission_fields(PermissionProfile::read_only(), cwd_one.as_path());
let first_permission_profile =
turn_permission_profile(PermissionProfile::read_only(), cwd_one.as_path());
test.codex
.submit(Op::UserTurn {
@@ -240,7 +238,6 @@ async fn snapshot_model_visible_layout_cwd_change_does_not_refresh_agents() -> R
cwd: cwd_one.clone(),
approval_policy: AskForApproval::Never,
approvals_reviewer: None,
sandbox_policy: first_sandbox_policy,
permission_profile: first_permission_profile,
model: test.session_configured.model.clone(),
effort: test.config.model_reasoning_effort,
@@ -255,8 +252,8 @@ async fn snapshot_model_visible_layout_cwd_change_does_not_refresh_agents() -> R
})
.await;
let (second_sandbox_policy, second_permission_profile) =
turn_permission_fields(PermissionProfile::read_only(), cwd_two.as_path());
let second_permission_profile =
turn_permission_profile(PermissionProfile::read_only(), cwd_two.as_path());
test.codex
.submit(Op::UserTurn {
environments: None,
@@ -268,7 +265,6 @@ async fn snapshot_model_visible_layout_cwd_change_does_not_refresh_agents() -> R
cwd: cwd_two,
approval_policy: AskForApproval::Never,
approvals_reviewer: None,
sandbox_policy: second_sandbox_policy,
permission_profile: second_permission_profile,
model: test.session_configured.model.clone(),
effort: test.config.model_reasoning_effort,
@@ -370,7 +366,7 @@ async fn snapshot_model_visible_layout_resume_with_personality_change() -> Resul
let resumed = resume_builder.resume(&server, home, rollout_path).await?;
let resume_override_cwd = resumed.cwd_path().join(PRETURN_CONTEXT_DIFF_CWD);
fs::create_dir_all(&resume_override_cwd)?;
let (sandbox_policy, permission_profile) = turn_permission_fields(
let permission_profile = turn_permission_profile(
PermissionProfile::read_only(),
resume_override_cwd.as_path(),
);
@@ -386,7 +382,6 @@ async fn snapshot_model_visible_layout_resume_with_personality_change() -> Resul
cwd: resume_override_cwd,
approval_policy: AskForApproval::Never,
approvals_reviewer: None,
sandbox_policy,
permission_profile,
model: resumed.session_configured.model.clone(),
effort: resumed.config.model_reasoning_effort,
@@ -28,7 +28,7 @@ use core_test_support::responses::ev_response_created;
use core_test_support::responses::sse;
use core_test_support::responses::sse_response;
use core_test_support::test_codex::test_codex;
use core_test_support::test_codex::turn_permission_fields;
use core_test_support::test_codex::turn_permission_profile;
use core_test_support::wait_for_event;
use pretty_assertions::assert_eq;
use serde::Deserialize;
@@ -88,8 +88,7 @@ async fn renews_cache_ttl_on_matching_models_etag() -> Result<()> {
sse_response(response_body).insert_header("X-Models-Etag", ETAG),
)
.await;
let (sandbox_policy, permission_profile) =
turn_permission_fields(PermissionProfile::Disabled, test.cwd_path());
let permission_profile = turn_permission_profile(PermissionProfile::Disabled, test.cwd_path());
codex
.submit(Op::UserTurn {
@@ -102,7 +101,6 @@ async fn renews_cache_ttl_on_matching_models_etag() -> Result<()> {
cwd: test.cwd_path().to_path_buf(),
approval_policy: codex_protocol::protocol::AskForApproval::Never,
approvals_reviewer: None,
sandbox_policy,
permission_profile,
model: test.session_configured.model.clone(),
effort: None,
@@ -21,7 +21,7 @@ use core_test_support::responses::sse;
use core_test_support::responses::sse_response;
use core_test_support::skip_if_no_network;
use core_test_support::test_codex::test_codex;
use core_test_support::test_codex::turn_permission_fields;
use core_test_support::test_codex::turn_permission_profile;
use core_test_support::wait_for_event_with_timeout;
use pretty_assertions::assert_eq;
use wiremock::MockServer;
@@ -63,8 +63,8 @@ async fn refresh_models_on_models_etag_mismatch_and_avoid_duplicate_models_fetch
let cwd = Arc::clone(&test.cwd);
let session_model = test.session_configured.model.clone();
let cwd_path = cwd.path().to_path_buf();
let (sandbox_policy, permission_profile) =
turn_permission_fields(PermissionProfile::Disabled, cwd_path.as_path());
let permission_profile =
turn_permission_profile(PermissionProfile::Disabled, cwd_path.as_path());
assert_eq!(spawn_models_mock.requests().len(), 1);
assert_eq!(spawn_models_mock.single_request_path(), "/v1/models");
@@ -114,7 +114,6 @@ async fn refresh_models_on_models_etag_mismatch_and_avoid_duplicate_models_fetch
cwd: cwd_path,
approval_policy: AskForApproval::Never,
approvals_reviewer: None,
sandbox_policy,
permission_profile,
model: session_model,
effort: None,
+3 -4
View File
@@ -25,7 +25,7 @@ use core_test_support::streaming_sse::StreamingSseServer;
use core_test_support::streaming_sse::start_streaming_sse_server;
use core_test_support::test_codex::TestCodex;
use core_test_support::test_codex::test_codex;
use core_test_support::test_codex::turn_permission_fields;
use core_test_support::test_codex::turn_permission_profile;
use core_test_support::wait_for_event;
use pretty_assertions::assert_eq;
use serde_json::Value;
@@ -109,8 +109,8 @@ async fn submit_user_input(codex: &CodexThread, text: &str) {
}
async fn submit_danger_full_access_user_turn(test: &TestCodex, text: &str) {
let (sandbox_policy, permission_profile) =
turn_permission_fields(PermissionProfile::Disabled, test.config.cwd.as_path());
let permission_profile =
turn_permission_profile(PermissionProfile::Disabled, test.config.cwd.as_path());
test.codex
.submit(Op::UserTurn {
environments: None,
@@ -122,7 +122,6 @@ async fn submit_danger_full_access_user_turn(test: &TestCodex, text: &str) {
cwd: test.config.cwd.to_path_buf(),
approval_policy: AskForApproval::Never,
approvals_reviewer: None,
sandbox_policy,
permission_profile,
model: test.session_configured.model.clone(),
effort: None,
+3 -4
View File
@@ -27,7 +27,7 @@ use core_test_support::responses::start_mock_server;
use core_test_support::skip_if_no_network;
use core_test_support::test_codex::TestCodex;
use core_test_support::test_codex::test_codex;
use core_test_support::test_codex::turn_permission_fields;
use core_test_support::test_codex::turn_permission_profile;
use core_test_support::wait_for_event;
use pretty_assertions::assert_eq;
use tempfile::TempDir;
@@ -58,8 +58,8 @@ fn read_only_text_turn_with_personality(
approval_policy: AskForApproval,
personality: Option<Personality>,
) -> Op {
let (sandbox_policy, permission_profile) =
turn_permission_fields(PermissionProfile::read_only(), test.cwd_path());
let permission_profile =
turn_permission_profile(PermissionProfile::read_only(), test.cwd_path());
Op::UserTurn {
environments: None,
items: vec![UserInput::Text {
@@ -70,7 +70,6 @@ fn read_only_text_turn_with_personality(
cwd: test.cwd_path().to_path_buf(),
approval_policy,
approvals_reviewer: None,
sandbox_policy,
permission_profile,
model,
effort: test.config.model_reasoning_effort,
+8 -15
View File
@@ -26,7 +26,7 @@ use core_test_support::responses::start_mock_server;
use core_test_support::skip_if_no_network;
use core_test_support::test_codex::TestCodex;
use core_test_support::test_codex::test_codex;
use core_test_support::test_codex::turn_permission_fields;
use core_test_support::test_codex::turn_permission_profile;
use core_test_support::wait_for_event;
use pretty_assertions::assert_eq;
use tempfile::TempDir;
@@ -439,14 +439,13 @@ async fn overrides_turn_context_but_keeps_cached_prefix_and_key_constant() -> an
/*exclude_tmpdir_env_var*/ true,
/*exclude_slash_tmp*/ true,
);
let (sandbox_policy, permission_profile) =
turn_permission_fields(permission_profile, config.cwd.as_path());
let permission_profile = turn_permission_profile(permission_profile, config.cwd.as_path());
codex
.submit(Op::OverrideTurnContext {
cwd: None,
approval_policy: Some(AskForApproval::Never),
approvals_reviewer: None,
sandbox_policy,
sandbox_policy: None,
permission_profile: Some(permission_profile),
windows_sandbox_level: None,
model: None,
@@ -719,8 +718,7 @@ async fn per_turn_overrides_keep_cached_prefix_and_key_constant() -> anyhow::Res
/*exclude_tmpdir_env_var*/ true,
/*exclude_slash_tmp*/ true,
);
let (sandbox_policy, permission_profile) =
turn_permission_fields(permission_profile, new_cwd.path());
let permission_profile = turn_permission_profile(permission_profile, new_cwd.path());
codex
.submit(Op::UserTurn {
environments: None,
@@ -731,7 +729,6 @@ async fn per_turn_overrides_keep_cached_prefix_and_key_constant() -> anyhow::Res
cwd: new_cwd.path().to_path_buf(),
approval_policy: AskForApproval::Never,
approvals_reviewer: None,
sandbox_policy,
permission_profile,
model: "o3".to_string(),
effort: Some(ReasoningEffort::High),
@@ -831,7 +828,7 @@ async fn send_user_turn_with_no_changes_does_not_send_environment_context() -> a
let default_cwd = config.cwd.clone();
let default_approval_policy = config.permissions.approval_policy.value();
let (default_sandbox_policy, default_permission_profile) = turn_permission_fields(
let default_permission_profile = turn_permission_profile(
config.permissions.permission_profile(),
default_cwd.as_path(),
);
@@ -849,7 +846,6 @@ async fn send_user_turn_with_no_changes_does_not_send_environment_context() -> a
cwd: default_cwd.to_path_buf(),
approval_policy: default_approval_policy,
approvals_reviewer: None,
sandbox_policy: default_sandbox_policy.clone(),
permission_profile: default_permission_profile.clone(),
model: default_model.clone(),
effort: default_effort,
@@ -872,7 +868,6 @@ async fn send_user_turn_with_no_changes_does_not_send_environment_context() -> a
cwd: default_cwd.to_path_buf(),
approval_policy: default_approval_policy,
approvals_reviewer: None,
sandbox_policy: default_sandbox_policy.clone(),
permission_profile: default_permission_profile.clone(),
model: default_model.clone(),
effort: default_effort,
@@ -964,7 +959,7 @@ async fn send_user_turn_with_changes_sends_environment_context() -> anyhow::Resu
let default_cwd = config.cwd.clone();
let default_approval_policy = config.permissions.approval_policy.value();
let (default_sandbox_policy, default_permission_profile) = turn_permission_fields(
let default_permission_profile = turn_permission_profile(
config.permissions.permission_profile(),
default_cwd.as_path(),
);
@@ -982,7 +977,6 @@ async fn send_user_turn_with_changes_sends_environment_context() -> anyhow::Resu
cwd: default_cwd.to_path_buf(),
approval_policy: default_approval_policy,
approvals_reviewer: None,
sandbox_policy: default_sandbox_policy.clone(),
permission_profile: default_permission_profile.clone(),
model: default_model,
effort: default_effort,
@@ -995,8 +989,8 @@ async fn send_user_turn_with_changes_sends_environment_context() -> anyhow::Resu
.await?;
wait_for_event(&codex, |ev| matches!(ev, EventMsg::TurnComplete(_))).await;
let (sandbox_policy, permission_profile) =
turn_permission_fields(PermissionProfile::Disabled, default_cwd.as_path());
let permission_profile =
turn_permission_profile(PermissionProfile::Disabled, default_cwd.as_path());
codex
.submit(Op::UserTurn {
environments: None,
@@ -1007,7 +1001,6 @@ async fn send_user_turn_with_changes_sends_environment_context() -> anyhow::Resu
cwd: default_cwd.to_path_buf(),
approval_policy: AskForApproval::Never,
approvals_reviewer: None,
sandbox_policy,
permission_profile,
model: "o3".to_string(),
effort: Some(ReasoningEffort::High),
+15 -22
View File
@@ -37,7 +37,7 @@ use core_test_support::skip_if_no_network;
use core_test_support::skip_if_sandbox;
use core_test_support::test_codex::TestCodex;
use core_test_support::test_codex::test_codex;
use core_test_support::test_codex::turn_permission_fields;
use core_test_support::test_codex::turn_permission_profile;
use core_test_support::wait_for_event;
use core_test_support::wait_for_event_match;
use pretty_assertions::assert_eq;
@@ -152,8 +152,8 @@ async fn remote_models_config_context_window_override_clamps_to_max_context_wind
})
.build(&server)
.await?;
let (sandbox_policy, permission_profile) =
turn_permission_fields(config.permissions.permission_profile(), cwd.path());
let permission_profile =
turn_permission_profile(config.permissions.permission_profile(), cwd.path());
codex
.submit(Op::UserTurn {
@@ -165,7 +165,6 @@ async fn remote_models_config_context_window_override_clamps_to_max_context_wind
cwd: cwd.path().to_path_buf(),
approval_policy: config.permissions.approval_policy.value(),
approvals_reviewer: None,
sandbox_policy,
model: requested_model.to_string(),
effort: None,
summary: None,
@@ -232,8 +231,8 @@ async fn remote_models_config_override_above_max_uses_max_context_window() -> Re
})
.build(&server)
.await?;
let (sandbox_policy, permission_profile) =
turn_permission_fields(config.permissions.permission_profile(), cwd.path());
let permission_profile =
turn_permission_profile(config.permissions.permission_profile(), cwd.path());
codex
.submit(Op::UserTurn {
@@ -245,7 +244,6 @@ async fn remote_models_config_override_above_max_uses_max_context_window() -> Re
cwd: cwd.path().to_path_buf(),
approval_policy: config.permissions.approval_policy.value(),
approvals_reviewer: None,
sandbox_policy,
model: requested_model.to_string(),
effort: None,
summary: None,
@@ -311,8 +309,8 @@ async fn remote_models_use_context_window_when_config_override_is_absent() -> Re
})
.build(&server)
.await?;
let (sandbox_policy, permission_profile) =
turn_permission_fields(config.permissions.permission_profile(), cwd.path());
let permission_profile =
turn_permission_profile(config.permissions.permission_profile(), cwd.path());
codex
.submit(Op::UserTurn {
@@ -324,7 +322,6 @@ async fn remote_models_use_context_window_when_config_override_is_absent() -> Re
cwd: cwd.path().to_path_buf(),
approval_policy: config.permissions.approval_policy.value(),
approvals_reviewer: None,
sandbox_policy,
model: requested_model.to_string(),
effort: None,
summary: None,
@@ -403,8 +400,8 @@ async fn remote_models_long_model_slug_is_sent_with_high_reasoning() -> Result<(
})
.build(&server)
.await?;
let (sandbox_policy, permission_profile) =
turn_permission_fields(config.permissions.permission_profile(), cwd.path());
let permission_profile =
turn_permission_profile(config.permissions.permission_profile(), cwd.path());
codex
.submit(Op::UserTurn {
@@ -416,7 +413,6 @@ async fn remote_models_long_model_slug_is_sent_with_high_reasoning() -> Result<(
cwd: cwd.path().to_path_buf(),
approval_policy: config.permissions.approval_policy.value(),
approvals_reviewer: None,
sandbox_policy,
permission_profile,
model: requested_model.to_string(),
effort: None,
@@ -466,8 +462,8 @@ async fn namespaced_model_slug_uses_catalog_metadata_without_fallback_warning()
.with_model(requested_model)
.build(&server)
.await?;
let (sandbox_policy, permission_profile) =
turn_permission_fields(config.permissions.permission_profile(), cwd.path());
let permission_profile =
turn_permission_profile(config.permissions.permission_profile(), cwd.path());
codex
.submit(Op::UserTurn {
@@ -479,7 +475,6 @@ async fn namespaced_model_slug_uses_catalog_metadata_without_fallback_warning()
cwd: cwd.path().to_path_buf(),
approval_policy: config.permissions.approval_policy.value(),
approvals_reviewer: None,
sandbox_policy,
permission_profile,
model: requested_model.to_string(),
effort: None,
@@ -639,8 +634,8 @@ async fn remote_models_remote_model_uses_unified_exec() -> Result<()> {
mount_sse_sequence(&server, responses).await;
let cwd_path = cwd.path().to_path_buf();
let (sandbox_policy, permission_profile) =
turn_permission_fields(PermissionProfile::Disabled, cwd_path.as_path());
let permission_profile =
turn_permission_profile(PermissionProfile::Disabled, cwd_path.as_path());
codex
.submit(Op::UserTurn {
items: vec![UserInput::Text {
@@ -651,7 +646,6 @@ async fn remote_models_remote_model_uses_unified_exec() -> Result<()> {
cwd: cwd_path,
approval_policy: AskForApproval::Never,
approvals_reviewer: None,
sandbox_policy,
permission_profile,
model: REMOTE_MODEL_SLUG.to_string(),
effort: None,
@@ -870,8 +864,8 @@ async fn remote_models_apply_remote_base_instructions() -> Result<()> {
.await?;
let cwd_path = cwd.path().to_path_buf();
let (sandbox_policy, permission_profile) =
turn_permission_fields(PermissionProfile::Disabled, cwd_path.as_path());
let permission_profile =
turn_permission_profile(PermissionProfile::Disabled, cwd_path.as_path());
codex
.submit(Op::UserTurn {
items: vec![UserInput::Text {
@@ -882,7 +876,6 @@ async fn remote_models_apply_remote_base_instructions() -> Result<()> {
cwd: cwd_path,
approval_policy: AskForApproval::Never,
approvals_reviewer: None,
sandbox_policy,
permission_profile,
model: model.to_string(),
effort: None,
@@ -32,7 +32,7 @@ use core_test_support::skip_if_no_network;
use core_test_support::skip_if_sandbox;
use core_test_support::test_codex::TestCodex;
use core_test_support::test_codex::test_codex;
use core_test_support::test_codex::turn_permission_fields;
use core_test_support::test_codex::turn_permission_profile;
use core_test_support::wait_for_event;
use pretty_assertions::assert_eq;
use regex_lite::Regex;
@@ -187,8 +187,7 @@ async fn submit_turn(
permission_profile: RuntimePermissionProfile,
) -> Result<()> {
let session_model = test.session_configured.model.clone();
let (sandbox_policy, permission_profile) =
turn_permission_fields(permission_profile, test.cwd.path());
let permission_profile = turn_permission_profile(permission_profile, test.cwd.path());
test.codex
.submit(Op::UserTurn {
environments: None,
@@ -200,7 +199,6 @@ async fn submit_turn(
cwd: test.cwd.path().to_path_buf(),
approval_policy,
approvals_reviewer: Some(ApprovalsReviewer::User),
sandbox_policy,
permission_profile,
model: session_model,
effort: None,
@@ -29,7 +29,7 @@ use core_test_support::skip_if_no_network;
use core_test_support::skip_if_sandbox;
use core_test_support::test_codex::TestCodex;
use core_test_support::test_codex::test_codex;
use core_test_support::test_codex::turn_permission_fields;
use core_test_support::test_codex::turn_permission_profile;
use core_test_support::wait_for_event;
use pretty_assertions::assert_eq;
use regex_lite::Regex;
@@ -139,8 +139,7 @@ async fn submit_turn(
approvals_reviewer: Option<ApprovalsReviewer>,
) -> Result<()> {
let session_model = test.session_configured.model.clone();
let (sandbox_policy, permission_profile) =
turn_permission_fields(permission_profile, test.config.cwd.as_path());
let permission_profile = turn_permission_profile(permission_profile, test.config.cwd.as_path());
test.codex
.submit(Op::UserTurn {
environments: None,
@@ -152,7 +151,6 @@ async fn submit_turn(
cwd: test.cwd.path().to_path_buf(),
approval_policy,
approvals_reviewer,
sandbox_policy,
permission_profile,
model: session_model,
effort: None,
@@ -24,7 +24,7 @@ use core_test_support::responses::start_mock_server;
use core_test_support::skip_if_no_network;
use core_test_support::test_codex::TestCodex;
use core_test_support::test_codex::test_codex;
use core_test_support::test_codex::turn_permission_fields;
use core_test_support::test_codex::turn_permission_profile;
use core_test_support::wait_for_event;
use core_test_support::wait_for_event_match;
use pretty_assertions::assert_eq;
@@ -129,8 +129,7 @@ async fn request_user_input_round_trip_for_mode(mode: ModeKind) -> anyhow::Resul
let second_mock = responses::mount_sse_once(&server, second_response).await;
let session_model = session_configured.model.clone();
let (sandbox_policy, permission_profile) =
turn_permission_fields(PermissionProfile::Disabled, cwd.path());
let permission_profile = turn_permission_profile(PermissionProfile::Disabled, cwd.path());
codex
.submit(Op::UserTurn {
@@ -143,7 +142,6 @@ async fn request_user_input_round_trip_for_mode(mode: ModeKind) -> anyhow::Resul
cwd: cwd.path().to_path_buf(),
approval_policy: AskForApproval::Never,
approvals_reviewer: None,
sandbox_policy,
permission_profile,
model: session_model,
effort: None,
@@ -251,8 +249,7 @@ where
let session_model = session_configured.model.clone();
let collaboration_mode = build_mode(session_model.clone());
let (sandbox_policy, permission_profile) =
turn_permission_fields(PermissionProfile::Disabled, cwd.path());
let permission_profile = turn_permission_profile(PermissionProfile::Disabled, cwd.path());
codex
.submit(Op::UserTurn {
@@ -265,7 +262,6 @@ where
cwd: cwd.path().to_path_buf(),
approval_policy: AskForApproval::Never,
approvals_reviewer: None,
sandbox_policy,
permission_profile,
model: session_model,
effort: None,
@@ -21,7 +21,7 @@ use core_test_support::responses::start_mock_server;
use core_test_support::skip_if_no_network;
use core_test_support::test_codex::TestCodex;
use core_test_support::test_codex::test_codex;
use core_test_support::test_codex::turn_permission_fields;
use core_test_support::test_codex::turn_permission_profile;
use pretty_assertions::assert_eq;
use serde_json::json;
use std::time::Duration;
@@ -127,8 +127,8 @@ async fn responses_api_parent_and_subagent_requests_include_identity_headers() -
async fn submit_turn_with_timeout(test: &TestCodex, prompt: &str) -> Result<()> {
let session_model = test.session_configured.model.clone();
let cwd = test.config.cwd.to_path_buf();
let (sandbox_policy, permission_profile) =
turn_permission_fields(PermissionProfile::workspace_write(), cwd.as_path());
let permission_profile =
turn_permission_profile(PermissionProfile::workspace_write(), cwd.as_path());
test.codex
.submit(Op::UserTurn {
environments: None,
@@ -140,7 +140,6 @@ async fn submit_turn_with_timeout(test: &TestCodex, prompt: &str) -> Result<()>
cwd,
approval_policy: AskForApproval::OnRequest,
approvals_reviewer: None,
sandbox_policy,
permission_profile,
model: session_model,
effort: None,
+2 -4
View File
@@ -53,7 +53,7 @@ use core_test_support::skip_if_no_network;
use core_test_support::stdio_server_bin;
use core_test_support::test_codex::TestCodex;
use core_test_support::test_codex::test_codex;
use core_test_support::test_codex::turn_permission_fields;
use core_test_support::test_codex::turn_permission_profile;
use core_test_support::wait_for_event;
use core_test_support::wait_for_event_with_timeout;
use reqwest::Client;
@@ -103,8 +103,7 @@ fn read_only_user_turn_with_model(
model: String,
) -> Op {
let cwd = fixture.cwd.path().to_path_buf();
let (sandbox_policy, permission_profile) =
turn_permission_fields(PermissionProfile::read_only(), cwd.as_path());
let permission_profile = turn_permission_profile(PermissionProfile::read_only(), cwd.as_path());
Op::UserTurn {
items: vec![UserInput::Text {
text: text.into(),
@@ -114,7 +113,6 @@ fn read_only_user_turn_with_model(
cwd,
approval_policy: AskForApproval::Never,
approvals_reviewer: None,
sandbox_policy,
permission_profile,
model,
effort: None,
@@ -22,7 +22,7 @@ use core_test_support::responses::start_mock_server;
use core_test_support::skip_if_no_network;
use core_test_support::test_codex::TestCodex;
use core_test_support::test_codex::test_codex;
use core_test_support::test_codex::turn_permission_fields;
use core_test_support::test_codex::turn_permission_profile;
use core_test_support::wait_for_event;
use pretty_assertions::assert_eq;
use wiremock::ResponseTemplate;
@@ -35,8 +35,7 @@ const CYBER_POLICY_MESSAGE: &str =
"This request has been flagged for potentially high-risk cyber activity.";
fn disabled_text_turn(test: &TestCodex, text: &str) -> Op {
let (sandbox_policy, permission_profile) =
turn_permission_fields(PermissionProfile::Disabled, test.cwd_path());
let permission_profile = turn_permission_profile(PermissionProfile::Disabled, test.cwd_path());
Op::UserTurn {
environments: None,
items: vec![UserInput::Text {
@@ -47,7 +46,6 @@ fn disabled_text_turn(test: &TestCodex, text: &str) -> Op {
cwd: test.cwd_path().to_path_buf(),
approval_policy: AskForApproval::Never,
approvals_reviewer: None,
sandbox_policy,
permission_profile,
model: REQUESTED_MODEL.to_string(),
effort: test.config.model_reasoning_effort,
+5 -13
View File
@@ -15,7 +15,7 @@ use core_test_support::responses::mount_sse_sequence;
use core_test_support::responses::sse;
use core_test_support::test_codex::TestCodexHarness;
use core_test_support::test_codex::test_codex;
use core_test_support::test_codex::turn_permission_fields;
use core_test_support::test_codex::turn_permission_profile;
use core_test_support::wait_for_event;
use core_test_support::wait_for_event_match;
use pretty_assertions::assert_eq;
@@ -155,8 +155,7 @@ async fn run_snapshot_command_with_options(
let codex_home = test.home.path().to_path_buf();
let session_model = test.session_configured.model.clone();
let cwd = test.cwd_path().to_path_buf();
let (sandbox_policy, permission_profile) =
turn_permission_fields(PermissionProfile::Disabled, cwd.as_path());
let permission_profile = turn_permission_profile(PermissionProfile::Disabled, cwd.as_path());
codex
.submit(Op::UserTurn {
@@ -169,7 +168,6 @@ async fn run_snapshot_command_with_options(
cwd,
approval_policy: AskForApproval::Never,
approvals_reviewer: None,
sandbox_policy,
permission_profile,
model: session_model,
effort: None,
@@ -250,8 +248,7 @@ async fn run_shell_command_snapshot_with_options(
let codex_home = test.home.path().to_path_buf();
let session_model = test.session_configured.model.clone();
let cwd = test.cwd_path().to_path_buf();
let (sandbox_policy, permission_profile) =
turn_permission_fields(PermissionProfile::Disabled, cwd.as_path());
let permission_profile = turn_permission_profile(PermissionProfile::Disabled, cwd.as_path());
codex
.submit(Op::UserTurn {
@@ -264,7 +261,6 @@ async fn run_shell_command_snapshot_with_options(
cwd,
approval_policy: AskForApproval::Never,
approvals_reviewer: None,
sandbox_policy,
permission_profile,
model: session_model,
effort: None,
@@ -326,8 +322,7 @@ async fn run_tool_turn_on_harness(
let codex = test.codex.clone();
let session_model = test.session_configured.model.clone();
let cwd = test.cwd_path().to_path_buf();
let (sandbox_policy, permission_profile) =
turn_permission_fields(PermissionProfile::Disabled, cwd.as_path());
let permission_profile = turn_permission_profile(PermissionProfile::Disabled, cwd.as_path());
codex
.submit(Op::UserTurn {
environments: None,
@@ -339,7 +334,6 @@ async fn run_tool_turn_on_harness(
cwd,
approval_policy: AskForApproval::Never,
approvals_reviewer: None,
sandbox_policy,
permission_profile,
model: session_model,
effort: None,
@@ -565,8 +559,7 @@ async fn shell_command_snapshot_still_intercepts_apply_patch() -> Result<()> {
mount_sse_sequence(harness.server(), responses).await;
let model = test.session_configured.model.clone();
let (sandbox_policy, permission_profile) =
turn_permission_fields(PermissionProfile::Disabled, cwd.as_path());
let permission_profile = turn_permission_profile(PermissionProfile::Disabled, cwd.as_path());
codex
.submit(Op::UserTurn {
environments: None,
@@ -578,7 +571,6 @@ async fn shell_command_snapshot_still_intercepts_apply_patch() -> Result<()> {
cwd: cwd.clone(),
approval_policy: AskForApproval::Never,
approvals_reviewer: None,
sandbox_policy,
permission_profile,
model,
effort: None,
+2 -4
View File
@@ -13,7 +13,7 @@ use core_test_support::responses::mount_function_call_agent_response;
use core_test_support::responses::start_mock_server;
use core_test_support::skip_if_no_network;
use core_test_support::test_codex::TestCodex;
use core_test_support::test_codex::turn_permission_fields;
use core_test_support::test_codex::turn_permission_profile;
use core_test_support::wait_for_event;
use core_test_support::wait_for_event_match;
use core_test_support::zsh_fork::build_zsh_fork_test;
@@ -43,8 +43,7 @@ async fn submit_turn_with_policies(
approval_policy: AskForApproval,
permission_profile: PermissionProfile,
) -> Result<()> {
let (sandbox_policy, permission_profile) =
turn_permission_fields(permission_profile, test.cwd_path());
let permission_profile = turn_permission_profile(permission_profile, test.cwd_path());
test.codex
.submit(Op::UserTurn {
environments: None,
@@ -56,7 +55,6 @@ async fn submit_turn_with_policies(
cwd: test.cwd_path().to_path_buf(),
approval_policy,
approvals_reviewer: None,
sandbox_policy,
permission_profile,
model: test.session_configured.model.clone(),
effort: None,
+3 -4
View File
@@ -24,7 +24,7 @@ use core_test_support::responses::sse;
use core_test_support::responses::start_mock_server;
use core_test_support::skip_if_no_network;
use core_test_support::test_codex::test_codex;
use core_test_support::test_codex::turn_permission_fields;
use core_test_support::test_codex::turn_permission_profile;
use pretty_assertions::assert_eq;
use std::fs;
use std::path::Path;
@@ -98,8 +98,8 @@ async fn user_turn_includes_skill_instructions() -> Result<()> {
.await;
let session_model = test.session_configured.model.clone();
let (sandbox_policy, permission_profile) =
turn_permission_fields(PermissionProfile::Disabled, test.config.cwd.as_path());
let permission_profile =
turn_permission_profile(PermissionProfile::Disabled, test.config.cwd.as_path());
test.codex
.submit(Op::UserTurn {
environments: None,
@@ -117,7 +117,6 @@ async fn user_turn_includes_skill_instructions() -> Result<()> {
cwd: test.config.cwd.to_path_buf(),
approval_policy: AskForApproval::Never,
approvals_reviewer: None,
sandbox_policy,
permission_profile,
model: session_model,
effort: None,
+2 -4
View File
@@ -26,7 +26,7 @@ use core_test_support::responses::start_mock_server;
use core_test_support::skip_if_no_network;
use core_test_support::stdio_server_bin;
use core_test_support::test_codex::test_codex;
use core_test_support::test_codex::turn_permission_fields;
use core_test_support::test_codex::turn_permission_profile;
use core_test_support::wait_for_event;
use core_test_support::wait_for_event_match;
use pretty_assertions::assert_eq;
@@ -398,8 +398,7 @@ async fn mcp_call_marks_thread_memory_mode_polluted_when_configured() -> Result<
let db = test.codex.state_db().expect("state db enabled");
let thread_id = test.session_configured.session_id;
let cwd = test.cwd_path().to_path_buf();
let (sandbox_policy, permission_profile) =
turn_permission_fields(PermissionProfile::read_only(), cwd.as_path());
let permission_profile = turn_permission_profile(PermissionProfile::read_only(), cwd.as_path());
test.codex
.submit(Op::UserTurn {
@@ -412,7 +411,6 @@ async fn mcp_call_marks_thread_memory_mode_polluted_when_configured() -> Result<
cwd,
approval_policy: AskForApproval::Never,
approvals_reviewer: None,
sandbox_policy,
permission_profile,
model: test.session_configured.model.clone(),
effort: None,
+11 -16
View File
@@ -24,7 +24,7 @@ use core_test_support::responses::start_mock_server;
use core_test_support::skip_if_no_network;
use core_test_support::test_codex::TestCodex;
use core_test_support::test_codex::test_codex;
use core_test_support::test_codex::turn_permission_fields;
use core_test_support::test_codex::turn_permission_profile;
use core_test_support::wait_for_event;
use serde_json::Value;
use serde_json::json;
@@ -77,8 +77,8 @@ async fn shell_tool_executes_command_and_streams_output() -> anyhow::Result<()>
let session_model = session_configured.model.clone();
let cwd_path = cwd.path().to_path_buf();
let (sandbox_policy, permission_profile) =
turn_permission_fields(PermissionProfile::Disabled, cwd_path.as_path());
let permission_profile =
turn_permission_profile(PermissionProfile::Disabled, cwd_path.as_path());
codex
.submit(Op::UserTurn {
@@ -91,7 +91,6 @@ async fn shell_tool_executes_command_and_streams_output() -> anyhow::Result<()>
cwd: cwd_path,
approval_policy: AskForApproval::Never,
approvals_reviewer: None,
sandbox_policy,
permission_profile,
model: session_model,
effort: None,
@@ -153,8 +152,8 @@ async fn update_plan_tool_emits_plan_update_event() -> anyhow::Result<()> {
let session_model = session_configured.model.clone();
let cwd_path = cwd.path().to_path_buf();
let (sandbox_policy, permission_profile) =
turn_permission_fields(PermissionProfile::Disabled, cwd_path.as_path());
let permission_profile =
turn_permission_profile(PermissionProfile::Disabled, cwd_path.as_path());
codex
.submit(Op::UserTurn {
@@ -167,7 +166,6 @@ async fn update_plan_tool_emits_plan_update_event() -> anyhow::Result<()> {
cwd: cwd_path,
approval_policy: AskForApproval::Never,
approvals_reviewer: None,
sandbox_policy,
permission_profile,
model: session_model,
effort: None,
@@ -239,8 +237,8 @@ async fn update_plan_tool_rejects_malformed_payload() -> anyhow::Result<()> {
let session_model = session_configured.model.clone();
let cwd_path = cwd.path().to_path_buf();
let (sandbox_policy, permission_profile) =
turn_permission_fields(PermissionProfile::Disabled, cwd_path.as_path());
let permission_profile =
turn_permission_profile(PermissionProfile::Disabled, cwd_path.as_path());
codex
.submit(Op::UserTurn {
@@ -253,7 +251,6 @@ async fn update_plan_tool_rejects_malformed_payload() -> anyhow::Result<()> {
cwd: cwd_path,
approval_policy: AskForApproval::Never,
approvals_reviewer: None,
sandbox_policy,
permission_profile,
model: session_model,
effort: None,
@@ -340,8 +337,8 @@ async fn apply_patch_tool_executes_and_emits_patch_events() -> anyhow::Result<()
let session_model = session_configured.model.clone();
let cwd_path = cwd.path().to_path_buf();
let (sandbox_policy, permission_profile) =
turn_permission_fields(PermissionProfile::Disabled, cwd_path.as_path());
let permission_profile =
turn_permission_profile(PermissionProfile::Disabled, cwd_path.as_path());
codex
.submit(Op::UserTurn {
@@ -354,7 +351,6 @@ async fn apply_patch_tool_executes_and_emits_patch_events() -> anyhow::Result<()
cwd: cwd_path,
approval_policy: AskForApproval::Never,
approvals_reviewer: None,
sandbox_policy,
permission_profile,
model: session_model,
effort: None,
@@ -449,8 +445,8 @@ async fn apply_patch_reports_parse_diagnostics() -> anyhow::Result<()> {
let session_model = session_configured.model.clone();
let cwd_path = cwd.path().to_path_buf();
let (sandbox_policy, permission_profile) =
turn_permission_fields(PermissionProfile::Disabled, cwd_path.as_path());
let permission_profile =
turn_permission_profile(PermissionProfile::Disabled, cwd_path.as_path());
codex
.submit(Op::UserTurn {
@@ -463,7 +459,6 @@ async fn apply_patch_reports_parse_diagnostics() -> anyhow::Result<()> {
cwd: cwd_path,
approval_policy: AskForApproval::Never,
approvals_reviewer: None,
sandbox_policy,
permission_profile,
model: session_model,
effort: None,
@@ -24,7 +24,7 @@ use core_test_support::streaming_sse::StreamingSseChunk;
use core_test_support::streaming_sse::start_streaming_sse_server;
use core_test_support::test_codex::TestCodex;
use core_test_support::test_codex::test_codex;
use core_test_support::test_codex::turn_permission_fields;
use core_test_support::test_codex::turn_permission_profile;
use core_test_support::wait_for_event;
use pretty_assertions::assert_eq;
use serde_json::Value;
@@ -33,8 +33,7 @@ use tokio::sync::oneshot;
async fn run_turn(test: &TestCodex, prompt: &str) -> anyhow::Result<()> {
let session_model = test.session_configured.model.clone();
let (sandbox_policy, permission_profile) =
turn_permission_fields(PermissionProfile::Disabled, test.cwd.path());
let permission_profile = turn_permission_profile(PermissionProfile::Disabled, test.cwd.path());
test.codex
.submit(Op::UserTurn {
@@ -47,7 +46,6 @@ async fn run_turn(test: &TestCodex, prompt: &str) -> anyhow::Result<()> {
cwd: test.cwd.path().to_path_buf(),
approval_policy: AskForApproval::Never,
approvals_reviewer: None,
sandbox_policy,
permission_profile,
model: session_model,
effort: None,
@@ -355,8 +353,7 @@ async fn shell_tools_start_before_response_completed_when_stream_delayed() -> an
.await?;
let session_model = test.session_configured.model.clone();
let (sandbox_policy, permission_profile) =
turn_permission_fields(PermissionProfile::Disabled, test.cwd.path());
let permission_profile = turn_permission_profile(PermissionProfile::Disabled, test.cwd.path());
test.codex
.submit(Op::UserTurn {
environments: None,
@@ -368,7 +365,6 @@ async fn shell_tools_start_before_response_completed_when_stream_delayed() -> an
cwd: test.cwd.path().to_path_buf(),
approval_policy: AskForApproval::Never,
approvals_reviewer: None,
sandbox_policy,
permission_profile,
model: session_model,
effort: None,
+3 -4
View File
@@ -22,7 +22,7 @@ use core_test_support::responses::start_mock_server;
use core_test_support::skip_if_no_network;
use core_test_support::stdio_server_bin;
use core_test_support::test_codex::test_codex;
use core_test_support::test_codex::turn_permission_fields;
use core_test_support::test_codex::turn_permission_profile;
use core_test_support::wait_for_event;
use serde_json::Value;
use serde_json::json;
@@ -509,8 +509,8 @@ async fn mcp_image_output_preserves_image_and_no_text_summary() -> Result<()> {
});
let fixture = builder.build(&server).await?;
let session_model = fixture.session_configured.model.clone();
let (sandbox_policy, permission_profile) =
turn_permission_fields(PermissionProfile::read_only(), fixture.cwd.path());
let permission_profile =
turn_permission_profile(PermissionProfile::read_only(), fixture.cwd.path());
fixture
.codex
@@ -524,7 +524,6 @@ async fn mcp_image_output_preserves_image_and_no_text_summary() -> Result<()> {
cwd: fixture.cwd.path().to_path_buf(),
approval_policy: AskForApproval::Never,
approvals_reviewer: None,
sandbox_policy,
permission_profile,
model: session_model,
effort: None,
+9 -22
View File
@@ -32,7 +32,7 @@ use core_test_support::skip_if_windows;
use core_test_support::test_codex::TestCodex;
use core_test_support::test_codex::TestCodexHarness;
use core_test_support::test_codex::test_codex;
use core_test_support::test_codex::turn_permission_fields;
use core_test_support::test_codex::turn_permission_profile;
use core_test_support::wait_for_event;
use core_test_support::wait_for_event_match;
use core_test_support::wait_for_event_with_timeout;
@@ -186,8 +186,7 @@ async fn submit_unified_exec_turn(
permission_profile: PermissionProfile,
) -> Result<()> {
let session_model = test.session_configured.model.clone();
let (sandbox_policy, permission_profile) =
turn_permission_fields(permission_profile, test.config.cwd.as_path());
let permission_profile = turn_permission_profile(permission_profile, test.config.cwd.as_path());
test.codex
.submit(Op::UserTurn {
@@ -200,7 +199,6 @@ async fn submit_unified_exec_turn(
cwd: test.config.cwd.to_path_buf(),
approval_policy: AskForApproval::Never,
approvals_reviewer: None,
sandbox_policy,
permission_profile,
model: session_model,
effort: None,
@@ -273,8 +271,7 @@ async fn unified_exec_intercepts_apply_patch_exec_command() -> Result<()> {
let codex = test.codex.clone();
let cwd = test.cwd_path().to_path_buf();
let session_model = test.session_configured.model.clone();
let (sandbox_policy, permission_profile) =
turn_permission_fields(PermissionProfile::Disabled, cwd.as_path());
let permission_profile = turn_permission_profile(PermissionProfile::Disabled, cwd.as_path());
codex
.submit(Op::UserTurn {
@@ -287,7 +284,6 @@ async fn unified_exec_intercepts_apply_patch_exec_command() -> Result<()> {
cwd,
approval_policy: AskForApproval::Never,
approvals_reviewer: None,
sandbox_policy,
permission_profile,
model: session_model,
effort: None,
@@ -2145,8 +2141,7 @@ async fn unified_exec_keeps_long_running_session_after_turn_end() -> Result<()>
mount_sse_sequence(&server, responses).await;
let session_model = session_configured.model.clone();
let (sandbox_policy, permission_profile) =
turn_permission_fields(PermissionProfile::Disabled, cwd.path());
let permission_profile = turn_permission_profile(PermissionProfile::Disabled, cwd.path());
codex
.submit(Op::UserTurn {
@@ -2159,7 +2154,6 @@ async fn unified_exec_keeps_long_running_session_after_turn_end() -> Result<()>
cwd: cwd.path().to_path_buf(),
approval_policy: AskForApproval::Never,
approvals_reviewer: None,
sandbox_policy,
permission_profile,
model: session_model,
effort: None,
@@ -2242,8 +2236,7 @@ async fn unified_exec_interrupt_preserves_long_running_session() -> Result<()> {
mount_sse_sequence(&server, responses).await;
let session_model = session_configured.model.clone();
let (sandbox_policy, permission_profile) =
turn_permission_fields(PermissionProfile::Disabled, cwd.path());
let permission_profile = turn_permission_profile(PermissionProfile::Disabled, cwd.path());
codex
.submit(Op::UserTurn {
@@ -2256,7 +2249,6 @@ async fn unified_exec_interrupt_preserves_long_running_session() -> Result<()> {
cwd: cwd.path().to_path_buf(),
approval_policy: AskForApproval::Never,
approvals_reviewer: None,
sandbox_policy,
permission_profile,
model: session_model,
effort: None,
@@ -2708,8 +2700,7 @@ async fn unified_exec_runs_under_sandbox() -> Result<()> {
let request_log = mount_sse_sequence(&server, responses).await;
let session_model = session_configured.model.clone();
let (sandbox_policy, permission_profile) =
turn_permission_fields(PermissionProfile::read_only(), cwd.path());
let permission_profile = turn_permission_profile(PermissionProfile::read_only(), cwd.path());
codex
.submit(Op::UserTurn {
@@ -2723,7 +2714,6 @@ async fn unified_exec_runs_under_sandbox() -> Result<()> {
approval_policy: AskForApproval::Never,
approvals_reviewer: None,
// Important!
sandbox_policy,
permission_profile,
model: session_model,
effort: None,
@@ -2824,8 +2814,8 @@ async fn unified_exec_enforces_glob_deny_read_policy() -> Result<()> {
let request_log = mount_sse_sequence(&server, responses).await;
let session_model = session_configured.model.clone();
let (sandbox_policy, permission_profile) =
turn_permission_fields(session_configured.permission_profile.clone(), cwd.path());
let permission_profile =
turn_permission_profile(session_configured.permission_profile.clone(), cwd.path());
codex
.submit(Op::UserTurn {
environments: None,
@@ -2837,7 +2827,6 @@ async fn unified_exec_enforces_glob_deny_read_policy() -> Result<()> {
cwd: cwd.path().to_path_buf(),
approval_policy: AskForApproval::Never,
approvals_reviewer: None,
sandbox_policy,
permission_profile,
model: session_model,
effort: None,
@@ -2955,8 +2944,7 @@ async fn unified_exec_python_prompt_under_seatbelt() -> Result<()> {
let request_log = mount_sse_sequence(&server, responses).await;
let session_model = session_configured.model.clone();
let (sandbox_policy, permission_profile) =
turn_permission_fields(PermissionProfile::read_only(), cwd.path());
let permission_profile = turn_permission_profile(PermissionProfile::read_only(), cwd.path());
codex
.submit(Op::UserTurn {
@@ -2969,7 +2957,6 @@ async fn unified_exec_python_prompt_under_seatbelt() -> Result<()> {
cwd: cwd.path().to_path_buf(),
approval_policy: AskForApproval::Never,
approvals_reviewer: None,
sandbox_policy,
permission_profile,
model: session_model,
effort: None,
+2 -4
View File
@@ -22,7 +22,7 @@ use core_test_support::responses::sse;
use core_test_support::responses::start_mock_server;
use core_test_support::skip_if_no_network;
use core_test_support::test_codex::test_codex;
use core_test_support::test_codex::turn_permission_fields;
use core_test_support::test_codex::turn_permission_profile;
use core_test_support::wait_for_event;
use core_test_support::wait_for_event_match;
use core_test_support::wait_for_event_with_timeout;
@@ -169,8 +169,7 @@ async fn user_shell_command_does_not_replace_active_turn() -> anyhow::Result<()>
let mock = responses::mount_sse_sequence(&server, vec![first, second]).await;
let cwd = fixture.cwd.path().to_path_buf();
let (sandbox_policy, permission_profile) =
turn_permission_fields(PermissionProfile::Disabled, cwd.as_path());
let permission_profile = turn_permission_profile(PermissionProfile::Disabled, cwd.as_path());
fixture
.codex
@@ -184,7 +183,6 @@ async fn user_shell_command_does_not_replace_active_turn() -> anyhow::Result<()>
cwd,
approval_policy: AskForApproval::Never,
approvals_reviewer: None,
sandbox_policy,
permission_profile,
model: fixture.session_configured.model.clone(),
effort: None,
+3 -4
View File
@@ -30,7 +30,7 @@ use core_test_support::responses::start_mock_server;
use core_test_support::skip_if_no_network;
use core_test_support::test_codex::TestCodex;
use core_test_support::test_codex::test_codex;
use core_test_support::test_codex::turn_permission_fields;
use core_test_support::test_codex::turn_permission_profile;
use core_test_support::wait_for_event_with_timeout;
use image::DynamicImage;
use image::GenericImageView;
@@ -52,8 +52,8 @@ use wiremock::matchers::body_string_contains;
const VIEW_IMAGE_TURN_COMPLETE_TIMEOUT: Duration = Duration::from_secs(30);
fn disabled_user_turn(test: &TestCodex, items: Vec<UserInput>, model: String) -> Op {
let (sandbox_policy, permission_profile) =
turn_permission_fields(PermissionProfile::Disabled, test.config.cwd.as_path());
let permission_profile =
turn_permission_profile(PermissionProfile::Disabled, test.config.cwd.as_path());
Op::UserTurn {
environments: None,
items,
@@ -61,7 +61,6 @@ fn disabled_user_turn(test: &TestCodex, items: Vec<UserInput>, model: String) ->
cwd: test.config.cwd.to_path_buf(),
approval_policy: AskForApproval::Never,
approvals_reviewer: None,
sandbox_policy,
permission_profile,
model,
effort: None,
@@ -14,7 +14,7 @@ use core_test_support::responses::sse;
use core_test_support::skip_if_no_network;
use core_test_support::test_codex::TestCodex;
use core_test_support::test_codex::test_codex;
use core_test_support::test_codex::turn_permission_fields;
use core_test_support::test_codex::turn_permission_profile;
use pretty_assertions::assert_eq;
use tokio::time::Duration;
use tokio::time::timeout;
@@ -148,8 +148,7 @@ async fn websocket_fallback_hides_first_websocket_retry_stream_error() -> Result
cwd,
..
} = builder.build(&server).await?;
let (sandbox_policy, permission_profile) =
turn_permission_fields(PermissionProfile::Disabled, cwd.path());
let permission_profile = turn_permission_profile(PermissionProfile::Disabled, cwd.path());
codex
.submit(Op::UserTurn {
@@ -162,7 +161,6 @@ async fn websocket_fallback_hides_first_websocket_retry_stream_error() -> Result
cwd: cwd.path().to_path_buf(),
approval_policy: AskForApproval::Never,
approvals_reviewer: None,
sandbox_policy,
permission_profile,
model: session_configured.model.clone(),
effort: None,
-9
View File
@@ -541,15 +541,6 @@ pub enum Op {
/// When omitted, the session keeps the current setting
approvals_reviewer: Option<ApprovalsReviewer>,
/// Deprecated legacy sandbox policy field.
///
/// `permission_profile` is required and is the canonical source for
/// `UserTurn` operations. This field is ignored by core and remains
/// only as a temporary compatibility slot while callers finish
/// migrating.
#[serde(default, skip_serializing_if = "Option::is_none")]
sandbox_policy: Option<SandboxPolicy>,
/// Full permissions profile to use for tool calls such as `local_shell`.
permission_profile: PermissionProfile,
-3
View File
@@ -374,7 +374,6 @@ impl AppCommand {
cwd,
approval_policy,
approvals_reviewer,
sandbox_policy: None,
permission_profile,
model,
effort,
@@ -589,7 +588,6 @@ impl From<Op> for AppCommand {
cwd,
approval_policy,
approvals_reviewer,
sandbox_policy,
permission_profile,
model,
effort,
@@ -620,7 +618,6 @@ impl From<Op> for AppCommand {
cwd,
approval_policy,
approvals_reviewer,
sandbox_policy,
permission_profile,
model,
effort,