[codex-analytics] add queued submission metadata

This commit is contained in:
rhan-oai
2026-04-06 21:40:45 -07:00
parent d6753245d6
commit b09d3612d3
58 changed files with 586 additions and 7 deletions
+40 -2
View File
@@ -52,6 +52,7 @@ use codex_analytics::AppInvocation;
use codex_analytics::InvocationType;
use codex_analytics::SubAgentThreadStartedInput;
use codex_analytics::TurnResolvedConfigFact;
use codex_analytics::TurnSubmissionType;
use codex_analytics::build_track_events_context;
use codex_app_server_protocol::McpServerElicitationRequest;
use codex_app_server_protocol::McpServerElicitationRequestParams;
@@ -118,6 +119,7 @@ use codex_protocol::protocol::ReviewRequest;
use codex_protocol::protocol::RolloutItem;
use codex_protocol::protocol::SessionSource;
use codex_protocol::protocol::SubAgentSource;
use codex_protocol::protocol::SubmissionType;
use codex_protocol::protocol::TurnAbortReason;
use codex_protocol::protocol::TurnContextItem;
use codex_protocol::protocol::TurnContextNetworkItem;
@@ -894,6 +896,7 @@ pub(crate) struct TurnContext {
pub(crate) current_date: Option<String>,
pub(crate) timezone: Option<String>,
pub(crate) app_server_client_name: Option<String>,
pub(crate) submission_type: Option<SubmissionType>,
pub(crate) developer_instructions: Option<String>,
pub(crate) compact_prompt: Option<String>,
pub(crate) user_instructions: Option<String>,
@@ -1012,6 +1015,7 @@ impl TurnContext {
current_date: self.current_date.clone(),
timezone: self.timezone.clone(),
app_server_client_name: self.app_server_client_name.clone(),
submission_type: self.submission_type,
developer_instructions: self.developer_instructions.clone(),
compact_prompt: self.compact_prompt.clone(),
user_instructions: self.user_instructions.clone(),
@@ -1097,6 +1101,13 @@ impl TurnContext {
}
}
fn turn_submission_type(submission_type: SubmissionType) -> TurnSubmissionType {
match submission_type {
SubmissionType::Prompt => TurnSubmissionType::Default,
SubmissionType::PromptQueued => TurnSubmissionType::Queued,
}
}
fn local_time_context() -> (String, String) {
match iana_time_zone::get_timezone() {
Ok(timezone) => (Local::now().format("%Y-%m-%d").to_string(), timezone),
@@ -1270,6 +1281,7 @@ pub(crate) struct SessionSettingsUpdate {
pub(crate) personality: Option<Personality>,
pub(crate) app_server_client_name: Option<String>,
pub(crate) app_server_client_version: Option<String>,
pub(crate) submission_type: Option<SubmissionType>,
}
pub(crate) struct AppServerClientMetadata {
@@ -1438,6 +1450,7 @@ impl Session {
network: Option<NetworkProxy>,
environment: Option<Arc<Environment>>,
sub_id: String,
submission_type: Option<SubmissionType>,
js_repl: Arc<JsReplHandle>,
skills_outcome: Arc<SkillLoadOutcome>,
) -> TurnContext {
@@ -1502,6 +1515,7 @@ impl Session {
current_date: Some(current_date),
timezone: Some(timezone),
app_server_client_name: session_configuration.app_server_client_name.clone(),
submission_type,
developer_instructions: session_configuration.developer_instructions.clone(),
compact_prompt: session_configuration.compact_prompt.clone(),
user_instructions: session_configuration.user_instructions.clone(),
@@ -2512,6 +2526,7 @@ impl Session {
sub_id,
session_configuration,
updates.final_output_json_schema,
updates.submission_type,
sandbox_policy_changed,
)
.await)
@@ -2522,6 +2537,7 @@ impl Session {
sub_id: String,
session_configuration: SessionConfiguration,
final_output_json_schema: Option<Option<Value>>,
submission_type: Option<SubmissionType>,
sandbox_policy_changed: bool,
) -> Arc<TurnContext> {
let per_turn_config = Self::build_per_turn_config(&session_configuration);
@@ -2587,6 +2603,7 @@ impl Session {
.map(StartedNetworkProxy::proxy),
self.services.environment.clone(),
sub_id,
submission_type,
Arc::clone(&self.js_repl),
skills_outcome,
);
@@ -2699,6 +2716,7 @@ impl Session {
sub_id,
session_configuration,
/*final_output_json_schema*/ None,
/*submission_type*/ None,
/*sandbox_policy_changed*/ false,
)
.await
@@ -4633,7 +4651,7 @@ async fn submission_loop(sess: Arc<Session>, config: Arc<Config>, rx_sub: Receiv
.await;
false
}
Op::UserInput { .. } | Op::UserTurn { .. } => {
Op::UserInput { .. } | Op::UserInputWithMetadata { .. } | Op::UserTurn { .. } => {
handlers::user_input_or_turn(&sess, sub.id.clone(), sub.op).await;
false
}
@@ -4891,6 +4909,7 @@ mod handlers {
items,
collaboration_mode,
personality,
submission_type,
} => {
let collaboration_mode = collaboration_mode.or_else(|| {
Some(CollaborationMode {
@@ -4917,9 +4936,22 @@ mod handlers {
personality,
app_server_client_name: None,
app_server_client_version: None,
submission_type,
},
)
}
Op::UserInputWithMetadata {
items,
final_output_json_schema,
submission_type,
} => (
items,
SessionSettingsUpdate {
final_output_json_schema: Some(final_output_json_schema),
submission_type,
..Default::default()
},
),
Op::UserInput {
items,
final_output_json_schema,
@@ -5733,6 +5765,7 @@ async fn spawn_review_thread(
current_date: parent_turn_context.current_date.clone(),
timezone: parent_turn_context.timezone.clone(),
app_server_client_name: parent_turn_context.app_server_client_name.clone(),
submission_type: None,
developer_instructions: None,
user_instructions: None,
compact_prompt: parent_turn_context.compact_prompt.clone(),
@@ -6367,7 +6400,12 @@ async fn track_turn_resolved_config_analytics(
matches!(item, UserInput::Image { .. } | UserInput::LocalImage { .. })
})
.count(),
submission_type: None,
submission_type: Some(
turn_context
.submission_type
.map(turn_submission_type)
.unwrap_or(TurnSubmissionType::Default),
),
model: turn_context.model_info.slug.clone(),
model_provider: turn_context.config.model_provider_id.clone(),
sandbox_policy: turn_context.sandbox_policy.get().clone(),
+3
View File
@@ -2806,6 +2806,7 @@ pub(crate) async fn make_session_and_context() -> (Session, TurnContext) {
/*network*/ None,
Some(environment),
"turn_id".to_string(),
/*submission_type*/ None,
Arc::clone(&js_repl),
skills_outcome,
);
@@ -3174,6 +3175,7 @@ async fn user_turn_updates_approvals_reviewer() {
final_output_json_schema: None,
collaboration_mode: None,
personality: config.personality,
submission_type: None,
},
)
.await;
@@ -3646,6 +3648,7 @@ pub(crate) async fn make_session_and_context_with_dynamic_tools_and_rx(
/*network*/ None,
Some(environment),
"turn_id".to_string(),
/*submission_type*/ None,
Arc::clone(&js_repl),
skills_outcome,
));
@@ -523,6 +523,7 @@ async fn run_review_on_session(
final_output_json_schema: Some(params.schema.clone()),
collaboration_mode: None,
personality: params.personality,
submission_type: None,
})
.await
}),
+1
View File
@@ -759,6 +759,7 @@ impl TestCodex {
service_tier,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -368,6 +368,7 @@ async fn apply_patch_cli_move_without_content_change_has_no_turn_diff(
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -978,6 +979,7 @@ async fn apply_patch_shell_command_heredoc_with_cd_emits_turn_diff() -> Result<(
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -1060,6 +1062,7 @@ async fn apply_patch_shell_command_failure_propagates_error_and_skips_diff() ->
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -1212,6 +1215,7 @@ async fn apply_patch_emits_turn_diff_event_with_unified_diff(
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -1277,6 +1281,7 @@ async fn apply_patch_turn_diff_for_rename_with_content_change(
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -1350,6 +1355,7 @@ async fn apply_patch_aggregates_diff_across_multiple_tool_calls() -> Result<()>
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -1423,6 +1429,7 @@ async fn apply_patch_aggregates_diff_preserves_success_after_failure() -> Result
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
+1
View File
@@ -597,6 +597,7 @@ async fn submit_turn(
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
+2
View File
@@ -1668,6 +1668,7 @@ async fn user_turn_collaboration_mode_overrides_model_and_effort() -> anyhow::Re
collaboration_mode: Some(collaboration_mode),
final_output_json_schema: None,
personality: None,
submission_type: None,
})
.await?;
@@ -1782,6 +1783,7 @@ async fn user_turn_explicit_reasoning_summary_overrides_model_catalog_default()
collaboration_mode: None,
final_output_json_schema: None,
personality: None,
submission_type: None,
})
.await
.unwrap();
+1
View File
@@ -2368,6 +2368,7 @@ text(
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -191,6 +191,7 @@ async fn collaboration_instructions_added_on_user_turn() -> Result<()> {
collaboration_mode: Some(collaboration_mode),
final_output_json_schema: None,
personality: None,
submission_type: None,
})
.await?;
wait_for_event(&test.codex, |ev| matches!(ev, EventMsg::TurnComplete(_))).await;
@@ -307,6 +308,7 @@ async fn user_turn_overrides_collaboration_instructions_after_override() -> Resu
collaboration_mode: Some(turn_mode),
final_output_json_schema: None,
personality: None,
submission_type: None,
})
.await?;
wait_for_event(&test.codex, |ev| matches!(ev, EventMsg::TurnComplete(_))).await;
+7
View File
@@ -1668,6 +1668,7 @@ async fn auto_compact_runs_after_resume_when_token_usage_is_over_limit() {
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await
.unwrap();
@@ -1759,6 +1760,7 @@ async fn pre_sampling_compact_runs_on_switch_to_smaller_context_model() {
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await
.expect("submit first user turn");
@@ -1784,6 +1786,7 @@ async fn pre_sampling_compact_runs_on_switch_to_smaller_context_model() {
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await
.expect("submit second user turn");
@@ -1895,6 +1898,7 @@ async fn pre_sampling_compact_runs_after_resume_and_switch_to_smaller_model() {
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await
.expect("submit pre-resume turn");
@@ -1944,6 +1948,7 @@ async fn pre_sampling_compact_runs_after_resume_and_switch_to_smaller_model() {
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await
.expect("submit resumed user turn");
@@ -3149,6 +3154,7 @@ async fn snapshot_request_shape_pre_turn_compaction_strips_incoming_model_switch
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await
.expect("submit first user turn");
@@ -3174,6 +3180,7 @@ async fn snapshot_request_shape_pre_turn_compaction_strips_incoming_model_switch
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await
.expect("submit second user turn");
+2
View File
@@ -59,6 +59,7 @@ async fn submit_user_turn(
service_tier: None,
collaboration_mode,
personality: None,
submission_type: None,
})
.await?;
Ok(())
@@ -140,6 +141,7 @@ async fn execpolicy_blocks_shell_invocation() -> Result<()> {
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -130,6 +130,7 @@ async fn copy_paste_local_image_persists_rollout_request_shape() -> anyhow::Resu
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -214,6 +215,7 @@ async fn drag_drop_image_persists_rollout_request_shape() -> anyhow::Result<()>
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
+5
View File
@@ -530,6 +530,7 @@ async fn plan_mode_emits_plan_item_from_proposed_plan_block() -> anyhow::Result<
service_tier: None,
collaboration_mode: Some(collaboration_mode),
personality: None,
submission_type: None,
})
.await?;
@@ -607,6 +608,7 @@ async fn plan_mode_strips_plan_from_agent_messages() -> anyhow::Result<()> {
service_tier: None,
collaboration_mode: Some(collaboration_mode),
personality: None,
submission_type: None,
})
.await?;
@@ -716,6 +718,7 @@ async fn plan_mode_streaming_citations_are_stripped_across_added_deltas_and_done
service_tier: None,
collaboration_mode: Some(collaboration_mode),
personality: None,
submission_type: None,
})
.await?;
@@ -903,6 +906,7 @@ async fn plan_mode_streaming_proposed_plan_tag_split_across_added_and_delta_is_p
service_tier: None,
collaboration_mode: Some(collaboration_mode),
personality: None,
submission_type: None,
})
.await?;
@@ -1017,6 +1021,7 @@ async fn plan_mode_handles_missing_plan_close_tag() -> anyhow::Result<()> {
service_tier: None,
collaboration_mode: Some(collaboration_mode),
personality: None,
submission_type: None,
})
.await?;
+1
View File
@@ -88,6 +88,7 @@ async fn codex_returns_json_result(model: String) -> anyhow::Result<()> {
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
+1
View File
@@ -69,6 +69,7 @@ async fn submit_skill_turn(test: &TestCodex, skill_path: PathBuf, prompt: &str)
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -134,6 +134,7 @@ async fn model_change_appends_model_instructions_developer_message() -> Result<(
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
wait_for_event(&test.codex, |ev| matches!(ev, EventMsg::TurnComplete(_))).await;
@@ -171,6 +172,7 @@ async fn model_change_appends_model_instructions_developer_message() -> Result<(
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
wait_for_event(&test.codex, |ev| matches!(ev, EventMsg::TurnComplete(_))).await;
@@ -231,6 +233,7 @@ async fn model_and_personality_change_only_appends_model_instructions() -> Resul
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
wait_for_event(&test.codex, |ev| matches!(ev, EventMsg::TurnComplete(_))).await;
@@ -268,6 +271,7 @@ async fn model_and_personality_change_only_appends_model_instructions() -> Resul
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
wait_for_event(&test.codex, |ev| matches!(ev, EventMsg::TurnComplete(_))).await;
@@ -410,6 +414,7 @@ async fn model_change_from_image_to_text_strips_prior_image_content() -> Result<
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
wait_for_event(&test.codex, |ev| matches!(ev, EventMsg::TurnComplete(_))).await;
@@ -431,6 +436,7 @@ async fn model_change_from_image_to_text_strips_prior_image_content() -> Result<
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
wait_for_event(&test.codex, |ev| matches!(ev, EventMsg::TurnComplete(_))).await;
@@ -539,6 +545,7 @@ async fn generated_image_is_replayed_for_image_capable_models() -> Result<()> {
summary: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
wait_for_event(&test.codex, |ev| matches!(ev, EventMsg::TurnComplete(_))).await;
@@ -560,6 +567,7 @@ async fn generated_image_is_replayed_for_image_capable_models() -> Result<()> {
summary: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
wait_for_event(&test.codex, |ev| matches!(ev, EventMsg::TurnComplete(_))).await;
@@ -671,6 +679,7 @@ async fn model_change_from_generated_image_to_text_preserves_prior_generated_ima
summary: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
wait_for_event(&test.codex, |ev| matches!(ev, EventMsg::TurnComplete(_))).await;
@@ -692,6 +701,7 @@ async fn model_change_from_generated_image_to_text_preserves_prior_generated_ima
summary: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
wait_for_event(&test.codex, |ev| matches!(ev, EventMsg::TurnComplete(_))).await;
@@ -805,6 +815,7 @@ async fn thread_rollback_after_generated_image_drops_entire_image_turn_history()
summary: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
wait_for_event(&test.codex, |ev| matches!(ev, EventMsg::TurnComplete(_))).await;
@@ -834,6 +845,7 @@ async fn thread_rollback_after_generated_image_drops_entire_image_turn_history()
summary: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
wait_for_event(&test.codex, |ev| matches!(ev, EventMsg::TurnComplete(_))).await;
@@ -989,6 +1001,7 @@ async fn model_switch_to_smaller_model_updates_token_context_window() -> Result<
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -1048,6 +1061,7 @@ async fn model_switch_to_smaller_model_updates_token_context_window() -> Result<
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -129,6 +129,7 @@ async fn snapshot_model_visible_layout_turn_overrides() -> Result<()> {
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
wait_for_event(&test.codex, |event| {
@@ -153,6 +154,7 @@ async fn snapshot_model_visible_layout_turn_overrides() -> Result<()> {
service_tier: None,
collaboration_mode: None,
personality: Some(Personality::Friendly),
submission_type: None,
})
.await?;
wait_for_event(&test.codex, |event| {
@@ -232,6 +234,7 @@ async fn snapshot_model_visible_layout_cwd_change_does_not_refresh_agents() -> R
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
wait_for_event(&test.codex, |event| {
@@ -256,6 +259,7 @@ async fn snapshot_model_visible_layout_cwd_change_does_not_refresh_agents() -> R
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
wait_for_event(&test.codex, |event| {
@@ -366,6 +370,7 @@ async fn snapshot_model_visible_layout_resume_with_personality_change() -> Resul
service_tier: None,
collaboration_mode: None,
personality: Some(Personality::Friendly),
submission_type: None,
})
.await?;
wait_for_event(&resumed.codex, |event| {
@@ -105,6 +105,7 @@ async fn renews_cache_ttl_on_matching_models_etag() -> Result<()> {
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -110,6 +110,7 @@ async fn refresh_models_on_models_etag_mismatch_and_avoid_duplicate_models_fetch
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
+13
View File
@@ -111,6 +111,7 @@ async fn user_turn_personality_none_does_not_add_update_message() -> anyhow::Res
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -162,6 +163,7 @@ async fn config_personality_some_sets_instructions_template() -> anyhow::Result<
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -220,6 +222,7 @@ async fn config_personality_none_sends_no_personality() -> anyhow::Result<()> {
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -284,6 +287,7 @@ async fn default_personality_is_pragmatic_without_config_toml() -> anyhow::Resul
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -336,6 +340,7 @@ async fn user_turn_personality_some_adds_update_message() -> anyhow::Result<()>
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -374,6 +379,7 @@ async fn user_turn_personality_some_adds_update_message() -> anyhow::Result<()>
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -441,6 +447,7 @@ async fn user_turn_personality_same_value_does_not_add_update_message() -> anyho
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -479,6 +486,7 @@ async fn user_turn_personality_same_value_does_not_add_update_message() -> anyho
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -559,6 +567,7 @@ async fn user_turn_personality_skips_if_feature_disabled() -> anyhow::Result<()>
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -597,6 +606,7 @@ async fn user_turn_personality_skips_if_feature_disabled() -> anyhow::Result<()>
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -714,6 +724,7 @@ async fn remote_model_friendly_personality_instructions_with_feature() -> anyhow
service_tier: None,
collaboration_mode: None,
personality: Some(Personality::Friendly),
submission_type: None,
})
.await?;
@@ -833,6 +844,7 @@ async fn user_turn_personality_remote_model_template_includes_update_message() -
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -871,6 +883,7 @@ async fn user_turn_personality_remote_model_template_includes_update_message() -
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -712,6 +712,7 @@ async fn per_turn_overrides_keep_cached_prefix_and_key_constant() -> anyhow::Res
collaboration_mode: None,
final_output_json_schema: None,
personality: None,
submission_type: None,
})
.await?;
wait_for_event(&codex, |ev| matches!(ev, EventMsg::TurnComplete(_))).await;
@@ -825,6 +826,7 @@ async fn send_user_turn_with_no_changes_does_not_send_environment_context() -> a
collaboration_mode: None,
final_output_json_schema: None,
personality: None,
submission_type: None,
})
.await?;
wait_for_event(&codex, |ev| matches!(ev, EventMsg::TurnComplete(_))).await;
@@ -846,6 +848,7 @@ async fn send_user_turn_with_no_changes_does_not_send_environment_context() -> a
collaboration_mode: None,
final_output_json_schema: None,
personality: None,
submission_type: None,
})
.await?;
wait_for_event(&codex, |ev| matches!(ev, EventMsg::TurnComplete(_))).await;
@@ -951,6 +954,7 @@ async fn send_user_turn_with_changes_sends_environment_context() -> anyhow::Resu
collaboration_mode: None,
final_output_json_schema: None,
personality: None,
submission_type: None,
})
.await?;
wait_for_event(&codex, |ev| matches!(ev, EventMsg::TurnComplete(_))).await;
@@ -972,6 +976,7 @@ async fn send_user_turn_with_changes_sends_environment_context() -> anyhow::Resu
collaboration_mode: None,
final_output_json_schema: None,
personality: None,
submission_type: None,
})
.await?;
wait_for_event(&codex, |ev| matches!(ev, EventMsg::TurnComplete(_))).await;
@@ -184,6 +184,7 @@ async fn remote_models_long_model_slug_is_sent_with_high_reasoning() -> Result<(
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -247,6 +248,7 @@ async fn namespaced_model_slug_uses_catalog_metadata_without_fallback_warning()
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -407,6 +409,7 @@ async fn remote_models_remote_model_uses_unified_exec() -> Result<()> {
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -630,6 +633,7 @@ async fn remote_models_apply_remote_base_instructions() -> Result<()> {
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -202,6 +202,7 @@ async fn submit_turn(
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
Ok(())
@@ -153,6 +153,7 @@ async fn submit_turn(
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
Ok(())
@@ -153,6 +153,7 @@ async fn request_user_input_round_trip_for_mode(mode: ModeKind) -> anyhow::Resul
},
}),
personality: None,
submission_type: None,
})
.await?;
@@ -264,6 +265,7 @@ where
service_tier: None,
collaboration_mode: Some(collaboration_mode),
personality: None,
submission_type: None,
})
.await?;
+6
View File
@@ -138,6 +138,7 @@ async fn stdio_server_round_trip() -> anyhow::Result<()> {
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -309,6 +310,7 @@ async fn stdio_image_responses_round_trip() -> anyhow::Result<()> {
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -514,6 +516,7 @@ async fn stdio_image_responses_are_sanitized_for_text_only_model() -> anyhow::Re
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -630,6 +633,7 @@ async fn stdio_server_propagates_whitelisted_env_vars() -> anyhow::Result<()> {
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -793,6 +797,7 @@ async fn streamable_http_tool_call_round_trip() -> anyhow::Result<()> {
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -1041,6 +1046,7 @@ async fn streamable_http_with_oauth_round_trip_impl() -> anyhow::Result<()> {
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -53,6 +53,7 @@ async fn openai_model_header_mismatch_emits_warning_event_and_warning_item() ->
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -152,6 +153,7 @@ async fn response_model_field_mismatch_emits_warning_when_header_matches_request
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -238,6 +240,7 @@ async fn openai_model_header_mismatch_only_emits_one_warning_per_turn() -> Resul
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -288,6 +291,7 @@ async fn openai_model_header_casing_only_mismatch_does_not_warn() -> Result<()>
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -172,6 +172,7 @@ async fn run_snapshot_command_with_options(
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -263,6 +264,7 @@ async fn run_shell_command_snapshot_with_options(
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -334,6 +336,7 @@ async fn run_tool_turn_on_harness(
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -568,6 +571,7 @@ async fn shell_command_snapshot_still_intercepts_apply_patch() -> Result<()> {
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -59,6 +59,7 @@ async fn submit_turn_with_policies(
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
Ok(())
+1
View File
@@ -82,6 +82,7 @@ async fn user_turn_includes_skill_instructions() -> Result<()> {
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -404,6 +404,7 @@ async fn mcp_call_marks_thread_memory_mode_polluted_when_configured() -> Result<
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
wait_for_event(&test.codex, |event| {
@@ -93,6 +93,7 @@ async fn shell_tool_executes_command_and_streams_output() -> anyhow::Result<()>
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -164,6 +165,7 @@ async fn update_plan_tool_emits_plan_update_event() -> anyhow::Result<()> {
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -245,6 +247,7 @@ async fn update_plan_tool_rejects_malformed_payload() -> anyhow::Result<()> {
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -341,6 +344,7 @@ async fn apply_patch_tool_executes_and_emits_patch_events() -> anyhow::Result<()
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -445,6 +449,7 @@ async fn apply_patch_reports_parse_diagnostics() -> anyhow::Result<()> {
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -50,6 +50,7 @@ async fn run_turn(test: &TestCodex, prompt: &str) -> anyhow::Result<()> {
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -367,6 +368,7 @@ async fn shell_tools_start_before_response_completed_when_stream_delayed() -> an
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
+1
View File
@@ -496,6 +496,7 @@ async fn mcp_image_output_preserves_image_and_no_text_summary() -> Result<()> {
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
+26
View File
@@ -200,6 +200,7 @@ async fn unified_exec_intercepts_apply_patch_exec_command() -> Result<()> {
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -334,6 +335,7 @@ async fn unified_exec_emits_exec_command_begin_event() -> Result<()> {
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -417,6 +419,7 @@ async fn unified_exec_resolves_relative_workdir() -> Result<()> {
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -503,6 +506,7 @@ async fn unified_exec_respects_workdir_override() -> Result<()> {
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -601,6 +605,7 @@ async fn unified_exec_emits_exec_command_end_event() -> Result<()> {
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -681,6 +686,7 @@ async fn unified_exec_emits_output_delta_for_exec_command() -> Result<()> {
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -762,6 +768,7 @@ async fn unified_exec_full_lifecycle_with_background_end_event() -> Result<()> {
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -897,6 +904,7 @@ async fn unified_exec_emits_terminal_interaction_for_write_stdin() -> Result<()>
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -1039,6 +1047,7 @@ async fn unified_exec_terminal_interaction_captures_delayed_output() -> Result<(
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -1204,6 +1213,7 @@ async fn unified_exec_emits_one_begin_and_one_end_event() -> Result<()> {
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -1317,6 +1327,7 @@ async fn exec_command_reports_chunk_and_exit_metadata() -> Result<()> {
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -1440,6 +1451,7 @@ async fn unified_exec_defaults_to_pipe() -> Result<()> {
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -1535,6 +1547,7 @@ async fn unified_exec_can_enable_tty() -> Result<()> {
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -1621,6 +1634,7 @@ async fn unified_exec_respects_early_exit_notifications() -> Result<()> {
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -1757,6 +1771,7 @@ async fn write_stdin_returns_exit_metadata_and_clears_session() -> Result<()> {
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -1930,6 +1945,7 @@ async fn unified_exec_emits_end_event_when_session_dies_via_stdin() -> Result<()
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -2012,6 +2028,7 @@ async fn unified_exec_keeps_long_running_session_after_turn_end() -> Result<()>
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -2105,6 +2122,7 @@ async fn unified_exec_interrupt_preserves_long_running_session() -> Result<()> {
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -2214,6 +2232,7 @@ async fn unified_exec_reuses_session_via_stdin() -> Result<()> {
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -2354,6 +2373,7 @@ PY
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
// This is a worst case scenario for the truncate logic.
@@ -2473,6 +2493,7 @@ async fn unified_exec_timeout_and_followup_poll() -> Result<()> {
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -2574,6 +2595,7 @@ PY
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -2675,6 +2697,7 @@ async fn unified_exec_runs_under_sandbox() -> Result<()> {
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -2784,6 +2807,7 @@ async fn unified_exec_python_prompt_under_seatbelt() -> Result<()> {
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -2884,6 +2908,7 @@ async fn unified_exec_runs_on_all_platforms() -> Result<()> {
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -3024,6 +3049,7 @@ async fn unified_exec_prunes_exited_sessions_first() -> Result<()> {
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -185,6 +185,7 @@ async fn user_shell_command_does_not_replace_active_turn() -> anyhow::Result<()>
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
+14
View File
@@ -164,6 +164,7 @@ async fn user_turn_with_local_image_attaches_image() -> anyhow::Result<()> {
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -273,6 +274,7 @@ async fn view_image_tool_attaches_local_image() -> anyhow::Result<()> {
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -414,6 +416,7 @@ async fn view_image_tool_can_preserve_original_resolution_when_requested_on_gpt5
summary: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -520,6 +523,7 @@ async fn view_image_tool_errors_clearly_for_unsupported_detail_values() -> anyho
summary: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -612,6 +616,7 @@ async fn view_image_tool_treats_null_detail_as_omitted() -> anyhow::Result<()> {
summary: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -712,6 +717,7 @@ async fn view_image_tool_resizes_when_model_lacks_original_detail_support() -> a
summary: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -823,6 +829,7 @@ async fn view_image_tool_does_not_force_original_resolution_with_capability_feat
summary: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -925,6 +932,7 @@ await codex.emitImage(out);
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -1045,6 +1053,7 @@ console.log(out.type);
summary: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -1138,6 +1147,7 @@ async fn view_image_tool_errors_when_path_is_directory() -> anyhow::Result<()> {
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -1214,6 +1224,7 @@ async fn view_image_tool_errors_for_non_image_files() -> anyhow::Result<()> {
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -1295,6 +1306,7 @@ async fn view_image_tool_errors_when_file_missing() -> anyhow::Result<()> {
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -1425,6 +1437,7 @@ async fn view_image_tool_returns_unsupported_message_for_text_only_model() -> an
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -1500,6 +1513,7 @@ async fn replaces_invalid_local_image_after_bad_request() -> anyhow::Result<()>
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;
@@ -165,6 +165,7 @@ async fn websocket_fallback_hides_first_websocket_retry_stream_error() -> Result
service_tier: None,
collaboration_mode: None,
personality: None,
submission_type: None,
})
.await?;