This commit is contained in:
Ahmed Ibrahim
2025-12-22 18:06:47 -08:00
parent bed4d268c5
commit d0516eac5d
51 changed files with 744 additions and 465 deletions
+1 -1
View File
@@ -250,7 +250,7 @@ impl TestCodex {
approval_policy: AskForApproval,
sandbox_policy: SandboxPolicy,
) -> Result<()> {
let session_model = self.session_configured.model.clone();
let session_model = self.session_configured.model_family.slug.clone();
self.codex
.submit(Op::UserTurn {
items: vec![UserInput::Text {
+7 -7
View File
@@ -297,7 +297,7 @@ async fn apply_patch_cli_move_without_content_change_has_no_turn_diff(
let call_id = "apply-move-no-change";
mount_apply_patch(&harness, call_id, patch, "ok", model_output).await;
let model = test.session_configured.model.clone();
let model = test.session_configured.model_family.slug.clone();
codex
.submit(Op::UserTurn {
items: vec![UserInput::Text {
@@ -883,7 +883,7 @@ async fn apply_patch_shell_command_heredoc_with_cd_emits_turn_diff() -> Result<(
];
mount_sse_sequence(harness.server(), bodies).await;
let model = test.session_configured.model.clone();
let model = test.session_configured.model_family.slug.clone();
codex
.submit(Op::UserTurn {
items: vec![UserInput::Text {
@@ -960,7 +960,7 @@ async fn apply_patch_shell_command_failure_propagates_error_and_skips_diff() ->
];
mount_sse_sequence(harness.server(), bodies).await;
let model = test.session_configured.model.clone();
let model = test.session_configured.model_family.slug.clone();
codex
.submit(Op::UserTurn {
items: vec![UserInput::Text {
@@ -1107,7 +1107,7 @@ async fn apply_patch_emits_turn_diff_event_with_unified_diff(
let patch = format!("*** Begin Patch\n*** Add File: {file}\n+hello\n*** End Patch\n");
mount_apply_patch(&harness, call_id, patch.as_str(), "ok", model_output).await;
let model = test.session_configured.model.clone();
let model = test.session_configured.model_family.slug.clone();
codex
.submit(Op::UserTurn {
items: vec![UserInput::Text {
@@ -1167,7 +1167,7 @@ async fn apply_patch_turn_diff_for_rename_with_content_change(
let patch = "*** Begin Patch\n*** Update File: old.txt\n*** Move to: new.txt\n@@\n-old\n+new\n*** End Patch";
mount_apply_patch(&harness, call_id, patch, "ok", model_output).await;
let model = test.session_configured.model.clone();
let model = test.session_configured.model_family.slug.clone();
codex
.submit(Op::UserTurn {
items: vec![UserInput::Text {
@@ -1235,7 +1235,7 @@ async fn apply_patch_aggregates_diff_across_multiple_tool_calls() -> Result<()>
]);
mount_sse_sequence(harness.server(), vec![s1, s2, s3]).await;
let model = test.session_configured.model.clone();
let model = test.session_configured.model_family.slug.clone();
codex
.submit(Op::UserTurn {
items: vec![UserInput::Text {
@@ -1303,7 +1303,7 @@ async fn apply_patch_aggregates_diff_preserves_success_after_failure() -> Result
];
mount_sse_sequence(harness.server(), responses).await;
let model = test.session_configured.model.clone();
let model = test.session_configured.model_family.slug.clone();
codex
.submit(Op::UserTurn {
items: vec![UserInput::Text {
+1 -1
View File
@@ -486,7 +486,7 @@ async fn submit_turn(
approval_policy: AskForApproval,
sandbox_policy: SandboxPolicy,
) -> Result<()> {
let session_model = test.session_configured.model.clone();
let session_model = test.session_configured.model_family.slug.clone();
test.codex
.submit(Op::UserTurn {
+1 -1
View File
@@ -103,7 +103,7 @@ async fn remote_compact_replaces_history_for_followups() -> Result<()> {
let compact_body = compact_request.body_json();
assert_eq!(
compact_body.get("model").and_then(|v| v.as_str()),
Some(harness.test().session_configured.model.as_str())
Some(harness.test().session_configured.model_family.slug.as_str())
);
let compact_body_text = compact_body.to_string();
assert!(
+1 -1
View File
@@ -67,7 +67,7 @@ async fn execpolicy_blocks_shell_invocation() -> Result<()> {
)
.await;
let session_model = test.session_configured.model.clone();
let session_model = test.session_configured.model_family.slug.clone();
test.codex
.submit(Op::UserTurn {
items: vec![UserInput::Text {
+2 -2
View File
@@ -606,7 +606,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.approval_policy.value();
let default_sandbox_policy = config.sandbox_policy.get();
let default_model = session_configured.model;
let default_model = session_configured.model_family.slug;
let default_effort = config.model_reasoning_effort;
let default_summary = config.model_reasoning_summary;
@@ -696,7 +696,7 @@ async fn send_user_turn_with_changes_sends_environment_context() -> anyhow::Resu
let default_cwd = config.cwd.clone();
let default_approval_policy = config.approval_policy.value();
let default_sandbox_policy = config.sandbox_policy.get();
let default_model = session_configured.model;
let default_model = session_configured.model_family.slug;
let default_effort = config.model_reasoning_effort;
let default_summary = config.model_reasoning_summary;
+6 -6
View File
@@ -101,7 +101,7 @@ async fn stdio_server_round_trip() -> anyhow::Result<()> {
})
.build(&server)
.await?;
let session_model = fixture.session_configured.model.clone();
let session_model = fixture.session_configured.model_family.slug.clone();
fixture
.codex
@@ -238,7 +238,7 @@ async fn stdio_image_responses_round_trip() -> anyhow::Result<()> {
})
.build(&server)
.await?;
let session_model = fixture.session_configured.model.clone();
let session_model = fixture.session_configured.model_family.slug.clone();
fixture
.codex
@@ -433,7 +433,7 @@ async fn stdio_image_completions_round_trip() -> anyhow::Result<()> {
})
.build(&server)
.await?;
let session_model = fixture.session_configured.model.clone();
let session_model = fixture.session_configured.model_family.slug.clone();
fixture
.codex
@@ -576,7 +576,7 @@ async fn stdio_server_propagates_whitelisted_env_vars() -> anyhow::Result<()> {
})
.build(&server)
.await?;
let session_model = fixture.session_configured.model.clone();
let session_model = fixture.session_configured.model_family.slug.clone();
fixture
.codex
@@ -724,7 +724,7 @@ async fn streamable_http_tool_call_round_trip() -> anyhow::Result<()> {
})
.build(&server)
.await?;
let session_model = fixture.session_configured.model.clone();
let session_model = fixture.session_configured.model_family.slug.clone();
fixture
.codex
@@ -904,7 +904,7 @@ async fn streamable_http_with_oauth_round_trip() -> anyhow::Result<()> {
})
.build(&server)
.await?;
let session_model = fixture.session_configured.model.clone();
let session_model = fixture.session_configured.model_family.slug.clone();
fixture
.codex
+3 -3
View File
@@ -64,7 +64,7 @@ async fn run_snapshot_command(command: &str) -> Result<SnapshotRun> {
let test = harness.test();
let codex = test.codex.clone();
let codex_home = test.home.path().to_path_buf();
let session_model = test.session_configured.model.clone();
let session_model = test.session_configured.model_family.slug.clone();
let cwd = test.cwd_path().to_path_buf();
codex
@@ -140,7 +140,7 @@ async fn run_shell_command_snapshot(command: &str) -> Result<SnapshotRun> {
let test = harness.test();
let codex = test.codex.clone();
let codex_home = test.home.path().to_path_buf();
let session_model = test.session_configured.model.clone();
let session_model = test.session_configured.model_family.slug.clone();
let cwd = test.cwd_path().to_path_buf();
codex
@@ -279,7 +279,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 model = test.session_configured.model_family.slug.clone();
codex
.submit(Op::UserTurn {
items: vec![UserInput::Text {
+1 -1
View File
@@ -63,7 +63,7 @@ async fn user_turn_includes_skill_instructions() -> Result<()> {
)
.await;
let session_model = test.session_configured.model.clone();
let session_model = test.session_configured.model_family.slug.clone();
test.codex
.submit(Op::UserTurn {
items: vec![
+5 -5
View File
@@ -76,7 +76,7 @@ async fn shell_tool_executes_command_and_streams_output() -> anyhow::Result<()>
]);
let second_mock = responses::mount_sse_once(&server, second_response).await;
let session_model = session_configured.model.clone();
let session_model = session_configured.model_family.slug.clone();
codex
.submit(Op::UserTurn {
@@ -142,7 +142,7 @@ async fn update_plan_tool_emits_plan_update_event() -> anyhow::Result<()> {
]);
let second_mock = responses::mount_sse_once(&server, second_response).await;
let session_model = session_configured.model.clone();
let session_model = session_configured.model_family.slug.clone();
codex
.submit(Op::UserTurn {
@@ -218,7 +218,7 @@ async fn update_plan_tool_rejects_malformed_payload() -> anyhow::Result<()> {
]);
let second_mock = responses::mount_sse_once(&server, second_response).await;
let session_model = session_configured.model.clone();
let session_model = session_configured.model_family.slug.clone();
codex
.submit(Op::UserTurn {
@@ -306,7 +306,7 @@ async fn apply_patch_tool_executes_and_emits_patch_events() -> anyhow::Result<()
]);
let second_mock = responses::mount_sse_once(&server, second_response).await;
let session_model = session_configured.model.clone();
let session_model = session_configured.model_family.slug.clone();
codex
.submit(Op::UserTurn {
@@ -402,7 +402,7 @@ async fn apply_patch_reports_parse_diagnostics() -> anyhow::Result<()> {
]);
let second_mock = responses::mount_sse_once(&server, second_response).await;
let session_model = session_configured.model.clone();
let session_model = session_configured.model_family.slug.clone();
codex
.submit(Op::UserTurn {
@@ -32,7 +32,7 @@ use serde_json::json;
use tokio::sync::oneshot;
async fn run_turn(test: &TestCodex, prompt: &str) -> anyhow::Result<()> {
let session_model = test.session_configured.model.clone();
let session_model = test.session_configured.model_family.slug.clone();
test.codex
.submit(Op::UserTurn {
@@ -345,7 +345,7 @@ async fn shell_tools_start_before_response_completed_when_stream_delayed() -> an
.build_with_streaming_server(&streaming_server)
.await?;
let session_model = test.session_configured.model.clone();
let session_model = test.session_configured.model_family.slug.clone();
test.codex
.submit(Op::UserTurn {
items: vec![UserInput::Text {
+1 -1
View File
@@ -531,7 +531,7 @@ 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 session_model = fixture.session_configured.model_family.slug.clone();
fixture
.codex
+23 -23
View File
@@ -194,7 +194,7 @@ async fn unified_exec_intercepts_apply_patch_exec_command() -> Result<()> {
let test = harness.test();
let codex = test.codex.clone();
let cwd = test.cwd_path().to_path_buf();
let session_model = test.session_configured.model.clone();
let session_model = test.session_configured.model_family.slug.clone();
codex
.submit(Op::UserTurn {
@@ -320,7 +320,7 @@ async fn unified_exec_emits_exec_command_begin_event() -> Result<()> {
];
mount_sse_sequence(&server, responses).await;
let session_model = session_configured.model.clone();
let session_model = session_configured.model_family.slug.clone();
codex
.submit(Op::UserTurn {
@@ -395,7 +395,7 @@ async fn unified_exec_resolves_relative_workdir() -> Result<()> {
];
mount_sse_sequence(&server, responses).await;
let session_model = session_configured.model.clone();
let session_model = session_configured.model_family.slug.clone();
codex
.submit(Op::UserTurn {
@@ -473,7 +473,7 @@ async fn unified_exec_respects_workdir_override() -> Result<()> {
];
mount_sse_sequence(&server, responses).await;
let session_model = session_configured.model.clone();
let session_model = session_configured.model_family.slug.clone();
codex
.submit(Op::UserTurn {
@@ -563,7 +563,7 @@ async fn unified_exec_emits_exec_command_end_event() -> Result<()> {
];
mount_sse_sequence(&server, responses).await;
let session_model = session_configured.model.clone();
let session_model = session_configured.model_family.slug.clone();
codex
.submit(Op::UserTurn {
@@ -635,7 +635,7 @@ async fn unified_exec_emits_output_delta_for_exec_command() -> Result<()> {
];
mount_sse_sequence(&server, responses).await;
let session_model = session_configured.model.clone();
let session_model = session_configured.model_family.slug.clone();
codex
.submit(Op::UserTurn {
@@ -708,7 +708,7 @@ async fn unified_exec_full_lifecycle_with_background_end_event() -> Result<()> {
];
mount_sse_sequence(&server, responses).await;
let session_model = session_configured.model.clone();
let session_model = session_configured.model_family.slug.clone();
codex
.submit(Op::UserTurn {
@@ -834,7 +834,7 @@ async fn unified_exec_emits_terminal_interaction_for_write_stdin() -> Result<()>
];
mount_sse_sequence(&server, responses).await;
let session_model = session_configured.model.clone();
let session_model = session_configured.model_family.slug.clone();
codex
.submit(Op::UserTurn {
@@ -967,7 +967,7 @@ async fn unified_exec_terminal_interaction_captures_delayed_output() -> Result<(
];
mount_sse_sequence(&server, responses).await;
let session_model = session_configured.model.clone();
let session_model = session_configured.model_family.slug.clone();
codex
.submit(Op::UserTurn {
@@ -1124,7 +1124,7 @@ async fn unified_exec_emits_one_begin_and_one_end_event() -> Result<()> {
];
mount_sse_sequence(&server, responses).await;
let session_model = session_configured.model.clone();
let session_model = session_configured.model_family.slug.clone();
codex
.submit(Op::UserTurn {
@@ -1219,7 +1219,7 @@ async fn exec_command_reports_chunk_and_exit_metadata() -> Result<()> {
];
mount_sse_sequence(&server, responses).await;
let session_model = session_configured.model.clone();
let session_model = session_configured.model_family.slug.clone();
codex
.submit(Op::UserTurn {
@@ -1323,7 +1323,7 @@ async fn unified_exec_respects_early_exit_notifications() -> Result<()> {
];
mount_sse_sequence(&server, responses).await;
let session_model = session_configured.model.clone();
let session_model = session_configured.model_family.slug.clone();
codex
.submit(Op::UserTurn {
@@ -1448,7 +1448,7 @@ async fn write_stdin_returns_exit_metadata_and_clears_session() -> Result<()> {
];
mount_sse_sequence(&server, responses).await;
let session_model = session_configured.model.clone();
let session_model = session_configured.model_family.slug.clone();
codex
.submit(Op::UserTurn {
@@ -1610,7 +1610,7 @@ async fn unified_exec_emits_end_event_when_session_dies_via_stdin() -> Result<()
];
mount_sse_sequence(&server, responses).await;
let session_model = session_configured.model.clone();
let session_model = session_configured.model_family.slug.clone();
codex
.submit(Op::UserTurn {
@@ -1684,7 +1684,7 @@ async fn unified_exec_closes_long_running_session_at_turn_end() -> Result<()> {
];
mount_sse_sequence(&server, responses).await;
let session_model = session_configured.model.clone();
let session_model = session_configured.model_family.slug.clone();
codex
.submit(Op::UserTurn {
@@ -1802,7 +1802,7 @@ async fn unified_exec_reuses_session_via_stdin() -> Result<()> {
];
mount_sse_sequence(&server, responses).await;
let session_model = session_configured.model.clone();
let session_model = session_configured.model_family.slug.clone();
codex
.submit(Op::UserTurn {
@@ -1931,7 +1931,7 @@ PY
];
mount_sse_sequence(&server, responses).await;
let session_model = session_configured.model.clone();
let session_model = session_configured.model_family.slug.clone();
codex
.submit(Op::UserTurn {
@@ -2040,7 +2040,7 @@ async fn unified_exec_timeout_and_followup_poll() -> Result<()> {
];
mount_sse_sequence(&server, responses).await;
let session_model = session_configured.model.clone();
let session_model = session_configured.model_family.slug.clone();
codex
.submit(Op::UserTurn {
@@ -2131,7 +2131,7 @@ PY
];
mount_sse_sequence(&server, responses).await;
let session_model = session_configured.model.clone();
let session_model = session_configured.model_family.slug.clone();
codex
.submit(Op::UserTurn {
@@ -2207,7 +2207,7 @@ async fn unified_exec_runs_under_sandbox() -> Result<()> {
];
mount_sse_sequence(&server, responses).await;
let session_model = session_configured.model.clone();
let session_model = session_configured.model_family.slug.clone();
codex
.submit(Op::UserTurn {
@@ -2306,7 +2306,7 @@ async fn unified_exec_python_prompt_under_seatbelt() -> Result<()> {
];
mount_sse_sequence(&server, responses).await;
let session_model = session_configured.model.clone();
let session_model = session_configured.model_family.slug.clone();
codex
.submit(Op::UserTurn {
@@ -2396,7 +2396,7 @@ async fn unified_exec_runs_on_all_platforms() -> Result<()> {
];
mount_sse_sequence(&server, responses).await;
let session_model = session_configured.model.clone();
let session_model = session_configured.model_family.slug.clone();
codex
.submit(Op::UserTurn {
@@ -2524,7 +2524,7 @@ async fn unified_exec_prunes_exited_sessions_first() -> Result<()> {
let response_mock =
mount_sse_sequence(&server, vec![first_response, completion_response]).await;
let session_model = session_configured.model.clone();
let session_model = session_configured.model_family.slug.clone();
codex
.submit(Op::UserTurn {
+6 -6
View File
@@ -72,7 +72,7 @@ async fn user_turn_with_local_image_attaches_image() -> anyhow::Result<()> {
]);
let mock = responses::mount_sse_once(&server, response).await;
let session_model = session_configured.model.clone();
let session_model = session_configured.model_family.slug.clone();
codex
.submit(Op::UserTurn {
@@ -163,7 +163,7 @@ async fn view_image_tool_attaches_local_image() -> anyhow::Result<()> {
]);
let mock = responses::mount_sse_once(&server, second_response).await;
let session_model = session_configured.model.clone();
let session_model = session_configured.model_family.slug.clone();
codex
.submit(Op::UserTurn {
@@ -273,7 +273,7 @@ async fn view_image_tool_errors_when_path_is_directory() -> anyhow::Result<()> {
]);
let mock = responses::mount_sse_once(&server, second_response).await;
let session_model = session_configured.model.clone();
let session_model = session_configured.model_family.slug.clone();
codex
.submit(Op::UserTurn {
@@ -345,7 +345,7 @@ async fn view_image_tool_placeholder_for_non_image_files() -> anyhow::Result<()>
]);
let mock = responses::mount_sse_once(&server, second_response).await;
let session_model = session_configured.model.clone();
let session_model = session_configured.model_family.slug.clone();
codex
.submit(Op::UserTurn {
@@ -436,7 +436,7 @@ async fn view_image_tool_errors_when_file_missing() -> anyhow::Result<()> {
]);
let mock = responses::mount_sse_once(&server, second_response).await;
let session_model = session_configured.model.clone();
let session_model = session_configured.model_family.slug.clone();
codex
.submit(Op::UserTurn {
@@ -517,7 +517,7 @@ async fn replaces_invalid_local_image_after_bad_request() -> anyhow::Result<()>
let image = ImageBuffer::from_pixel(1024, 512, Rgba([10u8, 20, 30, 255]));
image.save(&abs_path)?;
let session_model = session_configured.model.clone();
let session_model = session_configured.model_family.slug.clone();
codex
.submit(Op::UserTurn {