From 46257d5aaeb57e3860b839e03351a18bf165a44b Mon Sep 17 00:00:00 2001 From: pakrym-oai Date: Fri, 22 May 2026 14:37:18 -0700 Subject: [PATCH 01/17] Use TurnInput for session task input --- codex-rs/core/src/session/handlers.rs | 12 +-- codex-rs/core/src/session/tests.rs | 6 +- codex-rs/core/src/session/turn.rs | 104 +++++++++++++------------- codex-rs/core/src/tasks/compact.rs | 8 +- codex-rs/core/src/tasks/mod.rs | 13 +++- codex-rs/core/src/tasks/regular.rs | 4 +- codex-rs/core/src/tasks/review.rs | 13 +++- codex-rs/core/src/tasks/user_shell.rs | 4 +- 8 files changed, 89 insertions(+), 75 deletions(-) diff --git a/codex-rs/core/src/session/handlers.rs b/codex-rs/core/src/session/handlers.rs index 3d57bd70749..b1e36b03472 100644 --- a/codex-rs/core/src/session/handlers.rs +++ b/codex-rs/core/src/session/handlers.rs @@ -460,16 +460,8 @@ pub async fn reload_user_config(sess: &Arc) { pub async fn compact(sess: &Arc, sub_id: String) { let turn_context = sess.new_default_turn_with_sub_id(sub_id).await; - sess.spawn_task( - Arc::clone(&turn_context), - vec![UserInput::Text { - text: turn_context.compact_prompt().to_string(), - // Compaction prompt is synthesized; no UI element ranges to preserve. - text_elements: Vec::new(), - }], - CompactTask, - ) - .await; + sess.spawn_task(Arc::clone(&turn_context), Vec::new(), CompactTask) + .await; } pub async fn thread_rollback(sess: &Arc, sub_id: String, num_turns: u32) { diff --git a/codex-rs/core/src/session/tests.rs b/codex-rs/core/src/session/tests.rs index df7559a7d97..30d26191d74 100644 --- a/codex-rs/core/src/session/tests.rs +++ b/codex-rs/core/src/session/tests.rs @@ -5738,7 +5738,7 @@ async fn spawn_task_turn_span_inherits_dispatch_trace_context() { self: Arc, _session: Arc, _ctx: Arc, - _input: Vec, + _input: Vec, _cancellation_token: CancellationToken, ) -> Option { let mut trace = self @@ -7814,7 +7814,7 @@ impl SessionTask for NeverEndingTask { self: Arc, _session: Arc, _ctx: Arc, - _input: Vec, + _input: Vec, cancellation_token: CancellationToken, ) -> Option { if self.listen_to_cancellation_token { @@ -7843,7 +7843,7 @@ impl SessionTask for GuardianDeniedApprovalTask { self: Arc, session: Arc, ctx: Arc, - _input: Vec, + _input: Vec, cancellation_token: CancellationToken, ) -> Option { let session = session.clone_session(); diff --git a/codex-rs/core/src/session/turn.rs b/codex-rs/core/src/session/turn.rs index 26ba845460c..f81b2b1f742 100644 --- a/codex-rs/core/src/session/turn.rs +++ b/codex-rs/core/src/session/turn.rs @@ -114,8 +114,8 @@ use tracing::trace; use tracing::trace_span; use tracing::warn; -/// Takes a user message as input and runs a loop where, at each sampling request, the model -/// replies with either: +/// Takes initial turn input and runs a loop where, at each sampling request, +/// the model replies with either: /// /// - requested function calls /// - an assistant message @@ -132,7 +132,7 @@ pub(crate) async fn run_turn( sess: Arc, turn_context: Arc, turn_extension_data: Arc, - input: Vec, + input: Vec, prewarmed_client_session: Option, cancellation_token: CancellationToken, ) -> Option { @@ -172,26 +172,9 @@ pub(crate) async fn run_turn( if run_pending_session_start_hooks(&sess, &turn_context).await { return None; } - if !input.is_empty() { - let initial_turn_input = TurnInput::UserInput(input.clone()); - let user_prompt_submit_outcome = - inspect_pending_input(&sess, &turn_context, &initial_turn_input).await; - if user_prompt_submit_outcome.should_stop { - record_additional_contexts( - &sess, - &turn_context, - user_prompt_submit_outcome.additional_contexts, - ) - .await; - return None; - } - record_pending_input( - &sess, - &turn_context, - initial_turn_input, - user_prompt_submit_outcome.additional_contexts, - ) - .await; + let mut can_drain_pending_input = input.is_empty(); + if run_hooks_and_record_inputs(&sess, &turn_context, &input).await { + return None; } sess.merge_connector_selection(explicitly_enabled_connectors.clone()) @@ -232,9 +215,8 @@ pub(crate) async fn run_turn( // one instance across retries within this turn. // Pending input is drained into history before building the next model request. // However, we defer that drain until after sampling in two cases: - // 1. At the start of a turn, so the fresh user prompt in `input` gets sampled first. + // 1. At the start of a turn, so the fresh turn input in `input` gets sampled first. // 2. After auto-compact, when model/tool continuation needs to resume before any steer. - let mut can_drain_pending_input = input.is_empty(); loop { // Note that pending_input would be something like a message the user @@ -246,27 +228,7 @@ pub(crate) async fn run_turn( Vec::new() }; - let mut blocked_pending_input = false; - let mut accepted_pending_input = false; - for pending_input_item in pending_input { - let hook_outcome = - inspect_pending_input(&sess, &turn_context, &pending_input_item).await; - if hook_outcome.should_stop { - blocked_pending_input = true; - record_additional_contexts(&sess, &turn_context, hook_outcome.additional_contexts) - .await; - } else { - accepted_pending_input = true; - record_pending_input( - &sess, - &turn_context, - pending_input_item, - hook_outcome.additional_contexts, - ) - .await; - } - } - if blocked_pending_input && !accepted_pending_input { + if run_hooks_and_record_inputs(&sess, &turn_context, &pending_input).await { break; } @@ -450,6 +412,32 @@ pub(crate) async fn run_turn( last_agent_message } +async fn run_hooks_and_record_inputs( + sess: &Arc, + turn_context: &Arc, + input: &[TurnInput], +) -> bool { + let mut blocked_input = false; + let mut accepted_input = false; + for input_item in input { + let hook_outcome = inspect_pending_input(sess, turn_context, input_item).await; + if hook_outcome.should_stop { + blocked_input = true; + record_additional_contexts(sess, turn_context, hook_outcome.additional_contexts).await; + } else { + accepted_input = true; + record_pending_input( + sess, + turn_context, + input_item.clone(), + hook_outcome.additional_contexts, + ) + .await; + } + } + blocked_input && !accepted_input +} + #[expect( clippy::await_holding_invalid_type, reason = "MCP tool listing borrows the read guard across cancellation-aware await" @@ -457,9 +445,18 @@ pub(crate) async fn run_turn( async fn build_skills_and_plugins( sess: &Arc, turn_context: &TurnContext, - input: &[UserInput], + input: &[TurnInput], cancellation_token: &CancellationToken, ) -> Option<(Vec, HashSet)> { + let user_input = input + .iter() + .filter_map(|item| match item { + TurnInput::UserInput(content) => Some(content.as_slice()), + TurnInput::ResponseInputItem(_) => None, + }) + .flatten() + .cloned() + .collect::>(); let tracking = build_track_events_context( turn_context.model_info.slug.clone(), sess.conversation_id.to_string(), @@ -473,7 +470,7 @@ async fn build_skills_and_plugins( // Structured plugin:// mentions are resolved from the current session's // enabled plugins, then converted into turn-scoped guidance below. let mentioned_plugins = - collect_explicit_plugin_mentions(input, loaded_plugins.capability_summaries()); + collect_explicit_plugin_mentions(&user_input, loaded_plugins.capability_summaries()); let mcp_tools = if turn_context.apps_enabled() || !mentioned_plugins.is_empty() { // Plugin mentions need raw MCP/app inventory even when app tools // are normally hidden so we can describe the plugin's currently @@ -511,7 +508,7 @@ async fn build_skills_and_plugins( let skill_name_counts_lower = build_skill_name_counts(&skills_outcome.skills, &skills_outcome.disabled_paths).1; let mentioned_skills = collect_explicit_skill_mentions( - input, + &user_input, &skills_outcome.skills, &skills_outcome.disabled_paths, &connector_slug_counts, @@ -553,7 +550,7 @@ async fn build_skills_and_plugins( ); let plugin_items = build_plugin_injections(&mentioned_plugins, &mcp_tools, &available_connectors); - let mut explicitly_enabled_connectors = collect_explicit_app_ids(input); + let mut explicitly_enabled_connectors = collect_explicit_app_ids(&user_input); explicitly_enabled_connectors.extend(skill_connector_ids); let connector_names_by_id = available_connectors .iter() @@ -589,7 +586,7 @@ async fn build_skills_and_plugins( async fn track_turn_resolved_config_analytics( sess: &Session, turn_context: &TurnContext, - input: &[UserInput], + input: &[TurnInput], ) { let thread_config = { let state = sess.state.lock().await; @@ -606,6 +603,11 @@ async fn track_turn_resolved_config_analytics( thread_id: sess.conversation_id.to_string(), num_input_images: input .iter() + .filter_map(|item| match item { + TurnInput::UserInput(content) => Some(content.as_slice()), + TurnInput::ResponseInputItem(_) => None, + }) + .flatten() .filter(|item| { matches!(item, UserInput::Image { .. } | UserInput::LocalImage { .. }) }) diff --git a/codex-rs/core/src/tasks/compact.rs b/codex-rs/core/src/tasks/compact.rs index dddf46391ed..77914633a20 100644 --- a/codex-rs/core/src/tasks/compact.rs +++ b/codex-rs/core/src/tasks/compact.rs @@ -2,6 +2,7 @@ use std::sync::Arc; use super::SessionTask; use super::SessionTaskContext; +use crate::session::TurnInput; use crate::session::turn_context::TurnContext; use crate::state::TaskKind; use codex_protocol::user_input::UserInput; @@ -23,7 +24,7 @@ impl SessionTask for CompactTask { self: Arc, session: Arc, ctx: Arc, - input: Vec, + _input: Vec, _cancellation_token: CancellationToken, ) -> Option { let session = session.clone_session(); @@ -47,6 +48,11 @@ impl SessionTask for CompactTask { /*inc*/ 1, &[("type", "local")], ); + let input = vec![UserInput::Text { + text: ctx.compact_prompt().to_string(), + // Compaction prompt is synthesized; no UI element ranges to preserve. + text_elements: Vec::new(), + }]; crate::compact::run_compact_task(session.clone(), ctx, input).await }; None diff --git a/codex-rs/core/src/tasks/mod.rs b/codex-rs/core/src/tasks/mod.rs index 9cb6b5f0f20..4d6db8acf22 100644 --- a/codex-rs/core/src/tasks/mod.rs +++ b/codex-rs/core/src/tasks/mod.rs @@ -214,7 +214,7 @@ pub(crate) trait SessionTask: Send + Sync + 'static { self: Arc, session: Arc, ctx: Arc, - input: Vec, + input: Vec, cancellation_token: CancellationToken, ) -> impl std::future::Future> + Send; @@ -245,7 +245,7 @@ pub(crate) trait AnySessionTask: Send + Sync + 'static { self: Arc, session: Arc, ctx: Arc, - input: Vec, + input: Vec, cancellation_token: CancellationToken, ) -> BoxFuture<'static, Option>; @@ -276,7 +276,7 @@ where self: Arc, session: Arc, ctx: Arc, - input: Vec, + input: Vec, cancellation_token: CancellationToken, ) -> BoxFuture<'static, Option> { Box::pin(SessionTask::run( @@ -380,6 +380,11 @@ impl Session { )); let ctx = Arc::clone(&turn_context); let task_for_run = Arc::clone(&task); + let task_input = if input.is_empty() { + Vec::new() + } else { + vec![TurnInput::UserInput(input)] + }; let task_cancellation_token = cancellation_token.child_token(); // Task-owned turn spans keep a core-owned span open for the // full task lifecycle after the submission dispatch span ends. @@ -405,7 +410,7 @@ impl Session { .run( Arc::clone(&session_ctx), ctx, - input, + task_input, task_cancellation_token.child_token(), ) .await; diff --git a/codex-rs/core/src/tasks/regular.rs b/codex-rs/core/src/tasks/regular.rs index 531d5d7da79..6c6a0e5b092 100644 --- a/codex-rs/core/src/tasks/regular.rs +++ b/codex-rs/core/src/tasks/regular.rs @@ -2,13 +2,13 @@ use std::sync::Arc; use tokio_util::sync::CancellationToken; +use crate::session::TurnInput; use crate::session::turn::run_turn; use crate::session::turn_context::TurnContext; use crate::session_startup_prewarm::SessionStartupPrewarmResolution; use crate::state::TaskKind; use codex_protocol::protocol::EventMsg; use codex_protocol::protocol::TurnStartedEvent; -use codex_protocol::user_input::UserInput; use tracing::Instrument; use tracing::trace_span; @@ -41,7 +41,7 @@ impl SessionTask for RegularTask { self: Arc, session: Arc, ctx: Arc, - input: Vec, + input: Vec, cancellation_token: CancellationToken, ) -> Option { let sess = session.clone_session(); diff --git a/codex-rs/core/src/tasks/review.rs b/codex-rs/core/src/tasks/review.rs index f89c7d062f4..ff7f38a7eae 100644 --- a/codex-rs/core/src/tasks/review.rs +++ b/codex-rs/core/src/tasks/review.rs @@ -20,6 +20,7 @@ use crate::codex_delegate::run_codex_thread_one_shot; use crate::config::Constrained; use crate::review_format::format_review_findings_block; use crate::review_format::render_review_output_text; +use crate::session::TurnInput; use crate::session::session::Session; use crate::session::turn_context::TurnContext; use crate::state::TaskKind; @@ -59,7 +60,7 @@ impl SessionTask for ReviewTask { self: Arc, session: Arc, ctx: Arc, - input: Vec, + input: Vec, cancellation_token: CancellationToken, ) -> Option { session.session.services.session_telemetry.counter( @@ -68,11 +69,19 @@ impl SessionTask for ReviewTask { &[], ); + let mut user_input = Vec::new(); + for item in input { + match item { + TurnInput::UserInput(mut content) => user_input.append(&mut content), + TurnInput::ResponseInputItem(_) => {} + } + } + // Start sub-codex conversation and get the receiver for events. let output = match start_review_conversation( session.clone(), ctx.clone(), - input, + user_input, cancellation_token.clone(), ) .await diff --git a/codex-rs/core/src/tasks/user_shell.rs b/codex-rs/core/src/tasks/user_shell.rs index 2ce4056957e..396aecbeea8 100644 --- a/codex-rs/core/src/tasks/user_shell.rs +++ b/codex-rs/core/src/tasks/user_shell.rs @@ -7,7 +7,6 @@ use codex_network_proxy::PROXY_ACTIVE_ENV_KEY; use codex_network_proxy::PROXY_ENV_KEYS; #[cfg(target_os = "macos")] use codex_network_proxy::PROXY_GIT_SSH_COMMAND_ENV_KEY; -use codex_protocol::user_input::UserInput; use tokio_util::sync::CancellationToken; use tracing::error; use uuid::Uuid; @@ -17,6 +16,7 @@ use crate::exec::StdoutStream; use crate::exec::execute_exec_request; use crate::exec_env::create_env; use crate::sandboxing::ExecRequest; +use crate::session::TurnInput; use crate::session::turn_context::TurnContext; use crate::state::TaskKind; use crate::tools::format_exec_output_str; @@ -77,7 +77,7 @@ impl SessionTask for UserShellCommandTask { self: Arc, session: Arc, turn_context: Arc, - _input: Vec, + _input: Vec, cancellation_token: CancellationToken, ) -> Option { execute_user_shell_command( From eafdb155903cc83918c68615e69dca15d15a1d9f Mon Sep 17 00:00:00 2001 From: pakrym-oai Date: Fri, 22 May 2026 13:29:44 -0700 Subject: [PATCH 02/17] Initialize additional context in user input callers --- codex-rs/core/src/agent/control_tests.rs | 3 + codex-rs/core/src/codex_delegate.rs | 1 + codex-rs/core/src/guardian/review_session.rs | 1 + codex-rs/core/src/session/mod.rs | 1 + codex-rs/core/src/session/tests.rs | 7 +++ .../src/tools/handlers/multi_agents_tests.rs | 1 + codex-rs/core/tests/common/test_codex.rs | 1 + codex-rs/core/tests/suite/abort_tasks.rs | 5 ++ codex-rs/core/tests/suite/apply_patch_cli.rs | 1 + codex-rs/core/tests/suite/approvals.rs | 2 + codex-rs/core/tests/suite/client.rs | 34 ++++++++++++ .../core/tests/suite/client_websockets.rs | 2 + codex-rs/core/tests/suite/code_mode.rs | 1 + .../tests/suite/collaboration_instructions.rs | 17 ++++++ codex-rs/core/tests/suite/compact.rs | 32 +++++++++++ codex-rs/core/tests/suite/compact_remote.rs | 55 +++++++++++++++++++ .../core/tests/suite/compact_remote_parity.rs | 1 + .../core/tests/suite/compact_resume_fork.rs | 1 + codex-rs/core/tests/suite/exec_policy.rs | 2 + codex-rs/core/tests/suite/fork_thread.rs | 2 + codex-rs/core/tests/suite/hooks.rs | 2 + codex-rs/core/tests/suite/image_rollout.rs | 2 + codex-rs/core/tests/suite/items.rs | 10 ++++ codex-rs/core/tests/suite/json_result.rs | 1 + .../core/tests/suite/mcp_turn_metadata.rs | 1 + codex-rs/core/tests/suite/model_switching.rs | 1 + .../core/tests/suite/model_visible_layout.rs | 8 +++ codex-rs/core/tests/suite/models_cache_ttl.rs | 1 + .../core/tests/suite/models_etag_responses.rs | 1 + codex-rs/core/tests/suite/otel.rs | 22 ++++++++ codex-rs/core/tests/suite/pending_input.rs | 4 ++ .../core/tests/suite/permissions_messages.rs | 15 +++++ codex-rs/core/tests/suite/personality.rs | 1 + codex-rs/core/tests/suite/plugins.rs | 3 + codex-rs/core/tests/suite/prompt_caching.rs | 15 +++++ codex-rs/core/tests/suite/quota_exceeded.rs | 1 + .../core/tests/suite/realtime_conversation.rs | 3 + codex-rs/core/tests/suite/remote_env.rs | 1 + codex-rs/core/tests/suite/remote_models.rs | 7 +++ .../core/tests/suite/request_compression.rs | 2 + .../core/tests/suite/request_permissions.rs | 1 + .../tests/suite/request_permissions_tool.rs | 1 + .../core/tests/suite/request_user_input.rs | 3 + .../suite/responses_api_proxy_headers.rs | 1 + codex-rs/core/tests/suite/resume.rs | 7 +++ codex-rs/core/tests/suite/review.rs | 1 + codex-rs/core/tests/suite/rmcp_client.rs | 1 + .../tests/suite/safety_check_downgrade.rs | 1 + codex-rs/core/tests/suite/search_tool.rs | 4 ++ codex-rs/core/tests/suite/shell_snapshot.rs | 4 ++ codex-rs/core/tests/suite/skill_approval.rs | 1 + codex-rs/core/tests/suite/skills.rs | 1 + codex-rs/core/tests/suite/sqlite_state.rs | 1 + .../suite/stream_error_allows_next_turn.rs | 2 + .../core/tests/suite/stream_no_completed.rs | 1 + .../tests/suite/subagent_notifications.rs | 1 + codex-rs/core/tests/suite/tool_harness.rs | 5 ++ codex-rs/core/tests/suite/tool_parallelism.rs | 2 + codex-rs/core/tests/suite/truncation.rs | 1 + codex-rs/core/tests/suite/unified_exec.rs | 7 +++ .../core/tests/suite/user_notification.rs | 1 + codex-rs/core/tests/suite/user_shell_cmd.rs | 1 + codex-rs/core/tests/suite/view_image.rs | 1 + .../core/tests/suite/websocket_fallback.rs | 1 + codex-rs/core/tests/suite/window_headers.rs | 1 + codex-rs/mcp-server/src/codex_tool_runner.rs | 2 + codex-rs/memories/write/src/runtime.rs | 1 + codex-rs/protocol/src/protocol.rs | 5 ++ codex-rs/thread-manager-sample/src/main.rs | 1 + 69 files changed, 331 insertions(+) diff --git a/codex-rs/core/src/agent/control_tests.rs b/codex-rs/core/src/agent/control_tests.rs index ed39df1548a..8209272f102 100644 --- a/codex-rs/core/src/agent/control_tests.rs +++ b/codex-rs/core/src/agent/control_tests.rs @@ -444,6 +444,7 @@ async fn send_input_submits_user_message() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }, ); @@ -598,6 +599,7 @@ async fn spawn_agent_creates_thread_and_sends_prompt() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }, ); @@ -770,6 +772,7 @@ async fn spawn_agent_can_fork_parent_thread_history_with_sanitized_items() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }, ); diff --git a/codex-rs/core/src/codex_delegate.rs b/codex-rs/core/src/codex_delegate.rs index 4ed6b2368cb..b27cf745c96 100644 --- a/codex-rs/core/src/codex_delegate.rs +++ b/codex-rs/core/src/codex_delegate.rs @@ -192,6 +192,7 @@ pub(crate) async fn run_codex_thread_one_shot( items: input, final_output_json_schema, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; diff --git a/codex-rs/core/src/guardian/review_session.rs b/codex-rs/core/src/guardian/review_session.rs index 15d6c142cae..e56d5ce170d 100644 --- a/codex-rs/core/src/guardian/review_session.rs +++ b/codex-rs/core/src/guardian/review_session.rs @@ -714,6 +714,7 @@ async fn run_review_on_session( environments: None, final_output_json_schema: Some(params.schema.clone()), responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { #[allow(deprecated)] cwd: Some(params.parent_turn.cwd.to_path_buf()), diff --git a/codex-rs/core/src/session/mod.rs b/codex-rs/core/src/session/mod.rs index 675e794aee5..d8d52558208 100644 --- a/codex-rs/core/src/session/mod.rs +++ b/codex-rs/core/src/session/mod.rs @@ -1086,6 +1086,7 @@ impl Session { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }, /*mirror_user_text_to_realtime*/ None, diff --git a/codex-rs/core/src/session/tests.rs b/codex-rs/core/src/session/tests.rs index 30d26191d74..36976bf4a43 100644 --- a/codex-rs/core/src/session/tests.rs +++ b/codex-rs/core/src/session/tests.rs @@ -2287,6 +2287,7 @@ async fn fork_startup_context_then_first_turn_diff_snapshot() -> anyhow::Result< }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -2333,6 +2334,7 @@ async fn fork_startup_context_then_first_turn_diff_snapshot() -> anyhow::Result< }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: ThreadSettingsOverrides { approval_policy: Some(AskForApproval::Never), collaboration_mode: Some(collaboration_mode), @@ -5429,6 +5431,7 @@ fn op_kind_for_input_and_context_ops() { items: vec![], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), } .kind(), @@ -5459,6 +5462,7 @@ async fn user_turn_updates_approvals_reviewer() { environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(config.cwd.to_path_buf()), approval_policy: Some(config.permissions.approval_policy.value()), @@ -8476,6 +8480,7 @@ async fn active_goal_continuation_runs_again_after_no_tool_turn() -> anyhow::Res }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -8581,6 +8586,7 @@ async fn pending_request_user_input_does_not_spawn_extra_goal_continuation() -> }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -9128,6 +9134,7 @@ async fn completed_goal_accounts_current_turn_tokens_before_tool_response() -> a }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; diff --git a/codex-rs/core/src/tools/handlers/multi_agents_tests.rs b/codex-rs/core/src/tools/handlers/multi_agents_tests.rs index a582805ed29..68b19adea9e 100644 --- a/codex-rs/core/src/tools/handlers/multi_agents_tests.rs +++ b/codex-rs/core/src/tools/handlers/multi_agents_tests.rs @@ -2592,6 +2592,7 @@ async fn send_input_accepts_structured_items() { ], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }; let captured = manager diff --git a/codex-rs/core/tests/common/test_codex.rs b/codex-rs/core/tests/common/test_codex.rs index a3987582917..73e9e0ece88 100644 --- a/codex-rs/core/tests/common/test_codex.rs +++ b/codex-rs/core/tests/common/test_codex.rs @@ -767,6 +767,7 @@ impl TestCodex { environments, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(self.config.cwd.to_path_buf()), approval_policy: Some(approval_policy), diff --git a/codex-rs/core/tests/suite/abort_tasks.rs b/codex-rs/core/tests/suite/abort_tasks.rs index c41502a9dc9..82bb8c87987 100644 --- a/codex-rs/core/tests/suite/abort_tasks.rs +++ b/codex-rs/core/tests/suite/abort_tasks.rs @@ -53,6 +53,7 @@ async fn interrupt_long_running_tool_emits_turn_aborted() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -110,6 +111,7 @@ async fn interrupt_tool_records_history_entries() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -131,6 +133,7 @@ async fn interrupt_tool_records_history_entries() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -214,6 +217,7 @@ async fn interrupt_persists_turn_aborted_marker_in_next_request() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -235,6 +239,7 @@ async fn interrupt_persists_turn_aborted_marker_in_next_request() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await diff --git a/codex-rs/core/tests/suite/apply_patch_cli.rs b/codex-rs/core/tests/suite/apply_patch_cli.rs index f5a35003f82..da138851f55 100644 --- a/codex-rs/core/tests/suite/apply_patch_cli.rs +++ b/codex-rs/core/tests/suite/apply_patch_cli.rs @@ -91,6 +91,7 @@ async fn submit_without_wait_with_turn_permissions( environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(harness.cwd().to_path_buf()), approval_policy: Some(AskForApproval::Never), diff --git a/codex-rs/core/tests/suite/approvals.rs b/codex-rs/core/tests/suite/approvals.rs index 924253d8b80..9b727a2a2cb 100644 --- a/codex-rs/core/tests/suite/approvals.rs +++ b/codex-rs/core/tests/suite/approvals.rs @@ -653,6 +653,7 @@ async fn submit_turn( environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(test.cwd.path().to_path_buf()), approval_policy: Some(approval_policy), @@ -2597,6 +2598,7 @@ async fn matched_prefix_rule_runs_unsandboxed_under_zsh_fork() -> Result<()> { environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(test.cwd.path().to_path_buf()), approval_policy: Some(approval_policy), diff --git a/codex-rs/core/tests/suite/client.rs b/codex-rs/core/tests/suite/client.rs index f6731a0ea4f..7234c59c0fd 100644 --- a/codex-rs/core/tests/suite/client.rs +++ b/codex-rs/core/tests/suite/client.rs @@ -392,6 +392,7 @@ async fn resume_includes_initial_messages_and_sends_prior_items() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -758,6 +759,7 @@ async fn includes_session_id_thread_id_and_model_headers_in_request() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -969,6 +971,7 @@ async fn includes_base_instructions_override_in_request() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -1026,6 +1029,7 @@ async fn chatgpt_auth_sends_correct_request() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -1150,6 +1154,7 @@ async fn prefers_apikey_when_config_prefers_apikey_even_with_chatgpt_tokens() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -1189,6 +1194,7 @@ async fn includes_user_instructions_message_in_request() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -1277,6 +1283,7 @@ async fn includes_apps_guidance_as_developer_message_for_chatgpt_auth() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -1340,6 +1347,7 @@ async fn omits_apps_guidance_for_api_key_auth_even_when_feature_enabled() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -1399,6 +1407,7 @@ async fn omits_apps_guidance_when_configured_off() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -1441,6 +1450,7 @@ async fn omits_environment_context_when_configured_off() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -1498,6 +1508,7 @@ async fn skills_append_to_developer_message() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -1581,6 +1592,7 @@ async fn skills_use_aliases_in_developer_message_under_budget_pressure() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -1642,6 +1654,7 @@ async fn includes_configured_effort_in_request() -> anyhow::Result<()> { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -1684,6 +1697,7 @@ async fn includes_no_effort_in_request() -> anyhow::Result<()> { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -1727,6 +1741,7 @@ async fn includes_default_reasoning_effort_in_request_when_defined_by_model_info }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -1778,6 +1793,7 @@ async fn user_turn_collaboration_mode_overrides_model_and_effort() -> anyhow::Re environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(config.cwd.to_path_buf()), approval_policy: Some(config.permissions.approval_policy.value()), @@ -1834,6 +1850,7 @@ async fn configured_reasoning_summary_is_sent() -> anyhow::Result<()> { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -1899,6 +1916,7 @@ async fn user_turn_explicit_reasoning_summary_overrides_model_catalog_default() environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(config.cwd.to_path_buf()), approval_policy: Some(config.permissions.approval_policy.value()), @@ -1959,6 +1977,7 @@ async fn reasoning_summary_is_omitted_when_disabled() -> anyhow::Result<()> { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -2018,6 +2037,7 @@ async fn reasoning_summary_none_overrides_model_catalog_default() -> anyhow::Res }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -2057,6 +2077,7 @@ async fn includes_default_verbosity_in_request() -> anyhow::Result<()> { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -2105,6 +2126,7 @@ async fn configured_verbosity_not_sent_for_models_without_support() -> anyhow::R }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -2152,6 +2174,7 @@ async fn configured_verbosity_is_sent() -> anyhow::Result<()> { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -2204,6 +2227,7 @@ async fn includes_developer_instructions_message_in_request() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -2500,6 +2524,7 @@ async fn token_count_includes_rate_limits_snapshot() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -2639,6 +2664,7 @@ async fn usage_limit_error_emits_rate_limit_event() -> anyhow::Result<()> { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -2716,6 +2742,7 @@ async fn context_window_error_sets_total_tokens_to_model_window() -> anyhow::Res }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -2731,6 +2758,7 @@ async fn context_window_error_sets_total_tokens_to_model_window() -> anyhow::Res }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -2816,6 +2844,7 @@ async fn incomplete_response_emits_content_filter_error_message() -> anyhow::Res }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -2927,6 +2956,7 @@ async fn azure_overrides_assign_properties_used_for_responses_url() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -3016,6 +3046,7 @@ async fn env_var_overrides_loaded_auth() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -3073,6 +3104,7 @@ async fn history_dedupes_streamed_and_final_messages_across_turns() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -3089,6 +3121,7 @@ async fn history_dedupes_streamed_and_final_messages_across_turns() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -3105,6 +3138,7 @@ async fn history_dedupes_streamed_and_final_messages_across_turns() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await diff --git a/codex-rs/core/tests/suite/client_websockets.rs b/codex-rs/core/tests/suite/client_websockets.rs index 74eb053325e..09d0093f990 100755 --- a/codex-rs/core/tests/suite/client_websockets.rs +++ b/codex-rs/core/tests/suite/client_websockets.rs @@ -1319,6 +1319,7 @@ async fn responses_websocket_usage_limit_error_emits_rate_limit_event() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -1408,6 +1409,7 @@ async fn responses_websocket_invalid_request_error_with_status_is_forwarded() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await diff --git a/codex-rs/core/tests/suite/code_mode.rs b/codex-rs/core/tests/suite/code_mode.rs index 406981fad98..da6ad700480 100644 --- a/codex-rs/core/tests/suite/code_mode.rs +++ b/codex-rs/core/tests/suite/code_mode.rs @@ -2779,6 +2779,7 @@ text( environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(cwd), approval_policy: Some(AskForApproval::Never), diff --git a/codex-rs/core/tests/suite/collaboration_instructions.rs b/codex-rs/core/tests/suite/collaboration_instructions.rs index 0f9bee9431f..bbbb0f1aa23 100644 --- a/codex-rs/core/tests/suite/collaboration_instructions.rs +++ b/codex-rs/core/tests/suite/collaboration_instructions.rs @@ -79,6 +79,7 @@ async fn no_collaboration_instructions_by_default() -> Result<()> { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -133,6 +134,7 @@ async fn user_input_includes_collaboration_instructions_after_override() -> Resu }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -170,6 +172,7 @@ async fn collaboration_instructions_added_on_user_turn() -> Result<()> { environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(test.config.cwd.to_path_buf()), approval_policy: Some(test.config.permissions.approval_policy.value()), @@ -220,6 +223,7 @@ async fn collaboration_instructions_omitted_when_disabled() -> Result<()> { environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(test.config.cwd.to_path_buf()), approval_policy: Some(test.config.permissions.approval_policy.value()), @@ -279,6 +283,7 @@ async fn override_then_next_turn_uses_updated_collaboration_instructions() -> Re }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -327,6 +332,7 @@ async fn user_turn_overrides_collaboration_instructions_after_override() -> Resu environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(test.config.cwd.to_path_buf()), approval_policy: Some(test.config.permissions.approval_policy.value()), @@ -391,6 +397,7 @@ async fn collaboration_mode_update_emits_new_instruction_message() -> Result<()> }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -414,6 +421,7 @@ async fn collaboration_mode_update_emits_new_instruction_message() -> Result<()> }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -466,6 +474,7 @@ async fn collaboration_mode_update_noop_does_not_append() -> Result<()> { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -489,6 +498,7 @@ async fn collaboration_mode_update_noop_does_not_append() -> Result<()> { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -543,6 +553,7 @@ async fn collaboration_mode_update_emits_new_instruction_message_when_mode_chang }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -569,6 +580,7 @@ async fn collaboration_mode_update_emits_new_instruction_message_when_mode_chang }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -624,6 +636,7 @@ async fn collaboration_mode_update_noop_does_not_append_when_mode_is_unchanged() }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -650,6 +663,7 @@ async fn collaboration_mode_update_noop_does_not_append_when_mode_is_unchanged() }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -708,6 +722,7 @@ async fn resume_replays_collaboration_instructions() -> Result<()> { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -724,6 +739,7 @@ async fn resume_replays_collaboration_instructions() -> Result<()> { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -776,6 +792,7 @@ async fn empty_collaboration_instructions_are_ignored() -> Result<()> { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; diff --git a/codex-rs/core/tests/suite/compact.rs b/codex-rs/core/tests/suite/compact.rs index 140b4ec2b11..be6d30c6fa0 100644 --- a/codex-rs/core/tests/suite/compact.rs +++ b/codex-rs/core/tests/suite/compact.rs @@ -97,6 +97,7 @@ fn disabled_permission_user_turn(text: impl Into, cwd: PathBuf, model: S environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(cwd), approval_policy: Some(AskForApproval::Never), @@ -408,6 +409,7 @@ async fn summarize_context_three_requests_and_instructions() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -433,6 +435,7 @@ async fn summarize_context_three_requests_and_instructions() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -610,6 +613,7 @@ async fn manual_pre_compact_block_decision_does_not_block_compaction() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -683,6 +687,7 @@ async fn compact_hooks_respect_matchers_and_post_runs_after_compaction() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -753,6 +758,7 @@ async fn manual_compact_uses_custom_prompt() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -900,6 +906,7 @@ async fn manual_compact_emits_context_compaction_items() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -1066,6 +1073,7 @@ async fn multiple_auto_compact_per_task_runs_after_token_limit_hit() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -1538,6 +1546,7 @@ async fn auto_compact_runs_after_token_limit_hit() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -1554,6 +1563,7 @@ async fn auto_compact_runs_after_token_limit_hit() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -1570,6 +1580,7 @@ async fn auto_compact_runs_after_token_limit_hit() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -1741,6 +1752,7 @@ async fn auto_compact_emits_context_compaction_items() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -1822,6 +1834,7 @@ async fn auto_compact_starts_after_turn_started() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -1837,6 +1850,7 @@ async fn auto_compact_starts_after_turn_started() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -1852,6 +1866,7 @@ async fn auto_compact_starts_after_turn_started() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -2380,6 +2395,7 @@ async fn auto_compact_persists_rollout_entries() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -2395,6 +2411,7 @@ async fn auto_compact_persists_rollout_entries() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -2410,6 +2427,7 @@ async fn auto_compact_persists_rollout_entries() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -2499,6 +2517,7 @@ async fn manual_compact_retries_after_context_window_error() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -2603,6 +2622,7 @@ async fn manual_compact_non_context_failure_retries_then_emits_task_error() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -2698,6 +2718,7 @@ async fn manual_compact_twice_preserves_latest_user_messages() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -2716,6 +2737,7 @@ async fn manual_compact_twice_preserves_latest_user_messages() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -2734,6 +2756,7 @@ async fn manual_compact_twice_preserves_latest_user_messages() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -2898,6 +2921,7 @@ async fn auto_compact_allows_multiple_attempts_when_interleaved_with_other_turn_ }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -3003,6 +3027,7 @@ async fn snapshot_request_shape_mid_turn_continuation_compaction() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -3434,6 +3459,7 @@ async fn auto_compact_counts_encrypted_reasoning_before_last_user() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -3553,6 +3579,7 @@ async fn auto_compact_runs_when_reasoning_header_clears_between_turns() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -3615,6 +3642,7 @@ async fn snapshot_request_shape_pre_turn_compaction_including_incoming_user_mess }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -3647,6 +3675,7 @@ async fn snapshot_request_shape_pre_turn_compaction_including_incoming_user_mess ], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -3836,6 +3865,7 @@ async fn snapshot_request_shape_pre_turn_compaction_context_window_exceeded() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -3851,6 +3881,7 @@ async fn snapshot_request_shape_pre_turn_compaction_context_window_exceeded() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -3924,6 +3955,7 @@ async fn snapshot_request_shape_manual_compact_without_previous_user_messages() }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await diff --git a/codex-rs/core/tests/suite/compact_remote.rs b/codex-rs/core/tests/suite/compact_remote.rs index b614c09d3a5..d8779bfb058 100644 --- a/codex-rs/core/tests/suite/compact_remote.rs +++ b/codex-rs/core/tests/suite/compact_remote.rs @@ -326,6 +326,7 @@ async fn remote_compact_replaces_history_for_followups() -> Result<()> { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -343,6 +344,7 @@ async fn remote_compact_replaces_history_for_followups() -> Result<()> { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -518,6 +520,7 @@ async fn assert_remote_manual_compact_request_parity( }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -538,6 +541,7 @@ async fn assert_remote_manual_compact_request_parity( ], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -552,6 +556,7 @@ async fn assert_remote_manual_compact_request_parity( }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -572,6 +577,7 @@ async fn assert_remote_manual_compact_request_parity( ], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -586,6 +592,7 @@ async fn assert_remote_manual_compact_request_parity( }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -754,6 +761,7 @@ async fn remote_compact_v2_reuses_compaction_trigger_for_followups() -> Result<( }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -771,6 +779,7 @@ async fn remote_compact_v2_reuses_compaction_trigger_for_followups() -> Result<( }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -874,6 +883,7 @@ async fn remote_compact_v2_retries_failures_with_stream_retry_budget() -> Result }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -891,6 +901,7 @@ async fn remote_compact_v2_retries_failures_with_stream_retry_budget() -> Result }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -977,6 +988,7 @@ async fn remote_compact_v2_accepts_additional_output_items_before_compaction() - }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -994,6 +1006,7 @@ async fn remote_compact_v2_accepts_additional_output_items_before_compaction() - }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -1085,6 +1098,7 @@ async fn remote_compact_filters_deferred_dynamic_tools() -> Result<()> { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -1157,6 +1171,7 @@ async fn remote_compact_runs_automatically() -> Result<()> { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -1238,6 +1253,7 @@ async fn remote_compact_trims_function_call_history_to_fit_context_window() -> R }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -1252,6 +1268,7 @@ async fn remote_compact_trims_function_call_history_to_fit_context_window() -> R }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -1370,6 +1387,7 @@ async fn auto_remote_compact_trims_function_call_history_to_fit_context_window() }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -1384,6 +1402,7 @@ async fn auto_remote_compact_trims_function_call_history_to_fit_context_window() }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -1404,6 +1423,7 @@ async fn auto_remote_compact_trims_function_call_history_to_fit_context_window() }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -1504,6 +1524,7 @@ async fn auto_remote_compact_failure_stops_agent_loop() -> Result<()> { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -1518,6 +1539,7 @@ async fn auto_remote_compact_failure_stops_agent_loop() -> Result<()> { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -1612,6 +1634,7 @@ async fn remote_compact_trim_estimate_uses_session_base_instructions() -> Result }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -1629,6 +1652,7 @@ async fn remote_compact_trim_estimate_uses_session_base_instructions() -> Result }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -1720,6 +1744,7 @@ async fn remote_compact_trim_estimate_uses_session_base_instructions() -> Result }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -1737,6 +1762,7 @@ async fn remote_compact_trim_estimate_uses_session_base_instructions() -> Result }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -1808,6 +1834,7 @@ async fn remote_manual_compact_emits_context_compaction_items() -> Result<()> { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -1889,6 +1916,7 @@ async fn remote_manual_compact_failure_emits_task_error_event() -> Result<()> { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -1973,6 +2001,7 @@ async fn remote_compact_persists_replacement_history_in_rollout() -> Result<()> }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -2116,6 +2145,7 @@ async fn remote_compact_and_resume_refresh_stale_developer_instructions() -> Res }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -2134,6 +2164,7 @@ async fn remote_compact_and_resume_refresh_stale_developer_instructions() -> Res }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -2159,6 +2190,7 @@ async fn remote_compact_and_resume_refresh_stale_developer_instructions() -> Res }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -2255,6 +2287,7 @@ async fn remote_compact_refreshes_stale_developer_instructions_without_resume() }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -2272,6 +2305,7 @@ async fn remote_compact_refreshes_stale_developer_instructions_without_resume() }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -2344,6 +2378,7 @@ async fn snapshot_request_shape_remote_pre_turn_compaction_restates_realtime_sta }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -2358,6 +2393,7 @@ async fn snapshot_request_shape_remote_pre_turn_compaction_restates_realtime_sta }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -2425,6 +2461,7 @@ async fn remote_request_uses_custom_experimental_realtime_start_instructions() - }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -2486,6 +2523,7 @@ async fn snapshot_request_shape_remote_pre_turn_compaction_restates_realtime_end }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -2502,6 +2540,7 @@ async fn snapshot_request_shape_remote_pre_turn_compaction_restates_realtime_end }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -2577,6 +2616,7 @@ async fn snapshot_request_shape_remote_manual_compact_restates_realtime_start() }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -2594,6 +2634,7 @@ async fn snapshot_request_shape_remote_manual_compact_restates_realtime_start() }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -2677,6 +2718,7 @@ async fn snapshot_request_shape_remote_mid_turn_compaction_does_not_restate_real }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -2693,6 +2735,7 @@ async fn snapshot_request_shape_remote_mid_turn_compaction_does_not_restate_real }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -2784,6 +2827,7 @@ async fn snapshot_request_shape_remote_compact_resume_restates_realtime_end() -> }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -2814,6 +2858,7 @@ async fn snapshot_request_shape_remote_compact_resume_restates_realtime_end() -> }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -2903,6 +2948,7 @@ async fn snapshot_request_shape_remote_pre_turn_compaction_including_incoming_us }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -2990,6 +3036,7 @@ async fn snapshot_request_shape_remote_pre_turn_compaction_strips_incoming_model }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -3012,6 +3059,7 @@ async fn snapshot_request_shape_remote_pre_turn_compaction_strips_incoming_model }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -3131,6 +3179,7 @@ async fn snapshot_request_shape_remote_pre_turn_compaction_context_window_exceed }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -3145,6 +3194,7 @@ async fn snapshot_request_shape_remote_pre_turn_compaction_context_window_exceed }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -3230,6 +3280,7 @@ async fn snapshot_request_shape_remote_mid_turn_continuation_compaction() -> Res }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -3308,6 +3359,7 @@ async fn snapshot_request_shape_remote_mid_turn_compaction_summary_only_reinject }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -3394,6 +3446,7 @@ async fn snapshot_request_shape_remote_mid_turn_compaction_multi_summary_reinjec }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -3411,6 +3464,7 @@ async fn snapshot_request_shape_remote_mid_turn_compaction_multi_summary_reinjec }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -3493,6 +3547,7 @@ async fn snapshot_request_shape_remote_manual_compact_without_previous_user_mess }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; diff --git a/codex-rs/core/tests/suite/compact_remote_parity.rs b/codex-rs/core/tests/suite/compact_remote_parity.rs index ccbd427b1f5..8979b2cced1 100644 --- a/codex-rs/core/tests/suite/compact_remote_parity.rs +++ b/codex-rs/core/tests/suite/compact_remote_parity.rs @@ -606,6 +606,7 @@ async fn submit_user_input(codex: &codex_core::CodexThread, items: Vec, text: &str) { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await diff --git a/codex-rs/core/tests/suite/exec_policy.rs b/codex-rs/core/tests/suite/exec_policy.rs index f1e01c22ce7..9e350d27730 100644 --- a/codex-rs/core/tests/suite/exec_policy.rs +++ b/codex-rs/core/tests/suite/exec_policy.rs @@ -54,6 +54,7 @@ async fn submit_user_turn( environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(test.cwd_path().to_path_buf()), approval_policy: Some(approval_policy), @@ -141,6 +142,7 @@ async fn execpolicy_blocks_shell_invocation() -> Result<()> { environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(test.cwd_path().to_path_buf()), approval_policy: Some(AskForApproval::Never), diff --git a/codex-rs/core/tests/suite/fork_thread.rs b/codex-rs/core/tests/suite/fork_thread.rs index 68a167f7902..544c530aa08 100644 --- a/codex-rs/core/tests/suite/fork_thread.rs +++ b/codex-rs/core/tests/suite/fork_thread.rs @@ -57,6 +57,7 @@ async fn fork_thread_twice_drops_to_first_message() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -181,6 +182,7 @@ async fn fork_thread_from_history_does_not_require_source_rollout_path() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await diff --git a/codex-rs/core/tests/suite/hooks.rs b/codex-rs/core/tests/suite/hooks.rs index ee1826ceb9f..f209906b8a5 100644 --- a/codex-rs/core/tests/suite/hooks.rs +++ b/codex-rs/core/tests/suite/hooks.rs @@ -1850,6 +1850,7 @@ async fn blocked_queued_prompt_does_not_strand_earlier_accepted_prompt() -> Resu }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -1869,6 +1870,7 @@ async fn blocked_queued_prompt_does_not_strand_earlier_accepted_prompt() -> Resu }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; diff --git a/codex-rs/core/tests/suite/image_rollout.rs b/codex-rs/core/tests/suite/image_rollout.rs index 085ca96f377..67a79d603fc 100644 --- a/codex-rs/core/tests/suite/image_rollout.rs +++ b/codex-rs/core/tests/suite/image_rollout.rs @@ -127,6 +127,7 @@ async fn copy_paste_local_image_persists_rollout_request_shape() -> anyhow::Resu environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(cwd.path().to_path_buf()), approval_policy: Some(AskForApproval::Never), @@ -223,6 +224,7 @@ async fn drag_drop_image_persists_rollout_request_shape() -> anyhow::Result<()> environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(cwd.path().to_path_buf()), approval_policy: Some(AskForApproval::Never), diff --git a/codex-rs/core/tests/suite/items.rs b/codex-rs/core/tests/suite/items.rs index 82e01e24518..a56b2ab95f5 100644 --- a/codex-rs/core/tests/suite/items.rs +++ b/codex-rs/core/tests/suite/items.rs @@ -58,6 +58,7 @@ fn disabled_plan_turn( environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(cwd), approval_policy: Some(AskForApproval::Never), @@ -119,6 +120,7 @@ async fn user_message_item_is_emitted() -> anyhow::Result<()> { items: vec![expected_input.clone()], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -178,6 +180,7 @@ async fn assistant_message_item_is_emitted() -> anyhow::Result<()> { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -239,6 +242,7 @@ async fn reasoning_item_is_emitted() -> anyhow::Result<()> { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -301,6 +305,7 @@ async fn web_search_item_is_emitted() -> anyhow::Result<()> { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -381,6 +386,7 @@ async fn image_generation_call_event_is_emitted() -> anyhow::Result<()> { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -468,6 +474,7 @@ async fn image_generation_call_event_is_emitted_when_image_save_fails() -> anyho }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -524,6 +531,7 @@ async fn agent_message_content_delta_has_item_metadata() -> anyhow::Result<()> { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -1108,6 +1116,7 @@ async fn reasoning_content_delta_has_item_metadata() -> anyhow::Result<()> { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -1163,6 +1172,7 @@ async fn reasoning_raw_content_delta_respects_flag() -> anyhow::Result<()> { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; diff --git a/codex-rs/core/tests/suite/json_result.rs b/codex-rs/core/tests/suite/json_result.rs index e81d7aa82a1..67275d31468 100644 --- a/codex-rs/core/tests/suite/json_result.rs +++ b/codex-rs/core/tests/suite/json_result.rs @@ -83,6 +83,7 @@ async fn codex_returns_json_result(model: String) -> anyhow::Result<()> { environments: None, final_output_json_schema: Some(serde_json::from_str(SCHEMA)?), responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(cwd.path().to_path_buf()), approval_policy: Some(AskForApproval::Never), diff --git a/codex-rs/core/tests/suite/mcp_turn_metadata.rs b/codex-rs/core/tests/suite/mcp_turn_metadata.rs index 16e6cbe37de..897d8621628 100644 --- a/codex-rs/core/tests/suite/mcp_turn_metadata.rs +++ b/codex-rs/core/tests/suite/mcp_turn_metadata.rs @@ -76,6 +76,7 @@ async fn submit_user_turn( environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(test.cwd.path().to_path_buf()), approval_policy: Some(approval_policy), diff --git a/codex-rs/core/tests/suite/model_switching.rs b/codex-rs/core/tests/suite/model_switching.rs index 7e77fb79d36..fd237a8d5cd 100644 --- a/codex-rs/core/tests/suite/model_switching.rs +++ b/codex-rs/core/tests/suite/model_switching.rs @@ -48,6 +48,7 @@ fn read_only_user_turn(test: &TestCodex, items: Vec, model: String) - environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(test.cwd_path().to_path_buf()), approval_policy: Some(AskForApproval::Never), diff --git a/codex-rs/core/tests/suite/model_visible_layout.rs b/codex-rs/core/tests/suite/model_visible_layout.rs index 17bc0f67037..e02e1ffaefe 100644 --- a/codex-rs/core/tests/suite/model_visible_layout.rs +++ b/codex-rs/core/tests/suite/model_visible_layout.rs @@ -125,6 +125,7 @@ async fn snapshot_model_visible_layout_turn_overrides() -> Result<()> { environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(first_turn_cwd), approval_policy: Some(AskForApproval::Never), @@ -160,6 +161,7 @@ async fn snapshot_model_visible_layout_turn_overrides() -> Result<()> { environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(preturn_context_diff_cwd), approval_policy: Some(AskForApproval::OnRequest), @@ -249,6 +251,7 @@ async fn snapshot_model_visible_layout_cwd_change_does_not_refresh_agents() -> R environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(cwd_one.clone()), approval_policy: Some(AskForApproval::Never), @@ -282,6 +285,7 @@ async fn snapshot_model_visible_layout_cwd_change_does_not_refresh_agents() -> R environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(cwd_two), approval_policy: Some(AskForApproval::Never), @@ -365,6 +369,7 @@ async fn snapshot_model_visible_layout_resume_with_personality_change() -> Resul }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -406,6 +411,7 @@ async fn snapshot_model_visible_layout_resume_with_personality_change() -> Resul environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(resume_override_cwd), approval_policy: Some(AskForApproval::Never), @@ -479,6 +485,7 @@ async fn snapshot_model_visible_layout_resume_override_matches_rollout_model() - }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -520,6 +527,7 @@ async fn snapshot_model_visible_layout_resume_override_matches_rollout_model() - }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; diff --git a/codex-rs/core/tests/suite/models_cache_ttl.rs b/codex-rs/core/tests/suite/models_cache_ttl.rs index 6d11b47cba7..fcd90cbaeab 100644 --- a/codex-rs/core/tests/suite/models_cache_ttl.rs +++ b/codex-rs/core/tests/suite/models_cache_ttl.rs @@ -100,6 +100,7 @@ async fn renews_cache_ttl_on_matching_models_etag() -> Result<()> { environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(test.cwd_path().to_path_buf()), approval_policy: Some(codex_protocol::protocol::AskForApproval::Never), diff --git a/codex-rs/core/tests/suite/models_etag_responses.rs b/codex-rs/core/tests/suite/models_etag_responses.rs index 49f34d8644c..cbd73fffe9c 100644 --- a/codex-rs/core/tests/suite/models_etag_responses.rs +++ b/codex-rs/core/tests/suite/models_etag_responses.rs @@ -112,6 +112,7 @@ async fn refresh_models_on_models_etag_mismatch_and_avoid_duplicate_models_fetch environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(cwd_path), approval_policy: Some(AskForApproval::Never), diff --git a/codex-rs/core/tests/suite/otel.rs b/codex-rs/core/tests/suite/otel.rs index 9d2df4e60e7..7f5fa260cd6 100644 --- a/codex-rs/core/tests/suite/otel.rs +++ b/codex-rs/core/tests/suite/otel.rs @@ -122,6 +122,7 @@ async fn responses_api_emits_api_request_event() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -168,6 +169,7 @@ async fn process_sse_emits_tracing_for_output_item() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -214,6 +216,7 @@ async fn process_sse_emits_failed_event_on_parse_error() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -261,6 +264,7 @@ async fn process_sse_records_failed_event_when_stream_closes_without_completed() }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -328,6 +332,7 @@ async fn process_sse_failed_event_records_response_error_message() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -393,6 +398,7 @@ async fn process_sse_failed_event_logs_parse_error() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -445,6 +451,7 @@ async fn process_sse_failed_event_logs_missing_error() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -506,6 +513,7 @@ async fn process_sse_failed_event_logs_response_completed_parse_error() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -561,6 +569,7 @@ async fn process_sse_emits_completed_telemetry() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -640,6 +649,7 @@ async fn turn_and_completed_response_spans_record_token_usage() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -728,6 +738,7 @@ async fn handle_responses_span_records_response_kind_and_tool_name() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -822,6 +833,7 @@ async fn record_responses_sets_span_fields_for_response_events() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -911,6 +923,7 @@ async fn handle_response_item_records_tool_result_for_custom_tool_call() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -987,6 +1000,7 @@ async fn handle_response_item_records_tool_result_for_function_call() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -1064,6 +1078,7 @@ async fn handle_response_item_records_tool_result_for_shell_command_call() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -1173,6 +1188,7 @@ async fn handle_shell_command_autoapprove_from_config_records_tool_decision() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -1228,6 +1244,7 @@ async fn handle_shell_command_user_approved_records_tool_decision() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -1298,6 +1315,7 @@ async fn handle_shell_command_user_approved_for_session_records_tool_decision() }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -1368,6 +1386,7 @@ async fn handle_sandbox_error_user_approves_retry_records_tool_decision() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -1438,6 +1457,7 @@ async fn handle_shell_command_user_denies_records_tool_decision() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -1508,6 +1528,7 @@ async fn handle_sandbox_error_user_approves_for_session_records_tool_decision() }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -1579,6 +1600,7 @@ async fn handle_sandbox_error_user_denies_records_tool_decision() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await diff --git a/codex-rs/core/tests/suite/pending_input.rs b/codex-rs/core/tests/suite/pending_input.rs index b057b86171b..db076f989a3 100644 --- a/codex-rs/core/tests/suite/pending_input.rs +++ b/codex-rs/core/tests/suite/pending_input.rs @@ -103,6 +103,7 @@ async fn submit_user_input(codex: &CodexThread, text: &str) { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -121,6 +122,7 @@ async fn submit_danger_full_access_user_turn(test: &TestCodex, text: &str) { environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(test.config.cwd.to_path_buf()), approval_policy: Some(AskForApproval::Never), @@ -291,6 +293,7 @@ async fn injected_user_input_triggers_follow_up_request_with_deltas() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -310,6 +313,7 @@ async fn injected_user_input_triggers_follow_up_request_with_deltas() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await diff --git a/codex-rs/core/tests/suite/permissions_messages.rs b/codex-rs/core/tests/suite/permissions_messages.rs index b77e65c0f52..45d2e32549f 100644 --- a/codex-rs/core/tests/suite/permissions_messages.rs +++ b/codex-rs/core/tests/suite/permissions_messages.rs @@ -58,6 +58,7 @@ async fn permissions_message_sent_once_on_start() -> Result<()> { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -98,6 +99,7 @@ async fn permissions_message_added_on_override_change() -> Result<()> { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -121,6 +123,7 @@ async fn permissions_message_added_on_override_change() -> Result<()> { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -167,6 +170,7 @@ async fn permissions_message_not_added_when_no_change() -> Result<()> { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -181,6 +185,7 @@ async fn permissions_message_not_added_when_no_change() -> Result<()> { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -227,6 +232,7 @@ async fn permissions_message_omitted_when_disabled() -> Result<()> { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -250,6 +256,7 @@ async fn permissions_message_omitted_when_disabled() -> Result<()> { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -309,6 +316,7 @@ async fn resume_replays_permissions_messages() -> Result<()> { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -333,6 +341,7 @@ async fn resume_replays_permissions_messages() -> Result<()> { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -349,6 +358,7 @@ async fn resume_replays_permissions_messages() -> Result<()> { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -409,6 +419,7 @@ async fn resume_and_fork_append_permissions_messages() -> Result<()> { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -433,6 +444,7 @@ async fn resume_and_fork_append_permissions_messages() -> Result<()> { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -455,6 +467,7 @@ async fn resume_and_fork_append_permissions_messages() -> Result<()> { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -491,6 +504,7 @@ async fn resume_and_fork_append_permissions_messages() -> Result<()> { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -552,6 +566,7 @@ async fn permissions_message_includes_writable_roots() -> Result<()> { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; diff --git a/codex-rs/core/tests/suite/personality.rs b/codex-rs/core/tests/suite/personality.rs index 96695769c9a..06781dc11d4 100644 --- a/codex-rs/core/tests/suite/personality.rs +++ b/codex-rs/core/tests/suite/personality.rs @@ -68,6 +68,7 @@ fn read_only_text_turn_with_personality( environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(test.cwd_path().to_path_buf()), approval_policy: Some(approval_policy), diff --git a/codex-rs/core/tests/suite/plugins.rs b/codex-rs/core/tests/suite/plugins.rs index 45fdf3df076..e13347af0ac 100644 --- a/codex-rs/core/tests/suite/plugins.rs +++ b/codex-rs/core/tests/suite/plugins.rs @@ -227,6 +227,7 @@ async fn capability_sections_render_in_developer_message_in_order() -> Result<() }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -306,6 +307,7 @@ async fn explicit_plugin_mentions_inject_plugin_guidance() -> Result<()> { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -388,6 +390,7 @@ async fn explicit_plugin_mentions_track_plugin_used_analytics() -> Result<()> { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; diff --git a/codex-rs/core/tests/suite/prompt_caching.rs b/codex-rs/core/tests/suite/prompt_caching.rs index 4ce137a557c..836761961a3 100644 --- a/codex-rs/core/tests/suite/prompt_caching.rs +++ b/codex-rs/core/tests/suite/prompt_caching.rs @@ -153,6 +153,7 @@ async fn prompt_tools_are_consistent_across_requests() -> anyhow::Result<()> { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -167,6 +168,7 @@ async fn prompt_tools_are_consistent_across_requests() -> anyhow::Result<()> { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -250,6 +252,7 @@ async fn gpt_5_tools_without_apply_patch_append_apply_patch_instructions() -> an }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -264,6 +267,7 @@ async fn gpt_5_tools_without_apply_patch_append_apply_patch_instructions() -> an }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -329,6 +333,7 @@ async fn prefixes_context_and_instructions_once_and_consistently_across_requests }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -343,6 +348,7 @@ async fn prefixes_context_and_instructions_once_and_consistently_across_requests }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -426,6 +432,7 @@ async fn overrides_turn_context_but_keeps_cached_prefix_and_key_constant() -> an }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -464,6 +471,7 @@ async fn overrides_turn_context_but_keeps_cached_prefix_and_key_constant() -> an }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -545,6 +553,7 @@ async fn override_before_first_turn_emits_environment_context() -> anyhow::Resul }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -699,6 +708,7 @@ async fn per_turn_overrides_keep_cached_prefix_and_key_constant() -> anyhow::Res }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -724,6 +734,7 @@ async fn per_turn_overrides_keep_cached_prefix_and_key_constant() -> anyhow::Res environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(new_cwd.path().to_path_buf()), approval_policy: Some(AskForApproval::Never), @@ -838,6 +849,7 @@ async fn send_user_turn_with_no_changes_does_not_send_environment_context() -> a environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(default_cwd.to_path_buf()), approval_policy: Some(default_approval_policy), @@ -866,6 +878,7 @@ async fn send_user_turn_with_no_changes_does_not_send_environment_context() -> a environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(default_cwd.to_path_buf()), approval_policy: Some(default_approval_policy), @@ -977,6 +990,7 @@ async fn send_user_turn_with_changes_sends_environment_context() -> anyhow::Resu environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(default_cwd.to_path_buf()), approval_policy: Some(default_approval_policy), @@ -1007,6 +1021,7 @@ async fn send_user_turn_with_changes_sends_environment_context() -> anyhow::Resu environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(default_cwd.to_path_buf()), approval_policy: Some(AskForApproval::Never), diff --git a/codex-rs/core/tests/suite/quota_exceeded.rs b/codex-rs/core/tests/suite/quota_exceeded.rs index 413855f6413..904c116cfbc 100644 --- a/codex-rs/core/tests/suite/quota_exceeded.rs +++ b/codex-rs/core/tests/suite/quota_exceeded.rs @@ -48,6 +48,7 @@ async fn quota_exceeded_emits_single_error_event() -> Result<()> { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await diff --git a/codex-rs/core/tests/suite/realtime_conversation.rs b/codex-rs/core/tests/suite/realtime_conversation.rs index 232d2380b0a..05428799ad3 100644 --- a/codex-rs/core/tests/suite/realtime_conversation.rs +++ b/codex-rs/core/tests/suite/realtime_conversation.rs @@ -2168,6 +2168,7 @@ async fn conversation_user_text_turn_is_sent_to_realtime_when_active() -> Result }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -2303,6 +2304,7 @@ async fn conversation_user_text_turn_is_capped_when_mirrored_to_realtime() -> Re }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -3499,6 +3501,7 @@ async fn inbound_handoff_request_steers_active_turn() -> Result<()> { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; diff --git a/codex-rs/core/tests/suite/remote_env.rs b/codex-rs/core/tests/suite/remote_env.rs index 873796ff6ce..34cd119f66a 100644 --- a/codex-rs/core/tests/suite/remote_env.rs +++ b/codex-rs/core/tests/suite/remote_env.rs @@ -75,6 +75,7 @@ async fn submit_turn_with_approval_and_environments( environments: Some(environments), final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(test.cwd.path().to_path_buf()), approval_policy: Some(AskForApproval::OnRequest), diff --git a/codex-rs/core/tests/suite/remote_models.rs b/codex-rs/core/tests/suite/remote_models.rs index 18ebd732b7f..b7b16f9c292 100644 --- a/codex-rs/core/tests/suite/remote_models.rs +++ b/codex-rs/core/tests/suite/remote_models.rs @@ -160,6 +160,7 @@ async fn remote_models_config_context_window_override_clamps_to_max_context_wind environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -227,6 +228,7 @@ async fn remote_models_config_override_above_max_uses_max_context_window() -> Re environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -293,6 +295,7 @@ async fn remote_models_use_context_window_when_config_override_is_absent() -> Re environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -372,6 +375,7 @@ async fn remote_models_long_model_slug_is_sent_with_high_reasoning() -> Result<( environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -422,6 +426,7 @@ async fn namespaced_model_slug_uses_catalog_metadata_without_fallback_warning() environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -575,6 +580,7 @@ async fn remote_models_remote_model_uses_unified_exec() -> Result<()> { environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(cwd_path), approval_policy: Some(AskForApproval::Never), @@ -798,6 +804,7 @@ async fn remote_models_apply_remote_base_instructions() -> Result<()> { environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(cwd_path), approval_policy: Some(AskForApproval::Never), diff --git a/codex-rs/core/tests/suite/request_compression.rs b/codex-rs/core/tests/suite/request_compression.rs index 2d66389d534..fe9cb1e5f84 100644 --- a/codex-rs/core/tests/suite/request_compression.rs +++ b/codex-rs/core/tests/suite/request_compression.rs @@ -47,6 +47,7 @@ async fn request_body_is_zstd_compressed_for_codex_backend_when_enabled() -> any }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -97,6 +98,7 @@ async fn request_body_is_not_compressed_for_api_key_auth_even_when_enabled() -> }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; diff --git a/codex-rs/core/tests/suite/request_permissions.rs b/codex-rs/core/tests/suite/request_permissions.rs index 98001046859..a78e4a016eb 100644 --- a/codex-rs/core/tests/suite/request_permissions.rs +++ b/codex-rs/core/tests/suite/request_permissions.rs @@ -198,6 +198,7 @@ async fn submit_turn( environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(test.cwd.path().to_path_buf()), approval_policy: Some(approval_policy), diff --git a/codex-rs/core/tests/suite/request_permissions_tool.rs b/codex-rs/core/tests/suite/request_permissions_tool.rs index 84e101e73ae..a122cc399b3 100644 --- a/codex-rs/core/tests/suite/request_permissions_tool.rs +++ b/codex-rs/core/tests/suite/request_permissions_tool.rs @@ -150,6 +150,7 @@ async fn submit_turn( environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(test.cwd.path().to_path_buf()), approval_policy: Some(approval_policy), diff --git a/codex-rs/core/tests/suite/request_user_input.rs b/codex-rs/core/tests/suite/request_user_input.rs index e0ec684797d..d09071d72d9 100644 --- a/codex-rs/core/tests/suite/request_user_input.rs +++ b/codex-rs/core/tests/suite/request_user_input.rs @@ -144,6 +144,7 @@ async fn request_user_input_round_trip_for_mode(mode: ModeKind) -> anyhow::Resul environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(cwd.path().to_path_buf()), approval_policy: Some(AskForApproval::Never), @@ -287,6 +288,7 @@ async fn request_user_input_interrupt_emits_deferred_token_count() -> anyhow::Re environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(cwd.path().to_path_buf()), approval_policy: Some(AskForApproval::Never), @@ -391,6 +393,7 @@ where environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(cwd.path().to_path_buf()), approval_policy: Some(AskForApproval::Never), diff --git a/codex-rs/core/tests/suite/responses_api_proxy_headers.rs b/codex-rs/core/tests/suite/responses_api_proxy_headers.rs index c18b4319844..809a8bb7010 100644 --- a/codex-rs/core/tests/suite/responses_api_proxy_headers.rs +++ b/codex-rs/core/tests/suite/responses_api_proxy_headers.rs @@ -143,6 +143,7 @@ async fn submit_turn_with_timeout(test: &TestCodex, prompt: &str) -> Result<()> environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(cwd), approval_policy: Some(AskForApproval::OnRequest), diff --git a/codex-rs/core/tests/suite/resume.rs b/codex-rs/core/tests/suite/resume.rs index fc7a23215f8..0dc7eaddcbd 100644 --- a/codex-rs/core/tests/suite/resume.rs +++ b/codex-rs/core/tests/suite/resume.rs @@ -93,6 +93,7 @@ async fn resume_includes_initial_messages_from_rollout_events() -> Result<()> { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -179,6 +180,7 @@ async fn resume_includes_initial_messages_from_reasoning_events() -> Result<()> }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -269,6 +271,7 @@ async fn resume_switches_models_preserves_base_instructions() -> Result<()> { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -312,6 +315,7 @@ async fn resume_switches_models_preserves_base_instructions() -> Result<()> { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -330,6 +334,7 @@ async fn resume_switches_models_preserves_base_instructions() -> Result<()> { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -403,6 +408,7 @@ async fn resume_model_switch_is_not_duplicated_after_pre_turn_override() -> Resu }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -441,6 +447,7 @@ async fn resume_model_switch_is_not_duplicated_after_pre_turn_override() -> Resu }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; diff --git a/codex-rs/core/tests/suite/review.rs b/codex-rs/core/tests/suite/review.rs index 05ec967d09d..802035d7dc2 100644 --- a/codex-rs/core/tests/suite/review.rs +++ b/codex-rs/core/tests/suite/review.rs @@ -684,6 +684,7 @@ async fn review_history_surfaces_in_parent_session() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await diff --git a/codex-rs/core/tests/suite/rmcp_client.rs b/codex-rs/core/tests/suite/rmcp_client.rs index 864fb1e07a0..a4748945001 100644 --- a/codex-rs/core/tests/suite/rmcp_client.rs +++ b/codex-rs/core/tests/suite/rmcp_client.rs @@ -131,6 +131,7 @@ fn user_turn_with_permission_profile( environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(cwd), approval_policy: Some(AskForApproval::Never), diff --git a/codex-rs/core/tests/suite/safety_check_downgrade.rs b/codex-rs/core/tests/suite/safety_check_downgrade.rs index ab985ce0f79..3d4cb93b9c5 100644 --- a/codex-rs/core/tests/suite/safety_check_downgrade.rs +++ b/codex-rs/core/tests/suite/safety_check_downgrade.rs @@ -45,6 +45,7 @@ fn disabled_text_turn(test: &TestCodex, text: &str) -> Op { environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(test.cwd_path().to_path_buf()), approval_policy: Some(AskForApproval::Never), diff --git a/codex-rs/core/tests/suite/search_tool.rs b/codex-rs/core/tests/suite/search_tool.rs index 26531e9d2c9..f2133135f5b 100644 --- a/codex-rs/core/tests/suite/search_tool.rs +++ b/codex-rs/core/tests/suite/search_tool.rs @@ -452,6 +452,7 @@ async fn tool_search_returns_deferred_tools_without_follow_up_tool_injection() - }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -865,6 +866,7 @@ async fn tool_search_returns_deferred_dynamic_tool_and_routes_follow_up_call() - }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -1173,6 +1175,7 @@ async fn tool_search_surfaced_mcp_tool_errors_are_returned_to_model() -> Result< }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; @@ -1493,6 +1496,7 @@ async fn tool_search_matches_dynamic_tools_by_name_description_namespace_and_sch }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; diff --git a/codex-rs/core/tests/suite/shell_snapshot.rs b/codex-rs/core/tests/suite/shell_snapshot.rs index 14241ffafb6..69db30b21b4 100644 --- a/codex-rs/core/tests/suite/shell_snapshot.rs +++ b/codex-rs/core/tests/suite/shell_snapshot.rs @@ -167,6 +167,7 @@ async fn run_snapshot_command_with_options( environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(cwd), approval_policy: Some(AskForApproval::Never), @@ -267,6 +268,7 @@ async fn run_shell_command_snapshot_with_options( environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(cwd), approval_policy: Some(AskForApproval::Never), @@ -347,6 +349,7 @@ async fn run_tool_turn_on_harness( environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(cwd), approval_policy: Some(AskForApproval::Never), @@ -590,6 +593,7 @@ async fn shell_command_snapshot_still_intercepts_apply_patch() -> Result<()> { environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(cwd.clone()), approval_policy: Some(AskForApproval::Never), diff --git a/codex-rs/core/tests/suite/skill_approval.rs b/codex-rs/core/tests/suite/skill_approval.rs index ad8ad6a91a5..2335ba64155 100644 --- a/codex-rs/core/tests/suite/skill_approval.rs +++ b/codex-rs/core/tests/suite/skill_approval.rs @@ -54,6 +54,7 @@ async fn submit_turn_with_policies( environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(test.cwd_path().to_path_buf()), approval_policy: Some(approval_policy), diff --git a/codex-rs/core/tests/suite/skills.rs b/codex-rs/core/tests/suite/skills.rs index 9173f60c4a7..e21668fa842 100644 --- a/codex-rs/core/tests/suite/skills.rs +++ b/codex-rs/core/tests/suite/skills.rs @@ -88,6 +88,7 @@ async fn user_turn_includes_skill_instructions() -> Result<()> { environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(test.config.cwd.to_path_buf()), approval_policy: Some(AskForApproval::Never), diff --git a/codex-rs/core/tests/suite/sqlite_state.rs b/codex-rs/core/tests/suite/sqlite_state.rs index f5dd75670df..6192ed3e3e7 100644 --- a/codex-rs/core/tests/suite/sqlite_state.rs +++ b/codex-rs/core/tests/suite/sqlite_state.rs @@ -413,6 +413,7 @@ async fn mcp_call_marks_thread_memory_mode_polluted_when_configured() -> Result< environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(cwd), approval_policy: Some(AskForApproval::Never), diff --git a/codex-rs/core/tests/suite/stream_error_allows_next_turn.rs b/codex-rs/core/tests/suite/stream_error_allows_next_turn.rs index 5709cdd12b8..d82692c26c9 100644 --- a/codex-rs/core/tests/suite/stream_error_allows_next_turn.rs +++ b/codex-rs/core/tests/suite/stream_error_allows_next_turn.rs @@ -101,6 +101,7 @@ async fn continue_after_stream_error() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await @@ -123,6 +124,7 @@ async fn continue_after_stream_error() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await diff --git a/codex-rs/core/tests/suite/stream_no_completed.rs b/codex-rs/core/tests/suite/stream_no_completed.rs index 40763960f40..471c60db5a9 100644 --- a/codex-rs/core/tests/suite/stream_no_completed.rs +++ b/codex-rs/core/tests/suite/stream_no_completed.rs @@ -83,6 +83,7 @@ async fn retries_on_early_close() { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await diff --git a/codex-rs/core/tests/suite/subagent_notifications.rs b/codex-rs/core/tests/suite/subagent_notifications.rs index d3c07a11539..8891f6ffec8 100644 --- a/codex-rs/core/tests/suite/subagent_notifications.rs +++ b/codex-rs/core/tests/suite/subagent_notifications.rs @@ -771,6 +771,7 @@ async fn subagent_stop_replaces_stop_and_skips_internal_subagents() -> Result<() environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(test.config.cwd.to_path_buf()), approval_policy: Some(AskForApproval::Never), diff --git a/codex-rs/core/tests/suite/tool_harness.rs b/codex-rs/core/tests/suite/tool_harness.rs index 2227e5b34e1..a6f808b9d79 100644 --- a/codex-rs/core/tests/suite/tool_harness.rs +++ b/codex-rs/core/tests/suite/tool_harness.rs @@ -110,6 +110,7 @@ async fn shell_command_tool_executes_command_and_streams_output() -> anyhow::Res environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(cwd_path), approval_policy: Some(AskForApproval::Never), @@ -191,6 +192,7 @@ async fn update_plan_tool_emits_plan_update_event() -> anyhow::Result<()> { environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(cwd_path), approval_policy: Some(AskForApproval::Never), @@ -282,6 +284,7 @@ async fn update_plan_tool_rejects_malformed_payload() -> anyhow::Result<()> { environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(cwd_path), approval_policy: Some(AskForApproval::Never), @@ -383,6 +386,7 @@ async fn apply_patch_tool_executes_and_emits_patch_events() -> anyhow::Result<() environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(cwd_path), approval_policy: Some(AskForApproval::Never), @@ -521,6 +525,7 @@ async fn apply_patch_reports_parse_diagnostics() -> anyhow::Result<()> { environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(cwd_path), approval_policy: Some(AskForApproval::Never), diff --git a/codex-rs/core/tests/suite/tool_parallelism.rs b/codex-rs/core/tests/suite/tool_parallelism.rs index 6663991e020..76bb27c4230 100644 --- a/codex-rs/core/tests/suite/tool_parallelism.rs +++ b/codex-rs/core/tests/suite/tool_parallelism.rs @@ -45,6 +45,7 @@ async fn run_turn(test: &TestCodex, prompt: &str) -> anyhow::Result<()> { environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(test.cwd.path().to_path_buf()), approval_policy: Some(AskForApproval::Never), @@ -371,6 +372,7 @@ async fn shell_tools_start_before_response_completed_when_stream_delayed() -> an environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(test.cwd.path().to_path_buf()), approval_policy: Some(AskForApproval::Never), diff --git a/codex-rs/core/tests/suite/truncation.rs b/codex-rs/core/tests/suite/truncation.rs index b98c438f404..6756bd43c2d 100644 --- a/codex-rs/core/tests/suite/truncation.rs +++ b/codex-rs/core/tests/suite/truncation.rs @@ -523,6 +523,7 @@ async fn mcp_image_output_preserves_image_and_no_text_summary() -> Result<()> { environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(fixture.cwd.path().to_path_buf()), approval_policy: Some(AskForApproval::Never), diff --git a/codex-rs/core/tests/suite/unified_exec.rs b/codex-rs/core/tests/suite/unified_exec.rs index 9eb831b084d..ba754b025f3 100644 --- a/codex-rs/core/tests/suite/unified_exec.rs +++ b/codex-rs/core/tests/suite/unified_exec.rs @@ -200,6 +200,7 @@ async fn submit_unified_exec_turn( environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(test.config.cwd.to_path_buf()), approval_policy: Some(AskForApproval::Never), @@ -291,6 +292,7 @@ async fn unified_exec_intercepts_apply_patch_exec_command() -> Result<()> { environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(cwd), approval_policy: Some(AskForApproval::Never), @@ -2146,6 +2148,7 @@ async fn unified_exec_keeps_long_running_session_after_turn_end() -> Result<()> environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(turn_cwd), approval_policy: Some(AskForApproval::Never), @@ -2249,6 +2252,7 @@ async fn unified_exec_interrupt_preserves_long_running_session() -> Result<()> { environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(turn_cwd), approval_policy: Some(AskForApproval::Never), @@ -2721,6 +2725,7 @@ async fn unified_exec_runs_under_sandbox() -> Result<()> { environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(turn_cwd), approval_policy: Some(AskForApproval::Never), @@ -2843,6 +2848,7 @@ async fn unified_exec_enforces_glob_deny_read_policy() -> Result<()> { environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(turn_cwd), approval_policy: Some(AskForApproval::Never), @@ -2981,6 +2987,7 @@ async fn unified_exec_python_prompt_under_seatbelt() -> Result<()> { environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(turn_cwd), approval_policy: Some(AskForApproval::Never), diff --git a/codex-rs/core/tests/suite/user_notification.rs b/codex-rs/core/tests/suite/user_notification.rs index 343afd8d533..054d926b2b8 100644 --- a/codex-rs/core/tests/suite/user_notification.rs +++ b/codex-rs/core/tests/suite/user_notification.rs @@ -64,6 +64,7 @@ mv "${tmp_path}" "${payload_path}""#, }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; diff --git a/codex-rs/core/tests/suite/user_shell_cmd.rs b/codex-rs/core/tests/suite/user_shell_cmd.rs index 536ee7b4959..3e2263705ab 100644 --- a/codex-rs/core/tests/suite/user_shell_cmd.rs +++ b/codex-rs/core/tests/suite/user_shell_cmd.rs @@ -182,6 +182,7 @@ async fn user_shell_command_does_not_replace_active_turn() -> anyhow::Result<()> environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(cwd), approval_policy: Some(AskForApproval::Never), diff --git a/codex-rs/core/tests/suite/view_image.rs b/codex-rs/core/tests/suite/view_image.rs index 867ba108588..e6320ba1a72 100644 --- a/codex-rs/core/tests/suite/view_image.rs +++ b/codex-rs/core/tests/suite/view_image.rs @@ -77,6 +77,7 @@ fn disabled_user_turn(test: &TestCodex, items: Vec, model: String) -> environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(test.config.cwd.to_path_buf()), approval_policy: Some(AskForApproval::Never), diff --git a/codex-rs/core/tests/suite/websocket_fallback.rs b/codex-rs/core/tests/suite/websocket_fallback.rs index 32a6e30caff..be33467d6a5 100644 --- a/codex-rs/core/tests/suite/websocket_fallback.rs +++ b/codex-rs/core/tests/suite/websocket_fallback.rs @@ -160,6 +160,7 @@ async fn websocket_fallback_hides_first_websocket_retry_stream_error() -> Result environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: codex_protocol::protocol::ThreadSettingsOverrides { cwd: Some(cwd.path().to_path_buf()), approval_policy: Some(AskForApproval::Never), diff --git a/codex-rs/core/tests/suite/window_headers.rs b/codex-rs/core/tests/suite/window_headers.rs index 76fcacf7a99..953b075f656 100644 --- a/codex-rs/core/tests/suite/window_headers.rs +++ b/codex-rs/core/tests/suite/window_headers.rs @@ -112,6 +112,7 @@ async fn submit_user_turn(codex: &Arc, text: &str) -> Result<()> { }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await?; diff --git a/codex-rs/mcp-server/src/codex_tool_runner.rs b/codex-rs/mcp-server/src/codex_tool_runner.rs index 167d56da5bf..78714d1eaa0 100644 --- a/codex-rs/mcp-server/src/codex_tool_runner.rs +++ b/codex-rs/mcp-server/src/codex_tool_runner.rs @@ -116,6 +116,7 @@ pub async fn run_codex_tool_session( }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }, trace: None, @@ -166,6 +167,7 @@ pub async fn run_codex_tool_session_reply( }], final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await diff --git a/codex-rs/memories/write/src/runtime.rs b/codex-rs/memories/write/src/runtime.rs index b1ffb2d215f..7bf2fe159d1 100644 --- a/codex-rs/memories/write/src/runtime.rs +++ b/codex-rs/memories/write/src/runtime.rs @@ -261,6 +261,7 @@ impl MemoryStartupContext { environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await diff --git a/codex-rs/protocol/src/protocol.rs b/codex-rs/protocol/src/protocol.rs index 7d955f1d1f2..c3d9696d4e2 100644 --- a/codex-rs/protocol/src/protocol.rs +++ b/codex-rs/protocol/src/protocol.rs @@ -655,6 +655,7 @@ impl From> for Op { items: value, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: ThreadSettingsOverrides::default(), } } @@ -4939,6 +4940,7 @@ mod tests { items: Vec::new(), final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }; @@ -4959,6 +4961,7 @@ mod tests { items: Vec::new(), final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), } ); @@ -4981,6 +4984,7 @@ mod tests { items: Vec::new(), final_output_json_schema: Some(schema.clone()), responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }; @@ -5007,6 +5011,7 @@ mod tests { "fiber_run_id".to_string(), "fiber-123".to_string(), )])), + additional_context: Default::default(), thread_settings: Default::default(), }; diff --git a/codex-rs/thread-manager-sample/src/main.rs b/codex-rs/thread-manager-sample/src/main.rs index 634327d007d..6f9ebd868a5 100644 --- a/codex-rs/thread-manager-sample/src/main.rs +++ b/codex-rs/thread-manager-sample/src/main.rs @@ -297,6 +297,7 @@ async fn run_turn(thread: &CodexThread, thread_id: &str, prompt: String) -> anyh environments: None, final_output_json_schema: None, responsesapi_client_metadata: None, + additional_context: Default::default(), thread_settings: Default::default(), }) .await From 5bc43bd5513dda35b6a047f766db89a7c970e733 Mon Sep 17 00:00:00 2001 From: pakrym-oai Date: Fri, 22 May 2026 15:08:46 -0700 Subject: [PATCH 03/17] Add experimental turn additional context --- .../schema/json/ClientRequest.json | 2724 +++++++++++++---- ...CommandExecutionRequestApprovalParams.json | 21 + .../FuzzyFileSearchSessionStartParams.json | 20 + .../FuzzyFileSearchSessionStartResponse.json | 5 + .../FuzzyFileSearchSessionStopParams.json | 13 + .../FuzzyFileSearchSessionStopResponse.json | 5 + .../FuzzyFileSearchSessionUpdateParams.json | 17 + .../FuzzyFileSearchSessionUpdateResponse.json | 5 + .../schema/json/ServerRequest.json | 21 + .../codex_app_server_protocol.schemas.json | 2261 +++++++++++++- .../codex_app_server_protocol.v2.schemas.json | 2147 ++++++++++++- .../json/v2/CollaborationModeListParams.json | 6 + .../v2/CollaborationModeListResponse.json | 84 + .../schema/json/v2/CommandExecParams.json | 7 + .../schema/json/v2/ConfigReadResponse.json | 11 + .../v2/ConfigRequirementsReadResponse.json | 29 + .../schema/json/v2/EnvironmentAddParams.json | 17 + .../json/v2/EnvironmentAddResponse.json | 5 + .../schema/json/v2/MemoryResetResponse.json | 5 + .../json/v2/MockExperimentalMethodParams.json | 14 + .../v2/MockExperimentalMethodResponse.json | 14 + .../schema/json/v2/ProcessKillParams.json | 15 + .../schema/json/v2/ProcessKillResponse.json | 6 + .../json/v2/ProcessResizePtyParams.json | 48 + .../json/v2/ProcessResizePtyResponse.json | 6 + .../schema/json/v2/ProcessSpawnParams.json | 113 + .../schema/json/v2/ProcessSpawnResponse.json | 6 + .../json/v2/ProcessWriteStdinParams.json | 26 + .../json/v2/ProcessWriteStdinResponse.json | 6 + .../json/v2/RemoteControlDisableResponse.json | 38 + .../json/v2/RemoteControlEnableResponse.json | 38 + .../v2/RemoteControlStatusReadResponse.json | 38 + .../ThreadBackgroundTerminalsCleanParams.json | 13 + ...hreadBackgroundTerminalsCleanResponse.json | 5 + .../v2/ThreadDecrementElicitationParams.json | 15 + .../ThreadDecrementElicitationResponse.json | 22 + .../schema/json/v2/ThreadForkParams.json | 33 + .../schema/json/v2/ThreadForkResponse.json | 20 + .../v2/ThreadIncrementElicitationParams.json | 15 + .../ThreadIncrementElicitationResponse.json | 22 + .../json/v2/ThreadMemoryModeSetParams.json | 26 + .../json/v2/ThreadMemoryModeSetResponse.json | 5 + .../v2/ThreadRealtimeAppendAudioParams.json | 58 + .../v2/ThreadRealtimeAppendAudioResponse.json | 6 + .../v2/ThreadRealtimeAppendTextParams.json | 18 + .../v2/ThreadRealtimeAppendTextResponse.json | 6 + .../v2/ThreadRealtimeListVoicesParams.json | 6 + .../v2/ThreadRealtimeListVoicesResponse.json | 69 + .../json/v2/ThreadRealtimeStartParams.json | 130 + .../json/v2/ThreadRealtimeStartResponse.json | 6 + .../json/v2/ThreadRealtimeStopParams.json | 14 + .../json/v2/ThreadRealtimeStopResponse.json | 6 + .../schema/json/v2/ThreadResumeParams.json | 43 + .../schema/json/v2/ThreadResumeResponse.json | 20 + .../schema/json/v2/ThreadSearchParams.json | 100 + .../schema/json/v2/ThreadSearchResponse.json | 2097 +++++++++++++ .../json/v2/ThreadSettingsUpdateParams.json | 381 +++ .../json/v2/ThreadSettingsUpdateResponse.json | 5 + .../schema/json/v2/ThreadStartParams.json | 51 + .../schema/json/v2/ThreadStartResponse.json | 20 + .../json/v2/ThreadTurnsItemsListParams.json | 53 + .../json/v2/ThreadTurnsItemsListResponse.json | 1434 +++++++++ .../schema/json/v2/ThreadTurnsListParams.json | 85 + .../json/v2/ThreadTurnsListResponse.json | 1707 +++++++++++ .../schema/json/v2/TurnStartParams.json | 69 + .../schema/json/v2/TurnSteerParams.json | 31 + .../schema/typescript/ClientRequest.ts | 25 +- .../FuzzyFileSearchSessionStartParams.ts | 5 + .../FuzzyFileSearchSessionStartResponse.ts | 5 + .../FuzzyFileSearchSessionStopParams.ts | 5 + .../FuzzyFileSearchSessionStopResponse.ts | 5 + .../FuzzyFileSearchSessionUpdateParams.ts | 5 + .../FuzzyFileSearchSessionUpdateResponse.ts | 5 + .../schema/typescript/index.ts | 6 + .../typescript/v2/AdditionalContextEntry.ts | 5 + .../v2/CollaborationModeListParams.ts | 8 + .../v2/CollaborationModeListResponse.ts | 9 + .../schema/typescript/v2/CommandExecParams.ts | 48 +- .../CommandExecutionRequestApprovalParams.ts | 39 +- .../schema/typescript/v2/Config.ts | 6 +- .../typescript/v2/ConfigRequirements.ts | 5 +- .../typescript/v2/EnvironmentAddParams.ts | 5 + .../typescript/v2/EnvironmentAddResponse.ts | 5 + .../typescript/v2/MemoryResetResponse.ts | 5 + .../v2/MockExperimentalMethodParams.ts | 9 + .../v2/MockExperimentalMethodResponse.ts | 9 + .../schema/typescript/v2/ProcessKillParams.ts | 12 + .../typescript/v2/ProcessKillResponse.ts | 8 + .../typescript/v2/ProcessResizePtyParams.ts | 17 + .../typescript/v2/ProcessResizePtyResponse.ts | 8 + .../typescript/v2/ProcessSpawnParams.ts | 73 + .../typescript/v2/ProcessSpawnResponse.ts | 8 + .../typescript/v2/ProcessWriteStdinParams.ts | 21 + .../v2/ProcessWriteStdinResponse.ts | 8 + .../v2/RemoteControlDisableResponse.ts | 6 + .../v2/RemoteControlEnableResponse.ts | 6 + .../v2/RemoteControlStatusReadResponse.ts | 6 + .../ThreadBackgroundTerminalsCleanParams.ts | 5 + .../ThreadBackgroundTerminalsCleanResponse.ts | 5 + .../v2/ThreadDecrementElicitationParams.ts | 12 + .../v2/ThreadDecrementElicitationResponse.ts | 16 + .../schema/typescript/v2/ThreadForkParams.ts | 38 +- .../typescript/v2/ThreadForkResponse.ts | 22 +- .../v2/ThreadIncrementElicitationParams.ts | 12 + .../v2/ThreadIncrementElicitationResponse.ts | 16 + .../v2/ThreadMemoryModeSetParams.ts | 6 + .../v2/ThreadMemoryModeSetResponse.ts | 5 + .../v2/ThreadRealtimeAppendAudioParams.ts | 9 + .../v2/ThreadRealtimeAppendAudioResponse.ts | 8 + .../v2/ThreadRealtimeAppendTextParams.ts | 8 + .../v2/ThreadRealtimeAppendTextResponse.ts | 8 + .../v2/ThreadRealtimeListVoicesParams.ts | 8 + .../v2/ThreadRealtimeListVoicesResponse.ts | 9 + .../v2/ThreadRealtimeStartParams.ts | 16 + .../v2/ThreadRealtimeStartResponse.ts | 8 + .../typescript/v2/ThreadRealtimeStopParams.ts | 8 + .../v2/ThreadRealtimeStopResponse.ts | 8 + .../typescript/v2/ThreadResumeParams.ts | 44 +- .../typescript/v2/ThreadResumeResponse.ts | 22 +- .../typescript/v2/ThreadSearchParams.ts | 38 + .../typescript/v2/ThreadSearchResponse.ts | 18 + .../v2/ThreadSettingsUpdateParams.ts | 61 + .../v2/ThreadSettingsUpdateResponse.ts | 5 + .../schema/typescript/v2/ThreadStartParams.ts | 44 +- .../typescript/v2/ThreadStartResponse.ts | 22 +- .../v2/ThreadTurnsItemsListParams.ts | 18 + .../v2/ThreadTurnsItemsListResponse.ts | 16 + .../typescript/v2/ThreadTurnsListParams.ts | 23 + .../typescript/v2/ThreadTurnsListResponse.ts | 18 + .../schema/typescript/v2/TurnStartParams.ts | 70 +- .../schema/typescript/v2/TurnSteerParams.ts | 14 +- .../schema/typescript/v2/index.ts | 45 + .../src/protocol/v2/tests.rs | 1 + .../src/protocol/v2/turn.rs | 15 + codex-rs/app-server/README.md | 17 +- .../src/message_processor_tracing_tests.rs | 1 + codex-rs/app-server/src/request_processors.rs | 2 + .../src/request_processors/turn_processor.rs | 14 + .../tests/suite/v2/client_metadata.rs | 1 + .../app-server/tests/suite/v2/turn_start.rs | 78 + .../app-server/tests/suite/v2/turn_steer.rs | 137 + codex-rs/core/src/codex_thread.rs | 9 +- .../src/context/contextual_user_message.rs | 4 + codex-rs/core/src/context/fragments.rs | 54 + codex-rs/core/src/context/mod.rs | 2 + codex-rs/core/src/session/handlers.rs | 22 +- codex-rs/core/src/session/input_queue.rs | 6 +- codex-rs/core/src/session/mod.rs | 39 +- codex-rs/core/src/session/tests.rs | 11 +- codex-rs/core/src/state/additional_context.rs | 23 + codex-rs/core/src/state/mod.rs | 2 + codex-rs/core/src/state/session.rs | 3 + codex-rs/core/src/tasks/mod.rs | 36 +- .../core/tests/suite/additional_context.rs | 232 ++ codex-rs/core/tests/suite/mod.rs | 1 + codex-rs/core/tests/suite/pending_input.rs | 1 + codex-rs/protocol/src/protocol.rs | 4 + 157 files changed, 15276 insertions(+), 873 deletions(-) create mode 100644 codex-rs/app-server-protocol/schema/json/FuzzyFileSearchSessionStartParams.json create mode 100644 codex-rs/app-server-protocol/schema/json/FuzzyFileSearchSessionStartResponse.json create mode 100644 codex-rs/app-server-protocol/schema/json/FuzzyFileSearchSessionStopParams.json create mode 100644 codex-rs/app-server-protocol/schema/json/FuzzyFileSearchSessionStopResponse.json create mode 100644 codex-rs/app-server-protocol/schema/json/FuzzyFileSearchSessionUpdateParams.json create mode 100644 codex-rs/app-server-protocol/schema/json/FuzzyFileSearchSessionUpdateResponse.json create mode 100644 codex-rs/app-server-protocol/schema/json/v2/CollaborationModeListParams.json create mode 100644 codex-rs/app-server-protocol/schema/json/v2/CollaborationModeListResponse.json create mode 100644 codex-rs/app-server-protocol/schema/json/v2/EnvironmentAddParams.json create mode 100644 codex-rs/app-server-protocol/schema/json/v2/EnvironmentAddResponse.json create mode 100644 codex-rs/app-server-protocol/schema/json/v2/MemoryResetResponse.json create mode 100644 codex-rs/app-server-protocol/schema/json/v2/MockExperimentalMethodParams.json create mode 100644 codex-rs/app-server-protocol/schema/json/v2/MockExperimentalMethodResponse.json create mode 100644 codex-rs/app-server-protocol/schema/json/v2/ProcessKillParams.json create mode 100644 codex-rs/app-server-protocol/schema/json/v2/ProcessKillResponse.json create mode 100644 codex-rs/app-server-protocol/schema/json/v2/ProcessResizePtyParams.json create mode 100644 codex-rs/app-server-protocol/schema/json/v2/ProcessResizePtyResponse.json create mode 100644 codex-rs/app-server-protocol/schema/json/v2/ProcessSpawnParams.json create mode 100644 codex-rs/app-server-protocol/schema/json/v2/ProcessSpawnResponse.json create mode 100644 codex-rs/app-server-protocol/schema/json/v2/ProcessWriteStdinParams.json create mode 100644 codex-rs/app-server-protocol/schema/json/v2/ProcessWriteStdinResponse.json create mode 100644 codex-rs/app-server-protocol/schema/json/v2/RemoteControlDisableResponse.json create mode 100644 codex-rs/app-server-protocol/schema/json/v2/RemoteControlEnableResponse.json create mode 100644 codex-rs/app-server-protocol/schema/json/v2/RemoteControlStatusReadResponse.json create mode 100644 codex-rs/app-server-protocol/schema/json/v2/ThreadBackgroundTerminalsCleanParams.json create mode 100644 codex-rs/app-server-protocol/schema/json/v2/ThreadBackgroundTerminalsCleanResponse.json create mode 100644 codex-rs/app-server-protocol/schema/json/v2/ThreadDecrementElicitationParams.json create mode 100644 codex-rs/app-server-protocol/schema/json/v2/ThreadDecrementElicitationResponse.json create mode 100644 codex-rs/app-server-protocol/schema/json/v2/ThreadIncrementElicitationParams.json create mode 100644 codex-rs/app-server-protocol/schema/json/v2/ThreadIncrementElicitationResponse.json create mode 100644 codex-rs/app-server-protocol/schema/json/v2/ThreadMemoryModeSetParams.json create mode 100644 codex-rs/app-server-protocol/schema/json/v2/ThreadMemoryModeSetResponse.json create mode 100644 codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeAppendAudioParams.json create mode 100644 codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeAppendAudioResponse.json create mode 100644 codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeAppendTextParams.json create mode 100644 codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeAppendTextResponse.json create mode 100644 codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeListVoicesParams.json create mode 100644 codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeListVoicesResponse.json create mode 100644 codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeStartParams.json create mode 100644 codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeStartResponse.json create mode 100644 codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeStopParams.json create mode 100644 codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeStopResponse.json create mode 100644 codex-rs/app-server-protocol/schema/json/v2/ThreadSearchParams.json create mode 100644 codex-rs/app-server-protocol/schema/json/v2/ThreadSearchResponse.json create mode 100644 codex-rs/app-server-protocol/schema/json/v2/ThreadSettingsUpdateParams.json create mode 100644 codex-rs/app-server-protocol/schema/json/v2/ThreadSettingsUpdateResponse.json create mode 100644 codex-rs/app-server-protocol/schema/json/v2/ThreadTurnsItemsListParams.json create mode 100644 codex-rs/app-server-protocol/schema/json/v2/ThreadTurnsItemsListResponse.json create mode 100644 codex-rs/app-server-protocol/schema/json/v2/ThreadTurnsListParams.json create mode 100644 codex-rs/app-server-protocol/schema/json/v2/ThreadTurnsListResponse.json create mode 100644 codex-rs/app-server-protocol/schema/typescript/FuzzyFileSearchSessionStartParams.ts create mode 100644 codex-rs/app-server-protocol/schema/typescript/FuzzyFileSearchSessionStartResponse.ts create mode 100644 codex-rs/app-server-protocol/schema/typescript/FuzzyFileSearchSessionStopParams.ts create mode 100644 codex-rs/app-server-protocol/schema/typescript/FuzzyFileSearchSessionStopResponse.ts create mode 100644 codex-rs/app-server-protocol/schema/typescript/FuzzyFileSearchSessionUpdateParams.ts create mode 100644 codex-rs/app-server-protocol/schema/typescript/FuzzyFileSearchSessionUpdateResponse.ts create mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/AdditionalContextEntry.ts create mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/CollaborationModeListParams.ts create mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/CollaborationModeListResponse.ts create mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/EnvironmentAddParams.ts create mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/EnvironmentAddResponse.ts create mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/MemoryResetResponse.ts create mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/MockExperimentalMethodParams.ts create mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/MockExperimentalMethodResponse.ts create mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ProcessKillParams.ts create mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ProcessKillResponse.ts create mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ProcessResizePtyParams.ts create mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ProcessResizePtyResponse.ts create mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ProcessSpawnParams.ts create mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ProcessSpawnResponse.ts create mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ProcessWriteStdinParams.ts create mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ProcessWriteStdinResponse.ts create mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/RemoteControlDisableResponse.ts create mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/RemoteControlEnableResponse.ts create mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/RemoteControlStatusReadResponse.ts create mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ThreadBackgroundTerminalsCleanParams.ts create mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ThreadBackgroundTerminalsCleanResponse.ts create mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ThreadDecrementElicitationParams.ts create mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ThreadDecrementElicitationResponse.ts create mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ThreadIncrementElicitationParams.ts create mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ThreadIncrementElicitationResponse.ts create mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ThreadMemoryModeSetParams.ts create mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ThreadMemoryModeSetResponse.ts create mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeAppendAudioParams.ts create mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeAppendAudioResponse.ts create mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeAppendTextParams.ts create mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeAppendTextResponse.ts create mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeListVoicesParams.ts create mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeListVoicesResponse.ts create mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeStartParams.ts create mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeStartResponse.ts create mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeStopParams.ts create mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeStopResponse.ts create mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ThreadSearchParams.ts create mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ThreadSearchResponse.ts create mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ThreadSettingsUpdateParams.ts create mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ThreadSettingsUpdateResponse.ts create mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ThreadTurnsItemsListParams.ts create mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ThreadTurnsItemsListResponse.ts create mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ThreadTurnsListParams.ts create mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ThreadTurnsListResponse.ts create mode 100644 codex-rs/core/src/context/fragments.rs create mode 100644 codex-rs/core/src/state/additional_context.rs create mode 100644 codex-rs/core/tests/suite/additional_context.rs diff --git a/codex-rs/app-server-protocol/schema/json/ClientRequest.json b/codex-rs/app-server-protocol/schema/json/ClientRequest.json index 7595527c212..384e8455c3f 100644 --- a/codex-rs/app-server-protocol/schema/json/ClientRequest.json +++ b/codex-rs/app-server-protocol/schema/json/ClientRequest.json @@ -12,6 +12,17 @@ ], "type": "string" }, + "AdditionalContextEntry": { + "properties": { + "value": { + "type": "string" + } + }, + "required": [ + "value" + ], + "type": "object" + }, "ApprovalsReviewer": { "description": "Configures who approval requests are routed to for review. Examples include sandbox escapes, blocked network access, MCP approval prompts, and ARC escalations. Defaults to `user`. `auto_review` uses a carefully prompted subagent to gather relevant context and apply a risk-based decision framework before approving or denying the request. The legacy value `guardian_subagent` is accepted for compatibility.", "enum": [ @@ -171,6 +182,10 @@ ], "type": "object" }, + "CollaborationModeListParams": { + "description": "EXPERIMENTAL - list collaboration mode presets.", + "type": "object" + }, "CommandExecParams": { "description": "Run a standalone command (argv vector) in the server sandbox without creating a thread or turn.\n\nThe final `command/exec` response is deferred until the process exits and is sent only after all `command/exec/outputDelta` notifications for that connection have been emitted.", "properties": { @@ -218,6 +233,13 @@ "null" ] }, + "permissionProfile": { + "description": "Optional active permissions profile id for this command.\n\nDefaults to the user's configured permissions when omitted. Cannot be combined with `sandboxPolicy`.", + "type": [ + "string", + "null" + ] + }, "processId": { "description": "Optional client-supplied, connection-scoped process id.\n\nRequired for `tty`, `streamStdin`, `streamStdoutStderr`, and follow-up `command/exec/write`, `command/exec/resize`, and `command/exec/terminate` calls. When omitted, buffered execution gets an internal id that is not exposed to the client.", "type": [ @@ -558,6 +580,21 @@ ], "type": "object" }, + "EnvironmentAddParams": { + "properties": { + "environmentId": { + "type": "string" + }, + "execServerUrl": { + "type": "string" + } + }, + "required": [ + "environmentId", + "execServerUrl" + ], + "type": "object" + }, "ExperimentalFeatureEnablementSetParams": { "properties": { "enablement": { @@ -1029,6 +1066,50 @@ ], "type": "object" }, + "FuzzyFileSearchSessionStartParams": { + "properties": { + "roots": { + "items": { + "type": "string" + }, + "type": "array" + }, + "sessionId": { + "type": "string" + } + }, + "required": [ + "roots", + "sessionId" + ], + "type": "object" + }, + "FuzzyFileSearchSessionStopParams": { + "properties": { + "sessionId": { + "type": "string" + } + }, + "required": [ + "sessionId" + ], + "type": "object" + }, + "FuzzyFileSearchSessionUpdateParams": { + "properties": { + "query": { + "type": "string" + }, + "sessionId": { + "type": "string" + } + }, + "required": [ + "query", + "sessionId" + ], + "type": "object" + }, "GetAccountParams": { "properties": { "refreshToken": { @@ -1512,6 +1593,18 @@ }, "type": "object" }, + "MockExperimentalMethodParams": { + "properties": { + "value": { + "description": "Test-only payload field.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, "ModeKind": { "description": "Initial collaboration mode to use when the TUI starts.", "enum": [ @@ -1887,6 +1980,124 @@ ], "type": "object" }, + "ProcessKillParams": { + "description": "Terminate a running `process/spawn` session.", + "properties": { + "processHandle": { + "description": "Client-supplied, connection-scoped `processHandle` from `process/spawn`.", + "type": "string" + } + }, + "required": [ + "processHandle" + ], + "type": "object" + }, + "ProcessResizePtyParams": { + "description": "Resize a running PTY-backed `process/spawn` session.", + "properties": { + "processHandle": { + "description": "Client-supplied, connection-scoped `processHandle` from `process/spawn`.", + "type": "string" + }, + "size": { + "allOf": [ + { + "$ref": "#/definitions/ProcessTerminalSize" + } + ], + "description": "New PTY size in character cells." + } + }, + "required": [ + "processHandle", + "size" + ], + "type": "object" + }, + "ProcessSpawnParams": { + "description": "Spawn a standalone process (argv vector) without a Codex sandbox on the host where the app server is running.\n\n`process/spawn` returns after the process has started and the connection-scoped `processHandle` has been registered. Process output and exit are reported via `process/outputDelta` and `process/exited` notifications.", + "properties": { + "command": { + "description": "Command argv vector. Empty arrays are rejected.", + "items": { + "type": "string" + }, + "type": "array" + }, + "cwd": { + "allOf": [ + { + "$ref": "#/definitions/AbsolutePathBuf" + } + ], + "description": "Absolute working directory for the process." + }, + "env": { + "additionalProperties": { + "type": [ + "string", + "null" + ] + }, + "description": "Optional environment overrides merged into the app-server process environment.\n\nMatching names override inherited values. Set a key to `null` to unset an inherited variable.", + "type": [ + "object", + "null" + ] + }, + "outputBytesCap": { + "description": "Optional per-stream stdout/stderr capture cap in bytes.\n\nWhen omitted, the server default applies. Set to `null` to disable the cap.", + "format": "uint", + "minimum": 0.0, + "type": [ + "integer", + "null" + ] + }, + "processHandle": { + "description": "Client-supplied, connection-scoped process handle.\n\nDuplicate active handles are rejected on the same connection. The same handle can be reused after the prior process exits.", + "type": "string" + }, + "size": { + "anyOf": [ + { + "$ref": "#/definitions/ProcessTerminalSize" + }, + { + "type": "null" + } + ], + "description": "Optional initial PTY size in character cells. Only valid when `tty` is true." + }, + "streamStdin": { + "description": "Allow follow-up `process/writeStdin` requests to write stdin bytes.", + "type": "boolean" + }, + "streamStdoutStderr": { + "description": "Stream stdout/stderr via `process/outputDelta` notifications.\n\nStreamed bytes are not duplicated into the `process/exited` notification.", + "type": "boolean" + }, + "timeoutMs": { + "description": "Optional timeout in milliseconds.\n\nWhen omitted, the server default applies. Set to `null` to disable the timeout.", + "format": "int64", + "type": [ + "integer", + "null" + ] + }, + "tty": { + "description": "Enable PTY mode.\n\nThis implies `streamStdin` and `streamStdoutStderr`.", + "type": "boolean" + } + }, + "required": [ + "command", + "cwd", + "processHandle" + ], + "type": "object" + }, "ProcessTerminalSize": { "description": "PTY size in character cells for `process/spawn` PTY sessions.", "properties": { @@ -1909,6 +2120,30 @@ ], "type": "object" }, + "ProcessWriteStdinParams": { + "description": "Write stdin bytes to a running `process/spawn` session, close stdin, or both.", + "properties": { + "closeStdin": { + "description": "Close stdin after writing `deltaBase64`, if present.", + "type": "boolean" + }, + "deltaBase64": { + "description": "Optional base64-encoded stdin bytes to write.", + "type": [ + "string", + "null" + ] + }, + "processHandle": { + "description": "Client-supplied, connection-scoped `processHandle` from `process/spawn`.", + "type": "string" + } + }, + "required": [ + "processHandle" + ], + "type": "object" + }, "RealtimeOutputModality": { "enum": [ "text", @@ -3041,6 +3276,17 @@ ], "type": "object" }, + "ThreadBackgroundTerminalsCleanParams": { + "properties": { + "threadId": { + "type": "string" + } + }, + "required": [ + "threadId" + ], + "type": "object" + }, "ThreadCompactStartParams": { "properties": { "threadId": { @@ -3052,6 +3298,19 @@ ], "type": "object" }, + "ThreadDecrementElicitationParams": { + "description": "Parameters for `thread/decrement_elicitation`.", + "properties": { + "threadId": { + "description": "Thread whose out-of-band elicitation counter should be decremented.", + "type": "string" + } + }, + "required": [ + "threadId" + ], + "type": "object" + }, "ThreadForkParams": { "description": "There are two ways to fork a thread: 1. By thread_id: load the thread from disk by thread_id and fork it into a new thread. 2. By path: load the thread from disk by path and fork it into a new thread.\n\nIf using a non-empty path, the thread_id param will be ignored. Empty string path values are treated as absent.\n\nPrefer using thread_id whenever possible.", "properties": { @@ -3104,6 +3363,10 @@ "ephemeral": { "type": "boolean" }, + "excludeTurns": { + "description": "When true, return only thread metadata and live fork state without populating `thread.turns`. This is useful when the client plans to call `thread/turns/list` immediately after forking.", + "type": "boolean" + }, "model": { "description": "Configuration overrides for the forked thread, if any.", "type": [ @@ -3117,6 +3380,35 @@ "null" ] }, + "path": { + "default": null, + "description": "[UNSTABLE] Specify the rollout path to fork from. If specified, the thread_id param will be ignored.", + "type": [ + "string", + "null" + ] + }, + "permissions": { + "description": "Named profile id for the forked thread. Cannot be combined with `sandbox`.", + "type": [ + "string", + "null" + ] + }, + "persistExtendedHistory": { + "description": "Deprecated and ignored by app-server. Kept only so older clients can continue sending the field while rollout persistence always uses the limited history policy.", + "type": "boolean" + }, + "runtimeWorkspaceRoots": { + "description": "Replace the thread's runtime workspace roots. Relative paths are resolved against the effective cwd for the thread.", + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, "sandbox": { "anyOf": [ { @@ -3220,6 +3512,19 @@ ], "type": "string" }, + "ThreadIncrementElicitationParams": { + "description": "Parameters for `thread/increment_elicitation`.", + "properties": { + "threadId": { + "description": "Thread whose out-of-band elicitation counter should be incremented.", + "type": "string" + } + }, + "required": [ + "threadId" + ], + "type": "object" + }, "ThreadInjectItemsParams": { "properties": { "items": { @@ -3370,6 +3675,21 @@ ], "type": "string" }, + "ThreadMemoryModeSetParams": { + "properties": { + "mode": { + "$ref": "#/definitions/ThreadMemoryMode" + }, + "threadId": { + "type": "string" + } + }, + "required": [ + "mode", + "threadId" + ], + "type": "object" + }, "ThreadMetadataGitInfoUpdateParams": { "properties": { "branch": { @@ -3433,13 +3753,45 @@ ], "type": "object" }, - "ThreadRealtimeAudioChunk": { - "description": "EXPERIMENTAL - thread realtime audio chunk.", + "ThreadRealtimeAppendAudioParams": { + "description": "EXPERIMENTAL - append audio input to thread realtime.", "properties": { - "data": { - "type": "string" + "audio": { + "$ref": "#/definitions/ThreadRealtimeAudioChunk" }, - "itemId": { + "threadId": { + "type": "string" + } + }, + "required": [ + "audio", + "threadId" + ], + "type": "object" + }, + "ThreadRealtimeAppendTextParams": { + "description": "EXPERIMENTAL - append text input to thread realtime.", + "properties": { + "text": { + "type": "string" + }, + "threadId": { + "type": "string" + } + }, + "required": [ + "text", + "threadId" + ], + "type": "object" + }, + "ThreadRealtimeAudioChunk": { + "description": "EXPERIMENTAL - thread realtime audio chunk.", + "properties": { + "data": { + "type": "string" + }, + "itemId": { "type": [ "string", "null" @@ -3471,6 +3823,63 @@ ], "type": "object" }, + "ThreadRealtimeListVoicesParams": { + "description": "EXPERIMENTAL - list voices supported by thread realtime.", + "type": "object" + }, + "ThreadRealtimeStartParams": { + "description": "EXPERIMENTAL - start a thread-scoped realtime session.", + "properties": { + "outputModality": { + "allOf": [ + { + "$ref": "#/definitions/RealtimeOutputModality" + } + ], + "description": "Selects text or audio output for the realtime session. Transport and voice stay independent so clients can choose how they connect separately from what the model emits." + }, + "prompt": { + "type": [ + "string", + "null" + ] + }, + "realtimeSessionId": { + "type": [ + "string", + "null" + ] + }, + "threadId": { + "type": "string" + }, + "transport": { + "anyOf": [ + { + "$ref": "#/definitions/ThreadRealtimeStartTransport" + }, + { + "type": "null" + } + ] + }, + "voice": { + "anyOf": [ + { + "$ref": "#/definitions/RealtimeVoice" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "outputModality", + "threadId" + ], + "type": "object" + }, "ThreadRealtimeStartTransport": { "description": "EXPERIMENTAL - transport used by thread realtime.", "oneOf": [ @@ -3513,6 +3922,18 @@ } ] }, + "ThreadRealtimeStopParams": { + "description": "EXPERIMENTAL - stop thread realtime.", + "properties": { + "threadId": { + "type": "string" + } + }, + "required": [ + "threadId" + ], + "type": "object" + }, "ThreadResumeParams": { "description": "There are three ways to resume a thread: 1. By thread_id: load the thread from disk by thread_id and resume it. 2. By history: instantiate the thread from memory and resume it. 3. By path: load the thread from disk by path and resume it.\n\nFor non-running threads, the precedence is: history > non-empty path > thread_id. If using history or a non-empty path for a non-running thread, the thread_id param will be ignored.\n\nIf thread_id identifies a running thread, app-server rejoins that thread and treats a non-empty path as a consistency check against the active rollout path. Empty string path values are treated as absent.\n\nPrefer using thread_id whenever possible.", "properties": { @@ -3562,6 +3983,20 @@ "null" ] }, + "excludeTurns": { + "description": "When true, return only thread metadata and live-resume state without populating `thread.turns`. This is useful when the client plans to call `thread/turns/list` immediately after resuming.", + "type": "boolean" + }, + "history": { + "description": "[UNSTABLE] FOR CODEX CLOUD - DO NOT USE. If specified, the thread will be resumed with the provided history instead of loaded from disk.", + "items": { + "$ref": "#/definitions/ResponseItem" + }, + "type": [ + "array", + "null" + ] + }, "model": { "description": "Configuration overrides for the resumed thread, if any.", "type": [ @@ -3575,6 +4010,25 @@ "null" ] }, + "path": { + "default": null, + "description": "[UNSTABLE] Specify the rollout path to resume from. If specified for a non-running thread, the thread_id param will be ignored. If thread_id identifies a running thread, the path must match the active rollout path.", + "type": [ + "string", + "null" + ] + }, + "permissions": { + "description": "Named profile id for the resumed thread. Cannot be combined with `sandbox`.", + "type": [ + "string", + "null" + ] + }, + "persistExtendedHistory": { + "description": "Deprecated and ignored by app-server. Kept only so older clients can continue sending the field while rollout persistence always uses the limited history policy.", + "type": "boolean" + }, "personality": { "anyOf": [ { @@ -3585,6 +4039,16 @@ } ] }, + "runtimeWorkspaceRoots": { + "description": "Replace the thread's runtime workspace roots. Relative paths are resolved against the effective cwd for the thread.", + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, "sandbox": { "anyOf": [ { @@ -3628,25 +4092,76 @@ ], "type": "object" }, - "ThreadSetNameParams": { + "ThreadSearchParams": { "properties": { - "name": { - "type": "string" + "archived": { + "description": "Optional archived filter; when set to true, only archived threads are returned. If false or null, only non-archived threads are returned.", + "type": [ + "boolean", + "null" + ] }, - "threadId": { + "cursor": { + "description": "Opaque pagination cursor returned by a previous call.", + "type": [ + "string", + "null" + ] + }, + "limit": { + "description": "Optional page size; defaults to a reasonable server-side value.", + "format": "uint32", + "minimum": 0.0, + "type": [ + "integer", + "null" + ] + }, + "searchTerm": { + "description": "Required substring/full-text query for thread search.", "type": "string" + }, + "sortDirection": { + "anyOf": [ + { + "$ref": "#/definitions/SortDirection" + }, + { + "type": "null" + } + ], + "description": "Optional sort direction; defaults to descending (newest first)." + }, + "sortKey": { + "anyOf": [ + { + "$ref": "#/definitions/ThreadSortKey" + }, + { + "type": "null" + } + ], + "description": "Optional sort key; defaults to created_at." + }, + "sourceKinds": { + "description": "Optional source filter; when set, only sessions from these source kinds are returned. When omitted or empty, defaults to interactive sources.", + "items": { + "$ref": "#/definitions/ThreadSourceKind" + }, + "type": [ + "array", + "null" + ] } }, "required": [ - "name", - "threadId" + "searchTerm" ], "type": "object" }, - "ThreadShellCommandParams": { + "ThreadSetNameParams": { "properties": { - "command": { - "description": "Shell command string evaluated by the thread's configured shell. Unlike `command/exec`, this intentionally preserves shell syntax such as pipes, redirects, and quoting. This runs unsandboxed with full access rather than inheriting the thread sandbox policy.", + "name": { "type": "string" }, "threadId": { @@ -3654,42 +4169,12 @@ } }, "required": [ - "command", + "name", "threadId" ], "type": "object" }, - "ThreadSortKey": { - "enum": [ - "created_at", - "updated_at" - ], - "type": "string" - }, - "ThreadSource": { - "enum": [ - "user", - "subagent", - "memory_consolidation" - ], - "type": "string" - }, - "ThreadSourceKind": { - "enum": [ - "cli", - "vscode", - "exec", - "appServer", - "subAgent", - "subAgentReview", - "subAgentCompact", - "subAgentThreadSpawn", - "subAgentOther", - "unknown" - ], - "type": "string" - }, - "ThreadStartParams": { + "ThreadSettingsUpdateParams": { "properties": { "approvalPolicy": { "anyOf": [ @@ -3699,7 +4184,8 @@ { "type": "null" } - ] + ], + "description": "Override the approval policy for subsequent turns." }, "approvalsReviewer": { "anyOf": [ @@ -3710,46 +4196,46 @@ "type": "null" } ], - "description": "Override where approval requests are routed for review on this thread and subsequent turns." - }, - "baseInstructions": { - "type": [ - "string", - "null" - ] + "description": "Override where approval requests are routed for subsequent turns." }, - "config": { - "additionalProperties": true, - "type": [ - "object", - "null" - ] + "collaborationMode": { + "anyOf": [ + { + "$ref": "#/definitions/CollaborationMode" + }, + { + "type": "null" + } + ], + "description": "EXPERIMENTAL - Set a pre-set collaboration mode for subsequent turns.\n\nFor `collaboration_mode.settings.developer_instructions`, `null` means \"use the built-in instructions for the selected mode\"." }, "cwd": { + "description": "Override the working directory for subsequent turns.", "type": [ "string", "null" ] }, - "developerInstructions": { - "type": [ - "string", - "null" - ] - }, - "ephemeral": { - "type": [ - "boolean", - "null" - ] + "effort": { + "anyOf": [ + { + "$ref": "#/definitions/ReasoningEffort" + }, + { + "type": "null" + } + ], + "description": "Override the reasoning effort for subsequent turns." }, "model": { + "description": "Override the model for subsequent turns.", "type": [ "string", "null" ] }, - "modelProvider": { + "permissions": { + "description": "Select a named permissions profile id for subsequent turns. Cannot be combined with `sandboxPolicy`.", "type": [ "string", "null" @@ -3763,63 +4249,38 @@ { "type": "null" } - ] + ], + "description": "Override the personality for subsequent turns." }, - "sandbox": { + "sandboxPolicy": { "anyOf": [ { - "$ref": "#/definitions/SandboxMode" + "$ref": "#/definitions/SandboxPolicy" }, { "type": "null" } - ] - }, - "serviceName": { - "type": [ - "string", - "null" - ] + ], + "description": "Override the sandbox policy for subsequent turns." }, "serviceTier": { + "description": "Override the service tier for subsequent turns. `null` clears the current service tier; omission leaves it unchanged.", "type": [ "string", "null" ] }, - "sessionStartSource": { - "anyOf": [ - { - "$ref": "#/definitions/ThreadStartSource" - }, - { - "type": "null" - } - ] - }, - "threadSource": { + "summary": { "anyOf": [ { - "$ref": "#/definitions/ThreadSource" + "$ref": "#/definitions/ReasoningSummary" }, { "type": "null" } ], - "description": "Optional client-supplied analytics source classification for this thread." - } - }, - "type": "object" - }, - "ThreadStartSource": { - "enum": [ - "startup", - "clear" - ], - "type": "string" - }, - "ThreadUnarchiveParams": { - "properties": { + "description": "Override the reasoning summary for subsequent turns." + }, "threadId": { "type": "string" } @@ -3829,73 +4290,53 @@ ], "type": "object" }, - "ThreadUnsubscribeParams": { + "ThreadShellCommandParams": { "properties": { + "command": { + "description": "Shell command string evaluated by the thread's configured shell. Unlike `command/exec`, this intentionally preserves shell syntax such as pipes, redirects, and quoting. This runs unsandboxed with full access rather than inheriting the thread sandbox policy.", + "type": "string" + }, "threadId": { "type": "string" } }, "required": [ + "command", "threadId" ], "type": "object" }, - "TurnEnvironmentParams": { - "properties": { - "cwd": { - "$ref": "#/definitions/AbsolutePathBuf" - }, - "environmentId": { - "type": "string" - } - }, - "required": [ - "cwd", - "environmentId" + "ThreadSortKey": { + "enum": [ + "created_at", + "updated_at" ], - "type": "object" + "type": "string" }, - "TurnInterruptParams": { - "properties": { - "threadId": { - "type": "string" - }, - "turnId": { - "type": "string" - } - }, - "required": [ - "threadId", - "turnId" + "ThreadSource": { + "enum": [ + "user", + "subagent", + "memory_consolidation" ], - "type": "object" + "type": "string" }, - "TurnItemsView": { - "oneOf": [ - { - "description": "`items` was not loaded for this turn. The field is intentionally empty.", - "enum": [ - "notLoaded" - ], - "type": "string" - }, - { - "description": "`items` contains only a display summary for this turn.", - "enum": [ - "summary" - ], - "type": "string" - }, - { - "description": "`items` contains every ThreadItem available from persisted app-server history for this turn.", - "enum": [ - "full" - ], - "type": "string" - } - ] + "ThreadSourceKind": { + "enum": [ + "cli", + "vscode", + "exec", + "appServer", + "subAgent", + "subAgentReview", + "subAgentCompact", + "subAgentThreadSpawn", + "subAgentOther", + "unknown" + ], + "type": "string" }, - "TurnStartParams": { + "ThreadStartParams": { "properties": { "approvalPolicy": { "anyOf": [ @@ -3905,8 +4346,7 @@ { "type": "null" } - ], - "description": "Override the approval policy for this turn and subsequent turns." + ] }, "approvalsReviewer": { "anyOf": [ @@ -3917,41 +4357,91 @@ "type": "null" } ], - "description": "Override where approval requests are routed for review on this turn and subsequent turns." + "description": "Override where approval requests are routed for review on this thread and subsequent turns." + }, + "baseInstructions": { + "type": [ + "string", + "null" + ] + }, + "config": { + "additionalProperties": true, + "type": [ + "object", + "null" + ] }, "cwd": { - "description": "Override the working directory for this turn and subsequent turns.", "type": [ "string", "null" ] }, - "effort": { - "anyOf": [ - { - "$ref": "#/definitions/ReasoningEffort" - }, - { - "type": "null" - } - ], - "description": "Override the reasoning effort for this turn and subsequent turns." + "developerInstructions": { + "type": [ + "string", + "null" + ] }, - "input": { + "dynamicTools": { "items": { - "$ref": "#/definitions/UserInput" + "$ref": "#/definitions/DynamicToolSpec" }, - "type": "array" + "type": [ + "array", + "null" + ] + }, + "environments": { + "description": "Optional sticky environments for this thread.\n\nOmitted selects the default environment when environment access is enabled. Empty disables environment access for turns that do not provide a turn override. Non-empty selects the first environment as the current turn environment.", + "items": { + "$ref": "#/definitions/TurnEnvironmentParams" + }, + "type": [ + "array", + "null" + ] + }, + "ephemeral": { + "type": [ + "boolean", + "null" + ] + }, + "experimentalRawEvents": { + "description": "If true, opt into emitting raw Responses API items on the event stream. This is for internal use only (e.g. Codex Cloud).", + "type": "boolean" + }, + "mockExperimentalField": { + "description": "Test-only experimental field used to validate experimental gating and schema filtering behavior in a stable way.", + "type": [ + "string", + "null" + ] }, "model": { - "description": "Override the model for this turn and subsequent turns.", "type": [ "string", "null" ] }, - "outputSchema": { - "description": "Optional JSON Schema used to constrain the final assistant message for this turn." + "modelProvider": { + "type": [ + "string", + "null" + ] + }, + "permissions": { + "description": "Named profile id for this thread. Cannot be combined with `sandbox`.", + "type": [ + "string", + "null" + ] + }, + "persistExtendedHistory": { + "description": "Deprecated and ignored by app-server. Kept only so older clients can continue sending the field while rollout persistence always uses the limited history policy.", + "type": "boolean" }, "personality": { "anyOf": [ @@ -3961,244 +4451,1103 @@ { "type": "null" } - ], - "description": "Override the personality for this turn and subsequent turns." + ] }, - "sandboxPolicy": { + "runtimeWorkspaceRoots": { + "description": "Replace the thread's runtime workspace roots. Relative paths are resolved against the effective cwd for the thread.", + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "sandbox": { "anyOf": [ { - "$ref": "#/definitions/SandboxPolicy" + "$ref": "#/definitions/SandboxMode" }, { "type": "null" } - ], - "description": "Override the sandbox policy for this turn and subsequent turns." + ] + }, + "serviceName": { + "type": [ + "string", + "null" + ] }, "serviceTier": { - "description": "Override the service tier for this turn and subsequent turns.", "type": [ "string", "null" ] }, - "summary": { + "sessionStartSource": { "anyOf": [ { - "$ref": "#/definitions/ReasoningSummary" + "$ref": "#/definitions/ThreadStartSource" }, { "type": "null" } - ], - "description": "Override the reasoning summary for this turn and subsequent turns." + ] }, - "threadId": { - "type": "string" + "threadSource": { + "anyOf": [ + { + "$ref": "#/definitions/ThreadSource" + }, + { + "type": "null" + } + ], + "description": "Optional client-supplied analytics source classification for this thread." } }, - "required": [ - "input", - "threadId" + "type": "object" + }, + "ThreadStartSource": { + "enum": [ + "startup", + "clear" + ], + "type": "string" + }, + "ThreadTurnsItemsListParams": { + "properties": { + "cursor": { + "description": "Opaque cursor to pass to the next call to continue after the last item.", + "type": [ + "string", + "null" + ] + }, + "limit": { + "description": "Optional item page size.", + "format": "uint32", + "minimum": 0.0, + "type": [ + "integer", + "null" + ] + }, + "sortDirection": { + "anyOf": [ + { + "$ref": "#/definitions/SortDirection" + }, + { + "type": "null" + } + ], + "description": "Optional item pagination direction; defaults to ascending." + }, + "threadId": { + "type": "string" + }, + "turnId": { + "type": "string" + } + }, + "required": [ + "threadId", + "turnId" + ], + "type": "object" + }, + "ThreadTurnsListParams": { + "properties": { + "cursor": { + "description": "Opaque cursor to pass to the next call to continue after the last turn.", + "type": [ + "string", + "null" + ] + }, + "itemsView": { + "anyOf": [ + { + "$ref": "#/definitions/TurnItemsView" + }, + { + "type": "null" + } + ], + "description": "How much item detail to include for each returned turn; defaults to summary." + }, + "limit": { + "description": "Optional turn page size.", + "format": "uint32", + "minimum": 0.0, + "type": [ + "integer", + "null" + ] + }, + "sortDirection": { + "anyOf": [ + { + "$ref": "#/definitions/SortDirection" + }, + { + "type": "null" + } + ], + "description": "Optional turn pagination direction; defaults to descending." + }, + "threadId": { + "type": "string" + } + }, + "required": [ + "threadId" + ], + "type": "object" + }, + "ThreadUnarchiveParams": { + "properties": { + "threadId": { + "type": "string" + } + }, + "required": [ + "threadId" + ], + "type": "object" + }, + "ThreadUnsubscribeParams": { + "properties": { + "threadId": { + "type": "string" + } + }, + "required": [ + "threadId" + ], + "type": "object" + }, + "TurnEnvironmentParams": { + "properties": { + "cwd": { + "$ref": "#/definitions/AbsolutePathBuf" + }, + "environmentId": { + "type": "string" + } + }, + "required": [ + "cwd", + "environmentId" + ], + "type": "object" + }, + "TurnInterruptParams": { + "properties": { + "threadId": { + "type": "string" + }, + "turnId": { + "type": "string" + } + }, + "required": [ + "threadId", + "turnId" + ], + "type": "object" + }, + "TurnItemsView": { + "oneOf": [ + { + "description": "`items` was not loaded for this turn. The field is intentionally empty.", + "enum": [ + "notLoaded" + ], + "type": "string" + }, + { + "description": "`items` contains only a display summary for this turn.", + "enum": [ + "summary" + ], + "type": "string" + }, + { + "description": "`items` contains every ThreadItem available from persisted app-server history for this turn.", + "enum": [ + "full" + ], + "type": "string" + } + ] + }, + "TurnStartParams": { + "properties": { + "additionalContext": { + "additionalProperties": { + "$ref": "#/definitions/AdditionalContextEntry" + }, + "description": "Optional client-provided context fragments keyed by an opaque source identifier.", + "type": [ + "object", + "null" + ] + }, + "approvalPolicy": { + "anyOf": [ + { + "$ref": "#/definitions/AskForApproval" + }, + { + "type": "null" + } + ], + "description": "Override the approval policy for this turn and subsequent turns." + }, + "approvalsReviewer": { + "anyOf": [ + { + "$ref": "#/definitions/ApprovalsReviewer" + }, + { + "type": "null" + } + ], + "description": "Override where approval requests are routed for review on this turn and subsequent turns." + }, + "collaborationMode": { + "anyOf": [ + { + "$ref": "#/definitions/CollaborationMode" + }, + { + "type": "null" + } + ], + "description": "EXPERIMENTAL - Set a pre-set collaboration mode. Takes precedence over model, reasoning_effort, and developer instructions if set.\n\nFor `collaboration_mode.settings.developer_instructions`, `null` means \"use the built-in instructions for the selected mode\"." + }, + "cwd": { + "description": "Override the working directory for this turn and subsequent turns.", + "type": [ + "string", + "null" + ] + }, + "effort": { + "anyOf": [ + { + "$ref": "#/definitions/ReasoningEffort" + }, + { + "type": "null" + } + ], + "description": "Override the reasoning effort for this turn and subsequent turns." + }, + "environments": { + "description": "Optional turn-scoped environments.\n\nOmitted uses the thread sticky environments. Empty disables environment access for this turn. Non-empty selects the first environment as the current turn environment for this turn.", + "items": { + "$ref": "#/definitions/TurnEnvironmentParams" + }, + "type": [ + "array", + "null" + ] + }, + "input": { + "items": { + "$ref": "#/definitions/UserInput" + }, + "type": "array" + }, + "model": { + "description": "Override the model for this turn and subsequent turns.", + "type": [ + "string", + "null" + ] + }, + "outputSchema": { + "description": "Optional JSON Schema used to constrain the final assistant message for this turn." + }, + "permissions": { + "description": "Select a named permissions profile id for this turn and subsequent turns. Cannot be combined with `sandboxPolicy`.", + "type": [ + "string", + "null" + ] + }, + "personality": { + "anyOf": [ + { + "$ref": "#/definitions/Personality" + }, + { + "type": "null" + } + ], + "description": "Override the personality for this turn and subsequent turns." + }, + "responsesapiClientMetadata": { + "additionalProperties": { + "type": "string" + }, + "description": "Optional turn-scoped Responses API client metadata.", + "type": [ + "object", + "null" + ] + }, + "runtimeWorkspaceRoots": { + "description": "Replace the thread's runtime workspace roots for this turn and subsequent turns. Relative paths are resolved against the effective cwd for the turn.", + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "sandboxPolicy": { + "anyOf": [ + { + "$ref": "#/definitions/SandboxPolicy" + }, + { + "type": "null" + } + ], + "description": "Override the sandbox policy for this turn and subsequent turns." + }, + "serviceTier": { + "description": "Override the service tier for this turn and subsequent turns.", + "type": [ + "string", + "null" + ] + }, + "summary": { + "anyOf": [ + { + "$ref": "#/definitions/ReasoningSummary" + }, + { + "type": "null" + } + ], + "description": "Override the reasoning summary for this turn and subsequent turns." + }, + "threadId": { + "type": "string" + } + }, + "required": [ + "input", + "threadId" + ], + "type": "object" + }, + "TurnSteerParams": { + "properties": { + "additionalContext": { + "additionalProperties": { + "$ref": "#/definitions/AdditionalContextEntry" + }, + "description": "Optional client-provided context fragments keyed by an opaque source identifier.", + "type": [ + "object", + "null" + ] + }, + "expectedTurnId": { + "description": "Required active turn id precondition. The request fails when it does not match the currently active turn.", + "type": "string" + }, + "input": { + "items": { + "$ref": "#/definitions/UserInput" + }, + "type": "array" + }, + "responsesapiClientMetadata": { + "additionalProperties": { + "type": "string" + }, + "description": "Optional turn-scoped Responses API client metadata.", + "type": [ + "object", + "null" + ] + }, + "threadId": { + "type": "string" + } + }, + "required": [ + "expectedTurnId", + "input", + "threadId" + ], + "type": "object" + }, + "UserInput": { + "oneOf": [ + { + "properties": { + "text": { + "type": "string" + }, + "text_elements": { + "default": [], + "description": "UI-defined spans within `text` used to render or persist special elements.", + "items": { + "$ref": "#/definitions/TextElement" + }, + "type": "array" + }, + "type": { + "enum": [ + "text" + ], + "title": "TextUserInputType", + "type": "string" + } + }, + "required": [ + "text", + "type" + ], + "title": "TextUserInput", + "type": "object" + }, + { + "properties": { + "detail": { + "anyOf": [ + { + "$ref": "#/definitions/ImageDetail" + }, + { + "type": "null" + } + ], + "default": null + }, + "type": { + "enum": [ + "image" + ], + "title": "ImageUserInputType", + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "type", + "url" + ], + "title": "ImageUserInput", + "type": "object" + }, + { + "properties": { + "detail": { + "anyOf": [ + { + "$ref": "#/definitions/ImageDetail" + }, + { + "type": "null" + } + ], + "default": null + }, + "path": { + "type": "string" + }, + "type": { + "enum": [ + "localImage" + ], + "title": "LocalImageUserInputType", + "type": "string" + } + }, + "required": [ + "path", + "type" + ], + "title": "LocalImageUserInput", + "type": "object" + }, + { + "properties": { + "name": { + "type": "string" + }, + "path": { + "type": "string" + }, + "type": { + "enum": [ + "skill" + ], + "title": "SkillUserInputType", + "type": "string" + } + }, + "required": [ + "name", + "path", + "type" + ], + "title": "SkillUserInput", + "type": "object" + }, + { + "properties": { + "name": { + "type": "string" + }, + "path": { + "type": "string" + }, + "type": { + "enum": [ + "mention" + ], + "title": "MentionUserInputType", + "type": "string" + } + }, + "required": [ + "name", + "path", + "type" + ], + "title": "MentionUserInput", + "type": "object" + } + ] + }, + "WindowsSandboxSetupMode": { + "enum": [ + "elevated", + "unelevated" + ], + "type": "string" + }, + "WindowsSandboxSetupStartParams": { + "properties": { + "cwd": { + "anyOf": [ + { + "$ref": "#/definitions/AbsolutePathBuf" + }, + { + "type": "null" + } + ] + }, + "mode": { + "$ref": "#/definitions/WindowsSandboxSetupMode" + } + }, + "required": [ + "mode" + ], + "type": "object" + } + }, + "description": "Request from the client to the server.", + "oneOf": [ + { + "properties": { + "id": { + "$ref": "#/definitions/RequestId" + }, + "method": { + "enum": [ + "initialize" + ], + "title": "InitializeRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/InitializeParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "InitializeRequest", + "type": "object" + }, + { + "description": "NEW APIs", + "properties": { + "id": { + "$ref": "#/definitions/RequestId" + }, + "method": { + "enum": [ + "thread/start" + ], + "title": "Thread/startRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/ThreadStartParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "Thread/startRequest", + "type": "object" + }, + { + "properties": { + "id": { + "$ref": "#/definitions/RequestId" + }, + "method": { + "enum": [ + "thread/resume" + ], + "title": "Thread/resumeRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/ThreadResumeParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "Thread/resumeRequest", + "type": "object" + }, + { + "properties": { + "id": { + "$ref": "#/definitions/RequestId" + }, + "method": { + "enum": [ + "thread/fork" + ], + "title": "Thread/forkRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/ThreadForkParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "Thread/forkRequest", + "type": "object" + }, + { + "properties": { + "id": { + "$ref": "#/definitions/RequestId" + }, + "method": { + "enum": [ + "thread/archive" + ], + "title": "Thread/archiveRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/ThreadArchiveParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "Thread/archiveRequest", + "type": "object" + }, + { + "properties": { + "id": { + "$ref": "#/definitions/RequestId" + }, + "method": { + "enum": [ + "thread/unsubscribe" + ], + "title": "Thread/unsubscribeRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/ThreadUnsubscribeParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "Thread/unsubscribeRequest", + "type": "object" + }, + { + "description": "Increment the thread-local out-of-band elicitation counter.\n\nThis is used by external helpers to pause timeout accounting while a user approval or other elicitation is pending outside the app-server request flow.", + "properties": { + "id": { + "$ref": "#/definitions/RequestId" + }, + "method": { + "enum": [ + "thread/increment_elicitation" + ], + "title": "Thread/incrementElicitationRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/ThreadIncrementElicitationParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "Thread/incrementElicitationRequest", + "type": "object" + }, + { + "description": "Decrement the thread-local out-of-band elicitation counter.\n\nWhen the count reaches zero, timeout accounting resumes for the thread.", + "properties": { + "id": { + "$ref": "#/definitions/RequestId" + }, + "method": { + "enum": [ + "thread/decrement_elicitation" + ], + "title": "Thread/decrementElicitationRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/ThreadDecrementElicitationParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "Thread/decrementElicitationRequest", + "type": "object" + }, + { + "properties": { + "id": { + "$ref": "#/definitions/RequestId" + }, + "method": { + "enum": [ + "thread/name/set" + ], + "title": "Thread/name/setRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/ThreadSetNameParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "Thread/name/setRequest", + "type": "object" + }, + { + "properties": { + "id": { + "$ref": "#/definitions/RequestId" + }, + "method": { + "enum": [ + "thread/goal/set" + ], + "title": "Thread/goal/setRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/ThreadGoalSetParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "Thread/goal/setRequest", + "type": "object" + }, + { + "properties": { + "id": { + "$ref": "#/definitions/RequestId" + }, + "method": { + "enum": [ + "thread/goal/get" + ], + "title": "Thread/goal/getRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/ThreadGoalGetParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "Thread/goal/getRequest", + "type": "object" + }, + { + "properties": { + "id": { + "$ref": "#/definitions/RequestId" + }, + "method": { + "enum": [ + "thread/goal/clear" + ], + "title": "Thread/goal/clearRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/ThreadGoalClearParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "Thread/goal/clearRequest", + "type": "object" + }, + { + "properties": { + "id": { + "$ref": "#/definitions/RequestId" + }, + "method": { + "enum": [ + "thread/metadata/update" + ], + "title": "Thread/metadata/updateRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/ThreadMetadataUpdateParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "Thread/metadata/updateRequest", + "type": "object" + }, + { + "properties": { + "id": { + "$ref": "#/definitions/RequestId" + }, + "method": { + "enum": [ + "thread/settings/update" + ], + "title": "Thread/settings/updateRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/ThreadSettingsUpdateParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "Thread/settings/updateRequest", + "type": "object" + }, + { + "properties": { + "id": { + "$ref": "#/definitions/RequestId" + }, + "method": { + "enum": [ + "thread/memoryMode/set" + ], + "title": "Thread/memoryMode/setRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/ThreadMemoryModeSetParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "Thread/memoryMode/setRequest", + "type": "object" + }, + { + "properties": { + "id": { + "$ref": "#/definitions/RequestId" + }, + "method": { + "enum": [ + "memory/reset" + ], + "title": "Memory/resetRequestMethod", + "type": "string" + }, + "params": { + "type": "null" + } + }, + "required": [ + "id", + "method" + ], + "title": "Memory/resetRequest", + "type": "object" + }, + { + "properties": { + "id": { + "$ref": "#/definitions/RequestId" + }, + "method": { + "enum": [ + "thread/unarchive" + ], + "title": "Thread/unarchiveRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/ThreadUnarchiveParams" + } + }, + "required": [ + "id", + "method", + "params" ], + "title": "Thread/unarchiveRequest", "type": "object" }, - "TurnSteerParams": { + { "properties": { - "expectedTurnId": { - "description": "Required active turn id precondition. The request fails when it does not match the currently active turn.", - "type": "string" - }, - "input": { - "items": { - "$ref": "#/definitions/UserInput" - }, - "type": "array" + "id": { + "$ref": "#/definitions/RequestId" }, - "threadId": { + "method": { + "enum": [ + "thread/compact/start" + ], + "title": "Thread/compact/startRequestMethod", "type": "string" + }, + "params": { + "$ref": "#/definitions/ThreadCompactStartParams" } }, "required": [ - "expectedTurnId", - "input", - "threadId" + "id", + "method", + "params" ], + "title": "Thread/compact/startRequest", "type": "object" }, - "UserInput": { - "oneOf": [ - { - "properties": { - "text": { - "type": "string" - }, - "text_elements": { - "default": [], - "description": "UI-defined spans within `text` used to render or persist special elements.", - "items": { - "$ref": "#/definitions/TextElement" - }, - "type": "array" - }, - "type": { - "enum": [ - "text" - ], - "title": "TextUserInputType", - "type": "string" - } - }, - "required": [ - "text", - "type" - ], - "title": "TextUserInput", - "type": "object" - }, - { - "properties": { - "detail": { - "anyOf": [ - { - "$ref": "#/definitions/ImageDetail" - }, - { - "type": "null" - } - ], - "default": null - }, - "type": { - "enum": [ - "image" - ], - "title": "ImageUserInputType", - "type": "string" - }, - "url": { - "type": "string" - } - }, - "required": [ - "type", - "url" - ], - "title": "ImageUserInput", - "type": "object" - }, - { - "properties": { - "detail": { - "anyOf": [ - { - "$ref": "#/definitions/ImageDetail" - }, - { - "type": "null" - } - ], - "default": null - }, - "path": { - "type": "string" - }, - "type": { - "enum": [ - "localImage" - ], - "title": "LocalImageUserInputType", - "type": "string" - } - }, - "required": [ - "path", - "type" - ], - "title": "LocalImageUserInput", - "type": "object" + { + "properties": { + "id": { + "$ref": "#/definitions/RequestId" }, - { - "properties": { - "name": { - "type": "string" - }, - "path": { - "type": "string" - }, - "type": { - "enum": [ - "skill" - ], - "title": "SkillUserInputType", - "type": "string" - } - }, - "required": [ - "name", - "path", - "type" + "method": { + "enum": [ + "thread/shellCommand" ], - "title": "SkillUserInput", - "type": "object" + "title": "Thread/shellCommandRequestMethod", + "type": "string" }, - { - "properties": { - "name": { - "type": "string" - }, - "path": { - "type": "string" - }, - "type": { - "enum": [ - "mention" - ], - "title": "MentionUserInputType", - "type": "string" - } - }, - "required": [ - "name", - "path", - "type" - ], - "title": "MentionUserInput", - "type": "object" + "params": { + "$ref": "#/definitions/ThreadShellCommandParams" } - ] - }, - "WindowsSandboxSetupMode": { - "enum": [ - "elevated", - "unelevated" + }, + "required": [ + "id", + "method", + "params" ], - "type": "string" + "title": "Thread/shellCommandRequest", + "type": "object" }, - "WindowsSandboxSetupStartParams": { + { "properties": { - "cwd": { - "anyOf": [ - { - "$ref": "#/definitions/AbsolutePathBuf" - }, - { - "type": "null" - } - ] + "id": { + "$ref": "#/definitions/RequestId" }, - "mode": { - "$ref": "#/definitions/WindowsSandboxSetupMode" + "method": { + "enum": [ + "thread/approveGuardianDeniedAction" + ], + "title": "Thread/approveGuardianDeniedActionRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/ThreadApproveGuardianDeniedActionParams" } }, "required": [ - "mode" + "id", + "method", + "params" ], + "title": "Thread/approveGuardianDeniedActionRequest", "type": "object" - } - }, - "description": "Request from the client to the server.", - "oneOf": [ + }, { "properties": { "id": { @@ -4206,13 +5555,13 @@ }, "method": { "enum": [ - "initialize" + "thread/backgroundTerminals/clean" ], - "title": "InitializeRequestMethod", + "title": "Thread/backgroundTerminals/cleanRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/InitializeParams" + "$ref": "#/definitions/ThreadBackgroundTerminalsCleanParams" } }, "required": [ @@ -4220,24 +5569,23 @@ "method", "params" ], - "title": "InitializeRequest", + "title": "Thread/backgroundTerminals/cleanRequest", "type": "object" }, { - "description": "NEW APIs", "properties": { "id": { "$ref": "#/definitions/RequestId" }, "method": { "enum": [ - "thread/start" + "thread/rollback" ], - "title": "Thread/startRequestMethod", + "title": "Thread/rollbackRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/ThreadStartParams" + "$ref": "#/definitions/ThreadRollbackParams" } }, "required": [ @@ -4245,7 +5593,7 @@ "method", "params" ], - "title": "Thread/startRequest", + "title": "Thread/rollbackRequest", "type": "object" }, { @@ -4255,13 +5603,13 @@ }, "method": { "enum": [ - "thread/resume" + "thread/list" ], - "title": "Thread/resumeRequestMethod", + "title": "Thread/listRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/ThreadResumeParams" + "$ref": "#/definitions/ThreadListParams" } }, "required": [ @@ -4269,7 +5617,7 @@ "method", "params" ], - "title": "Thread/resumeRequest", + "title": "Thread/listRequest", "type": "object" }, { @@ -4279,13 +5627,13 @@ }, "method": { "enum": [ - "thread/fork" + "thread/search" ], - "title": "Thread/forkRequestMethod", + "title": "Thread/searchRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/ThreadForkParams" + "$ref": "#/definitions/ThreadSearchParams" } }, "required": [ @@ -4293,7 +5641,7 @@ "method", "params" ], - "title": "Thread/forkRequest", + "title": "Thread/searchRequest", "type": "object" }, { @@ -4303,13 +5651,13 @@ }, "method": { "enum": [ - "thread/archive" + "thread/loaded/list" ], - "title": "Thread/archiveRequestMethod", + "title": "Thread/loaded/listRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/ThreadArchiveParams" + "$ref": "#/definitions/ThreadLoadedListParams" } }, "required": [ @@ -4317,7 +5665,7 @@ "method", "params" ], - "title": "Thread/archiveRequest", + "title": "Thread/loaded/listRequest", "type": "object" }, { @@ -4327,13 +5675,13 @@ }, "method": { "enum": [ - "thread/unsubscribe" + "thread/read" ], - "title": "Thread/unsubscribeRequestMethod", + "title": "Thread/readRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/ThreadUnsubscribeParams" + "$ref": "#/definitions/ThreadReadParams" } }, "required": [ @@ -4341,7 +5689,7 @@ "method", "params" ], - "title": "Thread/unsubscribeRequest", + "title": "Thread/readRequest", "type": "object" }, { @@ -4351,13 +5699,13 @@ }, "method": { "enum": [ - "thread/name/set" + "thread/turns/list" ], - "title": "Thread/name/setRequestMethod", + "title": "Thread/turns/listRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/ThreadSetNameParams" + "$ref": "#/definitions/ThreadTurnsListParams" } }, "required": [ @@ -4365,7 +5713,7 @@ "method", "params" ], - "title": "Thread/name/setRequest", + "title": "Thread/turns/listRequest", "type": "object" }, { @@ -4375,13 +5723,13 @@ }, "method": { "enum": [ - "thread/goal/set" + "thread/turns/items/list" ], - "title": "Thread/goal/setRequestMethod", + "title": "Thread/turns/items/listRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/ThreadGoalSetParams" + "$ref": "#/definitions/ThreadTurnsItemsListParams" } }, "required": [ @@ -4389,23 +5737,24 @@ "method", "params" ], - "title": "Thread/goal/setRequest", + "title": "Thread/turns/items/listRequest", "type": "object" }, { + "description": "Append raw Responses API items to the thread history without starting a user turn.", "properties": { "id": { "$ref": "#/definitions/RequestId" }, "method": { "enum": [ - "thread/goal/get" + "thread/inject_items" ], - "title": "Thread/goal/getRequestMethod", + "title": "Thread/injectItemsRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/ThreadGoalGetParams" + "$ref": "#/definitions/ThreadInjectItemsParams" } }, "required": [ @@ -4413,7 +5762,7 @@ "method", "params" ], - "title": "Thread/goal/getRequest", + "title": "Thread/injectItemsRequest", "type": "object" }, { @@ -4423,13 +5772,13 @@ }, "method": { "enum": [ - "thread/goal/clear" + "skills/list" ], - "title": "Thread/goal/clearRequestMethod", + "title": "Skills/listRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/ThreadGoalClearParams" + "$ref": "#/definitions/SkillsListParams" } }, "required": [ @@ -4437,7 +5786,7 @@ "method", "params" ], - "title": "Thread/goal/clearRequest", + "title": "Skills/listRequest", "type": "object" }, { @@ -4447,13 +5796,13 @@ }, "method": { "enum": [ - "thread/metadata/update" + "hooks/list" ], - "title": "Thread/metadata/updateRequestMethod", + "title": "Hooks/listRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/ThreadMetadataUpdateParams" + "$ref": "#/definitions/HooksListParams" } }, "required": [ @@ -4461,7 +5810,7 @@ "method", "params" ], - "title": "Thread/metadata/updateRequest", + "title": "Hooks/listRequest", "type": "object" }, { @@ -4471,13 +5820,13 @@ }, "method": { "enum": [ - "thread/unarchive" + "marketplace/add" ], - "title": "Thread/unarchiveRequestMethod", + "title": "Marketplace/addRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/ThreadUnarchiveParams" + "$ref": "#/definitions/MarketplaceAddParams" } }, "required": [ @@ -4485,7 +5834,7 @@ "method", "params" ], - "title": "Thread/unarchiveRequest", + "title": "Marketplace/addRequest", "type": "object" }, { @@ -4495,13 +5844,13 @@ }, "method": { "enum": [ - "thread/compact/start" + "marketplace/remove" ], - "title": "Thread/compact/startRequestMethod", + "title": "Marketplace/removeRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/ThreadCompactStartParams" + "$ref": "#/definitions/MarketplaceRemoveParams" } }, "required": [ @@ -4509,7 +5858,7 @@ "method", "params" ], - "title": "Thread/compact/startRequest", + "title": "Marketplace/removeRequest", "type": "object" }, { @@ -4519,13 +5868,13 @@ }, "method": { "enum": [ - "thread/shellCommand" + "marketplace/upgrade" ], - "title": "Thread/shellCommandRequestMethod", + "title": "Marketplace/upgradeRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/ThreadShellCommandParams" + "$ref": "#/definitions/MarketplaceUpgradeParams" } }, "required": [ @@ -4533,7 +5882,7 @@ "method", "params" ], - "title": "Thread/shellCommandRequest", + "title": "Marketplace/upgradeRequest", "type": "object" }, { @@ -4543,13 +5892,13 @@ }, "method": { "enum": [ - "thread/approveGuardianDeniedAction" + "plugin/list" ], - "title": "Thread/approveGuardianDeniedActionRequestMethod", + "title": "Plugin/listRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/ThreadApproveGuardianDeniedActionParams" + "$ref": "#/definitions/PluginListParams" } }, "required": [ @@ -4557,7 +5906,7 @@ "method", "params" ], - "title": "Thread/approveGuardianDeniedActionRequest", + "title": "Plugin/listRequest", "type": "object" }, { @@ -4567,13 +5916,13 @@ }, "method": { "enum": [ - "thread/rollback" + "plugin/installed" ], - "title": "Thread/rollbackRequestMethod", + "title": "Plugin/installedRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/ThreadRollbackParams" + "$ref": "#/definitions/PluginInstalledParams" } }, "required": [ @@ -4581,7 +5930,7 @@ "method", "params" ], - "title": "Thread/rollbackRequest", + "title": "Plugin/installedRequest", "type": "object" }, { @@ -4591,13 +5940,13 @@ }, "method": { "enum": [ - "thread/list" + "plugin/read" ], - "title": "Thread/listRequestMethod", + "title": "Plugin/readRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/ThreadListParams" + "$ref": "#/definitions/PluginReadParams" } }, "required": [ @@ -4605,7 +5954,7 @@ "method", "params" ], - "title": "Thread/listRequest", + "title": "Plugin/readRequest", "type": "object" }, { @@ -4615,13 +5964,13 @@ }, "method": { "enum": [ - "thread/loaded/list" + "plugin/skill/read" ], - "title": "Thread/loaded/listRequestMethod", + "title": "Plugin/skill/readRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/ThreadLoadedListParams" + "$ref": "#/definitions/PluginSkillReadParams" } }, "required": [ @@ -4629,7 +5978,7 @@ "method", "params" ], - "title": "Thread/loaded/listRequest", + "title": "Plugin/skill/readRequest", "type": "object" }, { @@ -4639,13 +5988,13 @@ }, "method": { "enum": [ - "thread/read" + "plugin/share/save" ], - "title": "Thread/readRequestMethod", + "title": "Plugin/share/saveRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/ThreadReadParams" + "$ref": "#/definitions/PluginShareSaveParams" } }, "required": [ @@ -4653,24 +6002,23 @@ "method", "params" ], - "title": "Thread/readRequest", + "title": "Plugin/share/saveRequest", "type": "object" }, { - "description": "Append raw Responses API items to the thread history without starting a user turn.", "properties": { "id": { "$ref": "#/definitions/RequestId" }, "method": { "enum": [ - "thread/inject_items" + "plugin/share/updateTargets" ], - "title": "Thread/injectItemsRequestMethod", + "title": "Plugin/share/updateTargetsRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/ThreadInjectItemsParams" + "$ref": "#/definitions/PluginShareUpdateTargetsParams" } }, "required": [ @@ -4678,7 +6026,7 @@ "method", "params" ], - "title": "Thread/injectItemsRequest", + "title": "Plugin/share/updateTargetsRequest", "type": "object" }, { @@ -4688,13 +6036,13 @@ }, "method": { "enum": [ - "skills/list" + "plugin/share/list" ], - "title": "Skills/listRequestMethod", + "title": "Plugin/share/listRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/SkillsListParams" + "$ref": "#/definitions/PluginShareListParams" } }, "required": [ @@ -4702,7 +6050,7 @@ "method", "params" ], - "title": "Skills/listRequest", + "title": "Plugin/share/listRequest", "type": "object" }, { @@ -4712,13 +6060,13 @@ }, "method": { "enum": [ - "hooks/list" + "plugin/share/checkout" ], - "title": "Hooks/listRequestMethod", + "title": "Plugin/share/checkoutRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/HooksListParams" + "$ref": "#/definitions/PluginShareCheckoutParams" } }, "required": [ @@ -4726,7 +6074,7 @@ "method", "params" ], - "title": "Hooks/listRequest", + "title": "Plugin/share/checkoutRequest", "type": "object" }, { @@ -4736,13 +6084,13 @@ }, "method": { "enum": [ - "marketplace/add" + "plugin/share/delete" ], - "title": "Marketplace/addRequestMethod", + "title": "Plugin/share/deleteRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/MarketplaceAddParams" + "$ref": "#/definitions/PluginShareDeleteParams" } }, "required": [ @@ -4750,7 +6098,7 @@ "method", "params" ], - "title": "Marketplace/addRequest", + "title": "Plugin/share/deleteRequest", "type": "object" }, { @@ -4760,13 +6108,13 @@ }, "method": { "enum": [ - "marketplace/remove" + "app/list" ], - "title": "Marketplace/removeRequestMethod", + "title": "App/listRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/MarketplaceRemoveParams" + "$ref": "#/definitions/AppsListParams" } }, "required": [ @@ -4774,7 +6122,7 @@ "method", "params" ], - "title": "Marketplace/removeRequest", + "title": "App/listRequest", "type": "object" }, { @@ -4784,13 +6132,13 @@ }, "method": { "enum": [ - "marketplace/upgrade" + "fs/readFile" ], - "title": "Marketplace/upgradeRequestMethod", + "title": "Fs/readFileRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/MarketplaceUpgradeParams" + "$ref": "#/definitions/FsReadFileParams" } }, "required": [ @@ -4798,7 +6146,7 @@ "method", "params" ], - "title": "Marketplace/upgradeRequest", + "title": "Fs/readFileRequest", "type": "object" }, { @@ -4808,13 +6156,13 @@ }, "method": { "enum": [ - "plugin/list" + "fs/writeFile" ], - "title": "Plugin/listRequestMethod", + "title": "Fs/writeFileRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/PluginListParams" + "$ref": "#/definitions/FsWriteFileParams" } }, "required": [ @@ -4822,7 +6170,7 @@ "method", "params" ], - "title": "Plugin/listRequest", + "title": "Fs/writeFileRequest", "type": "object" }, { @@ -4832,13 +6180,13 @@ }, "method": { "enum": [ - "plugin/installed" + "fs/createDirectory" ], - "title": "Plugin/installedRequestMethod", + "title": "Fs/createDirectoryRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/PluginInstalledParams" + "$ref": "#/definitions/FsCreateDirectoryParams" } }, "required": [ @@ -4846,7 +6194,7 @@ "method", "params" ], - "title": "Plugin/installedRequest", + "title": "Fs/createDirectoryRequest", "type": "object" }, { @@ -4856,13 +6204,13 @@ }, "method": { "enum": [ - "plugin/read" + "fs/getMetadata" ], - "title": "Plugin/readRequestMethod", + "title": "Fs/getMetadataRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/PluginReadParams" + "$ref": "#/definitions/FsGetMetadataParams" } }, "required": [ @@ -4870,7 +6218,7 @@ "method", "params" ], - "title": "Plugin/readRequest", + "title": "Fs/getMetadataRequest", "type": "object" }, { @@ -4880,13 +6228,13 @@ }, "method": { "enum": [ - "plugin/skill/read" + "fs/readDirectory" ], - "title": "Plugin/skill/readRequestMethod", + "title": "Fs/readDirectoryRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/PluginSkillReadParams" + "$ref": "#/definitions/FsReadDirectoryParams" } }, "required": [ @@ -4894,7 +6242,7 @@ "method", "params" ], - "title": "Plugin/skill/readRequest", + "title": "Fs/readDirectoryRequest", "type": "object" }, { @@ -4904,13 +6252,13 @@ }, "method": { "enum": [ - "plugin/share/save" + "fs/remove" ], - "title": "Plugin/share/saveRequestMethod", + "title": "Fs/removeRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/PluginShareSaveParams" + "$ref": "#/definitions/FsRemoveParams" } }, "required": [ @@ -4918,7 +6266,7 @@ "method", "params" ], - "title": "Plugin/share/saveRequest", + "title": "Fs/removeRequest", "type": "object" }, { @@ -4928,13 +6276,13 @@ }, "method": { "enum": [ - "plugin/share/updateTargets" + "fs/copy" ], - "title": "Plugin/share/updateTargetsRequestMethod", + "title": "Fs/copyRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/PluginShareUpdateTargetsParams" + "$ref": "#/definitions/FsCopyParams" } }, "required": [ @@ -4942,7 +6290,7 @@ "method", "params" ], - "title": "Plugin/share/updateTargetsRequest", + "title": "Fs/copyRequest", "type": "object" }, { @@ -4952,13 +6300,13 @@ }, "method": { "enum": [ - "plugin/share/list" + "fs/watch" ], - "title": "Plugin/share/listRequestMethod", + "title": "Fs/watchRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/PluginShareListParams" + "$ref": "#/definitions/FsWatchParams" } }, "required": [ @@ -4966,7 +6314,7 @@ "method", "params" ], - "title": "Plugin/share/listRequest", + "title": "Fs/watchRequest", "type": "object" }, { @@ -4976,13 +6324,13 @@ }, "method": { "enum": [ - "plugin/share/checkout" + "fs/unwatch" ], - "title": "Plugin/share/checkoutRequestMethod", + "title": "Fs/unwatchRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/PluginShareCheckoutParams" + "$ref": "#/definitions/FsUnwatchParams" } }, "required": [ @@ -4990,7 +6338,7 @@ "method", "params" ], - "title": "Plugin/share/checkoutRequest", + "title": "Fs/unwatchRequest", "type": "object" }, { @@ -5000,13 +6348,13 @@ }, "method": { "enum": [ - "plugin/share/delete" + "skills/config/write" ], - "title": "Plugin/share/deleteRequestMethod", + "title": "Skills/config/writeRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/PluginShareDeleteParams" + "$ref": "#/definitions/SkillsConfigWriteParams" } }, "required": [ @@ -5014,7 +6362,7 @@ "method", "params" ], - "title": "Plugin/share/deleteRequest", + "title": "Skills/config/writeRequest", "type": "object" }, { @@ -5024,13 +6372,13 @@ }, "method": { "enum": [ - "app/list" + "plugin/install" ], - "title": "App/listRequestMethod", + "title": "Plugin/installRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/AppsListParams" + "$ref": "#/definitions/PluginInstallParams" } }, "required": [ @@ -5038,7 +6386,7 @@ "method", "params" ], - "title": "App/listRequest", + "title": "Plugin/installRequest", "type": "object" }, { @@ -5048,13 +6396,13 @@ }, "method": { "enum": [ - "fs/readFile" + "plugin/uninstall" ], - "title": "Fs/readFileRequestMethod", + "title": "Plugin/uninstallRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/FsReadFileParams" + "$ref": "#/definitions/PluginUninstallParams" } }, "required": [ @@ -5062,7 +6410,7 @@ "method", "params" ], - "title": "Fs/readFileRequest", + "title": "Plugin/uninstallRequest", "type": "object" }, { @@ -5072,13 +6420,13 @@ }, "method": { "enum": [ - "fs/writeFile" + "turn/start" ], - "title": "Fs/writeFileRequestMethod", + "title": "Turn/startRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/FsWriteFileParams" + "$ref": "#/definitions/TurnStartParams" } }, "required": [ @@ -5086,7 +6434,7 @@ "method", "params" ], - "title": "Fs/writeFileRequest", + "title": "Turn/startRequest", "type": "object" }, { @@ -5096,13 +6444,13 @@ }, "method": { "enum": [ - "fs/createDirectory" + "turn/steer" ], - "title": "Fs/createDirectoryRequestMethod", + "title": "Turn/steerRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/FsCreateDirectoryParams" + "$ref": "#/definitions/TurnSteerParams" } }, "required": [ @@ -5110,7 +6458,7 @@ "method", "params" ], - "title": "Fs/createDirectoryRequest", + "title": "Turn/steerRequest", "type": "object" }, { @@ -5120,13 +6468,13 @@ }, "method": { "enum": [ - "fs/getMetadata" + "turn/interrupt" ], - "title": "Fs/getMetadataRequestMethod", + "title": "Turn/interruptRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/FsGetMetadataParams" + "$ref": "#/definitions/TurnInterruptParams" } }, "required": [ @@ -5134,7 +6482,7 @@ "method", "params" ], - "title": "Fs/getMetadataRequest", + "title": "Turn/interruptRequest", "type": "object" }, { @@ -5144,13 +6492,13 @@ }, "method": { "enum": [ - "fs/readDirectory" + "thread/realtime/start" ], - "title": "Fs/readDirectoryRequestMethod", + "title": "Thread/realtime/startRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/FsReadDirectoryParams" + "$ref": "#/definitions/ThreadRealtimeStartParams" } }, "required": [ @@ -5158,7 +6506,7 @@ "method", "params" ], - "title": "Fs/readDirectoryRequest", + "title": "Thread/realtime/startRequest", "type": "object" }, { @@ -5168,13 +6516,13 @@ }, "method": { "enum": [ - "fs/remove" + "thread/realtime/appendAudio" ], - "title": "Fs/removeRequestMethod", + "title": "Thread/realtime/appendAudioRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/FsRemoveParams" + "$ref": "#/definitions/ThreadRealtimeAppendAudioParams" } }, "required": [ @@ -5182,7 +6530,7 @@ "method", "params" ], - "title": "Fs/removeRequest", + "title": "Thread/realtime/appendAudioRequest", "type": "object" }, { @@ -5192,13 +6540,13 @@ }, "method": { "enum": [ - "fs/copy" + "thread/realtime/appendText" ], - "title": "Fs/copyRequestMethod", + "title": "Thread/realtime/appendTextRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/FsCopyParams" + "$ref": "#/definitions/ThreadRealtimeAppendTextParams" } }, "required": [ @@ -5206,7 +6554,7 @@ "method", "params" ], - "title": "Fs/copyRequest", + "title": "Thread/realtime/appendTextRequest", "type": "object" }, { @@ -5216,13 +6564,13 @@ }, "method": { "enum": [ - "fs/watch" + "thread/realtime/stop" ], - "title": "Fs/watchRequestMethod", + "title": "Thread/realtime/stopRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/FsWatchParams" + "$ref": "#/definitions/ThreadRealtimeStopParams" } }, "required": [ @@ -5230,7 +6578,7 @@ "method", "params" ], - "title": "Fs/watchRequest", + "title": "Thread/realtime/stopRequest", "type": "object" }, { @@ -5240,13 +6588,13 @@ }, "method": { "enum": [ - "fs/unwatch" + "thread/realtime/listVoices" ], - "title": "Fs/unwatchRequestMethod", + "title": "Thread/realtime/listVoicesRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/FsUnwatchParams" + "$ref": "#/definitions/ThreadRealtimeListVoicesParams" } }, "required": [ @@ -5254,7 +6602,7 @@ "method", "params" ], - "title": "Fs/unwatchRequest", + "title": "Thread/realtime/listVoicesRequest", "type": "object" }, { @@ -5264,13 +6612,13 @@ }, "method": { "enum": [ - "skills/config/write" + "review/start" ], - "title": "Skills/config/writeRequestMethod", + "title": "Review/startRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/SkillsConfigWriteParams" + "$ref": "#/definitions/ReviewStartParams" } }, "required": [ @@ -5278,7 +6626,7 @@ "method", "params" ], - "title": "Skills/config/writeRequest", + "title": "Review/startRequest", "type": "object" }, { @@ -5288,13 +6636,13 @@ }, "method": { "enum": [ - "plugin/install" + "model/list" ], - "title": "Plugin/installRequestMethod", + "title": "Model/listRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/PluginInstallParams" + "$ref": "#/definitions/ModelListParams" } }, "required": [ @@ -5302,7 +6650,7 @@ "method", "params" ], - "title": "Plugin/installRequest", + "title": "Model/listRequest", "type": "object" }, { @@ -5312,13 +6660,13 @@ }, "method": { "enum": [ - "plugin/uninstall" + "modelProvider/capabilities/read" ], - "title": "Plugin/uninstallRequestMethod", + "title": "ModelProvider/capabilities/readRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/PluginUninstallParams" + "$ref": "#/definitions/ModelProviderCapabilitiesReadParams" } }, "required": [ @@ -5326,7 +6674,7 @@ "method", "params" ], - "title": "Plugin/uninstallRequest", + "title": "ModelProvider/capabilities/readRequest", "type": "object" }, { @@ -5336,13 +6684,13 @@ }, "method": { "enum": [ - "turn/start" + "experimentalFeature/list" ], - "title": "Turn/startRequestMethod", + "title": "ExperimentalFeature/listRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/TurnStartParams" + "$ref": "#/definitions/ExperimentalFeatureListParams" } }, "required": [ @@ -5350,7 +6698,7 @@ "method", "params" ], - "title": "Turn/startRequest", + "title": "ExperimentalFeature/listRequest", "type": "object" }, { @@ -5360,13 +6708,13 @@ }, "method": { "enum": [ - "turn/steer" + "permissionProfile/list" ], - "title": "Turn/steerRequestMethod", + "title": "PermissionProfile/listRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/TurnSteerParams" + "$ref": "#/definitions/PermissionProfileListParams" } }, "required": [ @@ -5374,7 +6722,7 @@ "method", "params" ], - "title": "Turn/steerRequest", + "title": "PermissionProfile/listRequest", "type": "object" }, { @@ -5384,13 +6732,13 @@ }, "method": { "enum": [ - "turn/interrupt" + "experimentalFeature/enablement/set" ], - "title": "Turn/interruptRequestMethod", + "title": "ExperimentalFeature/enablement/setRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/TurnInterruptParams" + "$ref": "#/definitions/ExperimentalFeatureEnablementSetParams" } }, "required": [ @@ -5398,7 +6746,7 @@ "method", "params" ], - "title": "Turn/interruptRequest", + "title": "ExperimentalFeature/enablement/setRequest", "type": "object" }, { @@ -5408,21 +6756,20 @@ }, "method": { "enum": [ - "review/start" + "remoteControl/enable" ], - "title": "Review/startRequestMethod", + "title": "RemoteControl/enableRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/ReviewStartParams" + "type": "null" } }, "required": [ "id", - "method", - "params" + "method" ], - "title": "Review/startRequest", + "title": "RemoteControl/enableRequest", "type": "object" }, { @@ -5432,21 +6779,20 @@ }, "method": { "enum": [ - "model/list" + "remoteControl/disable" ], - "title": "Model/listRequestMethod", + "title": "RemoteControl/disableRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/ModelListParams" + "type": "null" } }, "required": [ "id", - "method", - "params" + "method" ], - "title": "Model/listRequest", + "title": "RemoteControl/disableRequest", "type": "object" }, { @@ -5456,37 +6802,37 @@ }, "method": { "enum": [ - "modelProvider/capabilities/read" + "remoteControl/status/read" ], - "title": "ModelProvider/capabilities/readRequestMethod", + "title": "RemoteControl/status/readRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/ModelProviderCapabilitiesReadParams" + "type": "null" } }, "required": [ "id", - "method", - "params" + "method" ], - "title": "ModelProvider/capabilities/readRequest", + "title": "RemoteControl/status/readRequest", "type": "object" }, { + "description": "Lists collaboration mode presets.", "properties": { "id": { "$ref": "#/definitions/RequestId" }, "method": { "enum": [ - "experimentalFeature/list" + "collaborationMode/list" ], - "title": "ExperimentalFeature/listRequestMethod", + "title": "CollaborationMode/listRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/ExperimentalFeatureListParams" + "$ref": "#/definitions/CollaborationModeListParams" } }, "required": [ @@ -5494,23 +6840,24 @@ "method", "params" ], - "title": "ExperimentalFeature/listRequest", + "title": "CollaborationMode/listRequest", "type": "object" }, { + "description": "Test-only method used to validate experimental gating.", "properties": { "id": { "$ref": "#/definitions/RequestId" }, "method": { "enum": [ - "permissionProfile/list" + "mock/experimentalMethod" ], - "title": "PermissionProfile/listRequestMethod", + "title": "Mock/experimentalMethodRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/PermissionProfileListParams" + "$ref": "#/definitions/MockExperimentalMethodParams" } }, "required": [ @@ -5518,23 +6865,24 @@ "method", "params" ], - "title": "PermissionProfile/listRequest", + "title": "Mock/experimentalMethodRequest", "type": "object" }, { + "description": "Adds or replaces a remote environment by id for later selection.", "properties": { "id": { "$ref": "#/definitions/RequestId" }, "method": { "enum": [ - "experimentalFeature/enablement/set" + "environment/add" ], - "title": "ExperimentalFeature/enablement/setRequestMethod", + "title": "Environment/addRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/ExperimentalFeatureEnablementSetParams" + "$ref": "#/definitions/EnvironmentAddParams" } }, "required": [ @@ -5542,7 +6890,7 @@ "method", "params" ], - "title": "ExperimentalFeature/enablement/setRequest", + "title": "Environment/addRequest", "type": "object" }, { @@ -5953,6 +7301,106 @@ "title": "Command/exec/resizeRequest", "type": "object" }, + { + "description": "Spawn a standalone process (argv vector) without a Codex sandbox.", + "properties": { + "id": { + "$ref": "#/definitions/RequestId" + }, + "method": { + "enum": [ + "process/spawn" + ], + "title": "Process/spawnRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/ProcessSpawnParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "Process/spawnRequest", + "type": "object" + }, + { + "description": "Write stdin bytes to a running `process/spawn` session or close stdin.", + "properties": { + "id": { + "$ref": "#/definitions/RequestId" + }, + "method": { + "enum": [ + "process/writeStdin" + ], + "title": "Process/writeStdinRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/ProcessWriteStdinParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "Process/writeStdinRequest", + "type": "object" + }, + { + "description": "Terminate a running `process/spawn` session by client-supplied `processHandle`.", + "properties": { + "id": { + "$ref": "#/definitions/RequestId" + }, + "method": { + "enum": [ + "process/kill" + ], + "title": "Process/killRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/ProcessKillParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "Process/killRequest", + "type": "object" + }, + { + "description": "Resize a running PTY-backed `process/spawn` session by client-supplied `processHandle`.", + "properties": { + "id": { + "$ref": "#/definitions/RequestId" + }, + "method": { + "enum": [ + "process/resizePty" + ], + "title": "Process/resizePtyRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/ProcessResizePtyParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "Process/resizePtyRequest", + "type": "object" + }, { "properties": { "id": { @@ -6143,6 +7591,78 @@ ], "title": "FuzzyFileSearchRequest", "type": "object" + }, + { + "properties": { + "id": { + "$ref": "#/definitions/RequestId" + }, + "method": { + "enum": [ + "fuzzyFileSearch/sessionStart" + ], + "title": "FuzzyFileSearch/sessionStartRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/FuzzyFileSearchSessionStartParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "FuzzyFileSearch/sessionStartRequest", + "type": "object" + }, + { + "properties": { + "id": { + "$ref": "#/definitions/RequestId" + }, + "method": { + "enum": [ + "fuzzyFileSearch/sessionUpdate" + ], + "title": "FuzzyFileSearch/sessionUpdateRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/FuzzyFileSearchSessionUpdateParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "FuzzyFileSearch/sessionUpdateRequest", + "type": "object" + }, + { + "properties": { + "id": { + "$ref": "#/definitions/RequestId" + }, + "method": { + "enum": [ + "fuzzyFileSearch/sessionStop" + ], + "title": "FuzzyFileSearch/sessionStopRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/FuzzyFileSearchSessionStopParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "FuzzyFileSearch/sessionStopRequest", + "type": "object" } ], "title": "ClientRequest" diff --git a/codex-rs/app-server-protocol/schema/json/CommandExecutionRequestApprovalParams.json b/codex-rs/app-server-protocol/schema/json/CommandExecutionRequestApprovalParams.json index 922db80f2f7..4176ab92743 100644 --- a/codex-rs/app-server-protocol/schema/json/CommandExecutionRequestApprovalParams.json +++ b/codex-rs/app-server-protocol/schema/json/CommandExecutionRequestApprovalParams.json @@ -517,6 +517,17 @@ } }, "properties": { + "additionalPermissions": { + "anyOf": [ + { + "$ref": "#/definitions/AdditionalPermissionProfile" + }, + { + "type": "null" + } + ], + "description": "Optional additional permissions requested for this command." + }, "approvalId": { "description": "Unique identifier for this specific approval callback.\n\nFor regular shell/unified_exec approvals, this is null.\n\nFor zsh-exec-bridge subcommand approvals, multiple callbacks can belong to one parent `itemId`, so `approvalId` is a distinct opaque callback id (a UUID) used to disambiguate routing.", "type": [ @@ -524,6 +535,16 @@ "null" ] }, + "availableDecisions": { + "description": "Ordered list of decisions the client may present for this prompt.", + "items": { + "$ref": "#/definitions/CommandExecutionApprovalDecision" + }, + "type": [ + "array", + "null" + ] + }, "command": { "description": "The command to be executed.", "type": [ diff --git a/codex-rs/app-server-protocol/schema/json/FuzzyFileSearchSessionStartParams.json b/codex-rs/app-server-protocol/schema/json/FuzzyFileSearchSessionStartParams.json new file mode 100644 index 00000000000..4afa812d988 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/json/FuzzyFileSearchSessionStartParams.json @@ -0,0 +1,20 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "roots": { + "items": { + "type": "string" + }, + "type": "array" + }, + "sessionId": { + "type": "string" + } + }, + "required": [ + "roots", + "sessionId" + ], + "title": "FuzzyFileSearchSessionStartParams", + "type": "object" +} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/FuzzyFileSearchSessionStartResponse.json b/codex-rs/app-server-protocol/schema/json/FuzzyFileSearchSessionStartResponse.json new file mode 100644 index 00000000000..46256ddf4f8 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/json/FuzzyFileSearchSessionStartResponse.json @@ -0,0 +1,5 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "FuzzyFileSearchSessionStartResponse", + "type": "object" +} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/FuzzyFileSearchSessionStopParams.json b/codex-rs/app-server-protocol/schema/json/FuzzyFileSearchSessionStopParams.json new file mode 100644 index 00000000000..874808fcd58 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/json/FuzzyFileSearchSessionStopParams.json @@ -0,0 +1,13 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "sessionId": { + "type": "string" + } + }, + "required": [ + "sessionId" + ], + "title": "FuzzyFileSearchSessionStopParams", + "type": "object" +} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/FuzzyFileSearchSessionStopResponse.json b/codex-rs/app-server-protocol/schema/json/FuzzyFileSearchSessionStopResponse.json new file mode 100644 index 00000000000..3d222c52e72 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/json/FuzzyFileSearchSessionStopResponse.json @@ -0,0 +1,5 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "FuzzyFileSearchSessionStopResponse", + "type": "object" +} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/FuzzyFileSearchSessionUpdateParams.json b/codex-rs/app-server-protocol/schema/json/FuzzyFileSearchSessionUpdateParams.json new file mode 100644 index 00000000000..dfb7ae1c9f4 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/json/FuzzyFileSearchSessionUpdateParams.json @@ -0,0 +1,17 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "query": { + "type": "string" + }, + "sessionId": { + "type": "string" + } + }, + "required": [ + "query", + "sessionId" + ], + "title": "FuzzyFileSearchSessionUpdateParams", + "type": "object" +} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/FuzzyFileSearchSessionUpdateResponse.json b/codex-rs/app-server-protocol/schema/json/FuzzyFileSearchSessionUpdateResponse.json new file mode 100644 index 00000000000..9aebbb091cd --- /dev/null +++ b/codex-rs/app-server-protocol/schema/json/FuzzyFileSearchSessionUpdateResponse.json @@ -0,0 +1,5 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "FuzzyFileSearchSessionUpdateResponse", + "type": "object" +} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/ServerRequest.json b/codex-rs/app-server-protocol/schema/json/ServerRequest.json index 411095f2c29..85bfc94be45 100644 --- a/codex-rs/app-server-protocol/schema/json/ServerRequest.json +++ b/codex-rs/app-server-protocol/schema/json/ServerRequest.json @@ -344,6 +344,17 @@ }, "CommandExecutionRequestApprovalParams": { "properties": { + "additionalPermissions": { + "anyOf": [ + { + "$ref": "#/definitions/AdditionalPermissionProfile" + }, + { + "type": "null" + } + ], + "description": "Optional additional permissions requested for this command." + }, "approvalId": { "description": "Unique identifier for this specific approval callback.\n\nFor regular shell/unified_exec approvals, this is null.\n\nFor zsh-exec-bridge subcommand approvals, multiple callbacks can belong to one parent `itemId`, so `approvalId` is a distinct opaque callback id (a UUID) used to disambiguate routing.", "type": [ @@ -351,6 +362,16 @@ "null" ] }, + "availableDecisions": { + "description": "Ordered list of decisions the client may present for this prompt.", + "items": { + "$ref": "#/definitions/CommandExecutionApprovalDecision" + }, + "type": [ + "array", + "null" + ] + }, "command": { "description": "The command to be executed.", "type": [ diff --git a/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.schemas.json b/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.schemas.json index a7384050362..efe84e4f330 100644 --- a/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.schemas.json +++ b/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.schemas.json @@ -348,6 +348,56 @@ "title": "Thread/unsubscribeRequest", "type": "object" }, + { + "description": "Increment the thread-local out-of-band elicitation counter.\n\nThis is used by external helpers to pause timeout accounting while a user approval or other elicitation is pending outside the app-server request flow.", + "properties": { + "id": { + "$ref": "#/definitions/v2/RequestId" + }, + "method": { + "enum": [ + "thread/increment_elicitation" + ], + "title": "Thread/incrementElicitationRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/v2/ThreadIncrementElicitationParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "Thread/incrementElicitationRequest", + "type": "object" + }, + { + "description": "Decrement the thread-local out-of-band elicitation counter.\n\nWhen the count reaches zero, timeout accounting resumes for the thread.", + "properties": { + "id": { + "$ref": "#/definitions/v2/RequestId" + }, + "method": { + "enum": [ + "thread/decrement_elicitation" + ], + "title": "Thread/decrementElicitationRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/v2/ThreadDecrementElicitationParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "Thread/decrementElicitationRequest", + "type": "object" + }, { "properties": { "id": { @@ -468,6 +518,77 @@ "title": "Thread/metadata/updateRequest", "type": "object" }, + { + "properties": { + "id": { + "$ref": "#/definitions/v2/RequestId" + }, + "method": { + "enum": [ + "thread/settings/update" + ], + "title": "Thread/settings/updateRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/v2/ThreadSettingsUpdateParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "Thread/settings/updateRequest", + "type": "object" + }, + { + "properties": { + "id": { + "$ref": "#/definitions/v2/RequestId" + }, + "method": { + "enum": [ + "thread/memoryMode/set" + ], + "title": "Thread/memoryMode/setRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/v2/ThreadMemoryModeSetParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "Thread/memoryMode/setRequest", + "type": "object" + }, + { + "properties": { + "id": { + "$ref": "#/definitions/v2/RequestId" + }, + "method": { + "enum": [ + "memory/reset" + ], + "title": "Memory/resetRequestMethod", + "type": "string" + }, + "params": { + "type": "null" + } + }, + "required": [ + "id", + "method" + ], + "title": "Memory/resetRequest", + "type": "object" + }, { "properties": { "id": { @@ -564,6 +685,30 @@ "title": "Thread/approveGuardianDeniedActionRequest", "type": "object" }, + { + "properties": { + "id": { + "$ref": "#/definitions/v2/RequestId" + }, + "method": { + "enum": [ + "thread/backgroundTerminals/clean" + ], + "title": "Thread/backgroundTerminals/cleanRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/v2/ThreadBackgroundTerminalsCleanParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "Thread/backgroundTerminals/cleanRequest", + "type": "object" + }, { "properties": { "id": { @@ -612,6 +757,30 @@ "title": "Thread/listRequest", "type": "object" }, + { + "properties": { + "id": { + "$ref": "#/definitions/v2/RequestId" + }, + "method": { + "enum": [ + "thread/search" + ], + "title": "Thread/searchRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/v2/ThreadSearchParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "Thread/searchRequest", + "type": "object" + }, { "properties": { "id": { @@ -660,6 +829,54 @@ "title": "Thread/readRequest", "type": "object" }, + { + "properties": { + "id": { + "$ref": "#/definitions/v2/RequestId" + }, + "method": { + "enum": [ + "thread/turns/list" + ], + "title": "Thread/turns/listRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/v2/ThreadTurnsListParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "Thread/turns/listRequest", + "type": "object" + }, + { + "properties": { + "id": { + "$ref": "#/definitions/v2/RequestId" + }, + "method": { + "enum": [ + "thread/turns/items/list" + ], + "title": "Thread/turns/items/listRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/v2/ThreadTurnsItemsListParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "Thread/turns/items/listRequest", + "type": "object" + }, { "description": "Append raw Responses API items to the thread history without starting a user turn.", "properties": { @@ -1412,13 +1629,13 @@ }, "method": { "enum": [ - "review/start" + "thread/realtime/start" ], - "title": "Review/startRequestMethod", + "title": "Thread/realtime/startRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/v2/ReviewStartParams" + "$ref": "#/definitions/v2/ThreadRealtimeStartParams" } }, "required": [ @@ -1426,7 +1643,7 @@ "method", "params" ], - "title": "Review/startRequest", + "title": "Thread/realtime/startRequest", "type": "object" }, { @@ -1436,13 +1653,13 @@ }, "method": { "enum": [ - "model/list" + "thread/realtime/appendAudio" ], - "title": "Model/listRequestMethod", + "title": "Thread/realtime/appendAudioRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/v2/ModelListParams" + "$ref": "#/definitions/v2/ThreadRealtimeAppendAudioParams" } }, "required": [ @@ -1450,7 +1667,7 @@ "method", "params" ], - "title": "Model/listRequest", + "title": "Thread/realtime/appendAudioRequest", "type": "object" }, { @@ -1460,13 +1677,13 @@ }, "method": { "enum": [ - "modelProvider/capabilities/read" + "thread/realtime/appendText" ], - "title": "ModelProvider/capabilities/readRequestMethod", + "title": "Thread/realtime/appendTextRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/v2/ModelProviderCapabilitiesReadParams" + "$ref": "#/definitions/v2/ThreadRealtimeAppendTextParams" } }, "required": [ @@ -1474,7 +1691,7 @@ "method", "params" ], - "title": "ModelProvider/capabilities/readRequest", + "title": "Thread/realtime/appendTextRequest", "type": "object" }, { @@ -1484,13 +1701,13 @@ }, "method": { "enum": [ - "experimentalFeature/list" + "thread/realtime/stop" ], - "title": "ExperimentalFeature/listRequestMethod", + "title": "Thread/realtime/stopRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/v2/ExperimentalFeatureListParams" + "$ref": "#/definitions/v2/ThreadRealtimeStopParams" } }, "required": [ @@ -1498,7 +1715,7 @@ "method", "params" ], - "title": "ExperimentalFeature/listRequest", + "title": "Thread/realtime/stopRequest", "type": "object" }, { @@ -1508,13 +1725,13 @@ }, "method": { "enum": [ - "permissionProfile/list" + "thread/realtime/listVoices" ], - "title": "PermissionProfile/listRequestMethod", + "title": "Thread/realtime/listVoicesRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/v2/PermissionProfileListParams" + "$ref": "#/definitions/v2/ThreadRealtimeListVoicesParams" } }, "required": [ @@ -1522,7 +1739,7 @@ "method", "params" ], - "title": "PermissionProfile/listRequest", + "title": "Thread/realtime/listVoicesRequest", "type": "object" }, { @@ -1532,13 +1749,13 @@ }, "method": { "enum": [ - "experimentalFeature/enablement/set" + "review/start" ], - "title": "ExperimentalFeature/enablement/setRequestMethod", + "title": "Review/startRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/v2/ExperimentalFeatureEnablementSetParams" + "$ref": "#/definitions/v2/ReviewStartParams" } }, "required": [ @@ -1546,7 +1763,7 @@ "method", "params" ], - "title": "ExperimentalFeature/enablement/setRequest", + "title": "Review/startRequest", "type": "object" }, { @@ -1556,13 +1773,13 @@ }, "method": { "enum": [ - "mcpServer/oauth/login" + "model/list" ], - "title": "McpServer/oauth/loginRequestMethod", + "title": "Model/listRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/v2/McpServerOauthLoginParams" + "$ref": "#/definitions/v2/ModelListParams" } }, "required": [ @@ -1570,7 +1787,7 @@ "method", "params" ], - "title": "McpServer/oauth/loginRequest", + "title": "Model/listRequest", "type": "object" }, { @@ -1580,20 +1797,21 @@ }, "method": { "enum": [ - "config/mcpServer/reload" + "modelProvider/capabilities/read" ], - "title": "Config/mcpServer/reloadRequestMethod", + "title": "ModelProvider/capabilities/readRequestMethod", "type": "string" }, "params": { - "type": "null" + "$ref": "#/definitions/v2/ModelProviderCapabilitiesReadParams" } }, "required": [ "id", - "method" + "method", + "params" ], - "title": "Config/mcpServer/reloadRequest", + "title": "ModelProvider/capabilities/readRequest", "type": "object" }, { @@ -1603,13 +1821,13 @@ }, "method": { "enum": [ - "mcpServerStatus/list" + "experimentalFeature/list" ], - "title": "McpServerStatus/listRequestMethod", + "title": "ExperimentalFeature/listRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/v2/ListMcpServerStatusParams" + "$ref": "#/definitions/v2/ExperimentalFeatureListParams" } }, "required": [ @@ -1617,7 +1835,7 @@ "method", "params" ], - "title": "McpServerStatus/listRequest", + "title": "ExperimentalFeature/listRequest", "type": "object" }, { @@ -1627,13 +1845,13 @@ }, "method": { "enum": [ - "mcpServer/resource/read" + "permissionProfile/list" ], - "title": "McpServer/resource/readRequestMethod", + "title": "PermissionProfile/listRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/v2/McpResourceReadParams" + "$ref": "#/definitions/v2/PermissionProfileListParams" } }, "required": [ @@ -1641,7 +1859,7 @@ "method", "params" ], - "title": "McpServer/resource/readRequest", + "title": "PermissionProfile/listRequest", "type": "object" }, { @@ -1651,13 +1869,13 @@ }, "method": { "enum": [ - "mcpServer/tool/call" + "experimentalFeature/enablement/set" ], - "title": "McpServer/tool/callRequestMethod", + "title": "ExperimentalFeature/enablement/setRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/v2/McpServerToolCallParams" + "$ref": "#/definitions/v2/ExperimentalFeatureEnablementSetParams" } }, "required": [ @@ -1665,7 +1883,7 @@ "method", "params" ], - "title": "McpServer/tool/callRequest", + "title": "ExperimentalFeature/enablement/setRequest", "type": "object" }, { @@ -1675,18 +1893,281 @@ }, "method": { "enum": [ - "windowsSandbox/setupStart" + "remoteControl/enable" ], - "title": "WindowsSandbox/setupStartRequestMethod", + "title": "RemoteControl/enableRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/v2/WindowsSandboxSetupStartParams" + "type": "null" } }, "required": [ "id", - "method", + "method" + ], + "title": "RemoteControl/enableRequest", + "type": "object" + }, + { + "properties": { + "id": { + "$ref": "#/definitions/v2/RequestId" + }, + "method": { + "enum": [ + "remoteControl/disable" + ], + "title": "RemoteControl/disableRequestMethod", + "type": "string" + }, + "params": { + "type": "null" + } + }, + "required": [ + "id", + "method" + ], + "title": "RemoteControl/disableRequest", + "type": "object" + }, + { + "properties": { + "id": { + "$ref": "#/definitions/v2/RequestId" + }, + "method": { + "enum": [ + "remoteControl/status/read" + ], + "title": "RemoteControl/status/readRequestMethod", + "type": "string" + }, + "params": { + "type": "null" + } + }, + "required": [ + "id", + "method" + ], + "title": "RemoteControl/status/readRequest", + "type": "object" + }, + { + "description": "Lists collaboration mode presets.", + "properties": { + "id": { + "$ref": "#/definitions/v2/RequestId" + }, + "method": { + "enum": [ + "collaborationMode/list" + ], + "title": "CollaborationMode/listRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/v2/CollaborationModeListParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "CollaborationMode/listRequest", + "type": "object" + }, + { + "description": "Test-only method used to validate experimental gating.", + "properties": { + "id": { + "$ref": "#/definitions/v2/RequestId" + }, + "method": { + "enum": [ + "mock/experimentalMethod" + ], + "title": "Mock/experimentalMethodRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/v2/MockExperimentalMethodParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "Mock/experimentalMethodRequest", + "type": "object" + }, + { + "description": "Adds or replaces a remote environment by id for later selection.", + "properties": { + "id": { + "$ref": "#/definitions/v2/RequestId" + }, + "method": { + "enum": [ + "environment/add" + ], + "title": "Environment/addRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/v2/EnvironmentAddParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "Environment/addRequest", + "type": "object" + }, + { + "properties": { + "id": { + "$ref": "#/definitions/v2/RequestId" + }, + "method": { + "enum": [ + "mcpServer/oauth/login" + ], + "title": "McpServer/oauth/loginRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/v2/McpServerOauthLoginParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "McpServer/oauth/loginRequest", + "type": "object" + }, + { + "properties": { + "id": { + "$ref": "#/definitions/v2/RequestId" + }, + "method": { + "enum": [ + "config/mcpServer/reload" + ], + "title": "Config/mcpServer/reloadRequestMethod", + "type": "string" + }, + "params": { + "type": "null" + } + }, + "required": [ + "id", + "method" + ], + "title": "Config/mcpServer/reloadRequest", + "type": "object" + }, + { + "properties": { + "id": { + "$ref": "#/definitions/v2/RequestId" + }, + "method": { + "enum": [ + "mcpServerStatus/list" + ], + "title": "McpServerStatus/listRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/v2/ListMcpServerStatusParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "McpServerStatus/listRequest", + "type": "object" + }, + { + "properties": { + "id": { + "$ref": "#/definitions/v2/RequestId" + }, + "method": { + "enum": [ + "mcpServer/resource/read" + ], + "title": "McpServer/resource/readRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/v2/McpResourceReadParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "McpServer/resource/readRequest", + "type": "object" + }, + { + "properties": { + "id": { + "$ref": "#/definitions/v2/RequestId" + }, + "method": { + "enum": [ + "mcpServer/tool/call" + ], + "title": "McpServer/tool/callRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/v2/McpServerToolCallParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "McpServer/tool/callRequest", + "type": "object" + }, + { + "properties": { + "id": { + "$ref": "#/definitions/v2/RequestId" + }, + "method": { + "enum": [ + "windowsSandbox/setupStart" + ], + "title": "WindowsSandbox/setupStartRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/v2/WindowsSandboxSetupStartParams" + } + }, + "required": [ + "id", + "method", "params" ], "title": "WindowsSandbox/setupStartRequest", @@ -1783,46 +2264,145 @@ "id", "method" ], - "title": "Account/logoutRequest", + "title": "Account/logoutRequest", + "type": "object" + }, + { + "properties": { + "id": { + "$ref": "#/definitions/v2/RequestId" + }, + "method": { + "enum": [ + "account/rateLimits/read" + ], + "title": "Account/rateLimits/readRequestMethod", + "type": "string" + }, + "params": { + "type": "null" + } + }, + "required": [ + "id", + "method" + ], + "title": "Account/rateLimits/readRequest", + "type": "object" + }, + { + "properties": { + "id": { + "$ref": "#/definitions/v2/RequestId" + }, + "method": { + "enum": [ + "account/sendAddCreditsNudgeEmail" + ], + "title": "Account/sendAddCreditsNudgeEmailRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/v2/SendAddCreditsNudgeEmailParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "Account/sendAddCreditsNudgeEmailRequest", + "type": "object" + }, + { + "properties": { + "id": { + "$ref": "#/definitions/v2/RequestId" + }, + "method": { + "enum": [ + "feedback/upload" + ], + "title": "Feedback/uploadRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/v2/FeedbackUploadParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "Feedback/uploadRequest", + "type": "object" + }, + { + "description": "Execute a standalone command (argv vector) under the server's sandbox.", + "properties": { + "id": { + "$ref": "#/definitions/v2/RequestId" + }, + "method": { + "enum": [ + "command/exec" + ], + "title": "Command/execRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/v2/CommandExecParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "Command/execRequest", "type": "object" }, { + "description": "Write stdin bytes to a running `command/exec` session or close stdin.", "properties": { "id": { "$ref": "#/definitions/v2/RequestId" }, "method": { "enum": [ - "account/rateLimits/read" + "command/exec/write" ], - "title": "Account/rateLimits/readRequestMethod", + "title": "Command/exec/writeRequestMethod", "type": "string" }, "params": { - "type": "null" + "$ref": "#/definitions/v2/CommandExecWriteParams" } }, "required": [ "id", - "method" + "method", + "params" ], - "title": "Account/rateLimits/readRequest", + "title": "Command/exec/writeRequest", "type": "object" }, { + "description": "Terminate a running `command/exec` session by client-supplied `processId`.", "properties": { "id": { "$ref": "#/definitions/v2/RequestId" }, "method": { "enum": [ - "account/sendAddCreditsNudgeEmail" + "command/exec/terminate" ], - "title": "Account/sendAddCreditsNudgeEmailRequestMethod", + "title": "Command/exec/terminateRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/v2/SendAddCreditsNudgeEmailParams" + "$ref": "#/definitions/v2/CommandExecTerminateParams" } }, "required": [ @@ -1830,23 +2410,24 @@ "method", "params" ], - "title": "Account/sendAddCreditsNudgeEmailRequest", + "title": "Command/exec/terminateRequest", "type": "object" }, { + "description": "Resize a running PTY-backed `command/exec` session by client-supplied `processId`.", "properties": { "id": { "$ref": "#/definitions/v2/RequestId" }, "method": { "enum": [ - "feedback/upload" + "command/exec/resize" ], - "title": "Feedback/uploadRequestMethod", + "title": "Command/exec/resizeRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/v2/FeedbackUploadParams" + "$ref": "#/definitions/v2/CommandExecResizeParams" } }, "required": [ @@ -1854,24 +2435,24 @@ "method", "params" ], - "title": "Feedback/uploadRequest", + "title": "Command/exec/resizeRequest", "type": "object" }, { - "description": "Execute a standalone command (argv vector) under the server's sandbox.", + "description": "Spawn a standalone process (argv vector) without a Codex sandbox.", "properties": { "id": { "$ref": "#/definitions/v2/RequestId" }, "method": { "enum": [ - "command/exec" + "process/spawn" ], - "title": "Command/execRequestMethod", + "title": "Process/spawnRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/v2/CommandExecParams" + "$ref": "#/definitions/v2/ProcessSpawnParams" } }, "required": [ @@ -1879,24 +2460,24 @@ "method", "params" ], - "title": "Command/execRequest", + "title": "Process/spawnRequest", "type": "object" }, { - "description": "Write stdin bytes to a running `command/exec` session or close stdin.", + "description": "Write stdin bytes to a running `process/spawn` session or close stdin.", "properties": { "id": { "$ref": "#/definitions/v2/RequestId" }, "method": { "enum": [ - "command/exec/write" + "process/writeStdin" ], - "title": "Command/exec/writeRequestMethod", + "title": "Process/writeStdinRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/v2/CommandExecWriteParams" + "$ref": "#/definitions/v2/ProcessWriteStdinParams" } }, "required": [ @@ -1904,24 +2485,24 @@ "method", "params" ], - "title": "Command/exec/writeRequest", + "title": "Process/writeStdinRequest", "type": "object" }, { - "description": "Terminate a running `command/exec` session by client-supplied `processId`.", + "description": "Terminate a running `process/spawn` session by client-supplied `processHandle`.", "properties": { "id": { "$ref": "#/definitions/v2/RequestId" }, "method": { "enum": [ - "command/exec/terminate" + "process/kill" ], - "title": "Command/exec/terminateRequestMethod", + "title": "Process/killRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/v2/CommandExecTerminateParams" + "$ref": "#/definitions/v2/ProcessKillParams" } }, "required": [ @@ -1929,24 +2510,24 @@ "method", "params" ], - "title": "Command/exec/terminateRequest", + "title": "Process/killRequest", "type": "object" }, { - "description": "Resize a running PTY-backed `command/exec` session by client-supplied `processId`.", + "description": "Resize a running PTY-backed `process/spawn` session by client-supplied `processHandle`.", "properties": { "id": { "$ref": "#/definitions/v2/RequestId" }, "method": { "enum": [ - "command/exec/resize" + "process/resizePty" ], - "title": "Command/exec/resizeRequestMethod", + "title": "Process/resizePtyRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/v2/CommandExecResizeParams" + "$ref": "#/definitions/v2/ProcessResizePtyParams" } }, "required": [ @@ -1954,7 +2535,7 @@ "method", "params" ], - "title": "Command/exec/resizeRequest", + "title": "Process/resizePtyRequest", "type": "object" }, { @@ -2147,6 +2728,78 @@ ], "title": "FuzzyFileSearchRequest", "type": "object" + }, + { + "properties": { + "id": { + "$ref": "#/definitions/v2/RequestId" + }, + "method": { + "enum": [ + "fuzzyFileSearch/sessionStart" + ], + "title": "FuzzyFileSearch/sessionStartRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/FuzzyFileSearchSessionStartParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "FuzzyFileSearch/sessionStartRequest", + "type": "object" + }, + { + "properties": { + "id": { + "$ref": "#/definitions/v2/RequestId" + }, + "method": { + "enum": [ + "fuzzyFileSearch/sessionUpdate" + ], + "title": "FuzzyFileSearch/sessionUpdateRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/FuzzyFileSearchSessionUpdateParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "FuzzyFileSearch/sessionUpdateRequest", + "type": "object" + }, + { + "properties": { + "id": { + "$ref": "#/definitions/v2/RequestId" + }, + "method": { + "enum": [ + "fuzzyFileSearch/sessionStop" + ], + "title": "FuzzyFileSearch/sessionStopRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/FuzzyFileSearchSessionStopParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "FuzzyFileSearch/sessionStopRequest", + "type": "object" } ], "title": "ClientRequest" @@ -2233,6 +2886,17 @@ "CommandExecutionRequestApprovalParams": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { + "additionalPermissions": { + "anyOf": [ + { + "$ref": "#/definitions/AdditionalPermissionProfile" + }, + { + "type": "null" + } + ], + "description": "Optional additional permissions requested for this command." + }, "approvalId": { "description": "Unique identifier for this specific approval callback.\n\nFor regular shell/unified_exec approvals, this is null.\n\nFor zsh-exec-bridge subcommand approvals, multiple callbacks can belong to one parent `itemId`, so `approvalId` is a distinct opaque callback id (a UUID) used to disambiguate routing.", "type": [ @@ -2240,6 +2904,16 @@ "null" ] }, + "availableDecisions": { + "description": "Ordered list of decisions the client may present for this prompt.", + "items": { + "$ref": "#/definitions/CommandExecutionApprovalDecision" + }, + "type": [ + "array", + "null" + ] + }, "command": { "description": "The command to be executed.", "type": [ @@ -2717,6 +3391,71 @@ "title": "FuzzyFileSearchSessionCompletedNotification", "type": "object" }, + "FuzzyFileSearchSessionStartParams": { + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "roots": { + "items": { + "type": "string" + }, + "type": "array" + }, + "sessionId": { + "type": "string" + } + }, + "required": [ + "roots", + "sessionId" + ], + "title": "FuzzyFileSearchSessionStartParams", + "type": "object" + }, + "FuzzyFileSearchSessionStartResponse": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "FuzzyFileSearchSessionStartResponse", + "type": "object" + }, + "FuzzyFileSearchSessionStopParams": { + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "sessionId": { + "type": "string" + } + }, + "required": [ + "sessionId" + ], + "title": "FuzzyFileSearchSessionStopParams", + "type": "object" + }, + "FuzzyFileSearchSessionStopResponse": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "FuzzyFileSearchSessionStopResponse", + "type": "object" + }, + "FuzzyFileSearchSessionUpdateParams": { + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "query": { + "type": "string" + }, + "sessionId": { + "type": "string" + } + }, + "required": [ + "query", + "sessionId" + ], + "title": "FuzzyFileSearchSessionUpdateParams", + "type": "object" + }, + "FuzzyFileSearchSessionUpdateResponse": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "FuzzyFileSearchSessionUpdateResponse", + "type": "object" + }, "FuzzyFileSearchSessionUpdatedNotification": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { @@ -5768,6 +6507,17 @@ ], "type": "string" }, + "AdditionalContextEntry": { + "properties": { + "value": { + "type": "string" + } + }, + "required": [ + "value" + ], + "type": "object" + }, "AdditionalFileSystemPermissions": { "properties": { "entries": { @@ -6708,6 +7458,29 @@ ], "type": "object" }, + "CollaborationModeListParams": { + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "EXPERIMENTAL - list collaboration mode presets.", + "title": "CollaborationModeListParams", + "type": "object" + }, + "CollaborationModeListResponse": { + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "EXPERIMENTAL - collaboration mode presets response.", + "properties": { + "data": { + "items": { + "$ref": "#/definitions/v2/CollaborationModeMask" + }, + "type": "array" + } + }, + "required": [ + "data" + ], + "title": "CollaborationModeListResponse", + "type": "object" + }, "CollaborationModeMask": { "description": "EXPERIMENTAL - collaboration mode preset metadata for clients.", "properties": { @@ -6964,6 +7737,13 @@ "null" ] }, + "permissionProfile": { + "description": "Optional active permissions profile id for this command.\n\nDefaults to the user's configured permissions when omitted. Cannot be combined with `sandboxPolicy`.", + "type": [ + "string", + "null" + ] + }, "processId": { "description": "Optional client-supplied, connection-scoped process id.\n\nRequired for `tty`, `streamStdin`, `streamStdoutStderr`, and follow-up `command/exec/write`, `command/exec/resize`, and `command/exec/terminate` calls. When omitted, buffered execution gets an internal id that is not exposed to the client.", "type": [ @@ -7250,6 +8030,17 @@ ], "description": "[UNSTABLE] Optional default for where approval requests are routed for review." }, + "apps": { + "anyOf": [ + { + "$ref": "#/definitions/v2/AppsConfig" + }, + { + "type": "null" + } + ], + "default": null + }, "compact_prompt": { "type": [ "string", @@ -7736,6 +8527,15 @@ "null" ] }, + "allowedApprovalsReviewers": { + "items": { + "$ref": "#/definitions/v2/ApprovalsReviewer" + }, + "type": [ + "array", + "null" + ] + }, "allowedPermissions": { "items": { "type": "string" @@ -7791,6 +8591,26 @@ "object", "null" ] + }, + "hooks": { + "anyOf": [ + { + "$ref": "#/definitions/v2/ManagedHooksRequirements" + }, + { + "type": "null" + } + ] + }, + "network": { + "anyOf": [ + { + "$ref": "#/definitions/v2/NetworkRequirements" + }, + { + "type": "null" + } + ] } }, "type": "object" @@ -8232,6 +9052,28 @@ ], "type": "object" }, + "EnvironmentAddParams": { + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "environmentId": { + "type": "string" + }, + "execServerUrl": { + "type": "string" + } + }, + "required": [ + "environmentId", + "execServerUrl" + ], + "title": "EnvironmentAddParams", + "type": "object" + }, + "EnvironmentAddResponse": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "EnvironmentAddResponse", + "type": "object" + }, "ErrorNotification": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { @@ -11241,6 +12083,11 @@ ], "type": "object" }, + "MemoryResetResponse": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "MemoryResetResponse", + "type": "object" + }, "MergeStrategy": { "enum": [ "replace", @@ -11314,6 +12161,34 @@ }, "type": "object" }, + "MockExperimentalMethodParams": { + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "value": { + "description": "Test-only payload field.", + "type": [ + "string", + "null" + ] + } + }, + "title": "MockExperimentalMethodParams", + "type": "object" + }, + "MockExperimentalMethodResponse": { + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "echoed": { + "description": "Echoes the input `value`.", + "type": [ + "string", + "null" + ] + } + }, + "title": "MockExperimentalMethodResponse", + "type": "object" + }, "ModeKind": { "description": "Initial collaboration mode to use when the TUI starts.", "enum": [ @@ -13088,6 +13963,27 @@ "title": "ProcessExitedNotification", "type": "object" }, + "ProcessKillParams": { + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Terminate a running `process/spawn` session.", + "properties": { + "processHandle": { + "description": "Client-supplied, connection-scoped `processHandle` from `process/spawn`.", + "type": "string" + } + }, + "required": [ + "processHandle" + ], + "title": "ProcessKillParams", + "type": "object" + }, + "ProcessKillResponse": { + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Empty success response for `process/kill`.", + "title": "ProcessKillResponse", + "type": "object" + }, "ProcessOutputDeltaNotification": { "$schema": "http://json-schema.org/draft-07/schema#", "description": "Base64-encoded output chunk emitted for a streaming `process/spawn` request.", @@ -13141,6 +14037,127 @@ } ] }, + "ProcessResizePtyParams": { + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Resize a running PTY-backed `process/spawn` session.", + "properties": { + "processHandle": { + "description": "Client-supplied, connection-scoped `processHandle` from `process/spawn`.", + "type": "string" + }, + "size": { + "allOf": [ + { + "$ref": "#/definitions/v2/ProcessTerminalSize" + } + ], + "description": "New PTY size in character cells." + } + }, + "required": [ + "processHandle", + "size" + ], + "title": "ProcessResizePtyParams", + "type": "object" + }, + "ProcessResizePtyResponse": { + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Empty success response for `process/resizePty`.", + "title": "ProcessResizePtyResponse", + "type": "object" + }, + "ProcessSpawnParams": { + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Spawn a standalone process (argv vector) without a Codex sandbox on the host where the app server is running.\n\n`process/spawn` returns after the process has started and the connection-scoped `processHandle` has been registered. Process output and exit are reported via `process/outputDelta` and `process/exited` notifications.", + "properties": { + "command": { + "description": "Command argv vector. Empty arrays are rejected.", + "items": { + "type": "string" + }, + "type": "array" + }, + "cwd": { + "allOf": [ + { + "$ref": "#/definitions/v2/AbsolutePathBuf" + } + ], + "description": "Absolute working directory for the process." + }, + "env": { + "additionalProperties": { + "type": [ + "string", + "null" + ] + }, + "description": "Optional environment overrides merged into the app-server process environment.\n\nMatching names override inherited values. Set a key to `null` to unset an inherited variable.", + "type": [ + "object", + "null" + ] + }, + "outputBytesCap": { + "description": "Optional per-stream stdout/stderr capture cap in bytes.\n\nWhen omitted, the server default applies. Set to `null` to disable the cap.", + "format": "uint", + "minimum": 0.0, + "type": [ + "integer", + "null" + ] + }, + "processHandle": { + "description": "Client-supplied, connection-scoped process handle.\n\nDuplicate active handles are rejected on the same connection. The same handle can be reused after the prior process exits.", + "type": "string" + }, + "size": { + "anyOf": [ + { + "$ref": "#/definitions/v2/ProcessTerminalSize" + }, + { + "type": "null" + } + ], + "description": "Optional initial PTY size in character cells. Only valid when `tty` is true." + }, + "streamStdin": { + "description": "Allow follow-up `process/writeStdin` requests to write stdin bytes.", + "type": "boolean" + }, + "streamStdoutStderr": { + "description": "Stream stdout/stderr via `process/outputDelta` notifications.\n\nStreamed bytes are not duplicated into the `process/exited` notification.", + "type": "boolean" + }, + "timeoutMs": { + "description": "Optional timeout in milliseconds.\n\nWhen omitted, the server default applies. Set to `null` to disable the timeout.", + "format": "int64", + "type": [ + "integer", + "null" + ] + }, + "tty": { + "description": "Enable PTY mode.\n\nThis implies `streamStdin` and `streamStdoutStderr`.", + "type": "boolean" + } + }, + "required": [ + "command", + "cwd", + "processHandle" + ], + "title": "ProcessSpawnParams", + "type": "object" + }, + "ProcessSpawnResponse": { + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Successful response for `process/spawn`.", + "title": "ProcessSpawnResponse", + "type": "object" + }, "ProcessTerminalSize": { "description": "PTY size in character cells for `process/spawn` PTY sessions.", "properties": { @@ -13163,6 +14180,38 @@ ], "type": "object" }, + "ProcessWriteStdinParams": { + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Write stdin bytes to a running `process/spawn` session, close stdin, or both.", + "properties": { + "closeStdin": { + "description": "Close stdin after writing `deltaBase64`, if present.", + "type": "boolean" + }, + "deltaBase64": { + "description": "Optional base64-encoded stdin bytes to write.", + "type": [ + "string", + "null" + ] + }, + "processHandle": { + "description": "Client-supplied, connection-scoped `processHandle` from `process/spawn`.", + "type": "string" + } + }, + "required": [ + "processHandle" + ], + "title": "ProcessWriteStdinParams", + "type": "object" + }, + "ProcessWriteStdinResponse": { + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Empty success response for `process/writeStdin`.", + "title": "ProcessWriteStdinResponse", + "type": "object" + }, "RateLimitReachedType": { "enum": [ "rate_limit_reached", @@ -13522,51 +14571,132 @@ "threadId", "turnId" ], - "title": "ReasoningSummaryTextDeltaNotification", + "title": "ReasoningSummaryTextDeltaNotification", + "type": "object" + }, + "ReasoningTextDeltaNotification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "contentIndex": { + "format": "int64", + "type": "integer" + }, + "delta": { + "type": "string" + }, + "itemId": { + "type": "string" + }, + "threadId": { + "type": "string" + }, + "turnId": { + "type": "string" + } + }, + "required": [ + "contentIndex", + "delta", + "itemId", + "threadId", + "turnId" + ], + "title": "ReasoningTextDeltaNotification", + "type": "object" + }, + "RemoteControlConnectionStatus": { + "enum": [ + "disabled", + "connecting", + "connected", + "errored" + ], + "type": "string" + }, + "RemoteControlDisableResponse": { + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "environmentId": { + "type": [ + "string", + "null" + ] + }, + "installationId": { + "type": "string" + }, + "serverName": { + "type": "string" + }, + "status": { + "$ref": "#/definitions/v2/RemoteControlConnectionStatus" + } + }, + "required": [ + "installationId", + "serverName", + "status" + ], + "title": "RemoteControlDisableResponse", + "type": "object" + }, + "RemoteControlEnableResponse": { + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "environmentId": { + "type": [ + "string", + "null" + ] + }, + "installationId": { + "type": "string" + }, + "serverName": { + "type": "string" + }, + "status": { + "$ref": "#/definitions/v2/RemoteControlConnectionStatus" + } + }, + "required": [ + "installationId", + "serverName", + "status" + ], + "title": "RemoteControlEnableResponse", "type": "object" }, - "ReasoningTextDeltaNotification": { + "RemoteControlStatusChangedNotification": { "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Current remote-control connection status and remote identity exposed to clients.", "properties": { - "contentIndex": { - "format": "int64", - "type": "integer" - }, - "delta": { - "type": "string" + "environmentId": { + "type": [ + "string", + "null" + ] }, - "itemId": { + "installationId": { "type": "string" }, - "threadId": { + "serverName": { "type": "string" }, - "turnId": { - "type": "string" + "status": { + "$ref": "#/definitions/v2/RemoteControlConnectionStatus" } }, "required": [ - "contentIndex", - "delta", - "itemId", - "threadId", - "turnId" + "installationId", + "serverName", + "status" ], - "title": "ReasoningTextDeltaNotification", + "title": "RemoteControlStatusChangedNotification", "type": "object" }, - "RemoteControlConnectionStatus": { - "enum": [ - "disabled", - "connecting", - "connected", - "errored" - ], - "type": "string" - }, - "RemoteControlStatusChangedNotification": { + "RemoteControlStatusReadResponse": { "$schema": "http://json-schema.org/draft-07/schema#", - "description": "Current remote-control connection status and remote identity exposed to clients.", "properties": { "environmentId": { "type": [ @@ -13589,7 +14719,7 @@ "serverName", "status" ], - "title": "RemoteControlStatusChangedNotification", + "title": "RemoteControlStatusReadResponse", "type": "object" }, "RequestId": { @@ -15481,6 +16611,24 @@ "title": "ThreadArchivedNotification", "type": "object" }, + "ThreadBackgroundTerminalsCleanParams": { + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "threadId": { + "type": "string" + } + }, + "required": [ + "threadId" + ], + "title": "ThreadBackgroundTerminalsCleanParams", + "type": "object" + }, + "ThreadBackgroundTerminalsCleanResponse": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "ThreadBackgroundTerminalsCleanResponse", + "type": "object" + }, "ThreadClosedNotification": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { @@ -15512,6 +16660,43 @@ "title": "ThreadCompactStartResponse", "type": "object" }, + "ThreadDecrementElicitationParams": { + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Parameters for `thread/decrement_elicitation`.", + "properties": { + "threadId": { + "description": "Thread whose out-of-band elicitation counter should be decremented.", + "type": "string" + } + }, + "required": [ + "threadId" + ], + "title": "ThreadDecrementElicitationParams", + "type": "object" + }, + "ThreadDecrementElicitationResponse": { + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Response for `thread/decrement_elicitation`.", + "properties": { + "count": { + "description": "Current out-of-band elicitation count after the decrement.", + "format": "uint64", + "minimum": 0.0, + "type": "integer" + }, + "paused": { + "description": "Whether timeout accounting remains paused after applying the decrement.", + "type": "boolean" + } + }, + "required": [ + "count", + "paused" + ], + "title": "ThreadDecrementElicitationResponse", + "type": "object" + }, "ThreadForkParams": { "$schema": "http://json-schema.org/draft-07/schema#", "description": "There are two ways to fork a thread: 1. By thread_id: load the thread from disk by thread_id and fork it into a new thread. 2. By path: load the thread from disk by path and fork it into a new thread.\n\nIf using a non-empty path, the thread_id param will be ignored. Empty string path values are treated as absent.\n\nPrefer using thread_id whenever possible.", @@ -15565,6 +16750,10 @@ "ephemeral": { "type": "boolean" }, + "excludeTurns": { + "description": "When true, return only thread metadata and live fork state without populating `thread.turns`. This is useful when the client plans to call `thread/turns/list` immediately after forking.", + "type": "boolean" + }, "model": { "description": "Configuration overrides for the forked thread, if any.", "type": [ @@ -15578,6 +16767,35 @@ "null" ] }, + "path": { + "default": null, + "description": "[UNSTABLE] Specify the rollout path to fork from. If specified, the thread_id param will be ignored.", + "type": [ + "string", + "null" + ] + }, + "permissions": { + "description": "Named profile id for the forked thread. Cannot be combined with `sandbox`.", + "type": [ + "string", + "null" + ] + }, + "persistExtendedHistory": { + "description": "Deprecated and ignored by app-server. Kept only so older clients can continue sending the field while rollout persistence always uses the limited history policy.", + "type": "boolean" + }, + "runtimeWorkspaceRoots": { + "description": "Replace the thread's runtime workspace roots. Relative paths are resolved against the effective cwd for the thread.", + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, "sandbox": { "anyOf": [ { @@ -15618,6 +16836,18 @@ "ThreadForkResponse": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { + "activePermissionProfile": { + "anyOf": [ + { + "$ref": "#/definitions/v2/ActivePermissionProfile" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Named or implicit built-in profile that produced the active permissions, when known." + }, "approvalPolicy": { "$ref": "#/definitions/v2/AskForApproval" }, @@ -15656,6 +16886,14 @@ } ] }, + "runtimeWorkspaceRoots": { + "default": [], + "description": "Thread-scoped runtime workspace roots used to materialize `:workspace_roots`.", + "items": { + "$ref": "#/definitions/v2/AbsolutePathBuf" + }, + "type": "array" + }, "sandbox": { "allOf": [ { @@ -15887,6 +17125,43 @@ "ThreadId": { "type": "string" }, + "ThreadIncrementElicitationParams": { + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Parameters for `thread/increment_elicitation`.", + "properties": { + "threadId": { + "description": "Thread whose out-of-band elicitation counter should be incremented.", + "type": "string" + } + }, + "required": [ + "threadId" + ], + "title": "ThreadIncrementElicitationParams", + "type": "object" + }, + "ThreadIncrementElicitationResponse": { + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Response for `thread/increment_elicitation`.", + "properties": { + "count": { + "description": "Current out-of-band elicitation count after the increment.", + "format": "uint64", + "minimum": 0.0, + "type": "integer" + }, + "paused": { + "description": "Whether timeout accounting is paused after applying the increment.", + "type": "boolean" + } + }, + "required": [ + "count", + "paused" + ], + "title": "ThreadIncrementElicitationResponse", + "type": "object" + }, "ThreadInjectItemsParams": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { @@ -16768,6 +18043,28 @@ ], "type": "string" }, + "ThreadMemoryModeSetParams": { + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "mode": { + "$ref": "#/definitions/v2/ThreadMemoryMode" + }, + "threadId": { + "type": "string" + } + }, + "required": [ + "mode", + "threadId" + ], + "title": "ThreadMemoryModeSetParams", + "type": "object" + }, + "ThreadMemoryModeSetResponse": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "ThreadMemoryModeSetResponse", + "type": "object" + }, "ThreadMetadataGitInfoUpdateParams": { "properties": { "branch": { @@ -16880,6 +18177,54 @@ "title": "ThreadReadResponse", "type": "object" }, + "ThreadRealtimeAppendAudioParams": { + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "EXPERIMENTAL - append audio input to thread realtime.", + "properties": { + "audio": { + "$ref": "#/definitions/v2/ThreadRealtimeAudioChunk" + }, + "threadId": { + "type": "string" + } + }, + "required": [ + "audio", + "threadId" + ], + "title": "ThreadRealtimeAppendAudioParams", + "type": "object" + }, + "ThreadRealtimeAppendAudioResponse": { + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "EXPERIMENTAL - response for appending realtime audio input.", + "title": "ThreadRealtimeAppendAudioResponse", + "type": "object" + }, + "ThreadRealtimeAppendTextParams": { + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "EXPERIMENTAL - append text input to thread realtime.", + "properties": { + "text": { + "type": "string" + }, + "threadId": { + "type": "string" + } + }, + "required": [ + "text", + "threadId" + ], + "title": "ThreadRealtimeAppendTextParams", + "type": "object" + }, + "ThreadRealtimeAppendTextResponse": { + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "EXPERIMENTAL - response for appending realtime text input.", + "title": "ThreadRealtimeAppendTextResponse", + "type": "object" + }, "ThreadRealtimeAudioChunk": { "description": "EXPERIMENTAL - thread realtime audio chunk.", "properties": { @@ -16972,6 +18317,26 @@ "title": "ThreadRealtimeItemAddedNotification", "type": "object" }, + "ThreadRealtimeListVoicesParams": { + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "EXPERIMENTAL - list voices supported by thread realtime.", + "title": "ThreadRealtimeListVoicesParams", + "type": "object" + }, + "ThreadRealtimeListVoicesResponse": { + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "EXPERIMENTAL - response for listing supported realtime voices.", + "properties": { + "voices": { + "$ref": "#/definitions/v2/RealtimeVoicesList" + } + }, + "required": [ + "voices" + ], + "title": "ThreadRealtimeListVoicesResponse", + "type": "object" + }, "ThreadRealtimeOutputAudioDeltaNotification": { "$schema": "http://json-schema.org/draft-07/schema#", "description": "EXPERIMENTAL - streamed output audio emitted by thread realtime.", @@ -17008,6 +18373,67 @@ "title": "ThreadRealtimeSdpNotification", "type": "object" }, + "ThreadRealtimeStartParams": { + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "EXPERIMENTAL - start a thread-scoped realtime session.", + "properties": { + "outputModality": { + "allOf": [ + { + "$ref": "#/definitions/v2/RealtimeOutputModality" + } + ], + "description": "Selects text or audio output for the realtime session. Transport and voice stay independent so clients can choose how they connect separately from what the model emits." + }, + "prompt": { + "type": [ + "string", + "null" + ] + }, + "realtimeSessionId": { + "type": [ + "string", + "null" + ] + }, + "threadId": { + "type": "string" + }, + "transport": { + "anyOf": [ + { + "$ref": "#/definitions/v2/ThreadRealtimeStartTransport" + }, + { + "type": "null" + } + ] + }, + "voice": { + "anyOf": [ + { + "$ref": "#/definitions/v2/RealtimeVoice" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "outputModality", + "threadId" + ], + "title": "ThreadRealtimeStartParams", + "type": "object" + }, + "ThreadRealtimeStartResponse": { + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "EXPERIMENTAL - response for starting thread realtime.", + "title": "ThreadRealtimeStartResponse", + "type": "object" + }, "ThreadRealtimeStartTransport": { "description": "EXPERIMENTAL - transport used by thread realtime.", "oneOf": [ @@ -17074,6 +18500,26 @@ "title": "ThreadRealtimeStartedNotification", "type": "object" }, + "ThreadRealtimeStopParams": { + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "EXPERIMENTAL - stop thread realtime.", + "properties": { + "threadId": { + "type": "string" + } + }, + "required": [ + "threadId" + ], + "title": "ThreadRealtimeStopParams", + "type": "object" + }, + "ThreadRealtimeStopResponse": { + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "EXPERIMENTAL - response for stopping thread realtime.", + "title": "ThreadRealtimeStopResponse", + "type": "object" + }, "ThreadRealtimeTranscriptDeltaNotification": { "$schema": "http://json-schema.org/draft-07/schema#", "description": "EXPERIMENTAL - flat transcript delta emitted whenever realtime transcript text changes.", @@ -17170,6 +18616,20 @@ "null" ] }, + "excludeTurns": { + "description": "When true, return only thread metadata and live-resume state without populating `thread.turns`. This is useful when the client plans to call `thread/turns/list` immediately after resuming.", + "type": "boolean" + }, + "history": { + "description": "[UNSTABLE] FOR CODEX CLOUD - DO NOT USE. If specified, the thread will be resumed with the provided history instead of loaded from disk.", + "items": { + "$ref": "#/definitions/v2/ResponseItem" + }, + "type": [ + "array", + "null" + ] + }, "model": { "description": "Configuration overrides for the resumed thread, if any.", "type": [ @@ -17183,6 +18643,25 @@ "null" ] }, + "path": { + "default": null, + "description": "[UNSTABLE] Specify the rollout path to resume from. If specified for a non-running thread, the thread_id param will be ignored. If thread_id identifies a running thread, the path must match the active rollout path.", + "type": [ + "string", + "null" + ] + }, + "permissions": { + "description": "Named profile id for the resumed thread. Cannot be combined with `sandbox`.", + "type": [ + "string", + "null" + ] + }, + "persistExtendedHistory": { + "description": "Deprecated and ignored by app-server. Kept only so older clients can continue sending the field while rollout persistence always uses the limited history policy.", + "type": "boolean" + }, "personality": { "anyOf": [ { @@ -17193,6 +18672,16 @@ } ] }, + "runtimeWorkspaceRoots": { + "description": "Replace the thread's runtime workspace roots. Relative paths are resolved against the effective cwd for the thread.", + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, "sandbox": { "anyOf": [ { @@ -17222,6 +18711,18 @@ "ThreadResumeResponse": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { + "activePermissionProfile": { + "anyOf": [ + { + "$ref": "#/definitions/v2/ActivePermissionProfile" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Named or implicit built-in profile that produced the active permissions, when known." + }, "approvalPolicy": { "$ref": "#/definitions/v2/AskForApproval" }, @@ -17260,6 +18761,14 @@ } ] }, + "runtimeWorkspaceRoots": { + "default": [], + "description": "Thread-scoped runtime workspace roots used to materialize `:workspace_roots`.", + "items": { + "$ref": "#/definitions/v2/AbsolutePathBuf" + }, + "type": "array" + }, "sandbox": { "allOf": [ { @@ -17328,6 +18837,105 @@ "title": "ThreadRollbackResponse", "type": "object" }, + "ThreadSearchParams": { + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "archived": { + "description": "Optional archived filter; when set to true, only archived threads are returned. If false or null, only non-archived threads are returned.", + "type": [ + "boolean", + "null" + ] + }, + "cursor": { + "description": "Opaque pagination cursor returned by a previous call.", + "type": [ + "string", + "null" + ] + }, + "limit": { + "description": "Optional page size; defaults to a reasonable server-side value.", + "format": "uint32", + "minimum": 0.0, + "type": [ + "integer", + "null" + ] + }, + "searchTerm": { + "description": "Required substring/full-text query for thread search.", + "type": "string" + }, + "sortDirection": { + "anyOf": [ + { + "$ref": "#/definitions/v2/SortDirection" + }, + { + "type": "null" + } + ], + "description": "Optional sort direction; defaults to descending (newest first)." + }, + "sortKey": { + "anyOf": [ + { + "$ref": "#/definitions/v2/ThreadSortKey" + }, + { + "type": "null" + } + ], + "description": "Optional sort key; defaults to created_at." + }, + "sourceKinds": { + "description": "Optional source filter; when set, only sessions from these source kinds are returned. When omitted or empty, defaults to interactive sources.", + "items": { + "$ref": "#/definitions/v2/ThreadSourceKind" + }, + "type": [ + "array", + "null" + ] + } + }, + "required": [ + "searchTerm" + ], + "title": "ThreadSearchParams", + "type": "object" + }, + "ThreadSearchResponse": { + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "backwardsCursor": { + "description": "Opaque cursor to pass as `cursor` when reversing `sortDirection`. This is only populated when the page contains at least one thread. Use it with the opposite `sortDirection`; for timestamp sorts it anchors at the start of the page timestamp so same-second updates are not skipped.", + "type": [ + "string", + "null" + ] + }, + "data": { + "items": { + "$ref": "#/definitions/v2/ThreadSearchResult" + }, + "type": "array" + }, + "nextCursor": { + "description": "Opaque cursor to pass to the next call to continue after the last item. if None, there are no more items to return.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "data" + ], + "title": "ThreadSearchResponse", + "type": "object" + }, "ThreadSearchResult": { "properties": { "snippet": { @@ -17446,6 +19054,129 @@ ], "type": "object" }, + "ThreadSettingsUpdateParams": { + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "approvalPolicy": { + "anyOf": [ + { + "$ref": "#/definitions/v2/AskForApproval" + }, + { + "type": "null" + } + ], + "description": "Override the approval policy for subsequent turns." + }, + "approvalsReviewer": { + "anyOf": [ + { + "$ref": "#/definitions/v2/ApprovalsReviewer" + }, + { + "type": "null" + } + ], + "description": "Override where approval requests are routed for subsequent turns." + }, + "collaborationMode": { + "anyOf": [ + { + "$ref": "#/definitions/v2/CollaborationMode" + }, + { + "type": "null" + } + ], + "description": "EXPERIMENTAL - Set a pre-set collaboration mode for subsequent turns.\n\nFor `collaboration_mode.settings.developer_instructions`, `null` means \"use the built-in instructions for the selected mode\"." + }, + "cwd": { + "description": "Override the working directory for subsequent turns.", + "type": [ + "string", + "null" + ] + }, + "effort": { + "anyOf": [ + { + "$ref": "#/definitions/v2/ReasoningEffort" + }, + { + "type": "null" + } + ], + "description": "Override the reasoning effort for subsequent turns." + }, + "model": { + "description": "Override the model for subsequent turns.", + "type": [ + "string", + "null" + ] + }, + "permissions": { + "description": "Select a named permissions profile id for subsequent turns. Cannot be combined with `sandboxPolicy`.", + "type": [ + "string", + "null" + ] + }, + "personality": { + "anyOf": [ + { + "$ref": "#/definitions/v2/Personality" + }, + { + "type": "null" + } + ], + "description": "Override the personality for subsequent turns." + }, + "sandboxPolicy": { + "anyOf": [ + { + "$ref": "#/definitions/v2/SandboxPolicy" + }, + { + "type": "null" + } + ], + "description": "Override the sandbox policy for subsequent turns." + }, + "serviceTier": { + "description": "Override the service tier for subsequent turns. `null` clears the current service tier; omission leaves it unchanged.", + "type": [ + "string", + "null" + ] + }, + "summary": { + "anyOf": [ + { + "$ref": "#/definitions/v2/ReasoningSummary" + }, + { + "type": "null" + } + ], + "description": "Override the reasoning summary for subsequent turns." + }, + "threadId": { + "type": "string" + } + }, + "required": [ + "threadId" + ], + "title": "ThreadSettingsUpdateParams", + "type": "object" + }, + "ThreadSettingsUpdateResponse": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "ThreadSettingsUpdateResponse", + "type": "object" + }, "ThreadSettingsUpdatedNotification": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { @@ -17565,12 +19296,42 @@ "null" ] }, + "dynamicTools": { + "items": { + "$ref": "#/definitions/v2/DynamicToolSpec" + }, + "type": [ + "array", + "null" + ] + }, + "environments": { + "description": "Optional sticky environments for this thread.\n\nOmitted selects the default environment when environment access is enabled. Empty disables environment access for turns that do not provide a turn override. Non-empty selects the first environment as the current turn environment.", + "items": { + "$ref": "#/definitions/v2/TurnEnvironmentParams" + }, + "type": [ + "array", + "null" + ] + }, "ephemeral": { "type": [ "boolean", "null" ] }, + "experimentalRawEvents": { + "description": "If true, opt into emitting raw Responses API items on the event stream. This is for internal use only (e.g. Codex Cloud).", + "type": "boolean" + }, + "mockExperimentalField": { + "description": "Test-only experimental field used to validate experimental gating and schema filtering behavior in a stable way.", + "type": [ + "string", + "null" + ] + }, "model": { "type": [ "string", @@ -17583,6 +19344,17 @@ "null" ] }, + "permissions": { + "description": "Named profile id for this thread. Cannot be combined with `sandbox`.", + "type": [ + "string", + "null" + ] + }, + "persistExtendedHistory": { + "description": "Deprecated and ignored by app-server. Kept only so older clients can continue sending the field while rollout persistence always uses the limited history policy.", + "type": "boolean" + }, "personality": { "anyOf": [ { @@ -17593,6 +19365,16 @@ } ] }, + "runtimeWorkspaceRoots": { + "description": "Replace the thread's runtime workspace roots. Relative paths are resolved against the effective cwd for the thread.", + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, "sandbox": { "anyOf": [ { @@ -17643,6 +19425,18 @@ "ThreadStartResponse": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { + "activePermissionProfile": { + "anyOf": [ + { + "$ref": "#/definitions/v2/ActivePermissionProfile" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Named or implicit built-in profile that produced the active permissions, when known." + }, "approvalPolicy": { "$ref": "#/definitions/v2/AskForApproval" }, @@ -17681,6 +19475,14 @@ } ] }, + "runtimeWorkspaceRoots": { + "default": [], + "description": "Thread-scoped runtime workspace roots used to materialize `:workspace_roots`.", + "items": { + "$ref": "#/definitions/v2/AbsolutePathBuf" + }, + "type": "array" + }, "sandbox": { "allOf": [ { @@ -17866,6 +19668,161 @@ "title": "ThreadTokenUsageUpdatedNotification", "type": "object" }, + "ThreadTurnsItemsListParams": { + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "cursor": { + "description": "Opaque cursor to pass to the next call to continue after the last item.", + "type": [ + "string", + "null" + ] + }, + "limit": { + "description": "Optional item page size.", + "format": "uint32", + "minimum": 0.0, + "type": [ + "integer", + "null" + ] + }, + "sortDirection": { + "anyOf": [ + { + "$ref": "#/definitions/v2/SortDirection" + }, + { + "type": "null" + } + ], + "description": "Optional item pagination direction; defaults to ascending." + }, + "threadId": { + "type": "string" + }, + "turnId": { + "type": "string" + } + }, + "required": [ + "threadId", + "turnId" + ], + "title": "ThreadTurnsItemsListParams", + "type": "object" + }, + "ThreadTurnsItemsListResponse": { + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "backwardsCursor": { + "description": "Opaque cursor to pass as `cursor` when reversing `sortDirection`. This is only populated when the page contains at least one item.", + "type": [ + "string", + "null" + ] + }, + "data": { + "items": { + "$ref": "#/definitions/v2/ThreadItem" + }, + "type": "array" + }, + "nextCursor": { + "description": "Opaque cursor to pass to the next call to continue after the last item. if None, there are no more items to return.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "data" + ], + "title": "ThreadTurnsItemsListResponse", + "type": "object" + }, + "ThreadTurnsListParams": { + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "cursor": { + "description": "Opaque cursor to pass to the next call to continue after the last turn.", + "type": [ + "string", + "null" + ] + }, + "itemsView": { + "anyOf": [ + { + "$ref": "#/definitions/v2/TurnItemsView" + }, + { + "type": "null" + } + ], + "description": "How much item detail to include for each returned turn; defaults to summary." + }, + "limit": { + "description": "Optional turn page size.", + "format": "uint32", + "minimum": 0.0, + "type": [ + "integer", + "null" + ] + }, + "sortDirection": { + "anyOf": [ + { + "$ref": "#/definitions/v2/SortDirection" + }, + { + "type": "null" + } + ], + "description": "Optional turn pagination direction; defaults to descending." + }, + "threadId": { + "type": "string" + } + }, + "required": [ + "threadId" + ], + "title": "ThreadTurnsListParams", + "type": "object" + }, + "ThreadTurnsListResponse": { + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "backwardsCursor": { + "description": "Opaque cursor to pass as `cursor` when reversing `sortDirection`. This is only populated when the page contains at least one turn. Use it with the opposite `sortDirection` to include the anchor turn again and catch updates to that turn.", + "type": [ + "string", + "null" + ] + }, + "data": { + "items": { + "$ref": "#/definitions/v2/Turn" + }, + "type": "array" + }, + "nextCursor": { + "description": "Opaque cursor to pass to the next call to continue after the last turn. if None, there are no more turns to return.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "data" + ], + "title": "ThreadTurnsListResponse", + "type": "object" + }, "ThreadUnarchiveParams": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { @@ -18274,6 +20231,16 @@ "TurnStartParams": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { + "additionalContext": { + "additionalProperties": { + "$ref": "#/definitions/v2/AdditionalContextEntry" + }, + "description": "Optional client-provided context fragments keyed by an opaque source identifier.", + "type": [ + "object", + "null" + ] + }, "approvalPolicy": { "anyOf": [ { @@ -18296,6 +20263,17 @@ ], "description": "Override where approval requests are routed for review on this turn and subsequent turns." }, + "collaborationMode": { + "anyOf": [ + { + "$ref": "#/definitions/v2/CollaborationMode" + }, + { + "type": "null" + } + ], + "description": "EXPERIMENTAL - Set a pre-set collaboration mode. Takes precedence over model, reasoning_effort, and developer instructions if set.\n\nFor `collaboration_mode.settings.developer_instructions`, `null` means \"use the built-in instructions for the selected mode\"." + }, "cwd": { "description": "Override the working directory for this turn and subsequent turns.", "type": [ @@ -18314,6 +20292,16 @@ ], "description": "Override the reasoning effort for this turn and subsequent turns." }, + "environments": { + "description": "Optional turn-scoped environments.\n\nOmitted uses the thread sticky environments. Empty disables environment access for this turn. Non-empty selects the first environment as the current turn environment for this turn.", + "items": { + "$ref": "#/definitions/v2/TurnEnvironmentParams" + }, + "type": [ + "array", + "null" + ] + }, "input": { "items": { "$ref": "#/definitions/v2/UserInput" @@ -18330,6 +20318,13 @@ "outputSchema": { "description": "Optional JSON Schema used to constrain the final assistant message for this turn." }, + "permissions": { + "description": "Select a named permissions profile id for this turn and subsequent turns. Cannot be combined with `sandboxPolicy`.", + "type": [ + "string", + "null" + ] + }, "personality": { "anyOf": [ { @@ -18341,6 +20336,26 @@ ], "description": "Override the personality for this turn and subsequent turns." }, + "responsesapiClientMetadata": { + "additionalProperties": { + "type": "string" + }, + "description": "Optional turn-scoped Responses API client metadata.", + "type": [ + "object", + "null" + ] + }, + "runtimeWorkspaceRoots": { + "description": "Replace the thread's runtime workspace roots for this turn and subsequent turns. Relative paths are resolved against the effective cwd for the turn.", + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, "sandboxPolicy": { "anyOf": [ { @@ -18423,6 +20438,16 @@ "TurnSteerParams": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { + "additionalContext": { + "additionalProperties": { + "$ref": "#/definitions/v2/AdditionalContextEntry" + }, + "description": "Optional client-provided context fragments keyed by an opaque source identifier.", + "type": [ + "object", + "null" + ] + }, "expectedTurnId": { "description": "Required active turn id precondition. The request fails when it does not match the currently active turn.", "type": "string" @@ -18433,6 +20458,16 @@ }, "type": "array" }, + "responsesapiClientMetadata": { + "additionalProperties": { + "type": "string" + }, + "description": "Optional turn-scoped Responses API client metadata.", + "type": [ + "object", + "null" + ] + }, "threadId": { "type": "string" } diff --git a/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.v2.schemas.json b/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.v2.schemas.json index ac565328f9d..acd0e57a1c4 100644 --- a/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.v2.schemas.json +++ b/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.v2.schemas.json @@ -164,6 +164,17 @@ ], "type": "string" }, + "AdditionalContextEntry": { + "properties": { + "value": { + "type": "string" + } + }, + "required": [ + "value" + ], + "type": "object" + }, "AdditionalFileSystemPermissions": { "properties": { "entries": { @@ -1074,6 +1085,56 @@ "title": "Thread/unsubscribeRequest", "type": "object" }, + { + "description": "Increment the thread-local out-of-band elicitation counter.\n\nThis is used by external helpers to pause timeout accounting while a user approval or other elicitation is pending outside the app-server request flow.", + "properties": { + "id": { + "$ref": "#/definitions/RequestId" + }, + "method": { + "enum": [ + "thread/increment_elicitation" + ], + "title": "Thread/incrementElicitationRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/ThreadIncrementElicitationParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "Thread/incrementElicitationRequest", + "type": "object" + }, + { + "description": "Decrement the thread-local out-of-band elicitation counter.\n\nWhen the count reaches zero, timeout accounting resumes for the thread.", + "properties": { + "id": { + "$ref": "#/definitions/RequestId" + }, + "method": { + "enum": [ + "thread/decrement_elicitation" + ], + "title": "Thread/decrementElicitationRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/ThreadDecrementElicitationParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "Thread/decrementElicitationRequest", + "type": "object" + }, { "properties": { "id": { @@ -1194,6 +1255,77 @@ "title": "Thread/metadata/updateRequest", "type": "object" }, + { + "properties": { + "id": { + "$ref": "#/definitions/RequestId" + }, + "method": { + "enum": [ + "thread/settings/update" + ], + "title": "Thread/settings/updateRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/ThreadSettingsUpdateParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "Thread/settings/updateRequest", + "type": "object" + }, + { + "properties": { + "id": { + "$ref": "#/definitions/RequestId" + }, + "method": { + "enum": [ + "thread/memoryMode/set" + ], + "title": "Thread/memoryMode/setRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/ThreadMemoryModeSetParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "Thread/memoryMode/setRequest", + "type": "object" + }, + { + "properties": { + "id": { + "$ref": "#/definitions/RequestId" + }, + "method": { + "enum": [ + "memory/reset" + ], + "title": "Memory/resetRequestMethod", + "type": "string" + }, + "params": { + "type": "null" + } + }, + "required": [ + "id", + "method" + ], + "title": "Memory/resetRequest", + "type": "object" + }, { "properties": { "id": { @@ -1290,6 +1422,30 @@ "title": "Thread/approveGuardianDeniedActionRequest", "type": "object" }, + { + "properties": { + "id": { + "$ref": "#/definitions/RequestId" + }, + "method": { + "enum": [ + "thread/backgroundTerminals/clean" + ], + "title": "Thread/backgroundTerminals/cleanRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/ThreadBackgroundTerminalsCleanParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "Thread/backgroundTerminals/cleanRequest", + "type": "object" + }, { "properties": { "id": { @@ -1338,6 +1494,30 @@ "title": "Thread/listRequest", "type": "object" }, + { + "properties": { + "id": { + "$ref": "#/definitions/RequestId" + }, + "method": { + "enum": [ + "thread/search" + ], + "title": "Thread/searchRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/ThreadSearchParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "Thread/searchRequest", + "type": "object" + }, { "properties": { "id": { @@ -1386,6 +1566,54 @@ "title": "Thread/readRequest", "type": "object" }, + { + "properties": { + "id": { + "$ref": "#/definitions/RequestId" + }, + "method": { + "enum": [ + "thread/turns/list" + ], + "title": "Thread/turns/listRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/ThreadTurnsListParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "Thread/turns/listRequest", + "type": "object" + }, + { + "properties": { + "id": { + "$ref": "#/definitions/RequestId" + }, + "method": { + "enum": [ + "thread/turns/items/list" + ], + "title": "Thread/turns/items/listRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/ThreadTurnsItemsListParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "Thread/turns/items/listRequest", + "type": "object" + }, { "description": "Append raw Responses API items to the thread history without starting a user turn.", "properties": { @@ -2138,13 +2366,13 @@ }, "method": { "enum": [ - "review/start" + "thread/realtime/start" ], - "title": "Review/startRequestMethod", + "title": "Thread/realtime/startRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/ReviewStartParams" + "$ref": "#/definitions/ThreadRealtimeStartParams" } }, "required": [ @@ -2152,7 +2380,7 @@ "method", "params" ], - "title": "Review/startRequest", + "title": "Thread/realtime/startRequest", "type": "object" }, { @@ -2162,13 +2390,13 @@ }, "method": { "enum": [ - "model/list" + "thread/realtime/appendAudio" ], - "title": "Model/listRequestMethod", + "title": "Thread/realtime/appendAudioRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/ModelListParams" + "$ref": "#/definitions/ThreadRealtimeAppendAudioParams" } }, "required": [ @@ -2176,7 +2404,7 @@ "method", "params" ], - "title": "Model/listRequest", + "title": "Thread/realtime/appendAudioRequest", "type": "object" }, { @@ -2186,13 +2414,13 @@ }, "method": { "enum": [ - "modelProvider/capabilities/read" + "thread/realtime/appendText" ], - "title": "ModelProvider/capabilities/readRequestMethod", + "title": "Thread/realtime/appendTextRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/ModelProviderCapabilitiesReadParams" + "$ref": "#/definitions/ThreadRealtimeAppendTextParams" } }, "required": [ @@ -2200,7 +2428,7 @@ "method", "params" ], - "title": "ModelProvider/capabilities/readRequest", + "title": "Thread/realtime/appendTextRequest", "type": "object" }, { @@ -2210,13 +2438,13 @@ }, "method": { "enum": [ - "experimentalFeature/list" + "thread/realtime/stop" ], - "title": "ExperimentalFeature/listRequestMethod", + "title": "Thread/realtime/stopRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/ExperimentalFeatureListParams" + "$ref": "#/definitions/ThreadRealtimeStopParams" } }, "required": [ @@ -2224,7 +2452,7 @@ "method", "params" ], - "title": "ExperimentalFeature/listRequest", + "title": "Thread/realtime/stopRequest", "type": "object" }, { @@ -2234,13 +2462,13 @@ }, "method": { "enum": [ - "permissionProfile/list" + "thread/realtime/listVoices" ], - "title": "PermissionProfile/listRequestMethod", + "title": "Thread/realtime/listVoicesRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/PermissionProfileListParams" + "$ref": "#/definitions/ThreadRealtimeListVoicesParams" } }, "required": [ @@ -2248,7 +2476,7 @@ "method", "params" ], - "title": "PermissionProfile/listRequest", + "title": "Thread/realtime/listVoicesRequest", "type": "object" }, { @@ -2258,13 +2486,13 @@ }, "method": { "enum": [ - "experimentalFeature/enablement/set" + "review/start" ], - "title": "ExperimentalFeature/enablement/setRequestMethod", + "title": "Review/startRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/ExperimentalFeatureEnablementSetParams" + "$ref": "#/definitions/ReviewStartParams" } }, "required": [ @@ -2272,7 +2500,7 @@ "method", "params" ], - "title": "ExperimentalFeature/enablement/setRequest", + "title": "Review/startRequest", "type": "object" }, { @@ -2282,13 +2510,13 @@ }, "method": { "enum": [ - "mcpServer/oauth/login" + "model/list" ], - "title": "McpServer/oauth/loginRequestMethod", + "title": "Model/listRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/McpServerOauthLoginParams" + "$ref": "#/definitions/ModelListParams" } }, "required": [ @@ -2296,7 +2524,7 @@ "method", "params" ], - "title": "McpServer/oauth/loginRequest", + "title": "Model/listRequest", "type": "object" }, { @@ -2306,20 +2534,21 @@ }, "method": { "enum": [ - "config/mcpServer/reload" + "modelProvider/capabilities/read" ], - "title": "Config/mcpServer/reloadRequestMethod", + "title": "ModelProvider/capabilities/readRequestMethod", "type": "string" }, "params": { - "type": "null" + "$ref": "#/definitions/ModelProviderCapabilitiesReadParams" } }, "required": [ "id", - "method" + "method", + "params" ], - "title": "Config/mcpServer/reloadRequest", + "title": "ModelProvider/capabilities/readRequest", "type": "object" }, { @@ -2329,13 +2558,13 @@ }, "method": { "enum": [ - "mcpServerStatus/list" + "experimentalFeature/list" ], - "title": "McpServerStatus/listRequestMethod", + "title": "ExperimentalFeature/listRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/ListMcpServerStatusParams" + "$ref": "#/definitions/ExperimentalFeatureListParams" } }, "required": [ @@ -2343,7 +2572,7 @@ "method", "params" ], - "title": "McpServerStatus/listRequest", + "title": "ExperimentalFeature/listRequest", "type": "object" }, { @@ -2353,13 +2582,13 @@ }, "method": { "enum": [ - "mcpServer/resource/read" + "permissionProfile/list" ], - "title": "McpServer/resource/readRequestMethod", + "title": "PermissionProfile/listRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/McpResourceReadParams" + "$ref": "#/definitions/PermissionProfileListParams" } }, "required": [ @@ -2367,7 +2596,7 @@ "method", "params" ], - "title": "McpServer/resource/readRequest", + "title": "PermissionProfile/listRequest", "type": "object" }, { @@ -2377,9 +2606,272 @@ }, "method": { "enum": [ - "mcpServer/tool/call" + "experimentalFeature/enablement/set" ], - "title": "McpServer/tool/callRequestMethod", + "title": "ExperimentalFeature/enablement/setRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/ExperimentalFeatureEnablementSetParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "ExperimentalFeature/enablement/setRequest", + "type": "object" + }, + { + "properties": { + "id": { + "$ref": "#/definitions/RequestId" + }, + "method": { + "enum": [ + "remoteControl/enable" + ], + "title": "RemoteControl/enableRequestMethod", + "type": "string" + }, + "params": { + "type": "null" + } + }, + "required": [ + "id", + "method" + ], + "title": "RemoteControl/enableRequest", + "type": "object" + }, + { + "properties": { + "id": { + "$ref": "#/definitions/RequestId" + }, + "method": { + "enum": [ + "remoteControl/disable" + ], + "title": "RemoteControl/disableRequestMethod", + "type": "string" + }, + "params": { + "type": "null" + } + }, + "required": [ + "id", + "method" + ], + "title": "RemoteControl/disableRequest", + "type": "object" + }, + { + "properties": { + "id": { + "$ref": "#/definitions/RequestId" + }, + "method": { + "enum": [ + "remoteControl/status/read" + ], + "title": "RemoteControl/status/readRequestMethod", + "type": "string" + }, + "params": { + "type": "null" + } + }, + "required": [ + "id", + "method" + ], + "title": "RemoteControl/status/readRequest", + "type": "object" + }, + { + "description": "Lists collaboration mode presets.", + "properties": { + "id": { + "$ref": "#/definitions/RequestId" + }, + "method": { + "enum": [ + "collaborationMode/list" + ], + "title": "CollaborationMode/listRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/CollaborationModeListParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "CollaborationMode/listRequest", + "type": "object" + }, + { + "description": "Test-only method used to validate experimental gating.", + "properties": { + "id": { + "$ref": "#/definitions/RequestId" + }, + "method": { + "enum": [ + "mock/experimentalMethod" + ], + "title": "Mock/experimentalMethodRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/MockExperimentalMethodParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "Mock/experimentalMethodRequest", + "type": "object" + }, + { + "description": "Adds or replaces a remote environment by id for later selection.", + "properties": { + "id": { + "$ref": "#/definitions/RequestId" + }, + "method": { + "enum": [ + "environment/add" + ], + "title": "Environment/addRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/EnvironmentAddParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "Environment/addRequest", + "type": "object" + }, + { + "properties": { + "id": { + "$ref": "#/definitions/RequestId" + }, + "method": { + "enum": [ + "mcpServer/oauth/login" + ], + "title": "McpServer/oauth/loginRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/McpServerOauthLoginParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "McpServer/oauth/loginRequest", + "type": "object" + }, + { + "properties": { + "id": { + "$ref": "#/definitions/RequestId" + }, + "method": { + "enum": [ + "config/mcpServer/reload" + ], + "title": "Config/mcpServer/reloadRequestMethod", + "type": "string" + }, + "params": { + "type": "null" + } + }, + "required": [ + "id", + "method" + ], + "title": "Config/mcpServer/reloadRequest", + "type": "object" + }, + { + "properties": { + "id": { + "$ref": "#/definitions/RequestId" + }, + "method": { + "enum": [ + "mcpServerStatus/list" + ], + "title": "McpServerStatus/listRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/ListMcpServerStatusParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "McpServerStatus/listRequest", + "type": "object" + }, + { + "properties": { + "id": { + "$ref": "#/definitions/RequestId" + }, + "method": { + "enum": [ + "mcpServer/resource/read" + ], + "title": "McpServer/resource/readRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/McpResourceReadParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "McpServer/resource/readRequest", + "type": "object" + }, + { + "properties": { + "id": { + "$ref": "#/definitions/RequestId" + }, + "method": { + "enum": [ + "mcpServer/tool/call" + ], + "title": "McpServer/tool/callRequestMethod", "type": "string" }, "params": { @@ -2683,6 +3175,106 @@ "title": "Command/exec/resizeRequest", "type": "object" }, + { + "description": "Spawn a standalone process (argv vector) without a Codex sandbox.", + "properties": { + "id": { + "$ref": "#/definitions/RequestId" + }, + "method": { + "enum": [ + "process/spawn" + ], + "title": "Process/spawnRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/ProcessSpawnParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "Process/spawnRequest", + "type": "object" + }, + { + "description": "Write stdin bytes to a running `process/spawn` session or close stdin.", + "properties": { + "id": { + "$ref": "#/definitions/RequestId" + }, + "method": { + "enum": [ + "process/writeStdin" + ], + "title": "Process/writeStdinRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/ProcessWriteStdinParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "Process/writeStdinRequest", + "type": "object" + }, + { + "description": "Terminate a running `process/spawn` session by client-supplied `processHandle`.", + "properties": { + "id": { + "$ref": "#/definitions/RequestId" + }, + "method": { + "enum": [ + "process/kill" + ], + "title": "Process/killRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/ProcessKillParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "Process/killRequest", + "type": "object" + }, + { + "description": "Resize a running PTY-backed `process/spawn` session by client-supplied `processHandle`.", + "properties": { + "id": { + "$ref": "#/definitions/RequestId" + }, + "method": { + "enum": [ + "process/resizePty" + ], + "title": "Process/resizePtyRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/ProcessResizePtyParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "Process/resizePtyRequest", + "type": "object" + }, { "properties": { "id": { @@ -2873,6 +3465,78 @@ ], "title": "FuzzyFileSearchRequest", "type": "object" + }, + { + "properties": { + "id": { + "$ref": "#/definitions/RequestId" + }, + "method": { + "enum": [ + "fuzzyFileSearch/sessionStart" + ], + "title": "FuzzyFileSearch/sessionStartRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/FuzzyFileSearchSessionStartParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "FuzzyFileSearch/sessionStartRequest", + "type": "object" + }, + { + "properties": { + "id": { + "$ref": "#/definitions/RequestId" + }, + "method": { + "enum": [ + "fuzzyFileSearch/sessionUpdate" + ], + "title": "FuzzyFileSearch/sessionUpdateRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/FuzzyFileSearchSessionUpdateParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "FuzzyFileSearch/sessionUpdateRequest", + "type": "object" + }, + { + "properties": { + "id": { + "$ref": "#/definitions/RequestId" + }, + "method": { + "enum": [ + "fuzzyFileSearch/sessionStop" + ], + "title": "FuzzyFileSearch/sessionStopRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/FuzzyFileSearchSessionStopParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "FuzzyFileSearch/sessionStopRequest", + "type": "object" } ], "title": "ClientRequest" @@ -3077,6 +3741,29 @@ ], "type": "object" }, + "CollaborationModeListParams": { + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "EXPERIMENTAL - list collaboration mode presets.", + "title": "CollaborationModeListParams", + "type": "object" + }, + "CollaborationModeListResponse": { + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "EXPERIMENTAL - collaboration mode presets response.", + "properties": { + "data": { + "items": { + "$ref": "#/definitions/CollaborationModeMask" + }, + "type": "array" + } + }, + "required": [ + "data" + ], + "title": "CollaborationModeListResponse", + "type": "object" + }, "CollaborationModeMask": { "description": "EXPERIMENTAL - collaboration mode preset metadata for clients.", "properties": { @@ -3333,6 +4020,13 @@ "null" ] }, + "permissionProfile": { + "description": "Optional active permissions profile id for this command.\n\nDefaults to the user's configured permissions when omitted. Cannot be combined with `sandboxPolicy`.", + "type": [ + "string", + "null" + ] + }, "processId": { "description": "Optional client-supplied, connection-scoped process id.\n\nRequired for `tty`, `streamStdin`, `streamStdoutStderr`, and follow-up `command/exec/write`, `command/exec/resize`, and `command/exec/terminate` calls. When omitted, buffered execution gets an internal id that is not exposed to the client.", "type": [ @@ -3619,6 +4313,17 @@ ], "description": "[UNSTABLE] Optional default for where approval requests are routed for review." }, + "apps": { + "anyOf": [ + { + "$ref": "#/definitions/AppsConfig" + }, + { + "type": "null" + } + ], + "default": null + }, "compact_prompt": { "type": [ "string", @@ -4105,6 +4810,15 @@ "null" ] }, + "allowedApprovalsReviewers": { + "items": { + "$ref": "#/definitions/ApprovalsReviewer" + }, + "type": [ + "array", + "null" + ] + }, "allowedPermissions": { "items": { "type": "string" @@ -4160,6 +4874,26 @@ "object", "null" ] + }, + "hooks": { + "anyOf": [ + { + "$ref": "#/definitions/ManagedHooksRequirements" + }, + { + "type": "null" + } + ] + }, + "network": { + "anyOf": [ + { + "$ref": "#/definitions/NetworkRequirements" + }, + { + "type": "null" + } + ] } }, "type": "object" @@ -4601,6 +5335,28 @@ ], "type": "object" }, + "EnvironmentAddParams": { + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "environmentId": { + "type": "string" + }, + "execServerUrl": { + "type": "string" + } + }, + "required": [ + "environmentId", + "execServerUrl" + ], + "title": "EnvironmentAddParams", + "type": "object" + }, + "EnvironmentAddResponse": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "EnvironmentAddResponse", + "type": "object" + }, "ErrorNotification": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { @@ -5810,7 +6566,57 @@ "required": [ "sessionId" ], - "title": "FuzzyFileSearchSessionCompletedNotification", + "title": "FuzzyFileSearchSessionCompletedNotification", + "type": "object" + }, + "FuzzyFileSearchSessionStartParams": { + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "roots": { + "items": { + "type": "string" + }, + "type": "array" + }, + "sessionId": { + "type": "string" + } + }, + "required": [ + "roots", + "sessionId" + ], + "title": "FuzzyFileSearchSessionStartParams", + "type": "object" + }, + "FuzzyFileSearchSessionStopParams": { + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "sessionId": { + "type": "string" + } + }, + "required": [ + "sessionId" + ], + "title": "FuzzyFileSearchSessionStopParams", + "type": "object" + }, + "FuzzyFileSearchSessionUpdateParams": { + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "query": { + "type": "string" + }, + "sessionId": { + "type": "string" + } + }, + "required": [ + "query", + "sessionId" + ], + "title": "FuzzyFileSearchSessionUpdateParams", "type": "object" }, "FuzzyFileSearchSessionUpdatedNotification": { @@ -7770,6 +8576,11 @@ ], "type": "object" }, + "MemoryResetResponse": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "MemoryResetResponse", + "type": "object" + }, "MergeStrategy": { "enum": [ "replace", @@ -7843,6 +8654,34 @@ }, "type": "object" }, + "MockExperimentalMethodParams": { + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "value": { + "description": "Test-only payload field.", + "type": [ + "string", + "null" + ] + } + }, + "title": "MockExperimentalMethodParams", + "type": "object" + }, + "MockExperimentalMethodResponse": { + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "echoed": { + "description": "Echoes the input `value`.", + "type": [ + "string", + "null" + ] + } + }, + "title": "MockExperimentalMethodResponse", + "type": "object" + }, "ModeKind": { "description": "Initial collaboration mode to use when the TUI starts.", "enum": [ @@ -9617,6 +10456,27 @@ "title": "ProcessExitedNotification", "type": "object" }, + "ProcessKillParams": { + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Terminate a running `process/spawn` session.", + "properties": { + "processHandle": { + "description": "Client-supplied, connection-scoped `processHandle` from `process/spawn`.", + "type": "string" + } + }, + "required": [ + "processHandle" + ], + "title": "ProcessKillParams", + "type": "object" + }, + "ProcessKillResponse": { + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Empty success response for `process/kill`.", + "title": "ProcessKillResponse", + "type": "object" + }, "ProcessOutputDeltaNotification": { "$schema": "http://json-schema.org/draft-07/schema#", "description": "Base64-encoded output chunk emitted for a streaming `process/spawn` request.", @@ -9670,6 +10530,127 @@ } ] }, + "ProcessResizePtyParams": { + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Resize a running PTY-backed `process/spawn` session.", + "properties": { + "processHandle": { + "description": "Client-supplied, connection-scoped `processHandle` from `process/spawn`.", + "type": "string" + }, + "size": { + "allOf": [ + { + "$ref": "#/definitions/ProcessTerminalSize" + } + ], + "description": "New PTY size in character cells." + } + }, + "required": [ + "processHandle", + "size" + ], + "title": "ProcessResizePtyParams", + "type": "object" + }, + "ProcessResizePtyResponse": { + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Empty success response for `process/resizePty`.", + "title": "ProcessResizePtyResponse", + "type": "object" + }, + "ProcessSpawnParams": { + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Spawn a standalone process (argv vector) without a Codex sandbox on the host where the app server is running.\n\n`process/spawn` returns after the process has started and the connection-scoped `processHandle` has been registered. Process output and exit are reported via `process/outputDelta` and `process/exited` notifications.", + "properties": { + "command": { + "description": "Command argv vector. Empty arrays are rejected.", + "items": { + "type": "string" + }, + "type": "array" + }, + "cwd": { + "allOf": [ + { + "$ref": "#/definitions/AbsolutePathBuf" + } + ], + "description": "Absolute working directory for the process." + }, + "env": { + "additionalProperties": { + "type": [ + "string", + "null" + ] + }, + "description": "Optional environment overrides merged into the app-server process environment.\n\nMatching names override inherited values. Set a key to `null` to unset an inherited variable.", + "type": [ + "object", + "null" + ] + }, + "outputBytesCap": { + "description": "Optional per-stream stdout/stderr capture cap in bytes.\n\nWhen omitted, the server default applies. Set to `null` to disable the cap.", + "format": "uint", + "minimum": 0.0, + "type": [ + "integer", + "null" + ] + }, + "processHandle": { + "description": "Client-supplied, connection-scoped process handle.\n\nDuplicate active handles are rejected on the same connection. The same handle can be reused after the prior process exits.", + "type": "string" + }, + "size": { + "anyOf": [ + { + "$ref": "#/definitions/ProcessTerminalSize" + }, + { + "type": "null" + } + ], + "description": "Optional initial PTY size in character cells. Only valid when `tty` is true." + }, + "streamStdin": { + "description": "Allow follow-up `process/writeStdin` requests to write stdin bytes.", + "type": "boolean" + }, + "streamStdoutStderr": { + "description": "Stream stdout/stderr via `process/outputDelta` notifications.\n\nStreamed bytes are not duplicated into the `process/exited` notification.", + "type": "boolean" + }, + "timeoutMs": { + "description": "Optional timeout in milliseconds.\n\nWhen omitted, the server default applies. Set to `null` to disable the timeout.", + "format": "int64", + "type": [ + "integer", + "null" + ] + }, + "tty": { + "description": "Enable PTY mode.\n\nThis implies `streamStdin` and `streamStdoutStderr`.", + "type": "boolean" + } + }, + "required": [ + "command", + "cwd", + "processHandle" + ], + "title": "ProcessSpawnParams", + "type": "object" + }, + "ProcessSpawnResponse": { + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Successful response for `process/spawn`.", + "title": "ProcessSpawnResponse", + "type": "object" + }, "ProcessTerminalSize": { "description": "PTY size in character cells for `process/spawn` PTY sessions.", "properties": { @@ -9692,6 +10673,38 @@ ], "type": "object" }, + "ProcessWriteStdinParams": { + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Write stdin bytes to a running `process/spawn` session, close stdin, or both.", + "properties": { + "closeStdin": { + "description": "Close stdin after writing `deltaBase64`, if present.", + "type": "boolean" + }, + "deltaBase64": { + "description": "Optional base64-encoded stdin bytes to write.", + "type": [ + "string", + "null" + ] + }, + "processHandle": { + "description": "Client-supplied, connection-scoped `processHandle` from `process/spawn`.", + "type": "string" + } + }, + "required": [ + "processHandle" + ], + "title": "ProcessWriteStdinParams", + "type": "object" + }, + "ProcessWriteStdinResponse": { + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Empty success response for `process/writeStdin`.", + "title": "ProcessWriteStdinResponse", + "type": "object" + }, "RateLimitReachedType": { "enum": [ "rate_limit_reached", @@ -10051,51 +11064,132 @@ "threadId", "turnId" ], - "title": "ReasoningSummaryTextDeltaNotification", + "title": "ReasoningSummaryTextDeltaNotification", + "type": "object" + }, + "ReasoningTextDeltaNotification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "contentIndex": { + "format": "int64", + "type": "integer" + }, + "delta": { + "type": "string" + }, + "itemId": { + "type": "string" + }, + "threadId": { + "type": "string" + }, + "turnId": { + "type": "string" + } + }, + "required": [ + "contentIndex", + "delta", + "itemId", + "threadId", + "turnId" + ], + "title": "ReasoningTextDeltaNotification", + "type": "object" + }, + "RemoteControlConnectionStatus": { + "enum": [ + "disabled", + "connecting", + "connected", + "errored" + ], + "type": "string" + }, + "RemoteControlDisableResponse": { + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "environmentId": { + "type": [ + "string", + "null" + ] + }, + "installationId": { + "type": "string" + }, + "serverName": { + "type": "string" + }, + "status": { + "$ref": "#/definitions/RemoteControlConnectionStatus" + } + }, + "required": [ + "installationId", + "serverName", + "status" + ], + "title": "RemoteControlDisableResponse", + "type": "object" + }, + "RemoteControlEnableResponse": { + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "environmentId": { + "type": [ + "string", + "null" + ] + }, + "installationId": { + "type": "string" + }, + "serverName": { + "type": "string" + }, + "status": { + "$ref": "#/definitions/RemoteControlConnectionStatus" + } + }, + "required": [ + "installationId", + "serverName", + "status" + ], + "title": "RemoteControlEnableResponse", "type": "object" }, - "ReasoningTextDeltaNotification": { + "RemoteControlStatusChangedNotification": { "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Current remote-control connection status and remote identity exposed to clients.", "properties": { - "contentIndex": { - "format": "int64", - "type": "integer" - }, - "delta": { - "type": "string" + "environmentId": { + "type": [ + "string", + "null" + ] }, - "itemId": { + "installationId": { "type": "string" }, - "threadId": { + "serverName": { "type": "string" }, - "turnId": { - "type": "string" + "status": { + "$ref": "#/definitions/RemoteControlConnectionStatus" } }, "required": [ - "contentIndex", - "delta", - "itemId", - "threadId", - "turnId" + "installationId", + "serverName", + "status" ], - "title": "ReasoningTextDeltaNotification", + "title": "RemoteControlStatusChangedNotification", "type": "object" }, - "RemoteControlConnectionStatus": { - "enum": [ - "disabled", - "connecting", - "connected", - "errored" - ], - "type": "string" - }, - "RemoteControlStatusChangedNotification": { + "RemoteControlStatusReadResponse": { "$schema": "http://json-schema.org/draft-07/schema#", - "description": "Current remote-control connection status and remote identity exposed to clients.", "properties": { "environmentId": { "type": [ @@ -10118,7 +11212,7 @@ "serverName", "status" ], - "title": "RemoteControlStatusChangedNotification", + "title": "RemoteControlStatusReadResponse", "type": "object" }, "RequestId": { @@ -13305,6 +14399,24 @@ "title": "ThreadArchivedNotification", "type": "object" }, + "ThreadBackgroundTerminalsCleanParams": { + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "threadId": { + "type": "string" + } + }, + "required": [ + "threadId" + ], + "title": "ThreadBackgroundTerminalsCleanParams", + "type": "object" + }, + "ThreadBackgroundTerminalsCleanResponse": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "ThreadBackgroundTerminalsCleanResponse", + "type": "object" + }, "ThreadClosedNotification": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { @@ -13336,6 +14448,43 @@ "title": "ThreadCompactStartResponse", "type": "object" }, + "ThreadDecrementElicitationParams": { + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Parameters for `thread/decrement_elicitation`.", + "properties": { + "threadId": { + "description": "Thread whose out-of-band elicitation counter should be decremented.", + "type": "string" + } + }, + "required": [ + "threadId" + ], + "title": "ThreadDecrementElicitationParams", + "type": "object" + }, + "ThreadDecrementElicitationResponse": { + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Response for `thread/decrement_elicitation`.", + "properties": { + "count": { + "description": "Current out-of-band elicitation count after the decrement.", + "format": "uint64", + "minimum": 0.0, + "type": "integer" + }, + "paused": { + "description": "Whether timeout accounting remains paused after applying the decrement.", + "type": "boolean" + } + }, + "required": [ + "count", + "paused" + ], + "title": "ThreadDecrementElicitationResponse", + "type": "object" + }, "ThreadForkParams": { "$schema": "http://json-schema.org/draft-07/schema#", "description": "There are two ways to fork a thread: 1. By thread_id: load the thread from disk by thread_id and fork it into a new thread. 2. By path: load the thread from disk by path and fork it into a new thread.\n\nIf using a non-empty path, the thread_id param will be ignored. Empty string path values are treated as absent.\n\nPrefer using thread_id whenever possible.", @@ -13389,6 +14538,10 @@ "ephemeral": { "type": "boolean" }, + "excludeTurns": { + "description": "When true, return only thread metadata and live fork state without populating `thread.turns`. This is useful when the client plans to call `thread/turns/list` immediately after forking.", + "type": "boolean" + }, "model": { "description": "Configuration overrides for the forked thread, if any.", "type": [ @@ -13402,6 +14555,35 @@ "null" ] }, + "path": { + "default": null, + "description": "[UNSTABLE] Specify the rollout path to fork from. If specified, the thread_id param will be ignored.", + "type": [ + "string", + "null" + ] + }, + "permissions": { + "description": "Named profile id for the forked thread. Cannot be combined with `sandbox`.", + "type": [ + "string", + "null" + ] + }, + "persistExtendedHistory": { + "description": "Deprecated and ignored by app-server. Kept only so older clients can continue sending the field while rollout persistence always uses the limited history policy.", + "type": "boolean" + }, + "runtimeWorkspaceRoots": { + "description": "Replace the thread's runtime workspace roots. Relative paths are resolved against the effective cwd for the thread.", + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, "sandbox": { "anyOf": [ { @@ -13442,6 +14624,18 @@ "ThreadForkResponse": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { + "activePermissionProfile": { + "anyOf": [ + { + "$ref": "#/definitions/ActivePermissionProfile" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Named or implicit built-in profile that produced the active permissions, when known." + }, "approvalPolicy": { "$ref": "#/definitions/AskForApproval" }, @@ -13480,6 +14674,14 @@ } ] }, + "runtimeWorkspaceRoots": { + "default": [], + "description": "Thread-scoped runtime workspace roots used to materialize `:workspace_roots`.", + "items": { + "$ref": "#/definitions/AbsolutePathBuf" + }, + "type": "array" + }, "sandbox": { "allOf": [ { @@ -13711,6 +14913,43 @@ "ThreadId": { "type": "string" }, + "ThreadIncrementElicitationParams": { + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Parameters for `thread/increment_elicitation`.", + "properties": { + "threadId": { + "description": "Thread whose out-of-band elicitation counter should be incremented.", + "type": "string" + } + }, + "required": [ + "threadId" + ], + "title": "ThreadIncrementElicitationParams", + "type": "object" + }, + "ThreadIncrementElicitationResponse": { + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Response for `thread/increment_elicitation`.", + "properties": { + "count": { + "description": "Current out-of-band elicitation count after the increment.", + "format": "uint64", + "minimum": 0.0, + "type": "integer" + }, + "paused": { + "description": "Whether timeout accounting is paused after applying the increment.", + "type": "boolean" + } + }, + "required": [ + "count", + "paused" + ], + "title": "ThreadIncrementElicitationResponse", + "type": "object" + }, "ThreadInjectItemsParams": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { @@ -14592,6 +15831,28 @@ ], "type": "string" }, + "ThreadMemoryModeSetParams": { + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "mode": { + "$ref": "#/definitions/ThreadMemoryMode" + }, + "threadId": { + "type": "string" + } + }, + "required": [ + "mode", + "threadId" + ], + "title": "ThreadMemoryModeSetParams", + "type": "object" + }, + "ThreadMemoryModeSetResponse": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "ThreadMemoryModeSetResponse", + "type": "object" + }, "ThreadMetadataGitInfoUpdateParams": { "properties": { "branch": { @@ -14704,6 +15965,54 @@ "title": "ThreadReadResponse", "type": "object" }, + "ThreadRealtimeAppendAudioParams": { + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "EXPERIMENTAL - append audio input to thread realtime.", + "properties": { + "audio": { + "$ref": "#/definitions/ThreadRealtimeAudioChunk" + }, + "threadId": { + "type": "string" + } + }, + "required": [ + "audio", + "threadId" + ], + "title": "ThreadRealtimeAppendAudioParams", + "type": "object" + }, + "ThreadRealtimeAppendAudioResponse": { + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "EXPERIMENTAL - response for appending realtime audio input.", + "title": "ThreadRealtimeAppendAudioResponse", + "type": "object" + }, + "ThreadRealtimeAppendTextParams": { + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "EXPERIMENTAL - append text input to thread realtime.", + "properties": { + "text": { + "type": "string" + }, + "threadId": { + "type": "string" + } + }, + "required": [ + "text", + "threadId" + ], + "title": "ThreadRealtimeAppendTextParams", + "type": "object" + }, + "ThreadRealtimeAppendTextResponse": { + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "EXPERIMENTAL - response for appending realtime text input.", + "title": "ThreadRealtimeAppendTextResponse", + "type": "object" + }, "ThreadRealtimeAudioChunk": { "description": "EXPERIMENTAL - thread realtime audio chunk.", "properties": { @@ -14796,6 +16105,26 @@ "title": "ThreadRealtimeItemAddedNotification", "type": "object" }, + "ThreadRealtimeListVoicesParams": { + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "EXPERIMENTAL - list voices supported by thread realtime.", + "title": "ThreadRealtimeListVoicesParams", + "type": "object" + }, + "ThreadRealtimeListVoicesResponse": { + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "EXPERIMENTAL - response for listing supported realtime voices.", + "properties": { + "voices": { + "$ref": "#/definitions/RealtimeVoicesList" + } + }, + "required": [ + "voices" + ], + "title": "ThreadRealtimeListVoicesResponse", + "type": "object" + }, "ThreadRealtimeOutputAudioDeltaNotification": { "$schema": "http://json-schema.org/draft-07/schema#", "description": "EXPERIMENTAL - streamed output audio emitted by thread realtime.", @@ -14832,6 +16161,67 @@ "title": "ThreadRealtimeSdpNotification", "type": "object" }, + "ThreadRealtimeStartParams": { + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "EXPERIMENTAL - start a thread-scoped realtime session.", + "properties": { + "outputModality": { + "allOf": [ + { + "$ref": "#/definitions/RealtimeOutputModality" + } + ], + "description": "Selects text or audio output for the realtime session. Transport and voice stay independent so clients can choose how they connect separately from what the model emits." + }, + "prompt": { + "type": [ + "string", + "null" + ] + }, + "realtimeSessionId": { + "type": [ + "string", + "null" + ] + }, + "threadId": { + "type": "string" + }, + "transport": { + "anyOf": [ + { + "$ref": "#/definitions/ThreadRealtimeStartTransport" + }, + { + "type": "null" + } + ] + }, + "voice": { + "anyOf": [ + { + "$ref": "#/definitions/RealtimeVoice" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "outputModality", + "threadId" + ], + "title": "ThreadRealtimeStartParams", + "type": "object" + }, + "ThreadRealtimeStartResponse": { + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "EXPERIMENTAL - response for starting thread realtime.", + "title": "ThreadRealtimeStartResponse", + "type": "object" + }, "ThreadRealtimeStartTransport": { "description": "EXPERIMENTAL - transport used by thread realtime.", "oneOf": [ @@ -14898,6 +16288,26 @@ "title": "ThreadRealtimeStartedNotification", "type": "object" }, + "ThreadRealtimeStopParams": { + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "EXPERIMENTAL - stop thread realtime.", + "properties": { + "threadId": { + "type": "string" + } + }, + "required": [ + "threadId" + ], + "title": "ThreadRealtimeStopParams", + "type": "object" + }, + "ThreadRealtimeStopResponse": { + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "EXPERIMENTAL - response for stopping thread realtime.", + "title": "ThreadRealtimeStopResponse", + "type": "object" + }, "ThreadRealtimeTranscriptDeltaNotification": { "$schema": "http://json-schema.org/draft-07/schema#", "description": "EXPERIMENTAL - flat transcript delta emitted whenever realtime transcript text changes.", @@ -14994,6 +16404,20 @@ "null" ] }, + "excludeTurns": { + "description": "When true, return only thread metadata and live-resume state without populating `thread.turns`. This is useful when the client plans to call `thread/turns/list` immediately after resuming.", + "type": "boolean" + }, + "history": { + "description": "[UNSTABLE] FOR CODEX CLOUD - DO NOT USE. If specified, the thread will be resumed with the provided history instead of loaded from disk.", + "items": { + "$ref": "#/definitions/ResponseItem" + }, + "type": [ + "array", + "null" + ] + }, "model": { "description": "Configuration overrides for the resumed thread, if any.", "type": [ @@ -15007,6 +16431,25 @@ "null" ] }, + "path": { + "default": null, + "description": "[UNSTABLE] Specify the rollout path to resume from. If specified for a non-running thread, the thread_id param will be ignored. If thread_id identifies a running thread, the path must match the active rollout path.", + "type": [ + "string", + "null" + ] + }, + "permissions": { + "description": "Named profile id for the resumed thread. Cannot be combined with `sandbox`.", + "type": [ + "string", + "null" + ] + }, + "persistExtendedHistory": { + "description": "Deprecated and ignored by app-server. Kept only so older clients can continue sending the field while rollout persistence always uses the limited history policy.", + "type": "boolean" + }, "personality": { "anyOf": [ { @@ -15017,6 +16460,16 @@ } ] }, + "runtimeWorkspaceRoots": { + "description": "Replace the thread's runtime workspace roots. Relative paths are resolved against the effective cwd for the thread.", + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, "sandbox": { "anyOf": [ { @@ -15046,6 +16499,18 @@ "ThreadResumeResponse": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { + "activePermissionProfile": { + "anyOf": [ + { + "$ref": "#/definitions/ActivePermissionProfile" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Named or implicit built-in profile that produced the active permissions, when known." + }, "approvalPolicy": { "$ref": "#/definitions/AskForApproval" }, @@ -15084,6 +16549,14 @@ } ] }, + "runtimeWorkspaceRoots": { + "default": [], + "description": "Thread-scoped runtime workspace roots used to materialize `:workspace_roots`.", + "items": { + "$ref": "#/definitions/AbsolutePathBuf" + }, + "type": "array" + }, "sandbox": { "allOf": [ { @@ -15152,6 +16625,105 @@ "title": "ThreadRollbackResponse", "type": "object" }, + "ThreadSearchParams": { + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "archived": { + "description": "Optional archived filter; when set to true, only archived threads are returned. If false or null, only non-archived threads are returned.", + "type": [ + "boolean", + "null" + ] + }, + "cursor": { + "description": "Opaque pagination cursor returned by a previous call.", + "type": [ + "string", + "null" + ] + }, + "limit": { + "description": "Optional page size; defaults to a reasonable server-side value.", + "format": "uint32", + "minimum": 0.0, + "type": [ + "integer", + "null" + ] + }, + "searchTerm": { + "description": "Required substring/full-text query for thread search.", + "type": "string" + }, + "sortDirection": { + "anyOf": [ + { + "$ref": "#/definitions/SortDirection" + }, + { + "type": "null" + } + ], + "description": "Optional sort direction; defaults to descending (newest first)." + }, + "sortKey": { + "anyOf": [ + { + "$ref": "#/definitions/ThreadSortKey" + }, + { + "type": "null" + } + ], + "description": "Optional sort key; defaults to created_at." + }, + "sourceKinds": { + "description": "Optional source filter; when set, only sessions from these source kinds are returned. When omitted or empty, defaults to interactive sources.", + "items": { + "$ref": "#/definitions/ThreadSourceKind" + }, + "type": [ + "array", + "null" + ] + } + }, + "required": [ + "searchTerm" + ], + "title": "ThreadSearchParams", + "type": "object" + }, + "ThreadSearchResponse": { + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "backwardsCursor": { + "description": "Opaque cursor to pass as `cursor` when reversing `sortDirection`. This is only populated when the page contains at least one thread. Use it with the opposite `sortDirection`; for timestamp sorts it anchors at the start of the page timestamp so same-second updates are not skipped.", + "type": [ + "string", + "null" + ] + }, + "data": { + "items": { + "$ref": "#/definitions/ThreadSearchResult" + }, + "type": "array" + }, + "nextCursor": { + "description": "Opaque cursor to pass to the next call to continue after the last item. if None, there are no more items to return.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "data" + ], + "title": "ThreadSearchResponse", + "type": "object" + }, "ThreadSearchResult": { "properties": { "snippet": { @@ -15270,6 +16842,129 @@ ], "type": "object" }, + "ThreadSettingsUpdateParams": { + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "approvalPolicy": { + "anyOf": [ + { + "$ref": "#/definitions/AskForApproval" + }, + { + "type": "null" + } + ], + "description": "Override the approval policy for subsequent turns." + }, + "approvalsReviewer": { + "anyOf": [ + { + "$ref": "#/definitions/ApprovalsReviewer" + }, + { + "type": "null" + } + ], + "description": "Override where approval requests are routed for subsequent turns." + }, + "collaborationMode": { + "anyOf": [ + { + "$ref": "#/definitions/CollaborationMode" + }, + { + "type": "null" + } + ], + "description": "EXPERIMENTAL - Set a pre-set collaboration mode for subsequent turns.\n\nFor `collaboration_mode.settings.developer_instructions`, `null` means \"use the built-in instructions for the selected mode\"." + }, + "cwd": { + "description": "Override the working directory for subsequent turns.", + "type": [ + "string", + "null" + ] + }, + "effort": { + "anyOf": [ + { + "$ref": "#/definitions/ReasoningEffort" + }, + { + "type": "null" + } + ], + "description": "Override the reasoning effort for subsequent turns." + }, + "model": { + "description": "Override the model for subsequent turns.", + "type": [ + "string", + "null" + ] + }, + "permissions": { + "description": "Select a named permissions profile id for subsequent turns. Cannot be combined with `sandboxPolicy`.", + "type": [ + "string", + "null" + ] + }, + "personality": { + "anyOf": [ + { + "$ref": "#/definitions/Personality" + }, + { + "type": "null" + } + ], + "description": "Override the personality for subsequent turns." + }, + "sandboxPolicy": { + "anyOf": [ + { + "$ref": "#/definitions/SandboxPolicy" + }, + { + "type": "null" + } + ], + "description": "Override the sandbox policy for subsequent turns." + }, + "serviceTier": { + "description": "Override the service tier for subsequent turns. `null` clears the current service tier; omission leaves it unchanged.", + "type": [ + "string", + "null" + ] + }, + "summary": { + "anyOf": [ + { + "$ref": "#/definitions/ReasoningSummary" + }, + { + "type": "null" + } + ], + "description": "Override the reasoning summary for subsequent turns." + }, + "threadId": { + "type": "string" + } + }, + "required": [ + "threadId" + ], + "title": "ThreadSettingsUpdateParams", + "type": "object" + }, + "ThreadSettingsUpdateResponse": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "ThreadSettingsUpdateResponse", + "type": "object" + }, "ThreadSettingsUpdatedNotification": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { @@ -15389,12 +17084,42 @@ "null" ] }, + "dynamicTools": { + "items": { + "$ref": "#/definitions/DynamicToolSpec" + }, + "type": [ + "array", + "null" + ] + }, + "environments": { + "description": "Optional sticky environments for this thread.\n\nOmitted selects the default environment when environment access is enabled. Empty disables environment access for turns that do not provide a turn override. Non-empty selects the first environment as the current turn environment.", + "items": { + "$ref": "#/definitions/TurnEnvironmentParams" + }, + "type": [ + "array", + "null" + ] + }, "ephemeral": { "type": [ "boolean", "null" ] }, + "experimentalRawEvents": { + "description": "If true, opt into emitting raw Responses API items on the event stream. This is for internal use only (e.g. Codex Cloud).", + "type": "boolean" + }, + "mockExperimentalField": { + "description": "Test-only experimental field used to validate experimental gating and schema filtering behavior in a stable way.", + "type": [ + "string", + "null" + ] + }, "model": { "type": [ "string", @@ -15407,6 +17132,17 @@ "null" ] }, + "permissions": { + "description": "Named profile id for this thread. Cannot be combined with `sandbox`.", + "type": [ + "string", + "null" + ] + }, + "persistExtendedHistory": { + "description": "Deprecated and ignored by app-server. Kept only so older clients can continue sending the field while rollout persistence always uses the limited history policy.", + "type": "boolean" + }, "personality": { "anyOf": [ { @@ -15417,6 +17153,16 @@ } ] }, + "runtimeWorkspaceRoots": { + "description": "Replace the thread's runtime workspace roots. Relative paths are resolved against the effective cwd for the thread.", + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, "sandbox": { "anyOf": [ { @@ -15467,6 +17213,18 @@ "ThreadStartResponse": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { + "activePermissionProfile": { + "anyOf": [ + { + "$ref": "#/definitions/ActivePermissionProfile" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Named or implicit built-in profile that produced the active permissions, when known." + }, "approvalPolicy": { "$ref": "#/definitions/AskForApproval" }, @@ -15505,6 +17263,14 @@ } ] }, + "runtimeWorkspaceRoots": { + "default": [], + "description": "Thread-scoped runtime workspace roots used to materialize `:workspace_roots`.", + "items": { + "$ref": "#/definitions/AbsolutePathBuf" + }, + "type": "array" + }, "sandbox": { "allOf": [ { @@ -15690,6 +17456,161 @@ "title": "ThreadTokenUsageUpdatedNotification", "type": "object" }, + "ThreadTurnsItemsListParams": { + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "cursor": { + "description": "Opaque cursor to pass to the next call to continue after the last item.", + "type": [ + "string", + "null" + ] + }, + "limit": { + "description": "Optional item page size.", + "format": "uint32", + "minimum": 0.0, + "type": [ + "integer", + "null" + ] + }, + "sortDirection": { + "anyOf": [ + { + "$ref": "#/definitions/SortDirection" + }, + { + "type": "null" + } + ], + "description": "Optional item pagination direction; defaults to ascending." + }, + "threadId": { + "type": "string" + }, + "turnId": { + "type": "string" + } + }, + "required": [ + "threadId", + "turnId" + ], + "title": "ThreadTurnsItemsListParams", + "type": "object" + }, + "ThreadTurnsItemsListResponse": { + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "backwardsCursor": { + "description": "Opaque cursor to pass as `cursor` when reversing `sortDirection`. This is only populated when the page contains at least one item.", + "type": [ + "string", + "null" + ] + }, + "data": { + "items": { + "$ref": "#/definitions/ThreadItem" + }, + "type": "array" + }, + "nextCursor": { + "description": "Opaque cursor to pass to the next call to continue after the last item. if None, there are no more items to return.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "data" + ], + "title": "ThreadTurnsItemsListResponse", + "type": "object" + }, + "ThreadTurnsListParams": { + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "cursor": { + "description": "Opaque cursor to pass to the next call to continue after the last turn.", + "type": [ + "string", + "null" + ] + }, + "itemsView": { + "anyOf": [ + { + "$ref": "#/definitions/TurnItemsView" + }, + { + "type": "null" + } + ], + "description": "How much item detail to include for each returned turn; defaults to summary." + }, + "limit": { + "description": "Optional turn page size.", + "format": "uint32", + "minimum": 0.0, + "type": [ + "integer", + "null" + ] + }, + "sortDirection": { + "anyOf": [ + { + "$ref": "#/definitions/SortDirection" + }, + { + "type": "null" + } + ], + "description": "Optional turn pagination direction; defaults to descending." + }, + "threadId": { + "type": "string" + } + }, + "required": [ + "threadId" + ], + "title": "ThreadTurnsListParams", + "type": "object" + }, + "ThreadTurnsListResponse": { + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "backwardsCursor": { + "description": "Opaque cursor to pass as `cursor` when reversing `sortDirection`. This is only populated when the page contains at least one turn. Use it with the opposite `sortDirection` to include the anchor turn again and catch updates to that turn.", + "type": [ + "string", + "null" + ] + }, + "data": { + "items": { + "$ref": "#/definitions/Turn" + }, + "type": "array" + }, + "nextCursor": { + "description": "Opaque cursor to pass to the next call to continue after the last turn. if None, there are no more turns to return.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "data" + ], + "title": "ThreadTurnsListResponse", + "type": "object" + }, "ThreadUnarchiveParams": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { @@ -16098,6 +18019,16 @@ "TurnStartParams": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { + "additionalContext": { + "additionalProperties": { + "$ref": "#/definitions/AdditionalContextEntry" + }, + "description": "Optional client-provided context fragments keyed by an opaque source identifier.", + "type": [ + "object", + "null" + ] + }, "approvalPolicy": { "anyOf": [ { @@ -16120,6 +18051,17 @@ ], "description": "Override where approval requests are routed for review on this turn and subsequent turns." }, + "collaborationMode": { + "anyOf": [ + { + "$ref": "#/definitions/CollaborationMode" + }, + { + "type": "null" + } + ], + "description": "EXPERIMENTAL - Set a pre-set collaboration mode. Takes precedence over model, reasoning_effort, and developer instructions if set.\n\nFor `collaboration_mode.settings.developer_instructions`, `null` means \"use the built-in instructions for the selected mode\"." + }, "cwd": { "description": "Override the working directory for this turn and subsequent turns.", "type": [ @@ -16138,6 +18080,16 @@ ], "description": "Override the reasoning effort for this turn and subsequent turns." }, + "environments": { + "description": "Optional turn-scoped environments.\n\nOmitted uses the thread sticky environments. Empty disables environment access for this turn. Non-empty selects the first environment as the current turn environment for this turn.", + "items": { + "$ref": "#/definitions/TurnEnvironmentParams" + }, + "type": [ + "array", + "null" + ] + }, "input": { "items": { "$ref": "#/definitions/UserInput" @@ -16154,6 +18106,13 @@ "outputSchema": { "description": "Optional JSON Schema used to constrain the final assistant message for this turn." }, + "permissions": { + "description": "Select a named permissions profile id for this turn and subsequent turns. Cannot be combined with `sandboxPolicy`.", + "type": [ + "string", + "null" + ] + }, "personality": { "anyOf": [ { @@ -16165,6 +18124,26 @@ ], "description": "Override the personality for this turn and subsequent turns." }, + "responsesapiClientMetadata": { + "additionalProperties": { + "type": "string" + }, + "description": "Optional turn-scoped Responses API client metadata.", + "type": [ + "object", + "null" + ] + }, + "runtimeWorkspaceRoots": { + "description": "Replace the thread's runtime workspace roots for this turn and subsequent turns. Relative paths are resolved against the effective cwd for the turn.", + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, "sandboxPolicy": { "anyOf": [ { @@ -16247,6 +18226,16 @@ "TurnSteerParams": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { + "additionalContext": { + "additionalProperties": { + "$ref": "#/definitions/AdditionalContextEntry" + }, + "description": "Optional client-provided context fragments keyed by an opaque source identifier.", + "type": [ + "object", + "null" + ] + }, "expectedTurnId": { "description": "Required active turn id precondition. The request fails when it does not match the currently active turn.", "type": "string" @@ -16257,6 +18246,16 @@ }, "type": "array" }, + "responsesapiClientMetadata": { + "additionalProperties": { + "type": "string" + }, + "description": "Optional turn-scoped Responses API client metadata.", + "type": [ + "object", + "null" + ] + }, "threadId": { "type": "string" } diff --git a/codex-rs/app-server-protocol/schema/json/v2/CollaborationModeListParams.json b/codex-rs/app-server-protocol/schema/json/v2/CollaborationModeListParams.json new file mode 100644 index 00000000000..bbac0d4f10a --- /dev/null +++ b/codex-rs/app-server-protocol/schema/json/v2/CollaborationModeListParams.json @@ -0,0 +1,6 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "EXPERIMENTAL - list collaboration mode presets.", + "title": "CollaborationModeListParams", + "type": "object" +} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/CollaborationModeListResponse.json b/codex-rs/app-server-protocol/schema/json/v2/CollaborationModeListResponse.json new file mode 100644 index 00000000000..c9a2f4e3b45 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/json/v2/CollaborationModeListResponse.json @@ -0,0 +1,84 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "definitions": { + "CollaborationModeMask": { + "description": "EXPERIMENTAL - collaboration mode preset metadata for clients.", + "properties": { + "mode": { + "anyOf": [ + { + "$ref": "#/definitions/ModeKind" + }, + { + "type": "null" + } + ] + }, + "model": { + "type": [ + "string", + "null" + ] + }, + "name": { + "type": "string" + }, + "reasoning_effort": { + "anyOf": [ + { + "anyOf": [ + { + "$ref": "#/definitions/ReasoningEffort" + }, + { + "type": "null" + } + ] + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "name" + ], + "type": "object" + }, + "ModeKind": { + "description": "Initial collaboration mode to use when the TUI starts.", + "enum": [ + "plan", + "default" + ], + "type": "string" + }, + "ReasoningEffort": { + "description": "See https://platform.openai.com/docs/guides/reasoning?api-mode=responses#get-started-with-reasoning", + "enum": [ + "none", + "minimal", + "low", + "medium", + "high", + "xhigh" + ], + "type": "string" + } + }, + "description": "EXPERIMENTAL - collaboration mode presets response.", + "properties": { + "data": { + "items": { + "$ref": "#/definitions/CollaborationModeMask" + }, + "type": "array" + } + }, + "required": [ + "data" + ], + "title": "CollaborationModeListResponse", + "type": "object" +} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/CommandExecParams.json b/codex-rs/app-server-protocol/schema/json/v2/CommandExecParams.json index d00a0b60e50..058db41b3e1 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/CommandExecParams.json +++ b/codex-rs/app-server-protocol/schema/json/v2/CommandExecParams.json @@ -180,6 +180,13 @@ "null" ] }, + "permissionProfile": { + "description": "Optional active permissions profile id for this command.\n\nDefaults to the user's configured permissions when omitted. Cannot be combined with `sandboxPolicy`.", + "type": [ + "string", + "null" + ] + }, "processId": { "description": "Optional client-supplied, connection-scoped process id.\n\nRequired for `tty`, `streamStdin`, `streamStdoutStderr`, and follow-up `command/exec/write`, `command/exec/resize`, and `command/exec/terminate` calls. When omitted, buffered execution gets an internal id that is not exposed to the client.", "type": [ diff --git a/codex-rs/app-server-protocol/schema/json/v2/ConfigReadResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ConfigReadResponse.json index 4a104b3bd51..298711a76bc 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/ConfigReadResponse.json +++ b/codex-rs/app-server-protocol/schema/json/v2/ConfigReadResponse.json @@ -241,6 +241,17 @@ ], "description": "[UNSTABLE] Optional default for where approval requests are routed for review." }, + "apps": { + "anyOf": [ + { + "$ref": "#/definitions/AppsConfig" + }, + { + "type": "null" + } + ], + "default": null + }, "compact_prompt": { "type": [ "string", diff --git a/codex-rs/app-server-protocol/schema/json/v2/ConfigRequirementsReadResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ConfigRequirementsReadResponse.json index 63a209cc779..a6b833712b7 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/ConfigRequirementsReadResponse.json +++ b/codex-rs/app-server-protocol/schema/json/v2/ConfigRequirementsReadResponse.json @@ -94,6 +94,15 @@ "null" ] }, + "allowedApprovalsReviewers": { + "items": { + "$ref": "#/definitions/ApprovalsReviewer" + }, + "type": [ + "array", + "null" + ] + }, "allowedPermissions": { "items": { "type": "string" @@ -149,6 +158,26 @@ "object", "null" ] + }, + "hooks": { + "anyOf": [ + { + "$ref": "#/definitions/ManagedHooksRequirements" + }, + { + "type": "null" + } + ] + }, + "network": { + "anyOf": [ + { + "$ref": "#/definitions/NetworkRequirements" + }, + { + "type": "null" + } + ] } }, "type": "object" diff --git a/codex-rs/app-server-protocol/schema/json/v2/EnvironmentAddParams.json b/codex-rs/app-server-protocol/schema/json/v2/EnvironmentAddParams.json new file mode 100644 index 00000000000..191405d561b --- /dev/null +++ b/codex-rs/app-server-protocol/schema/json/v2/EnvironmentAddParams.json @@ -0,0 +1,17 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "environmentId": { + "type": "string" + }, + "execServerUrl": { + "type": "string" + } + }, + "required": [ + "environmentId", + "execServerUrl" + ], + "title": "EnvironmentAddParams", + "type": "object" +} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/EnvironmentAddResponse.json b/codex-rs/app-server-protocol/schema/json/v2/EnvironmentAddResponse.json new file mode 100644 index 00000000000..492cb0f76d2 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/json/v2/EnvironmentAddResponse.json @@ -0,0 +1,5 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "EnvironmentAddResponse", + "type": "object" +} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/MemoryResetResponse.json b/codex-rs/app-server-protocol/schema/json/v2/MemoryResetResponse.json new file mode 100644 index 00000000000..e445cd867be --- /dev/null +++ b/codex-rs/app-server-protocol/schema/json/v2/MemoryResetResponse.json @@ -0,0 +1,5 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "MemoryResetResponse", + "type": "object" +} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/MockExperimentalMethodParams.json b/codex-rs/app-server-protocol/schema/json/v2/MockExperimentalMethodParams.json new file mode 100644 index 00000000000..99dc3d96af2 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/json/v2/MockExperimentalMethodParams.json @@ -0,0 +1,14 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "value": { + "description": "Test-only payload field.", + "type": [ + "string", + "null" + ] + } + }, + "title": "MockExperimentalMethodParams", + "type": "object" +} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/MockExperimentalMethodResponse.json b/codex-rs/app-server-protocol/schema/json/v2/MockExperimentalMethodResponse.json new file mode 100644 index 00000000000..127ba8126fe --- /dev/null +++ b/codex-rs/app-server-protocol/schema/json/v2/MockExperimentalMethodResponse.json @@ -0,0 +1,14 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "echoed": { + "description": "Echoes the input `value`.", + "type": [ + "string", + "null" + ] + } + }, + "title": "MockExperimentalMethodResponse", + "type": "object" +} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ProcessKillParams.json b/codex-rs/app-server-protocol/schema/json/v2/ProcessKillParams.json new file mode 100644 index 00000000000..c6e996b2c4c --- /dev/null +++ b/codex-rs/app-server-protocol/schema/json/v2/ProcessKillParams.json @@ -0,0 +1,15 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Terminate a running `process/spawn` session.", + "properties": { + "processHandle": { + "description": "Client-supplied, connection-scoped `processHandle` from `process/spawn`.", + "type": "string" + } + }, + "required": [ + "processHandle" + ], + "title": "ProcessKillParams", + "type": "object" +} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ProcessKillResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ProcessKillResponse.json new file mode 100644 index 00000000000..a75998af346 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/json/v2/ProcessKillResponse.json @@ -0,0 +1,6 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Empty success response for `process/kill`.", + "title": "ProcessKillResponse", + "type": "object" +} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ProcessResizePtyParams.json b/codex-rs/app-server-protocol/schema/json/v2/ProcessResizePtyParams.json new file mode 100644 index 00000000000..3d893a8d8a5 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/json/v2/ProcessResizePtyParams.json @@ -0,0 +1,48 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "definitions": { + "ProcessTerminalSize": { + "description": "PTY size in character cells for `process/spawn` PTY sessions.", + "properties": { + "cols": { + "description": "Terminal width in character cells.", + "format": "uint16", + "minimum": 0.0, + "type": "integer" + }, + "rows": { + "description": "Terminal height in character cells.", + "format": "uint16", + "minimum": 0.0, + "type": "integer" + } + }, + "required": [ + "cols", + "rows" + ], + "type": "object" + } + }, + "description": "Resize a running PTY-backed `process/spawn` session.", + "properties": { + "processHandle": { + "description": "Client-supplied, connection-scoped `processHandle` from `process/spawn`.", + "type": "string" + }, + "size": { + "allOf": [ + { + "$ref": "#/definitions/ProcessTerminalSize" + } + ], + "description": "New PTY size in character cells." + } + }, + "required": [ + "processHandle", + "size" + ], + "title": "ProcessResizePtyParams", + "type": "object" +} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ProcessResizePtyResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ProcessResizePtyResponse.json new file mode 100644 index 00000000000..301a9aa8270 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/json/v2/ProcessResizePtyResponse.json @@ -0,0 +1,6 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Empty success response for `process/resizePty`.", + "title": "ProcessResizePtyResponse", + "type": "object" +} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ProcessSpawnParams.json b/codex-rs/app-server-protocol/schema/json/v2/ProcessSpawnParams.json new file mode 100644 index 00000000000..a8fc3ed02fd --- /dev/null +++ b/codex-rs/app-server-protocol/schema/json/v2/ProcessSpawnParams.json @@ -0,0 +1,113 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "definitions": { + "AbsolutePathBuf": { + "description": "A path that is guaranteed to be absolute and normalized (though it is not guaranteed to be canonicalized or exist on the filesystem).\n\nIMPORTANT: When deserializing an `AbsolutePathBuf`, a base path must be set using [AbsolutePathBufGuard::new]. If no base path is set, the deserialization will fail unless the path being deserialized is already absolute.", + "type": "string" + }, + "ProcessTerminalSize": { + "description": "PTY size in character cells for `process/spawn` PTY sessions.", + "properties": { + "cols": { + "description": "Terminal width in character cells.", + "format": "uint16", + "minimum": 0.0, + "type": "integer" + }, + "rows": { + "description": "Terminal height in character cells.", + "format": "uint16", + "minimum": 0.0, + "type": "integer" + } + }, + "required": [ + "cols", + "rows" + ], + "type": "object" + } + }, + "description": "Spawn a standalone process (argv vector) without a Codex sandbox on the host where the app server is running.\n\n`process/spawn` returns after the process has started and the connection-scoped `processHandle` has been registered. Process output and exit are reported via `process/outputDelta` and `process/exited` notifications.", + "properties": { + "command": { + "description": "Command argv vector. Empty arrays are rejected.", + "items": { + "type": "string" + }, + "type": "array" + }, + "cwd": { + "allOf": [ + { + "$ref": "#/definitions/AbsolutePathBuf" + } + ], + "description": "Absolute working directory for the process." + }, + "env": { + "additionalProperties": { + "type": [ + "string", + "null" + ] + }, + "description": "Optional environment overrides merged into the app-server process environment.\n\nMatching names override inherited values. Set a key to `null` to unset an inherited variable.", + "type": [ + "object", + "null" + ] + }, + "outputBytesCap": { + "description": "Optional per-stream stdout/stderr capture cap in bytes.\n\nWhen omitted, the server default applies. Set to `null` to disable the cap.", + "format": "uint", + "minimum": 0.0, + "type": [ + "integer", + "null" + ] + }, + "processHandle": { + "description": "Client-supplied, connection-scoped process handle.\n\nDuplicate active handles are rejected on the same connection. The same handle can be reused after the prior process exits.", + "type": "string" + }, + "size": { + "anyOf": [ + { + "$ref": "#/definitions/ProcessTerminalSize" + }, + { + "type": "null" + } + ], + "description": "Optional initial PTY size in character cells. Only valid when `tty` is true." + }, + "streamStdin": { + "description": "Allow follow-up `process/writeStdin` requests to write stdin bytes.", + "type": "boolean" + }, + "streamStdoutStderr": { + "description": "Stream stdout/stderr via `process/outputDelta` notifications.\n\nStreamed bytes are not duplicated into the `process/exited` notification.", + "type": "boolean" + }, + "timeoutMs": { + "description": "Optional timeout in milliseconds.\n\nWhen omitted, the server default applies. Set to `null` to disable the timeout.", + "format": "int64", + "type": [ + "integer", + "null" + ] + }, + "tty": { + "description": "Enable PTY mode.\n\nThis implies `streamStdin` and `streamStdoutStderr`.", + "type": "boolean" + } + }, + "required": [ + "command", + "cwd", + "processHandle" + ], + "title": "ProcessSpawnParams", + "type": "object" +} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ProcessSpawnResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ProcessSpawnResponse.json new file mode 100644 index 00000000000..f636247906c --- /dev/null +++ b/codex-rs/app-server-protocol/schema/json/v2/ProcessSpawnResponse.json @@ -0,0 +1,6 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Successful response for `process/spawn`.", + "title": "ProcessSpawnResponse", + "type": "object" +} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ProcessWriteStdinParams.json b/codex-rs/app-server-protocol/schema/json/v2/ProcessWriteStdinParams.json new file mode 100644 index 00000000000..5930943dc9c --- /dev/null +++ b/codex-rs/app-server-protocol/schema/json/v2/ProcessWriteStdinParams.json @@ -0,0 +1,26 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Write stdin bytes to a running `process/spawn` session, close stdin, or both.", + "properties": { + "closeStdin": { + "description": "Close stdin after writing `deltaBase64`, if present.", + "type": "boolean" + }, + "deltaBase64": { + "description": "Optional base64-encoded stdin bytes to write.", + "type": [ + "string", + "null" + ] + }, + "processHandle": { + "description": "Client-supplied, connection-scoped `processHandle` from `process/spawn`.", + "type": "string" + } + }, + "required": [ + "processHandle" + ], + "title": "ProcessWriteStdinParams", + "type": "object" +} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ProcessWriteStdinResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ProcessWriteStdinResponse.json new file mode 100644 index 00000000000..a5050e9bb95 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/json/v2/ProcessWriteStdinResponse.json @@ -0,0 +1,6 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Empty success response for `process/writeStdin`.", + "title": "ProcessWriteStdinResponse", + "type": "object" +} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/RemoteControlDisableResponse.json b/codex-rs/app-server-protocol/schema/json/v2/RemoteControlDisableResponse.json new file mode 100644 index 00000000000..59f55ce6330 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/json/v2/RemoteControlDisableResponse.json @@ -0,0 +1,38 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "definitions": { + "RemoteControlConnectionStatus": { + "enum": [ + "disabled", + "connecting", + "connected", + "errored" + ], + "type": "string" + } + }, + "properties": { + "environmentId": { + "type": [ + "string", + "null" + ] + }, + "installationId": { + "type": "string" + }, + "serverName": { + "type": "string" + }, + "status": { + "$ref": "#/definitions/RemoteControlConnectionStatus" + } + }, + "required": [ + "installationId", + "serverName", + "status" + ], + "title": "RemoteControlDisableResponse", + "type": "object" +} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/RemoteControlEnableResponse.json b/codex-rs/app-server-protocol/schema/json/v2/RemoteControlEnableResponse.json new file mode 100644 index 00000000000..9210d32d9a2 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/json/v2/RemoteControlEnableResponse.json @@ -0,0 +1,38 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "definitions": { + "RemoteControlConnectionStatus": { + "enum": [ + "disabled", + "connecting", + "connected", + "errored" + ], + "type": "string" + } + }, + "properties": { + "environmentId": { + "type": [ + "string", + "null" + ] + }, + "installationId": { + "type": "string" + }, + "serverName": { + "type": "string" + }, + "status": { + "$ref": "#/definitions/RemoteControlConnectionStatus" + } + }, + "required": [ + "installationId", + "serverName", + "status" + ], + "title": "RemoteControlEnableResponse", + "type": "object" +} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/RemoteControlStatusReadResponse.json b/codex-rs/app-server-protocol/schema/json/v2/RemoteControlStatusReadResponse.json new file mode 100644 index 00000000000..641cbee05e8 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/json/v2/RemoteControlStatusReadResponse.json @@ -0,0 +1,38 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "definitions": { + "RemoteControlConnectionStatus": { + "enum": [ + "disabled", + "connecting", + "connected", + "errored" + ], + "type": "string" + } + }, + "properties": { + "environmentId": { + "type": [ + "string", + "null" + ] + }, + "installationId": { + "type": "string" + }, + "serverName": { + "type": "string" + }, + "status": { + "$ref": "#/definitions/RemoteControlConnectionStatus" + } + }, + "required": [ + "installationId", + "serverName", + "status" + ], + "title": "RemoteControlStatusReadResponse", + "type": "object" +} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadBackgroundTerminalsCleanParams.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadBackgroundTerminalsCleanParams.json new file mode 100644 index 00000000000..b0c3b06bd9e --- /dev/null +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadBackgroundTerminalsCleanParams.json @@ -0,0 +1,13 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "threadId": { + "type": "string" + } + }, + "required": [ + "threadId" + ], + "title": "ThreadBackgroundTerminalsCleanParams", + "type": "object" +} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadBackgroundTerminalsCleanResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadBackgroundTerminalsCleanResponse.json new file mode 100644 index 00000000000..700d59ec938 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadBackgroundTerminalsCleanResponse.json @@ -0,0 +1,5 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "ThreadBackgroundTerminalsCleanResponse", + "type": "object" +} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadDecrementElicitationParams.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadDecrementElicitationParams.json new file mode 100644 index 00000000000..d9e07f83e32 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadDecrementElicitationParams.json @@ -0,0 +1,15 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Parameters for `thread/decrement_elicitation`.", + "properties": { + "threadId": { + "description": "Thread whose out-of-band elicitation counter should be decremented.", + "type": "string" + } + }, + "required": [ + "threadId" + ], + "title": "ThreadDecrementElicitationParams", + "type": "object" +} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadDecrementElicitationResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadDecrementElicitationResponse.json new file mode 100644 index 00000000000..729d04d83dc --- /dev/null +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadDecrementElicitationResponse.json @@ -0,0 +1,22 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Response for `thread/decrement_elicitation`.", + "properties": { + "count": { + "description": "Current out-of-band elicitation count after the decrement.", + "format": "uint64", + "minimum": 0.0, + "type": "integer" + }, + "paused": { + "description": "Whether timeout accounting remains paused after applying the decrement.", + "type": "boolean" + } + }, + "required": [ + "count", + "paused" + ], + "title": "ThreadDecrementElicitationResponse", + "type": "object" +} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadForkParams.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadForkParams.json index 9d2f834dd8c..403963381ab 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadForkParams.json +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadForkParams.json @@ -128,6 +128,10 @@ "ephemeral": { "type": "boolean" }, + "excludeTurns": { + "description": "When true, return only thread metadata and live fork state without populating `thread.turns`. This is useful when the client plans to call `thread/turns/list` immediately after forking.", + "type": "boolean" + }, "model": { "description": "Configuration overrides for the forked thread, if any.", "type": [ @@ -141,6 +145,35 @@ "null" ] }, + "path": { + "default": null, + "description": "[UNSTABLE] Specify the rollout path to fork from. If specified, the thread_id param will be ignored.", + "type": [ + "string", + "null" + ] + }, + "permissions": { + "description": "Named profile id for the forked thread. Cannot be combined with `sandbox`.", + "type": [ + "string", + "null" + ] + }, + "persistExtendedHistory": { + "description": "Deprecated and ignored by app-server. Kept only so older clients can continue sending the field while rollout persistence always uses the limited history policy.", + "type": "boolean" + }, + "runtimeWorkspaceRoots": { + "description": "Replace the thread's runtime workspace roots. Relative paths are resolved against the effective cwd for the thread.", + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, "sandbox": { "anyOf": [ { diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadForkResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadForkResponse.json index 8c45f57d385..c3828a7de65 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadForkResponse.json +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadForkResponse.json @@ -2238,6 +2238,18 @@ } }, "properties": { + "activePermissionProfile": { + "anyOf": [ + { + "$ref": "#/definitions/ActivePermissionProfile" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Named or implicit built-in profile that produced the active permissions, when known." + }, "approvalPolicy": { "$ref": "#/definitions/AskForApproval" }, @@ -2276,6 +2288,14 @@ } ] }, + "runtimeWorkspaceRoots": { + "default": [], + "description": "Thread-scoped runtime workspace roots used to materialize `:workspace_roots`.", + "items": { + "$ref": "#/definitions/AbsolutePathBuf" + }, + "type": "array" + }, "sandbox": { "allOf": [ { diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadIncrementElicitationParams.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadIncrementElicitationParams.json new file mode 100644 index 00000000000..b07ee195b76 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadIncrementElicitationParams.json @@ -0,0 +1,15 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Parameters for `thread/increment_elicitation`.", + "properties": { + "threadId": { + "description": "Thread whose out-of-band elicitation counter should be incremented.", + "type": "string" + } + }, + "required": [ + "threadId" + ], + "title": "ThreadIncrementElicitationParams", + "type": "object" +} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadIncrementElicitationResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadIncrementElicitationResponse.json new file mode 100644 index 00000000000..8dbb4302146 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadIncrementElicitationResponse.json @@ -0,0 +1,22 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Response for `thread/increment_elicitation`.", + "properties": { + "count": { + "description": "Current out-of-band elicitation count after the increment.", + "format": "uint64", + "minimum": 0.0, + "type": "integer" + }, + "paused": { + "description": "Whether timeout accounting is paused after applying the increment.", + "type": "boolean" + } + }, + "required": [ + "count", + "paused" + ], + "title": "ThreadIncrementElicitationResponse", + "type": "object" +} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadMemoryModeSetParams.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadMemoryModeSetParams.json new file mode 100644 index 00000000000..495585eedc4 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadMemoryModeSetParams.json @@ -0,0 +1,26 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "definitions": { + "ThreadMemoryMode": { + "enum": [ + "enabled", + "disabled" + ], + "type": "string" + } + }, + "properties": { + "mode": { + "$ref": "#/definitions/ThreadMemoryMode" + }, + "threadId": { + "type": "string" + } + }, + "required": [ + "mode", + "threadId" + ], + "title": "ThreadMemoryModeSetParams", + "type": "object" +} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadMemoryModeSetResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadMemoryModeSetResponse.json new file mode 100644 index 00000000000..72b346ea56a --- /dev/null +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadMemoryModeSetResponse.json @@ -0,0 +1,5 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "ThreadMemoryModeSetResponse", + "type": "object" +} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeAppendAudioParams.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeAppendAudioParams.json new file mode 100644 index 00000000000..29b9299af7b --- /dev/null +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeAppendAudioParams.json @@ -0,0 +1,58 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "definitions": { + "ThreadRealtimeAudioChunk": { + "description": "EXPERIMENTAL - thread realtime audio chunk.", + "properties": { + "data": { + "type": "string" + }, + "itemId": { + "type": [ + "string", + "null" + ] + }, + "numChannels": { + "format": "uint16", + "minimum": 0.0, + "type": "integer" + }, + "sampleRate": { + "format": "uint32", + "minimum": 0.0, + "type": "integer" + }, + "samplesPerChannel": { + "format": "uint32", + "minimum": 0.0, + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "data", + "numChannels", + "sampleRate" + ], + "type": "object" + } + }, + "description": "EXPERIMENTAL - append audio input to thread realtime.", + "properties": { + "audio": { + "$ref": "#/definitions/ThreadRealtimeAudioChunk" + }, + "threadId": { + "type": "string" + } + }, + "required": [ + "audio", + "threadId" + ], + "title": "ThreadRealtimeAppendAudioParams", + "type": "object" +} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeAppendAudioResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeAppendAudioResponse.json new file mode 100644 index 00000000000..a0f2546f41d --- /dev/null +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeAppendAudioResponse.json @@ -0,0 +1,6 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "EXPERIMENTAL - response for appending realtime audio input.", + "title": "ThreadRealtimeAppendAudioResponse", + "type": "object" +} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeAppendTextParams.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeAppendTextParams.json new file mode 100644 index 00000000000..e95503c5ea9 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeAppendTextParams.json @@ -0,0 +1,18 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "EXPERIMENTAL - append text input to thread realtime.", + "properties": { + "text": { + "type": "string" + }, + "threadId": { + "type": "string" + } + }, + "required": [ + "text", + "threadId" + ], + "title": "ThreadRealtimeAppendTextParams", + "type": "object" +} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeAppendTextResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeAppendTextResponse.json new file mode 100644 index 00000000000..eb83f18e2e5 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeAppendTextResponse.json @@ -0,0 +1,6 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "EXPERIMENTAL - response for appending realtime text input.", + "title": "ThreadRealtimeAppendTextResponse", + "type": "object" +} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeListVoicesParams.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeListVoicesParams.json new file mode 100644 index 00000000000..ca6d70292b9 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeListVoicesParams.json @@ -0,0 +1,6 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "EXPERIMENTAL - list voices supported by thread realtime.", + "title": "ThreadRealtimeListVoicesParams", + "type": "object" +} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeListVoicesResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeListVoicesResponse.json new file mode 100644 index 00000000000..196401c7526 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeListVoicesResponse.json @@ -0,0 +1,69 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "definitions": { + "RealtimeVoice": { + "enum": [ + "alloy", + "arbor", + "ash", + "ballad", + "breeze", + "cedar", + "coral", + "cove", + "echo", + "ember", + "juniper", + "maple", + "marin", + "sage", + "shimmer", + "sol", + "spruce", + "vale", + "verse" + ], + "type": "string" + }, + "RealtimeVoicesList": { + "properties": { + "defaultV1": { + "$ref": "#/definitions/RealtimeVoice" + }, + "defaultV2": { + "$ref": "#/definitions/RealtimeVoice" + }, + "v1": { + "items": { + "$ref": "#/definitions/RealtimeVoice" + }, + "type": "array" + }, + "v2": { + "items": { + "$ref": "#/definitions/RealtimeVoice" + }, + "type": "array" + } + }, + "required": [ + "defaultV1", + "defaultV2", + "v1", + "v2" + ], + "type": "object" + } + }, + "description": "EXPERIMENTAL - response for listing supported realtime voices.", + "properties": { + "voices": { + "$ref": "#/definitions/RealtimeVoicesList" + } + }, + "required": [ + "voices" + ], + "title": "ThreadRealtimeListVoicesResponse", + "type": "object" +} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeStartParams.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeStartParams.json new file mode 100644 index 00000000000..69420969681 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeStartParams.json @@ -0,0 +1,130 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "definitions": { + "RealtimeOutputModality": { + "enum": [ + "text", + "audio" + ], + "type": "string" + }, + "RealtimeVoice": { + "enum": [ + "alloy", + "arbor", + "ash", + "ballad", + "breeze", + "cedar", + "coral", + "cove", + "echo", + "ember", + "juniper", + "maple", + "marin", + "sage", + "shimmer", + "sol", + "spruce", + "vale", + "verse" + ], + "type": "string" + }, + "ThreadRealtimeStartTransport": { + "description": "EXPERIMENTAL - transport used by thread realtime.", + "oneOf": [ + { + "properties": { + "type": { + "enum": [ + "websocket" + ], + "title": "WebsocketThreadRealtimeStartTransportType", + "type": "string" + } + }, + "required": [ + "type" + ], + "title": "WebsocketThreadRealtimeStartTransport", + "type": "object" + }, + { + "properties": { + "sdp": { + "description": "SDP offer generated by a WebRTC RTCPeerConnection after configuring audio and the realtime events data channel.", + "type": "string" + }, + "type": { + "enum": [ + "webrtc" + ], + "title": "WebrtcThreadRealtimeStartTransportType", + "type": "string" + } + }, + "required": [ + "sdp", + "type" + ], + "title": "WebrtcThreadRealtimeStartTransport", + "type": "object" + } + ] + } + }, + "description": "EXPERIMENTAL - start a thread-scoped realtime session.", + "properties": { + "outputModality": { + "allOf": [ + { + "$ref": "#/definitions/RealtimeOutputModality" + } + ], + "description": "Selects text or audio output for the realtime session. Transport and voice stay independent so clients can choose how they connect separately from what the model emits." + }, + "prompt": { + "type": [ + "string", + "null" + ] + }, + "realtimeSessionId": { + "type": [ + "string", + "null" + ] + }, + "threadId": { + "type": "string" + }, + "transport": { + "anyOf": [ + { + "$ref": "#/definitions/ThreadRealtimeStartTransport" + }, + { + "type": "null" + } + ] + }, + "voice": { + "anyOf": [ + { + "$ref": "#/definitions/RealtimeVoice" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "outputModality", + "threadId" + ], + "title": "ThreadRealtimeStartParams", + "type": "object" +} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeStartResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeStartResponse.json new file mode 100644 index 00000000000..68a82fd4a40 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeStartResponse.json @@ -0,0 +1,6 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "EXPERIMENTAL - response for starting thread realtime.", + "title": "ThreadRealtimeStartResponse", + "type": "object" +} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeStopParams.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeStopParams.json new file mode 100644 index 00000000000..db2a9c3bb08 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeStopParams.json @@ -0,0 +1,14 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "EXPERIMENTAL - stop thread realtime.", + "properties": { + "threadId": { + "type": "string" + } + }, + "required": [ + "threadId" + ], + "title": "ThreadRealtimeStopParams", + "type": "object" +} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeStopResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeStopResponse.json new file mode 100644 index 00000000000..8af68d950de --- /dev/null +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeStopResponse.json @@ -0,0 +1,6 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "EXPERIMENTAL - response for stopping thread realtime.", + "title": "ThreadRealtimeStopResponse", + "type": "object" +} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadResumeParams.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadResumeParams.json index d4bdeda0ed3..b487eba977c 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadResumeParams.json +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadResumeParams.json @@ -1031,6 +1031,20 @@ "null" ] }, + "excludeTurns": { + "description": "When true, return only thread metadata and live-resume state without populating `thread.turns`. This is useful when the client plans to call `thread/turns/list` immediately after resuming.", + "type": "boolean" + }, + "history": { + "description": "[UNSTABLE] FOR CODEX CLOUD - DO NOT USE. If specified, the thread will be resumed with the provided history instead of loaded from disk.", + "items": { + "$ref": "#/definitions/ResponseItem" + }, + "type": [ + "array", + "null" + ] + }, "model": { "description": "Configuration overrides for the resumed thread, if any.", "type": [ @@ -1044,6 +1058,25 @@ "null" ] }, + "path": { + "default": null, + "description": "[UNSTABLE] Specify the rollout path to resume from. If specified for a non-running thread, the thread_id param will be ignored. If thread_id identifies a running thread, the path must match the active rollout path.", + "type": [ + "string", + "null" + ] + }, + "permissions": { + "description": "Named profile id for the resumed thread. Cannot be combined with `sandbox`.", + "type": [ + "string", + "null" + ] + }, + "persistExtendedHistory": { + "description": "Deprecated and ignored by app-server. Kept only so older clients can continue sending the field while rollout persistence always uses the limited history policy.", + "type": "boolean" + }, "personality": { "anyOf": [ { @@ -1054,6 +1087,16 @@ } ] }, + "runtimeWorkspaceRoots": { + "description": "Replace the thread's runtime workspace roots. Relative paths are resolved against the effective cwd for the thread.", + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, "sandbox": { "anyOf": [ { diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadResumeResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadResumeResponse.json index 8055ff58fc3..baf97f05bb6 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadResumeResponse.json +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadResumeResponse.json @@ -2238,6 +2238,18 @@ } }, "properties": { + "activePermissionProfile": { + "anyOf": [ + { + "$ref": "#/definitions/ActivePermissionProfile" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Named or implicit built-in profile that produced the active permissions, when known." + }, "approvalPolicy": { "$ref": "#/definitions/AskForApproval" }, @@ -2276,6 +2288,14 @@ } ] }, + "runtimeWorkspaceRoots": { + "default": [], + "description": "Thread-scoped runtime workspace roots used to materialize `:workspace_roots`.", + "items": { + "$ref": "#/definitions/AbsolutePathBuf" + }, + "type": "array" + }, "sandbox": { "allOf": [ { diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadSearchParams.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadSearchParams.json new file mode 100644 index 00000000000..ac6d99577ad --- /dev/null +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadSearchParams.json @@ -0,0 +1,100 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "definitions": { + "SortDirection": { + "enum": [ + "asc", + "desc" + ], + "type": "string" + }, + "ThreadSortKey": { + "enum": [ + "created_at", + "updated_at" + ], + "type": "string" + }, + "ThreadSourceKind": { + "enum": [ + "cli", + "vscode", + "exec", + "appServer", + "subAgent", + "subAgentReview", + "subAgentCompact", + "subAgentThreadSpawn", + "subAgentOther", + "unknown" + ], + "type": "string" + } + }, + "properties": { + "archived": { + "description": "Optional archived filter; when set to true, only archived threads are returned. If false or null, only non-archived threads are returned.", + "type": [ + "boolean", + "null" + ] + }, + "cursor": { + "description": "Opaque pagination cursor returned by a previous call.", + "type": [ + "string", + "null" + ] + }, + "limit": { + "description": "Optional page size; defaults to a reasonable server-side value.", + "format": "uint32", + "minimum": 0.0, + "type": [ + "integer", + "null" + ] + }, + "searchTerm": { + "description": "Required substring/full-text query for thread search.", + "type": "string" + }, + "sortDirection": { + "anyOf": [ + { + "$ref": "#/definitions/SortDirection" + }, + { + "type": "null" + } + ], + "description": "Optional sort direction; defaults to descending (newest first)." + }, + "sortKey": { + "anyOf": [ + { + "$ref": "#/definitions/ThreadSortKey" + }, + { + "type": "null" + } + ], + "description": "Optional sort key; defaults to created_at." + }, + "sourceKinds": { + "description": "Optional source filter; when set, only sessions from these source kinds are returned. When omitted or empty, defaults to interactive sources.", + "items": { + "$ref": "#/definitions/ThreadSourceKind" + }, + "type": [ + "array", + "null" + ] + } + }, + "required": [ + "searchTerm" + ], + "title": "ThreadSearchParams", + "type": "object" +} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadSearchResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadSearchResponse.json new file mode 100644 index 00000000000..44c9a3da232 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadSearchResponse.json @@ -0,0 +1,2097 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "definitions": { + "AbsolutePathBuf": { + "description": "A path that is guaranteed to be absolute and normalized (though it is not guaranteed to be canonicalized or exist on the filesystem).\n\nIMPORTANT: When deserializing an `AbsolutePathBuf`, a base path must be set using [AbsolutePathBufGuard::new]. If no base path is set, the deserialization will fail unless the path being deserialized is already absolute.", + "type": "string" + }, + "AgentPath": { + "type": "string" + }, + "ByteRange": { + "properties": { + "end": { + "format": "uint", + "minimum": 0.0, + "type": "integer" + }, + "start": { + "format": "uint", + "minimum": 0.0, + "type": "integer" + } + }, + "required": [ + "end", + "start" + ], + "type": "object" + }, + "CodexErrorInfo": { + "description": "This translation layer make sure that we expose codex error code in camel case.\n\nWhen an upstream HTTP status is available (for example, from the Responses API or a provider), it is forwarded in `httpStatusCode` on the relevant `codexErrorInfo` variant.", + "oneOf": [ + { + "enum": [ + "contextWindowExceeded", + "usageLimitExceeded", + "serverOverloaded", + "cyberPolicy", + "internalServerError", + "unauthorized", + "badRequest", + "threadRollbackFailed", + "sandboxError", + "other" + ], + "type": "string" + }, + { + "additionalProperties": false, + "properties": { + "httpConnectionFailed": { + "properties": { + "httpStatusCode": { + "format": "uint16", + "minimum": 0.0, + "type": [ + "integer", + "null" + ] + } + }, + "type": "object" + } + }, + "required": [ + "httpConnectionFailed" + ], + "title": "HttpConnectionFailedCodexErrorInfo", + "type": "object" + }, + { + "additionalProperties": false, + "description": "Failed to connect to the response SSE stream.", + "properties": { + "responseStreamConnectionFailed": { + "properties": { + "httpStatusCode": { + "format": "uint16", + "minimum": 0.0, + "type": [ + "integer", + "null" + ] + } + }, + "type": "object" + } + }, + "required": [ + "responseStreamConnectionFailed" + ], + "title": "ResponseStreamConnectionFailedCodexErrorInfo", + "type": "object" + }, + { + "additionalProperties": false, + "description": "The response SSE stream disconnected in the middle of a turn before completion.", + "properties": { + "responseStreamDisconnected": { + "properties": { + "httpStatusCode": { + "format": "uint16", + "minimum": 0.0, + "type": [ + "integer", + "null" + ] + } + }, + "type": "object" + } + }, + "required": [ + "responseStreamDisconnected" + ], + "title": "ResponseStreamDisconnectedCodexErrorInfo", + "type": "object" + }, + { + "additionalProperties": false, + "description": "Reached the retry limit for responses.", + "properties": { + "responseTooManyFailedAttempts": { + "properties": { + "httpStatusCode": { + "format": "uint16", + "minimum": 0.0, + "type": [ + "integer", + "null" + ] + } + }, + "type": "object" + } + }, + "required": [ + "responseTooManyFailedAttempts" + ], + "title": "ResponseTooManyFailedAttemptsCodexErrorInfo", + "type": "object" + }, + { + "additionalProperties": false, + "description": "Returned when `turn/start` or `turn/steer` is submitted while the current active turn cannot accept same-turn steering, for example `/review` or manual `/compact`.", + "properties": { + "activeTurnNotSteerable": { + "properties": { + "turnKind": { + "$ref": "#/definitions/NonSteerableTurnKind" + } + }, + "required": [ + "turnKind" + ], + "type": "object" + } + }, + "required": [ + "activeTurnNotSteerable" + ], + "title": "ActiveTurnNotSteerableCodexErrorInfo", + "type": "object" + } + ] + }, + "CollabAgentState": { + "properties": { + "message": { + "type": [ + "string", + "null" + ] + }, + "status": { + "$ref": "#/definitions/CollabAgentStatus" + } + }, + "required": [ + "status" + ], + "type": "object" + }, + "CollabAgentStatus": { + "enum": [ + "pendingInit", + "running", + "interrupted", + "completed", + "errored", + "shutdown", + "notFound" + ], + "type": "string" + }, + "CollabAgentTool": { + "enum": [ + "spawnAgent", + "sendInput", + "resumeAgent", + "wait", + "closeAgent" + ], + "type": "string" + }, + "CollabAgentToolCallStatus": { + "enum": [ + "inProgress", + "completed", + "failed" + ], + "type": "string" + }, + "CommandAction": { + "oneOf": [ + { + "properties": { + "command": { + "type": "string" + }, + "name": { + "type": "string" + }, + "path": { + "$ref": "#/definitions/AbsolutePathBuf" + }, + "type": { + "enum": [ + "read" + ], + "title": "ReadCommandActionType", + "type": "string" + } + }, + "required": [ + "command", + "name", + "path", + "type" + ], + "title": "ReadCommandAction", + "type": "object" + }, + { + "properties": { + "command": { + "type": "string" + }, + "path": { + "type": [ + "string", + "null" + ] + }, + "type": { + "enum": [ + "listFiles" + ], + "title": "ListFilesCommandActionType", + "type": "string" + } + }, + "required": [ + "command", + "type" + ], + "title": "ListFilesCommandAction", + "type": "object" + }, + { + "properties": { + "command": { + "type": "string" + }, + "path": { + "type": [ + "string", + "null" + ] + }, + "query": { + "type": [ + "string", + "null" + ] + }, + "type": { + "enum": [ + "search" + ], + "title": "SearchCommandActionType", + "type": "string" + } + }, + "required": [ + "command", + "type" + ], + "title": "SearchCommandAction", + "type": "object" + }, + { + "properties": { + "command": { + "type": "string" + }, + "type": { + "enum": [ + "unknown" + ], + "title": "UnknownCommandActionType", + "type": "string" + } + }, + "required": [ + "command", + "type" + ], + "title": "UnknownCommandAction", + "type": "object" + } + ] + }, + "CommandExecutionSource": { + "enum": [ + "agent", + "userShell", + "unifiedExecStartup", + "unifiedExecInteraction" + ], + "type": "string" + }, + "CommandExecutionStatus": { + "enum": [ + "inProgress", + "completed", + "failed", + "declined" + ], + "type": "string" + }, + "DynamicToolCallOutputContentItem": { + "oneOf": [ + { + "properties": { + "text": { + "type": "string" + }, + "type": { + "enum": [ + "inputText" + ], + "title": "InputTextDynamicToolCallOutputContentItemType", + "type": "string" + } + }, + "required": [ + "text", + "type" + ], + "title": "InputTextDynamicToolCallOutputContentItem", + "type": "object" + }, + { + "properties": { + "imageUrl": { + "type": "string" + }, + "type": { + "enum": [ + "inputImage" + ], + "title": "InputImageDynamicToolCallOutputContentItemType", + "type": "string" + } + }, + "required": [ + "imageUrl", + "type" + ], + "title": "InputImageDynamicToolCallOutputContentItem", + "type": "object" + } + ] + }, + "DynamicToolCallStatus": { + "enum": [ + "inProgress", + "completed", + "failed" + ], + "type": "string" + }, + "FileUpdateChange": { + "properties": { + "diff": { + "type": "string" + }, + "kind": { + "$ref": "#/definitions/PatchChangeKind" + }, + "path": { + "type": "string" + } + }, + "required": [ + "diff", + "kind", + "path" + ], + "type": "object" + }, + "GitInfo": { + "properties": { + "branch": { + "type": [ + "string", + "null" + ] + }, + "originUrl": { + "type": [ + "string", + "null" + ] + }, + "sha": { + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "HookPromptFragment": { + "properties": { + "hookRunId": { + "type": "string" + }, + "text": { + "type": "string" + } + }, + "required": [ + "hookRunId", + "text" + ], + "type": "object" + }, + "ImageDetail": { + "enum": [ + "high", + "original" + ], + "type": "string" + }, + "McpToolCallError": { + "properties": { + "message": { + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + }, + "McpToolCallResult": { + "properties": { + "_meta": true, + "content": { + "items": true, + "type": "array" + }, + "structuredContent": true + }, + "required": [ + "content" + ], + "type": "object" + }, + "McpToolCallStatus": { + "enum": [ + "inProgress", + "completed", + "failed" + ], + "type": "string" + }, + "MemoryCitation": { + "properties": { + "entries": { + "items": { + "$ref": "#/definitions/MemoryCitationEntry" + }, + "type": "array" + }, + "threadIds": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "entries", + "threadIds" + ], + "type": "object" + }, + "MemoryCitationEntry": { + "properties": { + "lineEnd": { + "format": "uint32", + "minimum": 0.0, + "type": "integer" + }, + "lineStart": { + "format": "uint32", + "minimum": 0.0, + "type": "integer" + }, + "note": { + "type": "string" + }, + "path": { + "type": "string" + } + }, + "required": [ + "lineEnd", + "lineStart", + "note", + "path" + ], + "type": "object" + }, + "MessagePhase": { + "description": "Classifies an assistant message as interim commentary or final answer text.\n\nProviders do not emit this consistently, so callers must treat `None` as \"phase unknown\" and keep compatibility behavior for legacy models.", + "oneOf": [ + { + "description": "Mid-turn assistant text (for example preamble/progress narration).\n\nAdditional tool calls or assistant output may follow before turn completion.", + "enum": [ + "commentary" + ], + "type": "string" + }, + { + "description": "The assistant's terminal answer text for the current turn.", + "enum": [ + "final_answer" + ], + "type": "string" + } + ] + }, + "NonSteerableTurnKind": { + "enum": [ + "review", + "compact" + ], + "type": "string" + }, + "PatchApplyStatus": { + "enum": [ + "inProgress", + "completed", + "failed", + "declined" + ], + "type": "string" + }, + "PatchChangeKind": { + "oneOf": [ + { + "properties": { + "type": { + "enum": [ + "add" + ], + "title": "AddPatchChangeKindType", + "type": "string" + } + }, + "required": [ + "type" + ], + "title": "AddPatchChangeKind", + "type": "object" + }, + { + "properties": { + "type": { + "enum": [ + "delete" + ], + "title": "DeletePatchChangeKindType", + "type": "string" + } + }, + "required": [ + "type" + ], + "title": "DeletePatchChangeKind", + "type": "object" + }, + { + "properties": { + "move_path": { + "type": [ + "string", + "null" + ] + }, + "type": { + "enum": [ + "update" + ], + "title": "UpdatePatchChangeKindType", + "type": "string" + } + }, + "required": [ + "type" + ], + "title": "UpdatePatchChangeKind", + "type": "object" + } + ] + }, + "ReasoningEffort": { + "description": "See https://platform.openai.com/docs/guides/reasoning?api-mode=responses#get-started-with-reasoning", + "enum": [ + "none", + "minimal", + "low", + "medium", + "high", + "xhigh" + ], + "type": "string" + }, + "SessionSource": { + "oneOf": [ + { + "enum": [ + "cli", + "vscode", + "exec", + "appServer", + "unknown" + ], + "type": "string" + }, + { + "additionalProperties": false, + "properties": { + "custom": { + "type": "string" + } + }, + "required": [ + "custom" + ], + "title": "CustomSessionSource", + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "subAgent": { + "$ref": "#/definitions/SubAgentSource" + } + }, + "required": [ + "subAgent" + ], + "title": "SubAgentSessionSource", + "type": "object" + } + ] + }, + "SubAgentSource": { + "oneOf": [ + { + "enum": [ + "review", + "compact", + "memory_consolidation" + ], + "type": "string" + }, + { + "additionalProperties": false, + "properties": { + "thread_spawn": { + "properties": { + "agent_nickname": { + "default": null, + "type": [ + "string", + "null" + ] + }, + "agent_path": { + "anyOf": [ + { + "$ref": "#/definitions/AgentPath" + }, + { + "type": "null" + } + ], + "default": null + }, + "agent_role": { + "default": null, + "type": [ + "string", + "null" + ] + }, + "depth": { + "format": "int32", + "type": "integer" + }, + "parent_thread_id": { + "$ref": "#/definitions/ThreadId" + } + }, + "required": [ + "depth", + "parent_thread_id" + ], + "type": "object" + } + }, + "required": [ + "thread_spawn" + ], + "title": "ThreadSpawnSubAgentSource", + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "other": { + "type": "string" + } + }, + "required": [ + "other" + ], + "title": "OtherSubAgentSource", + "type": "object" + } + ] + }, + "TextElement": { + "properties": { + "byteRange": { + "allOf": [ + { + "$ref": "#/definitions/ByteRange" + } + ], + "description": "Byte range in the parent `text` buffer that this element occupies." + }, + "placeholder": { + "description": "Optional human-readable placeholder for the element, displayed in the UI.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "byteRange" + ], + "type": "object" + }, + "Thread": { + "properties": { + "agentNickname": { + "description": "Optional random unique nickname assigned to an AgentControl-spawned sub-agent.", + "type": [ + "string", + "null" + ] + }, + "agentRole": { + "description": "Optional role (agent_role) assigned to an AgentControl-spawned sub-agent.", + "type": [ + "string", + "null" + ] + }, + "cliVersion": { + "description": "Version of the CLI that created the thread.", + "type": "string" + }, + "createdAt": { + "description": "Unix timestamp (in seconds) when the thread was created.", + "format": "int64", + "type": "integer" + }, + "cwd": { + "allOf": [ + { + "$ref": "#/definitions/AbsolutePathBuf" + } + ], + "description": "Working directory captured for the thread." + }, + "ephemeral": { + "description": "Whether the thread is ephemeral and should not be materialized on disk.", + "type": "boolean" + }, + "forkedFromId": { + "description": "Source thread id when this thread was created by forking another thread.", + "type": [ + "string", + "null" + ] + }, + "gitInfo": { + "anyOf": [ + { + "$ref": "#/definitions/GitInfo" + }, + { + "type": "null" + } + ], + "description": "Optional Git metadata captured when the thread was created." + }, + "id": { + "type": "string" + }, + "modelProvider": { + "description": "Model provider used for this thread (for example, 'openai').", + "type": "string" + }, + "name": { + "description": "Optional user-facing thread title.", + "type": [ + "string", + "null" + ] + }, + "path": { + "description": "[UNSTABLE] Path to the thread on disk.", + "type": [ + "string", + "null" + ] + }, + "preview": { + "description": "Usually the first user message in the thread, if available.", + "type": "string" + }, + "sessionId": { + "description": "Session id shared by threads that belong to the same session tree.", + "type": "string" + }, + "source": { + "allOf": [ + { + "$ref": "#/definitions/SessionSource" + } + ], + "description": "Origin of the thread (CLI, VSCode, codex exec, codex app-server, etc.)." + }, + "status": { + "allOf": [ + { + "$ref": "#/definitions/ThreadStatus" + } + ], + "description": "Current runtime status for the thread." + }, + "threadSource": { + "anyOf": [ + { + "$ref": "#/definitions/ThreadSource" + }, + { + "type": "null" + } + ], + "description": "Optional analytics source classification for this thread." + }, + "turns": { + "description": "Only populated on `thread/resume`, `thread/rollback`, `thread/fork`, and `thread/read` (when `includeTurns` is true) responses. For all other responses and notifications returning a Thread, the turns field will be an empty list.", + "items": { + "$ref": "#/definitions/Turn" + }, + "type": "array" + }, + "updatedAt": { + "description": "Unix timestamp (in seconds) when the thread was last updated.", + "format": "int64", + "type": "integer" + } + }, + "required": [ + "cliVersion", + "createdAt", + "cwd", + "ephemeral", + "id", + "modelProvider", + "preview", + "sessionId", + "source", + "status", + "turns", + "updatedAt" + ], + "type": "object" + }, + "ThreadActiveFlag": { + "enum": [ + "waitingOnApproval", + "waitingOnUserInput" + ], + "type": "string" + }, + "ThreadId": { + "type": "string" + }, + "ThreadItem": { + "oneOf": [ + { + "properties": { + "content": { + "items": { + "$ref": "#/definitions/UserInput" + }, + "type": "array" + }, + "id": { + "type": "string" + }, + "type": { + "enum": [ + "userMessage" + ], + "title": "UserMessageThreadItemType", + "type": "string" + } + }, + "required": [ + "content", + "id", + "type" + ], + "title": "UserMessageThreadItem", + "type": "object" + }, + { + "properties": { + "fragments": { + "items": { + "$ref": "#/definitions/HookPromptFragment" + }, + "type": "array" + }, + "id": { + "type": "string" + }, + "type": { + "enum": [ + "hookPrompt" + ], + "title": "HookPromptThreadItemType", + "type": "string" + } + }, + "required": [ + "fragments", + "id", + "type" + ], + "title": "HookPromptThreadItem", + "type": "object" + }, + { + "properties": { + "id": { + "type": "string" + }, + "memoryCitation": { + "anyOf": [ + { + "$ref": "#/definitions/MemoryCitation" + }, + { + "type": "null" + } + ], + "default": null + }, + "phase": { + "anyOf": [ + { + "$ref": "#/definitions/MessagePhase" + }, + { + "type": "null" + } + ], + "default": null + }, + "text": { + "type": "string" + }, + "type": { + "enum": [ + "agentMessage" + ], + "title": "AgentMessageThreadItemType", + "type": "string" + } + }, + "required": [ + "id", + "text", + "type" + ], + "title": "AgentMessageThreadItem", + "type": "object" + }, + { + "description": "EXPERIMENTAL - proposed plan item content. The completed plan item is authoritative and may not match the concatenation of `PlanDelta` text.", + "properties": { + "id": { + "type": "string" + }, + "text": { + "type": "string" + }, + "type": { + "enum": [ + "plan" + ], + "title": "PlanThreadItemType", + "type": "string" + } + }, + "required": [ + "id", + "text", + "type" + ], + "title": "PlanThreadItem", + "type": "object" + }, + { + "properties": { + "content": { + "default": [], + "items": { + "type": "string" + }, + "type": "array" + }, + "id": { + "type": "string" + }, + "summary": { + "default": [], + "items": { + "type": "string" + }, + "type": "array" + }, + "type": { + "enum": [ + "reasoning" + ], + "title": "ReasoningThreadItemType", + "type": "string" + } + }, + "required": [ + "id", + "type" + ], + "title": "ReasoningThreadItem", + "type": "object" + }, + { + "properties": { + "aggregatedOutput": { + "description": "The command's output, aggregated from stdout and stderr.", + "type": [ + "string", + "null" + ] + }, + "command": { + "description": "The command to be executed.", + "type": "string" + }, + "commandActions": { + "description": "A best-effort parsing of the command to understand the action(s) it will perform. This returns a list of CommandAction objects because a single shell command may be composed of many commands piped together.", + "items": { + "$ref": "#/definitions/CommandAction" + }, + "type": "array" + }, + "cwd": { + "allOf": [ + { + "$ref": "#/definitions/AbsolutePathBuf" + } + ], + "description": "The command's working directory." + }, + "durationMs": { + "description": "The duration of the command execution in milliseconds.", + "format": "int64", + "type": [ + "integer", + "null" + ] + }, + "exitCode": { + "description": "The command's exit code.", + "format": "int32", + "type": [ + "integer", + "null" + ] + }, + "id": { + "type": "string" + }, + "processId": { + "description": "Identifier for the underlying PTY process (when available).", + "type": [ + "string", + "null" + ] + }, + "source": { + "allOf": [ + { + "$ref": "#/definitions/CommandExecutionSource" + } + ], + "default": "agent" + }, + "status": { + "$ref": "#/definitions/CommandExecutionStatus" + }, + "type": { + "enum": [ + "commandExecution" + ], + "title": "CommandExecutionThreadItemType", + "type": "string" + } + }, + "required": [ + "command", + "commandActions", + "cwd", + "id", + "status", + "type" + ], + "title": "CommandExecutionThreadItem", + "type": "object" + }, + { + "properties": { + "changes": { + "items": { + "$ref": "#/definitions/FileUpdateChange" + }, + "type": "array" + }, + "id": { + "type": "string" + }, + "status": { + "$ref": "#/definitions/PatchApplyStatus" + }, + "type": { + "enum": [ + "fileChange" + ], + "title": "FileChangeThreadItemType", + "type": "string" + } + }, + "required": [ + "changes", + "id", + "status", + "type" + ], + "title": "FileChangeThreadItem", + "type": "object" + }, + { + "properties": { + "arguments": true, + "durationMs": { + "description": "The duration of the MCP tool call in milliseconds.", + "format": "int64", + "type": [ + "integer", + "null" + ] + }, + "error": { + "anyOf": [ + { + "$ref": "#/definitions/McpToolCallError" + }, + { + "type": "null" + } + ] + }, + "id": { + "type": "string" + }, + "mcpAppResourceUri": { + "type": [ + "string", + "null" + ] + }, + "pluginId": { + "type": [ + "string", + "null" + ] + }, + "result": { + "anyOf": [ + { + "$ref": "#/definitions/McpToolCallResult" + }, + { + "type": "null" + } + ] + }, + "server": { + "type": "string" + }, + "status": { + "$ref": "#/definitions/McpToolCallStatus" + }, + "tool": { + "type": "string" + }, + "type": { + "enum": [ + "mcpToolCall" + ], + "title": "McpToolCallThreadItemType", + "type": "string" + } + }, + "required": [ + "arguments", + "id", + "server", + "status", + "tool", + "type" + ], + "title": "McpToolCallThreadItem", + "type": "object" + }, + { + "properties": { + "arguments": true, + "contentItems": { + "items": { + "$ref": "#/definitions/DynamicToolCallOutputContentItem" + }, + "type": [ + "array", + "null" + ] + }, + "durationMs": { + "description": "The duration of the dynamic tool call in milliseconds.", + "format": "int64", + "type": [ + "integer", + "null" + ] + }, + "id": { + "type": "string" + }, + "namespace": { + "type": [ + "string", + "null" + ] + }, + "status": { + "$ref": "#/definitions/DynamicToolCallStatus" + }, + "success": { + "type": [ + "boolean", + "null" + ] + }, + "tool": { + "type": "string" + }, + "type": { + "enum": [ + "dynamicToolCall" + ], + "title": "DynamicToolCallThreadItemType", + "type": "string" + } + }, + "required": [ + "arguments", + "id", + "status", + "tool", + "type" + ], + "title": "DynamicToolCallThreadItem", + "type": "object" + }, + { + "properties": { + "agentsStates": { + "additionalProperties": { + "$ref": "#/definitions/CollabAgentState" + }, + "description": "Last known status of the target agents, when available.", + "type": "object" + }, + "id": { + "description": "Unique identifier for this collab tool call.", + "type": "string" + }, + "model": { + "description": "Model requested for the spawned agent, when applicable.", + "type": [ + "string", + "null" + ] + }, + "prompt": { + "description": "Prompt text sent as part of the collab tool call, when available.", + "type": [ + "string", + "null" + ] + }, + "reasoningEffort": { + "anyOf": [ + { + "$ref": "#/definitions/ReasoningEffort" + }, + { + "type": "null" + } + ], + "description": "Reasoning effort requested for the spawned agent, when applicable." + }, + "receiverThreadIds": { + "description": "Thread ID of the receiving agent, when applicable. In case of spawn operation, this corresponds to the newly spawned agent.", + "items": { + "type": "string" + }, + "type": "array" + }, + "senderThreadId": { + "description": "Thread ID of the agent issuing the collab request.", + "type": "string" + }, + "status": { + "allOf": [ + { + "$ref": "#/definitions/CollabAgentToolCallStatus" + } + ], + "description": "Current status of the collab tool call." + }, + "tool": { + "allOf": [ + { + "$ref": "#/definitions/CollabAgentTool" + } + ], + "description": "Name of the collab tool that was invoked." + }, + "type": { + "enum": [ + "collabAgentToolCall" + ], + "title": "CollabAgentToolCallThreadItemType", + "type": "string" + } + }, + "required": [ + "agentsStates", + "id", + "receiverThreadIds", + "senderThreadId", + "status", + "tool", + "type" + ], + "title": "CollabAgentToolCallThreadItem", + "type": "object" + }, + { + "properties": { + "action": { + "anyOf": [ + { + "$ref": "#/definitions/WebSearchAction" + }, + { + "type": "null" + } + ] + }, + "id": { + "type": "string" + }, + "query": { + "type": "string" + }, + "type": { + "enum": [ + "webSearch" + ], + "title": "WebSearchThreadItemType", + "type": "string" + } + }, + "required": [ + "id", + "query", + "type" + ], + "title": "WebSearchThreadItem", + "type": "object" + }, + { + "properties": { + "id": { + "type": "string" + }, + "path": { + "$ref": "#/definitions/AbsolutePathBuf" + }, + "type": { + "enum": [ + "imageView" + ], + "title": "ImageViewThreadItemType", + "type": "string" + } + }, + "required": [ + "id", + "path", + "type" + ], + "title": "ImageViewThreadItem", + "type": "object" + }, + { + "properties": { + "id": { + "type": "string" + }, + "result": { + "type": "string" + }, + "revisedPrompt": { + "type": [ + "string", + "null" + ] + }, + "savedPath": { + "anyOf": [ + { + "$ref": "#/definitions/AbsolutePathBuf" + }, + { + "type": "null" + } + ] + }, + "status": { + "type": "string" + }, + "type": { + "enum": [ + "imageGeneration" + ], + "title": "ImageGenerationThreadItemType", + "type": "string" + } + }, + "required": [ + "id", + "result", + "status", + "type" + ], + "title": "ImageGenerationThreadItem", + "type": "object" + }, + { + "properties": { + "id": { + "type": "string" + }, + "review": { + "type": "string" + }, + "type": { + "enum": [ + "enteredReviewMode" + ], + "title": "EnteredReviewModeThreadItemType", + "type": "string" + } + }, + "required": [ + "id", + "review", + "type" + ], + "title": "EnteredReviewModeThreadItem", + "type": "object" + }, + { + "properties": { + "id": { + "type": "string" + }, + "review": { + "type": "string" + }, + "type": { + "enum": [ + "exitedReviewMode" + ], + "title": "ExitedReviewModeThreadItemType", + "type": "string" + } + }, + "required": [ + "id", + "review", + "type" + ], + "title": "ExitedReviewModeThreadItem", + "type": "object" + }, + { + "properties": { + "id": { + "type": "string" + }, + "type": { + "enum": [ + "contextCompaction" + ], + "title": "ContextCompactionThreadItemType", + "type": "string" + } + }, + "required": [ + "id", + "type" + ], + "title": "ContextCompactionThreadItem", + "type": "object" + } + ] + }, + "ThreadSearchResult": { + "properties": { + "snippet": { + "type": "string" + }, + "thread": { + "$ref": "#/definitions/Thread" + } + }, + "required": [ + "snippet", + "thread" + ], + "type": "object" + }, + "ThreadSource": { + "enum": [ + "user", + "subagent", + "memory_consolidation" + ], + "type": "string" + }, + "ThreadStatus": { + "oneOf": [ + { + "properties": { + "type": { + "enum": [ + "notLoaded" + ], + "title": "NotLoadedThreadStatusType", + "type": "string" + } + }, + "required": [ + "type" + ], + "title": "NotLoadedThreadStatus", + "type": "object" + }, + { + "properties": { + "type": { + "enum": [ + "idle" + ], + "title": "IdleThreadStatusType", + "type": "string" + } + }, + "required": [ + "type" + ], + "title": "IdleThreadStatus", + "type": "object" + }, + { + "properties": { + "type": { + "enum": [ + "systemError" + ], + "title": "SystemErrorThreadStatusType", + "type": "string" + } + }, + "required": [ + "type" + ], + "title": "SystemErrorThreadStatus", + "type": "object" + }, + { + "properties": { + "activeFlags": { + "items": { + "$ref": "#/definitions/ThreadActiveFlag" + }, + "type": "array" + }, + "type": { + "enum": [ + "active" + ], + "title": "ActiveThreadStatusType", + "type": "string" + } + }, + "required": [ + "activeFlags", + "type" + ], + "title": "ActiveThreadStatus", + "type": "object" + } + ] + }, + "Turn": { + "properties": { + "completedAt": { + "description": "Unix timestamp (in seconds) when the turn completed.", + "format": "int64", + "type": [ + "integer", + "null" + ] + }, + "durationMs": { + "description": "Duration between turn start and completion in milliseconds, if known.", + "format": "int64", + "type": [ + "integer", + "null" + ] + }, + "error": { + "anyOf": [ + { + "$ref": "#/definitions/TurnError" + }, + { + "type": "null" + } + ], + "description": "Only populated when the Turn's status is failed." + }, + "id": { + "type": "string" + }, + "items": { + "description": "Thread items currently included in this turn payload.", + "items": { + "$ref": "#/definitions/ThreadItem" + }, + "type": "array" + }, + "itemsView": { + "allOf": [ + { + "$ref": "#/definitions/TurnItemsView" + } + ], + "default": "full", + "description": "Describes how much of `items` has been loaded for this turn." + }, + "startedAt": { + "description": "Unix timestamp (in seconds) when the turn started.", + "format": "int64", + "type": [ + "integer", + "null" + ] + }, + "status": { + "$ref": "#/definitions/TurnStatus" + } + }, + "required": [ + "id", + "items", + "status" + ], + "type": "object" + }, + "TurnError": { + "properties": { + "additionalDetails": { + "default": null, + "type": [ + "string", + "null" + ] + }, + "codexErrorInfo": { + "anyOf": [ + { + "$ref": "#/definitions/CodexErrorInfo" + }, + { + "type": "null" + } + ] + }, + "message": { + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + }, + "TurnItemsView": { + "oneOf": [ + { + "description": "`items` was not loaded for this turn. The field is intentionally empty.", + "enum": [ + "notLoaded" + ], + "type": "string" + }, + { + "description": "`items` contains only a display summary for this turn.", + "enum": [ + "summary" + ], + "type": "string" + }, + { + "description": "`items` contains every ThreadItem available from persisted app-server history for this turn.", + "enum": [ + "full" + ], + "type": "string" + } + ] + }, + "TurnStatus": { + "enum": [ + "completed", + "interrupted", + "failed", + "inProgress" + ], + "type": "string" + }, + "UserInput": { + "oneOf": [ + { + "properties": { + "text": { + "type": "string" + }, + "text_elements": { + "default": [], + "description": "UI-defined spans within `text` used to render or persist special elements.", + "items": { + "$ref": "#/definitions/TextElement" + }, + "type": "array" + }, + "type": { + "enum": [ + "text" + ], + "title": "TextUserInputType", + "type": "string" + } + }, + "required": [ + "text", + "type" + ], + "title": "TextUserInput", + "type": "object" + }, + { + "properties": { + "detail": { + "anyOf": [ + { + "$ref": "#/definitions/ImageDetail" + }, + { + "type": "null" + } + ], + "default": null + }, + "type": { + "enum": [ + "image" + ], + "title": "ImageUserInputType", + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "type", + "url" + ], + "title": "ImageUserInput", + "type": "object" + }, + { + "properties": { + "detail": { + "anyOf": [ + { + "$ref": "#/definitions/ImageDetail" + }, + { + "type": "null" + } + ], + "default": null + }, + "path": { + "type": "string" + }, + "type": { + "enum": [ + "localImage" + ], + "title": "LocalImageUserInputType", + "type": "string" + } + }, + "required": [ + "path", + "type" + ], + "title": "LocalImageUserInput", + "type": "object" + }, + { + "properties": { + "name": { + "type": "string" + }, + "path": { + "type": "string" + }, + "type": { + "enum": [ + "skill" + ], + "title": "SkillUserInputType", + "type": "string" + } + }, + "required": [ + "name", + "path", + "type" + ], + "title": "SkillUserInput", + "type": "object" + }, + { + "properties": { + "name": { + "type": "string" + }, + "path": { + "type": "string" + }, + "type": { + "enum": [ + "mention" + ], + "title": "MentionUserInputType", + "type": "string" + } + }, + "required": [ + "name", + "path", + "type" + ], + "title": "MentionUserInput", + "type": "object" + } + ] + }, + "WebSearchAction": { + "oneOf": [ + { + "properties": { + "queries": { + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "query": { + "type": [ + "string", + "null" + ] + }, + "type": { + "enum": [ + "search" + ], + "title": "SearchWebSearchActionType", + "type": "string" + } + }, + "required": [ + "type" + ], + "title": "SearchWebSearchAction", + "type": "object" + }, + { + "properties": { + "type": { + "enum": [ + "openPage" + ], + "title": "OpenPageWebSearchActionType", + "type": "string" + }, + "url": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "type" + ], + "title": "OpenPageWebSearchAction", + "type": "object" + }, + { + "properties": { + "pattern": { + "type": [ + "string", + "null" + ] + }, + "type": { + "enum": [ + "findInPage" + ], + "title": "FindInPageWebSearchActionType", + "type": "string" + }, + "url": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "type" + ], + "title": "FindInPageWebSearchAction", + "type": "object" + }, + { + "properties": { + "type": { + "enum": [ + "other" + ], + "title": "OtherWebSearchActionType", + "type": "string" + } + }, + "required": [ + "type" + ], + "title": "OtherWebSearchAction", + "type": "object" + } + ] + } + }, + "properties": { + "backwardsCursor": { + "description": "Opaque cursor to pass as `cursor` when reversing `sortDirection`. This is only populated when the page contains at least one thread. Use it with the opposite `sortDirection`; for timestamp sorts it anchors at the start of the page timestamp so same-second updates are not skipped.", + "type": [ + "string", + "null" + ] + }, + "data": { + "items": { + "$ref": "#/definitions/ThreadSearchResult" + }, + "type": "array" + }, + "nextCursor": { + "description": "Opaque cursor to pass to the next call to continue after the last item. if None, there are no more items to return.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "data" + ], + "title": "ThreadSearchResponse", + "type": "object" +} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadSettingsUpdateParams.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadSettingsUpdateParams.json new file mode 100644 index 00000000000..ba0c881e0f4 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadSettingsUpdateParams.json @@ -0,0 +1,381 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "definitions": { + "AbsolutePathBuf": { + "description": "A path that is guaranteed to be absolute and normalized (though it is not guaranteed to be canonicalized or exist on the filesystem).\n\nIMPORTANT: When deserializing an `AbsolutePathBuf`, a base path must be set using [AbsolutePathBufGuard::new]. If no base path is set, the deserialization will fail unless the path being deserialized is already absolute.", + "type": "string" + }, + "ApprovalsReviewer": { + "description": "Configures who approval requests are routed to for review. Examples include sandbox escapes, blocked network access, MCP approval prompts, and ARC escalations. Defaults to `user`. `auto_review` uses a carefully prompted subagent to gather relevant context and apply a risk-based decision framework before approving or denying the request. The legacy value `guardian_subagent` is accepted for compatibility.", + "enum": [ + "user", + "auto_review", + "guardian_subagent" + ], + "type": "string" + }, + "AskForApproval": { + "oneOf": [ + { + "enum": [ + "untrusted", + "on-failure", + "on-request", + "never" + ], + "type": "string" + }, + { + "additionalProperties": false, + "properties": { + "granular": { + "properties": { + "mcp_elicitations": { + "type": "boolean" + }, + "request_permissions": { + "default": false, + "type": "boolean" + }, + "rules": { + "type": "boolean" + }, + "sandbox_approval": { + "type": "boolean" + }, + "skill_approval": { + "default": false, + "type": "boolean" + } + }, + "required": [ + "mcp_elicitations", + "rules", + "sandbox_approval" + ], + "type": "object" + } + }, + "required": [ + "granular" + ], + "title": "GranularAskForApproval", + "type": "object" + } + ] + }, + "CollaborationMode": { + "description": "Collaboration mode for a Codex session.", + "properties": { + "mode": { + "$ref": "#/definitions/ModeKind" + }, + "settings": { + "$ref": "#/definitions/Settings" + } + }, + "required": [ + "mode", + "settings" + ], + "type": "object" + }, + "ModeKind": { + "description": "Initial collaboration mode to use when the TUI starts.", + "enum": [ + "plan", + "default" + ], + "type": "string" + }, + "NetworkAccess": { + "enum": [ + "restricted", + "enabled" + ], + "type": "string" + }, + "Personality": { + "enum": [ + "none", + "friendly", + "pragmatic" + ], + "type": "string" + }, + "ReasoningEffort": { + "description": "See https://platform.openai.com/docs/guides/reasoning?api-mode=responses#get-started-with-reasoning", + "enum": [ + "none", + "minimal", + "low", + "medium", + "high", + "xhigh" + ], + "type": "string" + }, + "ReasoningSummary": { + "description": "A summary of the reasoning performed by the model. This can be useful for debugging and understanding the model's reasoning process. See https://platform.openai.com/docs/guides/reasoning?api-mode=responses#reasoning-summaries", + "oneOf": [ + { + "enum": [ + "auto", + "concise", + "detailed" + ], + "type": "string" + }, + { + "description": "Option to disable reasoning summaries.", + "enum": [ + "none" + ], + "type": "string" + } + ] + }, + "SandboxPolicy": { + "oneOf": [ + { + "properties": { + "type": { + "enum": [ + "dangerFullAccess" + ], + "title": "DangerFullAccessSandboxPolicyType", + "type": "string" + } + }, + "required": [ + "type" + ], + "title": "DangerFullAccessSandboxPolicy", + "type": "object" + }, + { + "properties": { + "networkAccess": { + "default": false, + "type": "boolean" + }, + "type": { + "enum": [ + "readOnly" + ], + "title": "ReadOnlySandboxPolicyType", + "type": "string" + } + }, + "required": [ + "type" + ], + "title": "ReadOnlySandboxPolicy", + "type": "object" + }, + { + "properties": { + "networkAccess": { + "allOf": [ + { + "$ref": "#/definitions/NetworkAccess" + } + ], + "default": "restricted" + }, + "type": { + "enum": [ + "externalSandbox" + ], + "title": "ExternalSandboxSandboxPolicyType", + "type": "string" + } + }, + "required": [ + "type" + ], + "title": "ExternalSandboxSandboxPolicy", + "type": "object" + }, + { + "properties": { + "excludeSlashTmp": { + "default": false, + "type": "boolean" + }, + "excludeTmpdirEnvVar": { + "default": false, + "type": "boolean" + }, + "networkAccess": { + "default": false, + "type": "boolean" + }, + "type": { + "enum": [ + "workspaceWrite" + ], + "title": "WorkspaceWriteSandboxPolicyType", + "type": "string" + }, + "writableRoots": { + "default": [], + "items": { + "$ref": "#/definitions/AbsolutePathBuf" + }, + "type": "array" + } + }, + "required": [ + "type" + ], + "title": "WorkspaceWriteSandboxPolicy", + "type": "object" + } + ] + }, + "Settings": { + "description": "Settings for a collaboration mode.", + "properties": { + "developer_instructions": { + "type": [ + "string", + "null" + ] + }, + "model": { + "type": "string" + }, + "reasoning_effort": { + "anyOf": [ + { + "$ref": "#/definitions/ReasoningEffort" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "model" + ], + "type": "object" + } + }, + "properties": { + "approvalPolicy": { + "anyOf": [ + { + "$ref": "#/definitions/AskForApproval" + }, + { + "type": "null" + } + ], + "description": "Override the approval policy for subsequent turns." + }, + "approvalsReviewer": { + "anyOf": [ + { + "$ref": "#/definitions/ApprovalsReviewer" + }, + { + "type": "null" + } + ], + "description": "Override where approval requests are routed for subsequent turns." + }, + "collaborationMode": { + "anyOf": [ + { + "$ref": "#/definitions/CollaborationMode" + }, + { + "type": "null" + } + ], + "description": "EXPERIMENTAL - Set a pre-set collaboration mode for subsequent turns.\n\nFor `collaboration_mode.settings.developer_instructions`, `null` means \"use the built-in instructions for the selected mode\"." + }, + "cwd": { + "description": "Override the working directory for subsequent turns.", + "type": [ + "string", + "null" + ] + }, + "effort": { + "anyOf": [ + { + "$ref": "#/definitions/ReasoningEffort" + }, + { + "type": "null" + } + ], + "description": "Override the reasoning effort for subsequent turns." + }, + "model": { + "description": "Override the model for subsequent turns.", + "type": [ + "string", + "null" + ] + }, + "permissions": { + "description": "Select a named permissions profile id for subsequent turns. Cannot be combined with `sandboxPolicy`.", + "type": [ + "string", + "null" + ] + }, + "personality": { + "anyOf": [ + { + "$ref": "#/definitions/Personality" + }, + { + "type": "null" + } + ], + "description": "Override the personality for subsequent turns." + }, + "sandboxPolicy": { + "anyOf": [ + { + "$ref": "#/definitions/SandboxPolicy" + }, + { + "type": "null" + } + ], + "description": "Override the sandbox policy for subsequent turns." + }, + "serviceTier": { + "description": "Override the service tier for subsequent turns. `null` clears the current service tier; omission leaves it unchanged.", + "type": [ + "string", + "null" + ] + }, + "summary": { + "anyOf": [ + { + "$ref": "#/definitions/ReasoningSummary" + }, + { + "type": "null" + } + ], + "description": "Override the reasoning summary for subsequent turns." + }, + "threadId": { + "type": "string" + } + }, + "required": [ + "threadId" + ], + "title": "ThreadSettingsUpdateParams", + "type": "object" +} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadSettingsUpdateResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadSettingsUpdateResponse.json new file mode 100644 index 00000000000..33c8576eddf --- /dev/null +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadSettingsUpdateResponse.json @@ -0,0 +1,5 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "ThreadSettingsUpdateResponse", + "type": "object" +} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadStartParams.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadStartParams.json index 99b25490ab1..e7d15a5c5d3 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadStartParams.json +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadStartParams.json @@ -184,12 +184,42 @@ "null" ] }, + "dynamicTools": { + "items": { + "$ref": "#/definitions/DynamicToolSpec" + }, + "type": [ + "array", + "null" + ] + }, + "environments": { + "description": "Optional sticky environments for this thread.\n\nOmitted selects the default environment when environment access is enabled. Empty disables environment access for turns that do not provide a turn override. Non-empty selects the first environment as the current turn environment.", + "items": { + "$ref": "#/definitions/TurnEnvironmentParams" + }, + "type": [ + "array", + "null" + ] + }, "ephemeral": { "type": [ "boolean", "null" ] }, + "experimentalRawEvents": { + "description": "If true, opt into emitting raw Responses API items on the event stream. This is for internal use only (e.g. Codex Cloud).", + "type": "boolean" + }, + "mockExperimentalField": { + "description": "Test-only experimental field used to validate experimental gating and schema filtering behavior in a stable way.", + "type": [ + "string", + "null" + ] + }, "model": { "type": [ "string", @@ -202,6 +232,17 @@ "null" ] }, + "permissions": { + "description": "Named profile id for this thread. Cannot be combined with `sandbox`.", + "type": [ + "string", + "null" + ] + }, + "persistExtendedHistory": { + "description": "Deprecated and ignored by app-server. Kept only so older clients can continue sending the field while rollout persistence always uses the limited history policy.", + "type": "boolean" + }, "personality": { "anyOf": [ { @@ -212,6 +253,16 @@ } ] }, + "runtimeWorkspaceRoots": { + "description": "Replace the thread's runtime workspace roots. Relative paths are resolved against the effective cwd for the thread.", + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, "sandbox": { "anyOf": [ { diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadStartResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadStartResponse.json index d456ccebc4d..5f4708f4996 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadStartResponse.json +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadStartResponse.json @@ -2238,6 +2238,18 @@ } }, "properties": { + "activePermissionProfile": { + "anyOf": [ + { + "$ref": "#/definitions/ActivePermissionProfile" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Named or implicit built-in profile that produced the active permissions, when known." + }, "approvalPolicy": { "$ref": "#/definitions/AskForApproval" }, @@ -2276,6 +2288,14 @@ } ] }, + "runtimeWorkspaceRoots": { + "default": [], + "description": "Thread-scoped runtime workspace roots used to materialize `:workspace_roots`.", + "items": { + "$ref": "#/definitions/AbsolutePathBuf" + }, + "type": "array" + }, "sandbox": { "allOf": [ { diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadTurnsItemsListParams.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadTurnsItemsListParams.json new file mode 100644 index 00000000000..6233f0559f4 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadTurnsItemsListParams.json @@ -0,0 +1,53 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "definitions": { + "SortDirection": { + "enum": [ + "asc", + "desc" + ], + "type": "string" + } + }, + "properties": { + "cursor": { + "description": "Opaque cursor to pass to the next call to continue after the last item.", + "type": [ + "string", + "null" + ] + }, + "limit": { + "description": "Optional item page size.", + "format": "uint32", + "minimum": 0.0, + "type": [ + "integer", + "null" + ] + }, + "sortDirection": { + "anyOf": [ + { + "$ref": "#/definitions/SortDirection" + }, + { + "type": "null" + } + ], + "description": "Optional item pagination direction; defaults to ascending." + }, + "threadId": { + "type": "string" + }, + "turnId": { + "type": "string" + } + }, + "required": [ + "threadId", + "turnId" + ], + "title": "ThreadTurnsItemsListParams", + "type": "object" +} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadTurnsItemsListResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadTurnsItemsListResponse.json new file mode 100644 index 00000000000..3b19f6ae8a4 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadTurnsItemsListResponse.json @@ -0,0 +1,1434 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "definitions": { + "AbsolutePathBuf": { + "description": "A path that is guaranteed to be absolute and normalized (though it is not guaranteed to be canonicalized or exist on the filesystem).\n\nIMPORTANT: When deserializing an `AbsolutePathBuf`, a base path must be set using [AbsolutePathBufGuard::new]. If no base path is set, the deserialization will fail unless the path being deserialized is already absolute.", + "type": "string" + }, + "ByteRange": { + "properties": { + "end": { + "format": "uint", + "minimum": 0.0, + "type": "integer" + }, + "start": { + "format": "uint", + "minimum": 0.0, + "type": "integer" + } + }, + "required": [ + "end", + "start" + ], + "type": "object" + }, + "CollabAgentState": { + "properties": { + "message": { + "type": [ + "string", + "null" + ] + }, + "status": { + "$ref": "#/definitions/CollabAgentStatus" + } + }, + "required": [ + "status" + ], + "type": "object" + }, + "CollabAgentStatus": { + "enum": [ + "pendingInit", + "running", + "interrupted", + "completed", + "errored", + "shutdown", + "notFound" + ], + "type": "string" + }, + "CollabAgentTool": { + "enum": [ + "spawnAgent", + "sendInput", + "resumeAgent", + "wait", + "closeAgent" + ], + "type": "string" + }, + "CollabAgentToolCallStatus": { + "enum": [ + "inProgress", + "completed", + "failed" + ], + "type": "string" + }, + "CommandAction": { + "oneOf": [ + { + "properties": { + "command": { + "type": "string" + }, + "name": { + "type": "string" + }, + "path": { + "$ref": "#/definitions/AbsolutePathBuf" + }, + "type": { + "enum": [ + "read" + ], + "title": "ReadCommandActionType", + "type": "string" + } + }, + "required": [ + "command", + "name", + "path", + "type" + ], + "title": "ReadCommandAction", + "type": "object" + }, + { + "properties": { + "command": { + "type": "string" + }, + "path": { + "type": [ + "string", + "null" + ] + }, + "type": { + "enum": [ + "listFiles" + ], + "title": "ListFilesCommandActionType", + "type": "string" + } + }, + "required": [ + "command", + "type" + ], + "title": "ListFilesCommandAction", + "type": "object" + }, + { + "properties": { + "command": { + "type": "string" + }, + "path": { + "type": [ + "string", + "null" + ] + }, + "query": { + "type": [ + "string", + "null" + ] + }, + "type": { + "enum": [ + "search" + ], + "title": "SearchCommandActionType", + "type": "string" + } + }, + "required": [ + "command", + "type" + ], + "title": "SearchCommandAction", + "type": "object" + }, + { + "properties": { + "command": { + "type": "string" + }, + "type": { + "enum": [ + "unknown" + ], + "title": "UnknownCommandActionType", + "type": "string" + } + }, + "required": [ + "command", + "type" + ], + "title": "UnknownCommandAction", + "type": "object" + } + ] + }, + "CommandExecutionSource": { + "enum": [ + "agent", + "userShell", + "unifiedExecStartup", + "unifiedExecInteraction" + ], + "type": "string" + }, + "CommandExecutionStatus": { + "enum": [ + "inProgress", + "completed", + "failed", + "declined" + ], + "type": "string" + }, + "DynamicToolCallOutputContentItem": { + "oneOf": [ + { + "properties": { + "text": { + "type": "string" + }, + "type": { + "enum": [ + "inputText" + ], + "title": "InputTextDynamicToolCallOutputContentItemType", + "type": "string" + } + }, + "required": [ + "text", + "type" + ], + "title": "InputTextDynamicToolCallOutputContentItem", + "type": "object" + }, + { + "properties": { + "imageUrl": { + "type": "string" + }, + "type": { + "enum": [ + "inputImage" + ], + "title": "InputImageDynamicToolCallOutputContentItemType", + "type": "string" + } + }, + "required": [ + "imageUrl", + "type" + ], + "title": "InputImageDynamicToolCallOutputContentItem", + "type": "object" + } + ] + }, + "DynamicToolCallStatus": { + "enum": [ + "inProgress", + "completed", + "failed" + ], + "type": "string" + }, + "FileUpdateChange": { + "properties": { + "diff": { + "type": "string" + }, + "kind": { + "$ref": "#/definitions/PatchChangeKind" + }, + "path": { + "type": "string" + } + }, + "required": [ + "diff", + "kind", + "path" + ], + "type": "object" + }, + "HookPromptFragment": { + "properties": { + "hookRunId": { + "type": "string" + }, + "text": { + "type": "string" + } + }, + "required": [ + "hookRunId", + "text" + ], + "type": "object" + }, + "ImageDetail": { + "enum": [ + "high", + "original" + ], + "type": "string" + }, + "McpToolCallError": { + "properties": { + "message": { + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + }, + "McpToolCallResult": { + "properties": { + "_meta": true, + "content": { + "items": true, + "type": "array" + }, + "structuredContent": true + }, + "required": [ + "content" + ], + "type": "object" + }, + "McpToolCallStatus": { + "enum": [ + "inProgress", + "completed", + "failed" + ], + "type": "string" + }, + "MemoryCitation": { + "properties": { + "entries": { + "items": { + "$ref": "#/definitions/MemoryCitationEntry" + }, + "type": "array" + }, + "threadIds": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "entries", + "threadIds" + ], + "type": "object" + }, + "MemoryCitationEntry": { + "properties": { + "lineEnd": { + "format": "uint32", + "minimum": 0.0, + "type": "integer" + }, + "lineStart": { + "format": "uint32", + "minimum": 0.0, + "type": "integer" + }, + "note": { + "type": "string" + }, + "path": { + "type": "string" + } + }, + "required": [ + "lineEnd", + "lineStart", + "note", + "path" + ], + "type": "object" + }, + "MessagePhase": { + "description": "Classifies an assistant message as interim commentary or final answer text.\n\nProviders do not emit this consistently, so callers must treat `None` as \"phase unknown\" and keep compatibility behavior for legacy models.", + "oneOf": [ + { + "description": "Mid-turn assistant text (for example preamble/progress narration).\n\nAdditional tool calls or assistant output may follow before turn completion.", + "enum": [ + "commentary" + ], + "type": "string" + }, + { + "description": "The assistant's terminal answer text for the current turn.", + "enum": [ + "final_answer" + ], + "type": "string" + } + ] + }, + "PatchApplyStatus": { + "enum": [ + "inProgress", + "completed", + "failed", + "declined" + ], + "type": "string" + }, + "PatchChangeKind": { + "oneOf": [ + { + "properties": { + "type": { + "enum": [ + "add" + ], + "title": "AddPatchChangeKindType", + "type": "string" + } + }, + "required": [ + "type" + ], + "title": "AddPatchChangeKind", + "type": "object" + }, + { + "properties": { + "type": { + "enum": [ + "delete" + ], + "title": "DeletePatchChangeKindType", + "type": "string" + } + }, + "required": [ + "type" + ], + "title": "DeletePatchChangeKind", + "type": "object" + }, + { + "properties": { + "move_path": { + "type": [ + "string", + "null" + ] + }, + "type": { + "enum": [ + "update" + ], + "title": "UpdatePatchChangeKindType", + "type": "string" + } + }, + "required": [ + "type" + ], + "title": "UpdatePatchChangeKind", + "type": "object" + } + ] + }, + "ReasoningEffort": { + "description": "See https://platform.openai.com/docs/guides/reasoning?api-mode=responses#get-started-with-reasoning", + "enum": [ + "none", + "minimal", + "low", + "medium", + "high", + "xhigh" + ], + "type": "string" + }, + "TextElement": { + "properties": { + "byteRange": { + "allOf": [ + { + "$ref": "#/definitions/ByteRange" + } + ], + "description": "Byte range in the parent `text` buffer that this element occupies." + }, + "placeholder": { + "description": "Optional human-readable placeholder for the element, displayed in the UI.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "byteRange" + ], + "type": "object" + }, + "ThreadItem": { + "oneOf": [ + { + "properties": { + "content": { + "items": { + "$ref": "#/definitions/UserInput" + }, + "type": "array" + }, + "id": { + "type": "string" + }, + "type": { + "enum": [ + "userMessage" + ], + "title": "UserMessageThreadItemType", + "type": "string" + } + }, + "required": [ + "content", + "id", + "type" + ], + "title": "UserMessageThreadItem", + "type": "object" + }, + { + "properties": { + "fragments": { + "items": { + "$ref": "#/definitions/HookPromptFragment" + }, + "type": "array" + }, + "id": { + "type": "string" + }, + "type": { + "enum": [ + "hookPrompt" + ], + "title": "HookPromptThreadItemType", + "type": "string" + } + }, + "required": [ + "fragments", + "id", + "type" + ], + "title": "HookPromptThreadItem", + "type": "object" + }, + { + "properties": { + "id": { + "type": "string" + }, + "memoryCitation": { + "anyOf": [ + { + "$ref": "#/definitions/MemoryCitation" + }, + { + "type": "null" + } + ], + "default": null + }, + "phase": { + "anyOf": [ + { + "$ref": "#/definitions/MessagePhase" + }, + { + "type": "null" + } + ], + "default": null + }, + "text": { + "type": "string" + }, + "type": { + "enum": [ + "agentMessage" + ], + "title": "AgentMessageThreadItemType", + "type": "string" + } + }, + "required": [ + "id", + "text", + "type" + ], + "title": "AgentMessageThreadItem", + "type": "object" + }, + { + "description": "EXPERIMENTAL - proposed plan item content. The completed plan item is authoritative and may not match the concatenation of `PlanDelta` text.", + "properties": { + "id": { + "type": "string" + }, + "text": { + "type": "string" + }, + "type": { + "enum": [ + "plan" + ], + "title": "PlanThreadItemType", + "type": "string" + } + }, + "required": [ + "id", + "text", + "type" + ], + "title": "PlanThreadItem", + "type": "object" + }, + { + "properties": { + "content": { + "default": [], + "items": { + "type": "string" + }, + "type": "array" + }, + "id": { + "type": "string" + }, + "summary": { + "default": [], + "items": { + "type": "string" + }, + "type": "array" + }, + "type": { + "enum": [ + "reasoning" + ], + "title": "ReasoningThreadItemType", + "type": "string" + } + }, + "required": [ + "id", + "type" + ], + "title": "ReasoningThreadItem", + "type": "object" + }, + { + "properties": { + "aggregatedOutput": { + "description": "The command's output, aggregated from stdout and stderr.", + "type": [ + "string", + "null" + ] + }, + "command": { + "description": "The command to be executed.", + "type": "string" + }, + "commandActions": { + "description": "A best-effort parsing of the command to understand the action(s) it will perform. This returns a list of CommandAction objects because a single shell command may be composed of many commands piped together.", + "items": { + "$ref": "#/definitions/CommandAction" + }, + "type": "array" + }, + "cwd": { + "allOf": [ + { + "$ref": "#/definitions/AbsolutePathBuf" + } + ], + "description": "The command's working directory." + }, + "durationMs": { + "description": "The duration of the command execution in milliseconds.", + "format": "int64", + "type": [ + "integer", + "null" + ] + }, + "exitCode": { + "description": "The command's exit code.", + "format": "int32", + "type": [ + "integer", + "null" + ] + }, + "id": { + "type": "string" + }, + "processId": { + "description": "Identifier for the underlying PTY process (when available).", + "type": [ + "string", + "null" + ] + }, + "source": { + "allOf": [ + { + "$ref": "#/definitions/CommandExecutionSource" + } + ], + "default": "agent" + }, + "status": { + "$ref": "#/definitions/CommandExecutionStatus" + }, + "type": { + "enum": [ + "commandExecution" + ], + "title": "CommandExecutionThreadItemType", + "type": "string" + } + }, + "required": [ + "command", + "commandActions", + "cwd", + "id", + "status", + "type" + ], + "title": "CommandExecutionThreadItem", + "type": "object" + }, + { + "properties": { + "changes": { + "items": { + "$ref": "#/definitions/FileUpdateChange" + }, + "type": "array" + }, + "id": { + "type": "string" + }, + "status": { + "$ref": "#/definitions/PatchApplyStatus" + }, + "type": { + "enum": [ + "fileChange" + ], + "title": "FileChangeThreadItemType", + "type": "string" + } + }, + "required": [ + "changes", + "id", + "status", + "type" + ], + "title": "FileChangeThreadItem", + "type": "object" + }, + { + "properties": { + "arguments": true, + "durationMs": { + "description": "The duration of the MCP tool call in milliseconds.", + "format": "int64", + "type": [ + "integer", + "null" + ] + }, + "error": { + "anyOf": [ + { + "$ref": "#/definitions/McpToolCallError" + }, + { + "type": "null" + } + ] + }, + "id": { + "type": "string" + }, + "mcpAppResourceUri": { + "type": [ + "string", + "null" + ] + }, + "pluginId": { + "type": [ + "string", + "null" + ] + }, + "result": { + "anyOf": [ + { + "$ref": "#/definitions/McpToolCallResult" + }, + { + "type": "null" + } + ] + }, + "server": { + "type": "string" + }, + "status": { + "$ref": "#/definitions/McpToolCallStatus" + }, + "tool": { + "type": "string" + }, + "type": { + "enum": [ + "mcpToolCall" + ], + "title": "McpToolCallThreadItemType", + "type": "string" + } + }, + "required": [ + "arguments", + "id", + "server", + "status", + "tool", + "type" + ], + "title": "McpToolCallThreadItem", + "type": "object" + }, + { + "properties": { + "arguments": true, + "contentItems": { + "items": { + "$ref": "#/definitions/DynamicToolCallOutputContentItem" + }, + "type": [ + "array", + "null" + ] + }, + "durationMs": { + "description": "The duration of the dynamic tool call in milliseconds.", + "format": "int64", + "type": [ + "integer", + "null" + ] + }, + "id": { + "type": "string" + }, + "namespace": { + "type": [ + "string", + "null" + ] + }, + "status": { + "$ref": "#/definitions/DynamicToolCallStatus" + }, + "success": { + "type": [ + "boolean", + "null" + ] + }, + "tool": { + "type": "string" + }, + "type": { + "enum": [ + "dynamicToolCall" + ], + "title": "DynamicToolCallThreadItemType", + "type": "string" + } + }, + "required": [ + "arguments", + "id", + "status", + "tool", + "type" + ], + "title": "DynamicToolCallThreadItem", + "type": "object" + }, + { + "properties": { + "agentsStates": { + "additionalProperties": { + "$ref": "#/definitions/CollabAgentState" + }, + "description": "Last known status of the target agents, when available.", + "type": "object" + }, + "id": { + "description": "Unique identifier for this collab tool call.", + "type": "string" + }, + "model": { + "description": "Model requested for the spawned agent, when applicable.", + "type": [ + "string", + "null" + ] + }, + "prompt": { + "description": "Prompt text sent as part of the collab tool call, when available.", + "type": [ + "string", + "null" + ] + }, + "reasoningEffort": { + "anyOf": [ + { + "$ref": "#/definitions/ReasoningEffort" + }, + { + "type": "null" + } + ], + "description": "Reasoning effort requested for the spawned agent, when applicable." + }, + "receiverThreadIds": { + "description": "Thread ID of the receiving agent, when applicable. In case of spawn operation, this corresponds to the newly spawned agent.", + "items": { + "type": "string" + }, + "type": "array" + }, + "senderThreadId": { + "description": "Thread ID of the agent issuing the collab request.", + "type": "string" + }, + "status": { + "allOf": [ + { + "$ref": "#/definitions/CollabAgentToolCallStatus" + } + ], + "description": "Current status of the collab tool call." + }, + "tool": { + "allOf": [ + { + "$ref": "#/definitions/CollabAgentTool" + } + ], + "description": "Name of the collab tool that was invoked." + }, + "type": { + "enum": [ + "collabAgentToolCall" + ], + "title": "CollabAgentToolCallThreadItemType", + "type": "string" + } + }, + "required": [ + "agentsStates", + "id", + "receiverThreadIds", + "senderThreadId", + "status", + "tool", + "type" + ], + "title": "CollabAgentToolCallThreadItem", + "type": "object" + }, + { + "properties": { + "action": { + "anyOf": [ + { + "$ref": "#/definitions/WebSearchAction" + }, + { + "type": "null" + } + ] + }, + "id": { + "type": "string" + }, + "query": { + "type": "string" + }, + "type": { + "enum": [ + "webSearch" + ], + "title": "WebSearchThreadItemType", + "type": "string" + } + }, + "required": [ + "id", + "query", + "type" + ], + "title": "WebSearchThreadItem", + "type": "object" + }, + { + "properties": { + "id": { + "type": "string" + }, + "path": { + "$ref": "#/definitions/AbsolutePathBuf" + }, + "type": { + "enum": [ + "imageView" + ], + "title": "ImageViewThreadItemType", + "type": "string" + } + }, + "required": [ + "id", + "path", + "type" + ], + "title": "ImageViewThreadItem", + "type": "object" + }, + { + "properties": { + "id": { + "type": "string" + }, + "result": { + "type": "string" + }, + "revisedPrompt": { + "type": [ + "string", + "null" + ] + }, + "savedPath": { + "anyOf": [ + { + "$ref": "#/definitions/AbsolutePathBuf" + }, + { + "type": "null" + } + ] + }, + "status": { + "type": "string" + }, + "type": { + "enum": [ + "imageGeneration" + ], + "title": "ImageGenerationThreadItemType", + "type": "string" + } + }, + "required": [ + "id", + "result", + "status", + "type" + ], + "title": "ImageGenerationThreadItem", + "type": "object" + }, + { + "properties": { + "id": { + "type": "string" + }, + "review": { + "type": "string" + }, + "type": { + "enum": [ + "enteredReviewMode" + ], + "title": "EnteredReviewModeThreadItemType", + "type": "string" + } + }, + "required": [ + "id", + "review", + "type" + ], + "title": "EnteredReviewModeThreadItem", + "type": "object" + }, + { + "properties": { + "id": { + "type": "string" + }, + "review": { + "type": "string" + }, + "type": { + "enum": [ + "exitedReviewMode" + ], + "title": "ExitedReviewModeThreadItemType", + "type": "string" + } + }, + "required": [ + "id", + "review", + "type" + ], + "title": "ExitedReviewModeThreadItem", + "type": "object" + }, + { + "properties": { + "id": { + "type": "string" + }, + "type": { + "enum": [ + "contextCompaction" + ], + "title": "ContextCompactionThreadItemType", + "type": "string" + } + }, + "required": [ + "id", + "type" + ], + "title": "ContextCompactionThreadItem", + "type": "object" + } + ] + }, + "UserInput": { + "oneOf": [ + { + "properties": { + "text": { + "type": "string" + }, + "text_elements": { + "default": [], + "description": "UI-defined spans within `text` used to render or persist special elements.", + "items": { + "$ref": "#/definitions/TextElement" + }, + "type": "array" + }, + "type": { + "enum": [ + "text" + ], + "title": "TextUserInputType", + "type": "string" + } + }, + "required": [ + "text", + "type" + ], + "title": "TextUserInput", + "type": "object" + }, + { + "properties": { + "detail": { + "anyOf": [ + { + "$ref": "#/definitions/ImageDetail" + }, + { + "type": "null" + } + ], + "default": null + }, + "type": { + "enum": [ + "image" + ], + "title": "ImageUserInputType", + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "type", + "url" + ], + "title": "ImageUserInput", + "type": "object" + }, + { + "properties": { + "detail": { + "anyOf": [ + { + "$ref": "#/definitions/ImageDetail" + }, + { + "type": "null" + } + ], + "default": null + }, + "path": { + "type": "string" + }, + "type": { + "enum": [ + "localImage" + ], + "title": "LocalImageUserInputType", + "type": "string" + } + }, + "required": [ + "path", + "type" + ], + "title": "LocalImageUserInput", + "type": "object" + }, + { + "properties": { + "name": { + "type": "string" + }, + "path": { + "type": "string" + }, + "type": { + "enum": [ + "skill" + ], + "title": "SkillUserInputType", + "type": "string" + } + }, + "required": [ + "name", + "path", + "type" + ], + "title": "SkillUserInput", + "type": "object" + }, + { + "properties": { + "name": { + "type": "string" + }, + "path": { + "type": "string" + }, + "type": { + "enum": [ + "mention" + ], + "title": "MentionUserInputType", + "type": "string" + } + }, + "required": [ + "name", + "path", + "type" + ], + "title": "MentionUserInput", + "type": "object" + } + ] + }, + "WebSearchAction": { + "oneOf": [ + { + "properties": { + "queries": { + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "query": { + "type": [ + "string", + "null" + ] + }, + "type": { + "enum": [ + "search" + ], + "title": "SearchWebSearchActionType", + "type": "string" + } + }, + "required": [ + "type" + ], + "title": "SearchWebSearchAction", + "type": "object" + }, + { + "properties": { + "type": { + "enum": [ + "openPage" + ], + "title": "OpenPageWebSearchActionType", + "type": "string" + }, + "url": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "type" + ], + "title": "OpenPageWebSearchAction", + "type": "object" + }, + { + "properties": { + "pattern": { + "type": [ + "string", + "null" + ] + }, + "type": { + "enum": [ + "findInPage" + ], + "title": "FindInPageWebSearchActionType", + "type": "string" + }, + "url": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "type" + ], + "title": "FindInPageWebSearchAction", + "type": "object" + }, + { + "properties": { + "type": { + "enum": [ + "other" + ], + "title": "OtherWebSearchActionType", + "type": "string" + } + }, + "required": [ + "type" + ], + "title": "OtherWebSearchAction", + "type": "object" + } + ] + } + }, + "properties": { + "backwardsCursor": { + "description": "Opaque cursor to pass as `cursor` when reversing `sortDirection`. This is only populated when the page contains at least one item.", + "type": [ + "string", + "null" + ] + }, + "data": { + "items": { + "$ref": "#/definitions/ThreadItem" + }, + "type": "array" + }, + "nextCursor": { + "description": "Opaque cursor to pass to the next call to continue after the last item. if None, there are no more items to return.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "data" + ], + "title": "ThreadTurnsItemsListResponse", + "type": "object" +} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadTurnsListParams.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadTurnsListParams.json new file mode 100644 index 00000000000..924b8a9a810 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadTurnsListParams.json @@ -0,0 +1,85 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "definitions": { + "SortDirection": { + "enum": [ + "asc", + "desc" + ], + "type": "string" + }, + "TurnItemsView": { + "oneOf": [ + { + "description": "`items` was not loaded for this turn. The field is intentionally empty.", + "enum": [ + "notLoaded" + ], + "type": "string" + }, + { + "description": "`items` contains only a display summary for this turn.", + "enum": [ + "summary" + ], + "type": "string" + }, + { + "description": "`items` contains every ThreadItem available from persisted app-server history for this turn.", + "enum": [ + "full" + ], + "type": "string" + } + ] + } + }, + "properties": { + "cursor": { + "description": "Opaque cursor to pass to the next call to continue after the last turn.", + "type": [ + "string", + "null" + ] + }, + "itemsView": { + "anyOf": [ + { + "$ref": "#/definitions/TurnItemsView" + }, + { + "type": "null" + } + ], + "description": "How much item detail to include for each returned turn; defaults to summary." + }, + "limit": { + "description": "Optional turn page size.", + "format": "uint32", + "minimum": 0.0, + "type": [ + "integer", + "null" + ] + }, + "sortDirection": { + "anyOf": [ + { + "$ref": "#/definitions/SortDirection" + }, + { + "type": "null" + } + ], + "description": "Optional turn pagination direction; defaults to descending." + }, + "threadId": { + "type": "string" + } + }, + "required": [ + "threadId" + ], + "title": "ThreadTurnsListParams", + "type": "object" +} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadTurnsListResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadTurnsListResponse.json new file mode 100644 index 00000000000..956d6de26d9 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadTurnsListResponse.json @@ -0,0 +1,1707 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "definitions": { + "AbsolutePathBuf": { + "description": "A path that is guaranteed to be absolute and normalized (though it is not guaranteed to be canonicalized or exist on the filesystem).\n\nIMPORTANT: When deserializing an `AbsolutePathBuf`, a base path must be set using [AbsolutePathBufGuard::new]. If no base path is set, the deserialization will fail unless the path being deserialized is already absolute.", + "type": "string" + }, + "ByteRange": { + "properties": { + "end": { + "format": "uint", + "minimum": 0.0, + "type": "integer" + }, + "start": { + "format": "uint", + "minimum": 0.0, + "type": "integer" + } + }, + "required": [ + "end", + "start" + ], + "type": "object" + }, + "CodexErrorInfo": { + "description": "This translation layer make sure that we expose codex error code in camel case.\n\nWhen an upstream HTTP status is available (for example, from the Responses API or a provider), it is forwarded in `httpStatusCode` on the relevant `codexErrorInfo` variant.", + "oneOf": [ + { + "enum": [ + "contextWindowExceeded", + "usageLimitExceeded", + "serverOverloaded", + "cyberPolicy", + "internalServerError", + "unauthorized", + "badRequest", + "threadRollbackFailed", + "sandboxError", + "other" + ], + "type": "string" + }, + { + "additionalProperties": false, + "properties": { + "httpConnectionFailed": { + "properties": { + "httpStatusCode": { + "format": "uint16", + "minimum": 0.0, + "type": [ + "integer", + "null" + ] + } + }, + "type": "object" + } + }, + "required": [ + "httpConnectionFailed" + ], + "title": "HttpConnectionFailedCodexErrorInfo", + "type": "object" + }, + { + "additionalProperties": false, + "description": "Failed to connect to the response SSE stream.", + "properties": { + "responseStreamConnectionFailed": { + "properties": { + "httpStatusCode": { + "format": "uint16", + "minimum": 0.0, + "type": [ + "integer", + "null" + ] + } + }, + "type": "object" + } + }, + "required": [ + "responseStreamConnectionFailed" + ], + "title": "ResponseStreamConnectionFailedCodexErrorInfo", + "type": "object" + }, + { + "additionalProperties": false, + "description": "The response SSE stream disconnected in the middle of a turn before completion.", + "properties": { + "responseStreamDisconnected": { + "properties": { + "httpStatusCode": { + "format": "uint16", + "minimum": 0.0, + "type": [ + "integer", + "null" + ] + } + }, + "type": "object" + } + }, + "required": [ + "responseStreamDisconnected" + ], + "title": "ResponseStreamDisconnectedCodexErrorInfo", + "type": "object" + }, + { + "additionalProperties": false, + "description": "Reached the retry limit for responses.", + "properties": { + "responseTooManyFailedAttempts": { + "properties": { + "httpStatusCode": { + "format": "uint16", + "minimum": 0.0, + "type": [ + "integer", + "null" + ] + } + }, + "type": "object" + } + }, + "required": [ + "responseTooManyFailedAttempts" + ], + "title": "ResponseTooManyFailedAttemptsCodexErrorInfo", + "type": "object" + }, + { + "additionalProperties": false, + "description": "Returned when `turn/start` or `turn/steer` is submitted while the current active turn cannot accept same-turn steering, for example `/review` or manual `/compact`.", + "properties": { + "activeTurnNotSteerable": { + "properties": { + "turnKind": { + "$ref": "#/definitions/NonSteerableTurnKind" + } + }, + "required": [ + "turnKind" + ], + "type": "object" + } + }, + "required": [ + "activeTurnNotSteerable" + ], + "title": "ActiveTurnNotSteerableCodexErrorInfo", + "type": "object" + } + ] + }, + "CollabAgentState": { + "properties": { + "message": { + "type": [ + "string", + "null" + ] + }, + "status": { + "$ref": "#/definitions/CollabAgentStatus" + } + }, + "required": [ + "status" + ], + "type": "object" + }, + "CollabAgentStatus": { + "enum": [ + "pendingInit", + "running", + "interrupted", + "completed", + "errored", + "shutdown", + "notFound" + ], + "type": "string" + }, + "CollabAgentTool": { + "enum": [ + "spawnAgent", + "sendInput", + "resumeAgent", + "wait", + "closeAgent" + ], + "type": "string" + }, + "CollabAgentToolCallStatus": { + "enum": [ + "inProgress", + "completed", + "failed" + ], + "type": "string" + }, + "CommandAction": { + "oneOf": [ + { + "properties": { + "command": { + "type": "string" + }, + "name": { + "type": "string" + }, + "path": { + "$ref": "#/definitions/AbsolutePathBuf" + }, + "type": { + "enum": [ + "read" + ], + "title": "ReadCommandActionType", + "type": "string" + } + }, + "required": [ + "command", + "name", + "path", + "type" + ], + "title": "ReadCommandAction", + "type": "object" + }, + { + "properties": { + "command": { + "type": "string" + }, + "path": { + "type": [ + "string", + "null" + ] + }, + "type": { + "enum": [ + "listFiles" + ], + "title": "ListFilesCommandActionType", + "type": "string" + } + }, + "required": [ + "command", + "type" + ], + "title": "ListFilesCommandAction", + "type": "object" + }, + { + "properties": { + "command": { + "type": "string" + }, + "path": { + "type": [ + "string", + "null" + ] + }, + "query": { + "type": [ + "string", + "null" + ] + }, + "type": { + "enum": [ + "search" + ], + "title": "SearchCommandActionType", + "type": "string" + } + }, + "required": [ + "command", + "type" + ], + "title": "SearchCommandAction", + "type": "object" + }, + { + "properties": { + "command": { + "type": "string" + }, + "type": { + "enum": [ + "unknown" + ], + "title": "UnknownCommandActionType", + "type": "string" + } + }, + "required": [ + "command", + "type" + ], + "title": "UnknownCommandAction", + "type": "object" + } + ] + }, + "CommandExecutionSource": { + "enum": [ + "agent", + "userShell", + "unifiedExecStartup", + "unifiedExecInteraction" + ], + "type": "string" + }, + "CommandExecutionStatus": { + "enum": [ + "inProgress", + "completed", + "failed", + "declined" + ], + "type": "string" + }, + "DynamicToolCallOutputContentItem": { + "oneOf": [ + { + "properties": { + "text": { + "type": "string" + }, + "type": { + "enum": [ + "inputText" + ], + "title": "InputTextDynamicToolCallOutputContentItemType", + "type": "string" + } + }, + "required": [ + "text", + "type" + ], + "title": "InputTextDynamicToolCallOutputContentItem", + "type": "object" + }, + { + "properties": { + "imageUrl": { + "type": "string" + }, + "type": { + "enum": [ + "inputImage" + ], + "title": "InputImageDynamicToolCallOutputContentItemType", + "type": "string" + } + }, + "required": [ + "imageUrl", + "type" + ], + "title": "InputImageDynamicToolCallOutputContentItem", + "type": "object" + } + ] + }, + "DynamicToolCallStatus": { + "enum": [ + "inProgress", + "completed", + "failed" + ], + "type": "string" + }, + "FileUpdateChange": { + "properties": { + "diff": { + "type": "string" + }, + "kind": { + "$ref": "#/definitions/PatchChangeKind" + }, + "path": { + "type": "string" + } + }, + "required": [ + "diff", + "kind", + "path" + ], + "type": "object" + }, + "HookPromptFragment": { + "properties": { + "hookRunId": { + "type": "string" + }, + "text": { + "type": "string" + } + }, + "required": [ + "hookRunId", + "text" + ], + "type": "object" + }, + "ImageDetail": { + "enum": [ + "high", + "original" + ], + "type": "string" + }, + "McpToolCallError": { + "properties": { + "message": { + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + }, + "McpToolCallResult": { + "properties": { + "_meta": true, + "content": { + "items": true, + "type": "array" + }, + "structuredContent": true + }, + "required": [ + "content" + ], + "type": "object" + }, + "McpToolCallStatus": { + "enum": [ + "inProgress", + "completed", + "failed" + ], + "type": "string" + }, + "MemoryCitation": { + "properties": { + "entries": { + "items": { + "$ref": "#/definitions/MemoryCitationEntry" + }, + "type": "array" + }, + "threadIds": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "entries", + "threadIds" + ], + "type": "object" + }, + "MemoryCitationEntry": { + "properties": { + "lineEnd": { + "format": "uint32", + "minimum": 0.0, + "type": "integer" + }, + "lineStart": { + "format": "uint32", + "minimum": 0.0, + "type": "integer" + }, + "note": { + "type": "string" + }, + "path": { + "type": "string" + } + }, + "required": [ + "lineEnd", + "lineStart", + "note", + "path" + ], + "type": "object" + }, + "MessagePhase": { + "description": "Classifies an assistant message as interim commentary or final answer text.\n\nProviders do not emit this consistently, so callers must treat `None` as \"phase unknown\" and keep compatibility behavior for legacy models.", + "oneOf": [ + { + "description": "Mid-turn assistant text (for example preamble/progress narration).\n\nAdditional tool calls or assistant output may follow before turn completion.", + "enum": [ + "commentary" + ], + "type": "string" + }, + { + "description": "The assistant's terminal answer text for the current turn.", + "enum": [ + "final_answer" + ], + "type": "string" + } + ] + }, + "NonSteerableTurnKind": { + "enum": [ + "review", + "compact" + ], + "type": "string" + }, + "PatchApplyStatus": { + "enum": [ + "inProgress", + "completed", + "failed", + "declined" + ], + "type": "string" + }, + "PatchChangeKind": { + "oneOf": [ + { + "properties": { + "type": { + "enum": [ + "add" + ], + "title": "AddPatchChangeKindType", + "type": "string" + } + }, + "required": [ + "type" + ], + "title": "AddPatchChangeKind", + "type": "object" + }, + { + "properties": { + "type": { + "enum": [ + "delete" + ], + "title": "DeletePatchChangeKindType", + "type": "string" + } + }, + "required": [ + "type" + ], + "title": "DeletePatchChangeKind", + "type": "object" + }, + { + "properties": { + "move_path": { + "type": [ + "string", + "null" + ] + }, + "type": { + "enum": [ + "update" + ], + "title": "UpdatePatchChangeKindType", + "type": "string" + } + }, + "required": [ + "type" + ], + "title": "UpdatePatchChangeKind", + "type": "object" + } + ] + }, + "ReasoningEffort": { + "description": "See https://platform.openai.com/docs/guides/reasoning?api-mode=responses#get-started-with-reasoning", + "enum": [ + "none", + "minimal", + "low", + "medium", + "high", + "xhigh" + ], + "type": "string" + }, + "TextElement": { + "properties": { + "byteRange": { + "allOf": [ + { + "$ref": "#/definitions/ByteRange" + } + ], + "description": "Byte range in the parent `text` buffer that this element occupies." + }, + "placeholder": { + "description": "Optional human-readable placeholder for the element, displayed in the UI.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "byteRange" + ], + "type": "object" + }, + "ThreadItem": { + "oneOf": [ + { + "properties": { + "content": { + "items": { + "$ref": "#/definitions/UserInput" + }, + "type": "array" + }, + "id": { + "type": "string" + }, + "type": { + "enum": [ + "userMessage" + ], + "title": "UserMessageThreadItemType", + "type": "string" + } + }, + "required": [ + "content", + "id", + "type" + ], + "title": "UserMessageThreadItem", + "type": "object" + }, + { + "properties": { + "fragments": { + "items": { + "$ref": "#/definitions/HookPromptFragment" + }, + "type": "array" + }, + "id": { + "type": "string" + }, + "type": { + "enum": [ + "hookPrompt" + ], + "title": "HookPromptThreadItemType", + "type": "string" + } + }, + "required": [ + "fragments", + "id", + "type" + ], + "title": "HookPromptThreadItem", + "type": "object" + }, + { + "properties": { + "id": { + "type": "string" + }, + "memoryCitation": { + "anyOf": [ + { + "$ref": "#/definitions/MemoryCitation" + }, + { + "type": "null" + } + ], + "default": null + }, + "phase": { + "anyOf": [ + { + "$ref": "#/definitions/MessagePhase" + }, + { + "type": "null" + } + ], + "default": null + }, + "text": { + "type": "string" + }, + "type": { + "enum": [ + "agentMessage" + ], + "title": "AgentMessageThreadItemType", + "type": "string" + } + }, + "required": [ + "id", + "text", + "type" + ], + "title": "AgentMessageThreadItem", + "type": "object" + }, + { + "description": "EXPERIMENTAL - proposed plan item content. The completed plan item is authoritative and may not match the concatenation of `PlanDelta` text.", + "properties": { + "id": { + "type": "string" + }, + "text": { + "type": "string" + }, + "type": { + "enum": [ + "plan" + ], + "title": "PlanThreadItemType", + "type": "string" + } + }, + "required": [ + "id", + "text", + "type" + ], + "title": "PlanThreadItem", + "type": "object" + }, + { + "properties": { + "content": { + "default": [], + "items": { + "type": "string" + }, + "type": "array" + }, + "id": { + "type": "string" + }, + "summary": { + "default": [], + "items": { + "type": "string" + }, + "type": "array" + }, + "type": { + "enum": [ + "reasoning" + ], + "title": "ReasoningThreadItemType", + "type": "string" + } + }, + "required": [ + "id", + "type" + ], + "title": "ReasoningThreadItem", + "type": "object" + }, + { + "properties": { + "aggregatedOutput": { + "description": "The command's output, aggregated from stdout and stderr.", + "type": [ + "string", + "null" + ] + }, + "command": { + "description": "The command to be executed.", + "type": "string" + }, + "commandActions": { + "description": "A best-effort parsing of the command to understand the action(s) it will perform. This returns a list of CommandAction objects because a single shell command may be composed of many commands piped together.", + "items": { + "$ref": "#/definitions/CommandAction" + }, + "type": "array" + }, + "cwd": { + "allOf": [ + { + "$ref": "#/definitions/AbsolutePathBuf" + } + ], + "description": "The command's working directory." + }, + "durationMs": { + "description": "The duration of the command execution in milliseconds.", + "format": "int64", + "type": [ + "integer", + "null" + ] + }, + "exitCode": { + "description": "The command's exit code.", + "format": "int32", + "type": [ + "integer", + "null" + ] + }, + "id": { + "type": "string" + }, + "processId": { + "description": "Identifier for the underlying PTY process (when available).", + "type": [ + "string", + "null" + ] + }, + "source": { + "allOf": [ + { + "$ref": "#/definitions/CommandExecutionSource" + } + ], + "default": "agent" + }, + "status": { + "$ref": "#/definitions/CommandExecutionStatus" + }, + "type": { + "enum": [ + "commandExecution" + ], + "title": "CommandExecutionThreadItemType", + "type": "string" + } + }, + "required": [ + "command", + "commandActions", + "cwd", + "id", + "status", + "type" + ], + "title": "CommandExecutionThreadItem", + "type": "object" + }, + { + "properties": { + "changes": { + "items": { + "$ref": "#/definitions/FileUpdateChange" + }, + "type": "array" + }, + "id": { + "type": "string" + }, + "status": { + "$ref": "#/definitions/PatchApplyStatus" + }, + "type": { + "enum": [ + "fileChange" + ], + "title": "FileChangeThreadItemType", + "type": "string" + } + }, + "required": [ + "changes", + "id", + "status", + "type" + ], + "title": "FileChangeThreadItem", + "type": "object" + }, + { + "properties": { + "arguments": true, + "durationMs": { + "description": "The duration of the MCP tool call in milliseconds.", + "format": "int64", + "type": [ + "integer", + "null" + ] + }, + "error": { + "anyOf": [ + { + "$ref": "#/definitions/McpToolCallError" + }, + { + "type": "null" + } + ] + }, + "id": { + "type": "string" + }, + "mcpAppResourceUri": { + "type": [ + "string", + "null" + ] + }, + "pluginId": { + "type": [ + "string", + "null" + ] + }, + "result": { + "anyOf": [ + { + "$ref": "#/definitions/McpToolCallResult" + }, + { + "type": "null" + } + ] + }, + "server": { + "type": "string" + }, + "status": { + "$ref": "#/definitions/McpToolCallStatus" + }, + "tool": { + "type": "string" + }, + "type": { + "enum": [ + "mcpToolCall" + ], + "title": "McpToolCallThreadItemType", + "type": "string" + } + }, + "required": [ + "arguments", + "id", + "server", + "status", + "tool", + "type" + ], + "title": "McpToolCallThreadItem", + "type": "object" + }, + { + "properties": { + "arguments": true, + "contentItems": { + "items": { + "$ref": "#/definitions/DynamicToolCallOutputContentItem" + }, + "type": [ + "array", + "null" + ] + }, + "durationMs": { + "description": "The duration of the dynamic tool call in milliseconds.", + "format": "int64", + "type": [ + "integer", + "null" + ] + }, + "id": { + "type": "string" + }, + "namespace": { + "type": [ + "string", + "null" + ] + }, + "status": { + "$ref": "#/definitions/DynamicToolCallStatus" + }, + "success": { + "type": [ + "boolean", + "null" + ] + }, + "tool": { + "type": "string" + }, + "type": { + "enum": [ + "dynamicToolCall" + ], + "title": "DynamicToolCallThreadItemType", + "type": "string" + } + }, + "required": [ + "arguments", + "id", + "status", + "tool", + "type" + ], + "title": "DynamicToolCallThreadItem", + "type": "object" + }, + { + "properties": { + "agentsStates": { + "additionalProperties": { + "$ref": "#/definitions/CollabAgentState" + }, + "description": "Last known status of the target agents, when available.", + "type": "object" + }, + "id": { + "description": "Unique identifier for this collab tool call.", + "type": "string" + }, + "model": { + "description": "Model requested for the spawned agent, when applicable.", + "type": [ + "string", + "null" + ] + }, + "prompt": { + "description": "Prompt text sent as part of the collab tool call, when available.", + "type": [ + "string", + "null" + ] + }, + "reasoningEffort": { + "anyOf": [ + { + "$ref": "#/definitions/ReasoningEffort" + }, + { + "type": "null" + } + ], + "description": "Reasoning effort requested for the spawned agent, when applicable." + }, + "receiverThreadIds": { + "description": "Thread ID of the receiving agent, when applicable. In case of spawn operation, this corresponds to the newly spawned agent.", + "items": { + "type": "string" + }, + "type": "array" + }, + "senderThreadId": { + "description": "Thread ID of the agent issuing the collab request.", + "type": "string" + }, + "status": { + "allOf": [ + { + "$ref": "#/definitions/CollabAgentToolCallStatus" + } + ], + "description": "Current status of the collab tool call." + }, + "tool": { + "allOf": [ + { + "$ref": "#/definitions/CollabAgentTool" + } + ], + "description": "Name of the collab tool that was invoked." + }, + "type": { + "enum": [ + "collabAgentToolCall" + ], + "title": "CollabAgentToolCallThreadItemType", + "type": "string" + } + }, + "required": [ + "agentsStates", + "id", + "receiverThreadIds", + "senderThreadId", + "status", + "tool", + "type" + ], + "title": "CollabAgentToolCallThreadItem", + "type": "object" + }, + { + "properties": { + "action": { + "anyOf": [ + { + "$ref": "#/definitions/WebSearchAction" + }, + { + "type": "null" + } + ] + }, + "id": { + "type": "string" + }, + "query": { + "type": "string" + }, + "type": { + "enum": [ + "webSearch" + ], + "title": "WebSearchThreadItemType", + "type": "string" + } + }, + "required": [ + "id", + "query", + "type" + ], + "title": "WebSearchThreadItem", + "type": "object" + }, + { + "properties": { + "id": { + "type": "string" + }, + "path": { + "$ref": "#/definitions/AbsolutePathBuf" + }, + "type": { + "enum": [ + "imageView" + ], + "title": "ImageViewThreadItemType", + "type": "string" + } + }, + "required": [ + "id", + "path", + "type" + ], + "title": "ImageViewThreadItem", + "type": "object" + }, + { + "properties": { + "id": { + "type": "string" + }, + "result": { + "type": "string" + }, + "revisedPrompt": { + "type": [ + "string", + "null" + ] + }, + "savedPath": { + "anyOf": [ + { + "$ref": "#/definitions/AbsolutePathBuf" + }, + { + "type": "null" + } + ] + }, + "status": { + "type": "string" + }, + "type": { + "enum": [ + "imageGeneration" + ], + "title": "ImageGenerationThreadItemType", + "type": "string" + } + }, + "required": [ + "id", + "result", + "status", + "type" + ], + "title": "ImageGenerationThreadItem", + "type": "object" + }, + { + "properties": { + "id": { + "type": "string" + }, + "review": { + "type": "string" + }, + "type": { + "enum": [ + "enteredReviewMode" + ], + "title": "EnteredReviewModeThreadItemType", + "type": "string" + } + }, + "required": [ + "id", + "review", + "type" + ], + "title": "EnteredReviewModeThreadItem", + "type": "object" + }, + { + "properties": { + "id": { + "type": "string" + }, + "review": { + "type": "string" + }, + "type": { + "enum": [ + "exitedReviewMode" + ], + "title": "ExitedReviewModeThreadItemType", + "type": "string" + } + }, + "required": [ + "id", + "review", + "type" + ], + "title": "ExitedReviewModeThreadItem", + "type": "object" + }, + { + "properties": { + "id": { + "type": "string" + }, + "type": { + "enum": [ + "contextCompaction" + ], + "title": "ContextCompactionThreadItemType", + "type": "string" + } + }, + "required": [ + "id", + "type" + ], + "title": "ContextCompactionThreadItem", + "type": "object" + } + ] + }, + "Turn": { + "properties": { + "completedAt": { + "description": "Unix timestamp (in seconds) when the turn completed.", + "format": "int64", + "type": [ + "integer", + "null" + ] + }, + "durationMs": { + "description": "Duration between turn start and completion in milliseconds, if known.", + "format": "int64", + "type": [ + "integer", + "null" + ] + }, + "error": { + "anyOf": [ + { + "$ref": "#/definitions/TurnError" + }, + { + "type": "null" + } + ], + "description": "Only populated when the Turn's status is failed." + }, + "id": { + "type": "string" + }, + "items": { + "description": "Thread items currently included in this turn payload.", + "items": { + "$ref": "#/definitions/ThreadItem" + }, + "type": "array" + }, + "itemsView": { + "allOf": [ + { + "$ref": "#/definitions/TurnItemsView" + } + ], + "default": "full", + "description": "Describes how much of `items` has been loaded for this turn." + }, + "startedAt": { + "description": "Unix timestamp (in seconds) when the turn started.", + "format": "int64", + "type": [ + "integer", + "null" + ] + }, + "status": { + "$ref": "#/definitions/TurnStatus" + } + }, + "required": [ + "id", + "items", + "status" + ], + "type": "object" + }, + "TurnError": { + "properties": { + "additionalDetails": { + "default": null, + "type": [ + "string", + "null" + ] + }, + "codexErrorInfo": { + "anyOf": [ + { + "$ref": "#/definitions/CodexErrorInfo" + }, + { + "type": "null" + } + ] + }, + "message": { + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + }, + "TurnItemsView": { + "oneOf": [ + { + "description": "`items` was not loaded for this turn. The field is intentionally empty.", + "enum": [ + "notLoaded" + ], + "type": "string" + }, + { + "description": "`items` contains only a display summary for this turn.", + "enum": [ + "summary" + ], + "type": "string" + }, + { + "description": "`items` contains every ThreadItem available from persisted app-server history for this turn.", + "enum": [ + "full" + ], + "type": "string" + } + ] + }, + "TurnStatus": { + "enum": [ + "completed", + "interrupted", + "failed", + "inProgress" + ], + "type": "string" + }, + "UserInput": { + "oneOf": [ + { + "properties": { + "text": { + "type": "string" + }, + "text_elements": { + "default": [], + "description": "UI-defined spans within `text` used to render or persist special elements.", + "items": { + "$ref": "#/definitions/TextElement" + }, + "type": "array" + }, + "type": { + "enum": [ + "text" + ], + "title": "TextUserInputType", + "type": "string" + } + }, + "required": [ + "text", + "type" + ], + "title": "TextUserInput", + "type": "object" + }, + { + "properties": { + "detail": { + "anyOf": [ + { + "$ref": "#/definitions/ImageDetail" + }, + { + "type": "null" + } + ], + "default": null + }, + "type": { + "enum": [ + "image" + ], + "title": "ImageUserInputType", + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "type", + "url" + ], + "title": "ImageUserInput", + "type": "object" + }, + { + "properties": { + "detail": { + "anyOf": [ + { + "$ref": "#/definitions/ImageDetail" + }, + { + "type": "null" + } + ], + "default": null + }, + "path": { + "type": "string" + }, + "type": { + "enum": [ + "localImage" + ], + "title": "LocalImageUserInputType", + "type": "string" + } + }, + "required": [ + "path", + "type" + ], + "title": "LocalImageUserInput", + "type": "object" + }, + { + "properties": { + "name": { + "type": "string" + }, + "path": { + "type": "string" + }, + "type": { + "enum": [ + "skill" + ], + "title": "SkillUserInputType", + "type": "string" + } + }, + "required": [ + "name", + "path", + "type" + ], + "title": "SkillUserInput", + "type": "object" + }, + { + "properties": { + "name": { + "type": "string" + }, + "path": { + "type": "string" + }, + "type": { + "enum": [ + "mention" + ], + "title": "MentionUserInputType", + "type": "string" + } + }, + "required": [ + "name", + "path", + "type" + ], + "title": "MentionUserInput", + "type": "object" + } + ] + }, + "WebSearchAction": { + "oneOf": [ + { + "properties": { + "queries": { + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "query": { + "type": [ + "string", + "null" + ] + }, + "type": { + "enum": [ + "search" + ], + "title": "SearchWebSearchActionType", + "type": "string" + } + }, + "required": [ + "type" + ], + "title": "SearchWebSearchAction", + "type": "object" + }, + { + "properties": { + "type": { + "enum": [ + "openPage" + ], + "title": "OpenPageWebSearchActionType", + "type": "string" + }, + "url": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "type" + ], + "title": "OpenPageWebSearchAction", + "type": "object" + }, + { + "properties": { + "pattern": { + "type": [ + "string", + "null" + ] + }, + "type": { + "enum": [ + "findInPage" + ], + "title": "FindInPageWebSearchActionType", + "type": "string" + }, + "url": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "type" + ], + "title": "FindInPageWebSearchAction", + "type": "object" + }, + { + "properties": { + "type": { + "enum": [ + "other" + ], + "title": "OtherWebSearchActionType", + "type": "string" + } + }, + "required": [ + "type" + ], + "title": "OtherWebSearchAction", + "type": "object" + } + ] + } + }, + "properties": { + "backwardsCursor": { + "description": "Opaque cursor to pass as `cursor` when reversing `sortDirection`. This is only populated when the page contains at least one turn. Use it with the opposite `sortDirection` to include the anchor turn again and catch updates to that turn.", + "type": [ + "string", + "null" + ] + }, + "data": { + "items": { + "$ref": "#/definitions/Turn" + }, + "type": "array" + }, + "nextCursor": { + "description": "Opaque cursor to pass to the next call to continue after the last turn. if None, there are no more turns to return.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "data" + ], + "title": "ThreadTurnsListResponse", + "type": "object" +} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/TurnStartParams.json b/codex-rs/app-server-protocol/schema/json/v2/TurnStartParams.json index ecea8f19979..859aadd496c 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/TurnStartParams.json +++ b/codex-rs/app-server-protocol/schema/json/v2/TurnStartParams.json @@ -5,6 +5,17 @@ "description": "A path that is guaranteed to be absolute and normalized (though it is not guaranteed to be canonicalized or exist on the filesystem).\n\nIMPORTANT: When deserializing an `AbsolutePathBuf`, a base path must be set using [AbsolutePathBufGuard::new]. If no base path is set, the deserialization will fail unless the path being deserialized is already absolute.", "type": "string" }, + "AdditionalContextEntry": { + "properties": { + "value": { + "type": "string" + } + }, + "required": [ + "value" + ], + "type": "object" + }, "ApprovalsReviewer": { "description": "Configures who approval requests are routed to for review. Examples include sandbox escapes, blocked network access, MCP approval prompts, and ARC escalations. Defaults to `user`. `auto_review` uses a carefully prompted subagent to gather relevant context and apply a risk-based decision framework before approving or denying the request. The legacy value `guardian_subagent` is accepted for compatibility.", "enum": [ @@ -470,6 +481,16 @@ } }, "properties": { + "additionalContext": { + "additionalProperties": { + "$ref": "#/definitions/AdditionalContextEntry" + }, + "description": "Optional client-provided context fragments keyed by an opaque source identifier.", + "type": [ + "object", + "null" + ] + }, "approvalPolicy": { "anyOf": [ { @@ -492,6 +513,17 @@ ], "description": "Override where approval requests are routed for review on this turn and subsequent turns." }, + "collaborationMode": { + "anyOf": [ + { + "$ref": "#/definitions/CollaborationMode" + }, + { + "type": "null" + } + ], + "description": "EXPERIMENTAL - Set a pre-set collaboration mode. Takes precedence over model, reasoning_effort, and developer instructions if set.\n\nFor `collaboration_mode.settings.developer_instructions`, `null` means \"use the built-in instructions for the selected mode\"." + }, "cwd": { "description": "Override the working directory for this turn and subsequent turns.", "type": [ @@ -510,6 +542,16 @@ ], "description": "Override the reasoning effort for this turn and subsequent turns." }, + "environments": { + "description": "Optional turn-scoped environments.\n\nOmitted uses the thread sticky environments. Empty disables environment access for this turn. Non-empty selects the first environment as the current turn environment for this turn.", + "items": { + "$ref": "#/definitions/TurnEnvironmentParams" + }, + "type": [ + "array", + "null" + ] + }, "input": { "items": { "$ref": "#/definitions/UserInput" @@ -526,6 +568,13 @@ "outputSchema": { "description": "Optional JSON Schema used to constrain the final assistant message for this turn." }, + "permissions": { + "description": "Select a named permissions profile id for this turn and subsequent turns. Cannot be combined with `sandboxPolicy`.", + "type": [ + "string", + "null" + ] + }, "personality": { "anyOf": [ { @@ -537,6 +586,26 @@ ], "description": "Override the personality for this turn and subsequent turns." }, + "responsesapiClientMetadata": { + "additionalProperties": { + "type": "string" + }, + "description": "Optional turn-scoped Responses API client metadata.", + "type": [ + "object", + "null" + ] + }, + "runtimeWorkspaceRoots": { + "description": "Replace the thread's runtime workspace roots for this turn and subsequent turns. Relative paths are resolved against the effective cwd for the turn.", + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, "sandboxPolicy": { "anyOf": [ { diff --git a/codex-rs/app-server-protocol/schema/json/v2/TurnSteerParams.json b/codex-rs/app-server-protocol/schema/json/v2/TurnSteerParams.json index 1b7cfbf4008..43ec9c4a408 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/TurnSteerParams.json +++ b/codex-rs/app-server-protocol/schema/json/v2/TurnSteerParams.json @@ -1,6 +1,17 @@ { "$schema": "http://json-schema.org/draft-07/schema#", "definitions": { + "AdditionalContextEntry": { + "properties": { + "value": { + "type": "string" + } + }, + "required": [ + "value" + ], + "type": "object" + }, "ByteRange": { "properties": { "end": { @@ -194,6 +205,16 @@ } }, "properties": { + "additionalContext": { + "additionalProperties": { + "$ref": "#/definitions/AdditionalContextEntry" + }, + "description": "Optional client-provided context fragments keyed by an opaque source identifier.", + "type": [ + "object", + "null" + ] + }, "expectedTurnId": { "description": "Required active turn id precondition. The request fails when it does not match the currently active turn.", "type": "string" @@ -204,6 +225,16 @@ }, "type": "array" }, + "responsesapiClientMetadata": { + "additionalProperties": { + "type": "string" + }, + "description": "Optional turn-scoped Responses API client metadata.", + "type": [ + "object", + "null" + ] + }, "threadId": { "type": "string" } diff --git a/codex-rs/app-server-protocol/schema/typescript/ClientRequest.ts b/codex-rs/app-server-protocol/schema/typescript/ClientRequest.ts index 86ba2cd171f..426ceabb945 100644 --- a/codex-rs/app-server-protocol/schema/typescript/ClientRequest.ts +++ b/codex-rs/app-server-protocol/schema/typescript/ClientRequest.ts @@ -2,6 +2,9 @@ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. import type { FuzzyFileSearchParams } from "./FuzzyFileSearchParams"; +import type { FuzzyFileSearchSessionStartParams } from "./FuzzyFileSearchSessionStartParams"; +import type { FuzzyFileSearchSessionStopParams } from "./FuzzyFileSearchSessionStopParams"; +import type { FuzzyFileSearchSessionUpdateParams } from "./FuzzyFileSearchSessionUpdateParams"; import type { GetAuthStatusParams } from "./GetAuthStatusParams"; import type { GetConversationSummaryParams } from "./GetConversationSummaryParams"; import type { GitDiffToRemoteParams } from "./GitDiffToRemoteParams"; @@ -9,6 +12,7 @@ import type { InitializeParams } from "./InitializeParams"; import type { RequestId } from "./RequestId"; import type { AppsListParams } from "./v2/AppsListParams"; import type { CancelLoginAccountParams } from "./v2/CancelLoginAccountParams"; +import type { CollaborationModeListParams } from "./v2/CollaborationModeListParams"; import type { CommandExecParams } from "./v2/CommandExecParams"; import type { CommandExecResizeParams } from "./v2/CommandExecResizeParams"; import type { CommandExecTerminateParams } from "./v2/CommandExecTerminateParams"; @@ -16,6 +20,7 @@ import type { CommandExecWriteParams } from "./v2/CommandExecWriteParams"; import type { ConfigBatchWriteParams } from "./v2/ConfigBatchWriteParams"; import type { ConfigReadParams } from "./v2/ConfigReadParams"; import type { ConfigValueWriteParams } from "./v2/ConfigValueWriteParams"; +import type { EnvironmentAddParams } from "./v2/EnvironmentAddParams"; import type { ExperimentalFeatureEnablementSetParams } from "./v2/ExperimentalFeatureEnablementSetParams"; import type { ExperimentalFeatureListParams } from "./v2/ExperimentalFeatureListParams"; import type { ExternalAgentConfigDetectParams } from "./v2/ExternalAgentConfigDetectParams"; @@ -40,6 +45,7 @@ import type { MarketplaceUpgradeParams } from "./v2/MarketplaceUpgradeParams"; import type { McpResourceReadParams } from "./v2/McpResourceReadParams"; import type { McpServerOauthLoginParams } from "./v2/McpServerOauthLoginParams"; import type { McpServerToolCallParams } from "./v2/McpServerToolCallParams"; +import type { MockExperimentalMethodParams } from "./v2/MockExperimentalMethodParams"; import type { ModelListParams } from "./v2/ModelListParams"; import type { ModelProviderCapabilitiesReadParams } from "./v2/ModelProviderCapabilitiesReadParams"; import type { PermissionProfileListParams } from "./v2/PermissionProfileListParams"; @@ -54,27 +60,44 @@ import type { PluginShareSaveParams } from "./v2/PluginShareSaveParams"; import type { PluginShareUpdateTargetsParams } from "./v2/PluginShareUpdateTargetsParams"; import type { PluginSkillReadParams } from "./v2/PluginSkillReadParams"; import type { PluginUninstallParams } from "./v2/PluginUninstallParams"; +import type { ProcessKillParams } from "./v2/ProcessKillParams"; +import type { ProcessResizePtyParams } from "./v2/ProcessResizePtyParams"; +import type { ProcessSpawnParams } from "./v2/ProcessSpawnParams"; +import type { ProcessWriteStdinParams } from "./v2/ProcessWriteStdinParams"; import type { ReviewStartParams } from "./v2/ReviewStartParams"; import type { SendAddCreditsNudgeEmailParams } from "./v2/SendAddCreditsNudgeEmailParams"; import type { SkillsConfigWriteParams } from "./v2/SkillsConfigWriteParams"; import type { SkillsListParams } from "./v2/SkillsListParams"; import type { ThreadApproveGuardianDeniedActionParams } from "./v2/ThreadApproveGuardianDeniedActionParams"; import type { ThreadArchiveParams } from "./v2/ThreadArchiveParams"; +import type { ThreadBackgroundTerminalsCleanParams } from "./v2/ThreadBackgroundTerminalsCleanParams"; import type { ThreadCompactStartParams } from "./v2/ThreadCompactStartParams"; +import type { ThreadDecrementElicitationParams } from "./v2/ThreadDecrementElicitationParams"; import type { ThreadForkParams } from "./v2/ThreadForkParams"; import type { ThreadGoalClearParams } from "./v2/ThreadGoalClearParams"; import type { ThreadGoalGetParams } from "./v2/ThreadGoalGetParams"; import type { ThreadGoalSetParams } from "./v2/ThreadGoalSetParams"; +import type { ThreadIncrementElicitationParams } from "./v2/ThreadIncrementElicitationParams"; import type { ThreadInjectItemsParams } from "./v2/ThreadInjectItemsParams"; import type { ThreadListParams } from "./v2/ThreadListParams"; import type { ThreadLoadedListParams } from "./v2/ThreadLoadedListParams"; +import type { ThreadMemoryModeSetParams } from "./v2/ThreadMemoryModeSetParams"; import type { ThreadMetadataUpdateParams } from "./v2/ThreadMetadataUpdateParams"; import type { ThreadReadParams } from "./v2/ThreadReadParams"; +import type { ThreadRealtimeAppendAudioParams } from "./v2/ThreadRealtimeAppendAudioParams"; +import type { ThreadRealtimeAppendTextParams } from "./v2/ThreadRealtimeAppendTextParams"; +import type { ThreadRealtimeListVoicesParams } from "./v2/ThreadRealtimeListVoicesParams"; +import type { ThreadRealtimeStartParams } from "./v2/ThreadRealtimeStartParams"; +import type { ThreadRealtimeStopParams } from "./v2/ThreadRealtimeStopParams"; import type { ThreadResumeParams } from "./v2/ThreadResumeParams"; import type { ThreadRollbackParams } from "./v2/ThreadRollbackParams"; +import type { ThreadSearchParams } from "./v2/ThreadSearchParams"; import type { ThreadSetNameParams } from "./v2/ThreadSetNameParams"; +import type { ThreadSettingsUpdateParams } from "./v2/ThreadSettingsUpdateParams"; import type { ThreadShellCommandParams } from "./v2/ThreadShellCommandParams"; import type { ThreadStartParams } from "./v2/ThreadStartParams"; +import type { ThreadTurnsItemsListParams } from "./v2/ThreadTurnsItemsListParams"; +import type { ThreadTurnsListParams } from "./v2/ThreadTurnsListParams"; import type { ThreadUnarchiveParams } from "./v2/ThreadUnarchiveParams"; import type { ThreadUnsubscribeParams } from "./v2/ThreadUnsubscribeParams"; import type { TurnInterruptParams } from "./v2/TurnInterruptParams"; @@ -85,4 +108,4 @@ import type { WindowsSandboxSetupStartParams } from "./v2/WindowsSandboxSetupSta /** * Request from the client to the server. */ -export type ClientRequest ={ "method": "initialize", id: RequestId, params: InitializeParams, } | { "method": "thread/start", id: RequestId, params: ThreadStartParams, } | { "method": "thread/resume", id: RequestId, params: ThreadResumeParams, } | { "method": "thread/fork", id: RequestId, params: ThreadForkParams, } | { "method": "thread/archive", id: RequestId, params: ThreadArchiveParams, } | { "method": "thread/unsubscribe", id: RequestId, params: ThreadUnsubscribeParams, } | { "method": "thread/name/set", id: RequestId, params: ThreadSetNameParams, } | { "method": "thread/goal/set", id: RequestId, params: ThreadGoalSetParams, } | { "method": "thread/goal/get", id: RequestId, params: ThreadGoalGetParams, } | { "method": "thread/goal/clear", id: RequestId, params: ThreadGoalClearParams, } | { "method": "thread/metadata/update", id: RequestId, params: ThreadMetadataUpdateParams, } | { "method": "thread/unarchive", id: RequestId, params: ThreadUnarchiveParams, } | { "method": "thread/compact/start", id: RequestId, params: ThreadCompactStartParams, } | { "method": "thread/shellCommand", id: RequestId, params: ThreadShellCommandParams, } | { "method": "thread/approveGuardianDeniedAction", id: RequestId, params: ThreadApproveGuardianDeniedActionParams, } | { "method": "thread/rollback", id: RequestId, params: ThreadRollbackParams, } | { "method": "thread/list", id: RequestId, params: ThreadListParams, } | { "method": "thread/loaded/list", id: RequestId, params: ThreadLoadedListParams, } | { "method": "thread/read", id: RequestId, params: ThreadReadParams, } | { "method": "thread/inject_items", id: RequestId, params: ThreadInjectItemsParams, } | { "method": "skills/list", id: RequestId, params: SkillsListParams, } | { "method": "hooks/list", id: RequestId, params: HooksListParams, } | { "method": "marketplace/add", id: RequestId, params: MarketplaceAddParams, } | { "method": "marketplace/remove", id: RequestId, params: MarketplaceRemoveParams, } | { "method": "marketplace/upgrade", id: RequestId, params: MarketplaceUpgradeParams, } | { "method": "plugin/list", id: RequestId, params: PluginListParams, } | { "method": "plugin/installed", id: RequestId, params: PluginInstalledParams, } | { "method": "plugin/read", id: RequestId, params: PluginReadParams, } | { "method": "plugin/skill/read", id: RequestId, params: PluginSkillReadParams, } | { "method": "plugin/share/save", id: RequestId, params: PluginShareSaveParams, } | { "method": "plugin/share/updateTargets", id: RequestId, params: PluginShareUpdateTargetsParams, } | { "method": "plugin/share/list", id: RequestId, params: PluginShareListParams, } | { "method": "plugin/share/checkout", id: RequestId, params: PluginShareCheckoutParams, } | { "method": "plugin/share/delete", id: RequestId, params: PluginShareDeleteParams, } | { "method": "app/list", id: RequestId, params: AppsListParams, } | { "method": "fs/readFile", id: RequestId, params: FsReadFileParams, } | { "method": "fs/writeFile", id: RequestId, params: FsWriteFileParams, } | { "method": "fs/createDirectory", id: RequestId, params: FsCreateDirectoryParams, } | { "method": "fs/getMetadata", id: RequestId, params: FsGetMetadataParams, } | { "method": "fs/readDirectory", id: RequestId, params: FsReadDirectoryParams, } | { "method": "fs/remove", id: RequestId, params: FsRemoveParams, } | { "method": "fs/copy", id: RequestId, params: FsCopyParams, } | { "method": "fs/watch", id: RequestId, params: FsWatchParams, } | { "method": "fs/unwatch", id: RequestId, params: FsUnwatchParams, } | { "method": "skills/config/write", id: RequestId, params: SkillsConfigWriteParams, } | { "method": "plugin/install", id: RequestId, params: PluginInstallParams, } | { "method": "plugin/uninstall", id: RequestId, params: PluginUninstallParams, } | { "method": "turn/start", id: RequestId, params: TurnStartParams, } | { "method": "turn/steer", id: RequestId, params: TurnSteerParams, } | { "method": "turn/interrupt", id: RequestId, params: TurnInterruptParams, } | { "method": "review/start", id: RequestId, params: ReviewStartParams, } | { "method": "model/list", id: RequestId, params: ModelListParams, } | { "method": "modelProvider/capabilities/read", id: RequestId, params: ModelProviderCapabilitiesReadParams, } | { "method": "experimentalFeature/list", id: RequestId, params: ExperimentalFeatureListParams, } | { "method": "permissionProfile/list", id: RequestId, params: PermissionProfileListParams, } | { "method": "experimentalFeature/enablement/set", id: RequestId, params: ExperimentalFeatureEnablementSetParams, } | { "method": "mcpServer/oauth/login", id: RequestId, params: McpServerOauthLoginParams, } | { "method": "config/mcpServer/reload", id: RequestId, params: undefined, } | { "method": "mcpServerStatus/list", id: RequestId, params: ListMcpServerStatusParams, } | { "method": "mcpServer/resource/read", id: RequestId, params: McpResourceReadParams, } | { "method": "mcpServer/tool/call", id: RequestId, params: McpServerToolCallParams, } | { "method": "windowsSandbox/setupStart", id: RequestId, params: WindowsSandboxSetupStartParams, } | { "method": "windowsSandbox/readiness", id: RequestId, params: undefined, } | { "method": "account/login/start", id: RequestId, params: LoginAccountParams, } | { "method": "account/login/cancel", id: RequestId, params: CancelLoginAccountParams, } | { "method": "account/logout", id: RequestId, params: undefined, } | { "method": "account/rateLimits/read", id: RequestId, params: undefined, } | { "method": "account/sendAddCreditsNudgeEmail", id: RequestId, params: SendAddCreditsNudgeEmailParams, } | { "method": "feedback/upload", id: RequestId, params: FeedbackUploadParams, } | { "method": "command/exec", id: RequestId, params: CommandExecParams, } | { "method": "command/exec/write", id: RequestId, params: CommandExecWriteParams, } | { "method": "command/exec/terminate", id: RequestId, params: CommandExecTerminateParams, } | { "method": "command/exec/resize", id: RequestId, params: CommandExecResizeParams, } | { "method": "config/read", id: RequestId, params: ConfigReadParams, } | { "method": "externalAgentConfig/detect", id: RequestId, params: ExternalAgentConfigDetectParams, } | { "method": "externalAgentConfig/import", id: RequestId, params: ExternalAgentConfigImportParams, } | { "method": "config/value/write", id: RequestId, params: ConfigValueWriteParams, } | { "method": "config/batchWrite", id: RequestId, params: ConfigBatchWriteParams, } | { "method": "configRequirements/read", id: RequestId, params: undefined, } | { "method": "account/read", id: RequestId, params: GetAccountParams, } | { "method": "getConversationSummary", id: RequestId, params: GetConversationSummaryParams, } | { "method": "gitDiffToRemote", id: RequestId, params: GitDiffToRemoteParams, } | { "method": "getAuthStatus", id: RequestId, params: GetAuthStatusParams, } | { "method": "fuzzyFileSearch", id: RequestId, params: FuzzyFileSearchParams, }; +export type ClientRequest = { "method": "initialize", id: RequestId, params: InitializeParams, } | { "method": "thread/start", id: RequestId, params: ThreadStartParams, } | { "method": "thread/resume", id: RequestId, params: ThreadResumeParams, } | { "method": "thread/fork", id: RequestId, params: ThreadForkParams, } | { "method": "thread/archive", id: RequestId, params: ThreadArchiveParams, } | { "method": "thread/unsubscribe", id: RequestId, params: ThreadUnsubscribeParams, } | { "method": "thread/increment_elicitation", id: RequestId, params: ThreadIncrementElicitationParams, } | { "method": "thread/decrement_elicitation", id: RequestId, params: ThreadDecrementElicitationParams, } | { "method": "thread/name/set", id: RequestId, params: ThreadSetNameParams, } | { "method": "thread/goal/set", id: RequestId, params: ThreadGoalSetParams, } | { "method": "thread/goal/get", id: RequestId, params: ThreadGoalGetParams, } | { "method": "thread/goal/clear", id: RequestId, params: ThreadGoalClearParams, } | { "method": "thread/metadata/update", id: RequestId, params: ThreadMetadataUpdateParams, } | { "method": "thread/settings/update", id: RequestId, params: ThreadSettingsUpdateParams, } | { "method": "thread/memoryMode/set", id: RequestId, params: ThreadMemoryModeSetParams, } | { "method": "memory/reset", id: RequestId, params: undefined, } | { "method": "thread/unarchive", id: RequestId, params: ThreadUnarchiveParams, } | { "method": "thread/compact/start", id: RequestId, params: ThreadCompactStartParams, } | { "method": "thread/shellCommand", id: RequestId, params: ThreadShellCommandParams, } | { "method": "thread/approveGuardianDeniedAction", id: RequestId, params: ThreadApproveGuardianDeniedActionParams, } | { "method": "thread/backgroundTerminals/clean", id: RequestId, params: ThreadBackgroundTerminalsCleanParams, } | { "method": "thread/rollback", id: RequestId, params: ThreadRollbackParams, } | { "method": "thread/list", id: RequestId, params: ThreadListParams, } | { "method": "thread/search", id: RequestId, params: ThreadSearchParams, } | { "method": "thread/loaded/list", id: RequestId, params: ThreadLoadedListParams, } | { "method": "thread/read", id: RequestId, params: ThreadReadParams, } | { "method": "thread/turns/list", id: RequestId, params: ThreadTurnsListParams, } | { "method": "thread/turns/items/list", id: RequestId, params: ThreadTurnsItemsListParams, } | { "method": "thread/inject_items", id: RequestId, params: ThreadInjectItemsParams, } | { "method": "skills/list", id: RequestId, params: SkillsListParams, } | { "method": "hooks/list", id: RequestId, params: HooksListParams, } | { "method": "marketplace/add", id: RequestId, params: MarketplaceAddParams, } | { "method": "marketplace/remove", id: RequestId, params: MarketplaceRemoveParams, } | { "method": "marketplace/upgrade", id: RequestId, params: MarketplaceUpgradeParams, } | { "method": "plugin/list", id: RequestId, params: PluginListParams, } | { "method": "plugin/installed", id: RequestId, params: PluginInstalledParams, } | { "method": "plugin/read", id: RequestId, params: PluginReadParams, } | { "method": "plugin/skill/read", id: RequestId, params: PluginSkillReadParams, } | { "method": "plugin/share/save", id: RequestId, params: PluginShareSaveParams, } | { "method": "plugin/share/updateTargets", id: RequestId, params: PluginShareUpdateTargetsParams, } | { "method": "plugin/share/list", id: RequestId, params: PluginShareListParams, } | { "method": "plugin/share/checkout", id: RequestId, params: PluginShareCheckoutParams, } | { "method": "plugin/share/delete", id: RequestId, params: PluginShareDeleteParams, } | { "method": "app/list", id: RequestId, params: AppsListParams, } | { "method": "fs/readFile", id: RequestId, params: FsReadFileParams, } | { "method": "fs/writeFile", id: RequestId, params: FsWriteFileParams, } | { "method": "fs/createDirectory", id: RequestId, params: FsCreateDirectoryParams, } | { "method": "fs/getMetadata", id: RequestId, params: FsGetMetadataParams, } | { "method": "fs/readDirectory", id: RequestId, params: FsReadDirectoryParams, } | { "method": "fs/remove", id: RequestId, params: FsRemoveParams, } | { "method": "fs/copy", id: RequestId, params: FsCopyParams, } | { "method": "fs/watch", id: RequestId, params: FsWatchParams, } | { "method": "fs/unwatch", id: RequestId, params: FsUnwatchParams, } | { "method": "skills/config/write", id: RequestId, params: SkillsConfigWriteParams, } | { "method": "plugin/install", id: RequestId, params: PluginInstallParams, } | { "method": "plugin/uninstall", id: RequestId, params: PluginUninstallParams, } | { "method": "turn/start", id: RequestId, params: TurnStartParams, } | { "method": "turn/steer", id: RequestId, params: TurnSteerParams, } | { "method": "turn/interrupt", id: RequestId, params: TurnInterruptParams, } | { "method": "thread/realtime/start", id: RequestId, params: ThreadRealtimeStartParams, } | { "method": "thread/realtime/appendAudio", id: RequestId, params: ThreadRealtimeAppendAudioParams, } | { "method": "thread/realtime/appendText", id: RequestId, params: ThreadRealtimeAppendTextParams, } | { "method": "thread/realtime/stop", id: RequestId, params: ThreadRealtimeStopParams, } | { "method": "thread/realtime/listVoices", id: RequestId, params: ThreadRealtimeListVoicesParams, } | { "method": "review/start", id: RequestId, params: ReviewStartParams, } | { "method": "model/list", id: RequestId, params: ModelListParams, } | { "method": "modelProvider/capabilities/read", id: RequestId, params: ModelProviderCapabilitiesReadParams, } | { "method": "experimentalFeature/list", id: RequestId, params: ExperimentalFeatureListParams, } | { "method": "permissionProfile/list", id: RequestId, params: PermissionProfileListParams, } | { "method": "experimentalFeature/enablement/set", id: RequestId, params: ExperimentalFeatureEnablementSetParams, } | { "method": "remoteControl/enable", id: RequestId, params: undefined, } | { "method": "remoteControl/disable", id: RequestId, params: undefined, } | { "method": "remoteControl/status/read", id: RequestId, params: undefined, } | { "method": "collaborationMode/list", id: RequestId, params: CollaborationModeListParams, } | { "method": "mock/experimentalMethod", id: RequestId, params: MockExperimentalMethodParams, } | { "method": "environment/add", id: RequestId, params: EnvironmentAddParams, } | { "method": "mcpServer/oauth/login", id: RequestId, params: McpServerOauthLoginParams, } | { "method": "config/mcpServer/reload", id: RequestId, params: undefined, } | { "method": "mcpServerStatus/list", id: RequestId, params: ListMcpServerStatusParams, } | { "method": "mcpServer/resource/read", id: RequestId, params: McpResourceReadParams, } | { "method": "mcpServer/tool/call", id: RequestId, params: McpServerToolCallParams, } | { "method": "windowsSandbox/setupStart", id: RequestId, params: WindowsSandboxSetupStartParams, } | { "method": "windowsSandbox/readiness", id: RequestId, params: undefined, } | { "method": "account/login/start", id: RequestId, params: LoginAccountParams, } | { "method": "account/login/cancel", id: RequestId, params: CancelLoginAccountParams, } | { "method": "account/logout", id: RequestId, params: undefined, } | { "method": "account/rateLimits/read", id: RequestId, params: undefined, } | { "method": "account/sendAddCreditsNudgeEmail", id: RequestId, params: SendAddCreditsNudgeEmailParams, } | { "method": "feedback/upload", id: RequestId, params: FeedbackUploadParams, } | { "method": "command/exec", id: RequestId, params: CommandExecParams, } | { "method": "command/exec/write", id: RequestId, params: CommandExecWriteParams, } | { "method": "command/exec/terminate", id: RequestId, params: CommandExecTerminateParams, } | { "method": "command/exec/resize", id: RequestId, params: CommandExecResizeParams, } | { "method": "process/spawn", id: RequestId, params: ProcessSpawnParams, } | { "method": "process/writeStdin", id: RequestId, params: ProcessWriteStdinParams, } | { "method": "process/kill", id: RequestId, params: ProcessKillParams, } | { "method": "process/resizePty", id: RequestId, params: ProcessResizePtyParams, } | { "method": "config/read", id: RequestId, params: ConfigReadParams, } | { "method": "externalAgentConfig/detect", id: RequestId, params: ExternalAgentConfigDetectParams, } | { "method": "externalAgentConfig/import", id: RequestId, params: ExternalAgentConfigImportParams, } | { "method": "config/value/write", id: RequestId, params: ConfigValueWriteParams, } | { "method": "config/batchWrite", id: RequestId, params: ConfigBatchWriteParams, } | { "method": "configRequirements/read", id: RequestId, params: undefined, } | { "method": "account/read", id: RequestId, params: GetAccountParams, } | { "method": "getConversationSummary", id: RequestId, params: GetConversationSummaryParams, } | { "method": "gitDiffToRemote", id: RequestId, params: GitDiffToRemoteParams, } | { "method": "getAuthStatus", id: RequestId, params: GetAuthStatusParams, } | { "method": "fuzzyFileSearch", id: RequestId, params: FuzzyFileSearchParams, } | { "method": "fuzzyFileSearch/sessionStart", id: RequestId, params: FuzzyFileSearchSessionStartParams, } | { "method": "fuzzyFileSearch/sessionUpdate", id: RequestId, params: FuzzyFileSearchSessionUpdateParams, } | { "method": "fuzzyFileSearch/sessionStop", id: RequestId, params: FuzzyFileSearchSessionStopParams, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/FuzzyFileSearchSessionStartParams.ts b/codex-rs/app-server-protocol/schema/typescript/FuzzyFileSearchSessionStartParams.ts new file mode 100644 index 00000000000..a43d64ce8be --- /dev/null +++ b/codex-rs/app-server-protocol/schema/typescript/FuzzyFileSearchSessionStartParams.ts @@ -0,0 +1,5 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +export type FuzzyFileSearchSessionStartParams = { sessionId: string, roots: Array, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/FuzzyFileSearchSessionStartResponse.ts b/codex-rs/app-server-protocol/schema/typescript/FuzzyFileSearchSessionStartResponse.ts new file mode 100644 index 00000000000..cfe1399b75c --- /dev/null +++ b/codex-rs/app-server-protocol/schema/typescript/FuzzyFileSearchSessionStartResponse.ts @@ -0,0 +1,5 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +export type FuzzyFileSearchSessionStartResponse = Record; diff --git a/codex-rs/app-server-protocol/schema/typescript/FuzzyFileSearchSessionStopParams.ts b/codex-rs/app-server-protocol/schema/typescript/FuzzyFileSearchSessionStopParams.ts new file mode 100644 index 00000000000..c65613e5604 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/typescript/FuzzyFileSearchSessionStopParams.ts @@ -0,0 +1,5 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +export type FuzzyFileSearchSessionStopParams = { sessionId: string, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/FuzzyFileSearchSessionStopResponse.ts b/codex-rs/app-server-protocol/schema/typescript/FuzzyFileSearchSessionStopResponse.ts new file mode 100644 index 00000000000..a3500fb00c6 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/typescript/FuzzyFileSearchSessionStopResponse.ts @@ -0,0 +1,5 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +export type FuzzyFileSearchSessionStopResponse = Record; diff --git a/codex-rs/app-server-protocol/schema/typescript/FuzzyFileSearchSessionUpdateParams.ts b/codex-rs/app-server-protocol/schema/typescript/FuzzyFileSearchSessionUpdateParams.ts new file mode 100644 index 00000000000..888d4689fb6 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/typescript/FuzzyFileSearchSessionUpdateParams.ts @@ -0,0 +1,5 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +export type FuzzyFileSearchSessionUpdateParams = { sessionId: string, query: string, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/FuzzyFileSearchSessionUpdateResponse.ts b/codex-rs/app-server-protocol/schema/typescript/FuzzyFileSearchSessionUpdateResponse.ts new file mode 100644 index 00000000000..54b8701656d --- /dev/null +++ b/codex-rs/app-server-protocol/schema/typescript/FuzzyFileSearchSessionUpdateResponse.ts @@ -0,0 +1,5 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +export type FuzzyFileSearchSessionUpdateResponse = Record; diff --git a/codex-rs/app-server-protocol/schema/typescript/index.ts b/codex-rs/app-server-protocol/schema/typescript/index.ts index 8be75af546f..0748d79e457 100644 --- a/codex-rs/app-server-protocol/schema/typescript/index.ts +++ b/codex-rs/app-server-protocol/schema/typescript/index.ts @@ -25,6 +25,12 @@ export type { FuzzyFileSearchParams } from "./FuzzyFileSearchParams"; export type { FuzzyFileSearchResponse } from "./FuzzyFileSearchResponse"; export type { FuzzyFileSearchResult } from "./FuzzyFileSearchResult"; export type { FuzzyFileSearchSessionCompletedNotification } from "./FuzzyFileSearchSessionCompletedNotification"; +export type { FuzzyFileSearchSessionStartParams } from "./FuzzyFileSearchSessionStartParams"; +export type { FuzzyFileSearchSessionStartResponse } from "./FuzzyFileSearchSessionStartResponse"; +export type { FuzzyFileSearchSessionStopParams } from "./FuzzyFileSearchSessionStopParams"; +export type { FuzzyFileSearchSessionStopResponse } from "./FuzzyFileSearchSessionStopResponse"; +export type { FuzzyFileSearchSessionUpdateParams } from "./FuzzyFileSearchSessionUpdateParams"; +export type { FuzzyFileSearchSessionUpdateResponse } from "./FuzzyFileSearchSessionUpdateResponse"; export type { FuzzyFileSearchSessionUpdatedNotification } from "./FuzzyFileSearchSessionUpdatedNotification"; export type { GetAuthStatusParams } from "./GetAuthStatusParams"; export type { GetAuthStatusResponse } from "./GetAuthStatusResponse"; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/AdditionalContextEntry.ts b/codex-rs/app-server-protocol/schema/typescript/v2/AdditionalContextEntry.ts new file mode 100644 index 00000000000..cee8d9909e4 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/typescript/v2/AdditionalContextEntry.ts @@ -0,0 +1,5 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +export type AdditionalContextEntry = { value: string, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/CollaborationModeListParams.ts b/codex-rs/app-server-protocol/schema/typescript/v2/CollaborationModeListParams.ts new file mode 100644 index 00000000000..37e8f792d95 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/typescript/v2/CollaborationModeListParams.ts @@ -0,0 +1,8 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +/** + * EXPERIMENTAL - list collaboration mode presets. + */ +export type CollaborationModeListParams = Record; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/CollaborationModeListResponse.ts b/codex-rs/app-server-protocol/schema/typescript/v2/CollaborationModeListResponse.ts new file mode 100644 index 00000000000..5da935b9aba --- /dev/null +++ b/codex-rs/app-server-protocol/schema/typescript/v2/CollaborationModeListResponse.ts @@ -0,0 +1,9 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. +import type { CollaborationModeMask } from "./CollaborationModeMask"; + +/** + * EXPERIMENTAL - collaboration mode presets response. + */ +export type CollaborationModeListResponse = { data: Array, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/CommandExecParams.ts b/codex-rs/app-server-protocol/schema/typescript/v2/CommandExecParams.ts index 221a2399c15..91a917aaa73 100644 --- a/codex-rs/app-server-protocol/schema/typescript/v2/CommandExecParams.ts +++ b/codex-rs/app-server-protocol/schema/typescript/v2/CommandExecParams.ts @@ -12,10 +12,12 @@ import type { SandboxPolicy } from "./SandboxPolicy"; * sent only after all `command/exec/outputDelta` notifications for that * connection have been emitted. */ -export type CommandExecParams = {/** +export type CommandExecParams = { +/** * Command argv vector. Empty arrays are rejected. */ -command: Array, /** +command: Array, +/** * Optional client-supplied, connection-scoped process id. * * Required for `tty`, `streamStdin`, `streamStdoutStderr`, and follow-up @@ -23,63 +25,81 @@ command: Array, /** * `command/exec/terminate` calls. When omitted, buffered execution gets an * internal id that is not exposed to the client. */ -processId?: string | null, /** +processId?: string | null, +/** * Enable PTY mode. * * This implies `streamStdin` and `streamStdoutStderr`. */ -tty?: boolean, /** +tty?: boolean, +/** * Allow follow-up `command/exec/write` requests to write stdin bytes. * * Requires a client-supplied `processId`. */ -streamStdin?: boolean, /** +streamStdin?: boolean, +/** * Stream stdout/stderr via `command/exec/outputDelta` notifications. * * Streamed bytes are not duplicated into the final response and require a * client-supplied `processId`. */ -streamStdoutStderr?: boolean, /** +streamStdoutStderr?: boolean, +/** * Optional per-stream stdout/stderr capture cap in bytes. * * When omitted, the server default applies. Cannot be combined with * `disableOutputCap`. */ -outputBytesCap?: number | null, /** +outputBytesCap?: number | null, +/** * Disable stdout/stderr capture truncation for this request. * * Cannot be combined with `outputBytesCap`. */ -disableOutputCap?: boolean, /** +disableOutputCap?: boolean, +/** * Disable the timeout entirely for this request. * * Cannot be combined with `timeoutMs`. */ -disableTimeout?: boolean, /** +disableTimeout?: boolean, +/** * Optional timeout in milliseconds. * * When omitted, the server default applies. Cannot be combined with * `disableTimeout`. */ -timeoutMs?: number | null, /** +timeoutMs?: number | null, +/** * Optional working directory. Defaults to the server cwd. */ -cwd?: string | null, /** +cwd?: string | null, +/** * Optional environment overrides merged into the server-computed * environment. * * Matching names override inherited values. Set a key to `null` to unset * an inherited variable. */ -env?: { [key in string]?: string | null } | null, /** +env?: { [key in string]?: string | null } | null, +/** * Optional initial PTY size in character cells. Only valid when `tty` is * true. */ -size?: CommandExecTerminalSize | null, /** +size?: CommandExecTerminalSize | null, +/** * Optional sandbox policy for this command. * * Uses the same shape as thread/turn execution sandbox configuration and * defaults to the user's configured policy when omitted. Cannot be * combined with `permissionProfile`. */ -sandboxPolicy?: SandboxPolicy | null}; +sandboxPolicy?: SandboxPolicy | null, +/** + * Optional active permissions profile id for this command. + * + * Defaults to the user's configured permissions when omitted. Cannot be + * combined with `sandboxPolicy`. + */ +permissionProfile?: string | null, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/CommandExecutionRequestApprovalParams.ts b/codex-rs/app-server-protocol/schema/typescript/v2/CommandExecutionRequestApprovalParams.ts index 0e9100836a6..824e985021f 100644 --- a/codex-rs/app-server-protocol/schema/typescript/v2/CommandExecutionRequestApprovalParams.ts +++ b/codex-rs/app-server-protocol/schema/typescript/v2/CommandExecutionRequestApprovalParams.ts @@ -2,15 +2,19 @@ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. import type { AbsolutePathBuf } from "../AbsolutePathBuf"; +import type { AdditionalPermissionProfile } from "./AdditionalPermissionProfile"; import type { CommandAction } from "./CommandAction"; +import type { CommandExecutionApprovalDecision } from "./CommandExecutionApprovalDecision"; import type { ExecPolicyAmendment } from "./ExecPolicyAmendment"; import type { NetworkApprovalContext } from "./NetworkApprovalContext"; import type { NetworkPolicyAmendment } from "./NetworkPolicyAmendment"; -export type CommandExecutionRequestApprovalParams = {threadId: string, turnId: string, itemId: string, /** +export type CommandExecutionRequestApprovalParams = { threadId: string, turnId: string, itemId: string, +/** * Unix timestamp (in milliseconds) when this approval request started. */ -startedAtMs: number, /** +startedAtMs: number, +/** * Unique identifier for this specific approval callback. * * For regular shell/unified_exec approvals, this is null. @@ -19,25 +23,40 @@ startedAtMs: number, /** * one parent `itemId`, so `approvalId` is a distinct opaque callback id * (a UUID) used to disambiguate routing. */ -approvalId?: string | null, /** +approvalId?: string | null, +/** * Optional explanatory reason (e.g. request for network access). */ -reason?: string | null, /** +reason?: string | null, +/** * Optional context for a managed-network approval prompt. */ -networkApprovalContext?: NetworkApprovalContext | null, /** +networkApprovalContext?: NetworkApprovalContext | null, +/** * The command to be executed. */ -command?: string | null, /** +command?: string | null, +/** * The command's working directory. */ -cwd?: AbsolutePathBuf | null, /** +cwd?: AbsolutePathBuf | null, +/** * Best-effort parsed command actions for friendly display. */ -commandActions?: Array | null, /** +commandActions?: Array | null, +/** + * Optional additional permissions requested for this command. + */ +additionalPermissions?: AdditionalPermissionProfile | null, +/** * Optional proposed execpolicy amendment to allow similar commands without prompting. */ -proposedExecpolicyAmendment?: ExecPolicyAmendment | null, /** +proposedExecpolicyAmendment?: ExecPolicyAmendment | null, +/** * Optional proposed network policy amendments (allow/deny host) for future requests. */ -proposedNetworkPolicyAmendments?: Array | null}; +proposedNetworkPolicyAmendments?: Array | null, +/** + * Ordered list of decisions the client may present for this prompt. + */ +availableDecisions?: Array | null, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/Config.ts b/codex-rs/app-server-protocol/schema/typescript/v2/Config.ts index cc15fb4e720..2b38ecafa34 100644 --- a/codex-rs/app-server-protocol/schema/typescript/v2/Config.ts +++ b/codex-rs/app-server-protocol/schema/typescript/v2/Config.ts @@ -10,14 +10,16 @@ import type { WebSearchMode } from "../WebSearchMode"; import type { JsonValue } from "../serde_json/JsonValue"; import type { AnalyticsConfig } from "./AnalyticsConfig"; import type { ApprovalsReviewer } from "./ApprovalsReviewer"; +import type { AppsConfig } from "./AppsConfig"; import type { AskForApproval } from "./AskForApproval"; import type { ForcedChatgptWorkspaceIds } from "./ForcedChatgptWorkspaceIds"; import type { SandboxMode } from "./SandboxMode"; import type { SandboxWorkspaceWrite } from "./SandboxWorkspaceWrite"; import type { ToolsV2 } from "./ToolsV2"; -export type Config = {model: string | null, review_model: string | null, model_context_window: bigint | null, model_auto_compact_token_limit: bigint | null, model_auto_compact_token_limit_scope: AutoCompactTokenLimitScope | null, model_provider: string | null, approval_policy: AskForApproval | null, /** +export type Config = { model: string | null, review_model: string | null, model_context_window: bigint | null, model_auto_compact_token_limit: bigint | null, model_auto_compact_token_limit_scope: AutoCompactTokenLimitScope | null, model_provider: string | null, approval_policy: AskForApproval | null, +/** * [UNSTABLE] Optional default for where approval requests are routed for * review. */ -approvals_reviewer: ApprovalsReviewer | null, sandbox_mode: SandboxMode | null, sandbox_workspace_write: SandboxWorkspaceWrite | null, forced_chatgpt_workspace_id: ForcedChatgptWorkspaceIds | null, forced_login_method: ForcedLoginMethod | null, web_search: WebSearchMode | null, tools: ToolsV2 | null, instructions: string | null, developer_instructions: string | null, compact_prompt: string | null, model_reasoning_effort: ReasoningEffort | null, model_reasoning_summary: ReasoningSummary | null, model_verbosity: Verbosity | null, service_tier: string | null, analytics: AnalyticsConfig | null, desktop: { [key in string]?: JsonValue } | null} & ({ [key in string]?: number | string | boolean | Array | { [key in string]?: JsonValue } | null }); +approvals_reviewer: ApprovalsReviewer | null, sandbox_mode: SandboxMode | null, sandbox_workspace_write: SandboxWorkspaceWrite | null, forced_chatgpt_workspace_id: ForcedChatgptWorkspaceIds | null, forced_login_method: ForcedLoginMethod | null, web_search: WebSearchMode | null, tools: ToolsV2 | null, instructions: string | null, developer_instructions: string | null, compact_prompt: string | null, model_reasoning_effort: ReasoningEffort | null, model_reasoning_summary: ReasoningSummary | null, model_verbosity: Verbosity | null, service_tier: string | null, analytics: AnalyticsConfig | null, apps: AppsConfig | null, desktop: { [key in string]?: JsonValue } | null, } & ({ [key in string]?: number | string | boolean | Array | { [key in string]?: JsonValue } | null }); diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ConfigRequirements.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ConfigRequirements.ts index c5f3895866a..57f7d066da4 100644 --- a/codex-rs/app-server-protocol/schema/typescript/v2/ConfigRequirements.ts +++ b/codex-rs/app-server-protocol/schema/typescript/v2/ConfigRequirements.ts @@ -2,9 +2,12 @@ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. import type { WebSearchMode } from "../WebSearchMode"; +import type { ApprovalsReviewer } from "./ApprovalsReviewer"; import type { AskForApproval } from "./AskForApproval"; import type { ComputerUseRequirements } from "./ComputerUseRequirements"; +import type { ManagedHooksRequirements } from "./ManagedHooksRequirements"; +import type { NetworkRequirements } from "./NetworkRequirements"; import type { ResidencyRequirement } from "./ResidencyRequirement"; import type { SandboxMode } from "./SandboxMode"; -export type ConfigRequirements = {allowedApprovalPolicies: Array | null, allowedSandboxModes: Array | null, allowedPermissions: Array | null, allowedWebSearchModes: Array | null, allowManagedHooksOnly: boolean | null, allowAppshots: boolean | null, computerUse: ComputerUseRequirements | null, featureRequirements: { [key in string]?: boolean } | null, enforceResidency: ResidencyRequirement | null}; +export type ConfigRequirements = { allowedApprovalPolicies: Array | null, allowedApprovalsReviewers: Array | null, allowedSandboxModes: Array | null, allowedPermissions: Array | null, allowedWebSearchModes: Array | null, allowManagedHooksOnly: boolean | null, allowAppshots: boolean | null, computerUse: ComputerUseRequirements | null, featureRequirements: { [key in string]?: boolean } | null, hooks: ManagedHooksRequirements | null, enforceResidency: ResidencyRequirement | null, network: NetworkRequirements | null, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/EnvironmentAddParams.ts b/codex-rs/app-server-protocol/schema/typescript/v2/EnvironmentAddParams.ts new file mode 100644 index 00000000000..a2d1a123273 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/typescript/v2/EnvironmentAddParams.ts @@ -0,0 +1,5 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +export type EnvironmentAddParams = { environmentId: string, execServerUrl: string, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/EnvironmentAddResponse.ts b/codex-rs/app-server-protocol/schema/typescript/v2/EnvironmentAddResponse.ts new file mode 100644 index 00000000000..5b0a2dad0e8 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/typescript/v2/EnvironmentAddResponse.ts @@ -0,0 +1,5 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +export type EnvironmentAddResponse = Record; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/MemoryResetResponse.ts b/codex-rs/app-server-protocol/schema/typescript/v2/MemoryResetResponse.ts new file mode 100644 index 00000000000..d9507945a06 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/typescript/v2/MemoryResetResponse.ts @@ -0,0 +1,5 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +export type MemoryResetResponse = Record; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/MockExperimentalMethodParams.ts b/codex-rs/app-server-protocol/schema/typescript/v2/MockExperimentalMethodParams.ts new file mode 100644 index 00000000000..fe4577fa343 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/typescript/v2/MockExperimentalMethodParams.ts @@ -0,0 +1,9 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +export type MockExperimentalMethodParams = { +/** + * Test-only payload field. + */ +value?: string | null, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/MockExperimentalMethodResponse.ts b/codex-rs/app-server-protocol/schema/typescript/v2/MockExperimentalMethodResponse.ts new file mode 100644 index 00000000000..41085475d0e --- /dev/null +++ b/codex-rs/app-server-protocol/schema/typescript/v2/MockExperimentalMethodResponse.ts @@ -0,0 +1,9 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +export type MockExperimentalMethodResponse = { +/** + * Echoes the input `value`. + */ +echoed: string | null, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ProcessKillParams.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ProcessKillParams.ts new file mode 100644 index 00000000000..c222d6b7eb1 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/typescript/v2/ProcessKillParams.ts @@ -0,0 +1,12 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +/** + * Terminate a running `process/spawn` session. + */ +export type ProcessKillParams = { +/** + * Client-supplied, connection-scoped `processHandle` from `process/spawn`. + */ +processHandle: string, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ProcessKillResponse.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ProcessKillResponse.ts new file mode 100644 index 00000000000..d1bd8242c79 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/typescript/v2/ProcessKillResponse.ts @@ -0,0 +1,8 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +/** + * Empty success response for `process/kill`. + */ +export type ProcessKillResponse = Record; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ProcessResizePtyParams.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ProcessResizePtyParams.ts new file mode 100644 index 00000000000..f789eae6520 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/typescript/v2/ProcessResizePtyParams.ts @@ -0,0 +1,17 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. +import type { ProcessTerminalSize } from "./ProcessTerminalSize"; + +/** + * Resize a running PTY-backed `process/spawn` session. + */ +export type ProcessResizePtyParams = { +/** + * Client-supplied, connection-scoped `processHandle` from `process/spawn`. + */ +processHandle: string, +/** + * New PTY size in character cells. + */ +size: ProcessTerminalSize, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ProcessResizePtyResponse.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ProcessResizePtyResponse.ts new file mode 100644 index 00000000000..5d06355313b --- /dev/null +++ b/codex-rs/app-server-protocol/schema/typescript/v2/ProcessResizePtyResponse.ts @@ -0,0 +1,8 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +/** + * Empty success response for `process/resizePty`. + */ +export type ProcessResizePtyResponse = Record; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ProcessSpawnParams.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ProcessSpawnParams.ts new file mode 100644 index 00000000000..fb09eb58258 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/typescript/v2/ProcessSpawnParams.ts @@ -0,0 +1,73 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. +import type { AbsolutePathBuf } from "../AbsolutePathBuf"; +import type { ProcessTerminalSize } from "./ProcessTerminalSize"; + +/** + * Spawn a standalone process (argv vector) without a Codex sandbox on the host + * where the app server is running. + * + * `process/spawn` returns after the process has started and the connection-scoped + * `processHandle` has been registered. Process output and exit are reported via + * `process/outputDelta` and `process/exited` notifications. + */ +export type ProcessSpawnParams = { +/** + * Command argv vector. Empty arrays are rejected. + */ +command: Array, +/** + * Client-supplied, connection-scoped process handle. + * + * Duplicate active handles are rejected on the same connection. The same + * handle can be reused after the prior process exits. + */ +processHandle: string, +/** + * Absolute working directory for the process. + */ +cwd: AbsolutePathBuf, +/** + * Enable PTY mode. + * + * This implies `streamStdin` and `streamStdoutStderr`. + */ +tty?: boolean, +/** + * Allow follow-up `process/writeStdin` requests to write stdin bytes. + */ +streamStdin?: boolean, +/** + * Stream stdout/stderr via `process/outputDelta` notifications. + * + * Streamed bytes are not duplicated into the `process/exited` notification. + */ +streamStdoutStderr?: boolean, +/** + * Optional per-stream stdout/stderr capture cap in bytes. + * + * When omitted, the server default applies. Set to `null` to disable the + * cap. + */ +outputBytesCap?: number | null, +/** + * Optional timeout in milliseconds. + * + * When omitted, the server default applies. Set to `null` to disable the + * timeout. + */ +timeoutMs?: number | null, +/** + * Optional environment overrides merged into the app-server process + * environment. + * + * Matching names override inherited values. Set a key to `null` to unset + * an inherited variable. + */ +env?: { [key in string]?: string | null } | null, +/** + * Optional initial PTY size in character cells. Only valid when `tty` is + * true. + */ +size?: ProcessTerminalSize | null, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ProcessSpawnResponse.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ProcessSpawnResponse.ts new file mode 100644 index 00000000000..57b522272c4 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/typescript/v2/ProcessSpawnResponse.ts @@ -0,0 +1,8 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +/** + * Successful response for `process/spawn`. + */ +export type ProcessSpawnResponse = Record; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ProcessWriteStdinParams.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ProcessWriteStdinParams.ts new file mode 100644 index 00000000000..d27e74a2912 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/typescript/v2/ProcessWriteStdinParams.ts @@ -0,0 +1,21 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +/** + * Write stdin bytes to a running `process/spawn` session, close stdin, or + * both. + */ +export type ProcessWriteStdinParams = { +/** + * Client-supplied, connection-scoped `processHandle` from `process/spawn`. + */ +processHandle: string, +/** + * Optional base64-encoded stdin bytes to write. + */ +deltaBase64?: string | null, +/** + * Close stdin after writing `deltaBase64`, if present. + */ +closeStdin?: boolean, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ProcessWriteStdinResponse.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ProcessWriteStdinResponse.ts new file mode 100644 index 00000000000..29ba81152e8 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/typescript/v2/ProcessWriteStdinResponse.ts @@ -0,0 +1,8 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +/** + * Empty success response for `process/writeStdin`. + */ +export type ProcessWriteStdinResponse = Record; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/RemoteControlDisableResponse.ts b/codex-rs/app-server-protocol/schema/typescript/v2/RemoteControlDisableResponse.ts new file mode 100644 index 00000000000..1d463503e67 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/typescript/v2/RemoteControlDisableResponse.ts @@ -0,0 +1,6 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. +import type { RemoteControlConnectionStatus } from "./RemoteControlConnectionStatus"; + +export type RemoteControlDisableResponse = { status: RemoteControlConnectionStatus, serverName: string, installationId: string, environmentId: string | null, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/RemoteControlEnableResponse.ts b/codex-rs/app-server-protocol/schema/typescript/v2/RemoteControlEnableResponse.ts new file mode 100644 index 00000000000..8aa42095105 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/typescript/v2/RemoteControlEnableResponse.ts @@ -0,0 +1,6 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. +import type { RemoteControlConnectionStatus } from "./RemoteControlConnectionStatus"; + +export type RemoteControlEnableResponse = { status: RemoteControlConnectionStatus, serverName: string, installationId: string, environmentId: string | null, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/RemoteControlStatusReadResponse.ts b/codex-rs/app-server-protocol/schema/typescript/v2/RemoteControlStatusReadResponse.ts new file mode 100644 index 00000000000..046c5d42f13 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/typescript/v2/RemoteControlStatusReadResponse.ts @@ -0,0 +1,6 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. +import type { RemoteControlConnectionStatus } from "./RemoteControlConnectionStatus"; + +export type RemoteControlStatusReadResponse = { status: RemoteControlConnectionStatus, serverName: string, installationId: string, environmentId: string | null, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadBackgroundTerminalsCleanParams.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadBackgroundTerminalsCleanParams.ts new file mode 100644 index 00000000000..750eee87ac7 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadBackgroundTerminalsCleanParams.ts @@ -0,0 +1,5 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +export type ThreadBackgroundTerminalsCleanParams = { threadId: string, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadBackgroundTerminalsCleanResponse.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadBackgroundTerminalsCleanResponse.ts new file mode 100644 index 00000000000..f531fe0e24d --- /dev/null +++ b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadBackgroundTerminalsCleanResponse.ts @@ -0,0 +1,5 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +export type ThreadBackgroundTerminalsCleanResponse = Record; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadDecrementElicitationParams.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadDecrementElicitationParams.ts new file mode 100644 index 00000000000..081565007c7 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadDecrementElicitationParams.ts @@ -0,0 +1,12 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +/** + * Parameters for `thread/decrement_elicitation`. + */ +export type ThreadDecrementElicitationParams = { +/** + * Thread whose out-of-band elicitation counter should be decremented. + */ +threadId: string, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadDecrementElicitationResponse.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadDecrementElicitationResponse.ts new file mode 100644 index 00000000000..d61f67ee9f0 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadDecrementElicitationResponse.ts @@ -0,0 +1,16 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +/** + * Response for `thread/decrement_elicitation`. + */ +export type ThreadDecrementElicitationResponse = { +/** + * Current out-of-band elicitation count after the decrement. + */ +count: bigint, +/** + * Whether timeout accounting remains paused after applying the decrement. + */ +paused: boolean, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadForkParams.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadForkParams.ts index c5109b2c7d7..2369ae0cbb3 100644 --- a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadForkParams.ts +++ b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadForkParams.ts @@ -17,14 +17,44 @@ import type { ThreadSource } from "./ThreadSource"; * * Prefer using thread_id whenever possible. */ -export type ThreadForkParams = {threadId: string, /** +export type ThreadForkParams = { threadId: string, +/** + * [UNSTABLE] Specify the rollout path to fork from. + * If specified, the thread_id param will be ignored. + */ +path?: string | null, +/** * Configuration overrides for the forked thread, if any. */ -model?: string | null, modelProvider?: string | null, serviceTier?: string | null | null, cwd?: string | null, approvalPolicy?: AskForApproval | null, /** +model?: string | null, modelProvider?: string | null, serviceTier?: string | null | null, cwd?: string | null, +/** + * Replace the thread's runtime workspace roots. Relative paths are + * resolved against the effective cwd for the thread. + */ +runtimeWorkspaceRoots?: Array | null, approvalPolicy?: AskForApproval | null, +/** * Override where approval requests are routed for review on this thread * and subsequent turns. */ -approvalsReviewer?: ApprovalsReviewer | null, sandbox?: SandboxMode | null, config?: { [key in string]?: JsonValue } | null, baseInstructions?: string | null, developerInstructions?: string | null, ephemeral?: boolean, /** +approvalsReviewer?: ApprovalsReviewer | null, sandbox?: SandboxMode | null, +/** + * Named profile id for the forked thread. Cannot be combined with + * `sandbox`. + */ +permissions?: string | null, config?: { [key in string]?: JsonValue } | null, baseInstructions?: string | null, developerInstructions?: string | null, ephemeral?: boolean, +/** * Optional client-supplied analytics source classification for this forked thread. */ -threadSource?: ThreadSource | null}; +threadSource?: ThreadSource | null, +/** + * When true, return only thread metadata and live fork state without + * populating `thread.turns`. This is useful when the client plans to call + * `thread/turns/list` immediately after forking. + */ +excludeTurns?: boolean, +/** + * Deprecated and ignored by app-server. Kept only so older clients can + * continue sending the field while rollout persistence always uses the + * limited history policy. + */ +persistExtendedHistory?: boolean, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadForkResponse.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadForkResponse.ts index c5b1201c265..379b9b1c419 100644 --- a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadForkResponse.ts +++ b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadForkResponse.ts @@ -3,19 +3,33 @@ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. import type { AbsolutePathBuf } from "../AbsolutePathBuf"; import type { ReasoningEffort } from "../ReasoningEffort"; +import type { ActivePermissionProfile } from "./ActivePermissionProfile"; import type { ApprovalsReviewer } from "./ApprovalsReviewer"; import type { AskForApproval } from "./AskForApproval"; import type { SandboxPolicy } from "./SandboxPolicy"; import type { Thread } from "./Thread"; -export type ThreadForkResponse = {thread: Thread, model: string, modelProvider: string, serviceTier: string | null, cwd: AbsolutePathBuf, /** +export type ThreadForkResponse = { thread: Thread, model: string, modelProvider: string, serviceTier: string | null, cwd: AbsolutePathBuf, +/** + * Thread-scoped runtime workspace roots used to materialize + * `:workspace_roots`. + */ +runtimeWorkspaceRoots: Array, +/** * Instruction source files currently loaded for this thread. */ -instructionSources: Array, approvalPolicy: AskForApproval, /** +instructionSources: Array, approvalPolicy: AskForApproval, +/** * Reviewer currently used for approval requests on this thread. */ -approvalsReviewer: ApprovalsReviewer, /** +approvalsReviewer: ApprovalsReviewer, +/** * Legacy sandbox policy retained for compatibility. Experimental clients * should prefer `activePermissionProfile` for profile provenance. */ -sandbox: SandboxPolicy, reasoningEffort: ReasoningEffort | null}; +sandbox: SandboxPolicy, +/** + * Named or implicit built-in profile that produced the active + * permissions, when known. + */ +activePermissionProfile: ActivePermissionProfile | null, reasoningEffort: ReasoningEffort | null, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadIncrementElicitationParams.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadIncrementElicitationParams.ts new file mode 100644 index 00000000000..94fc390d395 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadIncrementElicitationParams.ts @@ -0,0 +1,12 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +/** + * Parameters for `thread/increment_elicitation`. + */ +export type ThreadIncrementElicitationParams = { +/** + * Thread whose out-of-band elicitation counter should be incremented. + */ +threadId: string, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadIncrementElicitationResponse.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadIncrementElicitationResponse.ts new file mode 100644 index 00000000000..863ba329d7e --- /dev/null +++ b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadIncrementElicitationResponse.ts @@ -0,0 +1,16 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +/** + * Response for `thread/increment_elicitation`. + */ +export type ThreadIncrementElicitationResponse = { +/** + * Current out-of-band elicitation count after the increment. + */ +count: bigint, +/** + * Whether timeout accounting is paused after applying the increment. + */ +paused: boolean, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadMemoryModeSetParams.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadMemoryModeSetParams.ts new file mode 100644 index 00000000000..676edf2c135 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadMemoryModeSetParams.ts @@ -0,0 +1,6 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. +import type { ThreadMemoryMode } from "../ThreadMemoryMode"; + +export type ThreadMemoryModeSetParams = { threadId: string, mode: ThreadMemoryMode, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadMemoryModeSetResponse.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadMemoryModeSetResponse.ts new file mode 100644 index 00000000000..49b42fd9add --- /dev/null +++ b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadMemoryModeSetResponse.ts @@ -0,0 +1,5 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +export type ThreadMemoryModeSetResponse = Record; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeAppendAudioParams.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeAppendAudioParams.ts new file mode 100644 index 00000000000..9de0c2bc2fd --- /dev/null +++ b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeAppendAudioParams.ts @@ -0,0 +1,9 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. +import type { ThreadRealtimeAudioChunk } from "./ThreadRealtimeAudioChunk"; + +/** + * EXPERIMENTAL - append audio input to thread realtime. + */ +export type ThreadRealtimeAppendAudioParams = { threadId: string, audio: ThreadRealtimeAudioChunk, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeAppendAudioResponse.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeAppendAudioResponse.ts new file mode 100644 index 00000000000..063e8cba783 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeAppendAudioResponse.ts @@ -0,0 +1,8 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +/** + * EXPERIMENTAL - response for appending realtime audio input. + */ +export type ThreadRealtimeAppendAudioResponse = Record; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeAppendTextParams.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeAppendTextParams.ts new file mode 100644 index 00000000000..6e3bef4ec53 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeAppendTextParams.ts @@ -0,0 +1,8 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +/** + * EXPERIMENTAL - append text input to thread realtime. + */ +export type ThreadRealtimeAppendTextParams = { threadId: string, text: string, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeAppendTextResponse.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeAppendTextResponse.ts new file mode 100644 index 00000000000..1fb9f0738fd --- /dev/null +++ b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeAppendTextResponse.ts @@ -0,0 +1,8 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +/** + * EXPERIMENTAL - response for appending realtime text input. + */ +export type ThreadRealtimeAppendTextResponse = Record; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeListVoicesParams.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeListVoicesParams.ts new file mode 100644 index 00000000000..b456d89c26e --- /dev/null +++ b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeListVoicesParams.ts @@ -0,0 +1,8 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +/** + * EXPERIMENTAL - list voices supported by thread realtime. + */ +export type ThreadRealtimeListVoicesParams = Record; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeListVoicesResponse.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeListVoicesResponse.ts new file mode 100644 index 00000000000..272cbaddb74 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeListVoicesResponse.ts @@ -0,0 +1,9 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. +import type { RealtimeVoicesList } from "../RealtimeVoicesList"; + +/** + * EXPERIMENTAL - response for listing supported realtime voices. + */ +export type ThreadRealtimeListVoicesResponse = { voices: RealtimeVoicesList, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeStartParams.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeStartParams.ts new file mode 100644 index 00000000000..1a149164dae --- /dev/null +++ b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeStartParams.ts @@ -0,0 +1,16 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. +import type { RealtimeOutputModality } from "../RealtimeOutputModality"; +import type { RealtimeVoice } from "../RealtimeVoice"; +import type { ThreadRealtimeStartTransport } from "./ThreadRealtimeStartTransport"; + +/** + * EXPERIMENTAL - start a thread-scoped realtime session. + */ +export type ThreadRealtimeStartParams = { threadId: string, +/** + * Selects text or audio output for the realtime session. Transport and voice stay + * independent so clients can choose how they connect separately from what the model emits. + */ +outputModality: RealtimeOutputModality, prompt?: string | null | null, realtimeSessionId?: string | null, transport?: ThreadRealtimeStartTransport | null, voice?: RealtimeVoice | null, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeStartResponse.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeStartResponse.ts new file mode 100644 index 00000000000..56254564256 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeStartResponse.ts @@ -0,0 +1,8 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +/** + * EXPERIMENTAL - response for starting thread realtime. + */ +export type ThreadRealtimeStartResponse = Record; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeStopParams.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeStopParams.ts new file mode 100644 index 00000000000..b9adbff678e --- /dev/null +++ b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeStopParams.ts @@ -0,0 +1,8 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +/** + * EXPERIMENTAL - stop thread realtime. + */ +export type ThreadRealtimeStopParams = { threadId: string, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeStopResponse.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeStopResponse.ts new file mode 100644 index 00000000000..c87f4402db5 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeStopResponse.ts @@ -0,0 +1,8 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +/** + * EXPERIMENTAL - response for stopping thread realtime. + */ +export type ThreadRealtimeStopResponse = Record; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadResumeParams.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadResumeParams.ts index 0ec89534357..67febf404df 100644 --- a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadResumeParams.ts +++ b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadResumeParams.ts @@ -2,6 +2,7 @@ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. import type { Personality } from "../Personality"; +import type { ResponseItem } from "../ResponseItem"; import type { JsonValue } from "../serde_json/JsonValue"; import type { ApprovalsReviewer } from "./ApprovalsReviewer"; import type { AskForApproval } from "./AskForApproval"; @@ -23,11 +24,48 @@ import type { SandboxMode } from "./SandboxMode"; * * Prefer using thread_id whenever possible. */ -export type ThreadResumeParams = {threadId: string, /** +export type ThreadResumeParams = { threadId: string, +/** + * [UNSTABLE] FOR CODEX CLOUD - DO NOT USE. + * If specified, the thread will be resumed with the provided history + * instead of loaded from disk. + */ +history?: Array | null, +/** + * [UNSTABLE] Specify the rollout path to resume from. + * If specified for a non-running thread, the thread_id param will be ignored. + * If thread_id identifies a running thread, the path must match the active + * rollout path. + */ +path?: string | null, +/** * Configuration overrides for the resumed thread, if any. */ -model?: string | null, modelProvider?: string | null, serviceTier?: string | null | null, cwd?: string | null, approvalPolicy?: AskForApproval | null, /** +model?: string | null, modelProvider?: string | null, serviceTier?: string | null | null, cwd?: string | null, +/** + * Replace the thread's runtime workspace roots. Relative paths are + * resolved against the effective cwd for the thread. + */ +runtimeWorkspaceRoots?: Array | null, approvalPolicy?: AskForApproval | null, +/** * Override where approval requests are routed for review on this thread * and subsequent turns. */ -approvalsReviewer?: ApprovalsReviewer | null, sandbox?: SandboxMode | null, config?: { [key in string]?: JsonValue } | null, baseInstructions?: string | null, developerInstructions?: string | null, personality?: Personality | null}; +approvalsReviewer?: ApprovalsReviewer | null, sandbox?: SandboxMode | null, +/** + * Named profile id for the resumed thread. Cannot be combined with + * `sandbox`. + */ +permissions?: string | null, config?: { [key in string]?: JsonValue } | null, baseInstructions?: string | null, developerInstructions?: string | null, personality?: Personality | null, +/** + * When true, return only thread metadata and live-resume state without + * populating `thread.turns`. This is useful when the client plans to call + * `thread/turns/list` immediately after resuming. + */ +excludeTurns?: boolean, +/** + * Deprecated and ignored by app-server. Kept only so older clients can + * continue sending the field while rollout persistence always uses the + * limited history policy. + */ +persistExtendedHistory?: boolean, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadResumeResponse.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadResumeResponse.ts index 7a4f90377c6..9db53d8def4 100644 --- a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadResumeResponse.ts +++ b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadResumeResponse.ts @@ -3,19 +3,33 @@ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. import type { AbsolutePathBuf } from "../AbsolutePathBuf"; import type { ReasoningEffort } from "../ReasoningEffort"; +import type { ActivePermissionProfile } from "./ActivePermissionProfile"; import type { ApprovalsReviewer } from "./ApprovalsReviewer"; import type { AskForApproval } from "./AskForApproval"; import type { SandboxPolicy } from "./SandboxPolicy"; import type { Thread } from "./Thread"; -export type ThreadResumeResponse = {thread: Thread, model: string, modelProvider: string, serviceTier: string | null, cwd: AbsolutePathBuf, /** +export type ThreadResumeResponse = { thread: Thread, model: string, modelProvider: string, serviceTier: string | null, cwd: AbsolutePathBuf, +/** + * Thread-scoped runtime workspace roots used to materialize + * `:workspace_roots`. + */ +runtimeWorkspaceRoots: Array, +/** * Instruction source files currently loaded for this thread. */ -instructionSources: Array, approvalPolicy: AskForApproval, /** +instructionSources: Array, approvalPolicy: AskForApproval, +/** * Reviewer currently used for approval requests on this thread. */ -approvalsReviewer: ApprovalsReviewer, /** +approvalsReviewer: ApprovalsReviewer, +/** * Legacy sandbox policy retained for compatibility. Experimental clients * should prefer `activePermissionProfile` for profile provenance. */ -sandbox: SandboxPolicy, reasoningEffort: ReasoningEffort | null}; +sandbox: SandboxPolicy, +/** + * Named or implicit built-in profile that produced the active + * permissions, when known. + */ +activePermissionProfile: ActivePermissionProfile | null, reasoningEffort: ReasoningEffort | null, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadSearchParams.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadSearchParams.ts new file mode 100644 index 00000000000..4c548d5f876 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadSearchParams.ts @@ -0,0 +1,38 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. +import type { SortDirection } from "./SortDirection"; +import type { ThreadSortKey } from "./ThreadSortKey"; +import type { ThreadSourceKind } from "./ThreadSourceKind"; + +export type ThreadSearchParams = { +/** + * Opaque pagination cursor returned by a previous call. + */ +cursor?: string | null, +/** + * Optional page size; defaults to a reasonable server-side value. + */ +limit?: number | null, +/** + * Optional sort key; defaults to created_at. + */ +sortKey?: ThreadSortKey | null, +/** + * Optional sort direction; defaults to descending (newest first). + */ +sortDirection?: SortDirection | null, +/** + * Optional source filter; when set, only sessions from these source kinds + * are returned. When omitted or empty, defaults to interactive sources. + */ +sourceKinds?: Array | null, +/** + * Optional archived filter; when set to true, only archived threads are returned. + * If false or null, only non-archived threads are returned. + */ +archived?: boolean | null, +/** + * Required substring/full-text query for thread search. + */ +searchTerm: string, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadSearchResponse.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadSearchResponse.ts new file mode 100644 index 00000000000..49aa4c2493f --- /dev/null +++ b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadSearchResponse.ts @@ -0,0 +1,18 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. +import type { ThreadSearchResult } from "./ThreadSearchResult"; + +export type ThreadSearchResponse = { data: Array, +/** + * Opaque cursor to pass to the next call to continue after the last item. + * if None, there are no more items to return. + */ +nextCursor: string | null, +/** + * Opaque cursor to pass as `cursor` when reversing `sortDirection`. + * This is only populated when the page contains at least one thread. + * Use it with the opposite `sortDirection`; for timestamp sorts it anchors + * at the start of the page timestamp so same-second updates are not skipped. + */ +backwardsCursor: string | null, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadSettingsUpdateParams.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadSettingsUpdateParams.ts new file mode 100644 index 00000000000..551dd5be457 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadSettingsUpdateParams.ts @@ -0,0 +1,61 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. +import type { CollaborationMode } from "../CollaborationMode"; +import type { Personality } from "../Personality"; +import type { ReasoningEffort } from "../ReasoningEffort"; +import type { ReasoningSummary } from "../ReasoningSummary"; +import type { ApprovalsReviewer } from "./ApprovalsReviewer"; +import type { AskForApproval } from "./AskForApproval"; +import type { SandboxPolicy } from "./SandboxPolicy"; + +export type ThreadSettingsUpdateParams = { threadId: string, +/** + * Override the working directory for subsequent turns. + */ +cwd?: string | null, +/** + * Override the approval policy for subsequent turns. + */ +approvalPolicy?: AskForApproval | null, +/** + * Override where approval requests are routed for subsequent turns. + */ +approvalsReviewer?: ApprovalsReviewer | null, +/** + * Override the sandbox policy for subsequent turns. + */ +sandboxPolicy?: SandboxPolicy | null, +/** + * Select a named permissions profile id for subsequent turns. Cannot be + * combined with `sandboxPolicy`. + */ +permissions?: string | null, +/** + * Override the model for subsequent turns. + */ +model?: string | null, +/** + * Override the service tier for subsequent turns. `null` clears the + * current service tier; omission leaves it unchanged. + */ +serviceTier?: string | null | null, +/** + * Override the reasoning effort for subsequent turns. + */ +effort?: ReasoningEffort | null, +/** + * Override the reasoning summary for subsequent turns. + */ +summary?: ReasoningSummary | null, +/** + * EXPERIMENTAL - Set a pre-set collaboration mode for subsequent turns. + * + * For `collaboration_mode.settings.developer_instructions`, `null` means + * "use the built-in instructions for the selected mode". + */ +collaborationMode?: CollaborationMode | null, +/** + * Override the personality for subsequent turns. + */ +personality?: Personality | null, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadSettingsUpdateResponse.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadSettingsUpdateResponse.ts new file mode 100644 index 00000000000..06afb97597e --- /dev/null +++ b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadSettingsUpdateResponse.ts @@ -0,0 +1,5 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +export type ThreadSettingsUpdateResponse = Record; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadStartParams.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadStartParams.ts index 30509ef6cb3..bc03ab156f6 100644 --- a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadStartParams.ts +++ b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadStartParams.ts @@ -5,15 +5,53 @@ import type { Personality } from "../Personality"; import type { JsonValue } from "../serde_json/JsonValue"; import type { ApprovalsReviewer } from "./ApprovalsReviewer"; import type { AskForApproval } from "./AskForApproval"; +import type { DynamicToolSpec } from "./DynamicToolSpec"; import type { SandboxMode } from "./SandboxMode"; import type { ThreadSource } from "./ThreadSource"; import type { ThreadStartSource } from "./ThreadStartSource"; +import type { TurnEnvironmentParams } from "./TurnEnvironmentParams"; -export type ThreadStartParams = {model?: string | null, modelProvider?: string | null, serviceTier?: string | null | null, cwd?: string | null, approvalPolicy?: AskForApproval | null, /** +export type ThreadStartParams = { model?: string | null, modelProvider?: string | null, serviceTier?: string | null | null, cwd?: string | null, +/** + * Replace the thread's runtime workspace roots. Relative paths are + * resolved against the effective cwd for the thread. + */ +runtimeWorkspaceRoots?: Array | null, approvalPolicy?: AskForApproval | null, +/** * Override where approval requests are routed for review on this thread * and subsequent turns. */ -approvalsReviewer?: ApprovalsReviewer | null, sandbox?: SandboxMode | null, config?: { [key in string]?: JsonValue } | null, serviceName?: string | null, baseInstructions?: string | null, developerInstructions?: string | null, personality?: Personality | null, ephemeral?: boolean | null, sessionStartSource?: ThreadStartSource | null, /** +approvalsReviewer?: ApprovalsReviewer | null, sandbox?: SandboxMode | null, +/** + * Named profile id for this thread. Cannot be combined with `sandbox`. + */ +permissions?: string | null, config?: { [key in string]?: JsonValue } | null, serviceName?: string | null, baseInstructions?: string | null, developerInstructions?: string | null, personality?: Personality | null, ephemeral?: boolean | null, sessionStartSource?: ThreadStartSource | null, +/** * Optional client-supplied analytics source classification for this thread. */ -threadSource?: ThreadSource | null}; +threadSource?: ThreadSource | null, +/** + * Optional sticky environments for this thread. + * + * Omitted selects the default environment when environment access is + * enabled. Empty disables environment access for turns that do not + * provide a turn override. Non-empty selects the first environment as the + * current turn environment. + */ +environments?: Array | null, dynamicTools?: Array | null, +/** + * Test-only experimental field used to validate experimental gating and + * schema filtering behavior in a stable way. + */ +mockExperimentalField?: string | null, +/** + * If true, opt into emitting raw Responses API items on the event stream. + * This is for internal use only (e.g. Codex Cloud). + */ +experimentalRawEvents?: boolean, +/** + * Deprecated and ignored by app-server. Kept only so older clients can + * continue sending the field while rollout persistence always uses the + * limited history policy. + */ +persistExtendedHistory?: boolean, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadStartResponse.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadStartResponse.ts index 38859a3805d..bb4819427d1 100644 --- a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadStartResponse.ts +++ b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadStartResponse.ts @@ -3,19 +3,33 @@ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. import type { AbsolutePathBuf } from "../AbsolutePathBuf"; import type { ReasoningEffort } from "../ReasoningEffort"; +import type { ActivePermissionProfile } from "./ActivePermissionProfile"; import type { ApprovalsReviewer } from "./ApprovalsReviewer"; import type { AskForApproval } from "./AskForApproval"; import type { SandboxPolicy } from "./SandboxPolicy"; import type { Thread } from "./Thread"; -export type ThreadStartResponse = {thread: Thread, model: string, modelProvider: string, serviceTier: string | null, cwd: AbsolutePathBuf, /** +export type ThreadStartResponse = { thread: Thread, model: string, modelProvider: string, serviceTier: string | null, cwd: AbsolutePathBuf, +/** + * Thread-scoped runtime workspace roots used to materialize + * `:workspace_roots`. + */ +runtimeWorkspaceRoots: Array, +/** * Instruction source files currently loaded for this thread. */ -instructionSources: Array, approvalPolicy: AskForApproval, /** +instructionSources: Array, approvalPolicy: AskForApproval, +/** * Reviewer currently used for approval requests on this thread. */ -approvalsReviewer: ApprovalsReviewer, /** +approvalsReviewer: ApprovalsReviewer, +/** * Legacy sandbox policy retained for compatibility. Experimental clients * should prefer `activePermissionProfile` for profile provenance. */ -sandbox: SandboxPolicy, reasoningEffort: ReasoningEffort | null}; +sandbox: SandboxPolicy, +/** + * Named or implicit built-in profile that produced the active + * permissions, when known. + */ +activePermissionProfile: ActivePermissionProfile | null, reasoningEffort: ReasoningEffort | null, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadTurnsItemsListParams.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadTurnsItemsListParams.ts new file mode 100644 index 00000000000..68c506a6a43 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadTurnsItemsListParams.ts @@ -0,0 +1,18 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. +import type { SortDirection } from "./SortDirection"; + +export type ThreadTurnsItemsListParams = { threadId: string, turnId: string, +/** + * Opaque cursor to pass to the next call to continue after the last item. + */ +cursor?: string | null, +/** + * Optional item page size. + */ +limit?: number | null, +/** + * Optional item pagination direction; defaults to ascending. + */ +sortDirection?: SortDirection | null, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadTurnsItemsListResponse.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadTurnsItemsListResponse.ts new file mode 100644 index 00000000000..4375e29aabf --- /dev/null +++ b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadTurnsItemsListResponse.ts @@ -0,0 +1,16 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. +import type { ThreadItem } from "./ThreadItem"; + +export type ThreadTurnsItemsListResponse = { data: Array, +/** + * Opaque cursor to pass to the next call to continue after the last item. + * if None, there are no more items to return. + */ +nextCursor: string | null, +/** + * Opaque cursor to pass as `cursor` when reversing `sortDirection`. + * This is only populated when the page contains at least one item. + */ +backwardsCursor: string | null, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadTurnsListParams.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadTurnsListParams.ts new file mode 100644 index 00000000000..a1aa682a889 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadTurnsListParams.ts @@ -0,0 +1,23 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. +import type { SortDirection } from "./SortDirection"; +import type { TurnItemsView } from "./TurnItemsView"; + +export type ThreadTurnsListParams = { threadId: string, +/** + * Opaque cursor to pass to the next call to continue after the last turn. + */ +cursor?: string | null, +/** + * Optional turn page size. + */ +limit?: number | null, +/** + * Optional turn pagination direction; defaults to descending. + */ +sortDirection?: SortDirection | null, +/** + * How much item detail to include for each returned turn; defaults to summary. + */ +itemsView?: TurnItemsView | null, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadTurnsListResponse.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadTurnsListResponse.ts new file mode 100644 index 00000000000..1dbed91a708 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadTurnsListResponse.ts @@ -0,0 +1,18 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. +import type { Turn } from "./Turn"; + +export type ThreadTurnsListResponse = { data: Array, +/** + * Opaque cursor to pass to the next call to continue after the last turn. + * if None, there are no more turns to return. + */ +nextCursor: string | null, +/** + * Opaque cursor to pass as `cursor` when reversing `sortDirection`. + * This is only populated when the page contains at least one turn. + * Use it with the opposite `sortDirection` to include the anchor turn again + * and catch updates to that turn. + */ +backwardsCursor: string | null, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/TurnStartParams.ts b/codex-rs/app-server-protocol/schema/typescript/v2/TurnStartParams.ts index b04919d86b6..14eba86bc71 100644 --- a/codex-rs/app-server-protocol/schema/typescript/v2/TurnStartParams.ts +++ b/codex-rs/app-server-protocol/schema/typescript/v2/TurnStartParams.ts @@ -1,45 +1,93 @@ // GENERATED CODE! DO NOT MODIFY BY HAND! // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. +import type { CollaborationMode } from "../CollaborationMode"; import type { Personality } from "../Personality"; import type { ReasoningEffort } from "../ReasoningEffort"; import type { ReasoningSummary } from "../ReasoningSummary"; import type { JsonValue } from "../serde_json/JsonValue"; +import type { AdditionalContextEntry } from "./AdditionalContextEntry"; import type { ApprovalsReviewer } from "./ApprovalsReviewer"; import type { AskForApproval } from "./AskForApproval"; import type { SandboxPolicy } from "./SandboxPolicy"; +import type { TurnEnvironmentParams } from "./TurnEnvironmentParams"; import type { UserInput } from "./UserInput"; -export type TurnStartParams = {threadId: string, input: Array, /** +export type TurnStartParams = { threadId: string, input: Array, +/** + * Optional turn-scoped Responses API client metadata. + */ +responsesapiClientMetadata?: { [key in string]?: string } | null, +/** + * Optional client-provided context fragments keyed by an opaque source identifier. + */ +additionalContext?: { [key in string]?: AdditionalContextEntry } | null, +/** + * Optional turn-scoped environments. + * + * Omitted uses the thread sticky environments. Empty disables + * environment access for this turn. Non-empty selects the first + * environment as the current turn environment for this turn. + */ +environments?: Array | null, +/** * Override the working directory for this turn and subsequent turns. */ -cwd?: string | null, /** +cwd?: string | null, +/** + * Replace the thread's runtime workspace roots for this turn and + * subsequent turns. Relative paths are resolved against the effective + * cwd for the turn. + */ +runtimeWorkspaceRoots?: Array | null, +/** * Override the approval policy for this turn and subsequent turns. */ -approvalPolicy?: AskForApproval | null, /** +approvalPolicy?: AskForApproval | null, +/** * Override where approval requests are routed for review on this turn and * subsequent turns. */ -approvalsReviewer?: ApprovalsReviewer | null, /** +approvalsReviewer?: ApprovalsReviewer | null, +/** * Override the sandbox policy for this turn and subsequent turns. */ -sandboxPolicy?: SandboxPolicy | null, /** +sandboxPolicy?: SandboxPolicy | null, +/** + * Select a named permissions profile id for this turn and subsequent + * turns. Cannot be combined with `sandboxPolicy`. + */ +permissions?: string | null, +/** * Override the model for this turn and subsequent turns. */ -model?: string | null, /** +model?: string | null, +/** * Override the service tier for this turn and subsequent turns. */ -serviceTier?: string | null | null, /** +serviceTier?: string | null | null, +/** * Override the reasoning effort for this turn and subsequent turns. */ -effort?: ReasoningEffort | null, /** +effort?: ReasoningEffort | null, +/** * Override the reasoning summary for this turn and subsequent turns. */ -summary?: ReasoningSummary | null, /** +summary?: ReasoningSummary | null, +/** * Override the personality for this turn and subsequent turns. */ -personality?: Personality | null, /** +personality?: Personality | null, +/** * Optional JSON Schema used to constrain the final assistant message for * this turn. */ -outputSchema?: JsonValue | null}; +outputSchema?: JsonValue | null, +/** + * EXPERIMENTAL - Set a pre-set collaboration mode. + * Takes precedence over model, reasoning_effort, and developer instructions if set. + * + * For `collaboration_mode.settings.developer_instructions`, `null` means + * "use the built-in instructions for the selected mode". + */ +collaborationMode?: CollaborationMode | null, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/TurnSteerParams.ts b/codex-rs/app-server-protocol/schema/typescript/v2/TurnSteerParams.ts index dae166b4013..c5ffae746c0 100644 --- a/codex-rs/app-server-protocol/schema/typescript/v2/TurnSteerParams.ts +++ b/codex-rs/app-server-protocol/schema/typescript/v2/TurnSteerParams.ts @@ -1,10 +1,20 @@ // GENERATED CODE! DO NOT MODIFY BY HAND! // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. +import type { AdditionalContextEntry } from "./AdditionalContextEntry"; import type { UserInput } from "./UserInput"; -export type TurnSteerParams = {threadId: string, input: Array, /** +export type TurnSteerParams = { threadId: string, input: Array, +/** + * Optional turn-scoped Responses API client metadata. + */ +responsesapiClientMetadata?: { [key in string]?: string } | null, +/** + * Optional client-provided context fragments keyed by an opaque source identifier. + */ +additionalContext?: { [key in string]?: AdditionalContextEntry } | null, +/** * Required active turn id precondition. The request fails when it does not * match the currently active turn. */ -expectedTurnId: string}; +expectedTurnId: string, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/index.ts b/codex-rs/app-server-protocol/schema/typescript/v2/index.ts index 5b4f2ed2831..0e9cbdf5326 100644 --- a/codex-rs/app-server-protocol/schema/typescript/v2/index.ts +++ b/codex-rs/app-server-protocol/schema/typescript/v2/index.ts @@ -7,6 +7,7 @@ export type { AccountUpdatedNotification } from "./AccountUpdatedNotification"; export type { ActivePermissionProfile } from "./ActivePermissionProfile"; export type { AddCreditsNudgeCreditType } from "./AddCreditsNudgeCreditType"; export type { AddCreditsNudgeEmailStatus } from "./AddCreditsNudgeEmailStatus"; +export type { AdditionalContextEntry } from "./AdditionalContextEntry"; export type { AdditionalFileSystemPermissions } from "./AdditionalFileSystemPermissions"; export type { AdditionalNetworkPermissions } from "./AdditionalNetworkPermissions"; export type { AdditionalPermissionProfile } from "./AdditionalPermissionProfile"; @@ -42,6 +43,8 @@ export type { CollabAgentState } from "./CollabAgentState"; export type { CollabAgentStatus } from "./CollabAgentStatus"; export type { CollabAgentTool } from "./CollabAgentTool"; export type { CollabAgentToolCallStatus } from "./CollabAgentToolCallStatus"; +export type { CollaborationModeListParams } from "./CollaborationModeListParams"; +export type { CollaborationModeListResponse } from "./CollaborationModeListResponse"; export type { CollaborationModeMask } from "./CollaborationModeMask"; export type { CommandAction } from "./CommandAction"; export type { CommandExecOutputDeltaNotification } from "./CommandExecOutputDeltaNotification"; @@ -86,6 +89,8 @@ export type { DynamicToolCallParams } from "./DynamicToolCallParams"; export type { DynamicToolCallResponse } from "./DynamicToolCallResponse"; export type { DynamicToolCallStatus } from "./DynamicToolCallStatus"; export type { DynamicToolSpec } from "./DynamicToolSpec"; +export type { EnvironmentAddParams } from "./EnvironmentAddParams"; +export type { EnvironmentAddResponse } from "./EnvironmentAddResponse"; export type { ErrorNotification } from "./ErrorNotification"; export type { ExecPolicyAmendment } from "./ExecPolicyAmendment"; export type { ExperimentalFeature } from "./ExperimentalFeature"; @@ -229,8 +234,11 @@ export type { McpToolCallResult } from "./McpToolCallResult"; export type { McpToolCallStatus } from "./McpToolCallStatus"; export type { MemoryCitation } from "./MemoryCitation"; export type { MemoryCitationEntry } from "./MemoryCitationEntry"; +export type { MemoryResetResponse } from "./MemoryResetResponse"; export type { MergeStrategy } from "./MergeStrategy"; export type { MigrationDetails } from "./MigrationDetails"; +export type { MockExperimentalMethodParams } from "./MockExperimentalMethodParams"; +export type { MockExperimentalMethodResponse } from "./MockExperimentalMethodResponse"; export type { Model } from "./Model"; export type { ModelAvailabilityNux } from "./ModelAvailabilityNux"; export type { ModelListParams } from "./ModelListParams"; @@ -305,9 +313,17 @@ export type { PluginUninstallParams } from "./PluginUninstallParams"; export type { PluginUninstallResponse } from "./PluginUninstallResponse"; export type { PluginsMigration } from "./PluginsMigration"; export type { ProcessExitedNotification } from "./ProcessExitedNotification"; +export type { ProcessKillParams } from "./ProcessKillParams"; +export type { ProcessKillResponse } from "./ProcessKillResponse"; export type { ProcessOutputDeltaNotification } from "./ProcessOutputDeltaNotification"; export type { ProcessOutputStream } from "./ProcessOutputStream"; +export type { ProcessResizePtyParams } from "./ProcessResizePtyParams"; +export type { ProcessResizePtyResponse } from "./ProcessResizePtyResponse"; +export type { ProcessSpawnParams } from "./ProcessSpawnParams"; +export type { ProcessSpawnResponse } from "./ProcessSpawnResponse"; export type { ProcessTerminalSize } from "./ProcessTerminalSize"; +export type { ProcessWriteStdinParams } from "./ProcessWriteStdinParams"; +export type { ProcessWriteStdinResponse } from "./ProcessWriteStdinResponse"; export type { RateLimitReachedType } from "./RateLimitReachedType"; export type { RateLimitSnapshot } from "./RateLimitSnapshot"; export type { RateLimitWindow } from "./RateLimitWindow"; @@ -317,7 +333,10 @@ export type { ReasoningSummaryPartAddedNotification } from "./ReasoningSummaryPa export type { ReasoningSummaryTextDeltaNotification } from "./ReasoningSummaryTextDeltaNotification"; export type { ReasoningTextDeltaNotification } from "./ReasoningTextDeltaNotification"; export type { RemoteControlConnectionStatus } from "./RemoteControlConnectionStatus"; +export type { RemoteControlDisableResponse } from "./RemoteControlDisableResponse"; +export type { RemoteControlEnableResponse } from "./RemoteControlEnableResponse"; export type { RemoteControlStatusChangedNotification } from "./RemoteControlStatusChangedNotification"; +export type { RemoteControlStatusReadResponse } from "./RemoteControlStatusReadResponse"; export type { RequestPermissionProfile } from "./RequestPermissionProfile"; export type { ResidencyRequirement } from "./ResidencyRequirement"; export type { ReviewDelivery } from "./ReviewDelivery"; @@ -358,9 +377,13 @@ export type { ThreadApproveGuardianDeniedActionResponse } from "./ThreadApproveG export type { ThreadArchiveParams } from "./ThreadArchiveParams"; export type { ThreadArchiveResponse } from "./ThreadArchiveResponse"; export type { ThreadArchivedNotification } from "./ThreadArchivedNotification"; +export type { ThreadBackgroundTerminalsCleanParams } from "./ThreadBackgroundTerminalsCleanParams"; +export type { ThreadBackgroundTerminalsCleanResponse } from "./ThreadBackgroundTerminalsCleanResponse"; export type { ThreadClosedNotification } from "./ThreadClosedNotification"; export type { ThreadCompactStartParams } from "./ThreadCompactStartParams"; export type { ThreadCompactStartResponse } from "./ThreadCompactStartResponse"; +export type { ThreadDecrementElicitationParams } from "./ThreadDecrementElicitationParams"; +export type { ThreadDecrementElicitationResponse } from "./ThreadDecrementElicitationResponse"; export type { ThreadForkParams } from "./ThreadForkParams"; export type { ThreadForkResponse } from "./ThreadForkResponse"; export type { ThreadGoal } from "./ThreadGoal"; @@ -373,6 +396,8 @@ export type { ThreadGoalSetParams } from "./ThreadGoalSetParams"; export type { ThreadGoalSetResponse } from "./ThreadGoalSetResponse"; export type { ThreadGoalStatus } from "./ThreadGoalStatus"; export type { ThreadGoalUpdatedNotification } from "./ThreadGoalUpdatedNotification"; +export type { ThreadIncrementElicitationParams } from "./ThreadIncrementElicitationParams"; +export type { ThreadIncrementElicitationResponse } from "./ThreadIncrementElicitationResponse"; export type { ThreadInjectItemsParams } from "./ThreadInjectItemsParams"; export type { ThreadInjectItemsResponse } from "./ThreadInjectItemsResponse"; export type { ThreadItem } from "./ThreadItem"; @@ -380,30 +405,46 @@ export type { ThreadListParams } from "./ThreadListParams"; export type { ThreadListResponse } from "./ThreadListResponse"; export type { ThreadLoadedListParams } from "./ThreadLoadedListParams"; export type { ThreadLoadedListResponse } from "./ThreadLoadedListResponse"; +export type { ThreadMemoryModeSetParams } from "./ThreadMemoryModeSetParams"; +export type { ThreadMemoryModeSetResponse } from "./ThreadMemoryModeSetResponse"; export type { ThreadMetadataGitInfoUpdateParams } from "./ThreadMetadataGitInfoUpdateParams"; export type { ThreadMetadataUpdateParams } from "./ThreadMetadataUpdateParams"; export type { ThreadMetadataUpdateResponse } from "./ThreadMetadataUpdateResponse"; export type { ThreadNameUpdatedNotification } from "./ThreadNameUpdatedNotification"; export type { ThreadReadParams } from "./ThreadReadParams"; export type { ThreadReadResponse } from "./ThreadReadResponse"; +export type { ThreadRealtimeAppendAudioParams } from "./ThreadRealtimeAppendAudioParams"; +export type { ThreadRealtimeAppendAudioResponse } from "./ThreadRealtimeAppendAudioResponse"; +export type { ThreadRealtimeAppendTextParams } from "./ThreadRealtimeAppendTextParams"; +export type { ThreadRealtimeAppendTextResponse } from "./ThreadRealtimeAppendTextResponse"; export type { ThreadRealtimeAudioChunk } from "./ThreadRealtimeAudioChunk"; export type { ThreadRealtimeClosedNotification } from "./ThreadRealtimeClosedNotification"; export type { ThreadRealtimeErrorNotification } from "./ThreadRealtimeErrorNotification"; export type { ThreadRealtimeItemAddedNotification } from "./ThreadRealtimeItemAddedNotification"; +export type { ThreadRealtimeListVoicesParams } from "./ThreadRealtimeListVoicesParams"; +export type { ThreadRealtimeListVoicesResponse } from "./ThreadRealtimeListVoicesResponse"; export type { ThreadRealtimeOutputAudioDeltaNotification } from "./ThreadRealtimeOutputAudioDeltaNotification"; export type { ThreadRealtimeSdpNotification } from "./ThreadRealtimeSdpNotification"; +export type { ThreadRealtimeStartParams } from "./ThreadRealtimeStartParams"; +export type { ThreadRealtimeStartResponse } from "./ThreadRealtimeStartResponse"; export type { ThreadRealtimeStartTransport } from "./ThreadRealtimeStartTransport"; export type { ThreadRealtimeStartedNotification } from "./ThreadRealtimeStartedNotification"; +export type { ThreadRealtimeStopParams } from "./ThreadRealtimeStopParams"; +export type { ThreadRealtimeStopResponse } from "./ThreadRealtimeStopResponse"; export type { ThreadRealtimeTranscriptDeltaNotification } from "./ThreadRealtimeTranscriptDeltaNotification"; export type { ThreadRealtimeTranscriptDoneNotification } from "./ThreadRealtimeTranscriptDoneNotification"; export type { ThreadResumeParams } from "./ThreadResumeParams"; export type { ThreadResumeResponse } from "./ThreadResumeResponse"; export type { ThreadRollbackParams } from "./ThreadRollbackParams"; export type { ThreadRollbackResponse } from "./ThreadRollbackResponse"; +export type { ThreadSearchParams } from "./ThreadSearchParams"; +export type { ThreadSearchResponse } from "./ThreadSearchResponse"; export type { ThreadSearchResult } from "./ThreadSearchResult"; export type { ThreadSetNameParams } from "./ThreadSetNameParams"; export type { ThreadSetNameResponse } from "./ThreadSetNameResponse"; export type { ThreadSettings } from "./ThreadSettings"; +export type { ThreadSettingsUpdateParams } from "./ThreadSettingsUpdateParams"; +export type { ThreadSettingsUpdateResponse } from "./ThreadSettingsUpdateResponse"; export type { ThreadSettingsUpdatedNotification } from "./ThreadSettingsUpdatedNotification"; export type { ThreadShellCommandParams } from "./ThreadShellCommandParams"; export type { ThreadShellCommandResponse } from "./ThreadShellCommandResponse"; @@ -418,6 +459,10 @@ export type { ThreadStatus } from "./ThreadStatus"; export type { ThreadStatusChangedNotification } from "./ThreadStatusChangedNotification"; export type { ThreadTokenUsage } from "./ThreadTokenUsage"; export type { ThreadTokenUsageUpdatedNotification } from "./ThreadTokenUsageUpdatedNotification"; +export type { ThreadTurnsItemsListParams } from "./ThreadTurnsItemsListParams"; +export type { ThreadTurnsItemsListResponse } from "./ThreadTurnsItemsListResponse"; +export type { ThreadTurnsListParams } from "./ThreadTurnsListParams"; +export type { ThreadTurnsListResponse } from "./ThreadTurnsListResponse"; export type { ThreadUnarchiveParams } from "./ThreadUnarchiveParams"; export type { ThreadUnarchiveResponse } from "./ThreadUnarchiveResponse"; export type { ThreadUnarchivedNotification } from "./ThreadUnarchivedNotification"; diff --git a/codex-rs/app-server-protocol/src/protocol/v2/tests.rs b/codex-rs/app-server-protocol/src/protocol/v2/tests.rs index 8f6824f397b..c2b4f24b51d 100644 --- a/codex-rs/app-server-protocol/src/protocol/v2/tests.rs +++ b/codex-rs/app-server-protocol/src/protocol/v2/tests.rs @@ -3428,6 +3428,7 @@ fn turn_start_params_preserve_explicit_null_service_tier() { thread_id: "thread_123".to_string(), input: vec![], responsesapi_client_metadata: None, + additional_context: None, environments: None, cwd: None, runtime_workspace_roots: None, diff --git a/codex-rs/app-server-protocol/src/protocol/v2/turn.rs b/codex-rs/app-server-protocol/src/protocol/v2/turn.rs index 50660af1d7d..508f4755a8e 100644 --- a/codex-rs/app-server-protocol/src/protocol/v2/turn.rs +++ b/codex-rs/app-server-protocol/src/protocol/v2/turn.rs @@ -41,6 +41,13 @@ pub struct TurnEnvironmentParams { pub cwd: AbsolutePathBuf, } +#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, JsonSchema, TS)] +#[serde(rename_all = "camelCase")] +#[ts(export_to = "v2/")] +pub struct AdditionalContextEntry { + pub value: String, +} + #[derive( Serialize, Deserialize, Debug, Default, Clone, PartialEq, JsonSchema, TS, ExperimentalApi, )] @@ -53,6 +60,10 @@ pub struct TurnStartParams { #[experimental("turn/start.responsesapiClientMetadata")] #[ts(optional = nullable)] pub responsesapi_client_metadata: Option>, + /// Optional client-provided context fragments keyed by an opaque source identifier. + #[experimental("turn/start.additionalContext")] + #[ts(optional = nullable)] + pub additional_context: Option>, /// Optional turn-scoped environments. /// /// Omitted uses the thread sticky environments. Empty disables @@ -141,6 +152,10 @@ pub struct TurnSteerParams { #[experimental("turn/steer.responsesapiClientMetadata")] #[ts(optional = nullable)] pub responsesapi_client_metadata: Option>, + /// Optional client-provided context fragments keyed by an opaque source identifier. + #[experimental("turn/steer.additionalContext")] + #[ts(optional = nullable)] + pub additional_context: Option>, /// Required active turn id precondition. The request fails when it does not /// match the currently active turn. pub expected_turn_id: String, diff --git a/codex-rs/app-server/README.md b/codex-rs/app-server/README.md index dcc29530736..db5efc3cfe7 100644 --- a/codex-rs/app-server/README.md +++ b/codex-rs/app-server/README.md @@ -158,9 +158,9 @@ Example with notification opt-out: - `thread/shellCommand` — run a user-initiated `!` shell command against a thread; this runs unsandboxed with full access rather than inheriting the thread sandbox policy. Returns `{}` immediately while progress streams through standard turn/item notifications and any active turn receives the formatted output in its message stream. - `thread/backgroundTerminals/clean` — terminate all running background terminals for a thread (experimental; requires `capabilities.experimentalApi`); returns `{}` when the cleanup request is accepted. - `thread/rollback` — drop the last N turns from the agent’s in-memory context and persist a rollback marker in the rollout so future resumes see the pruned history; returns the updated `thread` (with `turns` populated) on success. -- `turn/start` — add user input to a thread and begin Codex generation; responds with the initial `turn` object and streams `turn/started`, `item/*`, and `turn/completed` notifications. Experimental `runtimeWorkspaceRoots` replaces the thread-scoped runtime workspace roots used to materialize `:workspace_roots`; relative paths resolve against the effective turn cwd. Prefer experimental `permissions` profile selection by id for permission overrides; the legacy `sandboxPolicy` field is still accepted but cannot be combined with `permissions`. For `collaborationMode`, `settings.developer_instructions: null` means "use built-in instructions for the selected mode". +- `turn/start` — add user input to a thread and begin Codex generation; responds with the initial `turn` object and streams `turn/started`, `item/*`, and `turn/completed` notifications. Experimental `additionalContext` supplies hidden model-visible user context as arbitrary key/value entries. Experimental `runtimeWorkspaceRoots` replaces the thread-scoped runtime workspace roots used to materialize `:workspace_roots`; relative paths resolve against the effective turn cwd. Prefer experimental `permissions` profile selection by id for permission overrides; the legacy `sandboxPolicy` field is still accepted but cannot be combined with `permissions`. For `collaborationMode`, `settings.developer_instructions: null` means "use built-in instructions for the selected mode". - `thread/inject_items` — append raw Responses API items to a loaded thread’s model-visible history without starting a user turn; returns `{}` on success. -- `turn/steer` — add user input to an already in-flight regular turn without starting a new turn; returns the active `turnId` that accepted the input. Review and manual compaction turns reject `turn/steer`. +- `turn/steer` — add user input or experimental hidden `additionalContext` to an already in-flight regular turn without starting a new turn; returns the active `turnId` that accepted the input. Review and manual compaction turns reject `turn/steer`. - `turn/interrupt` — request cancellation of an in-flight turn by `(thread_id, turn_id)`; success is an empty `{}` response and the turn finishes with `status: "interrupted"`. - `thread/realtime/start` — start a thread-scoped realtime session (experimental); pass `outputModality: "text"` or `outputModality: "audio"` to choose model output, returns `{}` and streams `thread/realtime/*` notifications. Omit `transport` for the websocket transport, or pass `{ "type": "webrtc", "sdp": "..." }` to create a WebRTC session from a browser-generated SDP offer; the remote answer SDP is emitted as `thread/realtime/sdp`. - `thread/realtime/appendAudio` — append an input audio chunk to the active realtime session (experimental); returns `{}`. @@ -643,6 +643,10 @@ You can optionally specify config overrides on the new turn. If specified, these { "method": "turn/start", "id": 30, "params": { "threadId": "thr_123", "input": [ { "type": "text", "text": "Run tests" } ], + // Experimental hidden client context, keyed by the client. + "additionalContext": { + "browser_info": { "value": "Active tab is CI failures." } + }, // Below are optional config overrides "cwd": "/Users/me/project", // Experimental: turn-scoped environment selection. @@ -834,13 +838,18 @@ Use `thread/backgroundTerminals/clean` to terminate all running background termi ### Example: Steer an active turn -Use `turn/steer` to append additional user input to the currently active regular turn. This does -not emit `turn/started` and does not accept thread settings overrides. +Use `turn/steer` to append additional user input or experimental hidden `additionalContext` to the +currently active regular turn. A context-only steer is accepted when it contributes at least one +new retained key/value entry. This does not emit `turn/started` and does not accept thread settings +overrides. ```json { "method": "turn/steer", "id": 32, "params": { "threadId": "thr_123", "input": [ { "type": "text", "text": "Actually focus on failing tests first." } ], + "additionalContext": { + "automation_info": { "value": "CI rerun is in progress." } + }, "expectedTurnId": "turn_456" } } { "id": 32, "result": { "turnId": "turn_456" } } diff --git a/codex-rs/app-server/src/message_processor_tracing_tests.rs b/codex-rs/app-server/src/message_processor_tracing_tests.rs index a9625d3086c..97c497b8771 100644 --- a/codex-rs/app-server/src/message_processor_tracing_tests.rs +++ b/codex-rs/app-server/src/message_processor_tracing_tests.rs @@ -658,6 +658,7 @@ async fn turn_start_jsonrpc_span_parents_core_turn_spans() -> Result<()> { text_elements: Vec::new(), }], responsesapi_client_metadata: None, + additional_context: None, cwd: None, runtime_workspace_roots: None, approval_policy: None, diff --git a/codex-rs/app-server/src/request_processors.rs b/codex-rs/app-server/src/request_processors.rs index d0958e80ab9..978f1adc328 100644 --- a/codex-rs/app-server/src/request_processors.rs +++ b/codex-rs/app-server/src/request_processors.rs @@ -25,6 +25,7 @@ use codex_app_server_protocol::AccountLoginCompletedNotification; use codex_app_server_protocol::AccountUpdatedNotification; use codex_app_server_protocol::AddCreditsNudgeCreditType; use codex_app_server_protocol::AddCreditsNudgeEmailStatus; +use codex_app_server_protocol::AdditionalContextEntry; use codex_app_server_protocol::AppInfo; use codex_app_server_protocol::AppListUpdatedNotification; use codex_app_server_protocol::AppSummary; @@ -421,6 +422,7 @@ use codex_thread_store::ThreadStore; use codex_thread_store::ThreadStoreError; use codex_utils_absolute_path::AbsolutePathBuf; use codex_utils_pty::DEFAULT_OUTPUT_BYTES_CAP; +use std::collections::BTreeMap; use std::collections::HashMap; use std::collections::HashSet; use std::io::Error as IoError; diff --git a/codex-rs/app-server/src/request_processors/turn_processor.rs b/codex-rs/app-server/src/request_processors/turn_processor.rs index ff2825be678..6dfa31981c2 100644 --- a/codex-rs/app-server/src/request_processors/turn_processor.rs +++ b/codex-rs/app-server/src/request_processors/turn_processor.rs @@ -30,6 +30,16 @@ fn resolve_runtime_workspace_roots( resolved_roots } +fn map_additional_context( + additional_context: Option>, +) -> BTreeMap { + additional_context + .unwrap_or_default() + .into_iter() + .map(|(key, entry)| (key, entry.value)) + .collect() +} + struct ThreadSettingsBuildParams { method: &'static str, cwd: Option, @@ -391,6 +401,7 @@ impl TurnRequestProcessor { .into_iter() .map(V2UserInput::into_core) .collect(); + let additional_context = map_additional_context(params.additional_context); let turn_has_input = !mapped_items.is_empty(); let thread_settings = self .build_thread_settings_overrides( @@ -419,6 +430,7 @@ impl TurnRequestProcessor { environments: environment_selections, final_output_json_schema: params.output_schema, responsesapi_client_metadata: params.responsesapi_client_metadata, + additional_context, thread_settings, }; let turn_id = self @@ -746,10 +758,12 @@ impl TurnRequestProcessor { .into_iter() .map(V2UserInput::into_core) .collect(); + let additional_context = map_additional_context(params.additional_context); let turn_id = thread .steer_input( mapped_items, + additional_context, Some(¶ms.expected_turn_id), params.responsesapi_client_metadata, ) diff --git a/codex-rs/app-server/tests/suite/v2/client_metadata.rs b/codex-rs/app-server/tests/suite/v2/client_metadata.rs index 8d68888e7e2..80f41d7b113 100644 --- a/codex-rs/app-server/tests/suite/v2/client_metadata.rs +++ b/codex-rs/app-server/tests/suite/v2/client_metadata.rs @@ -179,6 +179,7 @@ async fn turn_steer_updates_client_metadata_on_follow_up_responses_request_v2() text_elements: Vec::new(), }], responsesapi_client_metadata: Some(steer_metadata.clone()), + additional_context: None, expected_turn_id: turn_id.clone(), }) .await?; diff --git a/codex-rs/app-server/tests/suite/v2/turn_start.rs b/codex-rs/app-server/tests/suite/v2/turn_start.rs index 236d57a0eee..4e41f434fae 100644 --- a/codex-rs/app-server/tests/suite/v2/turn_start.rs +++ b/codex-rs/app-server/tests/suite/v2/turn_start.rs @@ -16,6 +16,7 @@ use app_test_support::write_mock_responses_config_toml_with_chatgpt_base_url; use app_test_support::write_models_cache; use codex_app_server::INPUT_TOO_LARGE_ERROR_CODE; use codex_app_server::INVALID_PARAMS_ERROR_CODE; +use codex_app_server_protocol::AdditionalContextEntry; use codex_app_server_protocol::ByteRange; use codex_app_server_protocol::ClientInfo; use codex_app_server_protocol::CollabAgentStatus; @@ -301,6 +302,81 @@ async fn turn_start_with_empty_input_runs_model_request() -> Result<()> { Ok(()) } +#[tokio::test] +async fn turn_start_additional_context_flows_to_model_input() -> Result<()> { + let responses = vec![create_final_assistant_message_sse_response("Done")?]; + let server = create_mock_responses_server_sequence_unchecked(responses).await; + + let codex_home = TempDir::new()?; + create_config_toml( + codex_home.path(), + &server.uri(), + "never", + &BTreeMap::default(), + )?; + + let mut mcp = McpProcess::new(codex_home.path()).await?; + timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??; + + let thread_req = mcp + .send_thread_start_request(ThreadStartParams { + model: Some("mock-model".to_string()), + ..Default::default() + }) + .await?; + let thread_resp: JSONRPCResponse = timeout( + DEFAULT_READ_TIMEOUT, + mcp.read_stream_until_response_message(RequestId::Integer(thread_req)), + ) + .await??; + let ThreadStartResponse { thread, .. } = to_response::(thread_resp)?; + + let turn_req = mcp + .send_turn_start_request(TurnStartParams { + thread_id: thread.id, + input: vec![V2UserInput::Text { + text: "inspect tab".to_string(), + text_elements: Vec::new(), + }], + additional_context: Some(HashMap::from([( + "custom_source".to_string(), + AdditionalContextEntry { + value: "source value".to_string(), + }, + )])), + ..Default::default() + }) + .await?; + timeout( + DEFAULT_READ_TIMEOUT, + mcp.read_stream_until_response_message(RequestId::Integer(turn_req)), + ) + .await??; + timeout( + DEFAULT_READ_TIMEOUT, + mcp.read_stream_until_notification_message("turn/completed"), + ) + .await??; + + let requests = server + .received_requests() + .await + .context("failed to fetch received requests")?; + let request = requests + .iter() + .find(|request| request.url.path().ends_with("/responses")) + .context("expected model request")?; + let body = request + .body_json::() + .context("request body should be JSON")?; + assert!( + body.to_string() + .contains("source value") + ); + + Ok(()) +} + #[tokio::test] async fn turn_start_sends_originator_header() -> Result<()> { let responses = vec![create_final_assistant_message_sse_response("Done")?]; @@ -2069,6 +2145,7 @@ async fn turn_start_updates_sandbox_and_cwd_between_turns_v2() -> Result<()> { text_elements: Vec::new(), }], responsesapi_client_metadata: None, + additional_context: None, cwd: Some(first_cwd.clone()), runtime_workspace_roots: None, approval_policy: Some(codex_app_server_protocol::AskForApproval::Never), @@ -2111,6 +2188,7 @@ async fn turn_start_updates_sandbox_and_cwd_between_turns_v2() -> Result<()> { text_elements: Vec::new(), }], responsesapi_client_metadata: None, + additional_context: None, cwd: Some(second_cwd.clone()), runtime_workspace_roots: None, approval_policy: Some(codex_app_server_protocol::AskForApproval::Never), diff --git a/codex-rs/app-server/tests/suite/v2/turn_steer.rs b/codex-rs/app-server/tests/suite/v2/turn_steer.rs index a92b2db5286..c265e69a44c 100644 --- a/codex-rs/app-server/tests/suite/v2/turn_steer.rs +++ b/codex-rs/app-server/tests/suite/v2/turn_steer.rs @@ -1,5 +1,6 @@ #![cfg(unix)] +use anyhow::Context; use anyhow::Result; use app_test_support::McpProcess; use app_test_support::create_mock_responses_server_sequence; @@ -9,6 +10,7 @@ use app_test_support::to_response; use app_test_support::write_mock_responses_config_toml_with_chatgpt_base_url; use codex_app_server::INPUT_TOO_LARGE_ERROR_CODE; use codex_app_server::INVALID_PARAMS_ERROR_CODE; +use codex_app_server_protocol::AdditionalContextEntry; use codex_app_server_protocol::JSONRPCError; use codex_app_server_protocol::JSONRPCNotification; use codex_app_server_protocol::JSONRPCResponse; @@ -21,6 +23,8 @@ use codex_app_server_protocol::TurnSteerParams; use codex_app_server_protocol::TurnSteerResponse; use codex_app_server_protocol::UserInput as V2UserInput; use codex_protocol::user_input::MAX_USER_INPUT_TEXT_CHARS; +use serde_json::Value; +use std::collections::HashMap; use tempfile::TempDir; use tokio::time::timeout; @@ -67,6 +71,7 @@ async fn turn_steer_requires_active_turn() -> Result<()> { text_elements: Vec::new(), }], responsesapi_client_metadata: None, + additional_context: None, expected_turn_id: "turn-does-not-exist".to_string(), }) .await?; @@ -176,6 +181,7 @@ async fn turn_steer_rejects_oversized_text_input() -> Result<()> { text_elements: Vec::new(), }], responsesapi_client_metadata: None, + additional_context: None, expected_turn_id: turn.id.clone(), }) .await?; @@ -284,6 +290,7 @@ async fn turn_steer_returns_active_turn_id() -> Result<()> { text_elements: Vec::new(), }], responsesapi_client_metadata: None, + additional_context: None, expected_turn_id: turn.id.clone(), }) .await?; @@ -312,3 +319,133 @@ async fn turn_steer_returns_active_turn_id() -> Result<()> { Ok(()) } + +#[tokio::test] +async fn turn_steer_accepts_new_context_only_input_and_rejects_duplicate() -> Result<()> { + let tmp = TempDir::new()?; + let codex_home = tmp.path().join("codex_home"); + std::fs::create_dir(&codex_home)?; + let working_directory = tmp.path().join("workdir"); + std::fs::create_dir(&working_directory)?; + + let server = create_mock_responses_server_sequence_unchecked(vec![ + create_shell_command_sse_response( + vec!["sleep".to_string(), "1".to_string()], + Some(&working_directory), + Some(10_000), + "call_sleep", + )?, + app_test_support::create_final_assistant_message_sse_response("Done")?, + ]) + .await; + write_mock_responses_config_toml_with_chatgpt_base_url( + &codex_home, + &server.uri(), + &server.uri(), + )?; + mount_analytics_capture(&server, &codex_home).await?; + + let mut mcp = McpProcess::new_without_managed_config(&codex_home).await?; + timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??; + + let thread_req = mcp + .send_thread_start_request(ThreadStartParams { + model: Some("mock-model".to_string()), + ..Default::default() + }) + .await?; + let thread_resp: JSONRPCResponse = timeout( + DEFAULT_READ_TIMEOUT, + mcp.read_stream_until_response_message(RequestId::Integer(thread_req)), + ) + .await??; + let ThreadStartResponse { thread, .. } = to_response::(thread_resp)?; + + let turn_req = mcp + .send_turn_start_request(TurnStartParams { + thread_id: thread.id.clone(), + input: vec![V2UserInput::Text { + text: "run sleep".to_string(), + text_elements: Vec::new(), + }], + cwd: Some(working_directory), + ..Default::default() + }) + .await?; + let turn_resp: JSONRPCResponse = timeout( + DEFAULT_READ_TIMEOUT, + mcp.read_stream_until_response_message(RequestId::Integer(turn_req)), + ) + .await??; + let TurnStartResponse { turn } = to_response::(turn_resp)?; + timeout( + DEFAULT_READ_TIMEOUT, + mcp.read_stream_until_notification_message("turn/started"), + ) + .await??; + + let additional_context = Some(HashMap::from([( + "browser_info".to_string(), + AdditionalContextEntry { + value: "tab one".to_string(), + }, + )])); + let steer_req = mcp + .send_turn_steer_request(TurnSteerParams { + thread_id: thread.id.clone(), + input: Vec::new(), + responsesapi_client_metadata: None, + additional_context: additional_context.clone(), + expected_turn_id: turn.id.clone(), + }) + .await?; + let steer_resp: JSONRPCResponse = timeout( + DEFAULT_READ_TIMEOUT, + mcp.read_stream_until_response_message(RequestId::Integer(steer_req)), + ) + .await??; + let steer: TurnSteerResponse = to_response::(steer_resp)?; + assert_eq!(steer.turn_id, turn.id); + + let duplicate_req = mcp + .send_turn_steer_request(TurnSteerParams { + thread_id: thread.id.clone(), + input: Vec::new(), + responsesapi_client_metadata: None, + additional_context, + expected_turn_id: turn.id, + }) + .await?; + let duplicate_error: JSONRPCError = timeout( + DEFAULT_READ_TIMEOUT, + mcp.read_stream_until_error_message(RequestId::Integer(duplicate_req)), + ) + .await??; + assert_eq!(duplicate_error.error.code, -32600); + assert_eq!(duplicate_error.error.message, "input must not be empty"); + + timeout( + DEFAULT_READ_TIMEOUT, + mcp.read_stream_until_notification_message("turn/completed"), + ) + .await??; + + let requests = server + .received_requests() + .await + .context("failed to fetch received requests")?; + let response_requests = requests + .iter() + .filter(|request| request.url.path().ends_with("/responses")) + .collect::>(); + assert_eq!(response_requests.len(), 2); + let body = response_requests[1] + .body_json::() + .context("request body should be JSON")?; + assert!( + body.to_string() + .contains("tab one") + ); + + Ok(()) +} diff --git a/codex-rs/core/src/codex_thread.rs b/codex-rs/core/src/codex_thread.rs index 1b40387c3f4..9d54716c9c0 100644 --- a/codex-rs/core/src/codex_thread.rs +++ b/codex-rs/core/src/codex_thread.rs @@ -41,6 +41,7 @@ use codex_thread_store::ThreadStoreError; use codex_thread_store::ThreadStoreResult; use codex_utils_absolute_path::AbsolutePathBuf; use rmcp::model::ReadResourceRequestParams; +use std::collections::BTreeMap; use std::collections::HashMap; use std::path::PathBuf; use std::sync::Arc; @@ -236,11 +237,17 @@ impl CodexThread { pub async fn steer_input( &self, input: Vec, + additional_context: BTreeMap, expected_turn_id: Option<&str>, responsesapi_client_metadata: Option>, ) -> Result { self.codex - .steer_input(input, expected_turn_id, responsesapi_client_metadata) + .steer_input( + input, + additional_context, + expected_turn_id, + responsesapi_client_metadata, + ) .await } diff --git a/codex-rs/core/src/context/contextual_user_message.rs b/codex-rs/core/src/context/contextual_user_message.rs index c7ada2317f0..6b361a9cf4a 100644 --- a/codex-rs/core/src/context/contextual_user_message.rs +++ b/codex-rs/core/src/context/contextual_user_message.rs @@ -2,6 +2,7 @@ use codex_protocol::items::HookPromptItem; use codex_protocol::items::parse_hook_prompt_fragment; use codex_protocol::models::ContentItem; +use super::AdditionalContextFragment; use super::EnvironmentContext; use super::FragmentRegistration; use super::FragmentRegistrationProxy; @@ -19,6 +20,8 @@ static USER_INSTRUCTIONS_REGISTRATION: FragmentRegistrationProxy = FragmentRegistrationProxy::new(); +static ADDITIONAL_CONTEXT_REGISTRATION: FragmentRegistrationProxy = + FragmentRegistrationProxy::new(); static SKILL_INSTRUCTIONS_REGISTRATION: FragmentRegistrationProxy = FragmentRegistrationProxy::new(); static USER_SHELL_COMMAND_REGISTRATION: FragmentRegistrationProxy = @@ -42,6 +45,7 @@ static LEGACY_MODEL_MISMATCH_WARNING_REGISTRATION: FragmentRegistrationProxy< static CONTEXTUAL_USER_FRAGMENTS: &[&dyn FragmentRegistration] = &[ &USER_INSTRUCTIONS_REGISTRATION, &ENVIRONMENT_CONTEXT_REGISTRATION, + &ADDITIONAL_CONTEXT_REGISTRATION, &SKILL_INSTRUCTIONS_REGISTRATION, &USER_SHELL_COMMAND_REGISTRATION, &TURN_ABORTED_REGISTRATION, diff --git a/codex-rs/core/src/context/fragments.rs b/codex-rs/core/src/context/fragments.rs new file mode 100644 index 00000000000..5b6af5eb853 --- /dev/null +++ b/codex-rs/core/src/context/fragments.rs @@ -0,0 +1,54 @@ +use super::ContextualUserFragment; +use codex_protocol::models::ContentItem; +use codex_protocol::models::ResponseInputItem; + +#[derive(Debug, Clone, PartialEq, Eq)] +pub(crate) struct AdditionalContextFragment { + pub(crate) key: String, + pub(crate) value: String, +} + +impl AdditionalContextFragment { + const END_MARKER_SUFFIX: &'static str = ">"; + const START_MARKER_PREFIX: &'static str = " Self { + Self { key, value } + } + + pub(crate) fn input_item(fragments: Vec) -> Option { + let content = fragments + .into_iter() + .map(|fragment| ContentItem::InputText { + text: fragment.render(), + }) + .collect::>(); + if content.is_empty() { + return None; + } + + Some(ResponseInputItem::Message { + role: Self::role().to_string(), + content, + phase: None, + }) + } +} + +impl ContextualUserFragment for AdditionalContextFragment { + fn role() -> &'static str { + "user" + } + + fn markers(&self) -> (&'static str, &'static str) { + Self::type_markers() + } + + fn type_markers() -> (&'static str, &'static str) { + (Self::START_MARKER_PREFIX, Self::END_MARKER_SUFFIX) + } + + fn body(&self) -> String { + format!("{}>{}>(); + if !items.is_empty() { + task_input.push(TurnInput::UserInput(items)); + } + sess.spawn_task_with_input( Arc::clone(¤t_context), - items, + task_input, crate::tasks::RegularTask::new(), ) .await; diff --git a/codex-rs/core/src/session/input_queue.rs b/codex-rs/core/src/session/input_queue.rs index 5f92322c8d8..5d03aa31de8 100644 --- a/codex-rs/core/src/session/input_queue.rs +++ b/codex-rs/core/src/session/input_queue.rs @@ -155,13 +155,13 @@ impl InputQueue { .accept_mailbox_delivery_for_current_turn(); } - pub(super) async fn push_pending_input_and_accept_mailbox_delivery_for_turn_state( + pub(super) async fn extend_pending_input_and_accept_mailbox_delivery_for_turn_state( &self, turn_state: &Mutex, - input: TurnInput, + input: Vec, ) { let mut turn_state = turn_state.lock().await; - turn_state.pending_input.items.push(input); + turn_state.pending_input.items.extend(input); turn_state.accept_mailbox_delivery_for_current_turn(); } diff --git a/codex-rs/core/src/session/mod.rs b/codex-rs/core/src/session/mod.rs index d8d52558208..e11dc02764c 100644 --- a/codex-rs/core/src/session/mod.rs +++ b/codex-rs/core/src/session/mod.rs @@ -1,3 +1,4 @@ +use std::collections::BTreeMap; use std::collections::HashMap; use std::collections::HashSet; use std::fmt::Debug; @@ -18,6 +19,7 @@ use crate::compact; use crate::config::ManagedFeatures; use crate::config::resolve_tool_suggest_config_from_layer_stack; use crate::connectors; +use crate::context::AdditionalContextFragment; use crate::context::ApprovedCommandPrefixSaved; use crate::context::AppsInstructions; use crate::context::AvailablePluginsInstructions; @@ -742,11 +744,17 @@ impl Codex { pub async fn steer_input( &self, input: Vec, + additional_context: BTreeMap, expected_turn_id: Option<&str>, responsesapi_client_metadata: Option>, ) -> Result { self.session - .steer_input(input, expected_turn_id, responsesapi_client_metadata) + .steer_input( + input, + additional_context, + expected_turn_id, + responsesapi_client_metadata, + ) .await } @@ -3152,6 +3160,7 @@ impl Session { pub async fn steer_input( &self, input: Vec, + additional_context: BTreeMap, expected_turn_id: Option<&str>, responsesapi_client_metadata: Option>, ) -> Result { @@ -3188,9 +3197,24 @@ impl Session { None => return Err(SteerInputError::NoActiveTurn(input)), } - if input.is_empty() { + let (additional_context_input, additional_context_store) = { + let mut additional_context_store = { + let state = self.state.lock().await; + state.additional_context.clone() + }; + let fragments = additional_context_store.merge(additional_context); + ( + AdditionalContextFragment::input_item(fragments), + additional_context_store, + ) + }; + if input.is_empty() && additional_context_input.is_none() { return Err(SteerInputError::EmptyInput); } + { + let mut state = self.state.lock().await; + state.additional_context = additional_context_store; + } if let Some(responsesapi_client_metadata) = responsesapi_client_metadata && let Some((_, active_task)) = active_turn.tasks.first() @@ -3201,10 +3225,17 @@ impl Session { .set_responsesapi_client_metadata(responsesapi_client_metadata); } + let mut pending_input = additional_context_input + .into_iter() + .map(TurnInput::ResponseInputItem) + .collect::>(); + if !input.is_empty() { + pending_input.push(TurnInput::UserInput(input)); + } self.input_queue - .push_pending_input_and_accept_mailbox_delivery_for_turn_state( + .extend_pending_input_and_accept_mailbox_delivery_for_turn_state( active_turn.turn_state.as_ref(), - TurnInput::UserInput(input), + pending_input, ) .await; Ok(active_turn_id.clone()) diff --git a/codex-rs/core/src/session/tests.rs b/codex-rs/core/src/session/tests.rs index 36976bf4a43..64b9d29a59c 100644 --- a/codex-rs/core/src/session/tests.rs +++ b/codex-rs/core/src/session/tests.rs @@ -8046,6 +8046,7 @@ async fn task_finish_emits_turn_item_lifecycle_for_leftover_pending_user_input() }]; sess.steer_input( pending_user_input.clone(), + /*additional_context*/ Default::default(), Some(&tc.sub_id), /*responsesapi_client_metadata*/ None, ) @@ -8142,7 +8143,10 @@ async fn steer_input_requires_active_turn() { let err = sess .steer_input( - input, /*expected_turn_id*/ None, /*responsesapi_client_metadata*/ None, + input, + /*additional_context*/ Default::default(), + /*expected_turn_id*/ None, + /*responsesapi_client_metadata*/ None, ) .await .expect_err("steering without active turn should fail"); @@ -8174,6 +8178,7 @@ async fn steer_input_enforces_expected_turn_id() { let err = sess .steer_input( steer_input, + /*additional_context*/ Default::default(), Some("different-turn-id"), /*responsesapi_client_metadata*/ None, ) @@ -8220,6 +8225,7 @@ async fn steer_input_rejects_non_regular_turns() { let err = sess .steer_input( steer_input, + /*additional_context*/ Default::default(), /*expected_turn_id*/ None, /*responsesapi_client_metadata*/ None, ) @@ -8256,6 +8262,7 @@ async fn steer_input_returns_active_turn_id() { let turn_id = sess .steer_input( steer_input, + /*additional_context*/ Default::default(), Some(&tc.sub_id), /*responsesapi_client_metadata*/ None, ) @@ -9301,6 +9308,7 @@ async fn steered_input_reopens_mailbox_delivery_for_current_turn() { text: "follow up".to_string(), text_elements: Vec::new(), }], + /*additional_context*/ Default::default(), Some(&tc.sub_id), /*responsesapi_client_metadata*/ None, ) @@ -9350,6 +9358,7 @@ async fn stale_defer_mailbox_delivery_does_not_override_steered_input() { text: "follow up".to_string(), text_elements: Vec::new(), }], + /*additional_context*/ Default::default(), Some(&tc.sub_id), /*responsesapi_client_metadata*/ None, ) diff --git a/codex-rs/core/src/state/additional_context.rs b/codex-rs/core/src/state/additional_context.rs new file mode 100644 index 00000000000..52c5e603c6a --- /dev/null +++ b/codex-rs/core/src/state/additional_context.rs @@ -0,0 +1,23 @@ +use std::collections::BTreeMap; + +use crate::context::AdditionalContextFragment; + +#[derive(Debug, Clone, Default, PartialEq, Eq)] +pub(crate) struct AdditionalContextStore { + values: BTreeMap, +} + +impl AdditionalContextStore { + pub(crate) fn merge( + &mut self, + values: BTreeMap, + ) -> Vec { + let fragments = values + .iter() + .filter(|(key, value)| self.values.get(*key) != Some(*value)) + .map(|(key, value)| AdditionalContextFragment::new(key.clone(), value.clone())) + .collect(); + self.values = values; + fragments + } +} diff --git a/codex-rs/core/src/state/mod.rs b/codex-rs/core/src/state/mod.rs index 3122ec5f259..c693221bedc 100644 --- a/codex-rs/core/src/state/mod.rs +++ b/codex-rs/core/src/state/mod.rs @@ -1,8 +1,10 @@ +mod additional_context; mod auto_compact_window; mod service; mod session; mod turn; +pub(crate) use additional_context::AdditionalContextStore; pub(crate) use auto_compact_window::AutoCompactWindowSnapshot; pub(crate) use service::SessionServices; pub(crate) use session::SessionState; diff --git a/codex-rs/core/src/state/session.rs b/codex-rs/core/src/state/session.rs index baeaddbbf91..ac59cb32d56 100644 --- a/codex-rs/core/src/state/session.rs +++ b/codex-rs/core/src/state/session.rs @@ -6,6 +6,7 @@ use codex_sandboxing::policy_transforms::merge_permission_profiles; use std::collections::HashSet; use std::collections::VecDeque; +use super::AdditionalContextStore; use super::auto_compact_window::AutoCompactWindow; use super::auto_compact_window::AutoCompactWindowSnapshot; use crate::context_manager::ContextManager; @@ -25,6 +26,7 @@ pub(crate) struct SessionState { pub(crate) latest_rate_limits: Option, pub(crate) server_reasoning_included: bool, pub(crate) mcp_dependency_prompted: HashSet, + pub(crate) additional_context: AdditionalContextStore, /// Settings used by the latest regular user turn, used for turn-to-turn /// model/realtime handling on subsequent regular turns (including full-context /// reinjection after resume or `/compact`). @@ -49,6 +51,7 @@ impl SessionState { latest_rate_limits: None, server_reasoning_included: false, mcp_dependency_prompted: HashSet::new(), + additional_context: AdditionalContextStore::default(), previous_turn_settings: None, auto_compact_window: AutoCompactWindow::new(), startup_prewarm: None, diff --git a/codex-rs/core/src/tasks/mod.rs b/codex-rs/core/src/tasks/mod.rs index 4d6db8acf22..69b4e1735a5 100644 --- a/codex-rs/core/src/tasks/mod.rs +++ b/codex-rs/core/src/tasks/mod.rs @@ -297,16 +297,34 @@ where } } +fn user_input_to_turn_input(input: Vec) -> Vec { + if input.is_empty() { + Vec::new() + } else { + vec![TurnInput::UserInput(input)] + } +} + impl Session { pub async fn spawn_task( self: &Arc, turn_context: Arc, input: Vec, task: T, + ) { + let input = user_input_to_turn_input(input); + self.spawn_task_with_input(turn_context, input, task).await; + } + + pub(crate) async fn spawn_task_with_input( + self: &Arc, + turn_context: Arc, + input: Vec, + task: T, ) { self.abort_all_tasks(TurnAbortReason::Replaced).await; self.clear_connector_selection().await; - self.start_task(turn_context, input, task).await; + self.start_task_with_input(turn_context, input, task).await; } pub(crate) async fn start_task( @@ -314,6 +332,16 @@ impl Session { turn_context: Arc, input: Vec, task: T, + ) { + let input = user_input_to_turn_input(input); + self.start_task_with_input(turn_context, input, task).await; + } + + pub(crate) async fn start_task_with_input( + self: &Arc, + turn_context: Arc, + input: Vec, + task: T, ) { let task: Arc = Arc::new(task); let task_kind = task.kind(); @@ -380,11 +408,7 @@ impl Session { )); let ctx = Arc::clone(&turn_context); let task_for_run = Arc::clone(&task); - let task_input = if input.is_empty() { - Vec::new() - } else { - vec![TurnInput::UserInput(input)] - }; + let task_input = input; let task_cancellation_token = cancellation_token.child_token(); // Task-owned turn spans keep a core-owned span open for the // full task lifecycle after the submission dispatch span ends. diff --git a/codex-rs/core/tests/suite/additional_context.rs b/codex-rs/core/tests/suite/additional_context.rs new file mode 100644 index 00000000000..1d42cae12ed --- /dev/null +++ b/codex-rs/core/tests/suite/additional_context.rs @@ -0,0 +1,232 @@ +use anyhow::Result; +use codex_protocol::items::TurnItem; +use codex_protocol::protocol::EventMsg; +use codex_protocol::protocol::ItemCompletedEvent; +use codex_protocol::protocol::Op; +use codex_protocol::user_input::UserInput; +use core_test_support::responses::ev_completed; +use core_test_support::responses::ev_response_created; +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::skip_if_no_network; +use core_test_support::test_codex::test_codex; +use core_test_support::wait_for_event; +use core_test_support::wait_for_event_match; +use pretty_assertions::assert_eq; +use std::collections::BTreeMap; + +fn user_turn(text: &str, additional_context: BTreeMap) -> Op { + Op::UserInput { + environments: None, + items: vec![UserInput::Text { + text: text.to_string(), + text_elements: Vec::new(), + }], + final_output_json_schema: None, + responsesapi_client_metadata: None, + additional_context, + thread_settings: Default::default(), + } +} + +async fn wait_for_turn_complete(codex: &codex_core::CodexThread) { + wait_for_event(codex, |event| matches!(event, EventMsg::TurnComplete(_))).await; +} + +#[tokio::test(flavor = "multi_thread", worker_threads = 2)] +async fn additional_context_is_model_visible_but_not_a_user_message_item() -> Result<()> { + skip_if_no_network!(Ok(())); + + let server = start_mock_server().await; + let request = mount_sse_once( + &server, + sse(vec![ev_response_created("resp-1"), ev_completed("resp-1")]), + ) + .await; + let test = test_codex() + .with_config(|config| config.include_environment_context = false) + .build(&server) + .await?; + + test.codex + .submit(user_turn( + "inspect the active tab", + BTreeMap::from([ + ("browser_info".to_string(), "tab one".to_string()), + ("automation_info".to_string(), "run one".to_string()), + ]), + )) + .await?; + + let user_item = wait_for_event_match(&test.codex, |event| match event { + EventMsg::ItemCompleted(ItemCompletedEvent { + item: TurnItem::UserMessage(item), + .. + }) => Some(item.clone()), + _ => None, + }) + .await; + assert_eq!( + user_item.content, + vec![UserInput::Text { + text: "inspect the active tab".to_string(), + text_elements: Vec::new(), + }] + ); + wait_for_turn_complete(&test.codex).await; + + assert_eq!( + request.single_request().message_input_texts("user"), + vec![ + "run one", + "tab one", + "inspect the active tab", + ] + ); + + Ok(()) +} + +#[tokio::test(flavor = "multi_thread", worker_threads = 2)] +async fn additional_context_is_deduplicated_between_turns_while_retained() -> Result<()> { + skip_if_no_network!(Ok(())); + + let server = start_mock_server().await; + let first_request = mount_sse_once( + &server, + sse(vec![ev_response_created("resp-1"), ev_completed("resp-1")]), + ) + .await; + let second_request = mount_sse_once( + &server, + sse(vec![ev_response_created("resp-2"), ev_completed("resp-2")]), + ) + .await; + let test = test_codex() + .with_config(|config| config.include_environment_context = false) + .build(&server) + .await?; + let additional_context = BTreeMap::from([("browser_info".to_string(), "same tab".to_string())]); + + test.codex + .submit(user_turn("first turn", additional_context.clone())) + .await?; + wait_for_turn_complete(&test.codex).await; + + test.codex + .submit(user_turn("second turn", additional_context)) + .await?; + wait_for_turn_complete(&test.codex).await; + + assert_eq!( + first_request.single_request().message_input_texts("user"), + vec![ + "same tab", + "first turn", + ] + ); + assert_eq!( + second_request.single_request().message_input_texts("user"), + vec![ + "same tab", + "first turn", + "second turn", + ] + ); + + Ok(()) +} + +#[tokio::test(flavor = "multi_thread", worker_threads = 2)] +async fn additional_context_removes_one_value_while_adding_another() -> Result<()> { + skip_if_no_network!(Ok(())); + + let server = start_mock_server().await; + let first_request = mount_sse_once( + &server, + sse(vec![ev_response_created("resp-1"), ev_completed("resp-1")]), + ) + .await; + let second_request = mount_sse_once( + &server, + sse(vec![ev_response_created("resp-2"), ev_completed("resp-2")]), + ) + .await; + let third_request = mount_sse_once( + &server, + sse(vec![ev_response_created("resp-3"), ev_completed("resp-3")]), + ) + .await; + let test = test_codex() + .with_config(|config| config.include_environment_context = false) + .build(&server) + .await?; + + test.codex + .submit(user_turn( + "first turn", + BTreeMap::from([ + ("automation_info".to_string(), "run one".to_string()), + ("browser_info".to_string(), "tab one".to_string()), + ]), + )) + .await?; + wait_for_turn_complete(&test.codex).await; + + test.codex + .submit(user_turn( + "second turn", + BTreeMap::from([ + ("automation_info".to_string(), "run one".to_string()), + ("terminal_info".to_string(), "pty one".to_string()), + ]), + )) + .await?; + wait_for_turn_complete(&test.codex).await; + + test.codex + .submit(user_turn( + "third turn", + BTreeMap::from([ + ("automation_info".to_string(), "run one".to_string()), + ("browser_info".to_string(), "tab one".to_string()), + ("terminal_info".to_string(), "pty one".to_string()), + ]), + )) + .await?; + wait_for_turn_complete(&test.codex).await; + + assert_eq!( + first_request.single_request().message_input_texts("user"), + vec![ + "run one", + "tab one", + "first turn", + ] + ); + assert_eq!( + second_request.single_request().message_input_texts("user"), + vec![ + "run one", + "tab one", + "first turn", + "pty one", + "second turn", + ] + ); + assert_eq!( + third_request.single_request().message_input_texts("user"), + vec![ + "run one", + "tab one", + "first turn", + "pty one", + "second turn", + "tab one", + "third turn", + ] + ); + + Ok(()) +} diff --git a/codex-rs/core/tests/suite/mod.rs b/codex-rs/core/tests/suite/mod.rs index 87772aa2797..f47de672bd5 100644 --- a/codex-rs/core/tests/suite/mod.rs +++ b/codex-rs/core/tests/suite/mod.rs @@ -29,6 +29,7 @@ pub static CODEX_ALIASES_TEMP_DIR: Option = { #[cfg(not(target_os = "windows"))] mod abort_tasks; +mod additional_context; mod agent_jobs; mod agent_websocket; mod agents_md; diff --git a/codex-rs/core/tests/suite/pending_input.rs b/codex-rs/core/tests/suite/pending_input.rs index db076f989a3..c8eec9bc8ed 100644 --- a/codex-rs/core/tests/suite/pending_input.rs +++ b/codex-rs/core/tests/suite/pending_input.rs @@ -150,6 +150,7 @@ async fn steer_user_input(codex: &CodexThread, text: &str) { text: text.to_string(), text_elements: Vec::new(), }], + /*additional_context*/ Default::default(), /*expected_turn_id*/ None, /*responsesapi_client_metadata*/ None, ) diff --git a/codex-rs/protocol/src/protocol.rs b/codex-rs/protocol/src/protocol.rs index c3d9696d4e2..b420ec4021f 100644 --- a/codex-rs/protocol/src/protocol.rs +++ b/codex-rs/protocol/src/protocol.rs @@ -3,6 +3,7 @@ //! Uses a SQ (Submission Queue) / EQ (Event Queue) pattern to asynchronously communicate //! between user and agent. +use std::collections::BTreeMap; use std::collections::HashMap; use std::fmt; use std::ops::Mul; @@ -513,6 +514,9 @@ pub enum Op { /// Optional turn-scoped Responses API `client_metadata`. #[serde(default, skip_serializing_if = "Option::is_none")] responsesapi_client_metadata: Option>, + /// Client-supplied context fragments keyed by an opaque source identifier. + #[serde(default, skip_serializing_if = "BTreeMap::is_empty")] + additional_context: BTreeMap, /// Persistent thread-settings overrides to apply before the input. #[serde(default, flatten)] From 557d27eb419686e475c9f65aaf4d94461ed59a97 Mon Sep 17 00:00:00 2001 From: pakrym-oai Date: Fri, 22 May 2026 15:19:51 -0700 Subject: [PATCH 04/17] Remove generated app-server schema changes --- .../schema/json/ClientRequest.json | 2730 ++++------------- ...CommandExecutionRequestApprovalParams.json | 21 - .../FuzzyFileSearchSessionStartParams.json | 20 - .../FuzzyFileSearchSessionStartResponse.json | 5 - .../FuzzyFileSearchSessionStopParams.json | 13 - .../FuzzyFileSearchSessionStopResponse.json | 5 - .../FuzzyFileSearchSessionUpdateParams.json | 17 - .../FuzzyFileSearchSessionUpdateResponse.json | 5 - .../schema/json/ServerRequest.json | 21 - .../codex_app_server_protocol.schemas.json | 2483 ++------------- .../codex_app_server_protocol.v2.schemas.json | 2449 ++------------- .../json/v2/CollaborationModeListParams.json | 6 - .../v2/CollaborationModeListResponse.json | 84 - .../schema/json/v2/CommandExecParams.json | 7 - .../schema/json/v2/ConfigReadResponse.json | 11 - .../v2/ConfigRequirementsReadResponse.json | 29 - .../schema/json/v2/EnvironmentAddParams.json | 17 - .../json/v2/EnvironmentAddResponse.json | 5 - .../schema/json/v2/MemoryResetResponse.json | 5 - .../json/v2/MockExperimentalMethodParams.json | 14 - .../v2/MockExperimentalMethodResponse.json | 14 - .../schema/json/v2/ProcessKillParams.json | 15 - .../schema/json/v2/ProcessKillResponse.json | 6 - .../json/v2/ProcessResizePtyParams.json | 48 - .../json/v2/ProcessResizePtyResponse.json | 6 - .../schema/json/v2/ProcessSpawnParams.json | 113 - .../schema/json/v2/ProcessSpawnResponse.json | 6 - .../json/v2/ProcessWriteStdinParams.json | 26 - .../json/v2/ProcessWriteStdinResponse.json | 6 - .../json/v2/RemoteControlDisableResponse.json | 38 - .../json/v2/RemoteControlEnableResponse.json | 38 - .../v2/RemoteControlStatusReadResponse.json | 38 - .../ThreadBackgroundTerminalsCleanParams.json | 13 - ...hreadBackgroundTerminalsCleanResponse.json | 5 - .../v2/ThreadDecrementElicitationParams.json | 15 - .../ThreadDecrementElicitationResponse.json | 22 - .../schema/json/v2/ThreadForkParams.json | 33 - .../schema/json/v2/ThreadForkResponse.json | 20 - .../v2/ThreadIncrementElicitationParams.json | 15 - .../ThreadIncrementElicitationResponse.json | 22 - .../json/v2/ThreadMemoryModeSetParams.json | 26 - .../json/v2/ThreadMemoryModeSetResponse.json | 5 - .../v2/ThreadRealtimeAppendAudioParams.json | 58 - .../v2/ThreadRealtimeAppendAudioResponse.json | 6 - .../v2/ThreadRealtimeAppendTextParams.json | 18 - .../v2/ThreadRealtimeAppendTextResponse.json | 6 - .../v2/ThreadRealtimeListVoicesParams.json | 6 - .../v2/ThreadRealtimeListVoicesResponse.json | 69 - .../json/v2/ThreadRealtimeStartParams.json | 130 - .../json/v2/ThreadRealtimeStartResponse.json | 6 - .../json/v2/ThreadRealtimeStopParams.json | 14 - .../json/v2/ThreadRealtimeStopResponse.json | 6 - .../schema/json/v2/ThreadResumeParams.json | 43 - .../schema/json/v2/ThreadResumeResponse.json | 20 - .../schema/json/v2/ThreadSearchParams.json | 100 - .../schema/json/v2/ThreadSearchResponse.json | 2097 ------------- .../json/v2/ThreadSettingsUpdateParams.json | 381 --- .../json/v2/ThreadSettingsUpdateResponse.json | 5 - .../schema/json/v2/ThreadStartParams.json | 51 - .../schema/json/v2/ThreadStartResponse.json | 20 - .../json/v2/ThreadTurnsItemsListParams.json | 53 - .../json/v2/ThreadTurnsItemsListResponse.json | 1434 --------- .../schema/json/v2/ThreadTurnsListParams.json | 85 - .../json/v2/ThreadTurnsListResponse.json | 1707 ----------- .../schema/json/v2/TurnStartParams.json | 69 - .../schema/json/v2/TurnSteerParams.json | 31 - .../schema/typescript/ClientRequest.ts | 25 +- .../FuzzyFileSearchSessionStartParams.ts | 5 - .../FuzzyFileSearchSessionStartResponse.ts | 5 - .../FuzzyFileSearchSessionStopParams.ts | 5 - .../FuzzyFileSearchSessionStopResponse.ts | 5 - .../FuzzyFileSearchSessionUpdateParams.ts | 5 - .../FuzzyFileSearchSessionUpdateResponse.ts | 5 - .../schema/typescript/index.ts | 6 - .../typescript/v2/AdditionalContextEntry.ts | 5 - .../v2/CollaborationModeListParams.ts | 8 - .../v2/CollaborationModeListResponse.ts | 9 - .../schema/typescript/v2/CommandExecParams.ts | 48 +- .../CommandExecutionRequestApprovalParams.ts | 39 +- .../schema/typescript/v2/Config.ts | 6 +- .../typescript/v2/ConfigRequirements.ts | 5 +- .../typescript/v2/EnvironmentAddParams.ts | 5 - .../typescript/v2/EnvironmentAddResponse.ts | 5 - .../typescript/v2/MemoryResetResponse.ts | 5 - .../v2/MockExperimentalMethodParams.ts | 9 - .../v2/MockExperimentalMethodResponse.ts | 9 - .../schema/typescript/v2/ProcessKillParams.ts | 12 - .../typescript/v2/ProcessKillResponse.ts | 8 - .../typescript/v2/ProcessResizePtyParams.ts | 17 - .../typescript/v2/ProcessResizePtyResponse.ts | 8 - .../typescript/v2/ProcessSpawnParams.ts | 73 - .../typescript/v2/ProcessSpawnResponse.ts | 8 - .../typescript/v2/ProcessWriteStdinParams.ts | 21 - .../v2/ProcessWriteStdinResponse.ts | 8 - .../v2/RemoteControlDisableResponse.ts | 6 - .../v2/RemoteControlEnableResponse.ts | 6 - .../v2/RemoteControlStatusReadResponse.ts | 6 - .../ThreadBackgroundTerminalsCleanParams.ts | 5 - .../ThreadBackgroundTerminalsCleanResponse.ts | 5 - .../v2/ThreadDecrementElicitationParams.ts | 12 - .../v2/ThreadDecrementElicitationResponse.ts | 16 - .../schema/typescript/v2/ThreadForkParams.ts | 38 +- .../typescript/v2/ThreadForkResponse.ts | 22 +- .../v2/ThreadIncrementElicitationParams.ts | 12 - .../v2/ThreadIncrementElicitationResponse.ts | 16 - .../v2/ThreadMemoryModeSetParams.ts | 6 - .../v2/ThreadMemoryModeSetResponse.ts | 5 - .../v2/ThreadRealtimeAppendAudioParams.ts | 9 - .../v2/ThreadRealtimeAppendAudioResponse.ts | 8 - .../v2/ThreadRealtimeAppendTextParams.ts | 8 - .../v2/ThreadRealtimeAppendTextResponse.ts | 8 - .../v2/ThreadRealtimeListVoicesParams.ts | 8 - .../v2/ThreadRealtimeListVoicesResponse.ts | 9 - .../v2/ThreadRealtimeStartParams.ts | 16 - .../v2/ThreadRealtimeStartResponse.ts | 8 - .../typescript/v2/ThreadRealtimeStopParams.ts | 8 - .../v2/ThreadRealtimeStopResponse.ts | 8 - .../typescript/v2/ThreadResumeParams.ts | 44 +- .../typescript/v2/ThreadResumeResponse.ts | 22 +- .../typescript/v2/ThreadSearchParams.ts | 38 - .../typescript/v2/ThreadSearchResponse.ts | 18 - .../v2/ThreadSettingsUpdateParams.ts | 61 - .../v2/ThreadSettingsUpdateResponse.ts | 5 - .../schema/typescript/v2/ThreadStartParams.ts | 44 +- .../typescript/v2/ThreadStartResponse.ts | 22 +- .../v2/ThreadTurnsItemsListParams.ts | 18 - .../v2/ThreadTurnsItemsListResponse.ts | 16 - .../typescript/v2/ThreadTurnsListParams.ts | 23 - .../typescript/v2/ThreadTurnsListResponse.ts | 18 - .../schema/typescript/v2/TurnStartParams.ts | 70 +- .../schema/typescript/v2/TurnSteerParams.ts | 14 +- .../schema/typescript/v2/index.ts | 45 - 132 files changed, 1117 insertions(+), 14847 deletions(-) delete mode 100644 codex-rs/app-server-protocol/schema/json/FuzzyFileSearchSessionStartParams.json delete mode 100644 codex-rs/app-server-protocol/schema/json/FuzzyFileSearchSessionStartResponse.json delete mode 100644 codex-rs/app-server-protocol/schema/json/FuzzyFileSearchSessionStopParams.json delete mode 100644 codex-rs/app-server-protocol/schema/json/FuzzyFileSearchSessionStopResponse.json delete mode 100644 codex-rs/app-server-protocol/schema/json/FuzzyFileSearchSessionUpdateParams.json delete mode 100644 codex-rs/app-server-protocol/schema/json/FuzzyFileSearchSessionUpdateResponse.json delete mode 100644 codex-rs/app-server-protocol/schema/json/v2/CollaborationModeListParams.json delete mode 100644 codex-rs/app-server-protocol/schema/json/v2/CollaborationModeListResponse.json delete mode 100644 codex-rs/app-server-protocol/schema/json/v2/EnvironmentAddParams.json delete mode 100644 codex-rs/app-server-protocol/schema/json/v2/EnvironmentAddResponse.json delete mode 100644 codex-rs/app-server-protocol/schema/json/v2/MemoryResetResponse.json delete mode 100644 codex-rs/app-server-protocol/schema/json/v2/MockExperimentalMethodParams.json delete mode 100644 codex-rs/app-server-protocol/schema/json/v2/MockExperimentalMethodResponse.json delete mode 100644 codex-rs/app-server-protocol/schema/json/v2/ProcessKillParams.json delete mode 100644 codex-rs/app-server-protocol/schema/json/v2/ProcessKillResponse.json delete mode 100644 codex-rs/app-server-protocol/schema/json/v2/ProcessResizePtyParams.json delete mode 100644 codex-rs/app-server-protocol/schema/json/v2/ProcessResizePtyResponse.json delete mode 100644 codex-rs/app-server-protocol/schema/json/v2/ProcessSpawnParams.json delete mode 100644 codex-rs/app-server-protocol/schema/json/v2/ProcessSpawnResponse.json delete mode 100644 codex-rs/app-server-protocol/schema/json/v2/ProcessWriteStdinParams.json delete mode 100644 codex-rs/app-server-protocol/schema/json/v2/ProcessWriteStdinResponse.json delete mode 100644 codex-rs/app-server-protocol/schema/json/v2/RemoteControlDisableResponse.json delete mode 100644 codex-rs/app-server-protocol/schema/json/v2/RemoteControlEnableResponse.json delete mode 100644 codex-rs/app-server-protocol/schema/json/v2/RemoteControlStatusReadResponse.json delete mode 100644 codex-rs/app-server-protocol/schema/json/v2/ThreadBackgroundTerminalsCleanParams.json delete mode 100644 codex-rs/app-server-protocol/schema/json/v2/ThreadBackgroundTerminalsCleanResponse.json delete mode 100644 codex-rs/app-server-protocol/schema/json/v2/ThreadDecrementElicitationParams.json delete mode 100644 codex-rs/app-server-protocol/schema/json/v2/ThreadDecrementElicitationResponse.json delete mode 100644 codex-rs/app-server-protocol/schema/json/v2/ThreadIncrementElicitationParams.json delete mode 100644 codex-rs/app-server-protocol/schema/json/v2/ThreadIncrementElicitationResponse.json delete mode 100644 codex-rs/app-server-protocol/schema/json/v2/ThreadMemoryModeSetParams.json delete mode 100644 codex-rs/app-server-protocol/schema/json/v2/ThreadMemoryModeSetResponse.json delete mode 100644 codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeAppendAudioParams.json delete mode 100644 codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeAppendAudioResponse.json delete mode 100644 codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeAppendTextParams.json delete mode 100644 codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeAppendTextResponse.json delete mode 100644 codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeListVoicesParams.json delete mode 100644 codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeListVoicesResponse.json delete mode 100644 codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeStartParams.json delete mode 100644 codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeStartResponse.json delete mode 100644 codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeStopParams.json delete mode 100644 codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeStopResponse.json delete mode 100644 codex-rs/app-server-protocol/schema/json/v2/ThreadSearchParams.json delete mode 100644 codex-rs/app-server-protocol/schema/json/v2/ThreadSearchResponse.json delete mode 100644 codex-rs/app-server-protocol/schema/json/v2/ThreadSettingsUpdateParams.json delete mode 100644 codex-rs/app-server-protocol/schema/json/v2/ThreadSettingsUpdateResponse.json delete mode 100644 codex-rs/app-server-protocol/schema/json/v2/ThreadTurnsItemsListParams.json delete mode 100644 codex-rs/app-server-protocol/schema/json/v2/ThreadTurnsItemsListResponse.json delete mode 100644 codex-rs/app-server-protocol/schema/json/v2/ThreadTurnsListParams.json delete mode 100644 codex-rs/app-server-protocol/schema/json/v2/ThreadTurnsListResponse.json delete mode 100644 codex-rs/app-server-protocol/schema/typescript/FuzzyFileSearchSessionStartParams.ts delete mode 100644 codex-rs/app-server-protocol/schema/typescript/FuzzyFileSearchSessionStartResponse.ts delete mode 100644 codex-rs/app-server-protocol/schema/typescript/FuzzyFileSearchSessionStopParams.ts delete mode 100644 codex-rs/app-server-protocol/schema/typescript/FuzzyFileSearchSessionStopResponse.ts delete mode 100644 codex-rs/app-server-protocol/schema/typescript/FuzzyFileSearchSessionUpdateParams.ts delete mode 100644 codex-rs/app-server-protocol/schema/typescript/FuzzyFileSearchSessionUpdateResponse.ts delete mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/AdditionalContextEntry.ts delete mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/CollaborationModeListParams.ts delete mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/CollaborationModeListResponse.ts delete mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/EnvironmentAddParams.ts delete mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/EnvironmentAddResponse.ts delete mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/MemoryResetResponse.ts delete mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/MockExperimentalMethodParams.ts delete mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/MockExperimentalMethodResponse.ts delete mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ProcessKillParams.ts delete mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ProcessKillResponse.ts delete mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ProcessResizePtyParams.ts delete mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ProcessResizePtyResponse.ts delete mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ProcessSpawnParams.ts delete mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ProcessSpawnResponse.ts delete mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ProcessWriteStdinParams.ts delete mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ProcessWriteStdinResponse.ts delete mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/RemoteControlDisableResponse.ts delete mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/RemoteControlEnableResponse.ts delete mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/RemoteControlStatusReadResponse.ts delete mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ThreadBackgroundTerminalsCleanParams.ts delete mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ThreadBackgroundTerminalsCleanResponse.ts delete mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ThreadDecrementElicitationParams.ts delete mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ThreadDecrementElicitationResponse.ts delete mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ThreadIncrementElicitationParams.ts delete mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ThreadIncrementElicitationResponse.ts delete mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ThreadMemoryModeSetParams.ts delete mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ThreadMemoryModeSetResponse.ts delete mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeAppendAudioParams.ts delete mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeAppendAudioResponse.ts delete mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeAppendTextParams.ts delete mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeAppendTextResponse.ts delete mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeListVoicesParams.ts delete mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeListVoicesResponse.ts delete mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeStartParams.ts delete mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeStartResponse.ts delete mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeStopParams.ts delete mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeStopResponse.ts delete mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ThreadSearchParams.ts delete mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ThreadSearchResponse.ts delete mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ThreadSettingsUpdateParams.ts delete mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ThreadSettingsUpdateResponse.ts delete mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ThreadTurnsItemsListParams.ts delete mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ThreadTurnsItemsListResponse.ts delete mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ThreadTurnsListParams.ts delete mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ThreadTurnsListResponse.ts diff --git a/codex-rs/app-server-protocol/schema/json/ClientRequest.json b/codex-rs/app-server-protocol/schema/json/ClientRequest.json index 384e8455c3f..7595527c212 100644 --- a/codex-rs/app-server-protocol/schema/json/ClientRequest.json +++ b/codex-rs/app-server-protocol/schema/json/ClientRequest.json @@ -12,17 +12,6 @@ ], "type": "string" }, - "AdditionalContextEntry": { - "properties": { - "value": { - "type": "string" - } - }, - "required": [ - "value" - ], - "type": "object" - }, "ApprovalsReviewer": { "description": "Configures who approval requests are routed to for review. Examples include sandbox escapes, blocked network access, MCP approval prompts, and ARC escalations. Defaults to `user`. `auto_review` uses a carefully prompted subagent to gather relevant context and apply a risk-based decision framework before approving or denying the request. The legacy value `guardian_subagent` is accepted for compatibility.", "enum": [ @@ -182,10 +171,6 @@ ], "type": "object" }, - "CollaborationModeListParams": { - "description": "EXPERIMENTAL - list collaboration mode presets.", - "type": "object" - }, "CommandExecParams": { "description": "Run a standalone command (argv vector) in the server sandbox without creating a thread or turn.\n\nThe final `command/exec` response is deferred until the process exits and is sent only after all `command/exec/outputDelta` notifications for that connection have been emitted.", "properties": { @@ -233,13 +218,6 @@ "null" ] }, - "permissionProfile": { - "description": "Optional active permissions profile id for this command.\n\nDefaults to the user's configured permissions when omitted. Cannot be combined with `sandboxPolicy`.", - "type": [ - "string", - "null" - ] - }, "processId": { "description": "Optional client-supplied, connection-scoped process id.\n\nRequired for `tty`, `streamStdin`, `streamStdoutStderr`, and follow-up `command/exec/write`, `command/exec/resize`, and `command/exec/terminate` calls. When omitted, buffered execution gets an internal id that is not exposed to the client.", "type": [ @@ -580,21 +558,6 @@ ], "type": "object" }, - "EnvironmentAddParams": { - "properties": { - "environmentId": { - "type": "string" - }, - "execServerUrl": { - "type": "string" - } - }, - "required": [ - "environmentId", - "execServerUrl" - ], - "type": "object" - }, "ExperimentalFeatureEnablementSetParams": { "properties": { "enablement": { @@ -1066,50 +1029,6 @@ ], "type": "object" }, - "FuzzyFileSearchSessionStartParams": { - "properties": { - "roots": { - "items": { - "type": "string" - }, - "type": "array" - }, - "sessionId": { - "type": "string" - } - }, - "required": [ - "roots", - "sessionId" - ], - "type": "object" - }, - "FuzzyFileSearchSessionStopParams": { - "properties": { - "sessionId": { - "type": "string" - } - }, - "required": [ - "sessionId" - ], - "type": "object" - }, - "FuzzyFileSearchSessionUpdateParams": { - "properties": { - "query": { - "type": "string" - }, - "sessionId": { - "type": "string" - } - }, - "required": [ - "query", - "sessionId" - ], - "type": "object" - }, "GetAccountParams": { "properties": { "refreshToken": { @@ -1593,18 +1512,6 @@ }, "type": "object" }, - "MockExperimentalMethodParams": { - "properties": { - "value": { - "description": "Test-only payload field.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, "ModeKind": { "description": "Initial collaboration mode to use when the TUI starts.", "enum": [ @@ -1980,124 +1887,6 @@ ], "type": "object" }, - "ProcessKillParams": { - "description": "Terminate a running `process/spawn` session.", - "properties": { - "processHandle": { - "description": "Client-supplied, connection-scoped `processHandle` from `process/spawn`.", - "type": "string" - } - }, - "required": [ - "processHandle" - ], - "type": "object" - }, - "ProcessResizePtyParams": { - "description": "Resize a running PTY-backed `process/spawn` session.", - "properties": { - "processHandle": { - "description": "Client-supplied, connection-scoped `processHandle` from `process/spawn`.", - "type": "string" - }, - "size": { - "allOf": [ - { - "$ref": "#/definitions/ProcessTerminalSize" - } - ], - "description": "New PTY size in character cells." - } - }, - "required": [ - "processHandle", - "size" - ], - "type": "object" - }, - "ProcessSpawnParams": { - "description": "Spawn a standalone process (argv vector) without a Codex sandbox on the host where the app server is running.\n\n`process/spawn` returns after the process has started and the connection-scoped `processHandle` has been registered. Process output and exit are reported via `process/outputDelta` and `process/exited` notifications.", - "properties": { - "command": { - "description": "Command argv vector. Empty arrays are rejected.", - "items": { - "type": "string" - }, - "type": "array" - }, - "cwd": { - "allOf": [ - { - "$ref": "#/definitions/AbsolutePathBuf" - } - ], - "description": "Absolute working directory for the process." - }, - "env": { - "additionalProperties": { - "type": [ - "string", - "null" - ] - }, - "description": "Optional environment overrides merged into the app-server process environment.\n\nMatching names override inherited values. Set a key to `null` to unset an inherited variable.", - "type": [ - "object", - "null" - ] - }, - "outputBytesCap": { - "description": "Optional per-stream stdout/stderr capture cap in bytes.\n\nWhen omitted, the server default applies. Set to `null` to disable the cap.", - "format": "uint", - "minimum": 0.0, - "type": [ - "integer", - "null" - ] - }, - "processHandle": { - "description": "Client-supplied, connection-scoped process handle.\n\nDuplicate active handles are rejected on the same connection. The same handle can be reused after the prior process exits.", - "type": "string" - }, - "size": { - "anyOf": [ - { - "$ref": "#/definitions/ProcessTerminalSize" - }, - { - "type": "null" - } - ], - "description": "Optional initial PTY size in character cells. Only valid when `tty` is true." - }, - "streamStdin": { - "description": "Allow follow-up `process/writeStdin` requests to write stdin bytes.", - "type": "boolean" - }, - "streamStdoutStderr": { - "description": "Stream stdout/stderr via `process/outputDelta` notifications.\n\nStreamed bytes are not duplicated into the `process/exited` notification.", - "type": "boolean" - }, - "timeoutMs": { - "description": "Optional timeout in milliseconds.\n\nWhen omitted, the server default applies. Set to `null` to disable the timeout.", - "format": "int64", - "type": [ - "integer", - "null" - ] - }, - "tty": { - "description": "Enable PTY mode.\n\nThis implies `streamStdin` and `streamStdoutStderr`.", - "type": "boolean" - } - }, - "required": [ - "command", - "cwd", - "processHandle" - ], - "type": "object" - }, "ProcessTerminalSize": { "description": "PTY size in character cells for `process/spawn` PTY sessions.", "properties": { @@ -2120,30 +1909,6 @@ ], "type": "object" }, - "ProcessWriteStdinParams": { - "description": "Write stdin bytes to a running `process/spawn` session, close stdin, or both.", - "properties": { - "closeStdin": { - "description": "Close stdin after writing `deltaBase64`, if present.", - "type": "boolean" - }, - "deltaBase64": { - "description": "Optional base64-encoded stdin bytes to write.", - "type": [ - "string", - "null" - ] - }, - "processHandle": { - "description": "Client-supplied, connection-scoped `processHandle` from `process/spawn`.", - "type": "string" - } - }, - "required": [ - "processHandle" - ], - "type": "object" - }, "RealtimeOutputModality": { "enum": [ "text", @@ -3276,17 +3041,6 @@ ], "type": "object" }, - "ThreadBackgroundTerminalsCleanParams": { - "properties": { - "threadId": { - "type": "string" - } - }, - "required": [ - "threadId" - ], - "type": "object" - }, "ThreadCompactStartParams": { "properties": { "threadId": { @@ -3298,19 +3052,6 @@ ], "type": "object" }, - "ThreadDecrementElicitationParams": { - "description": "Parameters for `thread/decrement_elicitation`.", - "properties": { - "threadId": { - "description": "Thread whose out-of-band elicitation counter should be decremented.", - "type": "string" - } - }, - "required": [ - "threadId" - ], - "type": "object" - }, "ThreadForkParams": { "description": "There are two ways to fork a thread: 1. By thread_id: load the thread from disk by thread_id and fork it into a new thread. 2. By path: load the thread from disk by path and fork it into a new thread.\n\nIf using a non-empty path, the thread_id param will be ignored. Empty string path values are treated as absent.\n\nPrefer using thread_id whenever possible.", "properties": { @@ -3363,10 +3104,6 @@ "ephemeral": { "type": "boolean" }, - "excludeTurns": { - "description": "When true, return only thread metadata and live fork state without populating `thread.turns`. This is useful when the client plans to call `thread/turns/list` immediately after forking.", - "type": "boolean" - }, "model": { "description": "Configuration overrides for the forked thread, if any.", "type": [ @@ -3380,35 +3117,6 @@ "null" ] }, - "path": { - "default": null, - "description": "[UNSTABLE] Specify the rollout path to fork from. If specified, the thread_id param will be ignored.", - "type": [ - "string", - "null" - ] - }, - "permissions": { - "description": "Named profile id for the forked thread. Cannot be combined with `sandbox`.", - "type": [ - "string", - "null" - ] - }, - "persistExtendedHistory": { - "description": "Deprecated and ignored by app-server. Kept only so older clients can continue sending the field while rollout persistence always uses the limited history policy.", - "type": "boolean" - }, - "runtimeWorkspaceRoots": { - "description": "Replace the thread's runtime workspace roots. Relative paths are resolved against the effective cwd for the thread.", - "items": { - "type": "string" - }, - "type": [ - "array", - "null" - ] - }, "sandbox": { "anyOf": [ { @@ -3512,19 +3220,6 @@ ], "type": "string" }, - "ThreadIncrementElicitationParams": { - "description": "Parameters for `thread/increment_elicitation`.", - "properties": { - "threadId": { - "description": "Thread whose out-of-band elicitation counter should be incremented.", - "type": "string" - } - }, - "required": [ - "threadId" - ], - "type": "object" - }, "ThreadInjectItemsParams": { "properties": { "items": { @@ -3675,21 +3370,6 @@ ], "type": "string" }, - "ThreadMemoryModeSetParams": { - "properties": { - "mode": { - "$ref": "#/definitions/ThreadMemoryMode" - }, - "threadId": { - "type": "string" - } - }, - "required": [ - "mode", - "threadId" - ], - "type": "object" - }, "ThreadMetadataGitInfoUpdateParams": { "properties": { "branch": { @@ -3753,42 +3433,10 @@ ], "type": "object" }, - "ThreadRealtimeAppendAudioParams": { - "description": "EXPERIMENTAL - append audio input to thread realtime.", + "ThreadRealtimeAudioChunk": { + "description": "EXPERIMENTAL - thread realtime audio chunk.", "properties": { - "audio": { - "$ref": "#/definitions/ThreadRealtimeAudioChunk" - }, - "threadId": { - "type": "string" - } - }, - "required": [ - "audio", - "threadId" - ], - "type": "object" - }, - "ThreadRealtimeAppendTextParams": { - "description": "EXPERIMENTAL - append text input to thread realtime.", - "properties": { - "text": { - "type": "string" - }, - "threadId": { - "type": "string" - } - }, - "required": [ - "text", - "threadId" - ], - "type": "object" - }, - "ThreadRealtimeAudioChunk": { - "description": "EXPERIMENTAL - thread realtime audio chunk.", - "properties": { - "data": { + "data": { "type": "string" }, "itemId": { @@ -3823,63 +3471,6 @@ ], "type": "object" }, - "ThreadRealtimeListVoicesParams": { - "description": "EXPERIMENTAL - list voices supported by thread realtime.", - "type": "object" - }, - "ThreadRealtimeStartParams": { - "description": "EXPERIMENTAL - start a thread-scoped realtime session.", - "properties": { - "outputModality": { - "allOf": [ - { - "$ref": "#/definitions/RealtimeOutputModality" - } - ], - "description": "Selects text or audio output for the realtime session. Transport and voice stay independent so clients can choose how they connect separately from what the model emits." - }, - "prompt": { - "type": [ - "string", - "null" - ] - }, - "realtimeSessionId": { - "type": [ - "string", - "null" - ] - }, - "threadId": { - "type": "string" - }, - "transport": { - "anyOf": [ - { - "$ref": "#/definitions/ThreadRealtimeStartTransport" - }, - { - "type": "null" - } - ] - }, - "voice": { - "anyOf": [ - { - "$ref": "#/definitions/RealtimeVoice" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "outputModality", - "threadId" - ], - "type": "object" - }, "ThreadRealtimeStartTransport": { "description": "EXPERIMENTAL - transport used by thread realtime.", "oneOf": [ @@ -3922,18 +3513,6 @@ } ] }, - "ThreadRealtimeStopParams": { - "description": "EXPERIMENTAL - stop thread realtime.", - "properties": { - "threadId": { - "type": "string" - } - }, - "required": [ - "threadId" - ], - "type": "object" - }, "ThreadResumeParams": { "description": "There are three ways to resume a thread: 1. By thread_id: load the thread from disk by thread_id and resume it. 2. By history: instantiate the thread from memory and resume it. 3. By path: load the thread from disk by path and resume it.\n\nFor non-running threads, the precedence is: history > non-empty path > thread_id. If using history or a non-empty path for a non-running thread, the thread_id param will be ignored.\n\nIf thread_id identifies a running thread, app-server rejoins that thread and treats a non-empty path as a consistency check against the active rollout path. Empty string path values are treated as absent.\n\nPrefer using thread_id whenever possible.", "properties": { @@ -3983,20 +3562,6 @@ "null" ] }, - "excludeTurns": { - "description": "When true, return only thread metadata and live-resume state without populating `thread.turns`. This is useful when the client plans to call `thread/turns/list` immediately after resuming.", - "type": "boolean" - }, - "history": { - "description": "[UNSTABLE] FOR CODEX CLOUD - DO NOT USE. If specified, the thread will be resumed with the provided history instead of loaded from disk.", - "items": { - "$ref": "#/definitions/ResponseItem" - }, - "type": [ - "array", - "null" - ] - }, "model": { "description": "Configuration overrides for the resumed thread, if any.", "type": [ @@ -4010,25 +3575,6 @@ "null" ] }, - "path": { - "default": null, - "description": "[UNSTABLE] Specify the rollout path to resume from. If specified for a non-running thread, the thread_id param will be ignored. If thread_id identifies a running thread, the path must match the active rollout path.", - "type": [ - "string", - "null" - ] - }, - "permissions": { - "description": "Named profile id for the resumed thread. Cannot be combined with `sandbox`.", - "type": [ - "string", - "null" - ] - }, - "persistExtendedHistory": { - "description": "Deprecated and ignored by app-server. Kept only so older clients can continue sending the field while rollout persistence always uses the limited history policy.", - "type": "boolean" - }, "personality": { "anyOf": [ { @@ -4039,16 +3585,6 @@ } ] }, - "runtimeWorkspaceRoots": { - "description": "Replace the thread's runtime workspace roots. Relative paths are resolved against the effective cwd for the thread.", - "items": { - "type": "string" - }, - "type": [ - "array", - "null" - ] - }, "sandbox": { "anyOf": [ { @@ -4092,76 +3628,25 @@ ], "type": "object" }, - "ThreadSearchParams": { + "ThreadSetNameParams": { "properties": { - "archived": { - "description": "Optional archived filter; when set to true, only archived threads are returned. If false or null, only non-archived threads are returned.", - "type": [ - "boolean", - "null" - ] - }, - "cursor": { - "description": "Opaque pagination cursor returned by a previous call.", - "type": [ - "string", - "null" - ] - }, - "limit": { - "description": "Optional page size; defaults to a reasonable server-side value.", - "format": "uint32", - "minimum": 0.0, - "type": [ - "integer", - "null" - ] - }, - "searchTerm": { - "description": "Required substring/full-text query for thread search.", + "name": { "type": "string" }, - "sortDirection": { - "anyOf": [ - { - "$ref": "#/definitions/SortDirection" - }, - { - "type": "null" - } - ], - "description": "Optional sort direction; defaults to descending (newest first)." - }, - "sortKey": { - "anyOf": [ - { - "$ref": "#/definitions/ThreadSortKey" - }, - { - "type": "null" - } - ], - "description": "Optional sort key; defaults to created_at." - }, - "sourceKinds": { - "description": "Optional source filter; when set, only sessions from these source kinds are returned. When omitted or empty, defaults to interactive sources.", - "items": { - "$ref": "#/definitions/ThreadSourceKind" - }, - "type": [ - "array", - "null" - ] + "threadId": { + "type": "string" } }, "required": [ - "searchTerm" + "name", + "threadId" ], "type": "object" }, - "ThreadSetNameParams": { + "ThreadShellCommandParams": { "properties": { - "name": { + "command": { + "description": "Shell command string evaluated by the thread's configured shell. Unlike `command/exec`, this intentionally preserves shell syntax such as pipes, redirects, and quoting. This runs unsandboxed with full access rather than inheriting the thread sandbox policy.", "type": "string" }, "threadId": { @@ -4169,12 +3654,42 @@ } }, "required": [ - "name", + "command", "threadId" ], "type": "object" }, - "ThreadSettingsUpdateParams": { + "ThreadSortKey": { + "enum": [ + "created_at", + "updated_at" + ], + "type": "string" + }, + "ThreadSource": { + "enum": [ + "user", + "subagent", + "memory_consolidation" + ], + "type": "string" + }, + "ThreadSourceKind": { + "enum": [ + "cli", + "vscode", + "exec", + "appServer", + "subAgent", + "subAgentReview", + "subAgentCompact", + "subAgentThreadSpawn", + "subAgentOther", + "unknown" + ], + "type": "string" + }, + "ThreadStartParams": { "properties": { "approvalPolicy": { "anyOf": [ @@ -4184,8 +3699,7 @@ { "type": "null" } - ], - "description": "Override the approval policy for subsequent turns." + ] }, "approvalsReviewer": { "anyOf": [ @@ -4196,46 +3710,46 @@ "type": "null" } ], - "description": "Override where approval requests are routed for subsequent turns." + "description": "Override where approval requests are routed for review on this thread and subsequent turns." }, - "collaborationMode": { - "anyOf": [ - { - "$ref": "#/definitions/CollaborationMode" - }, - { - "type": "null" - } - ], - "description": "EXPERIMENTAL - Set a pre-set collaboration mode for subsequent turns.\n\nFor `collaboration_mode.settings.developer_instructions`, `null` means \"use the built-in instructions for the selected mode\"." + "baseInstructions": { + "type": [ + "string", + "null" + ] + }, + "config": { + "additionalProperties": true, + "type": [ + "object", + "null" + ] }, "cwd": { - "description": "Override the working directory for subsequent turns.", "type": [ "string", "null" ] }, - "effort": { - "anyOf": [ - { - "$ref": "#/definitions/ReasoningEffort" - }, - { - "type": "null" - } - ], - "description": "Override the reasoning effort for subsequent turns." + "developerInstructions": { + "type": [ + "string", + "null" + ] + }, + "ephemeral": { + "type": [ + "boolean", + "null" + ] }, "model": { - "description": "Override the model for subsequent turns.", "type": [ "string", "null" ] }, - "permissions": { - "description": "Select a named permissions profile id for subsequent turns. Cannot be combined with `sandboxPolicy`.", + "modelProvider": { "type": [ "string", "null" @@ -4249,38 +3763,63 @@ { "type": "null" } - ], - "description": "Override the personality for subsequent turns." + ] }, - "sandboxPolicy": { + "sandbox": { "anyOf": [ { - "$ref": "#/definitions/SandboxPolicy" + "$ref": "#/definitions/SandboxMode" }, { "type": "null" } - ], - "description": "Override the sandbox policy for subsequent turns." + ] + }, + "serviceName": { + "type": [ + "string", + "null" + ] }, "serviceTier": { - "description": "Override the service tier for subsequent turns. `null` clears the current service tier; omission leaves it unchanged.", "type": [ "string", "null" ] }, - "summary": { + "sessionStartSource": { "anyOf": [ { - "$ref": "#/definitions/ReasoningSummary" + "$ref": "#/definitions/ThreadStartSource" }, { "type": "null" } - ], - "description": "Override the reasoning summary for subsequent turns." + ] }, + "threadSource": { + "anyOf": [ + { + "$ref": "#/definitions/ThreadSource" + }, + { + "type": "null" + } + ], + "description": "Optional client-supplied analytics source classification for this thread." + } + }, + "type": "object" + }, + "ThreadStartSource": { + "enum": [ + "startup", + "clear" + ], + "type": "string" + }, + "ThreadUnarchiveParams": { + "properties": { "threadId": { "type": "string" } @@ -4290,53 +3829,73 @@ ], "type": "object" }, - "ThreadShellCommandParams": { + "ThreadUnsubscribeParams": { "properties": { - "command": { - "description": "Shell command string evaluated by the thread's configured shell. Unlike `command/exec`, this intentionally preserves shell syntax such as pipes, redirects, and quoting. This runs unsandboxed with full access rather than inheriting the thread sandbox policy.", - "type": "string" - }, "threadId": { "type": "string" } }, "required": [ - "command", "threadId" ], "type": "object" }, - "ThreadSortKey": { - "enum": [ - "created_at", - "updated_at" + "TurnEnvironmentParams": { + "properties": { + "cwd": { + "$ref": "#/definitions/AbsolutePathBuf" + }, + "environmentId": { + "type": "string" + } + }, + "required": [ + "cwd", + "environmentId" ], - "type": "string" + "type": "object" }, - "ThreadSource": { - "enum": [ - "user", - "subagent", - "memory_consolidation" + "TurnInterruptParams": { + "properties": { + "threadId": { + "type": "string" + }, + "turnId": { + "type": "string" + } + }, + "required": [ + "threadId", + "turnId" ], - "type": "string" + "type": "object" }, - "ThreadSourceKind": { - "enum": [ - "cli", - "vscode", - "exec", - "appServer", - "subAgent", - "subAgentReview", - "subAgentCompact", - "subAgentThreadSpawn", - "subAgentOther", - "unknown" - ], - "type": "string" + "TurnItemsView": { + "oneOf": [ + { + "description": "`items` was not loaded for this turn. The field is intentionally empty.", + "enum": [ + "notLoaded" + ], + "type": "string" + }, + { + "description": "`items` contains only a display summary for this turn.", + "enum": [ + "summary" + ], + "type": "string" + }, + { + "description": "`items` contains every ThreadItem available from persisted app-server history for this turn.", + "enum": [ + "full" + ], + "type": "string" + } + ] }, - "ThreadStartParams": { + "TurnStartParams": { "properties": { "approvalPolicy": { "anyOf": [ @@ -4346,7 +3905,8 @@ { "type": "null" } - ] + ], + "description": "Override the approval policy for this turn and subsequent turns." }, "approvalsReviewer": { "anyOf": [ @@ -4357,91 +3917,41 @@ "type": "null" } ], - "description": "Override where approval requests are routed for review on this thread and subsequent turns." - }, - "baseInstructions": { - "type": [ - "string", - "null" - ] - }, - "config": { - "additionalProperties": true, - "type": [ - "object", - "null" - ] + "description": "Override where approval requests are routed for review on this turn and subsequent turns." }, "cwd": { + "description": "Override the working directory for this turn and subsequent turns.", "type": [ "string", "null" ] }, - "developerInstructions": { - "type": [ - "string", - "null" - ] - }, - "dynamicTools": { - "items": { - "$ref": "#/definitions/DynamicToolSpec" - }, - "type": [ - "array", - "null" - ] + "effort": { + "anyOf": [ + { + "$ref": "#/definitions/ReasoningEffort" + }, + { + "type": "null" + } + ], + "description": "Override the reasoning effort for this turn and subsequent turns." }, - "environments": { - "description": "Optional sticky environments for this thread.\n\nOmitted selects the default environment when environment access is enabled. Empty disables environment access for turns that do not provide a turn override. Non-empty selects the first environment as the current turn environment.", + "input": { "items": { - "$ref": "#/definitions/TurnEnvironmentParams" + "$ref": "#/definitions/UserInput" }, - "type": [ - "array", - "null" - ] - }, - "ephemeral": { - "type": [ - "boolean", - "null" - ] - }, - "experimentalRawEvents": { - "description": "If true, opt into emitting raw Responses API items on the event stream. This is for internal use only (e.g. Codex Cloud).", - "type": "boolean" - }, - "mockExperimentalField": { - "description": "Test-only experimental field used to validate experimental gating and schema filtering behavior in a stable way.", - "type": [ - "string", - "null" - ] + "type": "array" }, "model": { + "description": "Override the model for this turn and subsequent turns.", "type": [ "string", "null" ] }, - "modelProvider": { - "type": [ - "string", - "null" - ] - }, - "permissions": { - "description": "Named profile id for this thread. Cannot be combined with `sandbox`.", - "type": [ - "string", - "null" - ] - }, - "persistExtendedHistory": { - "description": "Deprecated and ignored by app-server. Kept only so older clients can continue sending the field while rollout persistence always uses the limited history policy.", - "type": "boolean" + "outputSchema": { + "description": "Optional JSON Schema used to constrain the final assistant message for this turn." }, "personality": { "anyOf": [ @@ -4451,1103 +3961,244 @@ { "type": "null" } - ] - }, - "runtimeWorkspaceRoots": { - "description": "Replace the thread's runtime workspace roots. Relative paths are resolved against the effective cwd for the thread.", - "items": { - "type": "string" - }, - "type": [ - "array", - "null" - ] + ], + "description": "Override the personality for this turn and subsequent turns." }, - "sandbox": { + "sandboxPolicy": { "anyOf": [ { - "$ref": "#/definitions/SandboxMode" + "$ref": "#/definitions/SandboxPolicy" }, { "type": "null" } - ] - }, - "serviceName": { - "type": [ - "string", - "null" - ] + ], + "description": "Override the sandbox policy for this turn and subsequent turns." }, "serviceTier": { + "description": "Override the service tier for this turn and subsequent turns.", "type": [ "string", "null" ] }, - "sessionStartSource": { - "anyOf": [ - { - "$ref": "#/definitions/ThreadStartSource" - }, - { - "type": "null" - } - ] - }, - "threadSource": { + "summary": { "anyOf": [ { - "$ref": "#/definitions/ThreadSource" + "$ref": "#/definitions/ReasoningSummary" }, { - "type": "null" - } - ], - "description": "Optional client-supplied analytics source classification for this thread." - } - }, - "type": "object" - }, - "ThreadStartSource": { - "enum": [ - "startup", - "clear" - ], - "type": "string" - }, - "ThreadTurnsItemsListParams": { - "properties": { - "cursor": { - "description": "Opaque cursor to pass to the next call to continue after the last item.", - "type": [ - "string", - "null" - ] - }, - "limit": { - "description": "Optional item page size.", - "format": "uint32", - "minimum": 0.0, - "type": [ - "integer", - "null" - ] - }, - "sortDirection": { - "anyOf": [ - { - "$ref": "#/definitions/SortDirection" - }, - { - "type": "null" - } - ], - "description": "Optional item pagination direction; defaults to ascending." - }, - "threadId": { - "type": "string" - }, - "turnId": { - "type": "string" - } - }, - "required": [ - "threadId", - "turnId" - ], - "type": "object" - }, - "ThreadTurnsListParams": { - "properties": { - "cursor": { - "description": "Opaque cursor to pass to the next call to continue after the last turn.", - "type": [ - "string", - "null" - ] - }, - "itemsView": { - "anyOf": [ - { - "$ref": "#/definitions/TurnItemsView" - }, - { - "type": "null" - } - ], - "description": "How much item detail to include for each returned turn; defaults to summary." - }, - "limit": { - "description": "Optional turn page size.", - "format": "uint32", - "minimum": 0.0, - "type": [ - "integer", - "null" - ] - }, - "sortDirection": { - "anyOf": [ - { - "$ref": "#/definitions/SortDirection" - }, - { - "type": "null" - } - ], - "description": "Optional turn pagination direction; defaults to descending." - }, - "threadId": { - "type": "string" - } - }, - "required": [ - "threadId" - ], - "type": "object" - }, - "ThreadUnarchiveParams": { - "properties": { - "threadId": { - "type": "string" - } - }, - "required": [ - "threadId" - ], - "type": "object" - }, - "ThreadUnsubscribeParams": { - "properties": { - "threadId": { - "type": "string" - } - }, - "required": [ - "threadId" - ], - "type": "object" - }, - "TurnEnvironmentParams": { - "properties": { - "cwd": { - "$ref": "#/definitions/AbsolutePathBuf" - }, - "environmentId": { - "type": "string" - } - }, - "required": [ - "cwd", - "environmentId" - ], - "type": "object" - }, - "TurnInterruptParams": { - "properties": { - "threadId": { - "type": "string" - }, - "turnId": { - "type": "string" - } - }, - "required": [ - "threadId", - "turnId" - ], - "type": "object" - }, - "TurnItemsView": { - "oneOf": [ - { - "description": "`items` was not loaded for this turn. The field is intentionally empty.", - "enum": [ - "notLoaded" - ], - "type": "string" - }, - { - "description": "`items` contains only a display summary for this turn.", - "enum": [ - "summary" - ], - "type": "string" - }, - { - "description": "`items` contains every ThreadItem available from persisted app-server history for this turn.", - "enum": [ - "full" - ], - "type": "string" - } - ] - }, - "TurnStartParams": { - "properties": { - "additionalContext": { - "additionalProperties": { - "$ref": "#/definitions/AdditionalContextEntry" - }, - "description": "Optional client-provided context fragments keyed by an opaque source identifier.", - "type": [ - "object", - "null" - ] - }, - "approvalPolicy": { - "anyOf": [ - { - "$ref": "#/definitions/AskForApproval" - }, - { - "type": "null" - } - ], - "description": "Override the approval policy for this turn and subsequent turns." - }, - "approvalsReviewer": { - "anyOf": [ - { - "$ref": "#/definitions/ApprovalsReviewer" - }, - { - "type": "null" - } - ], - "description": "Override where approval requests are routed for review on this turn and subsequent turns." - }, - "collaborationMode": { - "anyOf": [ - { - "$ref": "#/definitions/CollaborationMode" - }, - { - "type": "null" - } - ], - "description": "EXPERIMENTAL - Set a pre-set collaboration mode. Takes precedence over model, reasoning_effort, and developer instructions if set.\n\nFor `collaboration_mode.settings.developer_instructions`, `null` means \"use the built-in instructions for the selected mode\"." - }, - "cwd": { - "description": "Override the working directory for this turn and subsequent turns.", - "type": [ - "string", - "null" - ] - }, - "effort": { - "anyOf": [ - { - "$ref": "#/definitions/ReasoningEffort" - }, - { - "type": "null" - } - ], - "description": "Override the reasoning effort for this turn and subsequent turns." - }, - "environments": { - "description": "Optional turn-scoped environments.\n\nOmitted uses the thread sticky environments. Empty disables environment access for this turn. Non-empty selects the first environment as the current turn environment for this turn.", - "items": { - "$ref": "#/definitions/TurnEnvironmentParams" - }, - "type": [ - "array", - "null" - ] - }, - "input": { - "items": { - "$ref": "#/definitions/UserInput" - }, - "type": "array" - }, - "model": { - "description": "Override the model for this turn and subsequent turns.", - "type": [ - "string", - "null" - ] - }, - "outputSchema": { - "description": "Optional JSON Schema used to constrain the final assistant message for this turn." - }, - "permissions": { - "description": "Select a named permissions profile id for this turn and subsequent turns. Cannot be combined with `sandboxPolicy`.", - "type": [ - "string", - "null" - ] - }, - "personality": { - "anyOf": [ - { - "$ref": "#/definitions/Personality" - }, - { - "type": "null" - } - ], - "description": "Override the personality for this turn and subsequent turns." - }, - "responsesapiClientMetadata": { - "additionalProperties": { - "type": "string" - }, - "description": "Optional turn-scoped Responses API client metadata.", - "type": [ - "object", - "null" - ] - }, - "runtimeWorkspaceRoots": { - "description": "Replace the thread's runtime workspace roots for this turn and subsequent turns. Relative paths are resolved against the effective cwd for the turn.", - "items": { - "type": "string" - }, - "type": [ - "array", - "null" - ] - }, - "sandboxPolicy": { - "anyOf": [ - { - "$ref": "#/definitions/SandboxPolicy" - }, - { - "type": "null" - } - ], - "description": "Override the sandbox policy for this turn and subsequent turns." - }, - "serviceTier": { - "description": "Override the service tier for this turn and subsequent turns.", - "type": [ - "string", - "null" - ] - }, - "summary": { - "anyOf": [ - { - "$ref": "#/definitions/ReasoningSummary" - }, - { - "type": "null" - } - ], - "description": "Override the reasoning summary for this turn and subsequent turns." - }, - "threadId": { - "type": "string" - } - }, - "required": [ - "input", - "threadId" - ], - "type": "object" - }, - "TurnSteerParams": { - "properties": { - "additionalContext": { - "additionalProperties": { - "$ref": "#/definitions/AdditionalContextEntry" - }, - "description": "Optional client-provided context fragments keyed by an opaque source identifier.", - "type": [ - "object", - "null" - ] - }, - "expectedTurnId": { - "description": "Required active turn id precondition. The request fails when it does not match the currently active turn.", - "type": "string" - }, - "input": { - "items": { - "$ref": "#/definitions/UserInput" - }, - "type": "array" - }, - "responsesapiClientMetadata": { - "additionalProperties": { - "type": "string" - }, - "description": "Optional turn-scoped Responses API client metadata.", - "type": [ - "object", - "null" - ] - }, - "threadId": { - "type": "string" - } - }, - "required": [ - "expectedTurnId", - "input", - "threadId" - ], - "type": "object" - }, - "UserInput": { - "oneOf": [ - { - "properties": { - "text": { - "type": "string" - }, - "text_elements": { - "default": [], - "description": "UI-defined spans within `text` used to render or persist special elements.", - "items": { - "$ref": "#/definitions/TextElement" - }, - "type": "array" - }, - "type": { - "enum": [ - "text" - ], - "title": "TextUserInputType", - "type": "string" - } - }, - "required": [ - "text", - "type" - ], - "title": "TextUserInput", - "type": "object" - }, - { - "properties": { - "detail": { - "anyOf": [ - { - "$ref": "#/definitions/ImageDetail" - }, - { - "type": "null" - } - ], - "default": null - }, - "type": { - "enum": [ - "image" - ], - "title": "ImageUserInputType", - "type": "string" - }, - "url": { - "type": "string" - } - }, - "required": [ - "type", - "url" - ], - "title": "ImageUserInput", - "type": "object" - }, - { - "properties": { - "detail": { - "anyOf": [ - { - "$ref": "#/definitions/ImageDetail" - }, - { - "type": "null" - } - ], - "default": null - }, - "path": { - "type": "string" - }, - "type": { - "enum": [ - "localImage" - ], - "title": "LocalImageUserInputType", - "type": "string" - } - }, - "required": [ - "path", - "type" - ], - "title": "LocalImageUserInput", - "type": "object" - }, - { - "properties": { - "name": { - "type": "string" - }, - "path": { - "type": "string" - }, - "type": { - "enum": [ - "skill" - ], - "title": "SkillUserInputType", - "type": "string" - } - }, - "required": [ - "name", - "path", - "type" - ], - "title": "SkillUserInput", - "type": "object" - }, - { - "properties": { - "name": { - "type": "string" - }, - "path": { - "type": "string" - }, - "type": { - "enum": [ - "mention" - ], - "title": "MentionUserInputType", - "type": "string" - } - }, - "required": [ - "name", - "path", - "type" - ], - "title": "MentionUserInput", - "type": "object" - } - ] - }, - "WindowsSandboxSetupMode": { - "enum": [ - "elevated", - "unelevated" - ], - "type": "string" - }, - "WindowsSandboxSetupStartParams": { - "properties": { - "cwd": { - "anyOf": [ - { - "$ref": "#/definitions/AbsolutePathBuf" - }, - { - "type": "null" - } - ] - }, - "mode": { - "$ref": "#/definitions/WindowsSandboxSetupMode" - } - }, - "required": [ - "mode" - ], - "type": "object" - } - }, - "description": "Request from the client to the server.", - "oneOf": [ - { - "properties": { - "id": { - "$ref": "#/definitions/RequestId" - }, - "method": { - "enum": [ - "initialize" - ], - "title": "InitializeRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/InitializeParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "InitializeRequest", - "type": "object" - }, - { - "description": "NEW APIs", - "properties": { - "id": { - "$ref": "#/definitions/RequestId" - }, - "method": { - "enum": [ - "thread/start" - ], - "title": "Thread/startRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/ThreadStartParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "Thread/startRequest", - "type": "object" - }, - { - "properties": { - "id": { - "$ref": "#/definitions/RequestId" - }, - "method": { - "enum": [ - "thread/resume" - ], - "title": "Thread/resumeRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/ThreadResumeParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "Thread/resumeRequest", - "type": "object" - }, - { - "properties": { - "id": { - "$ref": "#/definitions/RequestId" - }, - "method": { - "enum": [ - "thread/fork" - ], - "title": "Thread/forkRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/ThreadForkParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "Thread/forkRequest", - "type": "object" - }, - { - "properties": { - "id": { - "$ref": "#/definitions/RequestId" - }, - "method": { - "enum": [ - "thread/archive" - ], - "title": "Thread/archiveRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/ThreadArchiveParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "Thread/archiveRequest", - "type": "object" - }, - { - "properties": { - "id": { - "$ref": "#/definitions/RequestId" - }, - "method": { - "enum": [ - "thread/unsubscribe" - ], - "title": "Thread/unsubscribeRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/ThreadUnsubscribeParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "Thread/unsubscribeRequest", - "type": "object" - }, - { - "description": "Increment the thread-local out-of-band elicitation counter.\n\nThis is used by external helpers to pause timeout accounting while a user approval or other elicitation is pending outside the app-server request flow.", - "properties": { - "id": { - "$ref": "#/definitions/RequestId" - }, - "method": { - "enum": [ - "thread/increment_elicitation" - ], - "title": "Thread/incrementElicitationRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/ThreadIncrementElicitationParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "Thread/incrementElicitationRequest", - "type": "object" - }, - { - "description": "Decrement the thread-local out-of-band elicitation counter.\n\nWhen the count reaches zero, timeout accounting resumes for the thread.", - "properties": { - "id": { - "$ref": "#/definitions/RequestId" - }, - "method": { - "enum": [ - "thread/decrement_elicitation" - ], - "title": "Thread/decrementElicitationRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/ThreadDecrementElicitationParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "Thread/decrementElicitationRequest", - "type": "object" - }, - { - "properties": { - "id": { - "$ref": "#/definitions/RequestId" - }, - "method": { - "enum": [ - "thread/name/set" - ], - "title": "Thread/name/setRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/ThreadSetNameParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "Thread/name/setRequest", - "type": "object" - }, - { - "properties": { - "id": { - "$ref": "#/definitions/RequestId" - }, - "method": { - "enum": [ - "thread/goal/set" - ], - "title": "Thread/goal/setRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/ThreadGoalSetParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "Thread/goal/setRequest", - "type": "object" - }, - { - "properties": { - "id": { - "$ref": "#/definitions/RequestId" - }, - "method": { - "enum": [ - "thread/goal/get" - ], - "title": "Thread/goal/getRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/ThreadGoalGetParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "Thread/goal/getRequest", - "type": "object" - }, - { - "properties": { - "id": { - "$ref": "#/definitions/RequestId" - }, - "method": { - "enum": [ - "thread/goal/clear" - ], - "title": "Thread/goal/clearRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/ThreadGoalClearParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "Thread/goal/clearRequest", - "type": "object" - }, - { - "properties": { - "id": { - "$ref": "#/definitions/RequestId" - }, - "method": { - "enum": [ - "thread/metadata/update" - ], - "title": "Thread/metadata/updateRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/ThreadMetadataUpdateParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "Thread/metadata/updateRequest", - "type": "object" - }, - { - "properties": { - "id": { - "$ref": "#/definitions/RequestId" - }, - "method": { - "enum": [ - "thread/settings/update" - ], - "title": "Thread/settings/updateRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/ThreadSettingsUpdateParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "Thread/settings/updateRequest", - "type": "object" - }, - { - "properties": { - "id": { - "$ref": "#/definitions/RequestId" - }, - "method": { - "enum": [ - "thread/memoryMode/set" - ], - "title": "Thread/memoryMode/setRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/ThreadMemoryModeSetParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "Thread/memoryMode/setRequest", - "type": "object" - }, - { - "properties": { - "id": { - "$ref": "#/definitions/RequestId" - }, - "method": { - "enum": [ - "memory/reset" - ], - "title": "Memory/resetRequestMethod", - "type": "string" - }, - "params": { - "type": "null" - } - }, - "required": [ - "id", - "method" - ], - "title": "Memory/resetRequest", - "type": "object" - }, - { - "properties": { - "id": { - "$ref": "#/definitions/RequestId" - }, - "method": { - "enum": [ - "thread/unarchive" - ], - "title": "Thread/unarchiveRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/ThreadUnarchiveParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "Thread/unarchiveRequest", - "type": "object" - }, - { - "properties": { - "id": { - "$ref": "#/definitions/RequestId" - }, - "method": { - "enum": [ - "thread/compact/start" + "type": "null" + } ], - "title": "Thread/compact/startRequestMethod", - "type": "string" + "description": "Override the reasoning summary for this turn and subsequent turns." }, - "params": { - "$ref": "#/definitions/ThreadCompactStartParams" + "threadId": { + "type": "string" } }, "required": [ - "id", - "method", - "params" + "input", + "threadId" ], - "title": "Thread/compact/startRequest", "type": "object" }, - { + "TurnSteerParams": { "properties": { - "id": { - "$ref": "#/definitions/RequestId" - }, - "method": { - "enum": [ - "thread/shellCommand" - ], - "title": "Thread/shellCommandRequestMethod", + "expectedTurnId": { + "description": "Required active turn id precondition. The request fails when it does not match the currently active turn.", "type": "string" }, - "params": { - "$ref": "#/definitions/ThreadShellCommandParams" + "input": { + "items": { + "$ref": "#/definitions/UserInput" + }, + "type": "array" + }, + "threadId": { + "type": "string" } }, "required": [ - "id", - "method", - "params" + "expectedTurnId", + "input", + "threadId" ], - "title": "Thread/shellCommandRequest", "type": "object" }, - { - "properties": { - "id": { - "$ref": "#/definitions/RequestId" + "UserInput": { + "oneOf": [ + { + "properties": { + "text": { + "type": "string" + }, + "text_elements": { + "default": [], + "description": "UI-defined spans within `text` used to render or persist special elements.", + "items": { + "$ref": "#/definitions/TextElement" + }, + "type": "array" + }, + "type": { + "enum": [ + "text" + ], + "title": "TextUserInputType", + "type": "string" + } + }, + "required": [ + "text", + "type" + ], + "title": "TextUserInput", + "type": "object" }, - "method": { - "enum": [ - "thread/approveGuardianDeniedAction" + { + "properties": { + "detail": { + "anyOf": [ + { + "$ref": "#/definitions/ImageDetail" + }, + { + "type": "null" + } + ], + "default": null + }, + "type": { + "enum": [ + "image" + ], + "title": "ImageUserInputType", + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "type", + "url" ], - "title": "Thread/approveGuardianDeniedActionRequestMethod", - "type": "string" + "title": "ImageUserInput", + "type": "object" }, - "params": { - "$ref": "#/definitions/ThreadApproveGuardianDeniedActionParams" + { + "properties": { + "detail": { + "anyOf": [ + { + "$ref": "#/definitions/ImageDetail" + }, + { + "type": "null" + } + ], + "default": null + }, + "path": { + "type": "string" + }, + "type": { + "enum": [ + "localImage" + ], + "title": "LocalImageUserInputType", + "type": "string" + } + }, + "required": [ + "path", + "type" + ], + "title": "LocalImageUserInput", + "type": "object" + }, + { + "properties": { + "name": { + "type": "string" + }, + "path": { + "type": "string" + }, + "type": { + "enum": [ + "skill" + ], + "title": "SkillUserInputType", + "type": "string" + } + }, + "required": [ + "name", + "path", + "type" + ], + "title": "SkillUserInput", + "type": "object" + }, + { + "properties": { + "name": { + "type": "string" + }, + "path": { + "type": "string" + }, + "type": { + "enum": [ + "mention" + ], + "title": "MentionUserInputType", + "type": "string" + } + }, + "required": [ + "name", + "path", + "type" + ], + "title": "MentionUserInput", + "type": "object" + } + ] + }, + "WindowsSandboxSetupMode": { + "enum": [ + "elevated", + "unelevated" + ], + "type": "string" + }, + "WindowsSandboxSetupStartParams": { + "properties": { + "cwd": { + "anyOf": [ + { + "$ref": "#/definitions/AbsolutePathBuf" + }, + { + "type": "null" + } + ] + }, + "mode": { + "$ref": "#/definitions/WindowsSandboxSetupMode" } }, "required": [ - "id", - "method", - "params" + "mode" ], - "title": "Thread/approveGuardianDeniedActionRequest", "type": "object" - }, + } + }, + "description": "Request from the client to the server.", + "oneOf": [ { "properties": { "id": { @@ -5555,13 +4206,13 @@ }, "method": { "enum": [ - "thread/backgroundTerminals/clean" + "initialize" ], - "title": "Thread/backgroundTerminals/cleanRequestMethod", + "title": "InitializeRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/ThreadBackgroundTerminalsCleanParams" + "$ref": "#/definitions/InitializeParams" } }, "required": [ @@ -5569,23 +4220,24 @@ "method", "params" ], - "title": "Thread/backgroundTerminals/cleanRequest", + "title": "InitializeRequest", "type": "object" }, { + "description": "NEW APIs", "properties": { "id": { "$ref": "#/definitions/RequestId" }, "method": { "enum": [ - "thread/rollback" + "thread/start" ], - "title": "Thread/rollbackRequestMethod", + "title": "Thread/startRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/ThreadRollbackParams" + "$ref": "#/definitions/ThreadStartParams" } }, "required": [ @@ -5593,7 +4245,7 @@ "method", "params" ], - "title": "Thread/rollbackRequest", + "title": "Thread/startRequest", "type": "object" }, { @@ -5603,13 +4255,13 @@ }, "method": { "enum": [ - "thread/list" + "thread/resume" ], - "title": "Thread/listRequestMethod", + "title": "Thread/resumeRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/ThreadListParams" + "$ref": "#/definitions/ThreadResumeParams" } }, "required": [ @@ -5617,7 +4269,7 @@ "method", "params" ], - "title": "Thread/listRequest", + "title": "Thread/resumeRequest", "type": "object" }, { @@ -5627,13 +4279,13 @@ }, "method": { "enum": [ - "thread/search" + "thread/fork" ], - "title": "Thread/searchRequestMethod", + "title": "Thread/forkRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/ThreadSearchParams" + "$ref": "#/definitions/ThreadForkParams" } }, "required": [ @@ -5641,7 +4293,7 @@ "method", "params" ], - "title": "Thread/searchRequest", + "title": "Thread/forkRequest", "type": "object" }, { @@ -5651,13 +4303,13 @@ }, "method": { "enum": [ - "thread/loaded/list" + "thread/archive" ], - "title": "Thread/loaded/listRequestMethod", + "title": "Thread/archiveRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/ThreadLoadedListParams" + "$ref": "#/definitions/ThreadArchiveParams" } }, "required": [ @@ -5665,7 +4317,7 @@ "method", "params" ], - "title": "Thread/loaded/listRequest", + "title": "Thread/archiveRequest", "type": "object" }, { @@ -5675,13 +4327,13 @@ }, "method": { "enum": [ - "thread/read" + "thread/unsubscribe" ], - "title": "Thread/readRequestMethod", + "title": "Thread/unsubscribeRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/ThreadReadParams" + "$ref": "#/definitions/ThreadUnsubscribeParams" } }, "required": [ @@ -5689,7 +4341,7 @@ "method", "params" ], - "title": "Thread/readRequest", + "title": "Thread/unsubscribeRequest", "type": "object" }, { @@ -5699,13 +4351,13 @@ }, "method": { "enum": [ - "thread/turns/list" + "thread/name/set" ], - "title": "Thread/turns/listRequestMethod", + "title": "Thread/name/setRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/ThreadTurnsListParams" + "$ref": "#/definitions/ThreadSetNameParams" } }, "required": [ @@ -5713,7 +4365,7 @@ "method", "params" ], - "title": "Thread/turns/listRequest", + "title": "Thread/name/setRequest", "type": "object" }, { @@ -5723,13 +4375,13 @@ }, "method": { "enum": [ - "thread/turns/items/list" + "thread/goal/set" ], - "title": "Thread/turns/items/listRequestMethod", + "title": "Thread/goal/setRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/ThreadTurnsItemsListParams" + "$ref": "#/definitions/ThreadGoalSetParams" } }, "required": [ @@ -5737,24 +4389,23 @@ "method", "params" ], - "title": "Thread/turns/items/listRequest", + "title": "Thread/goal/setRequest", "type": "object" }, { - "description": "Append raw Responses API items to the thread history without starting a user turn.", "properties": { "id": { "$ref": "#/definitions/RequestId" }, "method": { "enum": [ - "thread/inject_items" + "thread/goal/get" ], - "title": "Thread/injectItemsRequestMethod", + "title": "Thread/goal/getRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/ThreadInjectItemsParams" + "$ref": "#/definitions/ThreadGoalGetParams" } }, "required": [ @@ -5762,7 +4413,7 @@ "method", "params" ], - "title": "Thread/injectItemsRequest", + "title": "Thread/goal/getRequest", "type": "object" }, { @@ -5772,13 +4423,13 @@ }, "method": { "enum": [ - "skills/list" + "thread/goal/clear" ], - "title": "Skills/listRequestMethod", + "title": "Thread/goal/clearRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/SkillsListParams" + "$ref": "#/definitions/ThreadGoalClearParams" } }, "required": [ @@ -5786,7 +4437,7 @@ "method", "params" ], - "title": "Skills/listRequest", + "title": "Thread/goal/clearRequest", "type": "object" }, { @@ -5796,13 +4447,13 @@ }, "method": { "enum": [ - "hooks/list" + "thread/metadata/update" ], - "title": "Hooks/listRequestMethod", + "title": "Thread/metadata/updateRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/HooksListParams" + "$ref": "#/definitions/ThreadMetadataUpdateParams" } }, "required": [ @@ -5810,7 +4461,7 @@ "method", "params" ], - "title": "Hooks/listRequest", + "title": "Thread/metadata/updateRequest", "type": "object" }, { @@ -5820,13 +4471,13 @@ }, "method": { "enum": [ - "marketplace/add" + "thread/unarchive" ], - "title": "Marketplace/addRequestMethod", + "title": "Thread/unarchiveRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/MarketplaceAddParams" + "$ref": "#/definitions/ThreadUnarchiveParams" } }, "required": [ @@ -5834,7 +4485,7 @@ "method", "params" ], - "title": "Marketplace/addRequest", + "title": "Thread/unarchiveRequest", "type": "object" }, { @@ -5844,13 +4495,13 @@ }, "method": { "enum": [ - "marketplace/remove" + "thread/compact/start" ], - "title": "Marketplace/removeRequestMethod", + "title": "Thread/compact/startRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/MarketplaceRemoveParams" + "$ref": "#/definitions/ThreadCompactStartParams" } }, "required": [ @@ -5858,7 +4509,7 @@ "method", "params" ], - "title": "Marketplace/removeRequest", + "title": "Thread/compact/startRequest", "type": "object" }, { @@ -5868,13 +4519,13 @@ }, "method": { "enum": [ - "marketplace/upgrade" + "thread/shellCommand" ], - "title": "Marketplace/upgradeRequestMethod", + "title": "Thread/shellCommandRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/MarketplaceUpgradeParams" + "$ref": "#/definitions/ThreadShellCommandParams" } }, "required": [ @@ -5882,7 +4533,7 @@ "method", "params" ], - "title": "Marketplace/upgradeRequest", + "title": "Thread/shellCommandRequest", "type": "object" }, { @@ -5892,13 +4543,13 @@ }, "method": { "enum": [ - "plugin/list" + "thread/approveGuardianDeniedAction" ], - "title": "Plugin/listRequestMethod", + "title": "Thread/approveGuardianDeniedActionRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/PluginListParams" + "$ref": "#/definitions/ThreadApproveGuardianDeniedActionParams" } }, "required": [ @@ -5906,7 +4557,7 @@ "method", "params" ], - "title": "Plugin/listRequest", + "title": "Thread/approveGuardianDeniedActionRequest", "type": "object" }, { @@ -5916,13 +4567,13 @@ }, "method": { "enum": [ - "plugin/installed" + "thread/rollback" ], - "title": "Plugin/installedRequestMethod", + "title": "Thread/rollbackRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/PluginInstalledParams" + "$ref": "#/definitions/ThreadRollbackParams" } }, "required": [ @@ -5930,7 +4581,7 @@ "method", "params" ], - "title": "Plugin/installedRequest", + "title": "Thread/rollbackRequest", "type": "object" }, { @@ -5940,13 +4591,13 @@ }, "method": { "enum": [ - "plugin/read" + "thread/list" ], - "title": "Plugin/readRequestMethod", + "title": "Thread/listRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/PluginReadParams" + "$ref": "#/definitions/ThreadListParams" } }, "required": [ @@ -5954,7 +4605,7 @@ "method", "params" ], - "title": "Plugin/readRequest", + "title": "Thread/listRequest", "type": "object" }, { @@ -5964,13 +4615,13 @@ }, "method": { "enum": [ - "plugin/skill/read" + "thread/loaded/list" ], - "title": "Plugin/skill/readRequestMethod", + "title": "Thread/loaded/listRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/PluginSkillReadParams" + "$ref": "#/definitions/ThreadLoadedListParams" } }, "required": [ @@ -5978,7 +4629,7 @@ "method", "params" ], - "title": "Plugin/skill/readRequest", + "title": "Thread/loaded/listRequest", "type": "object" }, { @@ -5988,13 +4639,13 @@ }, "method": { "enum": [ - "plugin/share/save" + "thread/read" ], - "title": "Plugin/share/saveRequestMethod", + "title": "Thread/readRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/PluginShareSaveParams" + "$ref": "#/definitions/ThreadReadParams" } }, "required": [ @@ -6002,23 +4653,24 @@ "method", "params" ], - "title": "Plugin/share/saveRequest", + "title": "Thread/readRequest", "type": "object" }, { + "description": "Append raw Responses API items to the thread history without starting a user turn.", "properties": { "id": { "$ref": "#/definitions/RequestId" }, "method": { "enum": [ - "plugin/share/updateTargets" + "thread/inject_items" ], - "title": "Plugin/share/updateTargetsRequestMethod", + "title": "Thread/injectItemsRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/PluginShareUpdateTargetsParams" + "$ref": "#/definitions/ThreadInjectItemsParams" } }, "required": [ @@ -6026,7 +4678,7 @@ "method", "params" ], - "title": "Plugin/share/updateTargetsRequest", + "title": "Thread/injectItemsRequest", "type": "object" }, { @@ -6036,13 +4688,13 @@ }, "method": { "enum": [ - "plugin/share/list" + "skills/list" ], - "title": "Plugin/share/listRequestMethod", + "title": "Skills/listRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/PluginShareListParams" + "$ref": "#/definitions/SkillsListParams" } }, "required": [ @@ -6050,7 +4702,7 @@ "method", "params" ], - "title": "Plugin/share/listRequest", + "title": "Skills/listRequest", "type": "object" }, { @@ -6060,13 +4712,13 @@ }, "method": { "enum": [ - "plugin/share/checkout" + "hooks/list" ], - "title": "Plugin/share/checkoutRequestMethod", + "title": "Hooks/listRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/PluginShareCheckoutParams" + "$ref": "#/definitions/HooksListParams" } }, "required": [ @@ -6074,7 +4726,7 @@ "method", "params" ], - "title": "Plugin/share/checkoutRequest", + "title": "Hooks/listRequest", "type": "object" }, { @@ -6084,13 +4736,13 @@ }, "method": { "enum": [ - "plugin/share/delete" + "marketplace/add" ], - "title": "Plugin/share/deleteRequestMethod", + "title": "Marketplace/addRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/PluginShareDeleteParams" + "$ref": "#/definitions/MarketplaceAddParams" } }, "required": [ @@ -6098,7 +4750,7 @@ "method", "params" ], - "title": "Plugin/share/deleteRequest", + "title": "Marketplace/addRequest", "type": "object" }, { @@ -6108,13 +4760,13 @@ }, "method": { "enum": [ - "app/list" + "marketplace/remove" ], - "title": "App/listRequestMethod", + "title": "Marketplace/removeRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/AppsListParams" + "$ref": "#/definitions/MarketplaceRemoveParams" } }, "required": [ @@ -6122,7 +4774,7 @@ "method", "params" ], - "title": "App/listRequest", + "title": "Marketplace/removeRequest", "type": "object" }, { @@ -6132,13 +4784,13 @@ }, "method": { "enum": [ - "fs/readFile" + "marketplace/upgrade" ], - "title": "Fs/readFileRequestMethod", + "title": "Marketplace/upgradeRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/FsReadFileParams" + "$ref": "#/definitions/MarketplaceUpgradeParams" } }, "required": [ @@ -6146,7 +4798,7 @@ "method", "params" ], - "title": "Fs/readFileRequest", + "title": "Marketplace/upgradeRequest", "type": "object" }, { @@ -6156,13 +4808,13 @@ }, "method": { "enum": [ - "fs/writeFile" + "plugin/list" ], - "title": "Fs/writeFileRequestMethod", + "title": "Plugin/listRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/FsWriteFileParams" + "$ref": "#/definitions/PluginListParams" } }, "required": [ @@ -6170,7 +4822,7 @@ "method", "params" ], - "title": "Fs/writeFileRequest", + "title": "Plugin/listRequest", "type": "object" }, { @@ -6180,13 +4832,13 @@ }, "method": { "enum": [ - "fs/createDirectory" + "plugin/installed" ], - "title": "Fs/createDirectoryRequestMethod", + "title": "Plugin/installedRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/FsCreateDirectoryParams" + "$ref": "#/definitions/PluginInstalledParams" } }, "required": [ @@ -6194,7 +4846,7 @@ "method", "params" ], - "title": "Fs/createDirectoryRequest", + "title": "Plugin/installedRequest", "type": "object" }, { @@ -6204,13 +4856,13 @@ }, "method": { "enum": [ - "fs/getMetadata" + "plugin/read" ], - "title": "Fs/getMetadataRequestMethod", + "title": "Plugin/readRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/FsGetMetadataParams" + "$ref": "#/definitions/PluginReadParams" } }, "required": [ @@ -6218,7 +4870,7 @@ "method", "params" ], - "title": "Fs/getMetadataRequest", + "title": "Plugin/readRequest", "type": "object" }, { @@ -6228,13 +4880,13 @@ }, "method": { "enum": [ - "fs/readDirectory" + "plugin/skill/read" ], - "title": "Fs/readDirectoryRequestMethod", + "title": "Plugin/skill/readRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/FsReadDirectoryParams" + "$ref": "#/definitions/PluginSkillReadParams" } }, "required": [ @@ -6242,7 +4894,7 @@ "method", "params" ], - "title": "Fs/readDirectoryRequest", + "title": "Plugin/skill/readRequest", "type": "object" }, { @@ -6252,13 +4904,13 @@ }, "method": { "enum": [ - "fs/remove" + "plugin/share/save" ], - "title": "Fs/removeRequestMethod", + "title": "Plugin/share/saveRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/FsRemoveParams" + "$ref": "#/definitions/PluginShareSaveParams" } }, "required": [ @@ -6266,7 +4918,7 @@ "method", "params" ], - "title": "Fs/removeRequest", + "title": "Plugin/share/saveRequest", "type": "object" }, { @@ -6276,13 +4928,13 @@ }, "method": { "enum": [ - "fs/copy" + "plugin/share/updateTargets" ], - "title": "Fs/copyRequestMethod", + "title": "Plugin/share/updateTargetsRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/FsCopyParams" + "$ref": "#/definitions/PluginShareUpdateTargetsParams" } }, "required": [ @@ -6290,7 +4942,7 @@ "method", "params" ], - "title": "Fs/copyRequest", + "title": "Plugin/share/updateTargetsRequest", "type": "object" }, { @@ -6300,13 +4952,13 @@ }, "method": { "enum": [ - "fs/watch" + "plugin/share/list" ], - "title": "Fs/watchRequestMethod", + "title": "Plugin/share/listRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/FsWatchParams" + "$ref": "#/definitions/PluginShareListParams" } }, "required": [ @@ -6314,7 +4966,7 @@ "method", "params" ], - "title": "Fs/watchRequest", + "title": "Plugin/share/listRequest", "type": "object" }, { @@ -6324,13 +4976,13 @@ }, "method": { "enum": [ - "fs/unwatch" + "plugin/share/checkout" ], - "title": "Fs/unwatchRequestMethod", + "title": "Plugin/share/checkoutRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/FsUnwatchParams" + "$ref": "#/definitions/PluginShareCheckoutParams" } }, "required": [ @@ -6338,7 +4990,7 @@ "method", "params" ], - "title": "Fs/unwatchRequest", + "title": "Plugin/share/checkoutRequest", "type": "object" }, { @@ -6348,13 +5000,13 @@ }, "method": { "enum": [ - "skills/config/write" + "plugin/share/delete" ], - "title": "Skills/config/writeRequestMethod", + "title": "Plugin/share/deleteRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/SkillsConfigWriteParams" + "$ref": "#/definitions/PluginShareDeleteParams" } }, "required": [ @@ -6362,7 +5014,7 @@ "method", "params" ], - "title": "Skills/config/writeRequest", + "title": "Plugin/share/deleteRequest", "type": "object" }, { @@ -6372,13 +5024,13 @@ }, "method": { "enum": [ - "plugin/install" + "app/list" ], - "title": "Plugin/installRequestMethod", + "title": "App/listRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/PluginInstallParams" + "$ref": "#/definitions/AppsListParams" } }, "required": [ @@ -6386,7 +5038,7 @@ "method", "params" ], - "title": "Plugin/installRequest", + "title": "App/listRequest", "type": "object" }, { @@ -6396,13 +5048,13 @@ }, "method": { "enum": [ - "plugin/uninstall" + "fs/readFile" ], - "title": "Plugin/uninstallRequestMethod", + "title": "Fs/readFileRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/PluginUninstallParams" + "$ref": "#/definitions/FsReadFileParams" } }, "required": [ @@ -6410,7 +5062,7 @@ "method", "params" ], - "title": "Plugin/uninstallRequest", + "title": "Fs/readFileRequest", "type": "object" }, { @@ -6420,13 +5072,13 @@ }, "method": { "enum": [ - "turn/start" + "fs/writeFile" ], - "title": "Turn/startRequestMethod", + "title": "Fs/writeFileRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/TurnStartParams" + "$ref": "#/definitions/FsWriteFileParams" } }, "required": [ @@ -6434,7 +5086,7 @@ "method", "params" ], - "title": "Turn/startRequest", + "title": "Fs/writeFileRequest", "type": "object" }, { @@ -6444,13 +5096,13 @@ }, "method": { "enum": [ - "turn/steer" + "fs/createDirectory" ], - "title": "Turn/steerRequestMethod", + "title": "Fs/createDirectoryRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/TurnSteerParams" + "$ref": "#/definitions/FsCreateDirectoryParams" } }, "required": [ @@ -6458,7 +5110,7 @@ "method", "params" ], - "title": "Turn/steerRequest", + "title": "Fs/createDirectoryRequest", "type": "object" }, { @@ -6468,13 +5120,13 @@ }, "method": { "enum": [ - "turn/interrupt" + "fs/getMetadata" ], - "title": "Turn/interruptRequestMethod", + "title": "Fs/getMetadataRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/TurnInterruptParams" + "$ref": "#/definitions/FsGetMetadataParams" } }, "required": [ @@ -6482,7 +5134,7 @@ "method", "params" ], - "title": "Turn/interruptRequest", + "title": "Fs/getMetadataRequest", "type": "object" }, { @@ -6492,13 +5144,13 @@ }, "method": { "enum": [ - "thread/realtime/start" + "fs/readDirectory" ], - "title": "Thread/realtime/startRequestMethod", + "title": "Fs/readDirectoryRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/ThreadRealtimeStartParams" + "$ref": "#/definitions/FsReadDirectoryParams" } }, "required": [ @@ -6506,7 +5158,7 @@ "method", "params" ], - "title": "Thread/realtime/startRequest", + "title": "Fs/readDirectoryRequest", "type": "object" }, { @@ -6516,13 +5168,13 @@ }, "method": { "enum": [ - "thread/realtime/appendAudio" + "fs/remove" ], - "title": "Thread/realtime/appendAudioRequestMethod", + "title": "Fs/removeRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/ThreadRealtimeAppendAudioParams" + "$ref": "#/definitions/FsRemoveParams" } }, "required": [ @@ -6530,7 +5182,7 @@ "method", "params" ], - "title": "Thread/realtime/appendAudioRequest", + "title": "Fs/removeRequest", "type": "object" }, { @@ -6540,13 +5192,13 @@ }, "method": { "enum": [ - "thread/realtime/appendText" + "fs/copy" ], - "title": "Thread/realtime/appendTextRequestMethod", + "title": "Fs/copyRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/ThreadRealtimeAppendTextParams" + "$ref": "#/definitions/FsCopyParams" } }, "required": [ @@ -6554,7 +5206,7 @@ "method", "params" ], - "title": "Thread/realtime/appendTextRequest", + "title": "Fs/copyRequest", "type": "object" }, { @@ -6564,13 +5216,13 @@ }, "method": { "enum": [ - "thread/realtime/stop" + "fs/watch" ], - "title": "Thread/realtime/stopRequestMethod", + "title": "Fs/watchRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/ThreadRealtimeStopParams" + "$ref": "#/definitions/FsWatchParams" } }, "required": [ @@ -6578,7 +5230,7 @@ "method", "params" ], - "title": "Thread/realtime/stopRequest", + "title": "Fs/watchRequest", "type": "object" }, { @@ -6588,13 +5240,13 @@ }, "method": { "enum": [ - "thread/realtime/listVoices" + "fs/unwatch" ], - "title": "Thread/realtime/listVoicesRequestMethod", + "title": "Fs/unwatchRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/ThreadRealtimeListVoicesParams" + "$ref": "#/definitions/FsUnwatchParams" } }, "required": [ @@ -6602,7 +5254,7 @@ "method", "params" ], - "title": "Thread/realtime/listVoicesRequest", + "title": "Fs/unwatchRequest", "type": "object" }, { @@ -6612,13 +5264,13 @@ }, "method": { "enum": [ - "review/start" + "skills/config/write" ], - "title": "Review/startRequestMethod", + "title": "Skills/config/writeRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/ReviewStartParams" + "$ref": "#/definitions/SkillsConfigWriteParams" } }, "required": [ @@ -6626,7 +5278,7 @@ "method", "params" ], - "title": "Review/startRequest", + "title": "Skills/config/writeRequest", "type": "object" }, { @@ -6636,13 +5288,13 @@ }, "method": { "enum": [ - "model/list" + "plugin/install" ], - "title": "Model/listRequestMethod", + "title": "Plugin/installRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/ModelListParams" + "$ref": "#/definitions/PluginInstallParams" } }, "required": [ @@ -6650,7 +5302,7 @@ "method", "params" ], - "title": "Model/listRequest", + "title": "Plugin/installRequest", "type": "object" }, { @@ -6660,13 +5312,13 @@ }, "method": { "enum": [ - "modelProvider/capabilities/read" + "plugin/uninstall" ], - "title": "ModelProvider/capabilities/readRequestMethod", + "title": "Plugin/uninstallRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/ModelProviderCapabilitiesReadParams" + "$ref": "#/definitions/PluginUninstallParams" } }, "required": [ @@ -6674,7 +5326,7 @@ "method", "params" ], - "title": "ModelProvider/capabilities/readRequest", + "title": "Plugin/uninstallRequest", "type": "object" }, { @@ -6684,13 +5336,13 @@ }, "method": { "enum": [ - "experimentalFeature/list" + "turn/start" ], - "title": "ExperimentalFeature/listRequestMethod", + "title": "Turn/startRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/ExperimentalFeatureListParams" + "$ref": "#/definitions/TurnStartParams" } }, "required": [ @@ -6698,7 +5350,7 @@ "method", "params" ], - "title": "ExperimentalFeature/listRequest", + "title": "Turn/startRequest", "type": "object" }, { @@ -6708,13 +5360,13 @@ }, "method": { "enum": [ - "permissionProfile/list" + "turn/steer" ], - "title": "PermissionProfile/listRequestMethod", + "title": "Turn/steerRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/PermissionProfileListParams" + "$ref": "#/definitions/TurnSteerParams" } }, "required": [ @@ -6722,7 +5374,7 @@ "method", "params" ], - "title": "PermissionProfile/listRequest", + "title": "Turn/steerRequest", "type": "object" }, { @@ -6732,13 +5384,13 @@ }, "method": { "enum": [ - "experimentalFeature/enablement/set" + "turn/interrupt" ], - "title": "ExperimentalFeature/enablement/setRequestMethod", + "title": "Turn/interruptRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/ExperimentalFeatureEnablementSetParams" + "$ref": "#/definitions/TurnInterruptParams" } }, "required": [ @@ -6746,7 +5398,7 @@ "method", "params" ], - "title": "ExperimentalFeature/enablement/setRequest", + "title": "Turn/interruptRequest", "type": "object" }, { @@ -6756,20 +5408,21 @@ }, "method": { "enum": [ - "remoteControl/enable" + "review/start" ], - "title": "RemoteControl/enableRequestMethod", + "title": "Review/startRequestMethod", "type": "string" }, "params": { - "type": "null" + "$ref": "#/definitions/ReviewStartParams" } }, "required": [ "id", - "method" + "method", + "params" ], - "title": "RemoteControl/enableRequest", + "title": "Review/startRequest", "type": "object" }, { @@ -6779,20 +5432,21 @@ }, "method": { "enum": [ - "remoteControl/disable" + "model/list" ], - "title": "RemoteControl/disableRequestMethod", + "title": "Model/listRequestMethod", "type": "string" }, "params": { - "type": "null" + "$ref": "#/definitions/ModelListParams" } }, "required": [ "id", - "method" + "method", + "params" ], - "title": "RemoteControl/disableRequest", + "title": "Model/listRequest", "type": "object" }, { @@ -6802,37 +5456,37 @@ }, "method": { "enum": [ - "remoteControl/status/read" + "modelProvider/capabilities/read" ], - "title": "RemoteControl/status/readRequestMethod", + "title": "ModelProvider/capabilities/readRequestMethod", "type": "string" }, "params": { - "type": "null" + "$ref": "#/definitions/ModelProviderCapabilitiesReadParams" } }, "required": [ "id", - "method" + "method", + "params" ], - "title": "RemoteControl/status/readRequest", + "title": "ModelProvider/capabilities/readRequest", "type": "object" }, { - "description": "Lists collaboration mode presets.", "properties": { "id": { "$ref": "#/definitions/RequestId" }, "method": { "enum": [ - "collaborationMode/list" + "experimentalFeature/list" ], - "title": "CollaborationMode/listRequestMethod", + "title": "ExperimentalFeature/listRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/CollaborationModeListParams" + "$ref": "#/definitions/ExperimentalFeatureListParams" } }, "required": [ @@ -6840,24 +5494,23 @@ "method", "params" ], - "title": "CollaborationMode/listRequest", + "title": "ExperimentalFeature/listRequest", "type": "object" }, { - "description": "Test-only method used to validate experimental gating.", "properties": { "id": { "$ref": "#/definitions/RequestId" }, "method": { "enum": [ - "mock/experimentalMethod" + "permissionProfile/list" ], - "title": "Mock/experimentalMethodRequestMethod", + "title": "PermissionProfile/listRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/MockExperimentalMethodParams" + "$ref": "#/definitions/PermissionProfileListParams" } }, "required": [ @@ -6865,24 +5518,23 @@ "method", "params" ], - "title": "Mock/experimentalMethodRequest", + "title": "PermissionProfile/listRequest", "type": "object" }, { - "description": "Adds or replaces a remote environment by id for later selection.", "properties": { "id": { "$ref": "#/definitions/RequestId" }, "method": { "enum": [ - "environment/add" + "experimentalFeature/enablement/set" ], - "title": "Environment/addRequestMethod", + "title": "ExperimentalFeature/enablement/setRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/EnvironmentAddParams" + "$ref": "#/definitions/ExperimentalFeatureEnablementSetParams" } }, "required": [ @@ -6890,7 +5542,7 @@ "method", "params" ], - "title": "Environment/addRequest", + "title": "ExperimentalFeature/enablement/setRequest", "type": "object" }, { @@ -7301,106 +5953,6 @@ "title": "Command/exec/resizeRequest", "type": "object" }, - { - "description": "Spawn a standalone process (argv vector) without a Codex sandbox.", - "properties": { - "id": { - "$ref": "#/definitions/RequestId" - }, - "method": { - "enum": [ - "process/spawn" - ], - "title": "Process/spawnRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/ProcessSpawnParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "Process/spawnRequest", - "type": "object" - }, - { - "description": "Write stdin bytes to a running `process/spawn` session or close stdin.", - "properties": { - "id": { - "$ref": "#/definitions/RequestId" - }, - "method": { - "enum": [ - "process/writeStdin" - ], - "title": "Process/writeStdinRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/ProcessWriteStdinParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "Process/writeStdinRequest", - "type": "object" - }, - { - "description": "Terminate a running `process/spawn` session by client-supplied `processHandle`.", - "properties": { - "id": { - "$ref": "#/definitions/RequestId" - }, - "method": { - "enum": [ - "process/kill" - ], - "title": "Process/killRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/ProcessKillParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "Process/killRequest", - "type": "object" - }, - { - "description": "Resize a running PTY-backed `process/spawn` session by client-supplied `processHandle`.", - "properties": { - "id": { - "$ref": "#/definitions/RequestId" - }, - "method": { - "enum": [ - "process/resizePty" - ], - "title": "Process/resizePtyRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/ProcessResizePtyParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "Process/resizePtyRequest", - "type": "object" - }, { "properties": { "id": { @@ -7591,78 +6143,6 @@ ], "title": "FuzzyFileSearchRequest", "type": "object" - }, - { - "properties": { - "id": { - "$ref": "#/definitions/RequestId" - }, - "method": { - "enum": [ - "fuzzyFileSearch/sessionStart" - ], - "title": "FuzzyFileSearch/sessionStartRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/FuzzyFileSearchSessionStartParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "FuzzyFileSearch/sessionStartRequest", - "type": "object" - }, - { - "properties": { - "id": { - "$ref": "#/definitions/RequestId" - }, - "method": { - "enum": [ - "fuzzyFileSearch/sessionUpdate" - ], - "title": "FuzzyFileSearch/sessionUpdateRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/FuzzyFileSearchSessionUpdateParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "FuzzyFileSearch/sessionUpdateRequest", - "type": "object" - }, - { - "properties": { - "id": { - "$ref": "#/definitions/RequestId" - }, - "method": { - "enum": [ - "fuzzyFileSearch/sessionStop" - ], - "title": "FuzzyFileSearch/sessionStopRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/FuzzyFileSearchSessionStopParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "FuzzyFileSearch/sessionStopRequest", - "type": "object" } ], "title": "ClientRequest" diff --git a/codex-rs/app-server-protocol/schema/json/CommandExecutionRequestApprovalParams.json b/codex-rs/app-server-protocol/schema/json/CommandExecutionRequestApprovalParams.json index 4176ab92743..922db80f2f7 100644 --- a/codex-rs/app-server-protocol/schema/json/CommandExecutionRequestApprovalParams.json +++ b/codex-rs/app-server-protocol/schema/json/CommandExecutionRequestApprovalParams.json @@ -517,17 +517,6 @@ } }, "properties": { - "additionalPermissions": { - "anyOf": [ - { - "$ref": "#/definitions/AdditionalPermissionProfile" - }, - { - "type": "null" - } - ], - "description": "Optional additional permissions requested for this command." - }, "approvalId": { "description": "Unique identifier for this specific approval callback.\n\nFor regular shell/unified_exec approvals, this is null.\n\nFor zsh-exec-bridge subcommand approvals, multiple callbacks can belong to one parent `itemId`, so `approvalId` is a distinct opaque callback id (a UUID) used to disambiguate routing.", "type": [ @@ -535,16 +524,6 @@ "null" ] }, - "availableDecisions": { - "description": "Ordered list of decisions the client may present for this prompt.", - "items": { - "$ref": "#/definitions/CommandExecutionApprovalDecision" - }, - "type": [ - "array", - "null" - ] - }, "command": { "description": "The command to be executed.", "type": [ diff --git a/codex-rs/app-server-protocol/schema/json/FuzzyFileSearchSessionStartParams.json b/codex-rs/app-server-protocol/schema/json/FuzzyFileSearchSessionStartParams.json deleted file mode 100644 index 4afa812d988..00000000000 --- a/codex-rs/app-server-protocol/schema/json/FuzzyFileSearchSessionStartParams.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "properties": { - "roots": { - "items": { - "type": "string" - }, - "type": "array" - }, - "sessionId": { - "type": "string" - } - }, - "required": [ - "roots", - "sessionId" - ], - "title": "FuzzyFileSearchSessionStartParams", - "type": "object" -} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/FuzzyFileSearchSessionStartResponse.json b/codex-rs/app-server-protocol/schema/json/FuzzyFileSearchSessionStartResponse.json deleted file mode 100644 index 46256ddf4f8..00000000000 --- a/codex-rs/app-server-protocol/schema/json/FuzzyFileSearchSessionStartResponse.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "FuzzyFileSearchSessionStartResponse", - "type": "object" -} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/FuzzyFileSearchSessionStopParams.json b/codex-rs/app-server-protocol/schema/json/FuzzyFileSearchSessionStopParams.json deleted file mode 100644 index 874808fcd58..00000000000 --- a/codex-rs/app-server-protocol/schema/json/FuzzyFileSearchSessionStopParams.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "properties": { - "sessionId": { - "type": "string" - } - }, - "required": [ - "sessionId" - ], - "title": "FuzzyFileSearchSessionStopParams", - "type": "object" -} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/FuzzyFileSearchSessionStopResponse.json b/codex-rs/app-server-protocol/schema/json/FuzzyFileSearchSessionStopResponse.json deleted file mode 100644 index 3d222c52e72..00000000000 --- a/codex-rs/app-server-protocol/schema/json/FuzzyFileSearchSessionStopResponse.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "FuzzyFileSearchSessionStopResponse", - "type": "object" -} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/FuzzyFileSearchSessionUpdateParams.json b/codex-rs/app-server-protocol/schema/json/FuzzyFileSearchSessionUpdateParams.json deleted file mode 100644 index dfb7ae1c9f4..00000000000 --- a/codex-rs/app-server-protocol/schema/json/FuzzyFileSearchSessionUpdateParams.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "properties": { - "query": { - "type": "string" - }, - "sessionId": { - "type": "string" - } - }, - "required": [ - "query", - "sessionId" - ], - "title": "FuzzyFileSearchSessionUpdateParams", - "type": "object" -} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/FuzzyFileSearchSessionUpdateResponse.json b/codex-rs/app-server-protocol/schema/json/FuzzyFileSearchSessionUpdateResponse.json deleted file mode 100644 index 9aebbb091cd..00000000000 --- a/codex-rs/app-server-protocol/schema/json/FuzzyFileSearchSessionUpdateResponse.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "FuzzyFileSearchSessionUpdateResponse", - "type": "object" -} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/ServerRequest.json b/codex-rs/app-server-protocol/schema/json/ServerRequest.json index 85bfc94be45..411095f2c29 100644 --- a/codex-rs/app-server-protocol/schema/json/ServerRequest.json +++ b/codex-rs/app-server-protocol/schema/json/ServerRequest.json @@ -344,17 +344,6 @@ }, "CommandExecutionRequestApprovalParams": { "properties": { - "additionalPermissions": { - "anyOf": [ - { - "$ref": "#/definitions/AdditionalPermissionProfile" - }, - { - "type": "null" - } - ], - "description": "Optional additional permissions requested for this command." - }, "approvalId": { "description": "Unique identifier for this specific approval callback.\n\nFor regular shell/unified_exec approvals, this is null.\n\nFor zsh-exec-bridge subcommand approvals, multiple callbacks can belong to one parent `itemId`, so `approvalId` is a distinct opaque callback id (a UUID) used to disambiguate routing.", "type": [ @@ -362,16 +351,6 @@ "null" ] }, - "availableDecisions": { - "description": "Ordered list of decisions the client may present for this prompt.", - "items": { - "$ref": "#/definitions/CommandExecutionApprovalDecision" - }, - "type": [ - "array", - "null" - ] - }, "command": { "description": "The command to be executed.", "type": [ diff --git a/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.schemas.json b/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.schemas.json index efe84e4f330..a7384050362 100644 --- a/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.schemas.json +++ b/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.schemas.json @@ -348,56 +348,6 @@ "title": "Thread/unsubscribeRequest", "type": "object" }, - { - "description": "Increment the thread-local out-of-band elicitation counter.\n\nThis is used by external helpers to pause timeout accounting while a user approval or other elicitation is pending outside the app-server request flow.", - "properties": { - "id": { - "$ref": "#/definitions/v2/RequestId" - }, - "method": { - "enum": [ - "thread/increment_elicitation" - ], - "title": "Thread/incrementElicitationRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/v2/ThreadIncrementElicitationParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "Thread/incrementElicitationRequest", - "type": "object" - }, - { - "description": "Decrement the thread-local out-of-band elicitation counter.\n\nWhen the count reaches zero, timeout accounting resumes for the thread.", - "properties": { - "id": { - "$ref": "#/definitions/v2/RequestId" - }, - "method": { - "enum": [ - "thread/decrement_elicitation" - ], - "title": "Thread/decrementElicitationRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/v2/ThreadDecrementElicitationParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "Thread/decrementElicitationRequest", - "type": "object" - }, { "properties": { "id": { @@ -518,77 +468,6 @@ "title": "Thread/metadata/updateRequest", "type": "object" }, - { - "properties": { - "id": { - "$ref": "#/definitions/v2/RequestId" - }, - "method": { - "enum": [ - "thread/settings/update" - ], - "title": "Thread/settings/updateRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/v2/ThreadSettingsUpdateParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "Thread/settings/updateRequest", - "type": "object" - }, - { - "properties": { - "id": { - "$ref": "#/definitions/v2/RequestId" - }, - "method": { - "enum": [ - "thread/memoryMode/set" - ], - "title": "Thread/memoryMode/setRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/v2/ThreadMemoryModeSetParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "Thread/memoryMode/setRequest", - "type": "object" - }, - { - "properties": { - "id": { - "$ref": "#/definitions/v2/RequestId" - }, - "method": { - "enum": [ - "memory/reset" - ], - "title": "Memory/resetRequestMethod", - "type": "string" - }, - "params": { - "type": "null" - } - }, - "required": [ - "id", - "method" - ], - "title": "Memory/resetRequest", - "type": "object" - }, { "properties": { "id": { @@ -685,30 +564,6 @@ "title": "Thread/approveGuardianDeniedActionRequest", "type": "object" }, - { - "properties": { - "id": { - "$ref": "#/definitions/v2/RequestId" - }, - "method": { - "enum": [ - "thread/backgroundTerminals/clean" - ], - "title": "Thread/backgroundTerminals/cleanRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/v2/ThreadBackgroundTerminalsCleanParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "Thread/backgroundTerminals/cleanRequest", - "type": "object" - }, { "properties": { "id": { @@ -757,30 +612,6 @@ "title": "Thread/listRequest", "type": "object" }, - { - "properties": { - "id": { - "$ref": "#/definitions/v2/RequestId" - }, - "method": { - "enum": [ - "thread/search" - ], - "title": "Thread/searchRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/v2/ThreadSearchParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "Thread/searchRequest", - "type": "object" - }, { "properties": { "id": { @@ -829,54 +660,6 @@ "title": "Thread/readRequest", "type": "object" }, - { - "properties": { - "id": { - "$ref": "#/definitions/v2/RequestId" - }, - "method": { - "enum": [ - "thread/turns/list" - ], - "title": "Thread/turns/listRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/v2/ThreadTurnsListParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "Thread/turns/listRequest", - "type": "object" - }, - { - "properties": { - "id": { - "$ref": "#/definitions/v2/RequestId" - }, - "method": { - "enum": [ - "thread/turns/items/list" - ], - "title": "Thread/turns/items/listRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/v2/ThreadTurnsItemsListParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "Thread/turns/items/listRequest", - "type": "object" - }, { "description": "Append raw Responses API items to the thread history without starting a user turn.", "properties": { @@ -1629,13 +1412,13 @@ }, "method": { "enum": [ - "thread/realtime/start" + "review/start" ], - "title": "Thread/realtime/startRequestMethod", + "title": "Review/startRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/v2/ThreadRealtimeStartParams" + "$ref": "#/definitions/v2/ReviewStartParams" } }, "required": [ @@ -1643,7 +1426,7 @@ "method", "params" ], - "title": "Thread/realtime/startRequest", + "title": "Review/startRequest", "type": "object" }, { @@ -1653,13 +1436,13 @@ }, "method": { "enum": [ - "thread/realtime/appendAudio" + "model/list" ], - "title": "Thread/realtime/appendAudioRequestMethod", + "title": "Model/listRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/v2/ThreadRealtimeAppendAudioParams" + "$ref": "#/definitions/v2/ModelListParams" } }, "required": [ @@ -1667,7 +1450,7 @@ "method", "params" ], - "title": "Thread/realtime/appendAudioRequest", + "title": "Model/listRequest", "type": "object" }, { @@ -1677,13 +1460,13 @@ }, "method": { "enum": [ - "thread/realtime/appendText" + "modelProvider/capabilities/read" ], - "title": "Thread/realtime/appendTextRequestMethod", + "title": "ModelProvider/capabilities/readRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/v2/ThreadRealtimeAppendTextParams" + "$ref": "#/definitions/v2/ModelProviderCapabilitiesReadParams" } }, "required": [ @@ -1691,7 +1474,7 @@ "method", "params" ], - "title": "Thread/realtime/appendTextRequest", + "title": "ModelProvider/capabilities/readRequest", "type": "object" }, { @@ -1701,13 +1484,13 @@ }, "method": { "enum": [ - "thread/realtime/stop" + "experimentalFeature/list" ], - "title": "Thread/realtime/stopRequestMethod", + "title": "ExperimentalFeature/listRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/v2/ThreadRealtimeStopParams" + "$ref": "#/definitions/v2/ExperimentalFeatureListParams" } }, "required": [ @@ -1715,7 +1498,7 @@ "method", "params" ], - "title": "Thread/realtime/stopRequest", + "title": "ExperimentalFeature/listRequest", "type": "object" }, { @@ -1725,13 +1508,13 @@ }, "method": { "enum": [ - "thread/realtime/listVoices" + "permissionProfile/list" ], - "title": "Thread/realtime/listVoicesRequestMethod", + "title": "PermissionProfile/listRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/v2/ThreadRealtimeListVoicesParams" + "$ref": "#/definitions/v2/PermissionProfileListParams" } }, "required": [ @@ -1739,7 +1522,7 @@ "method", "params" ], - "title": "Thread/realtime/listVoicesRequest", + "title": "PermissionProfile/listRequest", "type": "object" }, { @@ -1749,13 +1532,13 @@ }, "method": { "enum": [ - "review/start" + "experimentalFeature/enablement/set" ], - "title": "Review/startRequestMethod", + "title": "ExperimentalFeature/enablement/setRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/v2/ReviewStartParams" + "$ref": "#/definitions/v2/ExperimentalFeatureEnablementSetParams" } }, "required": [ @@ -1763,7 +1546,7 @@ "method", "params" ], - "title": "Review/startRequest", + "title": "ExperimentalFeature/enablement/setRequest", "type": "object" }, { @@ -1773,13 +1556,13 @@ }, "method": { "enum": [ - "model/list" + "mcpServer/oauth/login" ], - "title": "Model/listRequestMethod", + "title": "McpServer/oauth/loginRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/v2/ModelListParams" + "$ref": "#/definitions/v2/McpServerOauthLoginParams" } }, "required": [ @@ -1787,7 +1570,7 @@ "method", "params" ], - "title": "Model/listRequest", + "title": "McpServer/oauth/loginRequest", "type": "object" }, { @@ -1797,21 +1580,20 @@ }, "method": { "enum": [ - "modelProvider/capabilities/read" + "config/mcpServer/reload" ], - "title": "ModelProvider/capabilities/readRequestMethod", + "title": "Config/mcpServer/reloadRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/v2/ModelProviderCapabilitiesReadParams" + "type": "null" } }, "required": [ "id", - "method", - "params" + "method" ], - "title": "ModelProvider/capabilities/readRequest", + "title": "Config/mcpServer/reloadRequest", "type": "object" }, { @@ -1821,13 +1603,13 @@ }, "method": { "enum": [ - "experimentalFeature/list" + "mcpServerStatus/list" ], - "title": "ExperimentalFeature/listRequestMethod", + "title": "McpServerStatus/listRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/v2/ExperimentalFeatureListParams" + "$ref": "#/definitions/v2/ListMcpServerStatusParams" } }, "required": [ @@ -1835,7 +1617,7 @@ "method", "params" ], - "title": "ExperimentalFeature/listRequest", + "title": "McpServerStatus/listRequest", "type": "object" }, { @@ -1845,13 +1627,13 @@ }, "method": { "enum": [ - "permissionProfile/list" + "mcpServer/resource/read" ], - "title": "PermissionProfile/listRequestMethod", + "title": "McpServer/resource/readRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/v2/PermissionProfileListParams" + "$ref": "#/definitions/v2/McpResourceReadParams" } }, "required": [ @@ -1859,7 +1641,7 @@ "method", "params" ], - "title": "PermissionProfile/listRequest", + "title": "McpServer/resource/readRequest", "type": "object" }, { @@ -1869,13 +1651,13 @@ }, "method": { "enum": [ - "experimentalFeature/enablement/set" + "mcpServer/tool/call" ], - "title": "ExperimentalFeature/enablement/setRequestMethod", + "title": "McpServer/tool/callRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/v2/ExperimentalFeatureEnablementSetParams" + "$ref": "#/definitions/v2/McpServerToolCallParams" } }, "required": [ @@ -1883,7 +1665,7 @@ "method", "params" ], - "title": "ExperimentalFeature/enablement/setRequest", + "title": "McpServer/tool/callRequest", "type": "object" }, { @@ -1893,20 +1675,21 @@ }, "method": { "enum": [ - "remoteControl/enable" + "windowsSandbox/setupStart" ], - "title": "RemoteControl/enableRequestMethod", + "title": "WindowsSandbox/setupStartRequestMethod", "type": "string" }, "params": { - "type": "null" + "$ref": "#/definitions/v2/WindowsSandboxSetupStartParams" } }, "required": [ "id", - "method" + "method", + "params" ], - "title": "RemoteControl/enableRequest", + "title": "WindowsSandbox/setupStartRequest", "type": "object" }, { @@ -1916,9 +1699,9 @@ }, "method": { "enum": [ - "remoteControl/disable" + "windowsSandbox/readiness" ], - "title": "RemoteControl/disableRequestMethod", + "title": "WindowsSandbox/readinessRequestMethod", "type": "string" }, "params": { @@ -1929,7 +1712,7 @@ "id", "method" ], - "title": "RemoteControl/disableRequest", + "title": "WindowsSandbox/readinessRequest", "type": "object" }, { @@ -1939,37 +1722,37 @@ }, "method": { "enum": [ - "remoteControl/status/read" + "account/login/start" ], - "title": "RemoteControl/status/readRequestMethod", + "title": "Account/login/startRequestMethod", "type": "string" }, "params": { - "type": "null" + "$ref": "#/definitions/v2/LoginAccountParams" } }, "required": [ "id", - "method" + "method", + "params" ], - "title": "RemoteControl/status/readRequest", + "title": "Account/login/startRequest", "type": "object" }, { - "description": "Lists collaboration mode presets.", "properties": { "id": { "$ref": "#/definitions/v2/RequestId" }, "method": { "enum": [ - "collaborationMode/list" + "account/login/cancel" ], - "title": "CollaborationMode/listRequestMethod", + "title": "Account/login/cancelRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/v2/CollaborationModeListParams" + "$ref": "#/definitions/v2/CancelLoginAccountParams" } }, "required": [ @@ -1977,57 +1760,53 @@ "method", "params" ], - "title": "CollaborationMode/listRequest", + "title": "Account/login/cancelRequest", "type": "object" }, { - "description": "Test-only method used to validate experimental gating.", "properties": { "id": { "$ref": "#/definitions/v2/RequestId" }, "method": { "enum": [ - "mock/experimentalMethod" + "account/logout" ], - "title": "Mock/experimentalMethodRequestMethod", + "title": "Account/logoutRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/v2/MockExperimentalMethodParams" + "type": "null" } }, "required": [ "id", - "method", - "params" + "method" ], - "title": "Mock/experimentalMethodRequest", + "title": "Account/logoutRequest", "type": "object" }, { - "description": "Adds or replaces a remote environment by id for later selection.", "properties": { "id": { "$ref": "#/definitions/v2/RequestId" }, "method": { "enum": [ - "environment/add" + "account/rateLimits/read" ], - "title": "Environment/addRequestMethod", + "title": "Account/rateLimits/readRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/v2/EnvironmentAddParams" + "type": "null" } }, "required": [ "id", - "method", - "params" + "method" ], - "title": "Environment/addRequest", + "title": "Account/rateLimits/readRequest", "type": "object" }, { @@ -2037,13 +1816,13 @@ }, "method": { "enum": [ - "mcpServer/oauth/login" + "account/sendAddCreditsNudgeEmail" ], - "title": "McpServer/oauth/loginRequestMethod", + "title": "Account/sendAddCreditsNudgeEmailRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/v2/McpServerOauthLoginParams" + "$ref": "#/definitions/v2/SendAddCreditsNudgeEmailParams" } }, "required": [ @@ -2051,7 +1830,7 @@ "method", "params" ], - "title": "McpServer/oauth/loginRequest", + "title": "Account/sendAddCreditsNudgeEmailRequest", "type": "object" }, { @@ -2061,36 +1840,38 @@ }, "method": { "enum": [ - "config/mcpServer/reload" + "feedback/upload" ], - "title": "Config/mcpServer/reloadRequestMethod", + "title": "Feedback/uploadRequestMethod", "type": "string" }, "params": { - "type": "null" + "$ref": "#/definitions/v2/FeedbackUploadParams" } }, "required": [ "id", - "method" + "method", + "params" ], - "title": "Config/mcpServer/reloadRequest", + "title": "Feedback/uploadRequest", "type": "object" }, { + "description": "Execute a standalone command (argv vector) under the server's sandbox.", "properties": { "id": { "$ref": "#/definitions/v2/RequestId" }, "method": { "enum": [ - "mcpServerStatus/list" + "command/exec" ], - "title": "McpServerStatus/listRequestMethod", + "title": "Command/execRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/v2/ListMcpServerStatusParams" + "$ref": "#/definitions/v2/CommandExecParams" } }, "required": [ @@ -2098,23 +1879,24 @@ "method", "params" ], - "title": "McpServerStatus/listRequest", + "title": "Command/execRequest", "type": "object" }, { + "description": "Write stdin bytes to a running `command/exec` session or close stdin.", "properties": { "id": { "$ref": "#/definitions/v2/RequestId" }, "method": { "enum": [ - "mcpServer/resource/read" + "command/exec/write" ], - "title": "McpServer/resource/readRequestMethod", + "title": "Command/exec/writeRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/v2/McpResourceReadParams" + "$ref": "#/definitions/v2/CommandExecWriteParams" } }, "required": [ @@ -2122,23 +1904,24 @@ "method", "params" ], - "title": "McpServer/resource/readRequest", + "title": "Command/exec/writeRequest", "type": "object" }, { + "description": "Terminate a running `command/exec` session by client-supplied `processId`.", "properties": { "id": { "$ref": "#/definitions/v2/RequestId" }, "method": { "enum": [ - "mcpServer/tool/call" + "command/exec/terminate" ], - "title": "McpServer/tool/callRequestMethod", + "title": "Command/exec/terminateRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/v2/McpServerToolCallParams" + "$ref": "#/definitions/v2/CommandExecTerminateParams" } }, "required": [ @@ -2146,23 +1929,24 @@ "method", "params" ], - "title": "McpServer/tool/callRequest", + "title": "Command/exec/terminateRequest", "type": "object" }, { + "description": "Resize a running PTY-backed `command/exec` session by client-supplied `processId`.", "properties": { "id": { "$ref": "#/definitions/v2/RequestId" }, "method": { "enum": [ - "windowsSandbox/setupStart" + "command/exec/resize" ], - "title": "WindowsSandbox/setupStartRequestMethod", + "title": "Command/exec/resizeRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/v2/WindowsSandboxSetupStartParams" + "$ref": "#/definitions/v2/CommandExecResizeParams" } }, "required": [ @@ -2170,7 +1954,7 @@ "method", "params" ], - "title": "WindowsSandbox/setupStartRequest", + "title": "Command/exec/resizeRequest", "type": "object" }, { @@ -2180,20 +1964,21 @@ }, "method": { "enum": [ - "windowsSandbox/readiness" + "config/read" ], - "title": "WindowsSandbox/readinessRequestMethod", + "title": "Config/readRequestMethod", "type": "string" }, "params": { - "type": "null" + "$ref": "#/definitions/v2/ConfigReadParams" } }, "required": [ "id", - "method" + "method", + "params" ], - "title": "WindowsSandbox/readinessRequest", + "title": "Config/readRequest", "type": "object" }, { @@ -2203,13 +1988,13 @@ }, "method": { "enum": [ - "account/login/start" + "externalAgentConfig/detect" ], - "title": "Account/login/startRequestMethod", + "title": "ExternalAgentConfig/detectRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/v2/LoginAccountParams" + "$ref": "#/definitions/v2/ExternalAgentConfigDetectParams" } }, "required": [ @@ -2217,7 +2002,7 @@ "method", "params" ], - "title": "Account/login/startRequest", + "title": "ExternalAgentConfig/detectRequest", "type": "object" }, { @@ -2227,13 +2012,13 @@ }, "method": { "enum": [ - "account/login/cancel" + "externalAgentConfig/import" ], - "title": "Account/login/cancelRequestMethod", + "title": "ExternalAgentConfig/importRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/v2/CancelLoginAccountParams" + "$ref": "#/definitions/v2/ExternalAgentConfigImportParams" } }, "required": [ @@ -2241,7 +2026,7 @@ "method", "params" ], - "title": "Account/login/cancelRequest", + "title": "ExternalAgentConfig/importRequest", "type": "object" }, { @@ -2251,20 +2036,21 @@ }, "method": { "enum": [ - "account/logout" + "config/value/write" ], - "title": "Account/logoutRequestMethod", + "title": "Config/value/writeRequestMethod", "type": "string" }, "params": { - "type": "null" + "$ref": "#/definitions/v2/ConfigValueWriteParams" } }, "required": [ "id", - "method" + "method", + "params" ], - "title": "Account/logoutRequest", + "title": "Config/value/writeRequest", "type": "object" }, { @@ -2274,20 +2060,21 @@ }, "method": { "enum": [ - "account/rateLimits/read" + "config/batchWrite" ], - "title": "Account/rateLimits/readRequestMethod", + "title": "Config/batchWriteRequestMethod", "type": "string" }, "params": { - "type": "null" + "$ref": "#/definitions/v2/ConfigBatchWriteParams" } }, "required": [ "id", - "method" + "method", + "params" ], - "title": "Account/rateLimits/readRequest", + "title": "Config/batchWriteRequest", "type": "object" }, { @@ -2297,21 +2084,20 @@ }, "method": { "enum": [ - "account/sendAddCreditsNudgeEmail" + "configRequirements/read" ], - "title": "Account/sendAddCreditsNudgeEmailRequestMethod", + "title": "ConfigRequirements/readRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/v2/SendAddCreditsNudgeEmailParams" + "type": "null" } }, "required": [ "id", - "method", - "params" + "method" ], - "title": "Account/sendAddCreditsNudgeEmailRequest", + "title": "ConfigRequirements/readRequest", "type": "object" }, { @@ -2321,13 +2107,13 @@ }, "method": { "enum": [ - "feedback/upload" + "account/read" ], - "title": "Feedback/uploadRequestMethod", + "title": "Account/readRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/v2/FeedbackUploadParams" + "$ref": "#/definitions/v2/GetAccountParams" } }, "required": [ @@ -2335,24 +2121,23 @@ "method", "params" ], - "title": "Feedback/uploadRequest", + "title": "Account/readRequest", "type": "object" }, { - "description": "Execute a standalone command (argv vector) under the server's sandbox.", "properties": { "id": { "$ref": "#/definitions/v2/RequestId" }, "method": { "enum": [ - "command/exec" + "fuzzyFileSearch" ], - "title": "Command/execRequestMethod", + "title": "FuzzyFileSearchRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/v2/CommandExecParams" + "$ref": "#/definitions/FuzzyFileSearchParams" } }, "required": [ @@ -2360,511 +2145,73 @@ "method", "params" ], - "title": "Command/execRequest", + "title": "FuzzyFileSearchRequest", "type": "object" + } + ], + "title": "ClientRequest" + }, + "CommandExecutionApprovalDecision": { + "oneOf": [ + { + "description": "User approved the command.", + "enum": [ + "accept" + ], + "type": "string" }, { - "description": "Write stdin bytes to a running `command/exec` session or close stdin.", + "description": "User approved the command and future prompts in the same session-scoped approval cache should run without prompting.", + "enum": [ + "acceptForSession" + ], + "type": "string" + }, + { + "additionalProperties": false, + "description": "User approved the command, and wants to apply the proposed execpolicy amendment so future matching commands can run without prompting.", "properties": { - "id": { - "$ref": "#/definitions/v2/RequestId" - }, - "method": { - "enum": [ - "command/exec/write" + "acceptWithExecpolicyAmendment": { + "properties": { + "execpolicy_amendment": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "execpolicy_amendment" ], - "title": "Command/exec/writeRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/v2/CommandExecWriteParams" + "type": "object" } }, "required": [ - "id", - "method", - "params" + "acceptWithExecpolicyAmendment" ], - "title": "Command/exec/writeRequest", + "title": "AcceptWithExecpolicyAmendmentCommandExecutionApprovalDecision", "type": "object" }, { - "description": "Terminate a running `command/exec` session by client-supplied `processId`.", + "additionalProperties": false, + "description": "User chose a persistent network policy rule (allow/deny) for this host.", "properties": { - "id": { - "$ref": "#/definitions/v2/RequestId" - }, - "method": { - "enum": [ - "command/exec/terminate" + "applyNetworkPolicyAmendment": { + "properties": { + "network_policy_amendment": { + "$ref": "#/definitions/NetworkPolicyAmendment" + } + }, + "required": [ + "network_policy_amendment" ], - "title": "Command/exec/terminateRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/v2/CommandExecTerminateParams" + "type": "object" } }, "required": [ - "id", - "method", - "params" + "applyNetworkPolicyAmendment" ], - "title": "Command/exec/terminateRequest", - "type": "object" - }, - { - "description": "Resize a running PTY-backed `command/exec` session by client-supplied `processId`.", - "properties": { - "id": { - "$ref": "#/definitions/v2/RequestId" - }, - "method": { - "enum": [ - "command/exec/resize" - ], - "title": "Command/exec/resizeRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/v2/CommandExecResizeParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "Command/exec/resizeRequest", - "type": "object" - }, - { - "description": "Spawn a standalone process (argv vector) without a Codex sandbox.", - "properties": { - "id": { - "$ref": "#/definitions/v2/RequestId" - }, - "method": { - "enum": [ - "process/spawn" - ], - "title": "Process/spawnRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/v2/ProcessSpawnParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "Process/spawnRequest", - "type": "object" - }, - { - "description": "Write stdin bytes to a running `process/spawn` session or close stdin.", - "properties": { - "id": { - "$ref": "#/definitions/v2/RequestId" - }, - "method": { - "enum": [ - "process/writeStdin" - ], - "title": "Process/writeStdinRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/v2/ProcessWriteStdinParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "Process/writeStdinRequest", - "type": "object" - }, - { - "description": "Terminate a running `process/spawn` session by client-supplied `processHandle`.", - "properties": { - "id": { - "$ref": "#/definitions/v2/RequestId" - }, - "method": { - "enum": [ - "process/kill" - ], - "title": "Process/killRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/v2/ProcessKillParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "Process/killRequest", - "type": "object" - }, - { - "description": "Resize a running PTY-backed `process/spawn` session by client-supplied `processHandle`.", - "properties": { - "id": { - "$ref": "#/definitions/v2/RequestId" - }, - "method": { - "enum": [ - "process/resizePty" - ], - "title": "Process/resizePtyRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/v2/ProcessResizePtyParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "Process/resizePtyRequest", - "type": "object" - }, - { - "properties": { - "id": { - "$ref": "#/definitions/v2/RequestId" - }, - "method": { - "enum": [ - "config/read" - ], - "title": "Config/readRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/v2/ConfigReadParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "Config/readRequest", - "type": "object" - }, - { - "properties": { - "id": { - "$ref": "#/definitions/v2/RequestId" - }, - "method": { - "enum": [ - "externalAgentConfig/detect" - ], - "title": "ExternalAgentConfig/detectRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/v2/ExternalAgentConfigDetectParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "ExternalAgentConfig/detectRequest", - "type": "object" - }, - { - "properties": { - "id": { - "$ref": "#/definitions/v2/RequestId" - }, - "method": { - "enum": [ - "externalAgentConfig/import" - ], - "title": "ExternalAgentConfig/importRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/v2/ExternalAgentConfigImportParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "ExternalAgentConfig/importRequest", - "type": "object" - }, - { - "properties": { - "id": { - "$ref": "#/definitions/v2/RequestId" - }, - "method": { - "enum": [ - "config/value/write" - ], - "title": "Config/value/writeRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/v2/ConfigValueWriteParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "Config/value/writeRequest", - "type": "object" - }, - { - "properties": { - "id": { - "$ref": "#/definitions/v2/RequestId" - }, - "method": { - "enum": [ - "config/batchWrite" - ], - "title": "Config/batchWriteRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/v2/ConfigBatchWriteParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "Config/batchWriteRequest", - "type": "object" - }, - { - "properties": { - "id": { - "$ref": "#/definitions/v2/RequestId" - }, - "method": { - "enum": [ - "configRequirements/read" - ], - "title": "ConfigRequirements/readRequestMethod", - "type": "string" - }, - "params": { - "type": "null" - } - }, - "required": [ - "id", - "method" - ], - "title": "ConfigRequirements/readRequest", - "type": "object" - }, - { - "properties": { - "id": { - "$ref": "#/definitions/v2/RequestId" - }, - "method": { - "enum": [ - "account/read" - ], - "title": "Account/readRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/v2/GetAccountParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "Account/readRequest", - "type": "object" - }, - { - "properties": { - "id": { - "$ref": "#/definitions/v2/RequestId" - }, - "method": { - "enum": [ - "fuzzyFileSearch" - ], - "title": "FuzzyFileSearchRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/FuzzyFileSearchParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "FuzzyFileSearchRequest", - "type": "object" - }, - { - "properties": { - "id": { - "$ref": "#/definitions/v2/RequestId" - }, - "method": { - "enum": [ - "fuzzyFileSearch/sessionStart" - ], - "title": "FuzzyFileSearch/sessionStartRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/FuzzyFileSearchSessionStartParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "FuzzyFileSearch/sessionStartRequest", - "type": "object" - }, - { - "properties": { - "id": { - "$ref": "#/definitions/v2/RequestId" - }, - "method": { - "enum": [ - "fuzzyFileSearch/sessionUpdate" - ], - "title": "FuzzyFileSearch/sessionUpdateRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/FuzzyFileSearchSessionUpdateParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "FuzzyFileSearch/sessionUpdateRequest", - "type": "object" - }, - { - "properties": { - "id": { - "$ref": "#/definitions/v2/RequestId" - }, - "method": { - "enum": [ - "fuzzyFileSearch/sessionStop" - ], - "title": "FuzzyFileSearch/sessionStopRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/FuzzyFileSearchSessionStopParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "FuzzyFileSearch/sessionStopRequest", - "type": "object" - } - ], - "title": "ClientRequest" - }, - "CommandExecutionApprovalDecision": { - "oneOf": [ - { - "description": "User approved the command.", - "enum": [ - "accept" - ], - "type": "string" - }, - { - "description": "User approved the command and future prompts in the same session-scoped approval cache should run without prompting.", - "enum": [ - "acceptForSession" - ], - "type": "string" - }, - { - "additionalProperties": false, - "description": "User approved the command, and wants to apply the proposed execpolicy amendment so future matching commands can run without prompting.", - "properties": { - "acceptWithExecpolicyAmendment": { - "properties": { - "execpolicy_amendment": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - "required": [ - "execpolicy_amendment" - ], - "type": "object" - } - }, - "required": [ - "acceptWithExecpolicyAmendment" - ], - "title": "AcceptWithExecpolicyAmendmentCommandExecutionApprovalDecision", - "type": "object" - }, - { - "additionalProperties": false, - "description": "User chose a persistent network policy rule (allow/deny) for this host.", - "properties": { - "applyNetworkPolicyAmendment": { - "properties": { - "network_policy_amendment": { - "$ref": "#/definitions/NetworkPolicyAmendment" - } - }, - "required": [ - "network_policy_amendment" - ], - "type": "object" - } - }, - "required": [ - "applyNetworkPolicyAmendment" - ], - "title": "ApplyNetworkPolicyAmendmentCommandExecutionApprovalDecision", + "title": "ApplyNetworkPolicyAmendmentCommandExecutionApprovalDecision", "type": "object" }, { @@ -2886,17 +2233,6 @@ "CommandExecutionRequestApprovalParams": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { - "additionalPermissions": { - "anyOf": [ - { - "$ref": "#/definitions/AdditionalPermissionProfile" - }, - { - "type": "null" - } - ], - "description": "Optional additional permissions requested for this command." - }, "approvalId": { "description": "Unique identifier for this specific approval callback.\n\nFor regular shell/unified_exec approvals, this is null.\n\nFor zsh-exec-bridge subcommand approvals, multiple callbacks can belong to one parent `itemId`, so `approvalId` is a distinct opaque callback id (a UUID) used to disambiguate routing.", "type": [ @@ -2904,16 +2240,6 @@ "null" ] }, - "availableDecisions": { - "description": "Ordered list of decisions the client may present for this prompt.", - "items": { - "$ref": "#/definitions/CommandExecutionApprovalDecision" - }, - "type": [ - "array", - "null" - ] - }, "command": { "description": "The command to be executed.", "type": [ @@ -3391,71 +2717,6 @@ "title": "FuzzyFileSearchSessionCompletedNotification", "type": "object" }, - "FuzzyFileSearchSessionStartParams": { - "$schema": "http://json-schema.org/draft-07/schema#", - "properties": { - "roots": { - "items": { - "type": "string" - }, - "type": "array" - }, - "sessionId": { - "type": "string" - } - }, - "required": [ - "roots", - "sessionId" - ], - "title": "FuzzyFileSearchSessionStartParams", - "type": "object" - }, - "FuzzyFileSearchSessionStartResponse": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "FuzzyFileSearchSessionStartResponse", - "type": "object" - }, - "FuzzyFileSearchSessionStopParams": { - "$schema": "http://json-schema.org/draft-07/schema#", - "properties": { - "sessionId": { - "type": "string" - } - }, - "required": [ - "sessionId" - ], - "title": "FuzzyFileSearchSessionStopParams", - "type": "object" - }, - "FuzzyFileSearchSessionStopResponse": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "FuzzyFileSearchSessionStopResponse", - "type": "object" - }, - "FuzzyFileSearchSessionUpdateParams": { - "$schema": "http://json-schema.org/draft-07/schema#", - "properties": { - "query": { - "type": "string" - }, - "sessionId": { - "type": "string" - } - }, - "required": [ - "query", - "sessionId" - ], - "title": "FuzzyFileSearchSessionUpdateParams", - "type": "object" - }, - "FuzzyFileSearchSessionUpdateResponse": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "FuzzyFileSearchSessionUpdateResponse", - "type": "object" - }, "FuzzyFileSearchSessionUpdatedNotification": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { @@ -6507,17 +5768,6 @@ ], "type": "string" }, - "AdditionalContextEntry": { - "properties": { - "value": { - "type": "string" - } - }, - "required": [ - "value" - ], - "type": "object" - }, "AdditionalFileSystemPermissions": { "properties": { "entries": { @@ -7458,29 +6708,6 @@ ], "type": "object" }, - "CollaborationModeListParams": { - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "EXPERIMENTAL - list collaboration mode presets.", - "title": "CollaborationModeListParams", - "type": "object" - }, - "CollaborationModeListResponse": { - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "EXPERIMENTAL - collaboration mode presets response.", - "properties": { - "data": { - "items": { - "$ref": "#/definitions/v2/CollaborationModeMask" - }, - "type": "array" - } - }, - "required": [ - "data" - ], - "title": "CollaborationModeListResponse", - "type": "object" - }, "CollaborationModeMask": { "description": "EXPERIMENTAL - collaboration mode preset metadata for clients.", "properties": { @@ -7737,13 +6964,6 @@ "null" ] }, - "permissionProfile": { - "description": "Optional active permissions profile id for this command.\n\nDefaults to the user's configured permissions when omitted. Cannot be combined with `sandboxPolicy`.", - "type": [ - "string", - "null" - ] - }, "processId": { "description": "Optional client-supplied, connection-scoped process id.\n\nRequired for `tty`, `streamStdin`, `streamStdoutStderr`, and follow-up `command/exec/write`, `command/exec/resize`, and `command/exec/terminate` calls. When omitted, buffered execution gets an internal id that is not exposed to the client.", "type": [ @@ -8030,17 +7250,6 @@ ], "description": "[UNSTABLE] Optional default for where approval requests are routed for review." }, - "apps": { - "anyOf": [ - { - "$ref": "#/definitions/v2/AppsConfig" - }, - { - "type": "null" - } - ], - "default": null - }, "compact_prompt": { "type": [ "string", @@ -8527,15 +7736,6 @@ "null" ] }, - "allowedApprovalsReviewers": { - "items": { - "$ref": "#/definitions/v2/ApprovalsReviewer" - }, - "type": [ - "array", - "null" - ] - }, "allowedPermissions": { "items": { "type": "string" @@ -8591,26 +7791,6 @@ "object", "null" ] - }, - "hooks": { - "anyOf": [ - { - "$ref": "#/definitions/v2/ManagedHooksRequirements" - }, - { - "type": "null" - } - ] - }, - "network": { - "anyOf": [ - { - "$ref": "#/definitions/v2/NetworkRequirements" - }, - { - "type": "null" - } - ] } }, "type": "object" @@ -9041,37 +8221,15 @@ "namespace": { "type": [ "string", - "null" - ] - } - }, - "required": [ - "description", - "inputSchema", - "name" - ], - "type": "object" - }, - "EnvironmentAddParams": { - "$schema": "http://json-schema.org/draft-07/schema#", - "properties": { - "environmentId": { - "type": "string" - }, - "execServerUrl": { - "type": "string" + "null" + ] } }, "required": [ - "environmentId", - "execServerUrl" + "description", + "inputSchema", + "name" ], - "title": "EnvironmentAddParams", - "type": "object" - }, - "EnvironmentAddResponse": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "EnvironmentAddResponse", "type": "object" }, "ErrorNotification": { @@ -12083,11 +11241,6 @@ ], "type": "object" }, - "MemoryResetResponse": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "MemoryResetResponse", - "type": "object" - }, "MergeStrategy": { "enum": [ "replace", @@ -12161,34 +11314,6 @@ }, "type": "object" }, - "MockExperimentalMethodParams": { - "$schema": "http://json-schema.org/draft-07/schema#", - "properties": { - "value": { - "description": "Test-only payload field.", - "type": [ - "string", - "null" - ] - } - }, - "title": "MockExperimentalMethodParams", - "type": "object" - }, - "MockExperimentalMethodResponse": { - "$schema": "http://json-schema.org/draft-07/schema#", - "properties": { - "echoed": { - "description": "Echoes the input `value`.", - "type": [ - "string", - "null" - ] - } - }, - "title": "MockExperimentalMethodResponse", - "type": "object" - }, "ModeKind": { "description": "Initial collaboration mode to use when the TUI starts.", "enum": [ @@ -13963,27 +13088,6 @@ "title": "ProcessExitedNotification", "type": "object" }, - "ProcessKillParams": { - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "Terminate a running `process/spawn` session.", - "properties": { - "processHandle": { - "description": "Client-supplied, connection-scoped `processHandle` from `process/spawn`.", - "type": "string" - } - }, - "required": [ - "processHandle" - ], - "title": "ProcessKillParams", - "type": "object" - }, - "ProcessKillResponse": { - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "Empty success response for `process/kill`.", - "title": "ProcessKillResponse", - "type": "object" - }, "ProcessOutputDeltaNotification": { "$schema": "http://json-schema.org/draft-07/schema#", "description": "Base64-encoded output chunk emitted for a streaming `process/spawn` request.", @@ -14037,127 +13141,6 @@ } ] }, - "ProcessResizePtyParams": { - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "Resize a running PTY-backed `process/spawn` session.", - "properties": { - "processHandle": { - "description": "Client-supplied, connection-scoped `processHandle` from `process/spawn`.", - "type": "string" - }, - "size": { - "allOf": [ - { - "$ref": "#/definitions/v2/ProcessTerminalSize" - } - ], - "description": "New PTY size in character cells." - } - }, - "required": [ - "processHandle", - "size" - ], - "title": "ProcessResizePtyParams", - "type": "object" - }, - "ProcessResizePtyResponse": { - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "Empty success response for `process/resizePty`.", - "title": "ProcessResizePtyResponse", - "type": "object" - }, - "ProcessSpawnParams": { - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "Spawn a standalone process (argv vector) without a Codex sandbox on the host where the app server is running.\n\n`process/spawn` returns after the process has started and the connection-scoped `processHandle` has been registered. Process output and exit are reported via `process/outputDelta` and `process/exited` notifications.", - "properties": { - "command": { - "description": "Command argv vector. Empty arrays are rejected.", - "items": { - "type": "string" - }, - "type": "array" - }, - "cwd": { - "allOf": [ - { - "$ref": "#/definitions/v2/AbsolutePathBuf" - } - ], - "description": "Absolute working directory for the process." - }, - "env": { - "additionalProperties": { - "type": [ - "string", - "null" - ] - }, - "description": "Optional environment overrides merged into the app-server process environment.\n\nMatching names override inherited values. Set a key to `null` to unset an inherited variable.", - "type": [ - "object", - "null" - ] - }, - "outputBytesCap": { - "description": "Optional per-stream stdout/stderr capture cap in bytes.\n\nWhen omitted, the server default applies. Set to `null` to disable the cap.", - "format": "uint", - "minimum": 0.0, - "type": [ - "integer", - "null" - ] - }, - "processHandle": { - "description": "Client-supplied, connection-scoped process handle.\n\nDuplicate active handles are rejected on the same connection. The same handle can be reused after the prior process exits.", - "type": "string" - }, - "size": { - "anyOf": [ - { - "$ref": "#/definitions/v2/ProcessTerminalSize" - }, - { - "type": "null" - } - ], - "description": "Optional initial PTY size in character cells. Only valid when `tty` is true." - }, - "streamStdin": { - "description": "Allow follow-up `process/writeStdin` requests to write stdin bytes.", - "type": "boolean" - }, - "streamStdoutStderr": { - "description": "Stream stdout/stderr via `process/outputDelta` notifications.\n\nStreamed bytes are not duplicated into the `process/exited` notification.", - "type": "boolean" - }, - "timeoutMs": { - "description": "Optional timeout in milliseconds.\n\nWhen omitted, the server default applies. Set to `null` to disable the timeout.", - "format": "int64", - "type": [ - "integer", - "null" - ] - }, - "tty": { - "description": "Enable PTY mode.\n\nThis implies `streamStdin` and `streamStdoutStderr`.", - "type": "boolean" - } - }, - "required": [ - "command", - "cwd", - "processHandle" - ], - "title": "ProcessSpawnParams", - "type": "object" - }, - "ProcessSpawnResponse": { - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "Successful response for `process/spawn`.", - "title": "ProcessSpawnResponse", - "type": "object" - }, "ProcessTerminalSize": { "description": "PTY size in character cells for `process/spawn` PTY sessions.", "properties": { @@ -14180,38 +13163,6 @@ ], "type": "object" }, - "ProcessWriteStdinParams": { - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "Write stdin bytes to a running `process/spawn` session, close stdin, or both.", - "properties": { - "closeStdin": { - "description": "Close stdin after writing `deltaBase64`, if present.", - "type": "boolean" - }, - "deltaBase64": { - "description": "Optional base64-encoded stdin bytes to write.", - "type": [ - "string", - "null" - ] - }, - "processHandle": { - "description": "Client-supplied, connection-scoped `processHandle` from `process/spawn`.", - "type": "string" - } - }, - "required": [ - "processHandle" - ], - "title": "ProcessWriteStdinParams", - "type": "object" - }, - "ProcessWriteStdinResponse": { - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "Empty success response for `process/writeStdin`.", - "title": "ProcessWriteStdinResponse", - "type": "object" - }, "RateLimitReachedType": { "enum": [ "rate_limit_reached", @@ -14590,113 +13541,32 @@ "threadId": { "type": "string" }, - "turnId": { - "type": "string" - } - }, - "required": [ - "contentIndex", - "delta", - "itemId", - "threadId", - "turnId" - ], - "title": "ReasoningTextDeltaNotification", - "type": "object" - }, - "RemoteControlConnectionStatus": { - "enum": [ - "disabled", - "connecting", - "connected", - "errored" - ], - "type": "string" - }, - "RemoteControlDisableResponse": { - "$schema": "http://json-schema.org/draft-07/schema#", - "properties": { - "environmentId": { - "type": [ - "string", - "null" - ] - }, - "installationId": { - "type": "string" - }, - "serverName": { - "type": "string" - }, - "status": { - "$ref": "#/definitions/v2/RemoteControlConnectionStatus" - } - }, - "required": [ - "installationId", - "serverName", - "status" - ], - "title": "RemoteControlDisableResponse", - "type": "object" - }, - "RemoteControlEnableResponse": { - "$schema": "http://json-schema.org/draft-07/schema#", - "properties": { - "environmentId": { - "type": [ - "string", - "null" - ] - }, - "installationId": { - "type": "string" - }, - "serverName": { - "type": "string" - }, - "status": { - "$ref": "#/definitions/v2/RemoteControlConnectionStatus" - } - }, - "required": [ - "installationId", - "serverName", - "status" - ], - "title": "RemoteControlEnableResponse", - "type": "object" - }, - "RemoteControlStatusChangedNotification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "Current remote-control connection status and remote identity exposed to clients.", - "properties": { - "environmentId": { - "type": [ - "string", - "null" - ] - }, - "installationId": { - "type": "string" - }, - "serverName": { + "turnId": { "type": "string" - }, - "status": { - "$ref": "#/definitions/v2/RemoteControlConnectionStatus" } }, "required": [ - "installationId", - "serverName", - "status" + "contentIndex", + "delta", + "itemId", + "threadId", + "turnId" ], - "title": "RemoteControlStatusChangedNotification", + "title": "ReasoningTextDeltaNotification", "type": "object" }, - "RemoteControlStatusReadResponse": { + "RemoteControlConnectionStatus": { + "enum": [ + "disabled", + "connecting", + "connected", + "errored" + ], + "type": "string" + }, + "RemoteControlStatusChangedNotification": { "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Current remote-control connection status and remote identity exposed to clients.", "properties": { "environmentId": { "type": [ @@ -14719,7 +13589,7 @@ "serverName", "status" ], - "title": "RemoteControlStatusReadResponse", + "title": "RemoteControlStatusChangedNotification", "type": "object" }, "RequestId": { @@ -16611,24 +15481,6 @@ "title": "ThreadArchivedNotification", "type": "object" }, - "ThreadBackgroundTerminalsCleanParams": { - "$schema": "http://json-schema.org/draft-07/schema#", - "properties": { - "threadId": { - "type": "string" - } - }, - "required": [ - "threadId" - ], - "title": "ThreadBackgroundTerminalsCleanParams", - "type": "object" - }, - "ThreadBackgroundTerminalsCleanResponse": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "ThreadBackgroundTerminalsCleanResponse", - "type": "object" - }, "ThreadClosedNotification": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { @@ -16660,43 +15512,6 @@ "title": "ThreadCompactStartResponse", "type": "object" }, - "ThreadDecrementElicitationParams": { - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "Parameters for `thread/decrement_elicitation`.", - "properties": { - "threadId": { - "description": "Thread whose out-of-band elicitation counter should be decremented.", - "type": "string" - } - }, - "required": [ - "threadId" - ], - "title": "ThreadDecrementElicitationParams", - "type": "object" - }, - "ThreadDecrementElicitationResponse": { - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "Response for `thread/decrement_elicitation`.", - "properties": { - "count": { - "description": "Current out-of-band elicitation count after the decrement.", - "format": "uint64", - "minimum": 0.0, - "type": "integer" - }, - "paused": { - "description": "Whether timeout accounting remains paused after applying the decrement.", - "type": "boolean" - } - }, - "required": [ - "count", - "paused" - ], - "title": "ThreadDecrementElicitationResponse", - "type": "object" - }, "ThreadForkParams": { "$schema": "http://json-schema.org/draft-07/schema#", "description": "There are two ways to fork a thread: 1. By thread_id: load the thread from disk by thread_id and fork it into a new thread. 2. By path: load the thread from disk by path and fork it into a new thread.\n\nIf using a non-empty path, the thread_id param will be ignored. Empty string path values are treated as absent.\n\nPrefer using thread_id whenever possible.", @@ -16750,10 +15565,6 @@ "ephemeral": { "type": "boolean" }, - "excludeTurns": { - "description": "When true, return only thread metadata and live fork state without populating `thread.turns`. This is useful when the client plans to call `thread/turns/list` immediately after forking.", - "type": "boolean" - }, "model": { "description": "Configuration overrides for the forked thread, if any.", "type": [ @@ -16767,35 +15578,6 @@ "null" ] }, - "path": { - "default": null, - "description": "[UNSTABLE] Specify the rollout path to fork from. If specified, the thread_id param will be ignored.", - "type": [ - "string", - "null" - ] - }, - "permissions": { - "description": "Named profile id for the forked thread. Cannot be combined with `sandbox`.", - "type": [ - "string", - "null" - ] - }, - "persistExtendedHistory": { - "description": "Deprecated and ignored by app-server. Kept only so older clients can continue sending the field while rollout persistence always uses the limited history policy.", - "type": "boolean" - }, - "runtimeWorkspaceRoots": { - "description": "Replace the thread's runtime workspace roots. Relative paths are resolved against the effective cwd for the thread.", - "items": { - "type": "string" - }, - "type": [ - "array", - "null" - ] - }, "sandbox": { "anyOf": [ { @@ -16836,18 +15618,6 @@ "ThreadForkResponse": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { - "activePermissionProfile": { - "anyOf": [ - { - "$ref": "#/definitions/v2/ActivePermissionProfile" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Named or implicit built-in profile that produced the active permissions, when known." - }, "approvalPolicy": { "$ref": "#/definitions/v2/AskForApproval" }, @@ -16886,14 +15656,6 @@ } ] }, - "runtimeWorkspaceRoots": { - "default": [], - "description": "Thread-scoped runtime workspace roots used to materialize `:workspace_roots`.", - "items": { - "$ref": "#/definitions/v2/AbsolutePathBuf" - }, - "type": "array" - }, "sandbox": { "allOf": [ { @@ -17125,43 +15887,6 @@ "ThreadId": { "type": "string" }, - "ThreadIncrementElicitationParams": { - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "Parameters for `thread/increment_elicitation`.", - "properties": { - "threadId": { - "description": "Thread whose out-of-band elicitation counter should be incremented.", - "type": "string" - } - }, - "required": [ - "threadId" - ], - "title": "ThreadIncrementElicitationParams", - "type": "object" - }, - "ThreadIncrementElicitationResponse": { - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "Response for `thread/increment_elicitation`.", - "properties": { - "count": { - "description": "Current out-of-band elicitation count after the increment.", - "format": "uint64", - "minimum": 0.0, - "type": "integer" - }, - "paused": { - "description": "Whether timeout accounting is paused after applying the increment.", - "type": "boolean" - } - }, - "required": [ - "count", - "paused" - ], - "title": "ThreadIncrementElicitationResponse", - "type": "object" - }, "ThreadInjectItemsParams": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { @@ -18043,28 +16768,6 @@ ], "type": "string" }, - "ThreadMemoryModeSetParams": { - "$schema": "http://json-schema.org/draft-07/schema#", - "properties": { - "mode": { - "$ref": "#/definitions/v2/ThreadMemoryMode" - }, - "threadId": { - "type": "string" - } - }, - "required": [ - "mode", - "threadId" - ], - "title": "ThreadMemoryModeSetParams", - "type": "object" - }, - "ThreadMemoryModeSetResponse": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "ThreadMemoryModeSetResponse", - "type": "object" - }, "ThreadMetadataGitInfoUpdateParams": { "properties": { "branch": { @@ -18177,54 +16880,6 @@ "title": "ThreadReadResponse", "type": "object" }, - "ThreadRealtimeAppendAudioParams": { - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "EXPERIMENTAL - append audio input to thread realtime.", - "properties": { - "audio": { - "$ref": "#/definitions/v2/ThreadRealtimeAudioChunk" - }, - "threadId": { - "type": "string" - } - }, - "required": [ - "audio", - "threadId" - ], - "title": "ThreadRealtimeAppendAudioParams", - "type": "object" - }, - "ThreadRealtimeAppendAudioResponse": { - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "EXPERIMENTAL - response for appending realtime audio input.", - "title": "ThreadRealtimeAppendAudioResponse", - "type": "object" - }, - "ThreadRealtimeAppendTextParams": { - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "EXPERIMENTAL - append text input to thread realtime.", - "properties": { - "text": { - "type": "string" - }, - "threadId": { - "type": "string" - } - }, - "required": [ - "text", - "threadId" - ], - "title": "ThreadRealtimeAppendTextParams", - "type": "object" - }, - "ThreadRealtimeAppendTextResponse": { - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "EXPERIMENTAL - response for appending realtime text input.", - "title": "ThreadRealtimeAppendTextResponse", - "type": "object" - }, "ThreadRealtimeAudioChunk": { "description": "EXPERIMENTAL - thread realtime audio chunk.", "properties": { @@ -18317,26 +16972,6 @@ "title": "ThreadRealtimeItemAddedNotification", "type": "object" }, - "ThreadRealtimeListVoicesParams": { - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "EXPERIMENTAL - list voices supported by thread realtime.", - "title": "ThreadRealtimeListVoicesParams", - "type": "object" - }, - "ThreadRealtimeListVoicesResponse": { - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "EXPERIMENTAL - response for listing supported realtime voices.", - "properties": { - "voices": { - "$ref": "#/definitions/v2/RealtimeVoicesList" - } - }, - "required": [ - "voices" - ], - "title": "ThreadRealtimeListVoicesResponse", - "type": "object" - }, "ThreadRealtimeOutputAudioDeltaNotification": { "$schema": "http://json-schema.org/draft-07/schema#", "description": "EXPERIMENTAL - streamed output audio emitted by thread realtime.", @@ -18373,67 +17008,6 @@ "title": "ThreadRealtimeSdpNotification", "type": "object" }, - "ThreadRealtimeStartParams": { - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "EXPERIMENTAL - start a thread-scoped realtime session.", - "properties": { - "outputModality": { - "allOf": [ - { - "$ref": "#/definitions/v2/RealtimeOutputModality" - } - ], - "description": "Selects text or audio output for the realtime session. Transport and voice stay independent so clients can choose how they connect separately from what the model emits." - }, - "prompt": { - "type": [ - "string", - "null" - ] - }, - "realtimeSessionId": { - "type": [ - "string", - "null" - ] - }, - "threadId": { - "type": "string" - }, - "transport": { - "anyOf": [ - { - "$ref": "#/definitions/v2/ThreadRealtimeStartTransport" - }, - { - "type": "null" - } - ] - }, - "voice": { - "anyOf": [ - { - "$ref": "#/definitions/v2/RealtimeVoice" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "outputModality", - "threadId" - ], - "title": "ThreadRealtimeStartParams", - "type": "object" - }, - "ThreadRealtimeStartResponse": { - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "EXPERIMENTAL - response for starting thread realtime.", - "title": "ThreadRealtimeStartResponse", - "type": "object" - }, "ThreadRealtimeStartTransport": { "description": "EXPERIMENTAL - transport used by thread realtime.", "oneOf": [ @@ -18489,35 +17063,15 @@ "threadId": { "type": "string" }, - "version": { - "$ref": "#/definitions/v2/RealtimeConversationVersion" - } - }, - "required": [ - "threadId", - "version" - ], - "title": "ThreadRealtimeStartedNotification", - "type": "object" - }, - "ThreadRealtimeStopParams": { - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "EXPERIMENTAL - stop thread realtime.", - "properties": { - "threadId": { - "type": "string" + "version": { + "$ref": "#/definitions/v2/RealtimeConversationVersion" } }, "required": [ - "threadId" + "threadId", + "version" ], - "title": "ThreadRealtimeStopParams", - "type": "object" - }, - "ThreadRealtimeStopResponse": { - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "EXPERIMENTAL - response for stopping thread realtime.", - "title": "ThreadRealtimeStopResponse", + "title": "ThreadRealtimeStartedNotification", "type": "object" }, "ThreadRealtimeTranscriptDeltaNotification": { @@ -18616,20 +17170,6 @@ "null" ] }, - "excludeTurns": { - "description": "When true, return only thread metadata and live-resume state without populating `thread.turns`. This is useful when the client plans to call `thread/turns/list` immediately after resuming.", - "type": "boolean" - }, - "history": { - "description": "[UNSTABLE] FOR CODEX CLOUD - DO NOT USE. If specified, the thread will be resumed with the provided history instead of loaded from disk.", - "items": { - "$ref": "#/definitions/v2/ResponseItem" - }, - "type": [ - "array", - "null" - ] - }, "model": { "description": "Configuration overrides for the resumed thread, if any.", "type": [ @@ -18643,25 +17183,6 @@ "null" ] }, - "path": { - "default": null, - "description": "[UNSTABLE] Specify the rollout path to resume from. If specified for a non-running thread, the thread_id param will be ignored. If thread_id identifies a running thread, the path must match the active rollout path.", - "type": [ - "string", - "null" - ] - }, - "permissions": { - "description": "Named profile id for the resumed thread. Cannot be combined with `sandbox`.", - "type": [ - "string", - "null" - ] - }, - "persistExtendedHistory": { - "description": "Deprecated and ignored by app-server. Kept only so older clients can continue sending the field while rollout persistence always uses the limited history policy.", - "type": "boolean" - }, "personality": { "anyOf": [ { @@ -18672,16 +17193,6 @@ } ] }, - "runtimeWorkspaceRoots": { - "description": "Replace the thread's runtime workspace roots. Relative paths are resolved against the effective cwd for the thread.", - "items": { - "type": "string" - }, - "type": [ - "array", - "null" - ] - }, "sandbox": { "anyOf": [ { @@ -18711,18 +17222,6 @@ "ThreadResumeResponse": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { - "activePermissionProfile": { - "anyOf": [ - { - "$ref": "#/definitions/v2/ActivePermissionProfile" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Named or implicit built-in profile that produced the active permissions, when known." - }, "approvalPolicy": { "$ref": "#/definitions/v2/AskForApproval" }, @@ -18761,14 +17260,6 @@ } ] }, - "runtimeWorkspaceRoots": { - "default": [], - "description": "Thread-scoped runtime workspace roots used to materialize `:workspace_roots`.", - "items": { - "$ref": "#/definitions/v2/AbsolutePathBuf" - }, - "type": "array" - }, "sandbox": { "allOf": [ { @@ -18837,105 +17328,6 @@ "title": "ThreadRollbackResponse", "type": "object" }, - "ThreadSearchParams": { - "$schema": "http://json-schema.org/draft-07/schema#", - "properties": { - "archived": { - "description": "Optional archived filter; when set to true, only archived threads are returned. If false or null, only non-archived threads are returned.", - "type": [ - "boolean", - "null" - ] - }, - "cursor": { - "description": "Opaque pagination cursor returned by a previous call.", - "type": [ - "string", - "null" - ] - }, - "limit": { - "description": "Optional page size; defaults to a reasonable server-side value.", - "format": "uint32", - "minimum": 0.0, - "type": [ - "integer", - "null" - ] - }, - "searchTerm": { - "description": "Required substring/full-text query for thread search.", - "type": "string" - }, - "sortDirection": { - "anyOf": [ - { - "$ref": "#/definitions/v2/SortDirection" - }, - { - "type": "null" - } - ], - "description": "Optional sort direction; defaults to descending (newest first)." - }, - "sortKey": { - "anyOf": [ - { - "$ref": "#/definitions/v2/ThreadSortKey" - }, - { - "type": "null" - } - ], - "description": "Optional sort key; defaults to created_at." - }, - "sourceKinds": { - "description": "Optional source filter; when set, only sessions from these source kinds are returned. When omitted or empty, defaults to interactive sources.", - "items": { - "$ref": "#/definitions/v2/ThreadSourceKind" - }, - "type": [ - "array", - "null" - ] - } - }, - "required": [ - "searchTerm" - ], - "title": "ThreadSearchParams", - "type": "object" - }, - "ThreadSearchResponse": { - "$schema": "http://json-schema.org/draft-07/schema#", - "properties": { - "backwardsCursor": { - "description": "Opaque cursor to pass as `cursor` when reversing `sortDirection`. This is only populated when the page contains at least one thread. Use it with the opposite `sortDirection`; for timestamp sorts it anchors at the start of the page timestamp so same-second updates are not skipped.", - "type": [ - "string", - "null" - ] - }, - "data": { - "items": { - "$ref": "#/definitions/v2/ThreadSearchResult" - }, - "type": "array" - }, - "nextCursor": { - "description": "Opaque cursor to pass to the next call to continue after the last item. if None, there are no more items to return.", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "data" - ], - "title": "ThreadSearchResponse", - "type": "object" - }, "ThreadSearchResult": { "properties": { "snippet": { @@ -19047,134 +17439,11 @@ "approvalPolicy", "approvalsReviewer", "collaborationMode", - "cwd", - "model", - "modelProvider", - "sandboxPolicy" - ], - "type": "object" - }, - "ThreadSettingsUpdateParams": { - "$schema": "http://json-schema.org/draft-07/schema#", - "properties": { - "approvalPolicy": { - "anyOf": [ - { - "$ref": "#/definitions/v2/AskForApproval" - }, - { - "type": "null" - } - ], - "description": "Override the approval policy for subsequent turns." - }, - "approvalsReviewer": { - "anyOf": [ - { - "$ref": "#/definitions/v2/ApprovalsReviewer" - }, - { - "type": "null" - } - ], - "description": "Override where approval requests are routed for subsequent turns." - }, - "collaborationMode": { - "anyOf": [ - { - "$ref": "#/definitions/v2/CollaborationMode" - }, - { - "type": "null" - } - ], - "description": "EXPERIMENTAL - Set a pre-set collaboration mode for subsequent turns.\n\nFor `collaboration_mode.settings.developer_instructions`, `null` means \"use the built-in instructions for the selected mode\"." - }, - "cwd": { - "description": "Override the working directory for subsequent turns.", - "type": [ - "string", - "null" - ] - }, - "effort": { - "anyOf": [ - { - "$ref": "#/definitions/v2/ReasoningEffort" - }, - { - "type": "null" - } - ], - "description": "Override the reasoning effort for subsequent turns." - }, - "model": { - "description": "Override the model for subsequent turns.", - "type": [ - "string", - "null" - ] - }, - "permissions": { - "description": "Select a named permissions profile id for subsequent turns. Cannot be combined with `sandboxPolicy`.", - "type": [ - "string", - "null" - ] - }, - "personality": { - "anyOf": [ - { - "$ref": "#/definitions/v2/Personality" - }, - { - "type": "null" - } - ], - "description": "Override the personality for subsequent turns." - }, - "sandboxPolicy": { - "anyOf": [ - { - "$ref": "#/definitions/v2/SandboxPolicy" - }, - { - "type": "null" - } - ], - "description": "Override the sandbox policy for subsequent turns." - }, - "serviceTier": { - "description": "Override the service tier for subsequent turns. `null` clears the current service tier; omission leaves it unchanged.", - "type": [ - "string", - "null" - ] - }, - "summary": { - "anyOf": [ - { - "$ref": "#/definitions/v2/ReasoningSummary" - }, - { - "type": "null" - } - ], - "description": "Override the reasoning summary for subsequent turns." - }, - "threadId": { - "type": "string" - } - }, - "required": [ - "threadId" + "cwd", + "model", + "modelProvider", + "sandboxPolicy" ], - "title": "ThreadSettingsUpdateParams", - "type": "object" - }, - "ThreadSettingsUpdateResponse": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "ThreadSettingsUpdateResponse", "type": "object" }, "ThreadSettingsUpdatedNotification": { @@ -19296,42 +17565,12 @@ "null" ] }, - "dynamicTools": { - "items": { - "$ref": "#/definitions/v2/DynamicToolSpec" - }, - "type": [ - "array", - "null" - ] - }, - "environments": { - "description": "Optional sticky environments for this thread.\n\nOmitted selects the default environment when environment access is enabled. Empty disables environment access for turns that do not provide a turn override. Non-empty selects the first environment as the current turn environment.", - "items": { - "$ref": "#/definitions/v2/TurnEnvironmentParams" - }, - "type": [ - "array", - "null" - ] - }, "ephemeral": { "type": [ "boolean", "null" ] }, - "experimentalRawEvents": { - "description": "If true, opt into emitting raw Responses API items on the event stream. This is for internal use only (e.g. Codex Cloud).", - "type": "boolean" - }, - "mockExperimentalField": { - "description": "Test-only experimental field used to validate experimental gating and schema filtering behavior in a stable way.", - "type": [ - "string", - "null" - ] - }, "model": { "type": [ "string", @@ -19344,17 +17583,6 @@ "null" ] }, - "permissions": { - "description": "Named profile id for this thread. Cannot be combined with `sandbox`.", - "type": [ - "string", - "null" - ] - }, - "persistExtendedHistory": { - "description": "Deprecated and ignored by app-server. Kept only so older clients can continue sending the field while rollout persistence always uses the limited history policy.", - "type": "boolean" - }, "personality": { "anyOf": [ { @@ -19365,16 +17593,6 @@ } ] }, - "runtimeWorkspaceRoots": { - "description": "Replace the thread's runtime workspace roots. Relative paths are resolved against the effective cwd for the thread.", - "items": { - "type": "string" - }, - "type": [ - "array", - "null" - ] - }, "sandbox": { "anyOf": [ { @@ -19425,18 +17643,6 @@ "ThreadStartResponse": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { - "activePermissionProfile": { - "anyOf": [ - { - "$ref": "#/definitions/v2/ActivePermissionProfile" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Named or implicit built-in profile that produced the active permissions, when known." - }, "approvalPolicy": { "$ref": "#/definitions/v2/AskForApproval" }, @@ -19475,14 +17681,6 @@ } ] }, - "runtimeWorkspaceRoots": { - "default": [], - "description": "Thread-scoped runtime workspace roots used to materialize `:workspace_roots`.", - "items": { - "$ref": "#/definitions/v2/AbsolutePathBuf" - }, - "type": "array" - }, "sandbox": { "allOf": [ { @@ -19668,161 +17866,6 @@ "title": "ThreadTokenUsageUpdatedNotification", "type": "object" }, - "ThreadTurnsItemsListParams": { - "$schema": "http://json-schema.org/draft-07/schema#", - "properties": { - "cursor": { - "description": "Opaque cursor to pass to the next call to continue after the last item.", - "type": [ - "string", - "null" - ] - }, - "limit": { - "description": "Optional item page size.", - "format": "uint32", - "minimum": 0.0, - "type": [ - "integer", - "null" - ] - }, - "sortDirection": { - "anyOf": [ - { - "$ref": "#/definitions/v2/SortDirection" - }, - { - "type": "null" - } - ], - "description": "Optional item pagination direction; defaults to ascending." - }, - "threadId": { - "type": "string" - }, - "turnId": { - "type": "string" - } - }, - "required": [ - "threadId", - "turnId" - ], - "title": "ThreadTurnsItemsListParams", - "type": "object" - }, - "ThreadTurnsItemsListResponse": { - "$schema": "http://json-schema.org/draft-07/schema#", - "properties": { - "backwardsCursor": { - "description": "Opaque cursor to pass as `cursor` when reversing `sortDirection`. This is only populated when the page contains at least one item.", - "type": [ - "string", - "null" - ] - }, - "data": { - "items": { - "$ref": "#/definitions/v2/ThreadItem" - }, - "type": "array" - }, - "nextCursor": { - "description": "Opaque cursor to pass to the next call to continue after the last item. if None, there are no more items to return.", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "data" - ], - "title": "ThreadTurnsItemsListResponse", - "type": "object" - }, - "ThreadTurnsListParams": { - "$schema": "http://json-schema.org/draft-07/schema#", - "properties": { - "cursor": { - "description": "Opaque cursor to pass to the next call to continue after the last turn.", - "type": [ - "string", - "null" - ] - }, - "itemsView": { - "anyOf": [ - { - "$ref": "#/definitions/v2/TurnItemsView" - }, - { - "type": "null" - } - ], - "description": "How much item detail to include for each returned turn; defaults to summary." - }, - "limit": { - "description": "Optional turn page size.", - "format": "uint32", - "minimum": 0.0, - "type": [ - "integer", - "null" - ] - }, - "sortDirection": { - "anyOf": [ - { - "$ref": "#/definitions/v2/SortDirection" - }, - { - "type": "null" - } - ], - "description": "Optional turn pagination direction; defaults to descending." - }, - "threadId": { - "type": "string" - } - }, - "required": [ - "threadId" - ], - "title": "ThreadTurnsListParams", - "type": "object" - }, - "ThreadTurnsListResponse": { - "$schema": "http://json-schema.org/draft-07/schema#", - "properties": { - "backwardsCursor": { - "description": "Opaque cursor to pass as `cursor` when reversing `sortDirection`. This is only populated when the page contains at least one turn. Use it with the opposite `sortDirection` to include the anchor turn again and catch updates to that turn.", - "type": [ - "string", - "null" - ] - }, - "data": { - "items": { - "$ref": "#/definitions/v2/Turn" - }, - "type": "array" - }, - "nextCursor": { - "description": "Opaque cursor to pass to the next call to continue after the last turn. if None, there are no more turns to return.", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "data" - ], - "title": "ThreadTurnsListResponse", - "type": "object" - }, "ThreadUnarchiveParams": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { @@ -20231,16 +18274,6 @@ "TurnStartParams": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { - "additionalContext": { - "additionalProperties": { - "$ref": "#/definitions/v2/AdditionalContextEntry" - }, - "description": "Optional client-provided context fragments keyed by an opaque source identifier.", - "type": [ - "object", - "null" - ] - }, "approvalPolicy": { "anyOf": [ { @@ -20263,17 +18296,6 @@ ], "description": "Override where approval requests are routed for review on this turn and subsequent turns." }, - "collaborationMode": { - "anyOf": [ - { - "$ref": "#/definitions/v2/CollaborationMode" - }, - { - "type": "null" - } - ], - "description": "EXPERIMENTAL - Set a pre-set collaboration mode. Takes precedence over model, reasoning_effort, and developer instructions if set.\n\nFor `collaboration_mode.settings.developer_instructions`, `null` means \"use the built-in instructions for the selected mode\"." - }, "cwd": { "description": "Override the working directory for this turn and subsequent turns.", "type": [ @@ -20292,16 +18314,6 @@ ], "description": "Override the reasoning effort for this turn and subsequent turns." }, - "environments": { - "description": "Optional turn-scoped environments.\n\nOmitted uses the thread sticky environments. Empty disables environment access for this turn. Non-empty selects the first environment as the current turn environment for this turn.", - "items": { - "$ref": "#/definitions/v2/TurnEnvironmentParams" - }, - "type": [ - "array", - "null" - ] - }, "input": { "items": { "$ref": "#/definitions/v2/UserInput" @@ -20318,13 +18330,6 @@ "outputSchema": { "description": "Optional JSON Schema used to constrain the final assistant message for this turn." }, - "permissions": { - "description": "Select a named permissions profile id for this turn and subsequent turns. Cannot be combined with `sandboxPolicy`.", - "type": [ - "string", - "null" - ] - }, "personality": { "anyOf": [ { @@ -20336,26 +18341,6 @@ ], "description": "Override the personality for this turn and subsequent turns." }, - "responsesapiClientMetadata": { - "additionalProperties": { - "type": "string" - }, - "description": "Optional turn-scoped Responses API client metadata.", - "type": [ - "object", - "null" - ] - }, - "runtimeWorkspaceRoots": { - "description": "Replace the thread's runtime workspace roots for this turn and subsequent turns. Relative paths are resolved against the effective cwd for the turn.", - "items": { - "type": "string" - }, - "type": [ - "array", - "null" - ] - }, "sandboxPolicy": { "anyOf": [ { @@ -20438,16 +18423,6 @@ "TurnSteerParams": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { - "additionalContext": { - "additionalProperties": { - "$ref": "#/definitions/v2/AdditionalContextEntry" - }, - "description": "Optional client-provided context fragments keyed by an opaque source identifier.", - "type": [ - "object", - "null" - ] - }, "expectedTurnId": { "description": "Required active turn id precondition. The request fails when it does not match the currently active turn.", "type": "string" @@ -20458,16 +18433,6 @@ }, "type": "array" }, - "responsesapiClientMetadata": { - "additionalProperties": { - "type": "string" - }, - "description": "Optional turn-scoped Responses API client metadata.", - "type": [ - "object", - "null" - ] - }, "threadId": { "type": "string" } diff --git a/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.v2.schemas.json b/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.v2.schemas.json index acd0e57a1c4..ac565328f9d 100644 --- a/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.v2.schemas.json +++ b/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.v2.schemas.json @@ -164,17 +164,6 @@ ], "type": "string" }, - "AdditionalContextEntry": { - "properties": { - "value": { - "type": "string" - } - }, - "required": [ - "value" - ], - "type": "object" - }, "AdditionalFileSystemPermissions": { "properties": { "entries": { @@ -1085,56 +1074,6 @@ "title": "Thread/unsubscribeRequest", "type": "object" }, - { - "description": "Increment the thread-local out-of-band elicitation counter.\n\nThis is used by external helpers to pause timeout accounting while a user approval or other elicitation is pending outside the app-server request flow.", - "properties": { - "id": { - "$ref": "#/definitions/RequestId" - }, - "method": { - "enum": [ - "thread/increment_elicitation" - ], - "title": "Thread/incrementElicitationRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/ThreadIncrementElicitationParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "Thread/incrementElicitationRequest", - "type": "object" - }, - { - "description": "Decrement the thread-local out-of-band elicitation counter.\n\nWhen the count reaches zero, timeout accounting resumes for the thread.", - "properties": { - "id": { - "$ref": "#/definitions/RequestId" - }, - "method": { - "enum": [ - "thread/decrement_elicitation" - ], - "title": "Thread/decrementElicitationRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/ThreadDecrementElicitationParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "Thread/decrementElicitationRequest", - "type": "object" - }, { "properties": { "id": { @@ -1255,77 +1194,6 @@ "title": "Thread/metadata/updateRequest", "type": "object" }, - { - "properties": { - "id": { - "$ref": "#/definitions/RequestId" - }, - "method": { - "enum": [ - "thread/settings/update" - ], - "title": "Thread/settings/updateRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/ThreadSettingsUpdateParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "Thread/settings/updateRequest", - "type": "object" - }, - { - "properties": { - "id": { - "$ref": "#/definitions/RequestId" - }, - "method": { - "enum": [ - "thread/memoryMode/set" - ], - "title": "Thread/memoryMode/setRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/ThreadMemoryModeSetParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "Thread/memoryMode/setRequest", - "type": "object" - }, - { - "properties": { - "id": { - "$ref": "#/definitions/RequestId" - }, - "method": { - "enum": [ - "memory/reset" - ], - "title": "Memory/resetRequestMethod", - "type": "string" - }, - "params": { - "type": "null" - } - }, - "required": [ - "id", - "method" - ], - "title": "Memory/resetRequest", - "type": "object" - }, { "properties": { "id": { @@ -1422,30 +1290,6 @@ "title": "Thread/approveGuardianDeniedActionRequest", "type": "object" }, - { - "properties": { - "id": { - "$ref": "#/definitions/RequestId" - }, - "method": { - "enum": [ - "thread/backgroundTerminals/clean" - ], - "title": "Thread/backgroundTerminals/cleanRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/ThreadBackgroundTerminalsCleanParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "Thread/backgroundTerminals/cleanRequest", - "type": "object" - }, { "properties": { "id": { @@ -1494,30 +1338,6 @@ "title": "Thread/listRequest", "type": "object" }, - { - "properties": { - "id": { - "$ref": "#/definitions/RequestId" - }, - "method": { - "enum": [ - "thread/search" - ], - "title": "Thread/searchRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/ThreadSearchParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "Thread/searchRequest", - "type": "object" - }, { "properties": { "id": { @@ -1566,54 +1386,6 @@ "title": "Thread/readRequest", "type": "object" }, - { - "properties": { - "id": { - "$ref": "#/definitions/RequestId" - }, - "method": { - "enum": [ - "thread/turns/list" - ], - "title": "Thread/turns/listRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/ThreadTurnsListParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "Thread/turns/listRequest", - "type": "object" - }, - { - "properties": { - "id": { - "$ref": "#/definitions/RequestId" - }, - "method": { - "enum": [ - "thread/turns/items/list" - ], - "title": "Thread/turns/items/listRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/ThreadTurnsItemsListParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "Thread/turns/items/listRequest", - "type": "object" - }, { "description": "Append raw Responses API items to the thread history without starting a user turn.", "properties": { @@ -2366,13 +2138,13 @@ }, "method": { "enum": [ - "thread/realtime/start" + "review/start" ], - "title": "Thread/realtime/startRequestMethod", + "title": "Review/startRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/ThreadRealtimeStartParams" + "$ref": "#/definitions/ReviewStartParams" } }, "required": [ @@ -2380,7 +2152,7 @@ "method", "params" ], - "title": "Thread/realtime/startRequest", + "title": "Review/startRequest", "type": "object" }, { @@ -2390,13 +2162,13 @@ }, "method": { "enum": [ - "thread/realtime/appendAudio" + "model/list" ], - "title": "Thread/realtime/appendAudioRequestMethod", + "title": "Model/listRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/ThreadRealtimeAppendAudioParams" + "$ref": "#/definitions/ModelListParams" } }, "required": [ @@ -2404,7 +2176,7 @@ "method", "params" ], - "title": "Thread/realtime/appendAudioRequest", + "title": "Model/listRequest", "type": "object" }, { @@ -2414,13 +2186,13 @@ }, "method": { "enum": [ - "thread/realtime/appendText" + "modelProvider/capabilities/read" ], - "title": "Thread/realtime/appendTextRequestMethod", + "title": "ModelProvider/capabilities/readRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/ThreadRealtimeAppendTextParams" + "$ref": "#/definitions/ModelProviderCapabilitiesReadParams" } }, "required": [ @@ -2428,7 +2200,7 @@ "method", "params" ], - "title": "Thread/realtime/appendTextRequest", + "title": "ModelProvider/capabilities/readRequest", "type": "object" }, { @@ -2438,13 +2210,13 @@ }, "method": { "enum": [ - "thread/realtime/stop" + "experimentalFeature/list" ], - "title": "Thread/realtime/stopRequestMethod", + "title": "ExperimentalFeature/listRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/ThreadRealtimeStopParams" + "$ref": "#/definitions/ExperimentalFeatureListParams" } }, "required": [ @@ -2452,7 +2224,7 @@ "method", "params" ], - "title": "Thread/realtime/stopRequest", + "title": "ExperimentalFeature/listRequest", "type": "object" }, { @@ -2462,13 +2234,13 @@ }, "method": { "enum": [ - "thread/realtime/listVoices" + "permissionProfile/list" ], - "title": "Thread/realtime/listVoicesRequestMethod", + "title": "PermissionProfile/listRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/ThreadRealtimeListVoicesParams" + "$ref": "#/definitions/PermissionProfileListParams" } }, "required": [ @@ -2476,7 +2248,7 @@ "method", "params" ], - "title": "Thread/realtime/listVoicesRequest", + "title": "PermissionProfile/listRequest", "type": "object" }, { @@ -2486,13 +2258,13 @@ }, "method": { "enum": [ - "review/start" + "experimentalFeature/enablement/set" ], - "title": "Review/startRequestMethod", + "title": "ExperimentalFeature/enablement/setRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/ReviewStartParams" + "$ref": "#/definitions/ExperimentalFeatureEnablementSetParams" } }, "required": [ @@ -2500,7 +2272,7 @@ "method", "params" ], - "title": "Review/startRequest", + "title": "ExperimentalFeature/enablement/setRequest", "type": "object" }, { @@ -2510,13 +2282,13 @@ }, "method": { "enum": [ - "model/list" + "mcpServer/oauth/login" ], - "title": "Model/listRequestMethod", + "title": "McpServer/oauth/loginRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/ModelListParams" + "$ref": "#/definitions/McpServerOauthLoginParams" } }, "required": [ @@ -2524,7 +2296,7 @@ "method", "params" ], - "title": "Model/listRequest", + "title": "McpServer/oauth/loginRequest", "type": "object" }, { @@ -2534,21 +2306,20 @@ }, "method": { "enum": [ - "modelProvider/capabilities/read" + "config/mcpServer/reload" ], - "title": "ModelProvider/capabilities/readRequestMethod", + "title": "Config/mcpServer/reloadRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/ModelProviderCapabilitiesReadParams" + "type": "null" } }, "required": [ "id", - "method", - "params" + "method" ], - "title": "ModelProvider/capabilities/readRequest", + "title": "Config/mcpServer/reloadRequest", "type": "object" }, { @@ -2558,13 +2329,13 @@ }, "method": { "enum": [ - "experimentalFeature/list" + "mcpServerStatus/list" ], - "title": "ExperimentalFeature/listRequestMethod", + "title": "McpServerStatus/listRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/ExperimentalFeatureListParams" + "$ref": "#/definitions/ListMcpServerStatusParams" } }, "required": [ @@ -2572,7 +2343,7 @@ "method", "params" ], - "title": "ExperimentalFeature/listRequest", + "title": "McpServerStatus/listRequest", "type": "object" }, { @@ -2582,13 +2353,13 @@ }, "method": { "enum": [ - "permissionProfile/list" + "mcpServer/resource/read" ], - "title": "PermissionProfile/listRequestMethod", + "title": "McpServer/resource/readRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/PermissionProfileListParams" + "$ref": "#/definitions/McpResourceReadParams" } }, "required": [ @@ -2596,7 +2367,7 @@ "method", "params" ], - "title": "PermissionProfile/listRequest", + "title": "McpServer/resource/readRequest", "type": "object" }, { @@ -2606,13 +2377,13 @@ }, "method": { "enum": [ - "experimentalFeature/enablement/set" + "mcpServer/tool/call" ], - "title": "ExperimentalFeature/enablement/setRequestMethod", + "title": "McpServer/tool/callRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/ExperimentalFeatureEnablementSetParams" + "$ref": "#/definitions/McpServerToolCallParams" } }, "required": [ @@ -2620,7 +2391,7 @@ "method", "params" ], - "title": "ExperimentalFeature/enablement/setRequest", + "title": "McpServer/tool/callRequest", "type": "object" }, { @@ -2630,20 +2401,21 @@ }, "method": { "enum": [ - "remoteControl/enable" + "windowsSandbox/setupStart" ], - "title": "RemoteControl/enableRequestMethod", + "title": "WindowsSandbox/setupStartRequestMethod", "type": "string" }, "params": { - "type": "null" + "$ref": "#/definitions/WindowsSandboxSetupStartParams" } }, "required": [ "id", - "method" + "method", + "params" ], - "title": "RemoteControl/enableRequest", + "title": "WindowsSandbox/setupStartRequest", "type": "object" }, { @@ -2653,9 +2425,9 @@ }, "method": { "enum": [ - "remoteControl/disable" + "windowsSandbox/readiness" ], - "title": "RemoteControl/disableRequestMethod", + "title": "WindowsSandbox/readinessRequestMethod", "type": "string" }, "params": { @@ -2666,7 +2438,7 @@ "id", "method" ], - "title": "RemoteControl/disableRequest", + "title": "WindowsSandbox/readinessRequest", "type": "object" }, { @@ -2676,37 +2448,37 @@ }, "method": { "enum": [ - "remoteControl/status/read" + "account/login/start" ], - "title": "RemoteControl/status/readRequestMethod", + "title": "Account/login/startRequestMethod", "type": "string" }, "params": { - "type": "null" + "$ref": "#/definitions/LoginAccountParams" } }, "required": [ "id", - "method" + "method", + "params" ], - "title": "RemoteControl/status/readRequest", + "title": "Account/login/startRequest", "type": "object" }, { - "description": "Lists collaboration mode presets.", "properties": { "id": { "$ref": "#/definitions/RequestId" }, "method": { "enum": [ - "collaborationMode/list" + "account/login/cancel" ], - "title": "CollaborationMode/listRequestMethod", + "title": "Account/login/cancelRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/CollaborationModeListParams" + "$ref": "#/definitions/CancelLoginAccountParams" } }, "required": [ @@ -2714,57 +2486,53 @@ "method", "params" ], - "title": "CollaborationMode/listRequest", + "title": "Account/login/cancelRequest", "type": "object" }, { - "description": "Test-only method used to validate experimental gating.", "properties": { "id": { "$ref": "#/definitions/RequestId" }, "method": { "enum": [ - "mock/experimentalMethod" + "account/logout" ], - "title": "Mock/experimentalMethodRequestMethod", + "title": "Account/logoutRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/MockExperimentalMethodParams" + "type": "null" } }, "required": [ "id", - "method", - "params" + "method" ], - "title": "Mock/experimentalMethodRequest", + "title": "Account/logoutRequest", "type": "object" }, { - "description": "Adds or replaces a remote environment by id for later selection.", "properties": { "id": { "$ref": "#/definitions/RequestId" }, "method": { "enum": [ - "environment/add" + "account/rateLimits/read" ], - "title": "Environment/addRequestMethod", + "title": "Account/rateLimits/readRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/EnvironmentAddParams" + "type": "null" } }, "required": [ "id", - "method", - "params" + "method" ], - "title": "Environment/addRequest", + "title": "Account/rateLimits/readRequest", "type": "object" }, { @@ -2774,13 +2542,13 @@ }, "method": { "enum": [ - "mcpServer/oauth/login" + "account/sendAddCreditsNudgeEmail" ], - "title": "McpServer/oauth/loginRequestMethod", + "title": "Account/sendAddCreditsNudgeEmailRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/McpServerOauthLoginParams" + "$ref": "#/definitions/SendAddCreditsNudgeEmailParams" } }, "required": [ @@ -2788,7 +2556,7 @@ "method", "params" ], - "title": "McpServer/oauth/loginRequest", + "title": "Account/sendAddCreditsNudgeEmailRequest", "type": "object" }, { @@ -2798,36 +2566,38 @@ }, "method": { "enum": [ - "config/mcpServer/reload" + "feedback/upload" ], - "title": "Config/mcpServer/reloadRequestMethod", + "title": "Feedback/uploadRequestMethod", "type": "string" }, "params": { - "type": "null" + "$ref": "#/definitions/FeedbackUploadParams" } }, "required": [ "id", - "method" + "method", + "params" ], - "title": "Config/mcpServer/reloadRequest", + "title": "Feedback/uploadRequest", "type": "object" }, { + "description": "Execute a standalone command (argv vector) under the server's sandbox.", "properties": { "id": { "$ref": "#/definitions/RequestId" }, "method": { "enum": [ - "mcpServerStatus/list" + "command/exec" ], - "title": "McpServerStatus/listRequestMethod", + "title": "Command/execRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/ListMcpServerStatusParams" + "$ref": "#/definitions/CommandExecParams" } }, "required": [ @@ -2835,23 +2605,24 @@ "method", "params" ], - "title": "McpServerStatus/listRequest", + "title": "Command/execRequest", "type": "object" }, { + "description": "Write stdin bytes to a running `command/exec` session or close stdin.", "properties": { "id": { "$ref": "#/definitions/RequestId" }, "method": { "enum": [ - "mcpServer/resource/read" + "command/exec/write" ], - "title": "McpServer/resource/readRequestMethod", + "title": "Command/exec/writeRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/McpResourceReadParams" + "$ref": "#/definitions/CommandExecWriteParams" } }, "required": [ @@ -2859,23 +2630,24 @@ "method", "params" ], - "title": "McpServer/resource/readRequest", + "title": "Command/exec/writeRequest", "type": "object" }, { + "description": "Terminate a running `command/exec` session by client-supplied `processId`.", "properties": { "id": { "$ref": "#/definitions/RequestId" }, "method": { "enum": [ - "mcpServer/tool/call" + "command/exec/terminate" ], - "title": "McpServer/tool/callRequestMethod", + "title": "Command/exec/terminateRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/McpServerToolCallParams" + "$ref": "#/definitions/CommandExecTerminateParams" } }, "required": [ @@ -2883,23 +2655,24 @@ "method", "params" ], - "title": "McpServer/tool/callRequest", + "title": "Command/exec/terminateRequest", "type": "object" }, { + "description": "Resize a running PTY-backed `command/exec` session by client-supplied `processId`.", "properties": { "id": { "$ref": "#/definitions/RequestId" }, "method": { "enum": [ - "windowsSandbox/setupStart" + "command/exec/resize" ], - "title": "WindowsSandbox/setupStartRequestMethod", + "title": "Command/exec/resizeRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/WindowsSandboxSetupStartParams" + "$ref": "#/definitions/CommandExecResizeParams" } }, "required": [ @@ -2907,7 +2680,7 @@ "method", "params" ], - "title": "WindowsSandbox/setupStartRequest", + "title": "Command/exec/resizeRequest", "type": "object" }, { @@ -2917,20 +2690,21 @@ }, "method": { "enum": [ - "windowsSandbox/readiness" + "config/read" ], - "title": "WindowsSandbox/readinessRequestMethod", + "title": "Config/readRequestMethod", "type": "string" }, "params": { - "type": "null" + "$ref": "#/definitions/ConfigReadParams" } }, "required": [ "id", - "method" + "method", + "params" ], - "title": "WindowsSandbox/readinessRequest", + "title": "Config/readRequest", "type": "object" }, { @@ -2940,13 +2714,13 @@ }, "method": { "enum": [ - "account/login/start" + "externalAgentConfig/detect" ], - "title": "Account/login/startRequestMethod", + "title": "ExternalAgentConfig/detectRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/LoginAccountParams" + "$ref": "#/definitions/ExternalAgentConfigDetectParams" } }, "required": [ @@ -2954,7 +2728,7 @@ "method", "params" ], - "title": "Account/login/startRequest", + "title": "ExternalAgentConfig/detectRequest", "type": "object" }, { @@ -2964,13 +2738,13 @@ }, "method": { "enum": [ - "account/login/cancel" + "externalAgentConfig/import" ], - "title": "Account/login/cancelRequestMethod", + "title": "ExternalAgentConfig/importRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/CancelLoginAccountParams" + "$ref": "#/definitions/ExternalAgentConfigImportParams" } }, "required": [ @@ -2978,7 +2752,7 @@ "method", "params" ], - "title": "Account/login/cancelRequest", + "title": "ExternalAgentConfig/importRequest", "type": "object" }, { @@ -2988,20 +2762,21 @@ }, "method": { "enum": [ - "account/logout" + "config/value/write" ], - "title": "Account/logoutRequestMethod", + "title": "Config/value/writeRequestMethod", "type": "string" }, "params": { - "type": "null" + "$ref": "#/definitions/ConfigValueWriteParams" } }, "required": [ "id", - "method" + "method", + "params" ], - "title": "Account/logoutRequest", + "title": "Config/value/writeRequest", "type": "object" }, { @@ -3011,20 +2786,21 @@ }, "method": { "enum": [ - "account/rateLimits/read" + "config/batchWrite" ], - "title": "Account/rateLimits/readRequestMethod", + "title": "Config/batchWriteRequestMethod", "type": "string" }, "params": { - "type": "null" + "$ref": "#/definitions/ConfigBatchWriteParams" } }, "required": [ "id", - "method" + "method", + "params" ], - "title": "Account/rateLimits/readRequest", + "title": "Config/batchWriteRequest", "type": "object" }, { @@ -3034,21 +2810,20 @@ }, "method": { "enum": [ - "account/sendAddCreditsNudgeEmail" + "configRequirements/read" ], - "title": "Account/sendAddCreditsNudgeEmailRequestMethod", + "title": "ConfigRequirements/readRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/SendAddCreditsNudgeEmailParams" + "type": "null" } }, "required": [ "id", - "method", - "params" + "method" ], - "title": "Account/sendAddCreditsNudgeEmailRequest", + "title": "ConfigRequirements/readRequest", "type": "object" }, { @@ -3058,13 +2833,13 @@ }, "method": { "enum": [ - "feedback/upload" + "account/read" ], - "title": "Feedback/uploadRequestMethod", + "title": "Account/readRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/FeedbackUploadParams" + "$ref": "#/definitions/GetAccountParams" } }, "required": [ @@ -3072,24 +2847,23 @@ "method", "params" ], - "title": "Feedback/uploadRequest", + "title": "Account/readRequest", "type": "object" }, { - "description": "Execute a standalone command (argv vector) under the server's sandbox.", "properties": { "id": { "$ref": "#/definitions/RequestId" }, "method": { "enum": [ - "command/exec" + "fuzzyFileSearch" ], - "title": "Command/execRequestMethod", + "title": "FuzzyFileSearchRequestMethod", "type": "string" }, "params": { - "$ref": "#/definitions/CommandExecParams" + "$ref": "#/definitions/FuzzyFileSearchParams" } }, "required": [ @@ -3097,507 +2871,69 @@ "method", "params" ], - "title": "Command/execRequest", + "title": "FuzzyFileSearchRequest", "type": "object" + } + ], + "title": "ClientRequest" + }, + "CodexErrorInfo": { + "description": "This translation layer make sure that we expose codex error code in camel case.\n\nWhen an upstream HTTP status is available (for example, from the Responses API or a provider), it is forwarded in `httpStatusCode` on the relevant `codexErrorInfo` variant.", + "oneOf": [ + { + "enum": [ + "contextWindowExceeded", + "usageLimitExceeded", + "serverOverloaded", + "cyberPolicy", + "internalServerError", + "unauthorized", + "badRequest", + "threadRollbackFailed", + "sandboxError", + "other" + ], + "type": "string" }, { - "description": "Write stdin bytes to a running `command/exec` session or close stdin.", + "additionalProperties": false, "properties": { - "id": { - "$ref": "#/definitions/RequestId" - }, - "method": { - "enum": [ - "command/exec/write" - ], - "title": "Command/exec/writeRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/CommandExecWriteParams" + "httpConnectionFailed": { + "properties": { + "httpStatusCode": { + "format": "uint16", + "minimum": 0.0, + "type": [ + "integer", + "null" + ] + } + }, + "type": "object" } }, "required": [ - "id", - "method", - "params" + "httpConnectionFailed" ], - "title": "Command/exec/writeRequest", + "title": "HttpConnectionFailedCodexErrorInfo", "type": "object" }, { - "description": "Terminate a running `command/exec` session by client-supplied `processId`.", + "additionalProperties": false, + "description": "Failed to connect to the response SSE stream.", "properties": { - "id": { - "$ref": "#/definitions/RequestId" - }, - "method": { - "enum": [ - "command/exec/terminate" - ], - "title": "Command/exec/terminateRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/CommandExecTerminateParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "Command/exec/terminateRequest", - "type": "object" - }, - { - "description": "Resize a running PTY-backed `command/exec` session by client-supplied `processId`.", - "properties": { - "id": { - "$ref": "#/definitions/RequestId" - }, - "method": { - "enum": [ - "command/exec/resize" - ], - "title": "Command/exec/resizeRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/CommandExecResizeParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "Command/exec/resizeRequest", - "type": "object" - }, - { - "description": "Spawn a standalone process (argv vector) without a Codex sandbox.", - "properties": { - "id": { - "$ref": "#/definitions/RequestId" - }, - "method": { - "enum": [ - "process/spawn" - ], - "title": "Process/spawnRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/ProcessSpawnParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "Process/spawnRequest", - "type": "object" - }, - { - "description": "Write stdin bytes to a running `process/spawn` session or close stdin.", - "properties": { - "id": { - "$ref": "#/definitions/RequestId" - }, - "method": { - "enum": [ - "process/writeStdin" - ], - "title": "Process/writeStdinRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/ProcessWriteStdinParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "Process/writeStdinRequest", - "type": "object" - }, - { - "description": "Terminate a running `process/spawn` session by client-supplied `processHandle`.", - "properties": { - "id": { - "$ref": "#/definitions/RequestId" - }, - "method": { - "enum": [ - "process/kill" - ], - "title": "Process/killRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/ProcessKillParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "Process/killRequest", - "type": "object" - }, - { - "description": "Resize a running PTY-backed `process/spawn` session by client-supplied `processHandle`.", - "properties": { - "id": { - "$ref": "#/definitions/RequestId" - }, - "method": { - "enum": [ - "process/resizePty" - ], - "title": "Process/resizePtyRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/ProcessResizePtyParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "Process/resizePtyRequest", - "type": "object" - }, - { - "properties": { - "id": { - "$ref": "#/definitions/RequestId" - }, - "method": { - "enum": [ - "config/read" - ], - "title": "Config/readRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/ConfigReadParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "Config/readRequest", - "type": "object" - }, - { - "properties": { - "id": { - "$ref": "#/definitions/RequestId" - }, - "method": { - "enum": [ - "externalAgentConfig/detect" - ], - "title": "ExternalAgentConfig/detectRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/ExternalAgentConfigDetectParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "ExternalAgentConfig/detectRequest", - "type": "object" - }, - { - "properties": { - "id": { - "$ref": "#/definitions/RequestId" - }, - "method": { - "enum": [ - "externalAgentConfig/import" - ], - "title": "ExternalAgentConfig/importRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/ExternalAgentConfigImportParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "ExternalAgentConfig/importRequest", - "type": "object" - }, - { - "properties": { - "id": { - "$ref": "#/definitions/RequestId" - }, - "method": { - "enum": [ - "config/value/write" - ], - "title": "Config/value/writeRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/ConfigValueWriteParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "Config/value/writeRequest", - "type": "object" - }, - { - "properties": { - "id": { - "$ref": "#/definitions/RequestId" - }, - "method": { - "enum": [ - "config/batchWrite" - ], - "title": "Config/batchWriteRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/ConfigBatchWriteParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "Config/batchWriteRequest", - "type": "object" - }, - { - "properties": { - "id": { - "$ref": "#/definitions/RequestId" - }, - "method": { - "enum": [ - "configRequirements/read" - ], - "title": "ConfigRequirements/readRequestMethod", - "type": "string" - }, - "params": { - "type": "null" - } - }, - "required": [ - "id", - "method" - ], - "title": "ConfigRequirements/readRequest", - "type": "object" - }, - { - "properties": { - "id": { - "$ref": "#/definitions/RequestId" - }, - "method": { - "enum": [ - "account/read" - ], - "title": "Account/readRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/GetAccountParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "Account/readRequest", - "type": "object" - }, - { - "properties": { - "id": { - "$ref": "#/definitions/RequestId" - }, - "method": { - "enum": [ - "fuzzyFileSearch" - ], - "title": "FuzzyFileSearchRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/FuzzyFileSearchParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "FuzzyFileSearchRequest", - "type": "object" - }, - { - "properties": { - "id": { - "$ref": "#/definitions/RequestId" - }, - "method": { - "enum": [ - "fuzzyFileSearch/sessionStart" - ], - "title": "FuzzyFileSearch/sessionStartRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/FuzzyFileSearchSessionStartParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "FuzzyFileSearch/sessionStartRequest", - "type": "object" - }, - { - "properties": { - "id": { - "$ref": "#/definitions/RequestId" - }, - "method": { - "enum": [ - "fuzzyFileSearch/sessionUpdate" - ], - "title": "FuzzyFileSearch/sessionUpdateRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/FuzzyFileSearchSessionUpdateParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "FuzzyFileSearch/sessionUpdateRequest", - "type": "object" - }, - { - "properties": { - "id": { - "$ref": "#/definitions/RequestId" - }, - "method": { - "enum": [ - "fuzzyFileSearch/sessionStop" - ], - "title": "FuzzyFileSearch/sessionStopRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/FuzzyFileSearchSessionStopParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "FuzzyFileSearch/sessionStopRequest", - "type": "object" - } - ], - "title": "ClientRequest" - }, - "CodexErrorInfo": { - "description": "This translation layer make sure that we expose codex error code in camel case.\n\nWhen an upstream HTTP status is available (for example, from the Responses API or a provider), it is forwarded in `httpStatusCode` on the relevant `codexErrorInfo` variant.", - "oneOf": [ - { - "enum": [ - "contextWindowExceeded", - "usageLimitExceeded", - "serverOverloaded", - "cyberPolicy", - "internalServerError", - "unauthorized", - "badRequest", - "threadRollbackFailed", - "sandboxError", - "other" - ], - "type": "string" - }, - { - "additionalProperties": false, - "properties": { - "httpConnectionFailed": { - "properties": { - "httpStatusCode": { - "format": "uint16", - "minimum": 0.0, - "type": [ - "integer", - "null" - ] - } - }, - "type": "object" - } - }, - "required": [ - "httpConnectionFailed" - ], - "title": "HttpConnectionFailedCodexErrorInfo", - "type": "object" - }, - { - "additionalProperties": false, - "description": "Failed to connect to the response SSE stream.", - "properties": { - "responseStreamConnectionFailed": { - "properties": { - "httpStatusCode": { - "format": "uint16", - "minimum": 0.0, - "type": [ - "integer", - "null" - ] - } - }, - "type": "object" + "responseStreamConnectionFailed": { + "properties": { + "httpStatusCode": { + "format": "uint16", + "minimum": 0.0, + "type": [ + "integer", + "null" + ] + } + }, + "type": "object" } }, "required": [ @@ -3741,29 +3077,6 @@ ], "type": "object" }, - "CollaborationModeListParams": { - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "EXPERIMENTAL - list collaboration mode presets.", - "title": "CollaborationModeListParams", - "type": "object" - }, - "CollaborationModeListResponse": { - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "EXPERIMENTAL - collaboration mode presets response.", - "properties": { - "data": { - "items": { - "$ref": "#/definitions/CollaborationModeMask" - }, - "type": "array" - } - }, - "required": [ - "data" - ], - "title": "CollaborationModeListResponse", - "type": "object" - }, "CollaborationModeMask": { "description": "EXPERIMENTAL - collaboration mode preset metadata for clients.", "properties": { @@ -4020,13 +3333,6 @@ "null" ] }, - "permissionProfile": { - "description": "Optional active permissions profile id for this command.\n\nDefaults to the user's configured permissions when omitted. Cannot be combined with `sandboxPolicy`.", - "type": [ - "string", - "null" - ] - }, "processId": { "description": "Optional client-supplied, connection-scoped process id.\n\nRequired for `tty`, `streamStdin`, `streamStdoutStderr`, and follow-up `command/exec/write`, `command/exec/resize`, and `command/exec/terminate` calls. When omitted, buffered execution gets an internal id that is not exposed to the client.", "type": [ @@ -4313,17 +3619,6 @@ ], "description": "[UNSTABLE] Optional default for where approval requests are routed for review." }, - "apps": { - "anyOf": [ - { - "$ref": "#/definitions/AppsConfig" - }, - { - "type": "null" - } - ], - "default": null - }, "compact_prompt": { "type": [ "string", @@ -4810,15 +4105,6 @@ "null" ] }, - "allowedApprovalsReviewers": { - "items": { - "$ref": "#/definitions/ApprovalsReviewer" - }, - "type": [ - "array", - "null" - ] - }, "allowedPermissions": { "items": { "type": "string" @@ -4874,26 +4160,6 @@ "object", "null" ] - }, - "hooks": { - "anyOf": [ - { - "$ref": "#/definitions/ManagedHooksRequirements" - }, - { - "type": "null" - } - ] - }, - "network": { - "anyOf": [ - { - "$ref": "#/definitions/NetworkRequirements" - }, - { - "type": "null" - } - ] } }, "type": "object" @@ -5335,28 +4601,6 @@ ], "type": "object" }, - "EnvironmentAddParams": { - "$schema": "http://json-schema.org/draft-07/schema#", - "properties": { - "environmentId": { - "type": "string" - }, - "execServerUrl": { - "type": "string" - } - }, - "required": [ - "environmentId", - "execServerUrl" - ], - "title": "EnvironmentAddParams", - "type": "object" - }, - "EnvironmentAddResponse": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "EnvironmentAddResponse", - "type": "object" - }, "ErrorNotification": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { @@ -6551,72 +5795,22 @@ "file_name", "match_type", "path", - "root", - "score" - ], - "type": "object" - }, - "FuzzyFileSearchSessionCompletedNotification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "properties": { - "sessionId": { - "type": "string" - } - }, - "required": [ - "sessionId" - ], - "title": "FuzzyFileSearchSessionCompletedNotification", - "type": "object" - }, - "FuzzyFileSearchSessionStartParams": { - "$schema": "http://json-schema.org/draft-07/schema#", - "properties": { - "roots": { - "items": { - "type": "string" - }, - "type": "array" - }, - "sessionId": { - "type": "string" - } - }, - "required": [ - "roots", - "sessionId" - ], - "title": "FuzzyFileSearchSessionStartParams", - "type": "object" - }, - "FuzzyFileSearchSessionStopParams": { - "$schema": "http://json-schema.org/draft-07/schema#", - "properties": { - "sessionId": { - "type": "string" - } - }, - "required": [ - "sessionId" + "root", + "score" ], - "title": "FuzzyFileSearchSessionStopParams", "type": "object" }, - "FuzzyFileSearchSessionUpdateParams": { + "FuzzyFileSearchSessionCompletedNotification": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { - "query": { - "type": "string" - }, "sessionId": { "type": "string" } }, "required": [ - "query", "sessionId" ], - "title": "FuzzyFileSearchSessionUpdateParams", + "title": "FuzzyFileSearchSessionCompletedNotification", "type": "object" }, "FuzzyFileSearchSessionUpdatedNotification": { @@ -8576,11 +7770,6 @@ ], "type": "object" }, - "MemoryResetResponse": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "MemoryResetResponse", - "type": "object" - }, "MergeStrategy": { "enum": [ "replace", @@ -8654,34 +7843,6 @@ }, "type": "object" }, - "MockExperimentalMethodParams": { - "$schema": "http://json-schema.org/draft-07/schema#", - "properties": { - "value": { - "description": "Test-only payload field.", - "type": [ - "string", - "null" - ] - } - }, - "title": "MockExperimentalMethodParams", - "type": "object" - }, - "MockExperimentalMethodResponse": { - "$schema": "http://json-schema.org/draft-07/schema#", - "properties": { - "echoed": { - "description": "Echoes the input `value`.", - "type": [ - "string", - "null" - ] - } - }, - "title": "MockExperimentalMethodResponse", - "type": "object" - }, "ModeKind": { "description": "Initial collaboration mode to use when the TUI starts.", "enum": [ @@ -10456,27 +9617,6 @@ "title": "ProcessExitedNotification", "type": "object" }, - "ProcessKillParams": { - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "Terminate a running `process/spawn` session.", - "properties": { - "processHandle": { - "description": "Client-supplied, connection-scoped `processHandle` from `process/spawn`.", - "type": "string" - } - }, - "required": [ - "processHandle" - ], - "title": "ProcessKillParams", - "type": "object" - }, - "ProcessKillResponse": { - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "Empty success response for `process/kill`.", - "title": "ProcessKillResponse", - "type": "object" - }, "ProcessOutputDeltaNotification": { "$schema": "http://json-schema.org/draft-07/schema#", "description": "Base64-encoded output chunk emitted for a streaming `process/spawn` request.", @@ -10530,127 +9670,6 @@ } ] }, - "ProcessResizePtyParams": { - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "Resize a running PTY-backed `process/spawn` session.", - "properties": { - "processHandle": { - "description": "Client-supplied, connection-scoped `processHandle` from `process/spawn`.", - "type": "string" - }, - "size": { - "allOf": [ - { - "$ref": "#/definitions/ProcessTerminalSize" - } - ], - "description": "New PTY size in character cells." - } - }, - "required": [ - "processHandle", - "size" - ], - "title": "ProcessResizePtyParams", - "type": "object" - }, - "ProcessResizePtyResponse": { - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "Empty success response for `process/resizePty`.", - "title": "ProcessResizePtyResponse", - "type": "object" - }, - "ProcessSpawnParams": { - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "Spawn a standalone process (argv vector) without a Codex sandbox on the host where the app server is running.\n\n`process/spawn` returns after the process has started and the connection-scoped `processHandle` has been registered. Process output and exit are reported via `process/outputDelta` and `process/exited` notifications.", - "properties": { - "command": { - "description": "Command argv vector. Empty arrays are rejected.", - "items": { - "type": "string" - }, - "type": "array" - }, - "cwd": { - "allOf": [ - { - "$ref": "#/definitions/AbsolutePathBuf" - } - ], - "description": "Absolute working directory for the process." - }, - "env": { - "additionalProperties": { - "type": [ - "string", - "null" - ] - }, - "description": "Optional environment overrides merged into the app-server process environment.\n\nMatching names override inherited values. Set a key to `null` to unset an inherited variable.", - "type": [ - "object", - "null" - ] - }, - "outputBytesCap": { - "description": "Optional per-stream stdout/stderr capture cap in bytes.\n\nWhen omitted, the server default applies. Set to `null` to disable the cap.", - "format": "uint", - "minimum": 0.0, - "type": [ - "integer", - "null" - ] - }, - "processHandle": { - "description": "Client-supplied, connection-scoped process handle.\n\nDuplicate active handles are rejected on the same connection. The same handle can be reused after the prior process exits.", - "type": "string" - }, - "size": { - "anyOf": [ - { - "$ref": "#/definitions/ProcessTerminalSize" - }, - { - "type": "null" - } - ], - "description": "Optional initial PTY size in character cells. Only valid when `tty` is true." - }, - "streamStdin": { - "description": "Allow follow-up `process/writeStdin` requests to write stdin bytes.", - "type": "boolean" - }, - "streamStdoutStderr": { - "description": "Stream stdout/stderr via `process/outputDelta` notifications.\n\nStreamed bytes are not duplicated into the `process/exited` notification.", - "type": "boolean" - }, - "timeoutMs": { - "description": "Optional timeout in milliseconds.\n\nWhen omitted, the server default applies. Set to `null` to disable the timeout.", - "format": "int64", - "type": [ - "integer", - "null" - ] - }, - "tty": { - "description": "Enable PTY mode.\n\nThis implies `streamStdin` and `streamStdoutStderr`.", - "type": "boolean" - } - }, - "required": [ - "command", - "cwd", - "processHandle" - ], - "title": "ProcessSpawnParams", - "type": "object" - }, - "ProcessSpawnResponse": { - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "Successful response for `process/spawn`.", - "title": "ProcessSpawnResponse", - "type": "object" - }, "ProcessTerminalSize": { "description": "PTY size in character cells for `process/spawn` PTY sessions.", "properties": { @@ -10673,38 +9692,6 @@ ], "type": "object" }, - "ProcessWriteStdinParams": { - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "Write stdin bytes to a running `process/spawn` session, close stdin, or both.", - "properties": { - "closeStdin": { - "description": "Close stdin after writing `deltaBase64`, if present.", - "type": "boolean" - }, - "deltaBase64": { - "description": "Optional base64-encoded stdin bytes to write.", - "type": [ - "string", - "null" - ] - }, - "processHandle": { - "description": "Client-supplied, connection-scoped `processHandle` from `process/spawn`.", - "type": "string" - } - }, - "required": [ - "processHandle" - ], - "title": "ProcessWriteStdinParams", - "type": "object" - }, - "ProcessWriteStdinResponse": { - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "Empty success response for `process/writeStdin`.", - "title": "ProcessWriteStdinResponse", - "type": "object" - }, "RateLimitReachedType": { "enum": [ "rate_limit_reached", @@ -11083,113 +10070,32 @@ "threadId": { "type": "string" }, - "turnId": { - "type": "string" - } - }, - "required": [ - "contentIndex", - "delta", - "itemId", - "threadId", - "turnId" - ], - "title": "ReasoningTextDeltaNotification", - "type": "object" - }, - "RemoteControlConnectionStatus": { - "enum": [ - "disabled", - "connecting", - "connected", - "errored" - ], - "type": "string" - }, - "RemoteControlDisableResponse": { - "$schema": "http://json-schema.org/draft-07/schema#", - "properties": { - "environmentId": { - "type": [ - "string", - "null" - ] - }, - "installationId": { - "type": "string" - }, - "serverName": { - "type": "string" - }, - "status": { - "$ref": "#/definitions/RemoteControlConnectionStatus" - } - }, - "required": [ - "installationId", - "serverName", - "status" - ], - "title": "RemoteControlDisableResponse", - "type": "object" - }, - "RemoteControlEnableResponse": { - "$schema": "http://json-schema.org/draft-07/schema#", - "properties": { - "environmentId": { - "type": [ - "string", - "null" - ] - }, - "installationId": { - "type": "string" - }, - "serverName": { - "type": "string" - }, - "status": { - "$ref": "#/definitions/RemoteControlConnectionStatus" - } - }, - "required": [ - "installationId", - "serverName", - "status" - ], - "title": "RemoteControlEnableResponse", - "type": "object" - }, - "RemoteControlStatusChangedNotification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "Current remote-control connection status and remote identity exposed to clients.", - "properties": { - "environmentId": { - "type": [ - "string", - "null" - ] - }, - "installationId": { - "type": "string" - }, - "serverName": { + "turnId": { "type": "string" - }, - "status": { - "$ref": "#/definitions/RemoteControlConnectionStatus" } }, "required": [ - "installationId", - "serverName", - "status" + "contentIndex", + "delta", + "itemId", + "threadId", + "turnId" ], - "title": "RemoteControlStatusChangedNotification", + "title": "ReasoningTextDeltaNotification", "type": "object" }, - "RemoteControlStatusReadResponse": { + "RemoteControlConnectionStatus": { + "enum": [ + "disabled", + "connecting", + "connected", + "errored" + ], + "type": "string" + }, + "RemoteControlStatusChangedNotification": { "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Current remote-control connection status and remote identity exposed to clients.", "properties": { "environmentId": { "type": [ @@ -11212,7 +10118,7 @@ "serverName", "status" ], - "title": "RemoteControlStatusReadResponse", + "title": "RemoteControlStatusChangedNotification", "type": "object" }, "RequestId": { @@ -14399,24 +13305,6 @@ "title": "ThreadArchivedNotification", "type": "object" }, - "ThreadBackgroundTerminalsCleanParams": { - "$schema": "http://json-schema.org/draft-07/schema#", - "properties": { - "threadId": { - "type": "string" - } - }, - "required": [ - "threadId" - ], - "title": "ThreadBackgroundTerminalsCleanParams", - "type": "object" - }, - "ThreadBackgroundTerminalsCleanResponse": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "ThreadBackgroundTerminalsCleanResponse", - "type": "object" - }, "ThreadClosedNotification": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { @@ -14448,43 +13336,6 @@ "title": "ThreadCompactStartResponse", "type": "object" }, - "ThreadDecrementElicitationParams": { - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "Parameters for `thread/decrement_elicitation`.", - "properties": { - "threadId": { - "description": "Thread whose out-of-band elicitation counter should be decremented.", - "type": "string" - } - }, - "required": [ - "threadId" - ], - "title": "ThreadDecrementElicitationParams", - "type": "object" - }, - "ThreadDecrementElicitationResponse": { - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "Response for `thread/decrement_elicitation`.", - "properties": { - "count": { - "description": "Current out-of-band elicitation count after the decrement.", - "format": "uint64", - "minimum": 0.0, - "type": "integer" - }, - "paused": { - "description": "Whether timeout accounting remains paused after applying the decrement.", - "type": "boolean" - } - }, - "required": [ - "count", - "paused" - ], - "title": "ThreadDecrementElicitationResponse", - "type": "object" - }, "ThreadForkParams": { "$schema": "http://json-schema.org/draft-07/schema#", "description": "There are two ways to fork a thread: 1. By thread_id: load the thread from disk by thread_id and fork it into a new thread. 2. By path: load the thread from disk by path and fork it into a new thread.\n\nIf using a non-empty path, the thread_id param will be ignored. Empty string path values are treated as absent.\n\nPrefer using thread_id whenever possible.", @@ -14538,10 +13389,6 @@ "ephemeral": { "type": "boolean" }, - "excludeTurns": { - "description": "When true, return only thread metadata and live fork state without populating `thread.turns`. This is useful when the client plans to call `thread/turns/list` immediately after forking.", - "type": "boolean" - }, "model": { "description": "Configuration overrides for the forked thread, if any.", "type": [ @@ -14555,35 +13402,6 @@ "null" ] }, - "path": { - "default": null, - "description": "[UNSTABLE] Specify the rollout path to fork from. If specified, the thread_id param will be ignored.", - "type": [ - "string", - "null" - ] - }, - "permissions": { - "description": "Named profile id for the forked thread. Cannot be combined with `sandbox`.", - "type": [ - "string", - "null" - ] - }, - "persistExtendedHistory": { - "description": "Deprecated and ignored by app-server. Kept only so older clients can continue sending the field while rollout persistence always uses the limited history policy.", - "type": "boolean" - }, - "runtimeWorkspaceRoots": { - "description": "Replace the thread's runtime workspace roots. Relative paths are resolved against the effective cwd for the thread.", - "items": { - "type": "string" - }, - "type": [ - "array", - "null" - ] - }, "sandbox": { "anyOf": [ { @@ -14624,18 +13442,6 @@ "ThreadForkResponse": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { - "activePermissionProfile": { - "anyOf": [ - { - "$ref": "#/definitions/ActivePermissionProfile" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Named or implicit built-in profile that produced the active permissions, when known." - }, "approvalPolicy": { "$ref": "#/definitions/AskForApproval" }, @@ -14674,14 +13480,6 @@ } ] }, - "runtimeWorkspaceRoots": { - "default": [], - "description": "Thread-scoped runtime workspace roots used to materialize `:workspace_roots`.", - "items": { - "$ref": "#/definitions/AbsolutePathBuf" - }, - "type": "array" - }, "sandbox": { "allOf": [ { @@ -14913,43 +13711,6 @@ "ThreadId": { "type": "string" }, - "ThreadIncrementElicitationParams": { - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "Parameters for `thread/increment_elicitation`.", - "properties": { - "threadId": { - "description": "Thread whose out-of-band elicitation counter should be incremented.", - "type": "string" - } - }, - "required": [ - "threadId" - ], - "title": "ThreadIncrementElicitationParams", - "type": "object" - }, - "ThreadIncrementElicitationResponse": { - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "Response for `thread/increment_elicitation`.", - "properties": { - "count": { - "description": "Current out-of-band elicitation count after the increment.", - "format": "uint64", - "minimum": 0.0, - "type": "integer" - }, - "paused": { - "description": "Whether timeout accounting is paused after applying the increment.", - "type": "boolean" - } - }, - "required": [ - "count", - "paused" - ], - "title": "ThreadIncrementElicitationResponse", - "type": "object" - }, "ThreadInjectItemsParams": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { @@ -15831,28 +14592,6 @@ ], "type": "string" }, - "ThreadMemoryModeSetParams": { - "$schema": "http://json-schema.org/draft-07/schema#", - "properties": { - "mode": { - "$ref": "#/definitions/ThreadMemoryMode" - }, - "threadId": { - "type": "string" - } - }, - "required": [ - "mode", - "threadId" - ], - "title": "ThreadMemoryModeSetParams", - "type": "object" - }, - "ThreadMemoryModeSetResponse": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "ThreadMemoryModeSetResponse", - "type": "object" - }, "ThreadMetadataGitInfoUpdateParams": { "properties": { "branch": { @@ -15965,54 +14704,6 @@ "title": "ThreadReadResponse", "type": "object" }, - "ThreadRealtimeAppendAudioParams": { - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "EXPERIMENTAL - append audio input to thread realtime.", - "properties": { - "audio": { - "$ref": "#/definitions/ThreadRealtimeAudioChunk" - }, - "threadId": { - "type": "string" - } - }, - "required": [ - "audio", - "threadId" - ], - "title": "ThreadRealtimeAppendAudioParams", - "type": "object" - }, - "ThreadRealtimeAppendAudioResponse": { - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "EXPERIMENTAL - response for appending realtime audio input.", - "title": "ThreadRealtimeAppendAudioResponse", - "type": "object" - }, - "ThreadRealtimeAppendTextParams": { - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "EXPERIMENTAL - append text input to thread realtime.", - "properties": { - "text": { - "type": "string" - }, - "threadId": { - "type": "string" - } - }, - "required": [ - "text", - "threadId" - ], - "title": "ThreadRealtimeAppendTextParams", - "type": "object" - }, - "ThreadRealtimeAppendTextResponse": { - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "EXPERIMENTAL - response for appending realtime text input.", - "title": "ThreadRealtimeAppendTextResponse", - "type": "object" - }, "ThreadRealtimeAudioChunk": { "description": "EXPERIMENTAL - thread realtime audio chunk.", "properties": { @@ -16105,26 +14796,6 @@ "title": "ThreadRealtimeItemAddedNotification", "type": "object" }, - "ThreadRealtimeListVoicesParams": { - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "EXPERIMENTAL - list voices supported by thread realtime.", - "title": "ThreadRealtimeListVoicesParams", - "type": "object" - }, - "ThreadRealtimeListVoicesResponse": { - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "EXPERIMENTAL - response for listing supported realtime voices.", - "properties": { - "voices": { - "$ref": "#/definitions/RealtimeVoicesList" - } - }, - "required": [ - "voices" - ], - "title": "ThreadRealtimeListVoicesResponse", - "type": "object" - }, "ThreadRealtimeOutputAudioDeltaNotification": { "$schema": "http://json-schema.org/draft-07/schema#", "description": "EXPERIMENTAL - streamed output audio emitted by thread realtime.", @@ -16161,67 +14832,6 @@ "title": "ThreadRealtimeSdpNotification", "type": "object" }, - "ThreadRealtimeStartParams": { - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "EXPERIMENTAL - start a thread-scoped realtime session.", - "properties": { - "outputModality": { - "allOf": [ - { - "$ref": "#/definitions/RealtimeOutputModality" - } - ], - "description": "Selects text or audio output for the realtime session. Transport and voice stay independent so clients can choose how they connect separately from what the model emits." - }, - "prompt": { - "type": [ - "string", - "null" - ] - }, - "realtimeSessionId": { - "type": [ - "string", - "null" - ] - }, - "threadId": { - "type": "string" - }, - "transport": { - "anyOf": [ - { - "$ref": "#/definitions/ThreadRealtimeStartTransport" - }, - { - "type": "null" - } - ] - }, - "voice": { - "anyOf": [ - { - "$ref": "#/definitions/RealtimeVoice" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "outputModality", - "threadId" - ], - "title": "ThreadRealtimeStartParams", - "type": "object" - }, - "ThreadRealtimeStartResponse": { - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "EXPERIMENTAL - response for starting thread realtime.", - "title": "ThreadRealtimeStartResponse", - "type": "object" - }, "ThreadRealtimeStartTransport": { "description": "EXPERIMENTAL - transport used by thread realtime.", "oneOf": [ @@ -16277,35 +14887,15 @@ "threadId": { "type": "string" }, - "version": { - "$ref": "#/definitions/RealtimeConversationVersion" - } - }, - "required": [ - "threadId", - "version" - ], - "title": "ThreadRealtimeStartedNotification", - "type": "object" - }, - "ThreadRealtimeStopParams": { - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "EXPERIMENTAL - stop thread realtime.", - "properties": { - "threadId": { - "type": "string" + "version": { + "$ref": "#/definitions/RealtimeConversationVersion" } }, "required": [ - "threadId" + "threadId", + "version" ], - "title": "ThreadRealtimeStopParams", - "type": "object" - }, - "ThreadRealtimeStopResponse": { - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "EXPERIMENTAL - response for stopping thread realtime.", - "title": "ThreadRealtimeStopResponse", + "title": "ThreadRealtimeStartedNotification", "type": "object" }, "ThreadRealtimeTranscriptDeltaNotification": { @@ -16404,20 +14994,6 @@ "null" ] }, - "excludeTurns": { - "description": "When true, return only thread metadata and live-resume state without populating `thread.turns`. This is useful when the client plans to call `thread/turns/list` immediately after resuming.", - "type": "boolean" - }, - "history": { - "description": "[UNSTABLE] FOR CODEX CLOUD - DO NOT USE. If specified, the thread will be resumed with the provided history instead of loaded from disk.", - "items": { - "$ref": "#/definitions/ResponseItem" - }, - "type": [ - "array", - "null" - ] - }, "model": { "description": "Configuration overrides for the resumed thread, if any.", "type": [ @@ -16431,25 +15007,6 @@ "null" ] }, - "path": { - "default": null, - "description": "[UNSTABLE] Specify the rollout path to resume from. If specified for a non-running thread, the thread_id param will be ignored. If thread_id identifies a running thread, the path must match the active rollout path.", - "type": [ - "string", - "null" - ] - }, - "permissions": { - "description": "Named profile id for the resumed thread. Cannot be combined with `sandbox`.", - "type": [ - "string", - "null" - ] - }, - "persistExtendedHistory": { - "description": "Deprecated and ignored by app-server. Kept only so older clients can continue sending the field while rollout persistence always uses the limited history policy.", - "type": "boolean" - }, "personality": { "anyOf": [ { @@ -16460,16 +15017,6 @@ } ] }, - "runtimeWorkspaceRoots": { - "description": "Replace the thread's runtime workspace roots. Relative paths are resolved against the effective cwd for the thread.", - "items": { - "type": "string" - }, - "type": [ - "array", - "null" - ] - }, "sandbox": { "anyOf": [ { @@ -16499,18 +15046,6 @@ "ThreadResumeResponse": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { - "activePermissionProfile": { - "anyOf": [ - { - "$ref": "#/definitions/ActivePermissionProfile" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Named or implicit built-in profile that produced the active permissions, when known." - }, "approvalPolicy": { "$ref": "#/definitions/AskForApproval" }, @@ -16549,14 +15084,6 @@ } ] }, - "runtimeWorkspaceRoots": { - "default": [], - "description": "Thread-scoped runtime workspace roots used to materialize `:workspace_roots`.", - "items": { - "$ref": "#/definitions/AbsolutePathBuf" - }, - "type": "array" - }, "sandbox": { "allOf": [ { @@ -16625,105 +15152,6 @@ "title": "ThreadRollbackResponse", "type": "object" }, - "ThreadSearchParams": { - "$schema": "http://json-schema.org/draft-07/schema#", - "properties": { - "archived": { - "description": "Optional archived filter; when set to true, only archived threads are returned. If false or null, only non-archived threads are returned.", - "type": [ - "boolean", - "null" - ] - }, - "cursor": { - "description": "Opaque pagination cursor returned by a previous call.", - "type": [ - "string", - "null" - ] - }, - "limit": { - "description": "Optional page size; defaults to a reasonable server-side value.", - "format": "uint32", - "minimum": 0.0, - "type": [ - "integer", - "null" - ] - }, - "searchTerm": { - "description": "Required substring/full-text query for thread search.", - "type": "string" - }, - "sortDirection": { - "anyOf": [ - { - "$ref": "#/definitions/SortDirection" - }, - { - "type": "null" - } - ], - "description": "Optional sort direction; defaults to descending (newest first)." - }, - "sortKey": { - "anyOf": [ - { - "$ref": "#/definitions/ThreadSortKey" - }, - { - "type": "null" - } - ], - "description": "Optional sort key; defaults to created_at." - }, - "sourceKinds": { - "description": "Optional source filter; when set, only sessions from these source kinds are returned. When omitted or empty, defaults to interactive sources.", - "items": { - "$ref": "#/definitions/ThreadSourceKind" - }, - "type": [ - "array", - "null" - ] - } - }, - "required": [ - "searchTerm" - ], - "title": "ThreadSearchParams", - "type": "object" - }, - "ThreadSearchResponse": { - "$schema": "http://json-schema.org/draft-07/schema#", - "properties": { - "backwardsCursor": { - "description": "Opaque cursor to pass as `cursor` when reversing `sortDirection`. This is only populated when the page contains at least one thread. Use it with the opposite `sortDirection`; for timestamp sorts it anchors at the start of the page timestamp so same-second updates are not skipped.", - "type": [ - "string", - "null" - ] - }, - "data": { - "items": { - "$ref": "#/definitions/ThreadSearchResult" - }, - "type": "array" - }, - "nextCursor": { - "description": "Opaque cursor to pass to the next call to continue after the last item. if None, there are no more items to return.", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "data" - ], - "title": "ThreadSearchResponse", - "type": "object" - }, "ThreadSearchResult": { "properties": { "snippet": { @@ -16835,134 +15263,11 @@ "approvalPolicy", "approvalsReviewer", "collaborationMode", - "cwd", - "model", - "modelProvider", - "sandboxPolicy" - ], - "type": "object" - }, - "ThreadSettingsUpdateParams": { - "$schema": "http://json-schema.org/draft-07/schema#", - "properties": { - "approvalPolicy": { - "anyOf": [ - { - "$ref": "#/definitions/AskForApproval" - }, - { - "type": "null" - } - ], - "description": "Override the approval policy for subsequent turns." - }, - "approvalsReviewer": { - "anyOf": [ - { - "$ref": "#/definitions/ApprovalsReviewer" - }, - { - "type": "null" - } - ], - "description": "Override where approval requests are routed for subsequent turns." - }, - "collaborationMode": { - "anyOf": [ - { - "$ref": "#/definitions/CollaborationMode" - }, - { - "type": "null" - } - ], - "description": "EXPERIMENTAL - Set a pre-set collaboration mode for subsequent turns.\n\nFor `collaboration_mode.settings.developer_instructions`, `null` means \"use the built-in instructions for the selected mode\"." - }, - "cwd": { - "description": "Override the working directory for subsequent turns.", - "type": [ - "string", - "null" - ] - }, - "effort": { - "anyOf": [ - { - "$ref": "#/definitions/ReasoningEffort" - }, - { - "type": "null" - } - ], - "description": "Override the reasoning effort for subsequent turns." - }, - "model": { - "description": "Override the model for subsequent turns.", - "type": [ - "string", - "null" - ] - }, - "permissions": { - "description": "Select a named permissions profile id for subsequent turns. Cannot be combined with `sandboxPolicy`.", - "type": [ - "string", - "null" - ] - }, - "personality": { - "anyOf": [ - { - "$ref": "#/definitions/Personality" - }, - { - "type": "null" - } - ], - "description": "Override the personality for subsequent turns." - }, - "sandboxPolicy": { - "anyOf": [ - { - "$ref": "#/definitions/SandboxPolicy" - }, - { - "type": "null" - } - ], - "description": "Override the sandbox policy for subsequent turns." - }, - "serviceTier": { - "description": "Override the service tier for subsequent turns. `null` clears the current service tier; omission leaves it unchanged.", - "type": [ - "string", - "null" - ] - }, - "summary": { - "anyOf": [ - { - "$ref": "#/definitions/ReasoningSummary" - }, - { - "type": "null" - } - ], - "description": "Override the reasoning summary for subsequent turns." - }, - "threadId": { - "type": "string" - } - }, - "required": [ - "threadId" + "cwd", + "model", + "modelProvider", + "sandboxPolicy" ], - "title": "ThreadSettingsUpdateParams", - "type": "object" - }, - "ThreadSettingsUpdateResponse": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "ThreadSettingsUpdateResponse", "type": "object" }, "ThreadSettingsUpdatedNotification": { @@ -17084,42 +15389,12 @@ "null" ] }, - "dynamicTools": { - "items": { - "$ref": "#/definitions/DynamicToolSpec" - }, - "type": [ - "array", - "null" - ] - }, - "environments": { - "description": "Optional sticky environments for this thread.\n\nOmitted selects the default environment when environment access is enabled. Empty disables environment access for turns that do not provide a turn override. Non-empty selects the first environment as the current turn environment.", - "items": { - "$ref": "#/definitions/TurnEnvironmentParams" - }, - "type": [ - "array", - "null" - ] - }, "ephemeral": { "type": [ "boolean", "null" ] }, - "experimentalRawEvents": { - "description": "If true, opt into emitting raw Responses API items on the event stream. This is for internal use only (e.g. Codex Cloud).", - "type": "boolean" - }, - "mockExperimentalField": { - "description": "Test-only experimental field used to validate experimental gating and schema filtering behavior in a stable way.", - "type": [ - "string", - "null" - ] - }, "model": { "type": [ "string", @@ -17132,17 +15407,6 @@ "null" ] }, - "permissions": { - "description": "Named profile id for this thread. Cannot be combined with `sandbox`.", - "type": [ - "string", - "null" - ] - }, - "persistExtendedHistory": { - "description": "Deprecated and ignored by app-server. Kept only so older clients can continue sending the field while rollout persistence always uses the limited history policy.", - "type": "boolean" - }, "personality": { "anyOf": [ { @@ -17153,16 +15417,6 @@ } ] }, - "runtimeWorkspaceRoots": { - "description": "Replace the thread's runtime workspace roots. Relative paths are resolved against the effective cwd for the thread.", - "items": { - "type": "string" - }, - "type": [ - "array", - "null" - ] - }, "sandbox": { "anyOf": [ { @@ -17213,18 +15467,6 @@ "ThreadStartResponse": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { - "activePermissionProfile": { - "anyOf": [ - { - "$ref": "#/definitions/ActivePermissionProfile" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Named or implicit built-in profile that produced the active permissions, when known." - }, "approvalPolicy": { "$ref": "#/definitions/AskForApproval" }, @@ -17263,14 +15505,6 @@ } ] }, - "runtimeWorkspaceRoots": { - "default": [], - "description": "Thread-scoped runtime workspace roots used to materialize `:workspace_roots`.", - "items": { - "$ref": "#/definitions/AbsolutePathBuf" - }, - "type": "array" - }, "sandbox": { "allOf": [ { @@ -17456,161 +15690,6 @@ "title": "ThreadTokenUsageUpdatedNotification", "type": "object" }, - "ThreadTurnsItemsListParams": { - "$schema": "http://json-schema.org/draft-07/schema#", - "properties": { - "cursor": { - "description": "Opaque cursor to pass to the next call to continue after the last item.", - "type": [ - "string", - "null" - ] - }, - "limit": { - "description": "Optional item page size.", - "format": "uint32", - "minimum": 0.0, - "type": [ - "integer", - "null" - ] - }, - "sortDirection": { - "anyOf": [ - { - "$ref": "#/definitions/SortDirection" - }, - { - "type": "null" - } - ], - "description": "Optional item pagination direction; defaults to ascending." - }, - "threadId": { - "type": "string" - }, - "turnId": { - "type": "string" - } - }, - "required": [ - "threadId", - "turnId" - ], - "title": "ThreadTurnsItemsListParams", - "type": "object" - }, - "ThreadTurnsItemsListResponse": { - "$schema": "http://json-schema.org/draft-07/schema#", - "properties": { - "backwardsCursor": { - "description": "Opaque cursor to pass as `cursor` when reversing `sortDirection`. This is only populated when the page contains at least one item.", - "type": [ - "string", - "null" - ] - }, - "data": { - "items": { - "$ref": "#/definitions/ThreadItem" - }, - "type": "array" - }, - "nextCursor": { - "description": "Opaque cursor to pass to the next call to continue after the last item. if None, there are no more items to return.", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "data" - ], - "title": "ThreadTurnsItemsListResponse", - "type": "object" - }, - "ThreadTurnsListParams": { - "$schema": "http://json-schema.org/draft-07/schema#", - "properties": { - "cursor": { - "description": "Opaque cursor to pass to the next call to continue after the last turn.", - "type": [ - "string", - "null" - ] - }, - "itemsView": { - "anyOf": [ - { - "$ref": "#/definitions/TurnItemsView" - }, - { - "type": "null" - } - ], - "description": "How much item detail to include for each returned turn; defaults to summary." - }, - "limit": { - "description": "Optional turn page size.", - "format": "uint32", - "minimum": 0.0, - "type": [ - "integer", - "null" - ] - }, - "sortDirection": { - "anyOf": [ - { - "$ref": "#/definitions/SortDirection" - }, - { - "type": "null" - } - ], - "description": "Optional turn pagination direction; defaults to descending." - }, - "threadId": { - "type": "string" - } - }, - "required": [ - "threadId" - ], - "title": "ThreadTurnsListParams", - "type": "object" - }, - "ThreadTurnsListResponse": { - "$schema": "http://json-schema.org/draft-07/schema#", - "properties": { - "backwardsCursor": { - "description": "Opaque cursor to pass as `cursor` when reversing `sortDirection`. This is only populated when the page contains at least one turn. Use it with the opposite `sortDirection` to include the anchor turn again and catch updates to that turn.", - "type": [ - "string", - "null" - ] - }, - "data": { - "items": { - "$ref": "#/definitions/Turn" - }, - "type": "array" - }, - "nextCursor": { - "description": "Opaque cursor to pass to the next call to continue after the last turn. if None, there are no more turns to return.", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "data" - ], - "title": "ThreadTurnsListResponse", - "type": "object" - }, "ThreadUnarchiveParams": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { @@ -18019,16 +16098,6 @@ "TurnStartParams": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { - "additionalContext": { - "additionalProperties": { - "$ref": "#/definitions/AdditionalContextEntry" - }, - "description": "Optional client-provided context fragments keyed by an opaque source identifier.", - "type": [ - "object", - "null" - ] - }, "approvalPolicy": { "anyOf": [ { @@ -18051,17 +16120,6 @@ ], "description": "Override where approval requests are routed for review on this turn and subsequent turns." }, - "collaborationMode": { - "anyOf": [ - { - "$ref": "#/definitions/CollaborationMode" - }, - { - "type": "null" - } - ], - "description": "EXPERIMENTAL - Set a pre-set collaboration mode. Takes precedence over model, reasoning_effort, and developer instructions if set.\n\nFor `collaboration_mode.settings.developer_instructions`, `null` means \"use the built-in instructions for the selected mode\"." - }, "cwd": { "description": "Override the working directory for this turn and subsequent turns.", "type": [ @@ -18080,16 +16138,6 @@ ], "description": "Override the reasoning effort for this turn and subsequent turns." }, - "environments": { - "description": "Optional turn-scoped environments.\n\nOmitted uses the thread sticky environments. Empty disables environment access for this turn. Non-empty selects the first environment as the current turn environment for this turn.", - "items": { - "$ref": "#/definitions/TurnEnvironmentParams" - }, - "type": [ - "array", - "null" - ] - }, "input": { "items": { "$ref": "#/definitions/UserInput" @@ -18106,13 +16154,6 @@ "outputSchema": { "description": "Optional JSON Schema used to constrain the final assistant message for this turn." }, - "permissions": { - "description": "Select a named permissions profile id for this turn and subsequent turns. Cannot be combined with `sandboxPolicy`.", - "type": [ - "string", - "null" - ] - }, "personality": { "anyOf": [ { @@ -18124,26 +16165,6 @@ ], "description": "Override the personality for this turn and subsequent turns." }, - "responsesapiClientMetadata": { - "additionalProperties": { - "type": "string" - }, - "description": "Optional turn-scoped Responses API client metadata.", - "type": [ - "object", - "null" - ] - }, - "runtimeWorkspaceRoots": { - "description": "Replace the thread's runtime workspace roots for this turn and subsequent turns. Relative paths are resolved against the effective cwd for the turn.", - "items": { - "type": "string" - }, - "type": [ - "array", - "null" - ] - }, "sandboxPolicy": { "anyOf": [ { @@ -18226,16 +16247,6 @@ "TurnSteerParams": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { - "additionalContext": { - "additionalProperties": { - "$ref": "#/definitions/AdditionalContextEntry" - }, - "description": "Optional client-provided context fragments keyed by an opaque source identifier.", - "type": [ - "object", - "null" - ] - }, "expectedTurnId": { "description": "Required active turn id precondition. The request fails when it does not match the currently active turn.", "type": "string" @@ -18246,16 +16257,6 @@ }, "type": "array" }, - "responsesapiClientMetadata": { - "additionalProperties": { - "type": "string" - }, - "description": "Optional turn-scoped Responses API client metadata.", - "type": [ - "object", - "null" - ] - }, "threadId": { "type": "string" } diff --git a/codex-rs/app-server-protocol/schema/json/v2/CollaborationModeListParams.json b/codex-rs/app-server-protocol/schema/json/v2/CollaborationModeListParams.json deleted file mode 100644 index bbac0d4f10a..00000000000 --- a/codex-rs/app-server-protocol/schema/json/v2/CollaborationModeListParams.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "EXPERIMENTAL - list collaboration mode presets.", - "title": "CollaborationModeListParams", - "type": "object" -} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/CollaborationModeListResponse.json b/codex-rs/app-server-protocol/schema/json/v2/CollaborationModeListResponse.json deleted file mode 100644 index c9a2f4e3b45..00000000000 --- a/codex-rs/app-server-protocol/schema/json/v2/CollaborationModeListResponse.json +++ /dev/null @@ -1,84 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "definitions": { - "CollaborationModeMask": { - "description": "EXPERIMENTAL - collaboration mode preset metadata for clients.", - "properties": { - "mode": { - "anyOf": [ - { - "$ref": "#/definitions/ModeKind" - }, - { - "type": "null" - } - ] - }, - "model": { - "type": [ - "string", - "null" - ] - }, - "name": { - "type": "string" - }, - "reasoning_effort": { - "anyOf": [ - { - "anyOf": [ - { - "$ref": "#/definitions/ReasoningEffort" - }, - { - "type": "null" - } - ] - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "name" - ], - "type": "object" - }, - "ModeKind": { - "description": "Initial collaboration mode to use when the TUI starts.", - "enum": [ - "plan", - "default" - ], - "type": "string" - }, - "ReasoningEffort": { - "description": "See https://platform.openai.com/docs/guides/reasoning?api-mode=responses#get-started-with-reasoning", - "enum": [ - "none", - "minimal", - "low", - "medium", - "high", - "xhigh" - ], - "type": "string" - } - }, - "description": "EXPERIMENTAL - collaboration mode presets response.", - "properties": { - "data": { - "items": { - "$ref": "#/definitions/CollaborationModeMask" - }, - "type": "array" - } - }, - "required": [ - "data" - ], - "title": "CollaborationModeListResponse", - "type": "object" -} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/CommandExecParams.json b/codex-rs/app-server-protocol/schema/json/v2/CommandExecParams.json index 058db41b3e1..d00a0b60e50 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/CommandExecParams.json +++ b/codex-rs/app-server-protocol/schema/json/v2/CommandExecParams.json @@ -180,13 +180,6 @@ "null" ] }, - "permissionProfile": { - "description": "Optional active permissions profile id for this command.\n\nDefaults to the user's configured permissions when omitted. Cannot be combined with `sandboxPolicy`.", - "type": [ - "string", - "null" - ] - }, "processId": { "description": "Optional client-supplied, connection-scoped process id.\n\nRequired for `tty`, `streamStdin`, `streamStdoutStderr`, and follow-up `command/exec/write`, `command/exec/resize`, and `command/exec/terminate` calls. When omitted, buffered execution gets an internal id that is not exposed to the client.", "type": [ diff --git a/codex-rs/app-server-protocol/schema/json/v2/ConfigReadResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ConfigReadResponse.json index 298711a76bc..4a104b3bd51 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/ConfigReadResponse.json +++ b/codex-rs/app-server-protocol/schema/json/v2/ConfigReadResponse.json @@ -241,17 +241,6 @@ ], "description": "[UNSTABLE] Optional default for where approval requests are routed for review." }, - "apps": { - "anyOf": [ - { - "$ref": "#/definitions/AppsConfig" - }, - { - "type": "null" - } - ], - "default": null - }, "compact_prompt": { "type": [ "string", diff --git a/codex-rs/app-server-protocol/schema/json/v2/ConfigRequirementsReadResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ConfigRequirementsReadResponse.json index a6b833712b7..63a209cc779 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/ConfigRequirementsReadResponse.json +++ b/codex-rs/app-server-protocol/schema/json/v2/ConfigRequirementsReadResponse.json @@ -94,15 +94,6 @@ "null" ] }, - "allowedApprovalsReviewers": { - "items": { - "$ref": "#/definitions/ApprovalsReviewer" - }, - "type": [ - "array", - "null" - ] - }, "allowedPermissions": { "items": { "type": "string" @@ -158,26 +149,6 @@ "object", "null" ] - }, - "hooks": { - "anyOf": [ - { - "$ref": "#/definitions/ManagedHooksRequirements" - }, - { - "type": "null" - } - ] - }, - "network": { - "anyOf": [ - { - "$ref": "#/definitions/NetworkRequirements" - }, - { - "type": "null" - } - ] } }, "type": "object" diff --git a/codex-rs/app-server-protocol/schema/json/v2/EnvironmentAddParams.json b/codex-rs/app-server-protocol/schema/json/v2/EnvironmentAddParams.json deleted file mode 100644 index 191405d561b..00000000000 --- a/codex-rs/app-server-protocol/schema/json/v2/EnvironmentAddParams.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "properties": { - "environmentId": { - "type": "string" - }, - "execServerUrl": { - "type": "string" - } - }, - "required": [ - "environmentId", - "execServerUrl" - ], - "title": "EnvironmentAddParams", - "type": "object" -} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/EnvironmentAddResponse.json b/codex-rs/app-server-protocol/schema/json/v2/EnvironmentAddResponse.json deleted file mode 100644 index 492cb0f76d2..00000000000 --- a/codex-rs/app-server-protocol/schema/json/v2/EnvironmentAddResponse.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "EnvironmentAddResponse", - "type": "object" -} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/MemoryResetResponse.json b/codex-rs/app-server-protocol/schema/json/v2/MemoryResetResponse.json deleted file mode 100644 index e445cd867be..00000000000 --- a/codex-rs/app-server-protocol/schema/json/v2/MemoryResetResponse.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "MemoryResetResponse", - "type": "object" -} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/MockExperimentalMethodParams.json b/codex-rs/app-server-protocol/schema/json/v2/MockExperimentalMethodParams.json deleted file mode 100644 index 99dc3d96af2..00000000000 --- a/codex-rs/app-server-protocol/schema/json/v2/MockExperimentalMethodParams.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "properties": { - "value": { - "description": "Test-only payload field.", - "type": [ - "string", - "null" - ] - } - }, - "title": "MockExperimentalMethodParams", - "type": "object" -} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/MockExperimentalMethodResponse.json b/codex-rs/app-server-protocol/schema/json/v2/MockExperimentalMethodResponse.json deleted file mode 100644 index 127ba8126fe..00000000000 --- a/codex-rs/app-server-protocol/schema/json/v2/MockExperimentalMethodResponse.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "properties": { - "echoed": { - "description": "Echoes the input `value`.", - "type": [ - "string", - "null" - ] - } - }, - "title": "MockExperimentalMethodResponse", - "type": "object" -} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ProcessKillParams.json b/codex-rs/app-server-protocol/schema/json/v2/ProcessKillParams.json deleted file mode 100644 index c6e996b2c4c..00000000000 --- a/codex-rs/app-server-protocol/schema/json/v2/ProcessKillParams.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "Terminate a running `process/spawn` session.", - "properties": { - "processHandle": { - "description": "Client-supplied, connection-scoped `processHandle` from `process/spawn`.", - "type": "string" - } - }, - "required": [ - "processHandle" - ], - "title": "ProcessKillParams", - "type": "object" -} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ProcessKillResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ProcessKillResponse.json deleted file mode 100644 index a75998af346..00000000000 --- a/codex-rs/app-server-protocol/schema/json/v2/ProcessKillResponse.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "Empty success response for `process/kill`.", - "title": "ProcessKillResponse", - "type": "object" -} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ProcessResizePtyParams.json b/codex-rs/app-server-protocol/schema/json/v2/ProcessResizePtyParams.json deleted file mode 100644 index 3d893a8d8a5..00000000000 --- a/codex-rs/app-server-protocol/schema/json/v2/ProcessResizePtyParams.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "definitions": { - "ProcessTerminalSize": { - "description": "PTY size in character cells for `process/spawn` PTY sessions.", - "properties": { - "cols": { - "description": "Terminal width in character cells.", - "format": "uint16", - "minimum": 0.0, - "type": "integer" - }, - "rows": { - "description": "Terminal height in character cells.", - "format": "uint16", - "minimum": 0.0, - "type": "integer" - } - }, - "required": [ - "cols", - "rows" - ], - "type": "object" - } - }, - "description": "Resize a running PTY-backed `process/spawn` session.", - "properties": { - "processHandle": { - "description": "Client-supplied, connection-scoped `processHandle` from `process/spawn`.", - "type": "string" - }, - "size": { - "allOf": [ - { - "$ref": "#/definitions/ProcessTerminalSize" - } - ], - "description": "New PTY size in character cells." - } - }, - "required": [ - "processHandle", - "size" - ], - "title": "ProcessResizePtyParams", - "type": "object" -} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ProcessResizePtyResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ProcessResizePtyResponse.json deleted file mode 100644 index 301a9aa8270..00000000000 --- a/codex-rs/app-server-protocol/schema/json/v2/ProcessResizePtyResponse.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "Empty success response for `process/resizePty`.", - "title": "ProcessResizePtyResponse", - "type": "object" -} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ProcessSpawnParams.json b/codex-rs/app-server-protocol/schema/json/v2/ProcessSpawnParams.json deleted file mode 100644 index a8fc3ed02fd..00000000000 --- a/codex-rs/app-server-protocol/schema/json/v2/ProcessSpawnParams.json +++ /dev/null @@ -1,113 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "definitions": { - "AbsolutePathBuf": { - "description": "A path that is guaranteed to be absolute and normalized (though it is not guaranteed to be canonicalized or exist on the filesystem).\n\nIMPORTANT: When deserializing an `AbsolutePathBuf`, a base path must be set using [AbsolutePathBufGuard::new]. If no base path is set, the deserialization will fail unless the path being deserialized is already absolute.", - "type": "string" - }, - "ProcessTerminalSize": { - "description": "PTY size in character cells for `process/spawn` PTY sessions.", - "properties": { - "cols": { - "description": "Terminal width in character cells.", - "format": "uint16", - "minimum": 0.0, - "type": "integer" - }, - "rows": { - "description": "Terminal height in character cells.", - "format": "uint16", - "minimum": 0.0, - "type": "integer" - } - }, - "required": [ - "cols", - "rows" - ], - "type": "object" - } - }, - "description": "Spawn a standalone process (argv vector) without a Codex sandbox on the host where the app server is running.\n\n`process/spawn` returns after the process has started and the connection-scoped `processHandle` has been registered. Process output and exit are reported via `process/outputDelta` and `process/exited` notifications.", - "properties": { - "command": { - "description": "Command argv vector. Empty arrays are rejected.", - "items": { - "type": "string" - }, - "type": "array" - }, - "cwd": { - "allOf": [ - { - "$ref": "#/definitions/AbsolutePathBuf" - } - ], - "description": "Absolute working directory for the process." - }, - "env": { - "additionalProperties": { - "type": [ - "string", - "null" - ] - }, - "description": "Optional environment overrides merged into the app-server process environment.\n\nMatching names override inherited values. Set a key to `null` to unset an inherited variable.", - "type": [ - "object", - "null" - ] - }, - "outputBytesCap": { - "description": "Optional per-stream stdout/stderr capture cap in bytes.\n\nWhen omitted, the server default applies. Set to `null` to disable the cap.", - "format": "uint", - "minimum": 0.0, - "type": [ - "integer", - "null" - ] - }, - "processHandle": { - "description": "Client-supplied, connection-scoped process handle.\n\nDuplicate active handles are rejected on the same connection. The same handle can be reused after the prior process exits.", - "type": "string" - }, - "size": { - "anyOf": [ - { - "$ref": "#/definitions/ProcessTerminalSize" - }, - { - "type": "null" - } - ], - "description": "Optional initial PTY size in character cells. Only valid when `tty` is true." - }, - "streamStdin": { - "description": "Allow follow-up `process/writeStdin` requests to write stdin bytes.", - "type": "boolean" - }, - "streamStdoutStderr": { - "description": "Stream stdout/stderr via `process/outputDelta` notifications.\n\nStreamed bytes are not duplicated into the `process/exited` notification.", - "type": "boolean" - }, - "timeoutMs": { - "description": "Optional timeout in milliseconds.\n\nWhen omitted, the server default applies. Set to `null` to disable the timeout.", - "format": "int64", - "type": [ - "integer", - "null" - ] - }, - "tty": { - "description": "Enable PTY mode.\n\nThis implies `streamStdin` and `streamStdoutStderr`.", - "type": "boolean" - } - }, - "required": [ - "command", - "cwd", - "processHandle" - ], - "title": "ProcessSpawnParams", - "type": "object" -} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ProcessSpawnResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ProcessSpawnResponse.json deleted file mode 100644 index f636247906c..00000000000 --- a/codex-rs/app-server-protocol/schema/json/v2/ProcessSpawnResponse.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "Successful response for `process/spawn`.", - "title": "ProcessSpawnResponse", - "type": "object" -} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ProcessWriteStdinParams.json b/codex-rs/app-server-protocol/schema/json/v2/ProcessWriteStdinParams.json deleted file mode 100644 index 5930943dc9c..00000000000 --- a/codex-rs/app-server-protocol/schema/json/v2/ProcessWriteStdinParams.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "Write stdin bytes to a running `process/spawn` session, close stdin, or both.", - "properties": { - "closeStdin": { - "description": "Close stdin after writing `deltaBase64`, if present.", - "type": "boolean" - }, - "deltaBase64": { - "description": "Optional base64-encoded stdin bytes to write.", - "type": [ - "string", - "null" - ] - }, - "processHandle": { - "description": "Client-supplied, connection-scoped `processHandle` from `process/spawn`.", - "type": "string" - } - }, - "required": [ - "processHandle" - ], - "title": "ProcessWriteStdinParams", - "type": "object" -} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ProcessWriteStdinResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ProcessWriteStdinResponse.json deleted file mode 100644 index a5050e9bb95..00000000000 --- a/codex-rs/app-server-protocol/schema/json/v2/ProcessWriteStdinResponse.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "Empty success response for `process/writeStdin`.", - "title": "ProcessWriteStdinResponse", - "type": "object" -} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/RemoteControlDisableResponse.json b/codex-rs/app-server-protocol/schema/json/v2/RemoteControlDisableResponse.json deleted file mode 100644 index 59f55ce6330..00000000000 --- a/codex-rs/app-server-protocol/schema/json/v2/RemoteControlDisableResponse.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "definitions": { - "RemoteControlConnectionStatus": { - "enum": [ - "disabled", - "connecting", - "connected", - "errored" - ], - "type": "string" - } - }, - "properties": { - "environmentId": { - "type": [ - "string", - "null" - ] - }, - "installationId": { - "type": "string" - }, - "serverName": { - "type": "string" - }, - "status": { - "$ref": "#/definitions/RemoteControlConnectionStatus" - } - }, - "required": [ - "installationId", - "serverName", - "status" - ], - "title": "RemoteControlDisableResponse", - "type": "object" -} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/RemoteControlEnableResponse.json b/codex-rs/app-server-protocol/schema/json/v2/RemoteControlEnableResponse.json deleted file mode 100644 index 9210d32d9a2..00000000000 --- a/codex-rs/app-server-protocol/schema/json/v2/RemoteControlEnableResponse.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "definitions": { - "RemoteControlConnectionStatus": { - "enum": [ - "disabled", - "connecting", - "connected", - "errored" - ], - "type": "string" - } - }, - "properties": { - "environmentId": { - "type": [ - "string", - "null" - ] - }, - "installationId": { - "type": "string" - }, - "serverName": { - "type": "string" - }, - "status": { - "$ref": "#/definitions/RemoteControlConnectionStatus" - } - }, - "required": [ - "installationId", - "serverName", - "status" - ], - "title": "RemoteControlEnableResponse", - "type": "object" -} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/RemoteControlStatusReadResponse.json b/codex-rs/app-server-protocol/schema/json/v2/RemoteControlStatusReadResponse.json deleted file mode 100644 index 641cbee05e8..00000000000 --- a/codex-rs/app-server-protocol/schema/json/v2/RemoteControlStatusReadResponse.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "definitions": { - "RemoteControlConnectionStatus": { - "enum": [ - "disabled", - "connecting", - "connected", - "errored" - ], - "type": "string" - } - }, - "properties": { - "environmentId": { - "type": [ - "string", - "null" - ] - }, - "installationId": { - "type": "string" - }, - "serverName": { - "type": "string" - }, - "status": { - "$ref": "#/definitions/RemoteControlConnectionStatus" - } - }, - "required": [ - "installationId", - "serverName", - "status" - ], - "title": "RemoteControlStatusReadResponse", - "type": "object" -} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadBackgroundTerminalsCleanParams.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadBackgroundTerminalsCleanParams.json deleted file mode 100644 index b0c3b06bd9e..00000000000 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadBackgroundTerminalsCleanParams.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "properties": { - "threadId": { - "type": "string" - } - }, - "required": [ - "threadId" - ], - "title": "ThreadBackgroundTerminalsCleanParams", - "type": "object" -} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadBackgroundTerminalsCleanResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadBackgroundTerminalsCleanResponse.json deleted file mode 100644 index 700d59ec938..00000000000 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadBackgroundTerminalsCleanResponse.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "ThreadBackgroundTerminalsCleanResponse", - "type": "object" -} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadDecrementElicitationParams.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadDecrementElicitationParams.json deleted file mode 100644 index d9e07f83e32..00000000000 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadDecrementElicitationParams.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "Parameters for `thread/decrement_elicitation`.", - "properties": { - "threadId": { - "description": "Thread whose out-of-band elicitation counter should be decremented.", - "type": "string" - } - }, - "required": [ - "threadId" - ], - "title": "ThreadDecrementElicitationParams", - "type": "object" -} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadDecrementElicitationResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadDecrementElicitationResponse.json deleted file mode 100644 index 729d04d83dc..00000000000 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadDecrementElicitationResponse.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "Response for `thread/decrement_elicitation`.", - "properties": { - "count": { - "description": "Current out-of-band elicitation count after the decrement.", - "format": "uint64", - "minimum": 0.0, - "type": "integer" - }, - "paused": { - "description": "Whether timeout accounting remains paused after applying the decrement.", - "type": "boolean" - } - }, - "required": [ - "count", - "paused" - ], - "title": "ThreadDecrementElicitationResponse", - "type": "object" -} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadForkParams.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadForkParams.json index 403963381ab..9d2f834dd8c 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadForkParams.json +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadForkParams.json @@ -128,10 +128,6 @@ "ephemeral": { "type": "boolean" }, - "excludeTurns": { - "description": "When true, return only thread metadata and live fork state without populating `thread.turns`. This is useful when the client plans to call `thread/turns/list` immediately after forking.", - "type": "boolean" - }, "model": { "description": "Configuration overrides for the forked thread, if any.", "type": [ @@ -145,35 +141,6 @@ "null" ] }, - "path": { - "default": null, - "description": "[UNSTABLE] Specify the rollout path to fork from. If specified, the thread_id param will be ignored.", - "type": [ - "string", - "null" - ] - }, - "permissions": { - "description": "Named profile id for the forked thread. Cannot be combined with `sandbox`.", - "type": [ - "string", - "null" - ] - }, - "persistExtendedHistory": { - "description": "Deprecated and ignored by app-server. Kept only so older clients can continue sending the field while rollout persistence always uses the limited history policy.", - "type": "boolean" - }, - "runtimeWorkspaceRoots": { - "description": "Replace the thread's runtime workspace roots. Relative paths are resolved against the effective cwd for the thread.", - "items": { - "type": "string" - }, - "type": [ - "array", - "null" - ] - }, "sandbox": { "anyOf": [ { diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadForkResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadForkResponse.json index c3828a7de65..8c45f57d385 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadForkResponse.json +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadForkResponse.json @@ -2238,18 +2238,6 @@ } }, "properties": { - "activePermissionProfile": { - "anyOf": [ - { - "$ref": "#/definitions/ActivePermissionProfile" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Named or implicit built-in profile that produced the active permissions, when known." - }, "approvalPolicy": { "$ref": "#/definitions/AskForApproval" }, @@ -2288,14 +2276,6 @@ } ] }, - "runtimeWorkspaceRoots": { - "default": [], - "description": "Thread-scoped runtime workspace roots used to materialize `:workspace_roots`.", - "items": { - "$ref": "#/definitions/AbsolutePathBuf" - }, - "type": "array" - }, "sandbox": { "allOf": [ { diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadIncrementElicitationParams.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadIncrementElicitationParams.json deleted file mode 100644 index b07ee195b76..00000000000 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadIncrementElicitationParams.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "Parameters for `thread/increment_elicitation`.", - "properties": { - "threadId": { - "description": "Thread whose out-of-band elicitation counter should be incremented.", - "type": "string" - } - }, - "required": [ - "threadId" - ], - "title": "ThreadIncrementElicitationParams", - "type": "object" -} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadIncrementElicitationResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadIncrementElicitationResponse.json deleted file mode 100644 index 8dbb4302146..00000000000 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadIncrementElicitationResponse.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "Response for `thread/increment_elicitation`.", - "properties": { - "count": { - "description": "Current out-of-band elicitation count after the increment.", - "format": "uint64", - "minimum": 0.0, - "type": "integer" - }, - "paused": { - "description": "Whether timeout accounting is paused after applying the increment.", - "type": "boolean" - } - }, - "required": [ - "count", - "paused" - ], - "title": "ThreadIncrementElicitationResponse", - "type": "object" -} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadMemoryModeSetParams.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadMemoryModeSetParams.json deleted file mode 100644 index 495585eedc4..00000000000 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadMemoryModeSetParams.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "definitions": { - "ThreadMemoryMode": { - "enum": [ - "enabled", - "disabled" - ], - "type": "string" - } - }, - "properties": { - "mode": { - "$ref": "#/definitions/ThreadMemoryMode" - }, - "threadId": { - "type": "string" - } - }, - "required": [ - "mode", - "threadId" - ], - "title": "ThreadMemoryModeSetParams", - "type": "object" -} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadMemoryModeSetResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadMemoryModeSetResponse.json deleted file mode 100644 index 72b346ea56a..00000000000 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadMemoryModeSetResponse.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "ThreadMemoryModeSetResponse", - "type": "object" -} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeAppendAudioParams.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeAppendAudioParams.json deleted file mode 100644 index 29b9299af7b..00000000000 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeAppendAudioParams.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "definitions": { - "ThreadRealtimeAudioChunk": { - "description": "EXPERIMENTAL - thread realtime audio chunk.", - "properties": { - "data": { - "type": "string" - }, - "itemId": { - "type": [ - "string", - "null" - ] - }, - "numChannels": { - "format": "uint16", - "minimum": 0.0, - "type": "integer" - }, - "sampleRate": { - "format": "uint32", - "minimum": 0.0, - "type": "integer" - }, - "samplesPerChannel": { - "format": "uint32", - "minimum": 0.0, - "type": [ - "integer", - "null" - ] - } - }, - "required": [ - "data", - "numChannels", - "sampleRate" - ], - "type": "object" - } - }, - "description": "EXPERIMENTAL - append audio input to thread realtime.", - "properties": { - "audio": { - "$ref": "#/definitions/ThreadRealtimeAudioChunk" - }, - "threadId": { - "type": "string" - } - }, - "required": [ - "audio", - "threadId" - ], - "title": "ThreadRealtimeAppendAudioParams", - "type": "object" -} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeAppendAudioResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeAppendAudioResponse.json deleted file mode 100644 index a0f2546f41d..00000000000 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeAppendAudioResponse.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "EXPERIMENTAL - response for appending realtime audio input.", - "title": "ThreadRealtimeAppendAudioResponse", - "type": "object" -} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeAppendTextParams.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeAppendTextParams.json deleted file mode 100644 index e95503c5ea9..00000000000 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeAppendTextParams.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "EXPERIMENTAL - append text input to thread realtime.", - "properties": { - "text": { - "type": "string" - }, - "threadId": { - "type": "string" - } - }, - "required": [ - "text", - "threadId" - ], - "title": "ThreadRealtimeAppendTextParams", - "type": "object" -} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeAppendTextResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeAppendTextResponse.json deleted file mode 100644 index eb83f18e2e5..00000000000 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeAppendTextResponse.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "EXPERIMENTAL - response for appending realtime text input.", - "title": "ThreadRealtimeAppendTextResponse", - "type": "object" -} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeListVoicesParams.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeListVoicesParams.json deleted file mode 100644 index ca6d70292b9..00000000000 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeListVoicesParams.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "EXPERIMENTAL - list voices supported by thread realtime.", - "title": "ThreadRealtimeListVoicesParams", - "type": "object" -} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeListVoicesResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeListVoicesResponse.json deleted file mode 100644 index 196401c7526..00000000000 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeListVoicesResponse.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "definitions": { - "RealtimeVoice": { - "enum": [ - "alloy", - "arbor", - "ash", - "ballad", - "breeze", - "cedar", - "coral", - "cove", - "echo", - "ember", - "juniper", - "maple", - "marin", - "sage", - "shimmer", - "sol", - "spruce", - "vale", - "verse" - ], - "type": "string" - }, - "RealtimeVoicesList": { - "properties": { - "defaultV1": { - "$ref": "#/definitions/RealtimeVoice" - }, - "defaultV2": { - "$ref": "#/definitions/RealtimeVoice" - }, - "v1": { - "items": { - "$ref": "#/definitions/RealtimeVoice" - }, - "type": "array" - }, - "v2": { - "items": { - "$ref": "#/definitions/RealtimeVoice" - }, - "type": "array" - } - }, - "required": [ - "defaultV1", - "defaultV2", - "v1", - "v2" - ], - "type": "object" - } - }, - "description": "EXPERIMENTAL - response for listing supported realtime voices.", - "properties": { - "voices": { - "$ref": "#/definitions/RealtimeVoicesList" - } - }, - "required": [ - "voices" - ], - "title": "ThreadRealtimeListVoicesResponse", - "type": "object" -} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeStartParams.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeStartParams.json deleted file mode 100644 index 69420969681..00000000000 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeStartParams.json +++ /dev/null @@ -1,130 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "definitions": { - "RealtimeOutputModality": { - "enum": [ - "text", - "audio" - ], - "type": "string" - }, - "RealtimeVoice": { - "enum": [ - "alloy", - "arbor", - "ash", - "ballad", - "breeze", - "cedar", - "coral", - "cove", - "echo", - "ember", - "juniper", - "maple", - "marin", - "sage", - "shimmer", - "sol", - "spruce", - "vale", - "verse" - ], - "type": "string" - }, - "ThreadRealtimeStartTransport": { - "description": "EXPERIMENTAL - transport used by thread realtime.", - "oneOf": [ - { - "properties": { - "type": { - "enum": [ - "websocket" - ], - "title": "WebsocketThreadRealtimeStartTransportType", - "type": "string" - } - }, - "required": [ - "type" - ], - "title": "WebsocketThreadRealtimeStartTransport", - "type": "object" - }, - { - "properties": { - "sdp": { - "description": "SDP offer generated by a WebRTC RTCPeerConnection after configuring audio and the realtime events data channel.", - "type": "string" - }, - "type": { - "enum": [ - "webrtc" - ], - "title": "WebrtcThreadRealtimeStartTransportType", - "type": "string" - } - }, - "required": [ - "sdp", - "type" - ], - "title": "WebrtcThreadRealtimeStartTransport", - "type": "object" - } - ] - } - }, - "description": "EXPERIMENTAL - start a thread-scoped realtime session.", - "properties": { - "outputModality": { - "allOf": [ - { - "$ref": "#/definitions/RealtimeOutputModality" - } - ], - "description": "Selects text or audio output for the realtime session. Transport and voice stay independent so clients can choose how they connect separately from what the model emits." - }, - "prompt": { - "type": [ - "string", - "null" - ] - }, - "realtimeSessionId": { - "type": [ - "string", - "null" - ] - }, - "threadId": { - "type": "string" - }, - "transport": { - "anyOf": [ - { - "$ref": "#/definitions/ThreadRealtimeStartTransport" - }, - { - "type": "null" - } - ] - }, - "voice": { - "anyOf": [ - { - "$ref": "#/definitions/RealtimeVoice" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "outputModality", - "threadId" - ], - "title": "ThreadRealtimeStartParams", - "type": "object" -} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeStartResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeStartResponse.json deleted file mode 100644 index 68a82fd4a40..00000000000 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeStartResponse.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "EXPERIMENTAL - response for starting thread realtime.", - "title": "ThreadRealtimeStartResponse", - "type": "object" -} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeStopParams.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeStopParams.json deleted file mode 100644 index db2a9c3bb08..00000000000 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeStopParams.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "EXPERIMENTAL - stop thread realtime.", - "properties": { - "threadId": { - "type": "string" - } - }, - "required": [ - "threadId" - ], - "title": "ThreadRealtimeStopParams", - "type": "object" -} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeStopResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeStopResponse.json deleted file mode 100644 index 8af68d950de..00000000000 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadRealtimeStopResponse.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "EXPERIMENTAL - response for stopping thread realtime.", - "title": "ThreadRealtimeStopResponse", - "type": "object" -} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadResumeParams.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadResumeParams.json index b487eba977c..d4bdeda0ed3 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadResumeParams.json +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadResumeParams.json @@ -1031,20 +1031,6 @@ "null" ] }, - "excludeTurns": { - "description": "When true, return only thread metadata and live-resume state without populating `thread.turns`. This is useful when the client plans to call `thread/turns/list` immediately after resuming.", - "type": "boolean" - }, - "history": { - "description": "[UNSTABLE] FOR CODEX CLOUD - DO NOT USE. If specified, the thread will be resumed with the provided history instead of loaded from disk.", - "items": { - "$ref": "#/definitions/ResponseItem" - }, - "type": [ - "array", - "null" - ] - }, "model": { "description": "Configuration overrides for the resumed thread, if any.", "type": [ @@ -1058,25 +1044,6 @@ "null" ] }, - "path": { - "default": null, - "description": "[UNSTABLE] Specify the rollout path to resume from. If specified for a non-running thread, the thread_id param will be ignored. If thread_id identifies a running thread, the path must match the active rollout path.", - "type": [ - "string", - "null" - ] - }, - "permissions": { - "description": "Named profile id for the resumed thread. Cannot be combined with `sandbox`.", - "type": [ - "string", - "null" - ] - }, - "persistExtendedHistory": { - "description": "Deprecated and ignored by app-server. Kept only so older clients can continue sending the field while rollout persistence always uses the limited history policy.", - "type": "boolean" - }, "personality": { "anyOf": [ { @@ -1087,16 +1054,6 @@ } ] }, - "runtimeWorkspaceRoots": { - "description": "Replace the thread's runtime workspace roots. Relative paths are resolved against the effective cwd for the thread.", - "items": { - "type": "string" - }, - "type": [ - "array", - "null" - ] - }, "sandbox": { "anyOf": [ { diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadResumeResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadResumeResponse.json index baf97f05bb6..8055ff58fc3 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadResumeResponse.json +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadResumeResponse.json @@ -2238,18 +2238,6 @@ } }, "properties": { - "activePermissionProfile": { - "anyOf": [ - { - "$ref": "#/definitions/ActivePermissionProfile" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Named or implicit built-in profile that produced the active permissions, when known." - }, "approvalPolicy": { "$ref": "#/definitions/AskForApproval" }, @@ -2288,14 +2276,6 @@ } ] }, - "runtimeWorkspaceRoots": { - "default": [], - "description": "Thread-scoped runtime workspace roots used to materialize `:workspace_roots`.", - "items": { - "$ref": "#/definitions/AbsolutePathBuf" - }, - "type": "array" - }, "sandbox": { "allOf": [ { diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadSearchParams.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadSearchParams.json deleted file mode 100644 index ac6d99577ad..00000000000 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadSearchParams.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "definitions": { - "SortDirection": { - "enum": [ - "asc", - "desc" - ], - "type": "string" - }, - "ThreadSortKey": { - "enum": [ - "created_at", - "updated_at" - ], - "type": "string" - }, - "ThreadSourceKind": { - "enum": [ - "cli", - "vscode", - "exec", - "appServer", - "subAgent", - "subAgentReview", - "subAgentCompact", - "subAgentThreadSpawn", - "subAgentOther", - "unknown" - ], - "type": "string" - } - }, - "properties": { - "archived": { - "description": "Optional archived filter; when set to true, only archived threads are returned. If false or null, only non-archived threads are returned.", - "type": [ - "boolean", - "null" - ] - }, - "cursor": { - "description": "Opaque pagination cursor returned by a previous call.", - "type": [ - "string", - "null" - ] - }, - "limit": { - "description": "Optional page size; defaults to a reasonable server-side value.", - "format": "uint32", - "minimum": 0.0, - "type": [ - "integer", - "null" - ] - }, - "searchTerm": { - "description": "Required substring/full-text query for thread search.", - "type": "string" - }, - "sortDirection": { - "anyOf": [ - { - "$ref": "#/definitions/SortDirection" - }, - { - "type": "null" - } - ], - "description": "Optional sort direction; defaults to descending (newest first)." - }, - "sortKey": { - "anyOf": [ - { - "$ref": "#/definitions/ThreadSortKey" - }, - { - "type": "null" - } - ], - "description": "Optional sort key; defaults to created_at." - }, - "sourceKinds": { - "description": "Optional source filter; when set, only sessions from these source kinds are returned. When omitted or empty, defaults to interactive sources.", - "items": { - "$ref": "#/definitions/ThreadSourceKind" - }, - "type": [ - "array", - "null" - ] - } - }, - "required": [ - "searchTerm" - ], - "title": "ThreadSearchParams", - "type": "object" -} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadSearchResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadSearchResponse.json deleted file mode 100644 index 44c9a3da232..00000000000 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadSearchResponse.json +++ /dev/null @@ -1,2097 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "definitions": { - "AbsolutePathBuf": { - "description": "A path that is guaranteed to be absolute and normalized (though it is not guaranteed to be canonicalized or exist on the filesystem).\n\nIMPORTANT: When deserializing an `AbsolutePathBuf`, a base path must be set using [AbsolutePathBufGuard::new]. If no base path is set, the deserialization will fail unless the path being deserialized is already absolute.", - "type": "string" - }, - "AgentPath": { - "type": "string" - }, - "ByteRange": { - "properties": { - "end": { - "format": "uint", - "minimum": 0.0, - "type": "integer" - }, - "start": { - "format": "uint", - "minimum": 0.0, - "type": "integer" - } - }, - "required": [ - "end", - "start" - ], - "type": "object" - }, - "CodexErrorInfo": { - "description": "This translation layer make sure that we expose codex error code in camel case.\n\nWhen an upstream HTTP status is available (for example, from the Responses API or a provider), it is forwarded in `httpStatusCode` on the relevant `codexErrorInfo` variant.", - "oneOf": [ - { - "enum": [ - "contextWindowExceeded", - "usageLimitExceeded", - "serverOverloaded", - "cyberPolicy", - "internalServerError", - "unauthorized", - "badRequest", - "threadRollbackFailed", - "sandboxError", - "other" - ], - "type": "string" - }, - { - "additionalProperties": false, - "properties": { - "httpConnectionFailed": { - "properties": { - "httpStatusCode": { - "format": "uint16", - "minimum": 0.0, - "type": [ - "integer", - "null" - ] - } - }, - "type": "object" - } - }, - "required": [ - "httpConnectionFailed" - ], - "title": "HttpConnectionFailedCodexErrorInfo", - "type": "object" - }, - { - "additionalProperties": false, - "description": "Failed to connect to the response SSE stream.", - "properties": { - "responseStreamConnectionFailed": { - "properties": { - "httpStatusCode": { - "format": "uint16", - "minimum": 0.0, - "type": [ - "integer", - "null" - ] - } - }, - "type": "object" - } - }, - "required": [ - "responseStreamConnectionFailed" - ], - "title": "ResponseStreamConnectionFailedCodexErrorInfo", - "type": "object" - }, - { - "additionalProperties": false, - "description": "The response SSE stream disconnected in the middle of a turn before completion.", - "properties": { - "responseStreamDisconnected": { - "properties": { - "httpStatusCode": { - "format": "uint16", - "minimum": 0.0, - "type": [ - "integer", - "null" - ] - } - }, - "type": "object" - } - }, - "required": [ - "responseStreamDisconnected" - ], - "title": "ResponseStreamDisconnectedCodexErrorInfo", - "type": "object" - }, - { - "additionalProperties": false, - "description": "Reached the retry limit for responses.", - "properties": { - "responseTooManyFailedAttempts": { - "properties": { - "httpStatusCode": { - "format": "uint16", - "minimum": 0.0, - "type": [ - "integer", - "null" - ] - } - }, - "type": "object" - } - }, - "required": [ - "responseTooManyFailedAttempts" - ], - "title": "ResponseTooManyFailedAttemptsCodexErrorInfo", - "type": "object" - }, - { - "additionalProperties": false, - "description": "Returned when `turn/start` or `turn/steer` is submitted while the current active turn cannot accept same-turn steering, for example `/review` or manual `/compact`.", - "properties": { - "activeTurnNotSteerable": { - "properties": { - "turnKind": { - "$ref": "#/definitions/NonSteerableTurnKind" - } - }, - "required": [ - "turnKind" - ], - "type": "object" - } - }, - "required": [ - "activeTurnNotSteerable" - ], - "title": "ActiveTurnNotSteerableCodexErrorInfo", - "type": "object" - } - ] - }, - "CollabAgentState": { - "properties": { - "message": { - "type": [ - "string", - "null" - ] - }, - "status": { - "$ref": "#/definitions/CollabAgentStatus" - } - }, - "required": [ - "status" - ], - "type": "object" - }, - "CollabAgentStatus": { - "enum": [ - "pendingInit", - "running", - "interrupted", - "completed", - "errored", - "shutdown", - "notFound" - ], - "type": "string" - }, - "CollabAgentTool": { - "enum": [ - "spawnAgent", - "sendInput", - "resumeAgent", - "wait", - "closeAgent" - ], - "type": "string" - }, - "CollabAgentToolCallStatus": { - "enum": [ - "inProgress", - "completed", - "failed" - ], - "type": "string" - }, - "CommandAction": { - "oneOf": [ - { - "properties": { - "command": { - "type": "string" - }, - "name": { - "type": "string" - }, - "path": { - "$ref": "#/definitions/AbsolutePathBuf" - }, - "type": { - "enum": [ - "read" - ], - "title": "ReadCommandActionType", - "type": "string" - } - }, - "required": [ - "command", - "name", - "path", - "type" - ], - "title": "ReadCommandAction", - "type": "object" - }, - { - "properties": { - "command": { - "type": "string" - }, - "path": { - "type": [ - "string", - "null" - ] - }, - "type": { - "enum": [ - "listFiles" - ], - "title": "ListFilesCommandActionType", - "type": "string" - } - }, - "required": [ - "command", - "type" - ], - "title": "ListFilesCommandAction", - "type": "object" - }, - { - "properties": { - "command": { - "type": "string" - }, - "path": { - "type": [ - "string", - "null" - ] - }, - "query": { - "type": [ - "string", - "null" - ] - }, - "type": { - "enum": [ - "search" - ], - "title": "SearchCommandActionType", - "type": "string" - } - }, - "required": [ - "command", - "type" - ], - "title": "SearchCommandAction", - "type": "object" - }, - { - "properties": { - "command": { - "type": "string" - }, - "type": { - "enum": [ - "unknown" - ], - "title": "UnknownCommandActionType", - "type": "string" - } - }, - "required": [ - "command", - "type" - ], - "title": "UnknownCommandAction", - "type": "object" - } - ] - }, - "CommandExecutionSource": { - "enum": [ - "agent", - "userShell", - "unifiedExecStartup", - "unifiedExecInteraction" - ], - "type": "string" - }, - "CommandExecutionStatus": { - "enum": [ - "inProgress", - "completed", - "failed", - "declined" - ], - "type": "string" - }, - "DynamicToolCallOutputContentItem": { - "oneOf": [ - { - "properties": { - "text": { - "type": "string" - }, - "type": { - "enum": [ - "inputText" - ], - "title": "InputTextDynamicToolCallOutputContentItemType", - "type": "string" - } - }, - "required": [ - "text", - "type" - ], - "title": "InputTextDynamicToolCallOutputContentItem", - "type": "object" - }, - { - "properties": { - "imageUrl": { - "type": "string" - }, - "type": { - "enum": [ - "inputImage" - ], - "title": "InputImageDynamicToolCallOutputContentItemType", - "type": "string" - } - }, - "required": [ - "imageUrl", - "type" - ], - "title": "InputImageDynamicToolCallOutputContentItem", - "type": "object" - } - ] - }, - "DynamicToolCallStatus": { - "enum": [ - "inProgress", - "completed", - "failed" - ], - "type": "string" - }, - "FileUpdateChange": { - "properties": { - "diff": { - "type": "string" - }, - "kind": { - "$ref": "#/definitions/PatchChangeKind" - }, - "path": { - "type": "string" - } - }, - "required": [ - "diff", - "kind", - "path" - ], - "type": "object" - }, - "GitInfo": { - "properties": { - "branch": { - "type": [ - "string", - "null" - ] - }, - "originUrl": { - "type": [ - "string", - "null" - ] - }, - "sha": { - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "HookPromptFragment": { - "properties": { - "hookRunId": { - "type": "string" - }, - "text": { - "type": "string" - } - }, - "required": [ - "hookRunId", - "text" - ], - "type": "object" - }, - "ImageDetail": { - "enum": [ - "high", - "original" - ], - "type": "string" - }, - "McpToolCallError": { - "properties": { - "message": { - "type": "string" - } - }, - "required": [ - "message" - ], - "type": "object" - }, - "McpToolCallResult": { - "properties": { - "_meta": true, - "content": { - "items": true, - "type": "array" - }, - "structuredContent": true - }, - "required": [ - "content" - ], - "type": "object" - }, - "McpToolCallStatus": { - "enum": [ - "inProgress", - "completed", - "failed" - ], - "type": "string" - }, - "MemoryCitation": { - "properties": { - "entries": { - "items": { - "$ref": "#/definitions/MemoryCitationEntry" - }, - "type": "array" - }, - "threadIds": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - "required": [ - "entries", - "threadIds" - ], - "type": "object" - }, - "MemoryCitationEntry": { - "properties": { - "lineEnd": { - "format": "uint32", - "minimum": 0.0, - "type": "integer" - }, - "lineStart": { - "format": "uint32", - "minimum": 0.0, - "type": "integer" - }, - "note": { - "type": "string" - }, - "path": { - "type": "string" - } - }, - "required": [ - "lineEnd", - "lineStart", - "note", - "path" - ], - "type": "object" - }, - "MessagePhase": { - "description": "Classifies an assistant message as interim commentary or final answer text.\n\nProviders do not emit this consistently, so callers must treat `None` as \"phase unknown\" and keep compatibility behavior for legacy models.", - "oneOf": [ - { - "description": "Mid-turn assistant text (for example preamble/progress narration).\n\nAdditional tool calls or assistant output may follow before turn completion.", - "enum": [ - "commentary" - ], - "type": "string" - }, - { - "description": "The assistant's terminal answer text for the current turn.", - "enum": [ - "final_answer" - ], - "type": "string" - } - ] - }, - "NonSteerableTurnKind": { - "enum": [ - "review", - "compact" - ], - "type": "string" - }, - "PatchApplyStatus": { - "enum": [ - "inProgress", - "completed", - "failed", - "declined" - ], - "type": "string" - }, - "PatchChangeKind": { - "oneOf": [ - { - "properties": { - "type": { - "enum": [ - "add" - ], - "title": "AddPatchChangeKindType", - "type": "string" - } - }, - "required": [ - "type" - ], - "title": "AddPatchChangeKind", - "type": "object" - }, - { - "properties": { - "type": { - "enum": [ - "delete" - ], - "title": "DeletePatchChangeKindType", - "type": "string" - } - }, - "required": [ - "type" - ], - "title": "DeletePatchChangeKind", - "type": "object" - }, - { - "properties": { - "move_path": { - "type": [ - "string", - "null" - ] - }, - "type": { - "enum": [ - "update" - ], - "title": "UpdatePatchChangeKindType", - "type": "string" - } - }, - "required": [ - "type" - ], - "title": "UpdatePatchChangeKind", - "type": "object" - } - ] - }, - "ReasoningEffort": { - "description": "See https://platform.openai.com/docs/guides/reasoning?api-mode=responses#get-started-with-reasoning", - "enum": [ - "none", - "minimal", - "low", - "medium", - "high", - "xhigh" - ], - "type": "string" - }, - "SessionSource": { - "oneOf": [ - { - "enum": [ - "cli", - "vscode", - "exec", - "appServer", - "unknown" - ], - "type": "string" - }, - { - "additionalProperties": false, - "properties": { - "custom": { - "type": "string" - } - }, - "required": [ - "custom" - ], - "title": "CustomSessionSource", - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "subAgent": { - "$ref": "#/definitions/SubAgentSource" - } - }, - "required": [ - "subAgent" - ], - "title": "SubAgentSessionSource", - "type": "object" - } - ] - }, - "SubAgentSource": { - "oneOf": [ - { - "enum": [ - "review", - "compact", - "memory_consolidation" - ], - "type": "string" - }, - { - "additionalProperties": false, - "properties": { - "thread_spawn": { - "properties": { - "agent_nickname": { - "default": null, - "type": [ - "string", - "null" - ] - }, - "agent_path": { - "anyOf": [ - { - "$ref": "#/definitions/AgentPath" - }, - { - "type": "null" - } - ], - "default": null - }, - "agent_role": { - "default": null, - "type": [ - "string", - "null" - ] - }, - "depth": { - "format": "int32", - "type": "integer" - }, - "parent_thread_id": { - "$ref": "#/definitions/ThreadId" - } - }, - "required": [ - "depth", - "parent_thread_id" - ], - "type": "object" - } - }, - "required": [ - "thread_spawn" - ], - "title": "ThreadSpawnSubAgentSource", - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "other": { - "type": "string" - } - }, - "required": [ - "other" - ], - "title": "OtherSubAgentSource", - "type": "object" - } - ] - }, - "TextElement": { - "properties": { - "byteRange": { - "allOf": [ - { - "$ref": "#/definitions/ByteRange" - } - ], - "description": "Byte range in the parent `text` buffer that this element occupies." - }, - "placeholder": { - "description": "Optional human-readable placeholder for the element, displayed in the UI.", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "byteRange" - ], - "type": "object" - }, - "Thread": { - "properties": { - "agentNickname": { - "description": "Optional random unique nickname assigned to an AgentControl-spawned sub-agent.", - "type": [ - "string", - "null" - ] - }, - "agentRole": { - "description": "Optional role (agent_role) assigned to an AgentControl-spawned sub-agent.", - "type": [ - "string", - "null" - ] - }, - "cliVersion": { - "description": "Version of the CLI that created the thread.", - "type": "string" - }, - "createdAt": { - "description": "Unix timestamp (in seconds) when the thread was created.", - "format": "int64", - "type": "integer" - }, - "cwd": { - "allOf": [ - { - "$ref": "#/definitions/AbsolutePathBuf" - } - ], - "description": "Working directory captured for the thread." - }, - "ephemeral": { - "description": "Whether the thread is ephemeral and should not be materialized on disk.", - "type": "boolean" - }, - "forkedFromId": { - "description": "Source thread id when this thread was created by forking another thread.", - "type": [ - "string", - "null" - ] - }, - "gitInfo": { - "anyOf": [ - { - "$ref": "#/definitions/GitInfo" - }, - { - "type": "null" - } - ], - "description": "Optional Git metadata captured when the thread was created." - }, - "id": { - "type": "string" - }, - "modelProvider": { - "description": "Model provider used for this thread (for example, 'openai').", - "type": "string" - }, - "name": { - "description": "Optional user-facing thread title.", - "type": [ - "string", - "null" - ] - }, - "path": { - "description": "[UNSTABLE] Path to the thread on disk.", - "type": [ - "string", - "null" - ] - }, - "preview": { - "description": "Usually the first user message in the thread, if available.", - "type": "string" - }, - "sessionId": { - "description": "Session id shared by threads that belong to the same session tree.", - "type": "string" - }, - "source": { - "allOf": [ - { - "$ref": "#/definitions/SessionSource" - } - ], - "description": "Origin of the thread (CLI, VSCode, codex exec, codex app-server, etc.)." - }, - "status": { - "allOf": [ - { - "$ref": "#/definitions/ThreadStatus" - } - ], - "description": "Current runtime status for the thread." - }, - "threadSource": { - "anyOf": [ - { - "$ref": "#/definitions/ThreadSource" - }, - { - "type": "null" - } - ], - "description": "Optional analytics source classification for this thread." - }, - "turns": { - "description": "Only populated on `thread/resume`, `thread/rollback`, `thread/fork`, and `thread/read` (when `includeTurns` is true) responses. For all other responses and notifications returning a Thread, the turns field will be an empty list.", - "items": { - "$ref": "#/definitions/Turn" - }, - "type": "array" - }, - "updatedAt": { - "description": "Unix timestamp (in seconds) when the thread was last updated.", - "format": "int64", - "type": "integer" - } - }, - "required": [ - "cliVersion", - "createdAt", - "cwd", - "ephemeral", - "id", - "modelProvider", - "preview", - "sessionId", - "source", - "status", - "turns", - "updatedAt" - ], - "type": "object" - }, - "ThreadActiveFlag": { - "enum": [ - "waitingOnApproval", - "waitingOnUserInput" - ], - "type": "string" - }, - "ThreadId": { - "type": "string" - }, - "ThreadItem": { - "oneOf": [ - { - "properties": { - "content": { - "items": { - "$ref": "#/definitions/UserInput" - }, - "type": "array" - }, - "id": { - "type": "string" - }, - "type": { - "enum": [ - "userMessage" - ], - "title": "UserMessageThreadItemType", - "type": "string" - } - }, - "required": [ - "content", - "id", - "type" - ], - "title": "UserMessageThreadItem", - "type": "object" - }, - { - "properties": { - "fragments": { - "items": { - "$ref": "#/definitions/HookPromptFragment" - }, - "type": "array" - }, - "id": { - "type": "string" - }, - "type": { - "enum": [ - "hookPrompt" - ], - "title": "HookPromptThreadItemType", - "type": "string" - } - }, - "required": [ - "fragments", - "id", - "type" - ], - "title": "HookPromptThreadItem", - "type": "object" - }, - { - "properties": { - "id": { - "type": "string" - }, - "memoryCitation": { - "anyOf": [ - { - "$ref": "#/definitions/MemoryCitation" - }, - { - "type": "null" - } - ], - "default": null - }, - "phase": { - "anyOf": [ - { - "$ref": "#/definitions/MessagePhase" - }, - { - "type": "null" - } - ], - "default": null - }, - "text": { - "type": "string" - }, - "type": { - "enum": [ - "agentMessage" - ], - "title": "AgentMessageThreadItemType", - "type": "string" - } - }, - "required": [ - "id", - "text", - "type" - ], - "title": "AgentMessageThreadItem", - "type": "object" - }, - { - "description": "EXPERIMENTAL - proposed plan item content. The completed plan item is authoritative and may not match the concatenation of `PlanDelta` text.", - "properties": { - "id": { - "type": "string" - }, - "text": { - "type": "string" - }, - "type": { - "enum": [ - "plan" - ], - "title": "PlanThreadItemType", - "type": "string" - } - }, - "required": [ - "id", - "text", - "type" - ], - "title": "PlanThreadItem", - "type": "object" - }, - { - "properties": { - "content": { - "default": [], - "items": { - "type": "string" - }, - "type": "array" - }, - "id": { - "type": "string" - }, - "summary": { - "default": [], - "items": { - "type": "string" - }, - "type": "array" - }, - "type": { - "enum": [ - "reasoning" - ], - "title": "ReasoningThreadItemType", - "type": "string" - } - }, - "required": [ - "id", - "type" - ], - "title": "ReasoningThreadItem", - "type": "object" - }, - { - "properties": { - "aggregatedOutput": { - "description": "The command's output, aggregated from stdout and stderr.", - "type": [ - "string", - "null" - ] - }, - "command": { - "description": "The command to be executed.", - "type": "string" - }, - "commandActions": { - "description": "A best-effort parsing of the command to understand the action(s) it will perform. This returns a list of CommandAction objects because a single shell command may be composed of many commands piped together.", - "items": { - "$ref": "#/definitions/CommandAction" - }, - "type": "array" - }, - "cwd": { - "allOf": [ - { - "$ref": "#/definitions/AbsolutePathBuf" - } - ], - "description": "The command's working directory." - }, - "durationMs": { - "description": "The duration of the command execution in milliseconds.", - "format": "int64", - "type": [ - "integer", - "null" - ] - }, - "exitCode": { - "description": "The command's exit code.", - "format": "int32", - "type": [ - "integer", - "null" - ] - }, - "id": { - "type": "string" - }, - "processId": { - "description": "Identifier for the underlying PTY process (when available).", - "type": [ - "string", - "null" - ] - }, - "source": { - "allOf": [ - { - "$ref": "#/definitions/CommandExecutionSource" - } - ], - "default": "agent" - }, - "status": { - "$ref": "#/definitions/CommandExecutionStatus" - }, - "type": { - "enum": [ - "commandExecution" - ], - "title": "CommandExecutionThreadItemType", - "type": "string" - } - }, - "required": [ - "command", - "commandActions", - "cwd", - "id", - "status", - "type" - ], - "title": "CommandExecutionThreadItem", - "type": "object" - }, - { - "properties": { - "changes": { - "items": { - "$ref": "#/definitions/FileUpdateChange" - }, - "type": "array" - }, - "id": { - "type": "string" - }, - "status": { - "$ref": "#/definitions/PatchApplyStatus" - }, - "type": { - "enum": [ - "fileChange" - ], - "title": "FileChangeThreadItemType", - "type": "string" - } - }, - "required": [ - "changes", - "id", - "status", - "type" - ], - "title": "FileChangeThreadItem", - "type": "object" - }, - { - "properties": { - "arguments": true, - "durationMs": { - "description": "The duration of the MCP tool call in milliseconds.", - "format": "int64", - "type": [ - "integer", - "null" - ] - }, - "error": { - "anyOf": [ - { - "$ref": "#/definitions/McpToolCallError" - }, - { - "type": "null" - } - ] - }, - "id": { - "type": "string" - }, - "mcpAppResourceUri": { - "type": [ - "string", - "null" - ] - }, - "pluginId": { - "type": [ - "string", - "null" - ] - }, - "result": { - "anyOf": [ - { - "$ref": "#/definitions/McpToolCallResult" - }, - { - "type": "null" - } - ] - }, - "server": { - "type": "string" - }, - "status": { - "$ref": "#/definitions/McpToolCallStatus" - }, - "tool": { - "type": "string" - }, - "type": { - "enum": [ - "mcpToolCall" - ], - "title": "McpToolCallThreadItemType", - "type": "string" - } - }, - "required": [ - "arguments", - "id", - "server", - "status", - "tool", - "type" - ], - "title": "McpToolCallThreadItem", - "type": "object" - }, - { - "properties": { - "arguments": true, - "contentItems": { - "items": { - "$ref": "#/definitions/DynamicToolCallOutputContentItem" - }, - "type": [ - "array", - "null" - ] - }, - "durationMs": { - "description": "The duration of the dynamic tool call in milliseconds.", - "format": "int64", - "type": [ - "integer", - "null" - ] - }, - "id": { - "type": "string" - }, - "namespace": { - "type": [ - "string", - "null" - ] - }, - "status": { - "$ref": "#/definitions/DynamicToolCallStatus" - }, - "success": { - "type": [ - "boolean", - "null" - ] - }, - "tool": { - "type": "string" - }, - "type": { - "enum": [ - "dynamicToolCall" - ], - "title": "DynamicToolCallThreadItemType", - "type": "string" - } - }, - "required": [ - "arguments", - "id", - "status", - "tool", - "type" - ], - "title": "DynamicToolCallThreadItem", - "type": "object" - }, - { - "properties": { - "agentsStates": { - "additionalProperties": { - "$ref": "#/definitions/CollabAgentState" - }, - "description": "Last known status of the target agents, when available.", - "type": "object" - }, - "id": { - "description": "Unique identifier for this collab tool call.", - "type": "string" - }, - "model": { - "description": "Model requested for the spawned agent, when applicable.", - "type": [ - "string", - "null" - ] - }, - "prompt": { - "description": "Prompt text sent as part of the collab tool call, when available.", - "type": [ - "string", - "null" - ] - }, - "reasoningEffort": { - "anyOf": [ - { - "$ref": "#/definitions/ReasoningEffort" - }, - { - "type": "null" - } - ], - "description": "Reasoning effort requested for the spawned agent, when applicable." - }, - "receiverThreadIds": { - "description": "Thread ID of the receiving agent, when applicable. In case of spawn operation, this corresponds to the newly spawned agent.", - "items": { - "type": "string" - }, - "type": "array" - }, - "senderThreadId": { - "description": "Thread ID of the agent issuing the collab request.", - "type": "string" - }, - "status": { - "allOf": [ - { - "$ref": "#/definitions/CollabAgentToolCallStatus" - } - ], - "description": "Current status of the collab tool call." - }, - "tool": { - "allOf": [ - { - "$ref": "#/definitions/CollabAgentTool" - } - ], - "description": "Name of the collab tool that was invoked." - }, - "type": { - "enum": [ - "collabAgentToolCall" - ], - "title": "CollabAgentToolCallThreadItemType", - "type": "string" - } - }, - "required": [ - "agentsStates", - "id", - "receiverThreadIds", - "senderThreadId", - "status", - "tool", - "type" - ], - "title": "CollabAgentToolCallThreadItem", - "type": "object" - }, - { - "properties": { - "action": { - "anyOf": [ - { - "$ref": "#/definitions/WebSearchAction" - }, - { - "type": "null" - } - ] - }, - "id": { - "type": "string" - }, - "query": { - "type": "string" - }, - "type": { - "enum": [ - "webSearch" - ], - "title": "WebSearchThreadItemType", - "type": "string" - } - }, - "required": [ - "id", - "query", - "type" - ], - "title": "WebSearchThreadItem", - "type": "object" - }, - { - "properties": { - "id": { - "type": "string" - }, - "path": { - "$ref": "#/definitions/AbsolutePathBuf" - }, - "type": { - "enum": [ - "imageView" - ], - "title": "ImageViewThreadItemType", - "type": "string" - } - }, - "required": [ - "id", - "path", - "type" - ], - "title": "ImageViewThreadItem", - "type": "object" - }, - { - "properties": { - "id": { - "type": "string" - }, - "result": { - "type": "string" - }, - "revisedPrompt": { - "type": [ - "string", - "null" - ] - }, - "savedPath": { - "anyOf": [ - { - "$ref": "#/definitions/AbsolutePathBuf" - }, - { - "type": "null" - } - ] - }, - "status": { - "type": "string" - }, - "type": { - "enum": [ - "imageGeneration" - ], - "title": "ImageGenerationThreadItemType", - "type": "string" - } - }, - "required": [ - "id", - "result", - "status", - "type" - ], - "title": "ImageGenerationThreadItem", - "type": "object" - }, - { - "properties": { - "id": { - "type": "string" - }, - "review": { - "type": "string" - }, - "type": { - "enum": [ - "enteredReviewMode" - ], - "title": "EnteredReviewModeThreadItemType", - "type": "string" - } - }, - "required": [ - "id", - "review", - "type" - ], - "title": "EnteredReviewModeThreadItem", - "type": "object" - }, - { - "properties": { - "id": { - "type": "string" - }, - "review": { - "type": "string" - }, - "type": { - "enum": [ - "exitedReviewMode" - ], - "title": "ExitedReviewModeThreadItemType", - "type": "string" - } - }, - "required": [ - "id", - "review", - "type" - ], - "title": "ExitedReviewModeThreadItem", - "type": "object" - }, - { - "properties": { - "id": { - "type": "string" - }, - "type": { - "enum": [ - "contextCompaction" - ], - "title": "ContextCompactionThreadItemType", - "type": "string" - } - }, - "required": [ - "id", - "type" - ], - "title": "ContextCompactionThreadItem", - "type": "object" - } - ] - }, - "ThreadSearchResult": { - "properties": { - "snippet": { - "type": "string" - }, - "thread": { - "$ref": "#/definitions/Thread" - } - }, - "required": [ - "snippet", - "thread" - ], - "type": "object" - }, - "ThreadSource": { - "enum": [ - "user", - "subagent", - "memory_consolidation" - ], - "type": "string" - }, - "ThreadStatus": { - "oneOf": [ - { - "properties": { - "type": { - "enum": [ - "notLoaded" - ], - "title": "NotLoadedThreadStatusType", - "type": "string" - } - }, - "required": [ - "type" - ], - "title": "NotLoadedThreadStatus", - "type": "object" - }, - { - "properties": { - "type": { - "enum": [ - "idle" - ], - "title": "IdleThreadStatusType", - "type": "string" - } - }, - "required": [ - "type" - ], - "title": "IdleThreadStatus", - "type": "object" - }, - { - "properties": { - "type": { - "enum": [ - "systemError" - ], - "title": "SystemErrorThreadStatusType", - "type": "string" - } - }, - "required": [ - "type" - ], - "title": "SystemErrorThreadStatus", - "type": "object" - }, - { - "properties": { - "activeFlags": { - "items": { - "$ref": "#/definitions/ThreadActiveFlag" - }, - "type": "array" - }, - "type": { - "enum": [ - "active" - ], - "title": "ActiveThreadStatusType", - "type": "string" - } - }, - "required": [ - "activeFlags", - "type" - ], - "title": "ActiveThreadStatus", - "type": "object" - } - ] - }, - "Turn": { - "properties": { - "completedAt": { - "description": "Unix timestamp (in seconds) when the turn completed.", - "format": "int64", - "type": [ - "integer", - "null" - ] - }, - "durationMs": { - "description": "Duration between turn start and completion in milliseconds, if known.", - "format": "int64", - "type": [ - "integer", - "null" - ] - }, - "error": { - "anyOf": [ - { - "$ref": "#/definitions/TurnError" - }, - { - "type": "null" - } - ], - "description": "Only populated when the Turn's status is failed." - }, - "id": { - "type": "string" - }, - "items": { - "description": "Thread items currently included in this turn payload.", - "items": { - "$ref": "#/definitions/ThreadItem" - }, - "type": "array" - }, - "itemsView": { - "allOf": [ - { - "$ref": "#/definitions/TurnItemsView" - } - ], - "default": "full", - "description": "Describes how much of `items` has been loaded for this turn." - }, - "startedAt": { - "description": "Unix timestamp (in seconds) when the turn started.", - "format": "int64", - "type": [ - "integer", - "null" - ] - }, - "status": { - "$ref": "#/definitions/TurnStatus" - } - }, - "required": [ - "id", - "items", - "status" - ], - "type": "object" - }, - "TurnError": { - "properties": { - "additionalDetails": { - "default": null, - "type": [ - "string", - "null" - ] - }, - "codexErrorInfo": { - "anyOf": [ - { - "$ref": "#/definitions/CodexErrorInfo" - }, - { - "type": "null" - } - ] - }, - "message": { - "type": "string" - } - }, - "required": [ - "message" - ], - "type": "object" - }, - "TurnItemsView": { - "oneOf": [ - { - "description": "`items` was not loaded for this turn. The field is intentionally empty.", - "enum": [ - "notLoaded" - ], - "type": "string" - }, - { - "description": "`items` contains only a display summary for this turn.", - "enum": [ - "summary" - ], - "type": "string" - }, - { - "description": "`items` contains every ThreadItem available from persisted app-server history for this turn.", - "enum": [ - "full" - ], - "type": "string" - } - ] - }, - "TurnStatus": { - "enum": [ - "completed", - "interrupted", - "failed", - "inProgress" - ], - "type": "string" - }, - "UserInput": { - "oneOf": [ - { - "properties": { - "text": { - "type": "string" - }, - "text_elements": { - "default": [], - "description": "UI-defined spans within `text` used to render or persist special elements.", - "items": { - "$ref": "#/definitions/TextElement" - }, - "type": "array" - }, - "type": { - "enum": [ - "text" - ], - "title": "TextUserInputType", - "type": "string" - } - }, - "required": [ - "text", - "type" - ], - "title": "TextUserInput", - "type": "object" - }, - { - "properties": { - "detail": { - "anyOf": [ - { - "$ref": "#/definitions/ImageDetail" - }, - { - "type": "null" - } - ], - "default": null - }, - "type": { - "enum": [ - "image" - ], - "title": "ImageUserInputType", - "type": "string" - }, - "url": { - "type": "string" - } - }, - "required": [ - "type", - "url" - ], - "title": "ImageUserInput", - "type": "object" - }, - { - "properties": { - "detail": { - "anyOf": [ - { - "$ref": "#/definitions/ImageDetail" - }, - { - "type": "null" - } - ], - "default": null - }, - "path": { - "type": "string" - }, - "type": { - "enum": [ - "localImage" - ], - "title": "LocalImageUserInputType", - "type": "string" - } - }, - "required": [ - "path", - "type" - ], - "title": "LocalImageUserInput", - "type": "object" - }, - { - "properties": { - "name": { - "type": "string" - }, - "path": { - "type": "string" - }, - "type": { - "enum": [ - "skill" - ], - "title": "SkillUserInputType", - "type": "string" - } - }, - "required": [ - "name", - "path", - "type" - ], - "title": "SkillUserInput", - "type": "object" - }, - { - "properties": { - "name": { - "type": "string" - }, - "path": { - "type": "string" - }, - "type": { - "enum": [ - "mention" - ], - "title": "MentionUserInputType", - "type": "string" - } - }, - "required": [ - "name", - "path", - "type" - ], - "title": "MentionUserInput", - "type": "object" - } - ] - }, - "WebSearchAction": { - "oneOf": [ - { - "properties": { - "queries": { - "items": { - "type": "string" - }, - "type": [ - "array", - "null" - ] - }, - "query": { - "type": [ - "string", - "null" - ] - }, - "type": { - "enum": [ - "search" - ], - "title": "SearchWebSearchActionType", - "type": "string" - } - }, - "required": [ - "type" - ], - "title": "SearchWebSearchAction", - "type": "object" - }, - { - "properties": { - "type": { - "enum": [ - "openPage" - ], - "title": "OpenPageWebSearchActionType", - "type": "string" - }, - "url": { - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "type" - ], - "title": "OpenPageWebSearchAction", - "type": "object" - }, - { - "properties": { - "pattern": { - "type": [ - "string", - "null" - ] - }, - "type": { - "enum": [ - "findInPage" - ], - "title": "FindInPageWebSearchActionType", - "type": "string" - }, - "url": { - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "type" - ], - "title": "FindInPageWebSearchAction", - "type": "object" - }, - { - "properties": { - "type": { - "enum": [ - "other" - ], - "title": "OtherWebSearchActionType", - "type": "string" - } - }, - "required": [ - "type" - ], - "title": "OtherWebSearchAction", - "type": "object" - } - ] - } - }, - "properties": { - "backwardsCursor": { - "description": "Opaque cursor to pass as `cursor` when reversing `sortDirection`. This is only populated when the page contains at least one thread. Use it with the opposite `sortDirection`; for timestamp sorts it anchors at the start of the page timestamp so same-second updates are not skipped.", - "type": [ - "string", - "null" - ] - }, - "data": { - "items": { - "$ref": "#/definitions/ThreadSearchResult" - }, - "type": "array" - }, - "nextCursor": { - "description": "Opaque cursor to pass to the next call to continue after the last item. if None, there are no more items to return.", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "data" - ], - "title": "ThreadSearchResponse", - "type": "object" -} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadSettingsUpdateParams.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadSettingsUpdateParams.json deleted file mode 100644 index ba0c881e0f4..00000000000 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadSettingsUpdateParams.json +++ /dev/null @@ -1,381 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "definitions": { - "AbsolutePathBuf": { - "description": "A path that is guaranteed to be absolute and normalized (though it is not guaranteed to be canonicalized or exist on the filesystem).\n\nIMPORTANT: When deserializing an `AbsolutePathBuf`, a base path must be set using [AbsolutePathBufGuard::new]. If no base path is set, the deserialization will fail unless the path being deserialized is already absolute.", - "type": "string" - }, - "ApprovalsReviewer": { - "description": "Configures who approval requests are routed to for review. Examples include sandbox escapes, blocked network access, MCP approval prompts, and ARC escalations. Defaults to `user`. `auto_review` uses a carefully prompted subagent to gather relevant context and apply a risk-based decision framework before approving or denying the request. The legacy value `guardian_subagent` is accepted for compatibility.", - "enum": [ - "user", - "auto_review", - "guardian_subagent" - ], - "type": "string" - }, - "AskForApproval": { - "oneOf": [ - { - "enum": [ - "untrusted", - "on-failure", - "on-request", - "never" - ], - "type": "string" - }, - { - "additionalProperties": false, - "properties": { - "granular": { - "properties": { - "mcp_elicitations": { - "type": "boolean" - }, - "request_permissions": { - "default": false, - "type": "boolean" - }, - "rules": { - "type": "boolean" - }, - "sandbox_approval": { - "type": "boolean" - }, - "skill_approval": { - "default": false, - "type": "boolean" - } - }, - "required": [ - "mcp_elicitations", - "rules", - "sandbox_approval" - ], - "type": "object" - } - }, - "required": [ - "granular" - ], - "title": "GranularAskForApproval", - "type": "object" - } - ] - }, - "CollaborationMode": { - "description": "Collaboration mode for a Codex session.", - "properties": { - "mode": { - "$ref": "#/definitions/ModeKind" - }, - "settings": { - "$ref": "#/definitions/Settings" - } - }, - "required": [ - "mode", - "settings" - ], - "type": "object" - }, - "ModeKind": { - "description": "Initial collaboration mode to use when the TUI starts.", - "enum": [ - "plan", - "default" - ], - "type": "string" - }, - "NetworkAccess": { - "enum": [ - "restricted", - "enabled" - ], - "type": "string" - }, - "Personality": { - "enum": [ - "none", - "friendly", - "pragmatic" - ], - "type": "string" - }, - "ReasoningEffort": { - "description": "See https://platform.openai.com/docs/guides/reasoning?api-mode=responses#get-started-with-reasoning", - "enum": [ - "none", - "minimal", - "low", - "medium", - "high", - "xhigh" - ], - "type": "string" - }, - "ReasoningSummary": { - "description": "A summary of the reasoning performed by the model. This can be useful for debugging and understanding the model's reasoning process. See https://platform.openai.com/docs/guides/reasoning?api-mode=responses#reasoning-summaries", - "oneOf": [ - { - "enum": [ - "auto", - "concise", - "detailed" - ], - "type": "string" - }, - { - "description": "Option to disable reasoning summaries.", - "enum": [ - "none" - ], - "type": "string" - } - ] - }, - "SandboxPolicy": { - "oneOf": [ - { - "properties": { - "type": { - "enum": [ - "dangerFullAccess" - ], - "title": "DangerFullAccessSandboxPolicyType", - "type": "string" - } - }, - "required": [ - "type" - ], - "title": "DangerFullAccessSandboxPolicy", - "type": "object" - }, - { - "properties": { - "networkAccess": { - "default": false, - "type": "boolean" - }, - "type": { - "enum": [ - "readOnly" - ], - "title": "ReadOnlySandboxPolicyType", - "type": "string" - } - }, - "required": [ - "type" - ], - "title": "ReadOnlySandboxPolicy", - "type": "object" - }, - { - "properties": { - "networkAccess": { - "allOf": [ - { - "$ref": "#/definitions/NetworkAccess" - } - ], - "default": "restricted" - }, - "type": { - "enum": [ - "externalSandbox" - ], - "title": "ExternalSandboxSandboxPolicyType", - "type": "string" - } - }, - "required": [ - "type" - ], - "title": "ExternalSandboxSandboxPolicy", - "type": "object" - }, - { - "properties": { - "excludeSlashTmp": { - "default": false, - "type": "boolean" - }, - "excludeTmpdirEnvVar": { - "default": false, - "type": "boolean" - }, - "networkAccess": { - "default": false, - "type": "boolean" - }, - "type": { - "enum": [ - "workspaceWrite" - ], - "title": "WorkspaceWriteSandboxPolicyType", - "type": "string" - }, - "writableRoots": { - "default": [], - "items": { - "$ref": "#/definitions/AbsolutePathBuf" - }, - "type": "array" - } - }, - "required": [ - "type" - ], - "title": "WorkspaceWriteSandboxPolicy", - "type": "object" - } - ] - }, - "Settings": { - "description": "Settings for a collaboration mode.", - "properties": { - "developer_instructions": { - "type": [ - "string", - "null" - ] - }, - "model": { - "type": "string" - }, - "reasoning_effort": { - "anyOf": [ - { - "$ref": "#/definitions/ReasoningEffort" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "model" - ], - "type": "object" - } - }, - "properties": { - "approvalPolicy": { - "anyOf": [ - { - "$ref": "#/definitions/AskForApproval" - }, - { - "type": "null" - } - ], - "description": "Override the approval policy for subsequent turns." - }, - "approvalsReviewer": { - "anyOf": [ - { - "$ref": "#/definitions/ApprovalsReviewer" - }, - { - "type": "null" - } - ], - "description": "Override where approval requests are routed for subsequent turns." - }, - "collaborationMode": { - "anyOf": [ - { - "$ref": "#/definitions/CollaborationMode" - }, - { - "type": "null" - } - ], - "description": "EXPERIMENTAL - Set a pre-set collaboration mode for subsequent turns.\n\nFor `collaboration_mode.settings.developer_instructions`, `null` means \"use the built-in instructions for the selected mode\"." - }, - "cwd": { - "description": "Override the working directory for subsequent turns.", - "type": [ - "string", - "null" - ] - }, - "effort": { - "anyOf": [ - { - "$ref": "#/definitions/ReasoningEffort" - }, - { - "type": "null" - } - ], - "description": "Override the reasoning effort for subsequent turns." - }, - "model": { - "description": "Override the model for subsequent turns.", - "type": [ - "string", - "null" - ] - }, - "permissions": { - "description": "Select a named permissions profile id for subsequent turns. Cannot be combined with `sandboxPolicy`.", - "type": [ - "string", - "null" - ] - }, - "personality": { - "anyOf": [ - { - "$ref": "#/definitions/Personality" - }, - { - "type": "null" - } - ], - "description": "Override the personality for subsequent turns." - }, - "sandboxPolicy": { - "anyOf": [ - { - "$ref": "#/definitions/SandboxPolicy" - }, - { - "type": "null" - } - ], - "description": "Override the sandbox policy for subsequent turns." - }, - "serviceTier": { - "description": "Override the service tier for subsequent turns. `null` clears the current service tier; omission leaves it unchanged.", - "type": [ - "string", - "null" - ] - }, - "summary": { - "anyOf": [ - { - "$ref": "#/definitions/ReasoningSummary" - }, - { - "type": "null" - } - ], - "description": "Override the reasoning summary for subsequent turns." - }, - "threadId": { - "type": "string" - } - }, - "required": [ - "threadId" - ], - "title": "ThreadSettingsUpdateParams", - "type": "object" -} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadSettingsUpdateResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadSettingsUpdateResponse.json deleted file mode 100644 index 33c8576eddf..00000000000 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadSettingsUpdateResponse.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "ThreadSettingsUpdateResponse", - "type": "object" -} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadStartParams.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadStartParams.json index e7d15a5c5d3..99b25490ab1 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadStartParams.json +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadStartParams.json @@ -184,42 +184,12 @@ "null" ] }, - "dynamicTools": { - "items": { - "$ref": "#/definitions/DynamicToolSpec" - }, - "type": [ - "array", - "null" - ] - }, - "environments": { - "description": "Optional sticky environments for this thread.\n\nOmitted selects the default environment when environment access is enabled. Empty disables environment access for turns that do not provide a turn override. Non-empty selects the first environment as the current turn environment.", - "items": { - "$ref": "#/definitions/TurnEnvironmentParams" - }, - "type": [ - "array", - "null" - ] - }, "ephemeral": { "type": [ "boolean", "null" ] }, - "experimentalRawEvents": { - "description": "If true, opt into emitting raw Responses API items on the event stream. This is for internal use only (e.g. Codex Cloud).", - "type": "boolean" - }, - "mockExperimentalField": { - "description": "Test-only experimental field used to validate experimental gating and schema filtering behavior in a stable way.", - "type": [ - "string", - "null" - ] - }, "model": { "type": [ "string", @@ -232,17 +202,6 @@ "null" ] }, - "permissions": { - "description": "Named profile id for this thread. Cannot be combined with `sandbox`.", - "type": [ - "string", - "null" - ] - }, - "persistExtendedHistory": { - "description": "Deprecated and ignored by app-server. Kept only so older clients can continue sending the field while rollout persistence always uses the limited history policy.", - "type": "boolean" - }, "personality": { "anyOf": [ { @@ -253,16 +212,6 @@ } ] }, - "runtimeWorkspaceRoots": { - "description": "Replace the thread's runtime workspace roots. Relative paths are resolved against the effective cwd for the thread.", - "items": { - "type": "string" - }, - "type": [ - "array", - "null" - ] - }, "sandbox": { "anyOf": [ { diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadStartResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadStartResponse.json index 5f4708f4996..d456ccebc4d 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadStartResponse.json +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadStartResponse.json @@ -2238,18 +2238,6 @@ } }, "properties": { - "activePermissionProfile": { - "anyOf": [ - { - "$ref": "#/definitions/ActivePermissionProfile" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Named or implicit built-in profile that produced the active permissions, when known." - }, "approvalPolicy": { "$ref": "#/definitions/AskForApproval" }, @@ -2288,14 +2276,6 @@ } ] }, - "runtimeWorkspaceRoots": { - "default": [], - "description": "Thread-scoped runtime workspace roots used to materialize `:workspace_roots`.", - "items": { - "$ref": "#/definitions/AbsolutePathBuf" - }, - "type": "array" - }, "sandbox": { "allOf": [ { diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadTurnsItemsListParams.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadTurnsItemsListParams.json deleted file mode 100644 index 6233f0559f4..00000000000 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadTurnsItemsListParams.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "definitions": { - "SortDirection": { - "enum": [ - "asc", - "desc" - ], - "type": "string" - } - }, - "properties": { - "cursor": { - "description": "Opaque cursor to pass to the next call to continue after the last item.", - "type": [ - "string", - "null" - ] - }, - "limit": { - "description": "Optional item page size.", - "format": "uint32", - "minimum": 0.0, - "type": [ - "integer", - "null" - ] - }, - "sortDirection": { - "anyOf": [ - { - "$ref": "#/definitions/SortDirection" - }, - { - "type": "null" - } - ], - "description": "Optional item pagination direction; defaults to ascending." - }, - "threadId": { - "type": "string" - }, - "turnId": { - "type": "string" - } - }, - "required": [ - "threadId", - "turnId" - ], - "title": "ThreadTurnsItemsListParams", - "type": "object" -} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadTurnsItemsListResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadTurnsItemsListResponse.json deleted file mode 100644 index 3b19f6ae8a4..00000000000 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadTurnsItemsListResponse.json +++ /dev/null @@ -1,1434 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "definitions": { - "AbsolutePathBuf": { - "description": "A path that is guaranteed to be absolute and normalized (though it is not guaranteed to be canonicalized or exist on the filesystem).\n\nIMPORTANT: When deserializing an `AbsolutePathBuf`, a base path must be set using [AbsolutePathBufGuard::new]. If no base path is set, the deserialization will fail unless the path being deserialized is already absolute.", - "type": "string" - }, - "ByteRange": { - "properties": { - "end": { - "format": "uint", - "minimum": 0.0, - "type": "integer" - }, - "start": { - "format": "uint", - "minimum": 0.0, - "type": "integer" - } - }, - "required": [ - "end", - "start" - ], - "type": "object" - }, - "CollabAgentState": { - "properties": { - "message": { - "type": [ - "string", - "null" - ] - }, - "status": { - "$ref": "#/definitions/CollabAgentStatus" - } - }, - "required": [ - "status" - ], - "type": "object" - }, - "CollabAgentStatus": { - "enum": [ - "pendingInit", - "running", - "interrupted", - "completed", - "errored", - "shutdown", - "notFound" - ], - "type": "string" - }, - "CollabAgentTool": { - "enum": [ - "spawnAgent", - "sendInput", - "resumeAgent", - "wait", - "closeAgent" - ], - "type": "string" - }, - "CollabAgentToolCallStatus": { - "enum": [ - "inProgress", - "completed", - "failed" - ], - "type": "string" - }, - "CommandAction": { - "oneOf": [ - { - "properties": { - "command": { - "type": "string" - }, - "name": { - "type": "string" - }, - "path": { - "$ref": "#/definitions/AbsolutePathBuf" - }, - "type": { - "enum": [ - "read" - ], - "title": "ReadCommandActionType", - "type": "string" - } - }, - "required": [ - "command", - "name", - "path", - "type" - ], - "title": "ReadCommandAction", - "type": "object" - }, - { - "properties": { - "command": { - "type": "string" - }, - "path": { - "type": [ - "string", - "null" - ] - }, - "type": { - "enum": [ - "listFiles" - ], - "title": "ListFilesCommandActionType", - "type": "string" - } - }, - "required": [ - "command", - "type" - ], - "title": "ListFilesCommandAction", - "type": "object" - }, - { - "properties": { - "command": { - "type": "string" - }, - "path": { - "type": [ - "string", - "null" - ] - }, - "query": { - "type": [ - "string", - "null" - ] - }, - "type": { - "enum": [ - "search" - ], - "title": "SearchCommandActionType", - "type": "string" - } - }, - "required": [ - "command", - "type" - ], - "title": "SearchCommandAction", - "type": "object" - }, - { - "properties": { - "command": { - "type": "string" - }, - "type": { - "enum": [ - "unknown" - ], - "title": "UnknownCommandActionType", - "type": "string" - } - }, - "required": [ - "command", - "type" - ], - "title": "UnknownCommandAction", - "type": "object" - } - ] - }, - "CommandExecutionSource": { - "enum": [ - "agent", - "userShell", - "unifiedExecStartup", - "unifiedExecInteraction" - ], - "type": "string" - }, - "CommandExecutionStatus": { - "enum": [ - "inProgress", - "completed", - "failed", - "declined" - ], - "type": "string" - }, - "DynamicToolCallOutputContentItem": { - "oneOf": [ - { - "properties": { - "text": { - "type": "string" - }, - "type": { - "enum": [ - "inputText" - ], - "title": "InputTextDynamicToolCallOutputContentItemType", - "type": "string" - } - }, - "required": [ - "text", - "type" - ], - "title": "InputTextDynamicToolCallOutputContentItem", - "type": "object" - }, - { - "properties": { - "imageUrl": { - "type": "string" - }, - "type": { - "enum": [ - "inputImage" - ], - "title": "InputImageDynamicToolCallOutputContentItemType", - "type": "string" - } - }, - "required": [ - "imageUrl", - "type" - ], - "title": "InputImageDynamicToolCallOutputContentItem", - "type": "object" - } - ] - }, - "DynamicToolCallStatus": { - "enum": [ - "inProgress", - "completed", - "failed" - ], - "type": "string" - }, - "FileUpdateChange": { - "properties": { - "diff": { - "type": "string" - }, - "kind": { - "$ref": "#/definitions/PatchChangeKind" - }, - "path": { - "type": "string" - } - }, - "required": [ - "diff", - "kind", - "path" - ], - "type": "object" - }, - "HookPromptFragment": { - "properties": { - "hookRunId": { - "type": "string" - }, - "text": { - "type": "string" - } - }, - "required": [ - "hookRunId", - "text" - ], - "type": "object" - }, - "ImageDetail": { - "enum": [ - "high", - "original" - ], - "type": "string" - }, - "McpToolCallError": { - "properties": { - "message": { - "type": "string" - } - }, - "required": [ - "message" - ], - "type": "object" - }, - "McpToolCallResult": { - "properties": { - "_meta": true, - "content": { - "items": true, - "type": "array" - }, - "structuredContent": true - }, - "required": [ - "content" - ], - "type": "object" - }, - "McpToolCallStatus": { - "enum": [ - "inProgress", - "completed", - "failed" - ], - "type": "string" - }, - "MemoryCitation": { - "properties": { - "entries": { - "items": { - "$ref": "#/definitions/MemoryCitationEntry" - }, - "type": "array" - }, - "threadIds": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - "required": [ - "entries", - "threadIds" - ], - "type": "object" - }, - "MemoryCitationEntry": { - "properties": { - "lineEnd": { - "format": "uint32", - "minimum": 0.0, - "type": "integer" - }, - "lineStart": { - "format": "uint32", - "minimum": 0.0, - "type": "integer" - }, - "note": { - "type": "string" - }, - "path": { - "type": "string" - } - }, - "required": [ - "lineEnd", - "lineStart", - "note", - "path" - ], - "type": "object" - }, - "MessagePhase": { - "description": "Classifies an assistant message as interim commentary or final answer text.\n\nProviders do not emit this consistently, so callers must treat `None` as \"phase unknown\" and keep compatibility behavior for legacy models.", - "oneOf": [ - { - "description": "Mid-turn assistant text (for example preamble/progress narration).\n\nAdditional tool calls or assistant output may follow before turn completion.", - "enum": [ - "commentary" - ], - "type": "string" - }, - { - "description": "The assistant's terminal answer text for the current turn.", - "enum": [ - "final_answer" - ], - "type": "string" - } - ] - }, - "PatchApplyStatus": { - "enum": [ - "inProgress", - "completed", - "failed", - "declined" - ], - "type": "string" - }, - "PatchChangeKind": { - "oneOf": [ - { - "properties": { - "type": { - "enum": [ - "add" - ], - "title": "AddPatchChangeKindType", - "type": "string" - } - }, - "required": [ - "type" - ], - "title": "AddPatchChangeKind", - "type": "object" - }, - { - "properties": { - "type": { - "enum": [ - "delete" - ], - "title": "DeletePatchChangeKindType", - "type": "string" - } - }, - "required": [ - "type" - ], - "title": "DeletePatchChangeKind", - "type": "object" - }, - { - "properties": { - "move_path": { - "type": [ - "string", - "null" - ] - }, - "type": { - "enum": [ - "update" - ], - "title": "UpdatePatchChangeKindType", - "type": "string" - } - }, - "required": [ - "type" - ], - "title": "UpdatePatchChangeKind", - "type": "object" - } - ] - }, - "ReasoningEffort": { - "description": "See https://platform.openai.com/docs/guides/reasoning?api-mode=responses#get-started-with-reasoning", - "enum": [ - "none", - "minimal", - "low", - "medium", - "high", - "xhigh" - ], - "type": "string" - }, - "TextElement": { - "properties": { - "byteRange": { - "allOf": [ - { - "$ref": "#/definitions/ByteRange" - } - ], - "description": "Byte range in the parent `text` buffer that this element occupies." - }, - "placeholder": { - "description": "Optional human-readable placeholder for the element, displayed in the UI.", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "byteRange" - ], - "type": "object" - }, - "ThreadItem": { - "oneOf": [ - { - "properties": { - "content": { - "items": { - "$ref": "#/definitions/UserInput" - }, - "type": "array" - }, - "id": { - "type": "string" - }, - "type": { - "enum": [ - "userMessage" - ], - "title": "UserMessageThreadItemType", - "type": "string" - } - }, - "required": [ - "content", - "id", - "type" - ], - "title": "UserMessageThreadItem", - "type": "object" - }, - { - "properties": { - "fragments": { - "items": { - "$ref": "#/definitions/HookPromptFragment" - }, - "type": "array" - }, - "id": { - "type": "string" - }, - "type": { - "enum": [ - "hookPrompt" - ], - "title": "HookPromptThreadItemType", - "type": "string" - } - }, - "required": [ - "fragments", - "id", - "type" - ], - "title": "HookPromptThreadItem", - "type": "object" - }, - { - "properties": { - "id": { - "type": "string" - }, - "memoryCitation": { - "anyOf": [ - { - "$ref": "#/definitions/MemoryCitation" - }, - { - "type": "null" - } - ], - "default": null - }, - "phase": { - "anyOf": [ - { - "$ref": "#/definitions/MessagePhase" - }, - { - "type": "null" - } - ], - "default": null - }, - "text": { - "type": "string" - }, - "type": { - "enum": [ - "agentMessage" - ], - "title": "AgentMessageThreadItemType", - "type": "string" - } - }, - "required": [ - "id", - "text", - "type" - ], - "title": "AgentMessageThreadItem", - "type": "object" - }, - { - "description": "EXPERIMENTAL - proposed plan item content. The completed plan item is authoritative and may not match the concatenation of `PlanDelta` text.", - "properties": { - "id": { - "type": "string" - }, - "text": { - "type": "string" - }, - "type": { - "enum": [ - "plan" - ], - "title": "PlanThreadItemType", - "type": "string" - } - }, - "required": [ - "id", - "text", - "type" - ], - "title": "PlanThreadItem", - "type": "object" - }, - { - "properties": { - "content": { - "default": [], - "items": { - "type": "string" - }, - "type": "array" - }, - "id": { - "type": "string" - }, - "summary": { - "default": [], - "items": { - "type": "string" - }, - "type": "array" - }, - "type": { - "enum": [ - "reasoning" - ], - "title": "ReasoningThreadItemType", - "type": "string" - } - }, - "required": [ - "id", - "type" - ], - "title": "ReasoningThreadItem", - "type": "object" - }, - { - "properties": { - "aggregatedOutput": { - "description": "The command's output, aggregated from stdout and stderr.", - "type": [ - "string", - "null" - ] - }, - "command": { - "description": "The command to be executed.", - "type": "string" - }, - "commandActions": { - "description": "A best-effort parsing of the command to understand the action(s) it will perform. This returns a list of CommandAction objects because a single shell command may be composed of many commands piped together.", - "items": { - "$ref": "#/definitions/CommandAction" - }, - "type": "array" - }, - "cwd": { - "allOf": [ - { - "$ref": "#/definitions/AbsolutePathBuf" - } - ], - "description": "The command's working directory." - }, - "durationMs": { - "description": "The duration of the command execution in milliseconds.", - "format": "int64", - "type": [ - "integer", - "null" - ] - }, - "exitCode": { - "description": "The command's exit code.", - "format": "int32", - "type": [ - "integer", - "null" - ] - }, - "id": { - "type": "string" - }, - "processId": { - "description": "Identifier for the underlying PTY process (when available).", - "type": [ - "string", - "null" - ] - }, - "source": { - "allOf": [ - { - "$ref": "#/definitions/CommandExecutionSource" - } - ], - "default": "agent" - }, - "status": { - "$ref": "#/definitions/CommandExecutionStatus" - }, - "type": { - "enum": [ - "commandExecution" - ], - "title": "CommandExecutionThreadItemType", - "type": "string" - } - }, - "required": [ - "command", - "commandActions", - "cwd", - "id", - "status", - "type" - ], - "title": "CommandExecutionThreadItem", - "type": "object" - }, - { - "properties": { - "changes": { - "items": { - "$ref": "#/definitions/FileUpdateChange" - }, - "type": "array" - }, - "id": { - "type": "string" - }, - "status": { - "$ref": "#/definitions/PatchApplyStatus" - }, - "type": { - "enum": [ - "fileChange" - ], - "title": "FileChangeThreadItemType", - "type": "string" - } - }, - "required": [ - "changes", - "id", - "status", - "type" - ], - "title": "FileChangeThreadItem", - "type": "object" - }, - { - "properties": { - "arguments": true, - "durationMs": { - "description": "The duration of the MCP tool call in milliseconds.", - "format": "int64", - "type": [ - "integer", - "null" - ] - }, - "error": { - "anyOf": [ - { - "$ref": "#/definitions/McpToolCallError" - }, - { - "type": "null" - } - ] - }, - "id": { - "type": "string" - }, - "mcpAppResourceUri": { - "type": [ - "string", - "null" - ] - }, - "pluginId": { - "type": [ - "string", - "null" - ] - }, - "result": { - "anyOf": [ - { - "$ref": "#/definitions/McpToolCallResult" - }, - { - "type": "null" - } - ] - }, - "server": { - "type": "string" - }, - "status": { - "$ref": "#/definitions/McpToolCallStatus" - }, - "tool": { - "type": "string" - }, - "type": { - "enum": [ - "mcpToolCall" - ], - "title": "McpToolCallThreadItemType", - "type": "string" - } - }, - "required": [ - "arguments", - "id", - "server", - "status", - "tool", - "type" - ], - "title": "McpToolCallThreadItem", - "type": "object" - }, - { - "properties": { - "arguments": true, - "contentItems": { - "items": { - "$ref": "#/definitions/DynamicToolCallOutputContentItem" - }, - "type": [ - "array", - "null" - ] - }, - "durationMs": { - "description": "The duration of the dynamic tool call in milliseconds.", - "format": "int64", - "type": [ - "integer", - "null" - ] - }, - "id": { - "type": "string" - }, - "namespace": { - "type": [ - "string", - "null" - ] - }, - "status": { - "$ref": "#/definitions/DynamicToolCallStatus" - }, - "success": { - "type": [ - "boolean", - "null" - ] - }, - "tool": { - "type": "string" - }, - "type": { - "enum": [ - "dynamicToolCall" - ], - "title": "DynamicToolCallThreadItemType", - "type": "string" - } - }, - "required": [ - "arguments", - "id", - "status", - "tool", - "type" - ], - "title": "DynamicToolCallThreadItem", - "type": "object" - }, - { - "properties": { - "agentsStates": { - "additionalProperties": { - "$ref": "#/definitions/CollabAgentState" - }, - "description": "Last known status of the target agents, when available.", - "type": "object" - }, - "id": { - "description": "Unique identifier for this collab tool call.", - "type": "string" - }, - "model": { - "description": "Model requested for the spawned agent, when applicable.", - "type": [ - "string", - "null" - ] - }, - "prompt": { - "description": "Prompt text sent as part of the collab tool call, when available.", - "type": [ - "string", - "null" - ] - }, - "reasoningEffort": { - "anyOf": [ - { - "$ref": "#/definitions/ReasoningEffort" - }, - { - "type": "null" - } - ], - "description": "Reasoning effort requested for the spawned agent, when applicable." - }, - "receiverThreadIds": { - "description": "Thread ID of the receiving agent, when applicable. In case of spawn operation, this corresponds to the newly spawned agent.", - "items": { - "type": "string" - }, - "type": "array" - }, - "senderThreadId": { - "description": "Thread ID of the agent issuing the collab request.", - "type": "string" - }, - "status": { - "allOf": [ - { - "$ref": "#/definitions/CollabAgentToolCallStatus" - } - ], - "description": "Current status of the collab tool call." - }, - "tool": { - "allOf": [ - { - "$ref": "#/definitions/CollabAgentTool" - } - ], - "description": "Name of the collab tool that was invoked." - }, - "type": { - "enum": [ - "collabAgentToolCall" - ], - "title": "CollabAgentToolCallThreadItemType", - "type": "string" - } - }, - "required": [ - "agentsStates", - "id", - "receiverThreadIds", - "senderThreadId", - "status", - "tool", - "type" - ], - "title": "CollabAgentToolCallThreadItem", - "type": "object" - }, - { - "properties": { - "action": { - "anyOf": [ - { - "$ref": "#/definitions/WebSearchAction" - }, - { - "type": "null" - } - ] - }, - "id": { - "type": "string" - }, - "query": { - "type": "string" - }, - "type": { - "enum": [ - "webSearch" - ], - "title": "WebSearchThreadItemType", - "type": "string" - } - }, - "required": [ - "id", - "query", - "type" - ], - "title": "WebSearchThreadItem", - "type": "object" - }, - { - "properties": { - "id": { - "type": "string" - }, - "path": { - "$ref": "#/definitions/AbsolutePathBuf" - }, - "type": { - "enum": [ - "imageView" - ], - "title": "ImageViewThreadItemType", - "type": "string" - } - }, - "required": [ - "id", - "path", - "type" - ], - "title": "ImageViewThreadItem", - "type": "object" - }, - { - "properties": { - "id": { - "type": "string" - }, - "result": { - "type": "string" - }, - "revisedPrompt": { - "type": [ - "string", - "null" - ] - }, - "savedPath": { - "anyOf": [ - { - "$ref": "#/definitions/AbsolutePathBuf" - }, - { - "type": "null" - } - ] - }, - "status": { - "type": "string" - }, - "type": { - "enum": [ - "imageGeneration" - ], - "title": "ImageGenerationThreadItemType", - "type": "string" - } - }, - "required": [ - "id", - "result", - "status", - "type" - ], - "title": "ImageGenerationThreadItem", - "type": "object" - }, - { - "properties": { - "id": { - "type": "string" - }, - "review": { - "type": "string" - }, - "type": { - "enum": [ - "enteredReviewMode" - ], - "title": "EnteredReviewModeThreadItemType", - "type": "string" - } - }, - "required": [ - "id", - "review", - "type" - ], - "title": "EnteredReviewModeThreadItem", - "type": "object" - }, - { - "properties": { - "id": { - "type": "string" - }, - "review": { - "type": "string" - }, - "type": { - "enum": [ - "exitedReviewMode" - ], - "title": "ExitedReviewModeThreadItemType", - "type": "string" - } - }, - "required": [ - "id", - "review", - "type" - ], - "title": "ExitedReviewModeThreadItem", - "type": "object" - }, - { - "properties": { - "id": { - "type": "string" - }, - "type": { - "enum": [ - "contextCompaction" - ], - "title": "ContextCompactionThreadItemType", - "type": "string" - } - }, - "required": [ - "id", - "type" - ], - "title": "ContextCompactionThreadItem", - "type": "object" - } - ] - }, - "UserInput": { - "oneOf": [ - { - "properties": { - "text": { - "type": "string" - }, - "text_elements": { - "default": [], - "description": "UI-defined spans within `text` used to render or persist special elements.", - "items": { - "$ref": "#/definitions/TextElement" - }, - "type": "array" - }, - "type": { - "enum": [ - "text" - ], - "title": "TextUserInputType", - "type": "string" - } - }, - "required": [ - "text", - "type" - ], - "title": "TextUserInput", - "type": "object" - }, - { - "properties": { - "detail": { - "anyOf": [ - { - "$ref": "#/definitions/ImageDetail" - }, - { - "type": "null" - } - ], - "default": null - }, - "type": { - "enum": [ - "image" - ], - "title": "ImageUserInputType", - "type": "string" - }, - "url": { - "type": "string" - } - }, - "required": [ - "type", - "url" - ], - "title": "ImageUserInput", - "type": "object" - }, - { - "properties": { - "detail": { - "anyOf": [ - { - "$ref": "#/definitions/ImageDetail" - }, - { - "type": "null" - } - ], - "default": null - }, - "path": { - "type": "string" - }, - "type": { - "enum": [ - "localImage" - ], - "title": "LocalImageUserInputType", - "type": "string" - } - }, - "required": [ - "path", - "type" - ], - "title": "LocalImageUserInput", - "type": "object" - }, - { - "properties": { - "name": { - "type": "string" - }, - "path": { - "type": "string" - }, - "type": { - "enum": [ - "skill" - ], - "title": "SkillUserInputType", - "type": "string" - } - }, - "required": [ - "name", - "path", - "type" - ], - "title": "SkillUserInput", - "type": "object" - }, - { - "properties": { - "name": { - "type": "string" - }, - "path": { - "type": "string" - }, - "type": { - "enum": [ - "mention" - ], - "title": "MentionUserInputType", - "type": "string" - } - }, - "required": [ - "name", - "path", - "type" - ], - "title": "MentionUserInput", - "type": "object" - } - ] - }, - "WebSearchAction": { - "oneOf": [ - { - "properties": { - "queries": { - "items": { - "type": "string" - }, - "type": [ - "array", - "null" - ] - }, - "query": { - "type": [ - "string", - "null" - ] - }, - "type": { - "enum": [ - "search" - ], - "title": "SearchWebSearchActionType", - "type": "string" - } - }, - "required": [ - "type" - ], - "title": "SearchWebSearchAction", - "type": "object" - }, - { - "properties": { - "type": { - "enum": [ - "openPage" - ], - "title": "OpenPageWebSearchActionType", - "type": "string" - }, - "url": { - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "type" - ], - "title": "OpenPageWebSearchAction", - "type": "object" - }, - { - "properties": { - "pattern": { - "type": [ - "string", - "null" - ] - }, - "type": { - "enum": [ - "findInPage" - ], - "title": "FindInPageWebSearchActionType", - "type": "string" - }, - "url": { - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "type" - ], - "title": "FindInPageWebSearchAction", - "type": "object" - }, - { - "properties": { - "type": { - "enum": [ - "other" - ], - "title": "OtherWebSearchActionType", - "type": "string" - } - }, - "required": [ - "type" - ], - "title": "OtherWebSearchAction", - "type": "object" - } - ] - } - }, - "properties": { - "backwardsCursor": { - "description": "Opaque cursor to pass as `cursor` when reversing `sortDirection`. This is only populated when the page contains at least one item.", - "type": [ - "string", - "null" - ] - }, - "data": { - "items": { - "$ref": "#/definitions/ThreadItem" - }, - "type": "array" - }, - "nextCursor": { - "description": "Opaque cursor to pass to the next call to continue after the last item. if None, there are no more items to return.", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "data" - ], - "title": "ThreadTurnsItemsListResponse", - "type": "object" -} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadTurnsListParams.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadTurnsListParams.json deleted file mode 100644 index 924b8a9a810..00000000000 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadTurnsListParams.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "definitions": { - "SortDirection": { - "enum": [ - "asc", - "desc" - ], - "type": "string" - }, - "TurnItemsView": { - "oneOf": [ - { - "description": "`items` was not loaded for this turn. The field is intentionally empty.", - "enum": [ - "notLoaded" - ], - "type": "string" - }, - { - "description": "`items` contains only a display summary for this turn.", - "enum": [ - "summary" - ], - "type": "string" - }, - { - "description": "`items` contains every ThreadItem available from persisted app-server history for this turn.", - "enum": [ - "full" - ], - "type": "string" - } - ] - } - }, - "properties": { - "cursor": { - "description": "Opaque cursor to pass to the next call to continue after the last turn.", - "type": [ - "string", - "null" - ] - }, - "itemsView": { - "anyOf": [ - { - "$ref": "#/definitions/TurnItemsView" - }, - { - "type": "null" - } - ], - "description": "How much item detail to include for each returned turn; defaults to summary." - }, - "limit": { - "description": "Optional turn page size.", - "format": "uint32", - "minimum": 0.0, - "type": [ - "integer", - "null" - ] - }, - "sortDirection": { - "anyOf": [ - { - "$ref": "#/definitions/SortDirection" - }, - { - "type": "null" - } - ], - "description": "Optional turn pagination direction; defaults to descending." - }, - "threadId": { - "type": "string" - } - }, - "required": [ - "threadId" - ], - "title": "ThreadTurnsListParams", - "type": "object" -} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadTurnsListResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadTurnsListResponse.json deleted file mode 100644 index 956d6de26d9..00000000000 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadTurnsListResponse.json +++ /dev/null @@ -1,1707 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "definitions": { - "AbsolutePathBuf": { - "description": "A path that is guaranteed to be absolute and normalized (though it is not guaranteed to be canonicalized or exist on the filesystem).\n\nIMPORTANT: When deserializing an `AbsolutePathBuf`, a base path must be set using [AbsolutePathBufGuard::new]. If no base path is set, the deserialization will fail unless the path being deserialized is already absolute.", - "type": "string" - }, - "ByteRange": { - "properties": { - "end": { - "format": "uint", - "minimum": 0.0, - "type": "integer" - }, - "start": { - "format": "uint", - "minimum": 0.0, - "type": "integer" - } - }, - "required": [ - "end", - "start" - ], - "type": "object" - }, - "CodexErrorInfo": { - "description": "This translation layer make sure that we expose codex error code in camel case.\n\nWhen an upstream HTTP status is available (for example, from the Responses API or a provider), it is forwarded in `httpStatusCode` on the relevant `codexErrorInfo` variant.", - "oneOf": [ - { - "enum": [ - "contextWindowExceeded", - "usageLimitExceeded", - "serverOverloaded", - "cyberPolicy", - "internalServerError", - "unauthorized", - "badRequest", - "threadRollbackFailed", - "sandboxError", - "other" - ], - "type": "string" - }, - { - "additionalProperties": false, - "properties": { - "httpConnectionFailed": { - "properties": { - "httpStatusCode": { - "format": "uint16", - "minimum": 0.0, - "type": [ - "integer", - "null" - ] - } - }, - "type": "object" - } - }, - "required": [ - "httpConnectionFailed" - ], - "title": "HttpConnectionFailedCodexErrorInfo", - "type": "object" - }, - { - "additionalProperties": false, - "description": "Failed to connect to the response SSE stream.", - "properties": { - "responseStreamConnectionFailed": { - "properties": { - "httpStatusCode": { - "format": "uint16", - "minimum": 0.0, - "type": [ - "integer", - "null" - ] - } - }, - "type": "object" - } - }, - "required": [ - "responseStreamConnectionFailed" - ], - "title": "ResponseStreamConnectionFailedCodexErrorInfo", - "type": "object" - }, - { - "additionalProperties": false, - "description": "The response SSE stream disconnected in the middle of a turn before completion.", - "properties": { - "responseStreamDisconnected": { - "properties": { - "httpStatusCode": { - "format": "uint16", - "minimum": 0.0, - "type": [ - "integer", - "null" - ] - } - }, - "type": "object" - } - }, - "required": [ - "responseStreamDisconnected" - ], - "title": "ResponseStreamDisconnectedCodexErrorInfo", - "type": "object" - }, - { - "additionalProperties": false, - "description": "Reached the retry limit for responses.", - "properties": { - "responseTooManyFailedAttempts": { - "properties": { - "httpStatusCode": { - "format": "uint16", - "minimum": 0.0, - "type": [ - "integer", - "null" - ] - } - }, - "type": "object" - } - }, - "required": [ - "responseTooManyFailedAttempts" - ], - "title": "ResponseTooManyFailedAttemptsCodexErrorInfo", - "type": "object" - }, - { - "additionalProperties": false, - "description": "Returned when `turn/start` or `turn/steer` is submitted while the current active turn cannot accept same-turn steering, for example `/review` or manual `/compact`.", - "properties": { - "activeTurnNotSteerable": { - "properties": { - "turnKind": { - "$ref": "#/definitions/NonSteerableTurnKind" - } - }, - "required": [ - "turnKind" - ], - "type": "object" - } - }, - "required": [ - "activeTurnNotSteerable" - ], - "title": "ActiveTurnNotSteerableCodexErrorInfo", - "type": "object" - } - ] - }, - "CollabAgentState": { - "properties": { - "message": { - "type": [ - "string", - "null" - ] - }, - "status": { - "$ref": "#/definitions/CollabAgentStatus" - } - }, - "required": [ - "status" - ], - "type": "object" - }, - "CollabAgentStatus": { - "enum": [ - "pendingInit", - "running", - "interrupted", - "completed", - "errored", - "shutdown", - "notFound" - ], - "type": "string" - }, - "CollabAgentTool": { - "enum": [ - "spawnAgent", - "sendInput", - "resumeAgent", - "wait", - "closeAgent" - ], - "type": "string" - }, - "CollabAgentToolCallStatus": { - "enum": [ - "inProgress", - "completed", - "failed" - ], - "type": "string" - }, - "CommandAction": { - "oneOf": [ - { - "properties": { - "command": { - "type": "string" - }, - "name": { - "type": "string" - }, - "path": { - "$ref": "#/definitions/AbsolutePathBuf" - }, - "type": { - "enum": [ - "read" - ], - "title": "ReadCommandActionType", - "type": "string" - } - }, - "required": [ - "command", - "name", - "path", - "type" - ], - "title": "ReadCommandAction", - "type": "object" - }, - { - "properties": { - "command": { - "type": "string" - }, - "path": { - "type": [ - "string", - "null" - ] - }, - "type": { - "enum": [ - "listFiles" - ], - "title": "ListFilesCommandActionType", - "type": "string" - } - }, - "required": [ - "command", - "type" - ], - "title": "ListFilesCommandAction", - "type": "object" - }, - { - "properties": { - "command": { - "type": "string" - }, - "path": { - "type": [ - "string", - "null" - ] - }, - "query": { - "type": [ - "string", - "null" - ] - }, - "type": { - "enum": [ - "search" - ], - "title": "SearchCommandActionType", - "type": "string" - } - }, - "required": [ - "command", - "type" - ], - "title": "SearchCommandAction", - "type": "object" - }, - { - "properties": { - "command": { - "type": "string" - }, - "type": { - "enum": [ - "unknown" - ], - "title": "UnknownCommandActionType", - "type": "string" - } - }, - "required": [ - "command", - "type" - ], - "title": "UnknownCommandAction", - "type": "object" - } - ] - }, - "CommandExecutionSource": { - "enum": [ - "agent", - "userShell", - "unifiedExecStartup", - "unifiedExecInteraction" - ], - "type": "string" - }, - "CommandExecutionStatus": { - "enum": [ - "inProgress", - "completed", - "failed", - "declined" - ], - "type": "string" - }, - "DynamicToolCallOutputContentItem": { - "oneOf": [ - { - "properties": { - "text": { - "type": "string" - }, - "type": { - "enum": [ - "inputText" - ], - "title": "InputTextDynamicToolCallOutputContentItemType", - "type": "string" - } - }, - "required": [ - "text", - "type" - ], - "title": "InputTextDynamicToolCallOutputContentItem", - "type": "object" - }, - { - "properties": { - "imageUrl": { - "type": "string" - }, - "type": { - "enum": [ - "inputImage" - ], - "title": "InputImageDynamicToolCallOutputContentItemType", - "type": "string" - } - }, - "required": [ - "imageUrl", - "type" - ], - "title": "InputImageDynamicToolCallOutputContentItem", - "type": "object" - } - ] - }, - "DynamicToolCallStatus": { - "enum": [ - "inProgress", - "completed", - "failed" - ], - "type": "string" - }, - "FileUpdateChange": { - "properties": { - "diff": { - "type": "string" - }, - "kind": { - "$ref": "#/definitions/PatchChangeKind" - }, - "path": { - "type": "string" - } - }, - "required": [ - "diff", - "kind", - "path" - ], - "type": "object" - }, - "HookPromptFragment": { - "properties": { - "hookRunId": { - "type": "string" - }, - "text": { - "type": "string" - } - }, - "required": [ - "hookRunId", - "text" - ], - "type": "object" - }, - "ImageDetail": { - "enum": [ - "high", - "original" - ], - "type": "string" - }, - "McpToolCallError": { - "properties": { - "message": { - "type": "string" - } - }, - "required": [ - "message" - ], - "type": "object" - }, - "McpToolCallResult": { - "properties": { - "_meta": true, - "content": { - "items": true, - "type": "array" - }, - "structuredContent": true - }, - "required": [ - "content" - ], - "type": "object" - }, - "McpToolCallStatus": { - "enum": [ - "inProgress", - "completed", - "failed" - ], - "type": "string" - }, - "MemoryCitation": { - "properties": { - "entries": { - "items": { - "$ref": "#/definitions/MemoryCitationEntry" - }, - "type": "array" - }, - "threadIds": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - "required": [ - "entries", - "threadIds" - ], - "type": "object" - }, - "MemoryCitationEntry": { - "properties": { - "lineEnd": { - "format": "uint32", - "minimum": 0.0, - "type": "integer" - }, - "lineStart": { - "format": "uint32", - "minimum": 0.0, - "type": "integer" - }, - "note": { - "type": "string" - }, - "path": { - "type": "string" - } - }, - "required": [ - "lineEnd", - "lineStart", - "note", - "path" - ], - "type": "object" - }, - "MessagePhase": { - "description": "Classifies an assistant message as interim commentary or final answer text.\n\nProviders do not emit this consistently, so callers must treat `None` as \"phase unknown\" and keep compatibility behavior for legacy models.", - "oneOf": [ - { - "description": "Mid-turn assistant text (for example preamble/progress narration).\n\nAdditional tool calls or assistant output may follow before turn completion.", - "enum": [ - "commentary" - ], - "type": "string" - }, - { - "description": "The assistant's terminal answer text for the current turn.", - "enum": [ - "final_answer" - ], - "type": "string" - } - ] - }, - "NonSteerableTurnKind": { - "enum": [ - "review", - "compact" - ], - "type": "string" - }, - "PatchApplyStatus": { - "enum": [ - "inProgress", - "completed", - "failed", - "declined" - ], - "type": "string" - }, - "PatchChangeKind": { - "oneOf": [ - { - "properties": { - "type": { - "enum": [ - "add" - ], - "title": "AddPatchChangeKindType", - "type": "string" - } - }, - "required": [ - "type" - ], - "title": "AddPatchChangeKind", - "type": "object" - }, - { - "properties": { - "type": { - "enum": [ - "delete" - ], - "title": "DeletePatchChangeKindType", - "type": "string" - } - }, - "required": [ - "type" - ], - "title": "DeletePatchChangeKind", - "type": "object" - }, - { - "properties": { - "move_path": { - "type": [ - "string", - "null" - ] - }, - "type": { - "enum": [ - "update" - ], - "title": "UpdatePatchChangeKindType", - "type": "string" - } - }, - "required": [ - "type" - ], - "title": "UpdatePatchChangeKind", - "type": "object" - } - ] - }, - "ReasoningEffort": { - "description": "See https://platform.openai.com/docs/guides/reasoning?api-mode=responses#get-started-with-reasoning", - "enum": [ - "none", - "minimal", - "low", - "medium", - "high", - "xhigh" - ], - "type": "string" - }, - "TextElement": { - "properties": { - "byteRange": { - "allOf": [ - { - "$ref": "#/definitions/ByteRange" - } - ], - "description": "Byte range in the parent `text` buffer that this element occupies." - }, - "placeholder": { - "description": "Optional human-readable placeholder for the element, displayed in the UI.", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "byteRange" - ], - "type": "object" - }, - "ThreadItem": { - "oneOf": [ - { - "properties": { - "content": { - "items": { - "$ref": "#/definitions/UserInput" - }, - "type": "array" - }, - "id": { - "type": "string" - }, - "type": { - "enum": [ - "userMessage" - ], - "title": "UserMessageThreadItemType", - "type": "string" - } - }, - "required": [ - "content", - "id", - "type" - ], - "title": "UserMessageThreadItem", - "type": "object" - }, - { - "properties": { - "fragments": { - "items": { - "$ref": "#/definitions/HookPromptFragment" - }, - "type": "array" - }, - "id": { - "type": "string" - }, - "type": { - "enum": [ - "hookPrompt" - ], - "title": "HookPromptThreadItemType", - "type": "string" - } - }, - "required": [ - "fragments", - "id", - "type" - ], - "title": "HookPromptThreadItem", - "type": "object" - }, - { - "properties": { - "id": { - "type": "string" - }, - "memoryCitation": { - "anyOf": [ - { - "$ref": "#/definitions/MemoryCitation" - }, - { - "type": "null" - } - ], - "default": null - }, - "phase": { - "anyOf": [ - { - "$ref": "#/definitions/MessagePhase" - }, - { - "type": "null" - } - ], - "default": null - }, - "text": { - "type": "string" - }, - "type": { - "enum": [ - "agentMessage" - ], - "title": "AgentMessageThreadItemType", - "type": "string" - } - }, - "required": [ - "id", - "text", - "type" - ], - "title": "AgentMessageThreadItem", - "type": "object" - }, - { - "description": "EXPERIMENTAL - proposed plan item content. The completed plan item is authoritative and may not match the concatenation of `PlanDelta` text.", - "properties": { - "id": { - "type": "string" - }, - "text": { - "type": "string" - }, - "type": { - "enum": [ - "plan" - ], - "title": "PlanThreadItemType", - "type": "string" - } - }, - "required": [ - "id", - "text", - "type" - ], - "title": "PlanThreadItem", - "type": "object" - }, - { - "properties": { - "content": { - "default": [], - "items": { - "type": "string" - }, - "type": "array" - }, - "id": { - "type": "string" - }, - "summary": { - "default": [], - "items": { - "type": "string" - }, - "type": "array" - }, - "type": { - "enum": [ - "reasoning" - ], - "title": "ReasoningThreadItemType", - "type": "string" - } - }, - "required": [ - "id", - "type" - ], - "title": "ReasoningThreadItem", - "type": "object" - }, - { - "properties": { - "aggregatedOutput": { - "description": "The command's output, aggregated from stdout and stderr.", - "type": [ - "string", - "null" - ] - }, - "command": { - "description": "The command to be executed.", - "type": "string" - }, - "commandActions": { - "description": "A best-effort parsing of the command to understand the action(s) it will perform. This returns a list of CommandAction objects because a single shell command may be composed of many commands piped together.", - "items": { - "$ref": "#/definitions/CommandAction" - }, - "type": "array" - }, - "cwd": { - "allOf": [ - { - "$ref": "#/definitions/AbsolutePathBuf" - } - ], - "description": "The command's working directory." - }, - "durationMs": { - "description": "The duration of the command execution in milliseconds.", - "format": "int64", - "type": [ - "integer", - "null" - ] - }, - "exitCode": { - "description": "The command's exit code.", - "format": "int32", - "type": [ - "integer", - "null" - ] - }, - "id": { - "type": "string" - }, - "processId": { - "description": "Identifier for the underlying PTY process (when available).", - "type": [ - "string", - "null" - ] - }, - "source": { - "allOf": [ - { - "$ref": "#/definitions/CommandExecutionSource" - } - ], - "default": "agent" - }, - "status": { - "$ref": "#/definitions/CommandExecutionStatus" - }, - "type": { - "enum": [ - "commandExecution" - ], - "title": "CommandExecutionThreadItemType", - "type": "string" - } - }, - "required": [ - "command", - "commandActions", - "cwd", - "id", - "status", - "type" - ], - "title": "CommandExecutionThreadItem", - "type": "object" - }, - { - "properties": { - "changes": { - "items": { - "$ref": "#/definitions/FileUpdateChange" - }, - "type": "array" - }, - "id": { - "type": "string" - }, - "status": { - "$ref": "#/definitions/PatchApplyStatus" - }, - "type": { - "enum": [ - "fileChange" - ], - "title": "FileChangeThreadItemType", - "type": "string" - } - }, - "required": [ - "changes", - "id", - "status", - "type" - ], - "title": "FileChangeThreadItem", - "type": "object" - }, - { - "properties": { - "arguments": true, - "durationMs": { - "description": "The duration of the MCP tool call in milliseconds.", - "format": "int64", - "type": [ - "integer", - "null" - ] - }, - "error": { - "anyOf": [ - { - "$ref": "#/definitions/McpToolCallError" - }, - { - "type": "null" - } - ] - }, - "id": { - "type": "string" - }, - "mcpAppResourceUri": { - "type": [ - "string", - "null" - ] - }, - "pluginId": { - "type": [ - "string", - "null" - ] - }, - "result": { - "anyOf": [ - { - "$ref": "#/definitions/McpToolCallResult" - }, - { - "type": "null" - } - ] - }, - "server": { - "type": "string" - }, - "status": { - "$ref": "#/definitions/McpToolCallStatus" - }, - "tool": { - "type": "string" - }, - "type": { - "enum": [ - "mcpToolCall" - ], - "title": "McpToolCallThreadItemType", - "type": "string" - } - }, - "required": [ - "arguments", - "id", - "server", - "status", - "tool", - "type" - ], - "title": "McpToolCallThreadItem", - "type": "object" - }, - { - "properties": { - "arguments": true, - "contentItems": { - "items": { - "$ref": "#/definitions/DynamicToolCallOutputContentItem" - }, - "type": [ - "array", - "null" - ] - }, - "durationMs": { - "description": "The duration of the dynamic tool call in milliseconds.", - "format": "int64", - "type": [ - "integer", - "null" - ] - }, - "id": { - "type": "string" - }, - "namespace": { - "type": [ - "string", - "null" - ] - }, - "status": { - "$ref": "#/definitions/DynamicToolCallStatus" - }, - "success": { - "type": [ - "boolean", - "null" - ] - }, - "tool": { - "type": "string" - }, - "type": { - "enum": [ - "dynamicToolCall" - ], - "title": "DynamicToolCallThreadItemType", - "type": "string" - } - }, - "required": [ - "arguments", - "id", - "status", - "tool", - "type" - ], - "title": "DynamicToolCallThreadItem", - "type": "object" - }, - { - "properties": { - "agentsStates": { - "additionalProperties": { - "$ref": "#/definitions/CollabAgentState" - }, - "description": "Last known status of the target agents, when available.", - "type": "object" - }, - "id": { - "description": "Unique identifier for this collab tool call.", - "type": "string" - }, - "model": { - "description": "Model requested for the spawned agent, when applicable.", - "type": [ - "string", - "null" - ] - }, - "prompt": { - "description": "Prompt text sent as part of the collab tool call, when available.", - "type": [ - "string", - "null" - ] - }, - "reasoningEffort": { - "anyOf": [ - { - "$ref": "#/definitions/ReasoningEffort" - }, - { - "type": "null" - } - ], - "description": "Reasoning effort requested for the spawned agent, when applicable." - }, - "receiverThreadIds": { - "description": "Thread ID of the receiving agent, when applicable. In case of spawn operation, this corresponds to the newly spawned agent.", - "items": { - "type": "string" - }, - "type": "array" - }, - "senderThreadId": { - "description": "Thread ID of the agent issuing the collab request.", - "type": "string" - }, - "status": { - "allOf": [ - { - "$ref": "#/definitions/CollabAgentToolCallStatus" - } - ], - "description": "Current status of the collab tool call." - }, - "tool": { - "allOf": [ - { - "$ref": "#/definitions/CollabAgentTool" - } - ], - "description": "Name of the collab tool that was invoked." - }, - "type": { - "enum": [ - "collabAgentToolCall" - ], - "title": "CollabAgentToolCallThreadItemType", - "type": "string" - } - }, - "required": [ - "agentsStates", - "id", - "receiverThreadIds", - "senderThreadId", - "status", - "tool", - "type" - ], - "title": "CollabAgentToolCallThreadItem", - "type": "object" - }, - { - "properties": { - "action": { - "anyOf": [ - { - "$ref": "#/definitions/WebSearchAction" - }, - { - "type": "null" - } - ] - }, - "id": { - "type": "string" - }, - "query": { - "type": "string" - }, - "type": { - "enum": [ - "webSearch" - ], - "title": "WebSearchThreadItemType", - "type": "string" - } - }, - "required": [ - "id", - "query", - "type" - ], - "title": "WebSearchThreadItem", - "type": "object" - }, - { - "properties": { - "id": { - "type": "string" - }, - "path": { - "$ref": "#/definitions/AbsolutePathBuf" - }, - "type": { - "enum": [ - "imageView" - ], - "title": "ImageViewThreadItemType", - "type": "string" - } - }, - "required": [ - "id", - "path", - "type" - ], - "title": "ImageViewThreadItem", - "type": "object" - }, - { - "properties": { - "id": { - "type": "string" - }, - "result": { - "type": "string" - }, - "revisedPrompt": { - "type": [ - "string", - "null" - ] - }, - "savedPath": { - "anyOf": [ - { - "$ref": "#/definitions/AbsolutePathBuf" - }, - { - "type": "null" - } - ] - }, - "status": { - "type": "string" - }, - "type": { - "enum": [ - "imageGeneration" - ], - "title": "ImageGenerationThreadItemType", - "type": "string" - } - }, - "required": [ - "id", - "result", - "status", - "type" - ], - "title": "ImageGenerationThreadItem", - "type": "object" - }, - { - "properties": { - "id": { - "type": "string" - }, - "review": { - "type": "string" - }, - "type": { - "enum": [ - "enteredReviewMode" - ], - "title": "EnteredReviewModeThreadItemType", - "type": "string" - } - }, - "required": [ - "id", - "review", - "type" - ], - "title": "EnteredReviewModeThreadItem", - "type": "object" - }, - { - "properties": { - "id": { - "type": "string" - }, - "review": { - "type": "string" - }, - "type": { - "enum": [ - "exitedReviewMode" - ], - "title": "ExitedReviewModeThreadItemType", - "type": "string" - } - }, - "required": [ - "id", - "review", - "type" - ], - "title": "ExitedReviewModeThreadItem", - "type": "object" - }, - { - "properties": { - "id": { - "type": "string" - }, - "type": { - "enum": [ - "contextCompaction" - ], - "title": "ContextCompactionThreadItemType", - "type": "string" - } - }, - "required": [ - "id", - "type" - ], - "title": "ContextCompactionThreadItem", - "type": "object" - } - ] - }, - "Turn": { - "properties": { - "completedAt": { - "description": "Unix timestamp (in seconds) when the turn completed.", - "format": "int64", - "type": [ - "integer", - "null" - ] - }, - "durationMs": { - "description": "Duration between turn start and completion in milliseconds, if known.", - "format": "int64", - "type": [ - "integer", - "null" - ] - }, - "error": { - "anyOf": [ - { - "$ref": "#/definitions/TurnError" - }, - { - "type": "null" - } - ], - "description": "Only populated when the Turn's status is failed." - }, - "id": { - "type": "string" - }, - "items": { - "description": "Thread items currently included in this turn payload.", - "items": { - "$ref": "#/definitions/ThreadItem" - }, - "type": "array" - }, - "itemsView": { - "allOf": [ - { - "$ref": "#/definitions/TurnItemsView" - } - ], - "default": "full", - "description": "Describes how much of `items` has been loaded for this turn." - }, - "startedAt": { - "description": "Unix timestamp (in seconds) when the turn started.", - "format": "int64", - "type": [ - "integer", - "null" - ] - }, - "status": { - "$ref": "#/definitions/TurnStatus" - } - }, - "required": [ - "id", - "items", - "status" - ], - "type": "object" - }, - "TurnError": { - "properties": { - "additionalDetails": { - "default": null, - "type": [ - "string", - "null" - ] - }, - "codexErrorInfo": { - "anyOf": [ - { - "$ref": "#/definitions/CodexErrorInfo" - }, - { - "type": "null" - } - ] - }, - "message": { - "type": "string" - } - }, - "required": [ - "message" - ], - "type": "object" - }, - "TurnItemsView": { - "oneOf": [ - { - "description": "`items` was not loaded for this turn. The field is intentionally empty.", - "enum": [ - "notLoaded" - ], - "type": "string" - }, - { - "description": "`items` contains only a display summary for this turn.", - "enum": [ - "summary" - ], - "type": "string" - }, - { - "description": "`items` contains every ThreadItem available from persisted app-server history for this turn.", - "enum": [ - "full" - ], - "type": "string" - } - ] - }, - "TurnStatus": { - "enum": [ - "completed", - "interrupted", - "failed", - "inProgress" - ], - "type": "string" - }, - "UserInput": { - "oneOf": [ - { - "properties": { - "text": { - "type": "string" - }, - "text_elements": { - "default": [], - "description": "UI-defined spans within `text` used to render or persist special elements.", - "items": { - "$ref": "#/definitions/TextElement" - }, - "type": "array" - }, - "type": { - "enum": [ - "text" - ], - "title": "TextUserInputType", - "type": "string" - } - }, - "required": [ - "text", - "type" - ], - "title": "TextUserInput", - "type": "object" - }, - { - "properties": { - "detail": { - "anyOf": [ - { - "$ref": "#/definitions/ImageDetail" - }, - { - "type": "null" - } - ], - "default": null - }, - "type": { - "enum": [ - "image" - ], - "title": "ImageUserInputType", - "type": "string" - }, - "url": { - "type": "string" - } - }, - "required": [ - "type", - "url" - ], - "title": "ImageUserInput", - "type": "object" - }, - { - "properties": { - "detail": { - "anyOf": [ - { - "$ref": "#/definitions/ImageDetail" - }, - { - "type": "null" - } - ], - "default": null - }, - "path": { - "type": "string" - }, - "type": { - "enum": [ - "localImage" - ], - "title": "LocalImageUserInputType", - "type": "string" - } - }, - "required": [ - "path", - "type" - ], - "title": "LocalImageUserInput", - "type": "object" - }, - { - "properties": { - "name": { - "type": "string" - }, - "path": { - "type": "string" - }, - "type": { - "enum": [ - "skill" - ], - "title": "SkillUserInputType", - "type": "string" - } - }, - "required": [ - "name", - "path", - "type" - ], - "title": "SkillUserInput", - "type": "object" - }, - { - "properties": { - "name": { - "type": "string" - }, - "path": { - "type": "string" - }, - "type": { - "enum": [ - "mention" - ], - "title": "MentionUserInputType", - "type": "string" - } - }, - "required": [ - "name", - "path", - "type" - ], - "title": "MentionUserInput", - "type": "object" - } - ] - }, - "WebSearchAction": { - "oneOf": [ - { - "properties": { - "queries": { - "items": { - "type": "string" - }, - "type": [ - "array", - "null" - ] - }, - "query": { - "type": [ - "string", - "null" - ] - }, - "type": { - "enum": [ - "search" - ], - "title": "SearchWebSearchActionType", - "type": "string" - } - }, - "required": [ - "type" - ], - "title": "SearchWebSearchAction", - "type": "object" - }, - { - "properties": { - "type": { - "enum": [ - "openPage" - ], - "title": "OpenPageWebSearchActionType", - "type": "string" - }, - "url": { - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "type" - ], - "title": "OpenPageWebSearchAction", - "type": "object" - }, - { - "properties": { - "pattern": { - "type": [ - "string", - "null" - ] - }, - "type": { - "enum": [ - "findInPage" - ], - "title": "FindInPageWebSearchActionType", - "type": "string" - }, - "url": { - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "type" - ], - "title": "FindInPageWebSearchAction", - "type": "object" - }, - { - "properties": { - "type": { - "enum": [ - "other" - ], - "title": "OtherWebSearchActionType", - "type": "string" - } - }, - "required": [ - "type" - ], - "title": "OtherWebSearchAction", - "type": "object" - } - ] - } - }, - "properties": { - "backwardsCursor": { - "description": "Opaque cursor to pass as `cursor` when reversing `sortDirection`. This is only populated when the page contains at least one turn. Use it with the opposite `sortDirection` to include the anchor turn again and catch updates to that turn.", - "type": [ - "string", - "null" - ] - }, - "data": { - "items": { - "$ref": "#/definitions/Turn" - }, - "type": "array" - }, - "nextCursor": { - "description": "Opaque cursor to pass to the next call to continue after the last turn. if None, there are no more turns to return.", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "data" - ], - "title": "ThreadTurnsListResponse", - "type": "object" -} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/TurnStartParams.json b/codex-rs/app-server-protocol/schema/json/v2/TurnStartParams.json index 859aadd496c..ecea8f19979 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/TurnStartParams.json +++ b/codex-rs/app-server-protocol/schema/json/v2/TurnStartParams.json @@ -5,17 +5,6 @@ "description": "A path that is guaranteed to be absolute and normalized (though it is not guaranteed to be canonicalized or exist on the filesystem).\n\nIMPORTANT: When deserializing an `AbsolutePathBuf`, a base path must be set using [AbsolutePathBufGuard::new]. If no base path is set, the deserialization will fail unless the path being deserialized is already absolute.", "type": "string" }, - "AdditionalContextEntry": { - "properties": { - "value": { - "type": "string" - } - }, - "required": [ - "value" - ], - "type": "object" - }, "ApprovalsReviewer": { "description": "Configures who approval requests are routed to for review. Examples include sandbox escapes, blocked network access, MCP approval prompts, and ARC escalations. Defaults to `user`. `auto_review` uses a carefully prompted subagent to gather relevant context and apply a risk-based decision framework before approving or denying the request. The legacy value `guardian_subagent` is accepted for compatibility.", "enum": [ @@ -481,16 +470,6 @@ } }, "properties": { - "additionalContext": { - "additionalProperties": { - "$ref": "#/definitions/AdditionalContextEntry" - }, - "description": "Optional client-provided context fragments keyed by an opaque source identifier.", - "type": [ - "object", - "null" - ] - }, "approvalPolicy": { "anyOf": [ { @@ -513,17 +492,6 @@ ], "description": "Override where approval requests are routed for review on this turn and subsequent turns." }, - "collaborationMode": { - "anyOf": [ - { - "$ref": "#/definitions/CollaborationMode" - }, - { - "type": "null" - } - ], - "description": "EXPERIMENTAL - Set a pre-set collaboration mode. Takes precedence over model, reasoning_effort, and developer instructions if set.\n\nFor `collaboration_mode.settings.developer_instructions`, `null` means \"use the built-in instructions for the selected mode\"." - }, "cwd": { "description": "Override the working directory for this turn and subsequent turns.", "type": [ @@ -542,16 +510,6 @@ ], "description": "Override the reasoning effort for this turn and subsequent turns." }, - "environments": { - "description": "Optional turn-scoped environments.\n\nOmitted uses the thread sticky environments. Empty disables environment access for this turn. Non-empty selects the first environment as the current turn environment for this turn.", - "items": { - "$ref": "#/definitions/TurnEnvironmentParams" - }, - "type": [ - "array", - "null" - ] - }, "input": { "items": { "$ref": "#/definitions/UserInput" @@ -568,13 +526,6 @@ "outputSchema": { "description": "Optional JSON Schema used to constrain the final assistant message for this turn." }, - "permissions": { - "description": "Select a named permissions profile id for this turn and subsequent turns. Cannot be combined with `sandboxPolicy`.", - "type": [ - "string", - "null" - ] - }, "personality": { "anyOf": [ { @@ -586,26 +537,6 @@ ], "description": "Override the personality for this turn and subsequent turns." }, - "responsesapiClientMetadata": { - "additionalProperties": { - "type": "string" - }, - "description": "Optional turn-scoped Responses API client metadata.", - "type": [ - "object", - "null" - ] - }, - "runtimeWorkspaceRoots": { - "description": "Replace the thread's runtime workspace roots for this turn and subsequent turns. Relative paths are resolved against the effective cwd for the turn.", - "items": { - "type": "string" - }, - "type": [ - "array", - "null" - ] - }, "sandboxPolicy": { "anyOf": [ { diff --git a/codex-rs/app-server-protocol/schema/json/v2/TurnSteerParams.json b/codex-rs/app-server-protocol/schema/json/v2/TurnSteerParams.json index 43ec9c4a408..1b7cfbf4008 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/TurnSteerParams.json +++ b/codex-rs/app-server-protocol/schema/json/v2/TurnSteerParams.json @@ -1,17 +1,6 @@ { "$schema": "http://json-schema.org/draft-07/schema#", "definitions": { - "AdditionalContextEntry": { - "properties": { - "value": { - "type": "string" - } - }, - "required": [ - "value" - ], - "type": "object" - }, "ByteRange": { "properties": { "end": { @@ -205,16 +194,6 @@ } }, "properties": { - "additionalContext": { - "additionalProperties": { - "$ref": "#/definitions/AdditionalContextEntry" - }, - "description": "Optional client-provided context fragments keyed by an opaque source identifier.", - "type": [ - "object", - "null" - ] - }, "expectedTurnId": { "description": "Required active turn id precondition. The request fails when it does not match the currently active turn.", "type": "string" @@ -225,16 +204,6 @@ }, "type": "array" }, - "responsesapiClientMetadata": { - "additionalProperties": { - "type": "string" - }, - "description": "Optional turn-scoped Responses API client metadata.", - "type": [ - "object", - "null" - ] - }, "threadId": { "type": "string" } diff --git a/codex-rs/app-server-protocol/schema/typescript/ClientRequest.ts b/codex-rs/app-server-protocol/schema/typescript/ClientRequest.ts index 426ceabb945..86ba2cd171f 100644 --- a/codex-rs/app-server-protocol/schema/typescript/ClientRequest.ts +++ b/codex-rs/app-server-protocol/schema/typescript/ClientRequest.ts @@ -2,9 +2,6 @@ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. import type { FuzzyFileSearchParams } from "./FuzzyFileSearchParams"; -import type { FuzzyFileSearchSessionStartParams } from "./FuzzyFileSearchSessionStartParams"; -import type { FuzzyFileSearchSessionStopParams } from "./FuzzyFileSearchSessionStopParams"; -import type { FuzzyFileSearchSessionUpdateParams } from "./FuzzyFileSearchSessionUpdateParams"; import type { GetAuthStatusParams } from "./GetAuthStatusParams"; import type { GetConversationSummaryParams } from "./GetConversationSummaryParams"; import type { GitDiffToRemoteParams } from "./GitDiffToRemoteParams"; @@ -12,7 +9,6 @@ import type { InitializeParams } from "./InitializeParams"; import type { RequestId } from "./RequestId"; import type { AppsListParams } from "./v2/AppsListParams"; import type { CancelLoginAccountParams } from "./v2/CancelLoginAccountParams"; -import type { CollaborationModeListParams } from "./v2/CollaborationModeListParams"; import type { CommandExecParams } from "./v2/CommandExecParams"; import type { CommandExecResizeParams } from "./v2/CommandExecResizeParams"; import type { CommandExecTerminateParams } from "./v2/CommandExecTerminateParams"; @@ -20,7 +16,6 @@ import type { CommandExecWriteParams } from "./v2/CommandExecWriteParams"; import type { ConfigBatchWriteParams } from "./v2/ConfigBatchWriteParams"; import type { ConfigReadParams } from "./v2/ConfigReadParams"; import type { ConfigValueWriteParams } from "./v2/ConfigValueWriteParams"; -import type { EnvironmentAddParams } from "./v2/EnvironmentAddParams"; import type { ExperimentalFeatureEnablementSetParams } from "./v2/ExperimentalFeatureEnablementSetParams"; import type { ExperimentalFeatureListParams } from "./v2/ExperimentalFeatureListParams"; import type { ExternalAgentConfigDetectParams } from "./v2/ExternalAgentConfigDetectParams"; @@ -45,7 +40,6 @@ import type { MarketplaceUpgradeParams } from "./v2/MarketplaceUpgradeParams"; import type { McpResourceReadParams } from "./v2/McpResourceReadParams"; import type { McpServerOauthLoginParams } from "./v2/McpServerOauthLoginParams"; import type { McpServerToolCallParams } from "./v2/McpServerToolCallParams"; -import type { MockExperimentalMethodParams } from "./v2/MockExperimentalMethodParams"; import type { ModelListParams } from "./v2/ModelListParams"; import type { ModelProviderCapabilitiesReadParams } from "./v2/ModelProviderCapabilitiesReadParams"; import type { PermissionProfileListParams } from "./v2/PermissionProfileListParams"; @@ -60,44 +54,27 @@ import type { PluginShareSaveParams } from "./v2/PluginShareSaveParams"; import type { PluginShareUpdateTargetsParams } from "./v2/PluginShareUpdateTargetsParams"; import type { PluginSkillReadParams } from "./v2/PluginSkillReadParams"; import type { PluginUninstallParams } from "./v2/PluginUninstallParams"; -import type { ProcessKillParams } from "./v2/ProcessKillParams"; -import type { ProcessResizePtyParams } from "./v2/ProcessResizePtyParams"; -import type { ProcessSpawnParams } from "./v2/ProcessSpawnParams"; -import type { ProcessWriteStdinParams } from "./v2/ProcessWriteStdinParams"; import type { ReviewStartParams } from "./v2/ReviewStartParams"; import type { SendAddCreditsNudgeEmailParams } from "./v2/SendAddCreditsNudgeEmailParams"; import type { SkillsConfigWriteParams } from "./v2/SkillsConfigWriteParams"; import type { SkillsListParams } from "./v2/SkillsListParams"; import type { ThreadApproveGuardianDeniedActionParams } from "./v2/ThreadApproveGuardianDeniedActionParams"; import type { ThreadArchiveParams } from "./v2/ThreadArchiveParams"; -import type { ThreadBackgroundTerminalsCleanParams } from "./v2/ThreadBackgroundTerminalsCleanParams"; import type { ThreadCompactStartParams } from "./v2/ThreadCompactStartParams"; -import type { ThreadDecrementElicitationParams } from "./v2/ThreadDecrementElicitationParams"; import type { ThreadForkParams } from "./v2/ThreadForkParams"; import type { ThreadGoalClearParams } from "./v2/ThreadGoalClearParams"; import type { ThreadGoalGetParams } from "./v2/ThreadGoalGetParams"; import type { ThreadGoalSetParams } from "./v2/ThreadGoalSetParams"; -import type { ThreadIncrementElicitationParams } from "./v2/ThreadIncrementElicitationParams"; import type { ThreadInjectItemsParams } from "./v2/ThreadInjectItemsParams"; import type { ThreadListParams } from "./v2/ThreadListParams"; import type { ThreadLoadedListParams } from "./v2/ThreadLoadedListParams"; -import type { ThreadMemoryModeSetParams } from "./v2/ThreadMemoryModeSetParams"; import type { ThreadMetadataUpdateParams } from "./v2/ThreadMetadataUpdateParams"; import type { ThreadReadParams } from "./v2/ThreadReadParams"; -import type { ThreadRealtimeAppendAudioParams } from "./v2/ThreadRealtimeAppendAudioParams"; -import type { ThreadRealtimeAppendTextParams } from "./v2/ThreadRealtimeAppendTextParams"; -import type { ThreadRealtimeListVoicesParams } from "./v2/ThreadRealtimeListVoicesParams"; -import type { ThreadRealtimeStartParams } from "./v2/ThreadRealtimeStartParams"; -import type { ThreadRealtimeStopParams } from "./v2/ThreadRealtimeStopParams"; import type { ThreadResumeParams } from "./v2/ThreadResumeParams"; import type { ThreadRollbackParams } from "./v2/ThreadRollbackParams"; -import type { ThreadSearchParams } from "./v2/ThreadSearchParams"; import type { ThreadSetNameParams } from "./v2/ThreadSetNameParams"; -import type { ThreadSettingsUpdateParams } from "./v2/ThreadSettingsUpdateParams"; import type { ThreadShellCommandParams } from "./v2/ThreadShellCommandParams"; import type { ThreadStartParams } from "./v2/ThreadStartParams"; -import type { ThreadTurnsItemsListParams } from "./v2/ThreadTurnsItemsListParams"; -import type { ThreadTurnsListParams } from "./v2/ThreadTurnsListParams"; import type { ThreadUnarchiveParams } from "./v2/ThreadUnarchiveParams"; import type { ThreadUnsubscribeParams } from "./v2/ThreadUnsubscribeParams"; import type { TurnInterruptParams } from "./v2/TurnInterruptParams"; @@ -108,4 +85,4 @@ import type { WindowsSandboxSetupStartParams } from "./v2/WindowsSandboxSetupSta /** * Request from the client to the server. */ -export type ClientRequest = { "method": "initialize", id: RequestId, params: InitializeParams, } | { "method": "thread/start", id: RequestId, params: ThreadStartParams, } | { "method": "thread/resume", id: RequestId, params: ThreadResumeParams, } | { "method": "thread/fork", id: RequestId, params: ThreadForkParams, } | { "method": "thread/archive", id: RequestId, params: ThreadArchiveParams, } | { "method": "thread/unsubscribe", id: RequestId, params: ThreadUnsubscribeParams, } | { "method": "thread/increment_elicitation", id: RequestId, params: ThreadIncrementElicitationParams, } | { "method": "thread/decrement_elicitation", id: RequestId, params: ThreadDecrementElicitationParams, } | { "method": "thread/name/set", id: RequestId, params: ThreadSetNameParams, } | { "method": "thread/goal/set", id: RequestId, params: ThreadGoalSetParams, } | { "method": "thread/goal/get", id: RequestId, params: ThreadGoalGetParams, } | { "method": "thread/goal/clear", id: RequestId, params: ThreadGoalClearParams, } | { "method": "thread/metadata/update", id: RequestId, params: ThreadMetadataUpdateParams, } | { "method": "thread/settings/update", id: RequestId, params: ThreadSettingsUpdateParams, } | { "method": "thread/memoryMode/set", id: RequestId, params: ThreadMemoryModeSetParams, } | { "method": "memory/reset", id: RequestId, params: undefined, } | { "method": "thread/unarchive", id: RequestId, params: ThreadUnarchiveParams, } | { "method": "thread/compact/start", id: RequestId, params: ThreadCompactStartParams, } | { "method": "thread/shellCommand", id: RequestId, params: ThreadShellCommandParams, } | { "method": "thread/approveGuardianDeniedAction", id: RequestId, params: ThreadApproveGuardianDeniedActionParams, } | { "method": "thread/backgroundTerminals/clean", id: RequestId, params: ThreadBackgroundTerminalsCleanParams, } | { "method": "thread/rollback", id: RequestId, params: ThreadRollbackParams, } | { "method": "thread/list", id: RequestId, params: ThreadListParams, } | { "method": "thread/search", id: RequestId, params: ThreadSearchParams, } | { "method": "thread/loaded/list", id: RequestId, params: ThreadLoadedListParams, } | { "method": "thread/read", id: RequestId, params: ThreadReadParams, } | { "method": "thread/turns/list", id: RequestId, params: ThreadTurnsListParams, } | { "method": "thread/turns/items/list", id: RequestId, params: ThreadTurnsItemsListParams, } | { "method": "thread/inject_items", id: RequestId, params: ThreadInjectItemsParams, } | { "method": "skills/list", id: RequestId, params: SkillsListParams, } | { "method": "hooks/list", id: RequestId, params: HooksListParams, } | { "method": "marketplace/add", id: RequestId, params: MarketplaceAddParams, } | { "method": "marketplace/remove", id: RequestId, params: MarketplaceRemoveParams, } | { "method": "marketplace/upgrade", id: RequestId, params: MarketplaceUpgradeParams, } | { "method": "plugin/list", id: RequestId, params: PluginListParams, } | { "method": "plugin/installed", id: RequestId, params: PluginInstalledParams, } | { "method": "plugin/read", id: RequestId, params: PluginReadParams, } | { "method": "plugin/skill/read", id: RequestId, params: PluginSkillReadParams, } | { "method": "plugin/share/save", id: RequestId, params: PluginShareSaveParams, } | { "method": "plugin/share/updateTargets", id: RequestId, params: PluginShareUpdateTargetsParams, } | { "method": "plugin/share/list", id: RequestId, params: PluginShareListParams, } | { "method": "plugin/share/checkout", id: RequestId, params: PluginShareCheckoutParams, } | { "method": "plugin/share/delete", id: RequestId, params: PluginShareDeleteParams, } | { "method": "app/list", id: RequestId, params: AppsListParams, } | { "method": "fs/readFile", id: RequestId, params: FsReadFileParams, } | { "method": "fs/writeFile", id: RequestId, params: FsWriteFileParams, } | { "method": "fs/createDirectory", id: RequestId, params: FsCreateDirectoryParams, } | { "method": "fs/getMetadata", id: RequestId, params: FsGetMetadataParams, } | { "method": "fs/readDirectory", id: RequestId, params: FsReadDirectoryParams, } | { "method": "fs/remove", id: RequestId, params: FsRemoveParams, } | { "method": "fs/copy", id: RequestId, params: FsCopyParams, } | { "method": "fs/watch", id: RequestId, params: FsWatchParams, } | { "method": "fs/unwatch", id: RequestId, params: FsUnwatchParams, } | { "method": "skills/config/write", id: RequestId, params: SkillsConfigWriteParams, } | { "method": "plugin/install", id: RequestId, params: PluginInstallParams, } | { "method": "plugin/uninstall", id: RequestId, params: PluginUninstallParams, } | { "method": "turn/start", id: RequestId, params: TurnStartParams, } | { "method": "turn/steer", id: RequestId, params: TurnSteerParams, } | { "method": "turn/interrupt", id: RequestId, params: TurnInterruptParams, } | { "method": "thread/realtime/start", id: RequestId, params: ThreadRealtimeStartParams, } | { "method": "thread/realtime/appendAudio", id: RequestId, params: ThreadRealtimeAppendAudioParams, } | { "method": "thread/realtime/appendText", id: RequestId, params: ThreadRealtimeAppendTextParams, } | { "method": "thread/realtime/stop", id: RequestId, params: ThreadRealtimeStopParams, } | { "method": "thread/realtime/listVoices", id: RequestId, params: ThreadRealtimeListVoicesParams, } | { "method": "review/start", id: RequestId, params: ReviewStartParams, } | { "method": "model/list", id: RequestId, params: ModelListParams, } | { "method": "modelProvider/capabilities/read", id: RequestId, params: ModelProviderCapabilitiesReadParams, } | { "method": "experimentalFeature/list", id: RequestId, params: ExperimentalFeatureListParams, } | { "method": "permissionProfile/list", id: RequestId, params: PermissionProfileListParams, } | { "method": "experimentalFeature/enablement/set", id: RequestId, params: ExperimentalFeatureEnablementSetParams, } | { "method": "remoteControl/enable", id: RequestId, params: undefined, } | { "method": "remoteControl/disable", id: RequestId, params: undefined, } | { "method": "remoteControl/status/read", id: RequestId, params: undefined, } | { "method": "collaborationMode/list", id: RequestId, params: CollaborationModeListParams, } | { "method": "mock/experimentalMethod", id: RequestId, params: MockExperimentalMethodParams, } | { "method": "environment/add", id: RequestId, params: EnvironmentAddParams, } | { "method": "mcpServer/oauth/login", id: RequestId, params: McpServerOauthLoginParams, } | { "method": "config/mcpServer/reload", id: RequestId, params: undefined, } | { "method": "mcpServerStatus/list", id: RequestId, params: ListMcpServerStatusParams, } | { "method": "mcpServer/resource/read", id: RequestId, params: McpResourceReadParams, } | { "method": "mcpServer/tool/call", id: RequestId, params: McpServerToolCallParams, } | { "method": "windowsSandbox/setupStart", id: RequestId, params: WindowsSandboxSetupStartParams, } | { "method": "windowsSandbox/readiness", id: RequestId, params: undefined, } | { "method": "account/login/start", id: RequestId, params: LoginAccountParams, } | { "method": "account/login/cancel", id: RequestId, params: CancelLoginAccountParams, } | { "method": "account/logout", id: RequestId, params: undefined, } | { "method": "account/rateLimits/read", id: RequestId, params: undefined, } | { "method": "account/sendAddCreditsNudgeEmail", id: RequestId, params: SendAddCreditsNudgeEmailParams, } | { "method": "feedback/upload", id: RequestId, params: FeedbackUploadParams, } | { "method": "command/exec", id: RequestId, params: CommandExecParams, } | { "method": "command/exec/write", id: RequestId, params: CommandExecWriteParams, } | { "method": "command/exec/terminate", id: RequestId, params: CommandExecTerminateParams, } | { "method": "command/exec/resize", id: RequestId, params: CommandExecResizeParams, } | { "method": "process/spawn", id: RequestId, params: ProcessSpawnParams, } | { "method": "process/writeStdin", id: RequestId, params: ProcessWriteStdinParams, } | { "method": "process/kill", id: RequestId, params: ProcessKillParams, } | { "method": "process/resizePty", id: RequestId, params: ProcessResizePtyParams, } | { "method": "config/read", id: RequestId, params: ConfigReadParams, } | { "method": "externalAgentConfig/detect", id: RequestId, params: ExternalAgentConfigDetectParams, } | { "method": "externalAgentConfig/import", id: RequestId, params: ExternalAgentConfigImportParams, } | { "method": "config/value/write", id: RequestId, params: ConfigValueWriteParams, } | { "method": "config/batchWrite", id: RequestId, params: ConfigBatchWriteParams, } | { "method": "configRequirements/read", id: RequestId, params: undefined, } | { "method": "account/read", id: RequestId, params: GetAccountParams, } | { "method": "getConversationSummary", id: RequestId, params: GetConversationSummaryParams, } | { "method": "gitDiffToRemote", id: RequestId, params: GitDiffToRemoteParams, } | { "method": "getAuthStatus", id: RequestId, params: GetAuthStatusParams, } | { "method": "fuzzyFileSearch", id: RequestId, params: FuzzyFileSearchParams, } | { "method": "fuzzyFileSearch/sessionStart", id: RequestId, params: FuzzyFileSearchSessionStartParams, } | { "method": "fuzzyFileSearch/sessionUpdate", id: RequestId, params: FuzzyFileSearchSessionUpdateParams, } | { "method": "fuzzyFileSearch/sessionStop", id: RequestId, params: FuzzyFileSearchSessionStopParams, }; +export type ClientRequest ={ "method": "initialize", id: RequestId, params: InitializeParams, } | { "method": "thread/start", id: RequestId, params: ThreadStartParams, } | { "method": "thread/resume", id: RequestId, params: ThreadResumeParams, } | { "method": "thread/fork", id: RequestId, params: ThreadForkParams, } | { "method": "thread/archive", id: RequestId, params: ThreadArchiveParams, } | { "method": "thread/unsubscribe", id: RequestId, params: ThreadUnsubscribeParams, } | { "method": "thread/name/set", id: RequestId, params: ThreadSetNameParams, } | { "method": "thread/goal/set", id: RequestId, params: ThreadGoalSetParams, } | { "method": "thread/goal/get", id: RequestId, params: ThreadGoalGetParams, } | { "method": "thread/goal/clear", id: RequestId, params: ThreadGoalClearParams, } | { "method": "thread/metadata/update", id: RequestId, params: ThreadMetadataUpdateParams, } | { "method": "thread/unarchive", id: RequestId, params: ThreadUnarchiveParams, } | { "method": "thread/compact/start", id: RequestId, params: ThreadCompactStartParams, } | { "method": "thread/shellCommand", id: RequestId, params: ThreadShellCommandParams, } | { "method": "thread/approveGuardianDeniedAction", id: RequestId, params: ThreadApproveGuardianDeniedActionParams, } | { "method": "thread/rollback", id: RequestId, params: ThreadRollbackParams, } | { "method": "thread/list", id: RequestId, params: ThreadListParams, } | { "method": "thread/loaded/list", id: RequestId, params: ThreadLoadedListParams, } | { "method": "thread/read", id: RequestId, params: ThreadReadParams, } | { "method": "thread/inject_items", id: RequestId, params: ThreadInjectItemsParams, } | { "method": "skills/list", id: RequestId, params: SkillsListParams, } | { "method": "hooks/list", id: RequestId, params: HooksListParams, } | { "method": "marketplace/add", id: RequestId, params: MarketplaceAddParams, } | { "method": "marketplace/remove", id: RequestId, params: MarketplaceRemoveParams, } | { "method": "marketplace/upgrade", id: RequestId, params: MarketplaceUpgradeParams, } | { "method": "plugin/list", id: RequestId, params: PluginListParams, } | { "method": "plugin/installed", id: RequestId, params: PluginInstalledParams, } | { "method": "plugin/read", id: RequestId, params: PluginReadParams, } | { "method": "plugin/skill/read", id: RequestId, params: PluginSkillReadParams, } | { "method": "plugin/share/save", id: RequestId, params: PluginShareSaveParams, } | { "method": "plugin/share/updateTargets", id: RequestId, params: PluginShareUpdateTargetsParams, } | { "method": "plugin/share/list", id: RequestId, params: PluginShareListParams, } | { "method": "plugin/share/checkout", id: RequestId, params: PluginShareCheckoutParams, } | { "method": "plugin/share/delete", id: RequestId, params: PluginShareDeleteParams, } | { "method": "app/list", id: RequestId, params: AppsListParams, } | { "method": "fs/readFile", id: RequestId, params: FsReadFileParams, } | { "method": "fs/writeFile", id: RequestId, params: FsWriteFileParams, } | { "method": "fs/createDirectory", id: RequestId, params: FsCreateDirectoryParams, } | { "method": "fs/getMetadata", id: RequestId, params: FsGetMetadataParams, } | { "method": "fs/readDirectory", id: RequestId, params: FsReadDirectoryParams, } | { "method": "fs/remove", id: RequestId, params: FsRemoveParams, } | { "method": "fs/copy", id: RequestId, params: FsCopyParams, } | { "method": "fs/watch", id: RequestId, params: FsWatchParams, } | { "method": "fs/unwatch", id: RequestId, params: FsUnwatchParams, } | { "method": "skills/config/write", id: RequestId, params: SkillsConfigWriteParams, } | { "method": "plugin/install", id: RequestId, params: PluginInstallParams, } | { "method": "plugin/uninstall", id: RequestId, params: PluginUninstallParams, } | { "method": "turn/start", id: RequestId, params: TurnStartParams, } | { "method": "turn/steer", id: RequestId, params: TurnSteerParams, } | { "method": "turn/interrupt", id: RequestId, params: TurnInterruptParams, } | { "method": "review/start", id: RequestId, params: ReviewStartParams, } | { "method": "model/list", id: RequestId, params: ModelListParams, } | { "method": "modelProvider/capabilities/read", id: RequestId, params: ModelProviderCapabilitiesReadParams, } | { "method": "experimentalFeature/list", id: RequestId, params: ExperimentalFeatureListParams, } | { "method": "permissionProfile/list", id: RequestId, params: PermissionProfileListParams, } | { "method": "experimentalFeature/enablement/set", id: RequestId, params: ExperimentalFeatureEnablementSetParams, } | { "method": "mcpServer/oauth/login", id: RequestId, params: McpServerOauthLoginParams, } | { "method": "config/mcpServer/reload", id: RequestId, params: undefined, } | { "method": "mcpServerStatus/list", id: RequestId, params: ListMcpServerStatusParams, } | { "method": "mcpServer/resource/read", id: RequestId, params: McpResourceReadParams, } | { "method": "mcpServer/tool/call", id: RequestId, params: McpServerToolCallParams, } | { "method": "windowsSandbox/setupStart", id: RequestId, params: WindowsSandboxSetupStartParams, } | { "method": "windowsSandbox/readiness", id: RequestId, params: undefined, } | { "method": "account/login/start", id: RequestId, params: LoginAccountParams, } | { "method": "account/login/cancel", id: RequestId, params: CancelLoginAccountParams, } | { "method": "account/logout", id: RequestId, params: undefined, } | { "method": "account/rateLimits/read", id: RequestId, params: undefined, } | { "method": "account/sendAddCreditsNudgeEmail", id: RequestId, params: SendAddCreditsNudgeEmailParams, } | { "method": "feedback/upload", id: RequestId, params: FeedbackUploadParams, } | { "method": "command/exec", id: RequestId, params: CommandExecParams, } | { "method": "command/exec/write", id: RequestId, params: CommandExecWriteParams, } | { "method": "command/exec/terminate", id: RequestId, params: CommandExecTerminateParams, } | { "method": "command/exec/resize", id: RequestId, params: CommandExecResizeParams, } | { "method": "config/read", id: RequestId, params: ConfigReadParams, } | { "method": "externalAgentConfig/detect", id: RequestId, params: ExternalAgentConfigDetectParams, } | { "method": "externalAgentConfig/import", id: RequestId, params: ExternalAgentConfigImportParams, } | { "method": "config/value/write", id: RequestId, params: ConfigValueWriteParams, } | { "method": "config/batchWrite", id: RequestId, params: ConfigBatchWriteParams, } | { "method": "configRequirements/read", id: RequestId, params: undefined, } | { "method": "account/read", id: RequestId, params: GetAccountParams, } | { "method": "getConversationSummary", id: RequestId, params: GetConversationSummaryParams, } | { "method": "gitDiffToRemote", id: RequestId, params: GitDiffToRemoteParams, } | { "method": "getAuthStatus", id: RequestId, params: GetAuthStatusParams, } | { "method": "fuzzyFileSearch", id: RequestId, params: FuzzyFileSearchParams, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/FuzzyFileSearchSessionStartParams.ts b/codex-rs/app-server-protocol/schema/typescript/FuzzyFileSearchSessionStartParams.ts deleted file mode 100644 index a43d64ce8be..00000000000 --- a/codex-rs/app-server-protocol/schema/typescript/FuzzyFileSearchSessionStartParams.ts +++ /dev/null @@ -1,5 +0,0 @@ -// GENERATED CODE! DO NOT MODIFY BY HAND! - -// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. - -export type FuzzyFileSearchSessionStartParams = { sessionId: string, roots: Array, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/FuzzyFileSearchSessionStartResponse.ts b/codex-rs/app-server-protocol/schema/typescript/FuzzyFileSearchSessionStartResponse.ts deleted file mode 100644 index cfe1399b75c..00000000000 --- a/codex-rs/app-server-protocol/schema/typescript/FuzzyFileSearchSessionStartResponse.ts +++ /dev/null @@ -1,5 +0,0 @@ -// GENERATED CODE! DO NOT MODIFY BY HAND! - -// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. - -export type FuzzyFileSearchSessionStartResponse = Record; diff --git a/codex-rs/app-server-protocol/schema/typescript/FuzzyFileSearchSessionStopParams.ts b/codex-rs/app-server-protocol/schema/typescript/FuzzyFileSearchSessionStopParams.ts deleted file mode 100644 index c65613e5604..00000000000 --- a/codex-rs/app-server-protocol/schema/typescript/FuzzyFileSearchSessionStopParams.ts +++ /dev/null @@ -1,5 +0,0 @@ -// GENERATED CODE! DO NOT MODIFY BY HAND! - -// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. - -export type FuzzyFileSearchSessionStopParams = { sessionId: string, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/FuzzyFileSearchSessionStopResponse.ts b/codex-rs/app-server-protocol/schema/typescript/FuzzyFileSearchSessionStopResponse.ts deleted file mode 100644 index a3500fb00c6..00000000000 --- a/codex-rs/app-server-protocol/schema/typescript/FuzzyFileSearchSessionStopResponse.ts +++ /dev/null @@ -1,5 +0,0 @@ -// GENERATED CODE! DO NOT MODIFY BY HAND! - -// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. - -export type FuzzyFileSearchSessionStopResponse = Record; diff --git a/codex-rs/app-server-protocol/schema/typescript/FuzzyFileSearchSessionUpdateParams.ts b/codex-rs/app-server-protocol/schema/typescript/FuzzyFileSearchSessionUpdateParams.ts deleted file mode 100644 index 888d4689fb6..00000000000 --- a/codex-rs/app-server-protocol/schema/typescript/FuzzyFileSearchSessionUpdateParams.ts +++ /dev/null @@ -1,5 +0,0 @@ -// GENERATED CODE! DO NOT MODIFY BY HAND! - -// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. - -export type FuzzyFileSearchSessionUpdateParams = { sessionId: string, query: string, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/FuzzyFileSearchSessionUpdateResponse.ts b/codex-rs/app-server-protocol/schema/typescript/FuzzyFileSearchSessionUpdateResponse.ts deleted file mode 100644 index 54b8701656d..00000000000 --- a/codex-rs/app-server-protocol/schema/typescript/FuzzyFileSearchSessionUpdateResponse.ts +++ /dev/null @@ -1,5 +0,0 @@ -// GENERATED CODE! DO NOT MODIFY BY HAND! - -// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. - -export type FuzzyFileSearchSessionUpdateResponse = Record; diff --git a/codex-rs/app-server-protocol/schema/typescript/index.ts b/codex-rs/app-server-protocol/schema/typescript/index.ts index 0748d79e457..8be75af546f 100644 --- a/codex-rs/app-server-protocol/schema/typescript/index.ts +++ b/codex-rs/app-server-protocol/schema/typescript/index.ts @@ -25,12 +25,6 @@ export type { FuzzyFileSearchParams } from "./FuzzyFileSearchParams"; export type { FuzzyFileSearchResponse } from "./FuzzyFileSearchResponse"; export type { FuzzyFileSearchResult } from "./FuzzyFileSearchResult"; export type { FuzzyFileSearchSessionCompletedNotification } from "./FuzzyFileSearchSessionCompletedNotification"; -export type { FuzzyFileSearchSessionStartParams } from "./FuzzyFileSearchSessionStartParams"; -export type { FuzzyFileSearchSessionStartResponse } from "./FuzzyFileSearchSessionStartResponse"; -export type { FuzzyFileSearchSessionStopParams } from "./FuzzyFileSearchSessionStopParams"; -export type { FuzzyFileSearchSessionStopResponse } from "./FuzzyFileSearchSessionStopResponse"; -export type { FuzzyFileSearchSessionUpdateParams } from "./FuzzyFileSearchSessionUpdateParams"; -export type { FuzzyFileSearchSessionUpdateResponse } from "./FuzzyFileSearchSessionUpdateResponse"; export type { FuzzyFileSearchSessionUpdatedNotification } from "./FuzzyFileSearchSessionUpdatedNotification"; export type { GetAuthStatusParams } from "./GetAuthStatusParams"; export type { GetAuthStatusResponse } from "./GetAuthStatusResponse"; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/AdditionalContextEntry.ts b/codex-rs/app-server-protocol/schema/typescript/v2/AdditionalContextEntry.ts deleted file mode 100644 index cee8d9909e4..00000000000 --- a/codex-rs/app-server-protocol/schema/typescript/v2/AdditionalContextEntry.ts +++ /dev/null @@ -1,5 +0,0 @@ -// GENERATED CODE! DO NOT MODIFY BY HAND! - -// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. - -export type AdditionalContextEntry = { value: string, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/CollaborationModeListParams.ts b/codex-rs/app-server-protocol/schema/typescript/v2/CollaborationModeListParams.ts deleted file mode 100644 index 37e8f792d95..00000000000 --- a/codex-rs/app-server-protocol/schema/typescript/v2/CollaborationModeListParams.ts +++ /dev/null @@ -1,8 +0,0 @@ -// GENERATED CODE! DO NOT MODIFY BY HAND! - -// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. - -/** - * EXPERIMENTAL - list collaboration mode presets. - */ -export type CollaborationModeListParams = Record; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/CollaborationModeListResponse.ts b/codex-rs/app-server-protocol/schema/typescript/v2/CollaborationModeListResponse.ts deleted file mode 100644 index 5da935b9aba..00000000000 --- a/codex-rs/app-server-protocol/schema/typescript/v2/CollaborationModeListResponse.ts +++ /dev/null @@ -1,9 +0,0 @@ -// GENERATED CODE! DO NOT MODIFY BY HAND! - -// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. -import type { CollaborationModeMask } from "./CollaborationModeMask"; - -/** - * EXPERIMENTAL - collaboration mode presets response. - */ -export type CollaborationModeListResponse = { data: Array, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/CommandExecParams.ts b/codex-rs/app-server-protocol/schema/typescript/v2/CommandExecParams.ts index 91a917aaa73..221a2399c15 100644 --- a/codex-rs/app-server-protocol/schema/typescript/v2/CommandExecParams.ts +++ b/codex-rs/app-server-protocol/schema/typescript/v2/CommandExecParams.ts @@ -12,12 +12,10 @@ import type { SandboxPolicy } from "./SandboxPolicy"; * sent only after all `command/exec/outputDelta` notifications for that * connection have been emitted. */ -export type CommandExecParams = { -/** +export type CommandExecParams = {/** * Command argv vector. Empty arrays are rejected. */ -command: Array, -/** +command: Array, /** * Optional client-supplied, connection-scoped process id. * * Required for `tty`, `streamStdin`, `streamStdoutStderr`, and follow-up @@ -25,81 +23,63 @@ command: Array, * `command/exec/terminate` calls. When omitted, buffered execution gets an * internal id that is not exposed to the client. */ -processId?: string | null, -/** +processId?: string | null, /** * Enable PTY mode. * * This implies `streamStdin` and `streamStdoutStderr`. */ -tty?: boolean, -/** +tty?: boolean, /** * Allow follow-up `command/exec/write` requests to write stdin bytes. * * Requires a client-supplied `processId`. */ -streamStdin?: boolean, -/** +streamStdin?: boolean, /** * Stream stdout/stderr via `command/exec/outputDelta` notifications. * * Streamed bytes are not duplicated into the final response and require a * client-supplied `processId`. */ -streamStdoutStderr?: boolean, -/** +streamStdoutStderr?: boolean, /** * Optional per-stream stdout/stderr capture cap in bytes. * * When omitted, the server default applies. Cannot be combined with * `disableOutputCap`. */ -outputBytesCap?: number | null, -/** +outputBytesCap?: number | null, /** * Disable stdout/stderr capture truncation for this request. * * Cannot be combined with `outputBytesCap`. */ -disableOutputCap?: boolean, -/** +disableOutputCap?: boolean, /** * Disable the timeout entirely for this request. * * Cannot be combined with `timeoutMs`. */ -disableTimeout?: boolean, -/** +disableTimeout?: boolean, /** * Optional timeout in milliseconds. * * When omitted, the server default applies. Cannot be combined with * `disableTimeout`. */ -timeoutMs?: number | null, -/** +timeoutMs?: number | null, /** * Optional working directory. Defaults to the server cwd. */ -cwd?: string | null, -/** +cwd?: string | null, /** * Optional environment overrides merged into the server-computed * environment. * * Matching names override inherited values. Set a key to `null` to unset * an inherited variable. */ -env?: { [key in string]?: string | null } | null, -/** +env?: { [key in string]?: string | null } | null, /** * Optional initial PTY size in character cells. Only valid when `tty` is * true. */ -size?: CommandExecTerminalSize | null, -/** +size?: CommandExecTerminalSize | null, /** * Optional sandbox policy for this command. * * Uses the same shape as thread/turn execution sandbox configuration and * defaults to the user's configured policy when omitted. Cannot be * combined with `permissionProfile`. */ -sandboxPolicy?: SandboxPolicy | null, -/** - * Optional active permissions profile id for this command. - * - * Defaults to the user's configured permissions when omitted. Cannot be - * combined with `sandboxPolicy`. - */ -permissionProfile?: string | null, }; +sandboxPolicy?: SandboxPolicy | null}; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/CommandExecutionRequestApprovalParams.ts b/codex-rs/app-server-protocol/schema/typescript/v2/CommandExecutionRequestApprovalParams.ts index 824e985021f..0e9100836a6 100644 --- a/codex-rs/app-server-protocol/schema/typescript/v2/CommandExecutionRequestApprovalParams.ts +++ b/codex-rs/app-server-protocol/schema/typescript/v2/CommandExecutionRequestApprovalParams.ts @@ -2,19 +2,15 @@ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. import type { AbsolutePathBuf } from "../AbsolutePathBuf"; -import type { AdditionalPermissionProfile } from "./AdditionalPermissionProfile"; import type { CommandAction } from "./CommandAction"; -import type { CommandExecutionApprovalDecision } from "./CommandExecutionApprovalDecision"; import type { ExecPolicyAmendment } from "./ExecPolicyAmendment"; import type { NetworkApprovalContext } from "./NetworkApprovalContext"; import type { NetworkPolicyAmendment } from "./NetworkPolicyAmendment"; -export type CommandExecutionRequestApprovalParams = { threadId: string, turnId: string, itemId: string, -/** +export type CommandExecutionRequestApprovalParams = {threadId: string, turnId: string, itemId: string, /** * Unix timestamp (in milliseconds) when this approval request started. */ -startedAtMs: number, -/** +startedAtMs: number, /** * Unique identifier for this specific approval callback. * * For regular shell/unified_exec approvals, this is null. @@ -23,40 +19,25 @@ startedAtMs: number, * one parent `itemId`, so `approvalId` is a distinct opaque callback id * (a UUID) used to disambiguate routing. */ -approvalId?: string | null, -/** +approvalId?: string | null, /** * Optional explanatory reason (e.g. request for network access). */ -reason?: string | null, -/** +reason?: string | null, /** * Optional context for a managed-network approval prompt. */ -networkApprovalContext?: NetworkApprovalContext | null, -/** +networkApprovalContext?: NetworkApprovalContext | null, /** * The command to be executed. */ -command?: string | null, -/** +command?: string | null, /** * The command's working directory. */ -cwd?: AbsolutePathBuf | null, -/** +cwd?: AbsolutePathBuf | null, /** * Best-effort parsed command actions for friendly display. */ -commandActions?: Array | null, -/** - * Optional additional permissions requested for this command. - */ -additionalPermissions?: AdditionalPermissionProfile | null, -/** +commandActions?: Array | null, /** * Optional proposed execpolicy amendment to allow similar commands without prompting. */ -proposedExecpolicyAmendment?: ExecPolicyAmendment | null, -/** +proposedExecpolicyAmendment?: ExecPolicyAmendment | null, /** * Optional proposed network policy amendments (allow/deny host) for future requests. */ -proposedNetworkPolicyAmendments?: Array | null, -/** - * Ordered list of decisions the client may present for this prompt. - */ -availableDecisions?: Array | null, }; +proposedNetworkPolicyAmendments?: Array | null}; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/Config.ts b/codex-rs/app-server-protocol/schema/typescript/v2/Config.ts index 2b38ecafa34..cc15fb4e720 100644 --- a/codex-rs/app-server-protocol/schema/typescript/v2/Config.ts +++ b/codex-rs/app-server-protocol/schema/typescript/v2/Config.ts @@ -10,16 +10,14 @@ import type { WebSearchMode } from "../WebSearchMode"; import type { JsonValue } from "../serde_json/JsonValue"; import type { AnalyticsConfig } from "./AnalyticsConfig"; import type { ApprovalsReviewer } from "./ApprovalsReviewer"; -import type { AppsConfig } from "./AppsConfig"; import type { AskForApproval } from "./AskForApproval"; import type { ForcedChatgptWorkspaceIds } from "./ForcedChatgptWorkspaceIds"; import type { SandboxMode } from "./SandboxMode"; import type { SandboxWorkspaceWrite } from "./SandboxWorkspaceWrite"; import type { ToolsV2 } from "./ToolsV2"; -export type Config = { model: string | null, review_model: string | null, model_context_window: bigint | null, model_auto_compact_token_limit: bigint | null, model_auto_compact_token_limit_scope: AutoCompactTokenLimitScope | null, model_provider: string | null, approval_policy: AskForApproval | null, -/** +export type Config = {model: string | null, review_model: string | null, model_context_window: bigint | null, model_auto_compact_token_limit: bigint | null, model_auto_compact_token_limit_scope: AutoCompactTokenLimitScope | null, model_provider: string | null, approval_policy: AskForApproval | null, /** * [UNSTABLE] Optional default for where approval requests are routed for * review. */ -approvals_reviewer: ApprovalsReviewer | null, sandbox_mode: SandboxMode | null, sandbox_workspace_write: SandboxWorkspaceWrite | null, forced_chatgpt_workspace_id: ForcedChatgptWorkspaceIds | null, forced_login_method: ForcedLoginMethod | null, web_search: WebSearchMode | null, tools: ToolsV2 | null, instructions: string | null, developer_instructions: string | null, compact_prompt: string | null, model_reasoning_effort: ReasoningEffort | null, model_reasoning_summary: ReasoningSummary | null, model_verbosity: Verbosity | null, service_tier: string | null, analytics: AnalyticsConfig | null, apps: AppsConfig | null, desktop: { [key in string]?: JsonValue } | null, } & ({ [key in string]?: number | string | boolean | Array | { [key in string]?: JsonValue } | null }); +approvals_reviewer: ApprovalsReviewer | null, sandbox_mode: SandboxMode | null, sandbox_workspace_write: SandboxWorkspaceWrite | null, forced_chatgpt_workspace_id: ForcedChatgptWorkspaceIds | null, forced_login_method: ForcedLoginMethod | null, web_search: WebSearchMode | null, tools: ToolsV2 | null, instructions: string | null, developer_instructions: string | null, compact_prompt: string | null, model_reasoning_effort: ReasoningEffort | null, model_reasoning_summary: ReasoningSummary | null, model_verbosity: Verbosity | null, service_tier: string | null, analytics: AnalyticsConfig | null, desktop: { [key in string]?: JsonValue } | null} & ({ [key in string]?: number | string | boolean | Array | { [key in string]?: JsonValue } | null }); diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ConfigRequirements.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ConfigRequirements.ts index 57f7d066da4..c5f3895866a 100644 --- a/codex-rs/app-server-protocol/schema/typescript/v2/ConfigRequirements.ts +++ b/codex-rs/app-server-protocol/schema/typescript/v2/ConfigRequirements.ts @@ -2,12 +2,9 @@ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. import type { WebSearchMode } from "../WebSearchMode"; -import type { ApprovalsReviewer } from "./ApprovalsReviewer"; import type { AskForApproval } from "./AskForApproval"; import type { ComputerUseRequirements } from "./ComputerUseRequirements"; -import type { ManagedHooksRequirements } from "./ManagedHooksRequirements"; -import type { NetworkRequirements } from "./NetworkRequirements"; import type { ResidencyRequirement } from "./ResidencyRequirement"; import type { SandboxMode } from "./SandboxMode"; -export type ConfigRequirements = { allowedApprovalPolicies: Array | null, allowedApprovalsReviewers: Array | null, allowedSandboxModes: Array | null, allowedPermissions: Array | null, allowedWebSearchModes: Array | null, allowManagedHooksOnly: boolean | null, allowAppshots: boolean | null, computerUse: ComputerUseRequirements | null, featureRequirements: { [key in string]?: boolean } | null, hooks: ManagedHooksRequirements | null, enforceResidency: ResidencyRequirement | null, network: NetworkRequirements | null, }; +export type ConfigRequirements = {allowedApprovalPolicies: Array | null, allowedSandboxModes: Array | null, allowedPermissions: Array | null, allowedWebSearchModes: Array | null, allowManagedHooksOnly: boolean | null, allowAppshots: boolean | null, computerUse: ComputerUseRequirements | null, featureRequirements: { [key in string]?: boolean } | null, enforceResidency: ResidencyRequirement | null}; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/EnvironmentAddParams.ts b/codex-rs/app-server-protocol/schema/typescript/v2/EnvironmentAddParams.ts deleted file mode 100644 index a2d1a123273..00000000000 --- a/codex-rs/app-server-protocol/schema/typescript/v2/EnvironmentAddParams.ts +++ /dev/null @@ -1,5 +0,0 @@ -// GENERATED CODE! DO NOT MODIFY BY HAND! - -// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. - -export type EnvironmentAddParams = { environmentId: string, execServerUrl: string, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/EnvironmentAddResponse.ts b/codex-rs/app-server-protocol/schema/typescript/v2/EnvironmentAddResponse.ts deleted file mode 100644 index 5b0a2dad0e8..00000000000 --- a/codex-rs/app-server-protocol/schema/typescript/v2/EnvironmentAddResponse.ts +++ /dev/null @@ -1,5 +0,0 @@ -// GENERATED CODE! DO NOT MODIFY BY HAND! - -// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. - -export type EnvironmentAddResponse = Record; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/MemoryResetResponse.ts b/codex-rs/app-server-protocol/schema/typescript/v2/MemoryResetResponse.ts deleted file mode 100644 index d9507945a06..00000000000 --- a/codex-rs/app-server-protocol/schema/typescript/v2/MemoryResetResponse.ts +++ /dev/null @@ -1,5 +0,0 @@ -// GENERATED CODE! DO NOT MODIFY BY HAND! - -// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. - -export type MemoryResetResponse = Record; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/MockExperimentalMethodParams.ts b/codex-rs/app-server-protocol/schema/typescript/v2/MockExperimentalMethodParams.ts deleted file mode 100644 index fe4577fa343..00000000000 --- a/codex-rs/app-server-protocol/schema/typescript/v2/MockExperimentalMethodParams.ts +++ /dev/null @@ -1,9 +0,0 @@ -// GENERATED CODE! DO NOT MODIFY BY HAND! - -// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. - -export type MockExperimentalMethodParams = { -/** - * Test-only payload field. - */ -value?: string | null, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/MockExperimentalMethodResponse.ts b/codex-rs/app-server-protocol/schema/typescript/v2/MockExperimentalMethodResponse.ts deleted file mode 100644 index 41085475d0e..00000000000 --- a/codex-rs/app-server-protocol/schema/typescript/v2/MockExperimentalMethodResponse.ts +++ /dev/null @@ -1,9 +0,0 @@ -// GENERATED CODE! DO NOT MODIFY BY HAND! - -// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. - -export type MockExperimentalMethodResponse = { -/** - * Echoes the input `value`. - */ -echoed: string | null, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ProcessKillParams.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ProcessKillParams.ts deleted file mode 100644 index c222d6b7eb1..00000000000 --- a/codex-rs/app-server-protocol/schema/typescript/v2/ProcessKillParams.ts +++ /dev/null @@ -1,12 +0,0 @@ -// GENERATED CODE! DO NOT MODIFY BY HAND! - -// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. - -/** - * Terminate a running `process/spawn` session. - */ -export type ProcessKillParams = { -/** - * Client-supplied, connection-scoped `processHandle` from `process/spawn`. - */ -processHandle: string, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ProcessKillResponse.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ProcessKillResponse.ts deleted file mode 100644 index d1bd8242c79..00000000000 --- a/codex-rs/app-server-protocol/schema/typescript/v2/ProcessKillResponse.ts +++ /dev/null @@ -1,8 +0,0 @@ -// GENERATED CODE! DO NOT MODIFY BY HAND! - -// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. - -/** - * Empty success response for `process/kill`. - */ -export type ProcessKillResponse = Record; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ProcessResizePtyParams.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ProcessResizePtyParams.ts deleted file mode 100644 index f789eae6520..00000000000 --- a/codex-rs/app-server-protocol/schema/typescript/v2/ProcessResizePtyParams.ts +++ /dev/null @@ -1,17 +0,0 @@ -// GENERATED CODE! DO NOT MODIFY BY HAND! - -// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. -import type { ProcessTerminalSize } from "./ProcessTerminalSize"; - -/** - * Resize a running PTY-backed `process/spawn` session. - */ -export type ProcessResizePtyParams = { -/** - * Client-supplied, connection-scoped `processHandle` from `process/spawn`. - */ -processHandle: string, -/** - * New PTY size in character cells. - */ -size: ProcessTerminalSize, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ProcessResizePtyResponse.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ProcessResizePtyResponse.ts deleted file mode 100644 index 5d06355313b..00000000000 --- a/codex-rs/app-server-protocol/schema/typescript/v2/ProcessResizePtyResponse.ts +++ /dev/null @@ -1,8 +0,0 @@ -// GENERATED CODE! DO NOT MODIFY BY HAND! - -// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. - -/** - * Empty success response for `process/resizePty`. - */ -export type ProcessResizePtyResponse = Record; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ProcessSpawnParams.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ProcessSpawnParams.ts deleted file mode 100644 index fb09eb58258..00000000000 --- a/codex-rs/app-server-protocol/schema/typescript/v2/ProcessSpawnParams.ts +++ /dev/null @@ -1,73 +0,0 @@ -// GENERATED CODE! DO NOT MODIFY BY HAND! - -// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. -import type { AbsolutePathBuf } from "../AbsolutePathBuf"; -import type { ProcessTerminalSize } from "./ProcessTerminalSize"; - -/** - * Spawn a standalone process (argv vector) without a Codex sandbox on the host - * where the app server is running. - * - * `process/spawn` returns after the process has started and the connection-scoped - * `processHandle` has been registered. Process output and exit are reported via - * `process/outputDelta` and `process/exited` notifications. - */ -export type ProcessSpawnParams = { -/** - * Command argv vector. Empty arrays are rejected. - */ -command: Array, -/** - * Client-supplied, connection-scoped process handle. - * - * Duplicate active handles are rejected on the same connection. The same - * handle can be reused after the prior process exits. - */ -processHandle: string, -/** - * Absolute working directory for the process. - */ -cwd: AbsolutePathBuf, -/** - * Enable PTY mode. - * - * This implies `streamStdin` and `streamStdoutStderr`. - */ -tty?: boolean, -/** - * Allow follow-up `process/writeStdin` requests to write stdin bytes. - */ -streamStdin?: boolean, -/** - * Stream stdout/stderr via `process/outputDelta` notifications. - * - * Streamed bytes are not duplicated into the `process/exited` notification. - */ -streamStdoutStderr?: boolean, -/** - * Optional per-stream stdout/stderr capture cap in bytes. - * - * When omitted, the server default applies. Set to `null` to disable the - * cap. - */ -outputBytesCap?: number | null, -/** - * Optional timeout in milliseconds. - * - * When omitted, the server default applies. Set to `null` to disable the - * timeout. - */ -timeoutMs?: number | null, -/** - * Optional environment overrides merged into the app-server process - * environment. - * - * Matching names override inherited values. Set a key to `null` to unset - * an inherited variable. - */ -env?: { [key in string]?: string | null } | null, -/** - * Optional initial PTY size in character cells. Only valid when `tty` is - * true. - */ -size?: ProcessTerminalSize | null, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ProcessSpawnResponse.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ProcessSpawnResponse.ts deleted file mode 100644 index 57b522272c4..00000000000 --- a/codex-rs/app-server-protocol/schema/typescript/v2/ProcessSpawnResponse.ts +++ /dev/null @@ -1,8 +0,0 @@ -// GENERATED CODE! DO NOT MODIFY BY HAND! - -// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. - -/** - * Successful response for `process/spawn`. - */ -export type ProcessSpawnResponse = Record; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ProcessWriteStdinParams.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ProcessWriteStdinParams.ts deleted file mode 100644 index d27e74a2912..00000000000 --- a/codex-rs/app-server-protocol/schema/typescript/v2/ProcessWriteStdinParams.ts +++ /dev/null @@ -1,21 +0,0 @@ -// GENERATED CODE! DO NOT MODIFY BY HAND! - -// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. - -/** - * Write stdin bytes to a running `process/spawn` session, close stdin, or - * both. - */ -export type ProcessWriteStdinParams = { -/** - * Client-supplied, connection-scoped `processHandle` from `process/spawn`. - */ -processHandle: string, -/** - * Optional base64-encoded stdin bytes to write. - */ -deltaBase64?: string | null, -/** - * Close stdin after writing `deltaBase64`, if present. - */ -closeStdin?: boolean, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ProcessWriteStdinResponse.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ProcessWriteStdinResponse.ts deleted file mode 100644 index 29ba81152e8..00000000000 --- a/codex-rs/app-server-protocol/schema/typescript/v2/ProcessWriteStdinResponse.ts +++ /dev/null @@ -1,8 +0,0 @@ -// GENERATED CODE! DO NOT MODIFY BY HAND! - -// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. - -/** - * Empty success response for `process/writeStdin`. - */ -export type ProcessWriteStdinResponse = Record; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/RemoteControlDisableResponse.ts b/codex-rs/app-server-protocol/schema/typescript/v2/RemoteControlDisableResponse.ts deleted file mode 100644 index 1d463503e67..00000000000 --- a/codex-rs/app-server-protocol/schema/typescript/v2/RemoteControlDisableResponse.ts +++ /dev/null @@ -1,6 +0,0 @@ -// GENERATED CODE! DO NOT MODIFY BY HAND! - -// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. -import type { RemoteControlConnectionStatus } from "./RemoteControlConnectionStatus"; - -export type RemoteControlDisableResponse = { status: RemoteControlConnectionStatus, serverName: string, installationId: string, environmentId: string | null, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/RemoteControlEnableResponse.ts b/codex-rs/app-server-protocol/schema/typescript/v2/RemoteControlEnableResponse.ts deleted file mode 100644 index 8aa42095105..00000000000 --- a/codex-rs/app-server-protocol/schema/typescript/v2/RemoteControlEnableResponse.ts +++ /dev/null @@ -1,6 +0,0 @@ -// GENERATED CODE! DO NOT MODIFY BY HAND! - -// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. -import type { RemoteControlConnectionStatus } from "./RemoteControlConnectionStatus"; - -export type RemoteControlEnableResponse = { status: RemoteControlConnectionStatus, serverName: string, installationId: string, environmentId: string | null, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/RemoteControlStatusReadResponse.ts b/codex-rs/app-server-protocol/schema/typescript/v2/RemoteControlStatusReadResponse.ts deleted file mode 100644 index 046c5d42f13..00000000000 --- a/codex-rs/app-server-protocol/schema/typescript/v2/RemoteControlStatusReadResponse.ts +++ /dev/null @@ -1,6 +0,0 @@ -// GENERATED CODE! DO NOT MODIFY BY HAND! - -// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. -import type { RemoteControlConnectionStatus } from "./RemoteControlConnectionStatus"; - -export type RemoteControlStatusReadResponse = { status: RemoteControlConnectionStatus, serverName: string, installationId: string, environmentId: string | null, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadBackgroundTerminalsCleanParams.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadBackgroundTerminalsCleanParams.ts deleted file mode 100644 index 750eee87ac7..00000000000 --- a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadBackgroundTerminalsCleanParams.ts +++ /dev/null @@ -1,5 +0,0 @@ -// GENERATED CODE! DO NOT MODIFY BY HAND! - -// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. - -export type ThreadBackgroundTerminalsCleanParams = { threadId: string, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadBackgroundTerminalsCleanResponse.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadBackgroundTerminalsCleanResponse.ts deleted file mode 100644 index f531fe0e24d..00000000000 --- a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadBackgroundTerminalsCleanResponse.ts +++ /dev/null @@ -1,5 +0,0 @@ -// GENERATED CODE! DO NOT MODIFY BY HAND! - -// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. - -export type ThreadBackgroundTerminalsCleanResponse = Record; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadDecrementElicitationParams.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadDecrementElicitationParams.ts deleted file mode 100644 index 081565007c7..00000000000 --- a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadDecrementElicitationParams.ts +++ /dev/null @@ -1,12 +0,0 @@ -// GENERATED CODE! DO NOT MODIFY BY HAND! - -// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. - -/** - * Parameters for `thread/decrement_elicitation`. - */ -export type ThreadDecrementElicitationParams = { -/** - * Thread whose out-of-band elicitation counter should be decremented. - */ -threadId: string, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadDecrementElicitationResponse.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadDecrementElicitationResponse.ts deleted file mode 100644 index d61f67ee9f0..00000000000 --- a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadDecrementElicitationResponse.ts +++ /dev/null @@ -1,16 +0,0 @@ -// GENERATED CODE! DO NOT MODIFY BY HAND! - -// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. - -/** - * Response for `thread/decrement_elicitation`. - */ -export type ThreadDecrementElicitationResponse = { -/** - * Current out-of-band elicitation count after the decrement. - */ -count: bigint, -/** - * Whether timeout accounting remains paused after applying the decrement. - */ -paused: boolean, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadForkParams.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadForkParams.ts index 2369ae0cbb3..c5109b2c7d7 100644 --- a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadForkParams.ts +++ b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadForkParams.ts @@ -17,44 +17,14 @@ import type { ThreadSource } from "./ThreadSource"; * * Prefer using thread_id whenever possible. */ -export type ThreadForkParams = { threadId: string, -/** - * [UNSTABLE] Specify the rollout path to fork from. - * If specified, the thread_id param will be ignored. - */ -path?: string | null, -/** +export type ThreadForkParams = {threadId: string, /** * Configuration overrides for the forked thread, if any. */ -model?: string | null, modelProvider?: string | null, serviceTier?: string | null | null, cwd?: string | null, -/** - * Replace the thread's runtime workspace roots. Relative paths are - * resolved against the effective cwd for the thread. - */ -runtimeWorkspaceRoots?: Array | null, approvalPolicy?: AskForApproval | null, -/** +model?: string | null, modelProvider?: string | null, serviceTier?: string | null | null, cwd?: string | null, approvalPolicy?: AskForApproval | null, /** * Override where approval requests are routed for review on this thread * and subsequent turns. */ -approvalsReviewer?: ApprovalsReviewer | null, sandbox?: SandboxMode | null, -/** - * Named profile id for the forked thread. Cannot be combined with - * `sandbox`. - */ -permissions?: string | null, config?: { [key in string]?: JsonValue } | null, baseInstructions?: string | null, developerInstructions?: string | null, ephemeral?: boolean, -/** +approvalsReviewer?: ApprovalsReviewer | null, sandbox?: SandboxMode | null, config?: { [key in string]?: JsonValue } | null, baseInstructions?: string | null, developerInstructions?: string | null, ephemeral?: boolean, /** * Optional client-supplied analytics source classification for this forked thread. */ -threadSource?: ThreadSource | null, -/** - * When true, return only thread metadata and live fork state without - * populating `thread.turns`. This is useful when the client plans to call - * `thread/turns/list` immediately after forking. - */ -excludeTurns?: boolean, -/** - * Deprecated and ignored by app-server. Kept only so older clients can - * continue sending the field while rollout persistence always uses the - * limited history policy. - */ -persistExtendedHistory?: boolean, }; +threadSource?: ThreadSource | null}; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadForkResponse.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadForkResponse.ts index 379b9b1c419..c5b1201c265 100644 --- a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadForkResponse.ts +++ b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadForkResponse.ts @@ -3,33 +3,19 @@ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. import type { AbsolutePathBuf } from "../AbsolutePathBuf"; import type { ReasoningEffort } from "../ReasoningEffort"; -import type { ActivePermissionProfile } from "./ActivePermissionProfile"; import type { ApprovalsReviewer } from "./ApprovalsReviewer"; import type { AskForApproval } from "./AskForApproval"; import type { SandboxPolicy } from "./SandboxPolicy"; import type { Thread } from "./Thread"; -export type ThreadForkResponse = { thread: Thread, model: string, modelProvider: string, serviceTier: string | null, cwd: AbsolutePathBuf, -/** - * Thread-scoped runtime workspace roots used to materialize - * `:workspace_roots`. - */ -runtimeWorkspaceRoots: Array, -/** +export type ThreadForkResponse = {thread: Thread, model: string, modelProvider: string, serviceTier: string | null, cwd: AbsolutePathBuf, /** * Instruction source files currently loaded for this thread. */ -instructionSources: Array, approvalPolicy: AskForApproval, -/** +instructionSources: Array, approvalPolicy: AskForApproval, /** * Reviewer currently used for approval requests on this thread. */ -approvalsReviewer: ApprovalsReviewer, -/** +approvalsReviewer: ApprovalsReviewer, /** * Legacy sandbox policy retained for compatibility. Experimental clients * should prefer `activePermissionProfile` for profile provenance. */ -sandbox: SandboxPolicy, -/** - * Named or implicit built-in profile that produced the active - * permissions, when known. - */ -activePermissionProfile: ActivePermissionProfile | null, reasoningEffort: ReasoningEffort | null, }; +sandbox: SandboxPolicy, reasoningEffort: ReasoningEffort | null}; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadIncrementElicitationParams.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadIncrementElicitationParams.ts deleted file mode 100644 index 94fc390d395..00000000000 --- a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadIncrementElicitationParams.ts +++ /dev/null @@ -1,12 +0,0 @@ -// GENERATED CODE! DO NOT MODIFY BY HAND! - -// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. - -/** - * Parameters for `thread/increment_elicitation`. - */ -export type ThreadIncrementElicitationParams = { -/** - * Thread whose out-of-band elicitation counter should be incremented. - */ -threadId: string, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadIncrementElicitationResponse.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadIncrementElicitationResponse.ts deleted file mode 100644 index 863ba329d7e..00000000000 --- a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadIncrementElicitationResponse.ts +++ /dev/null @@ -1,16 +0,0 @@ -// GENERATED CODE! DO NOT MODIFY BY HAND! - -// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. - -/** - * Response for `thread/increment_elicitation`. - */ -export type ThreadIncrementElicitationResponse = { -/** - * Current out-of-band elicitation count after the increment. - */ -count: bigint, -/** - * Whether timeout accounting is paused after applying the increment. - */ -paused: boolean, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadMemoryModeSetParams.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadMemoryModeSetParams.ts deleted file mode 100644 index 676edf2c135..00000000000 --- a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadMemoryModeSetParams.ts +++ /dev/null @@ -1,6 +0,0 @@ -// GENERATED CODE! DO NOT MODIFY BY HAND! - -// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. -import type { ThreadMemoryMode } from "../ThreadMemoryMode"; - -export type ThreadMemoryModeSetParams = { threadId: string, mode: ThreadMemoryMode, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadMemoryModeSetResponse.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadMemoryModeSetResponse.ts deleted file mode 100644 index 49b42fd9add..00000000000 --- a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadMemoryModeSetResponse.ts +++ /dev/null @@ -1,5 +0,0 @@ -// GENERATED CODE! DO NOT MODIFY BY HAND! - -// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. - -export type ThreadMemoryModeSetResponse = Record; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeAppendAudioParams.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeAppendAudioParams.ts deleted file mode 100644 index 9de0c2bc2fd..00000000000 --- a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeAppendAudioParams.ts +++ /dev/null @@ -1,9 +0,0 @@ -// GENERATED CODE! DO NOT MODIFY BY HAND! - -// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. -import type { ThreadRealtimeAudioChunk } from "./ThreadRealtimeAudioChunk"; - -/** - * EXPERIMENTAL - append audio input to thread realtime. - */ -export type ThreadRealtimeAppendAudioParams = { threadId: string, audio: ThreadRealtimeAudioChunk, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeAppendAudioResponse.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeAppendAudioResponse.ts deleted file mode 100644 index 063e8cba783..00000000000 --- a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeAppendAudioResponse.ts +++ /dev/null @@ -1,8 +0,0 @@ -// GENERATED CODE! DO NOT MODIFY BY HAND! - -// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. - -/** - * EXPERIMENTAL - response for appending realtime audio input. - */ -export type ThreadRealtimeAppendAudioResponse = Record; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeAppendTextParams.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeAppendTextParams.ts deleted file mode 100644 index 6e3bef4ec53..00000000000 --- a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeAppendTextParams.ts +++ /dev/null @@ -1,8 +0,0 @@ -// GENERATED CODE! DO NOT MODIFY BY HAND! - -// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. - -/** - * EXPERIMENTAL - append text input to thread realtime. - */ -export type ThreadRealtimeAppendTextParams = { threadId: string, text: string, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeAppendTextResponse.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeAppendTextResponse.ts deleted file mode 100644 index 1fb9f0738fd..00000000000 --- a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeAppendTextResponse.ts +++ /dev/null @@ -1,8 +0,0 @@ -// GENERATED CODE! DO NOT MODIFY BY HAND! - -// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. - -/** - * EXPERIMENTAL - response for appending realtime text input. - */ -export type ThreadRealtimeAppendTextResponse = Record; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeListVoicesParams.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeListVoicesParams.ts deleted file mode 100644 index b456d89c26e..00000000000 --- a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeListVoicesParams.ts +++ /dev/null @@ -1,8 +0,0 @@ -// GENERATED CODE! DO NOT MODIFY BY HAND! - -// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. - -/** - * EXPERIMENTAL - list voices supported by thread realtime. - */ -export type ThreadRealtimeListVoicesParams = Record; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeListVoicesResponse.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeListVoicesResponse.ts deleted file mode 100644 index 272cbaddb74..00000000000 --- a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeListVoicesResponse.ts +++ /dev/null @@ -1,9 +0,0 @@ -// GENERATED CODE! DO NOT MODIFY BY HAND! - -// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. -import type { RealtimeVoicesList } from "../RealtimeVoicesList"; - -/** - * EXPERIMENTAL - response for listing supported realtime voices. - */ -export type ThreadRealtimeListVoicesResponse = { voices: RealtimeVoicesList, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeStartParams.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeStartParams.ts deleted file mode 100644 index 1a149164dae..00000000000 --- a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeStartParams.ts +++ /dev/null @@ -1,16 +0,0 @@ -// GENERATED CODE! DO NOT MODIFY BY HAND! - -// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. -import type { RealtimeOutputModality } from "../RealtimeOutputModality"; -import type { RealtimeVoice } from "../RealtimeVoice"; -import type { ThreadRealtimeStartTransport } from "./ThreadRealtimeStartTransport"; - -/** - * EXPERIMENTAL - start a thread-scoped realtime session. - */ -export type ThreadRealtimeStartParams = { threadId: string, -/** - * Selects text or audio output for the realtime session. Transport and voice stay - * independent so clients can choose how they connect separately from what the model emits. - */ -outputModality: RealtimeOutputModality, prompt?: string | null | null, realtimeSessionId?: string | null, transport?: ThreadRealtimeStartTransport | null, voice?: RealtimeVoice | null, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeStartResponse.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeStartResponse.ts deleted file mode 100644 index 56254564256..00000000000 --- a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeStartResponse.ts +++ /dev/null @@ -1,8 +0,0 @@ -// GENERATED CODE! DO NOT MODIFY BY HAND! - -// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. - -/** - * EXPERIMENTAL - response for starting thread realtime. - */ -export type ThreadRealtimeStartResponse = Record; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeStopParams.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeStopParams.ts deleted file mode 100644 index b9adbff678e..00000000000 --- a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeStopParams.ts +++ /dev/null @@ -1,8 +0,0 @@ -// GENERATED CODE! DO NOT MODIFY BY HAND! - -// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. - -/** - * EXPERIMENTAL - stop thread realtime. - */ -export type ThreadRealtimeStopParams = { threadId: string, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeStopResponse.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeStopResponse.ts deleted file mode 100644 index c87f4402db5..00000000000 --- a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadRealtimeStopResponse.ts +++ /dev/null @@ -1,8 +0,0 @@ -// GENERATED CODE! DO NOT MODIFY BY HAND! - -// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. - -/** - * EXPERIMENTAL - response for stopping thread realtime. - */ -export type ThreadRealtimeStopResponse = Record; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadResumeParams.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadResumeParams.ts index 67febf404df..0ec89534357 100644 --- a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadResumeParams.ts +++ b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadResumeParams.ts @@ -2,7 +2,6 @@ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. import type { Personality } from "../Personality"; -import type { ResponseItem } from "../ResponseItem"; import type { JsonValue } from "../serde_json/JsonValue"; import type { ApprovalsReviewer } from "./ApprovalsReviewer"; import type { AskForApproval } from "./AskForApproval"; @@ -24,48 +23,11 @@ import type { SandboxMode } from "./SandboxMode"; * * Prefer using thread_id whenever possible. */ -export type ThreadResumeParams = { threadId: string, -/** - * [UNSTABLE] FOR CODEX CLOUD - DO NOT USE. - * If specified, the thread will be resumed with the provided history - * instead of loaded from disk. - */ -history?: Array | null, -/** - * [UNSTABLE] Specify the rollout path to resume from. - * If specified for a non-running thread, the thread_id param will be ignored. - * If thread_id identifies a running thread, the path must match the active - * rollout path. - */ -path?: string | null, -/** +export type ThreadResumeParams = {threadId: string, /** * Configuration overrides for the resumed thread, if any. */ -model?: string | null, modelProvider?: string | null, serviceTier?: string | null | null, cwd?: string | null, -/** - * Replace the thread's runtime workspace roots. Relative paths are - * resolved against the effective cwd for the thread. - */ -runtimeWorkspaceRoots?: Array | null, approvalPolicy?: AskForApproval | null, -/** +model?: string | null, modelProvider?: string | null, serviceTier?: string | null | null, cwd?: string | null, approvalPolicy?: AskForApproval | null, /** * Override where approval requests are routed for review on this thread * and subsequent turns. */ -approvalsReviewer?: ApprovalsReviewer | null, sandbox?: SandboxMode | null, -/** - * Named profile id for the resumed thread. Cannot be combined with - * `sandbox`. - */ -permissions?: string | null, config?: { [key in string]?: JsonValue } | null, baseInstructions?: string | null, developerInstructions?: string | null, personality?: Personality | null, -/** - * When true, return only thread metadata and live-resume state without - * populating `thread.turns`. This is useful when the client plans to call - * `thread/turns/list` immediately after resuming. - */ -excludeTurns?: boolean, -/** - * Deprecated and ignored by app-server. Kept only so older clients can - * continue sending the field while rollout persistence always uses the - * limited history policy. - */ -persistExtendedHistory?: boolean, }; +approvalsReviewer?: ApprovalsReviewer | null, sandbox?: SandboxMode | null, config?: { [key in string]?: JsonValue } | null, baseInstructions?: string | null, developerInstructions?: string | null, personality?: Personality | null}; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadResumeResponse.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadResumeResponse.ts index 9db53d8def4..7a4f90377c6 100644 --- a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadResumeResponse.ts +++ b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadResumeResponse.ts @@ -3,33 +3,19 @@ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. import type { AbsolutePathBuf } from "../AbsolutePathBuf"; import type { ReasoningEffort } from "../ReasoningEffort"; -import type { ActivePermissionProfile } from "./ActivePermissionProfile"; import type { ApprovalsReviewer } from "./ApprovalsReviewer"; import type { AskForApproval } from "./AskForApproval"; import type { SandboxPolicy } from "./SandboxPolicy"; import type { Thread } from "./Thread"; -export type ThreadResumeResponse = { thread: Thread, model: string, modelProvider: string, serviceTier: string | null, cwd: AbsolutePathBuf, -/** - * Thread-scoped runtime workspace roots used to materialize - * `:workspace_roots`. - */ -runtimeWorkspaceRoots: Array, -/** +export type ThreadResumeResponse = {thread: Thread, model: string, modelProvider: string, serviceTier: string | null, cwd: AbsolutePathBuf, /** * Instruction source files currently loaded for this thread. */ -instructionSources: Array, approvalPolicy: AskForApproval, -/** +instructionSources: Array, approvalPolicy: AskForApproval, /** * Reviewer currently used for approval requests on this thread. */ -approvalsReviewer: ApprovalsReviewer, -/** +approvalsReviewer: ApprovalsReviewer, /** * Legacy sandbox policy retained for compatibility. Experimental clients * should prefer `activePermissionProfile` for profile provenance. */ -sandbox: SandboxPolicy, -/** - * Named or implicit built-in profile that produced the active - * permissions, when known. - */ -activePermissionProfile: ActivePermissionProfile | null, reasoningEffort: ReasoningEffort | null, }; +sandbox: SandboxPolicy, reasoningEffort: ReasoningEffort | null}; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadSearchParams.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadSearchParams.ts deleted file mode 100644 index 4c548d5f876..00000000000 --- a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadSearchParams.ts +++ /dev/null @@ -1,38 +0,0 @@ -// GENERATED CODE! DO NOT MODIFY BY HAND! - -// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. -import type { SortDirection } from "./SortDirection"; -import type { ThreadSortKey } from "./ThreadSortKey"; -import type { ThreadSourceKind } from "./ThreadSourceKind"; - -export type ThreadSearchParams = { -/** - * Opaque pagination cursor returned by a previous call. - */ -cursor?: string | null, -/** - * Optional page size; defaults to a reasonable server-side value. - */ -limit?: number | null, -/** - * Optional sort key; defaults to created_at. - */ -sortKey?: ThreadSortKey | null, -/** - * Optional sort direction; defaults to descending (newest first). - */ -sortDirection?: SortDirection | null, -/** - * Optional source filter; when set, only sessions from these source kinds - * are returned. When omitted or empty, defaults to interactive sources. - */ -sourceKinds?: Array | null, -/** - * Optional archived filter; when set to true, only archived threads are returned. - * If false or null, only non-archived threads are returned. - */ -archived?: boolean | null, -/** - * Required substring/full-text query for thread search. - */ -searchTerm: string, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadSearchResponse.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadSearchResponse.ts deleted file mode 100644 index 49aa4c2493f..00000000000 --- a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadSearchResponse.ts +++ /dev/null @@ -1,18 +0,0 @@ -// GENERATED CODE! DO NOT MODIFY BY HAND! - -// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. -import type { ThreadSearchResult } from "./ThreadSearchResult"; - -export type ThreadSearchResponse = { data: Array, -/** - * Opaque cursor to pass to the next call to continue after the last item. - * if None, there are no more items to return. - */ -nextCursor: string | null, -/** - * Opaque cursor to pass as `cursor` when reversing `sortDirection`. - * This is only populated when the page contains at least one thread. - * Use it with the opposite `sortDirection`; for timestamp sorts it anchors - * at the start of the page timestamp so same-second updates are not skipped. - */ -backwardsCursor: string | null, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadSettingsUpdateParams.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadSettingsUpdateParams.ts deleted file mode 100644 index 551dd5be457..00000000000 --- a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadSettingsUpdateParams.ts +++ /dev/null @@ -1,61 +0,0 @@ -// GENERATED CODE! DO NOT MODIFY BY HAND! - -// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. -import type { CollaborationMode } from "../CollaborationMode"; -import type { Personality } from "../Personality"; -import type { ReasoningEffort } from "../ReasoningEffort"; -import type { ReasoningSummary } from "../ReasoningSummary"; -import type { ApprovalsReviewer } from "./ApprovalsReviewer"; -import type { AskForApproval } from "./AskForApproval"; -import type { SandboxPolicy } from "./SandboxPolicy"; - -export type ThreadSettingsUpdateParams = { threadId: string, -/** - * Override the working directory for subsequent turns. - */ -cwd?: string | null, -/** - * Override the approval policy for subsequent turns. - */ -approvalPolicy?: AskForApproval | null, -/** - * Override where approval requests are routed for subsequent turns. - */ -approvalsReviewer?: ApprovalsReviewer | null, -/** - * Override the sandbox policy for subsequent turns. - */ -sandboxPolicy?: SandboxPolicy | null, -/** - * Select a named permissions profile id for subsequent turns. Cannot be - * combined with `sandboxPolicy`. - */ -permissions?: string | null, -/** - * Override the model for subsequent turns. - */ -model?: string | null, -/** - * Override the service tier for subsequent turns. `null` clears the - * current service tier; omission leaves it unchanged. - */ -serviceTier?: string | null | null, -/** - * Override the reasoning effort for subsequent turns. - */ -effort?: ReasoningEffort | null, -/** - * Override the reasoning summary for subsequent turns. - */ -summary?: ReasoningSummary | null, -/** - * EXPERIMENTAL - Set a pre-set collaboration mode for subsequent turns. - * - * For `collaboration_mode.settings.developer_instructions`, `null` means - * "use the built-in instructions for the selected mode". - */ -collaborationMode?: CollaborationMode | null, -/** - * Override the personality for subsequent turns. - */ -personality?: Personality | null, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadSettingsUpdateResponse.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadSettingsUpdateResponse.ts deleted file mode 100644 index 06afb97597e..00000000000 --- a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadSettingsUpdateResponse.ts +++ /dev/null @@ -1,5 +0,0 @@ -// GENERATED CODE! DO NOT MODIFY BY HAND! - -// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. - -export type ThreadSettingsUpdateResponse = Record; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadStartParams.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadStartParams.ts index bc03ab156f6..30509ef6cb3 100644 --- a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadStartParams.ts +++ b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadStartParams.ts @@ -5,53 +5,15 @@ import type { Personality } from "../Personality"; import type { JsonValue } from "../serde_json/JsonValue"; import type { ApprovalsReviewer } from "./ApprovalsReviewer"; import type { AskForApproval } from "./AskForApproval"; -import type { DynamicToolSpec } from "./DynamicToolSpec"; import type { SandboxMode } from "./SandboxMode"; import type { ThreadSource } from "./ThreadSource"; import type { ThreadStartSource } from "./ThreadStartSource"; -import type { TurnEnvironmentParams } from "./TurnEnvironmentParams"; -export type ThreadStartParams = { model?: string | null, modelProvider?: string | null, serviceTier?: string | null | null, cwd?: string | null, -/** - * Replace the thread's runtime workspace roots. Relative paths are - * resolved against the effective cwd for the thread. - */ -runtimeWorkspaceRoots?: Array | null, approvalPolicy?: AskForApproval | null, -/** +export type ThreadStartParams = {model?: string | null, modelProvider?: string | null, serviceTier?: string | null | null, cwd?: string | null, approvalPolicy?: AskForApproval | null, /** * Override where approval requests are routed for review on this thread * and subsequent turns. */ -approvalsReviewer?: ApprovalsReviewer | null, sandbox?: SandboxMode | null, -/** - * Named profile id for this thread. Cannot be combined with `sandbox`. - */ -permissions?: string | null, config?: { [key in string]?: JsonValue } | null, serviceName?: string | null, baseInstructions?: string | null, developerInstructions?: string | null, personality?: Personality | null, ephemeral?: boolean | null, sessionStartSource?: ThreadStartSource | null, -/** +approvalsReviewer?: ApprovalsReviewer | null, sandbox?: SandboxMode | null, config?: { [key in string]?: JsonValue } | null, serviceName?: string | null, baseInstructions?: string | null, developerInstructions?: string | null, personality?: Personality | null, ephemeral?: boolean | null, sessionStartSource?: ThreadStartSource | null, /** * Optional client-supplied analytics source classification for this thread. */ -threadSource?: ThreadSource | null, -/** - * Optional sticky environments for this thread. - * - * Omitted selects the default environment when environment access is - * enabled. Empty disables environment access for turns that do not - * provide a turn override. Non-empty selects the first environment as the - * current turn environment. - */ -environments?: Array | null, dynamicTools?: Array | null, -/** - * Test-only experimental field used to validate experimental gating and - * schema filtering behavior in a stable way. - */ -mockExperimentalField?: string | null, -/** - * If true, opt into emitting raw Responses API items on the event stream. - * This is for internal use only (e.g. Codex Cloud). - */ -experimentalRawEvents?: boolean, -/** - * Deprecated and ignored by app-server. Kept only so older clients can - * continue sending the field while rollout persistence always uses the - * limited history policy. - */ -persistExtendedHistory?: boolean, }; +threadSource?: ThreadSource | null}; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadStartResponse.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadStartResponse.ts index bb4819427d1..38859a3805d 100644 --- a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadStartResponse.ts +++ b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadStartResponse.ts @@ -3,33 +3,19 @@ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. import type { AbsolutePathBuf } from "../AbsolutePathBuf"; import type { ReasoningEffort } from "../ReasoningEffort"; -import type { ActivePermissionProfile } from "./ActivePermissionProfile"; import type { ApprovalsReviewer } from "./ApprovalsReviewer"; import type { AskForApproval } from "./AskForApproval"; import type { SandboxPolicy } from "./SandboxPolicy"; import type { Thread } from "./Thread"; -export type ThreadStartResponse = { thread: Thread, model: string, modelProvider: string, serviceTier: string | null, cwd: AbsolutePathBuf, -/** - * Thread-scoped runtime workspace roots used to materialize - * `:workspace_roots`. - */ -runtimeWorkspaceRoots: Array, -/** +export type ThreadStartResponse = {thread: Thread, model: string, modelProvider: string, serviceTier: string | null, cwd: AbsolutePathBuf, /** * Instruction source files currently loaded for this thread. */ -instructionSources: Array, approvalPolicy: AskForApproval, -/** +instructionSources: Array, approvalPolicy: AskForApproval, /** * Reviewer currently used for approval requests on this thread. */ -approvalsReviewer: ApprovalsReviewer, -/** +approvalsReviewer: ApprovalsReviewer, /** * Legacy sandbox policy retained for compatibility. Experimental clients * should prefer `activePermissionProfile` for profile provenance. */ -sandbox: SandboxPolicy, -/** - * Named or implicit built-in profile that produced the active - * permissions, when known. - */ -activePermissionProfile: ActivePermissionProfile | null, reasoningEffort: ReasoningEffort | null, }; +sandbox: SandboxPolicy, reasoningEffort: ReasoningEffort | null}; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadTurnsItemsListParams.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadTurnsItemsListParams.ts deleted file mode 100644 index 68c506a6a43..00000000000 --- a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadTurnsItemsListParams.ts +++ /dev/null @@ -1,18 +0,0 @@ -// GENERATED CODE! DO NOT MODIFY BY HAND! - -// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. -import type { SortDirection } from "./SortDirection"; - -export type ThreadTurnsItemsListParams = { threadId: string, turnId: string, -/** - * Opaque cursor to pass to the next call to continue after the last item. - */ -cursor?: string | null, -/** - * Optional item page size. - */ -limit?: number | null, -/** - * Optional item pagination direction; defaults to ascending. - */ -sortDirection?: SortDirection | null, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadTurnsItemsListResponse.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadTurnsItemsListResponse.ts deleted file mode 100644 index 4375e29aabf..00000000000 --- a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadTurnsItemsListResponse.ts +++ /dev/null @@ -1,16 +0,0 @@ -// GENERATED CODE! DO NOT MODIFY BY HAND! - -// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. -import type { ThreadItem } from "./ThreadItem"; - -export type ThreadTurnsItemsListResponse = { data: Array, -/** - * Opaque cursor to pass to the next call to continue after the last item. - * if None, there are no more items to return. - */ -nextCursor: string | null, -/** - * Opaque cursor to pass as `cursor` when reversing `sortDirection`. - * This is only populated when the page contains at least one item. - */ -backwardsCursor: string | null, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadTurnsListParams.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadTurnsListParams.ts deleted file mode 100644 index a1aa682a889..00000000000 --- a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadTurnsListParams.ts +++ /dev/null @@ -1,23 +0,0 @@ -// GENERATED CODE! DO NOT MODIFY BY HAND! - -// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. -import type { SortDirection } from "./SortDirection"; -import type { TurnItemsView } from "./TurnItemsView"; - -export type ThreadTurnsListParams = { threadId: string, -/** - * Opaque cursor to pass to the next call to continue after the last turn. - */ -cursor?: string | null, -/** - * Optional turn page size. - */ -limit?: number | null, -/** - * Optional turn pagination direction; defaults to descending. - */ -sortDirection?: SortDirection | null, -/** - * How much item detail to include for each returned turn; defaults to summary. - */ -itemsView?: TurnItemsView | null, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadTurnsListResponse.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadTurnsListResponse.ts deleted file mode 100644 index 1dbed91a708..00000000000 --- a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadTurnsListResponse.ts +++ /dev/null @@ -1,18 +0,0 @@ -// GENERATED CODE! DO NOT MODIFY BY HAND! - -// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. -import type { Turn } from "./Turn"; - -export type ThreadTurnsListResponse = { data: Array, -/** - * Opaque cursor to pass to the next call to continue after the last turn. - * if None, there are no more turns to return. - */ -nextCursor: string | null, -/** - * Opaque cursor to pass as `cursor` when reversing `sortDirection`. - * This is only populated when the page contains at least one turn. - * Use it with the opposite `sortDirection` to include the anchor turn again - * and catch updates to that turn. - */ -backwardsCursor: string | null, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/TurnStartParams.ts b/codex-rs/app-server-protocol/schema/typescript/v2/TurnStartParams.ts index 14eba86bc71..b04919d86b6 100644 --- a/codex-rs/app-server-protocol/schema/typescript/v2/TurnStartParams.ts +++ b/codex-rs/app-server-protocol/schema/typescript/v2/TurnStartParams.ts @@ -1,93 +1,45 @@ // GENERATED CODE! DO NOT MODIFY BY HAND! // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. -import type { CollaborationMode } from "../CollaborationMode"; import type { Personality } from "../Personality"; import type { ReasoningEffort } from "../ReasoningEffort"; import type { ReasoningSummary } from "../ReasoningSummary"; import type { JsonValue } from "../serde_json/JsonValue"; -import type { AdditionalContextEntry } from "./AdditionalContextEntry"; import type { ApprovalsReviewer } from "./ApprovalsReviewer"; import type { AskForApproval } from "./AskForApproval"; import type { SandboxPolicy } from "./SandboxPolicy"; -import type { TurnEnvironmentParams } from "./TurnEnvironmentParams"; import type { UserInput } from "./UserInput"; -export type TurnStartParams = { threadId: string, input: Array, -/** - * Optional turn-scoped Responses API client metadata. - */ -responsesapiClientMetadata?: { [key in string]?: string } | null, -/** - * Optional client-provided context fragments keyed by an opaque source identifier. - */ -additionalContext?: { [key in string]?: AdditionalContextEntry } | null, -/** - * Optional turn-scoped environments. - * - * Omitted uses the thread sticky environments. Empty disables - * environment access for this turn. Non-empty selects the first - * environment as the current turn environment for this turn. - */ -environments?: Array | null, -/** +export type TurnStartParams = {threadId: string, input: Array, /** * Override the working directory for this turn and subsequent turns. */ -cwd?: string | null, -/** - * Replace the thread's runtime workspace roots for this turn and - * subsequent turns. Relative paths are resolved against the effective - * cwd for the turn. - */ -runtimeWorkspaceRoots?: Array | null, -/** +cwd?: string | null, /** * Override the approval policy for this turn and subsequent turns. */ -approvalPolicy?: AskForApproval | null, -/** +approvalPolicy?: AskForApproval | null, /** * Override where approval requests are routed for review on this turn and * subsequent turns. */ -approvalsReviewer?: ApprovalsReviewer | null, -/** +approvalsReviewer?: ApprovalsReviewer | null, /** * Override the sandbox policy for this turn and subsequent turns. */ -sandboxPolicy?: SandboxPolicy | null, -/** - * Select a named permissions profile id for this turn and subsequent - * turns. Cannot be combined with `sandboxPolicy`. - */ -permissions?: string | null, -/** +sandboxPolicy?: SandboxPolicy | null, /** * Override the model for this turn and subsequent turns. */ -model?: string | null, -/** +model?: string | null, /** * Override the service tier for this turn and subsequent turns. */ -serviceTier?: string | null | null, -/** +serviceTier?: string | null | null, /** * Override the reasoning effort for this turn and subsequent turns. */ -effort?: ReasoningEffort | null, -/** +effort?: ReasoningEffort | null, /** * Override the reasoning summary for this turn and subsequent turns. */ -summary?: ReasoningSummary | null, -/** +summary?: ReasoningSummary | null, /** * Override the personality for this turn and subsequent turns. */ -personality?: Personality | null, -/** +personality?: Personality | null, /** * Optional JSON Schema used to constrain the final assistant message for * this turn. */ -outputSchema?: JsonValue | null, -/** - * EXPERIMENTAL - Set a pre-set collaboration mode. - * Takes precedence over model, reasoning_effort, and developer instructions if set. - * - * For `collaboration_mode.settings.developer_instructions`, `null` means - * "use the built-in instructions for the selected mode". - */ -collaborationMode?: CollaborationMode | null, }; +outputSchema?: JsonValue | null}; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/TurnSteerParams.ts b/codex-rs/app-server-protocol/schema/typescript/v2/TurnSteerParams.ts index c5ffae746c0..dae166b4013 100644 --- a/codex-rs/app-server-protocol/schema/typescript/v2/TurnSteerParams.ts +++ b/codex-rs/app-server-protocol/schema/typescript/v2/TurnSteerParams.ts @@ -1,20 +1,10 @@ // GENERATED CODE! DO NOT MODIFY BY HAND! // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. -import type { AdditionalContextEntry } from "./AdditionalContextEntry"; import type { UserInput } from "./UserInput"; -export type TurnSteerParams = { threadId: string, input: Array, -/** - * Optional turn-scoped Responses API client metadata. - */ -responsesapiClientMetadata?: { [key in string]?: string } | null, -/** - * Optional client-provided context fragments keyed by an opaque source identifier. - */ -additionalContext?: { [key in string]?: AdditionalContextEntry } | null, -/** +export type TurnSteerParams = {threadId: string, input: Array, /** * Required active turn id precondition. The request fails when it does not * match the currently active turn. */ -expectedTurnId: string, }; +expectedTurnId: string}; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/index.ts b/codex-rs/app-server-protocol/schema/typescript/v2/index.ts index 0e9cbdf5326..5b4f2ed2831 100644 --- a/codex-rs/app-server-protocol/schema/typescript/v2/index.ts +++ b/codex-rs/app-server-protocol/schema/typescript/v2/index.ts @@ -7,7 +7,6 @@ export type { AccountUpdatedNotification } from "./AccountUpdatedNotification"; export type { ActivePermissionProfile } from "./ActivePermissionProfile"; export type { AddCreditsNudgeCreditType } from "./AddCreditsNudgeCreditType"; export type { AddCreditsNudgeEmailStatus } from "./AddCreditsNudgeEmailStatus"; -export type { AdditionalContextEntry } from "./AdditionalContextEntry"; export type { AdditionalFileSystemPermissions } from "./AdditionalFileSystemPermissions"; export type { AdditionalNetworkPermissions } from "./AdditionalNetworkPermissions"; export type { AdditionalPermissionProfile } from "./AdditionalPermissionProfile"; @@ -43,8 +42,6 @@ export type { CollabAgentState } from "./CollabAgentState"; export type { CollabAgentStatus } from "./CollabAgentStatus"; export type { CollabAgentTool } from "./CollabAgentTool"; export type { CollabAgentToolCallStatus } from "./CollabAgentToolCallStatus"; -export type { CollaborationModeListParams } from "./CollaborationModeListParams"; -export type { CollaborationModeListResponse } from "./CollaborationModeListResponse"; export type { CollaborationModeMask } from "./CollaborationModeMask"; export type { CommandAction } from "./CommandAction"; export type { CommandExecOutputDeltaNotification } from "./CommandExecOutputDeltaNotification"; @@ -89,8 +86,6 @@ export type { DynamicToolCallParams } from "./DynamicToolCallParams"; export type { DynamicToolCallResponse } from "./DynamicToolCallResponse"; export type { DynamicToolCallStatus } from "./DynamicToolCallStatus"; export type { DynamicToolSpec } from "./DynamicToolSpec"; -export type { EnvironmentAddParams } from "./EnvironmentAddParams"; -export type { EnvironmentAddResponse } from "./EnvironmentAddResponse"; export type { ErrorNotification } from "./ErrorNotification"; export type { ExecPolicyAmendment } from "./ExecPolicyAmendment"; export type { ExperimentalFeature } from "./ExperimentalFeature"; @@ -234,11 +229,8 @@ export type { McpToolCallResult } from "./McpToolCallResult"; export type { McpToolCallStatus } from "./McpToolCallStatus"; export type { MemoryCitation } from "./MemoryCitation"; export type { MemoryCitationEntry } from "./MemoryCitationEntry"; -export type { MemoryResetResponse } from "./MemoryResetResponse"; export type { MergeStrategy } from "./MergeStrategy"; export type { MigrationDetails } from "./MigrationDetails"; -export type { MockExperimentalMethodParams } from "./MockExperimentalMethodParams"; -export type { MockExperimentalMethodResponse } from "./MockExperimentalMethodResponse"; export type { Model } from "./Model"; export type { ModelAvailabilityNux } from "./ModelAvailabilityNux"; export type { ModelListParams } from "./ModelListParams"; @@ -313,17 +305,9 @@ export type { PluginUninstallParams } from "./PluginUninstallParams"; export type { PluginUninstallResponse } from "./PluginUninstallResponse"; export type { PluginsMigration } from "./PluginsMigration"; export type { ProcessExitedNotification } from "./ProcessExitedNotification"; -export type { ProcessKillParams } from "./ProcessKillParams"; -export type { ProcessKillResponse } from "./ProcessKillResponse"; export type { ProcessOutputDeltaNotification } from "./ProcessOutputDeltaNotification"; export type { ProcessOutputStream } from "./ProcessOutputStream"; -export type { ProcessResizePtyParams } from "./ProcessResizePtyParams"; -export type { ProcessResizePtyResponse } from "./ProcessResizePtyResponse"; -export type { ProcessSpawnParams } from "./ProcessSpawnParams"; -export type { ProcessSpawnResponse } from "./ProcessSpawnResponse"; export type { ProcessTerminalSize } from "./ProcessTerminalSize"; -export type { ProcessWriteStdinParams } from "./ProcessWriteStdinParams"; -export type { ProcessWriteStdinResponse } from "./ProcessWriteStdinResponse"; export type { RateLimitReachedType } from "./RateLimitReachedType"; export type { RateLimitSnapshot } from "./RateLimitSnapshot"; export type { RateLimitWindow } from "./RateLimitWindow"; @@ -333,10 +317,7 @@ export type { ReasoningSummaryPartAddedNotification } from "./ReasoningSummaryPa export type { ReasoningSummaryTextDeltaNotification } from "./ReasoningSummaryTextDeltaNotification"; export type { ReasoningTextDeltaNotification } from "./ReasoningTextDeltaNotification"; export type { RemoteControlConnectionStatus } from "./RemoteControlConnectionStatus"; -export type { RemoteControlDisableResponse } from "./RemoteControlDisableResponse"; -export type { RemoteControlEnableResponse } from "./RemoteControlEnableResponse"; export type { RemoteControlStatusChangedNotification } from "./RemoteControlStatusChangedNotification"; -export type { RemoteControlStatusReadResponse } from "./RemoteControlStatusReadResponse"; export type { RequestPermissionProfile } from "./RequestPermissionProfile"; export type { ResidencyRequirement } from "./ResidencyRequirement"; export type { ReviewDelivery } from "./ReviewDelivery"; @@ -377,13 +358,9 @@ export type { ThreadApproveGuardianDeniedActionResponse } from "./ThreadApproveG export type { ThreadArchiveParams } from "./ThreadArchiveParams"; export type { ThreadArchiveResponse } from "./ThreadArchiveResponse"; export type { ThreadArchivedNotification } from "./ThreadArchivedNotification"; -export type { ThreadBackgroundTerminalsCleanParams } from "./ThreadBackgroundTerminalsCleanParams"; -export type { ThreadBackgroundTerminalsCleanResponse } from "./ThreadBackgroundTerminalsCleanResponse"; export type { ThreadClosedNotification } from "./ThreadClosedNotification"; export type { ThreadCompactStartParams } from "./ThreadCompactStartParams"; export type { ThreadCompactStartResponse } from "./ThreadCompactStartResponse"; -export type { ThreadDecrementElicitationParams } from "./ThreadDecrementElicitationParams"; -export type { ThreadDecrementElicitationResponse } from "./ThreadDecrementElicitationResponse"; export type { ThreadForkParams } from "./ThreadForkParams"; export type { ThreadForkResponse } from "./ThreadForkResponse"; export type { ThreadGoal } from "./ThreadGoal"; @@ -396,8 +373,6 @@ export type { ThreadGoalSetParams } from "./ThreadGoalSetParams"; export type { ThreadGoalSetResponse } from "./ThreadGoalSetResponse"; export type { ThreadGoalStatus } from "./ThreadGoalStatus"; export type { ThreadGoalUpdatedNotification } from "./ThreadGoalUpdatedNotification"; -export type { ThreadIncrementElicitationParams } from "./ThreadIncrementElicitationParams"; -export type { ThreadIncrementElicitationResponse } from "./ThreadIncrementElicitationResponse"; export type { ThreadInjectItemsParams } from "./ThreadInjectItemsParams"; export type { ThreadInjectItemsResponse } from "./ThreadInjectItemsResponse"; export type { ThreadItem } from "./ThreadItem"; @@ -405,46 +380,30 @@ export type { ThreadListParams } from "./ThreadListParams"; export type { ThreadListResponse } from "./ThreadListResponse"; export type { ThreadLoadedListParams } from "./ThreadLoadedListParams"; export type { ThreadLoadedListResponse } from "./ThreadLoadedListResponse"; -export type { ThreadMemoryModeSetParams } from "./ThreadMemoryModeSetParams"; -export type { ThreadMemoryModeSetResponse } from "./ThreadMemoryModeSetResponse"; export type { ThreadMetadataGitInfoUpdateParams } from "./ThreadMetadataGitInfoUpdateParams"; export type { ThreadMetadataUpdateParams } from "./ThreadMetadataUpdateParams"; export type { ThreadMetadataUpdateResponse } from "./ThreadMetadataUpdateResponse"; export type { ThreadNameUpdatedNotification } from "./ThreadNameUpdatedNotification"; export type { ThreadReadParams } from "./ThreadReadParams"; export type { ThreadReadResponse } from "./ThreadReadResponse"; -export type { ThreadRealtimeAppendAudioParams } from "./ThreadRealtimeAppendAudioParams"; -export type { ThreadRealtimeAppendAudioResponse } from "./ThreadRealtimeAppendAudioResponse"; -export type { ThreadRealtimeAppendTextParams } from "./ThreadRealtimeAppendTextParams"; -export type { ThreadRealtimeAppendTextResponse } from "./ThreadRealtimeAppendTextResponse"; export type { ThreadRealtimeAudioChunk } from "./ThreadRealtimeAudioChunk"; export type { ThreadRealtimeClosedNotification } from "./ThreadRealtimeClosedNotification"; export type { ThreadRealtimeErrorNotification } from "./ThreadRealtimeErrorNotification"; export type { ThreadRealtimeItemAddedNotification } from "./ThreadRealtimeItemAddedNotification"; -export type { ThreadRealtimeListVoicesParams } from "./ThreadRealtimeListVoicesParams"; -export type { ThreadRealtimeListVoicesResponse } from "./ThreadRealtimeListVoicesResponse"; export type { ThreadRealtimeOutputAudioDeltaNotification } from "./ThreadRealtimeOutputAudioDeltaNotification"; export type { ThreadRealtimeSdpNotification } from "./ThreadRealtimeSdpNotification"; -export type { ThreadRealtimeStartParams } from "./ThreadRealtimeStartParams"; -export type { ThreadRealtimeStartResponse } from "./ThreadRealtimeStartResponse"; export type { ThreadRealtimeStartTransport } from "./ThreadRealtimeStartTransport"; export type { ThreadRealtimeStartedNotification } from "./ThreadRealtimeStartedNotification"; -export type { ThreadRealtimeStopParams } from "./ThreadRealtimeStopParams"; -export type { ThreadRealtimeStopResponse } from "./ThreadRealtimeStopResponse"; export type { ThreadRealtimeTranscriptDeltaNotification } from "./ThreadRealtimeTranscriptDeltaNotification"; export type { ThreadRealtimeTranscriptDoneNotification } from "./ThreadRealtimeTranscriptDoneNotification"; export type { ThreadResumeParams } from "./ThreadResumeParams"; export type { ThreadResumeResponse } from "./ThreadResumeResponse"; export type { ThreadRollbackParams } from "./ThreadRollbackParams"; export type { ThreadRollbackResponse } from "./ThreadRollbackResponse"; -export type { ThreadSearchParams } from "./ThreadSearchParams"; -export type { ThreadSearchResponse } from "./ThreadSearchResponse"; export type { ThreadSearchResult } from "./ThreadSearchResult"; export type { ThreadSetNameParams } from "./ThreadSetNameParams"; export type { ThreadSetNameResponse } from "./ThreadSetNameResponse"; export type { ThreadSettings } from "./ThreadSettings"; -export type { ThreadSettingsUpdateParams } from "./ThreadSettingsUpdateParams"; -export type { ThreadSettingsUpdateResponse } from "./ThreadSettingsUpdateResponse"; export type { ThreadSettingsUpdatedNotification } from "./ThreadSettingsUpdatedNotification"; export type { ThreadShellCommandParams } from "./ThreadShellCommandParams"; export type { ThreadShellCommandResponse } from "./ThreadShellCommandResponse"; @@ -459,10 +418,6 @@ export type { ThreadStatus } from "./ThreadStatus"; export type { ThreadStatusChangedNotification } from "./ThreadStatusChangedNotification"; export type { ThreadTokenUsage } from "./ThreadTokenUsage"; export type { ThreadTokenUsageUpdatedNotification } from "./ThreadTokenUsageUpdatedNotification"; -export type { ThreadTurnsItemsListParams } from "./ThreadTurnsItemsListParams"; -export type { ThreadTurnsItemsListResponse } from "./ThreadTurnsItemsListResponse"; -export type { ThreadTurnsListParams } from "./ThreadTurnsListParams"; -export type { ThreadTurnsListResponse } from "./ThreadTurnsListResponse"; export type { ThreadUnarchiveParams } from "./ThreadUnarchiveParams"; export type { ThreadUnarchiveResponse } from "./ThreadUnarchiveResponse"; export type { ThreadUnarchivedNotification } from "./ThreadUnarchivedNotification"; From 7d78e22aa4d02390d634b9ab8d5409784be0710d Mon Sep 17 00:00:00 2001 From: pakrym-oai Date: Fri, 22 May 2026 15:43:44 -0700 Subject: [PATCH 05/17] Add additional context trust routing --- .../src/protocol/v2/turn.rs | 2 + .../src/request_processors/turn_processor.rs | 13 +- .../app-server/tests/suite/v2/turn_start.rs | 1 + .../app-server/tests/suite/v2/turn_steer.rs | 1 + codex-rs/core/src/codex_thread.rs | 3 +- codex-rs/core/src/context/fragments.rs | 45 +++--- codex-rs/core/src/session/handlers.rs | 2 +- codex-rs/core/src/session/mod.rs | 9 +- codex-rs/core/src/session/turn.rs | 8 +- codex-rs/core/src/state/additional_context.rs | 9 +- .../core/tests/suite/additional_context.rs | 131 ++++++++++++++++-- codex-rs/protocol/src/protocol.rs | 10 +- 12 files changed, 192 insertions(+), 42 deletions(-) diff --git a/codex-rs/app-server-protocol/src/protocol/v2/turn.rs b/codex-rs/app-server-protocol/src/protocol/v2/turn.rs index 508f4755a8e..7b6796cb707 100644 --- a/codex-rs/app-server-protocol/src/protocol/v2/turn.rs +++ b/codex-rs/app-server-protocol/src/protocol/v2/turn.rs @@ -46,6 +46,8 @@ pub struct TurnEnvironmentParams { #[ts(export_to = "v2/")] pub struct AdditionalContextEntry { pub value: String, + #[serde(default, skip_serializing_if = "std::ops::Not::not")] + pub is_untrusted: bool, } #[derive( diff --git a/codex-rs/app-server/src/request_processors/turn_processor.rs b/codex-rs/app-server/src/request_processors/turn_processor.rs index 6dfa31981c2..4be6f1596df 100644 --- a/codex-rs/app-server/src/request_processors/turn_processor.rs +++ b/codex-rs/app-server/src/request_processors/turn_processor.rs @@ -1,4 +1,5 @@ use super::*; +use codex_protocol::protocol::AdditionalContextEntry as CoreAdditionalContextEntry; #[derive(Clone)] pub(crate) struct TurnRequestProcessor { @@ -32,11 +33,19 @@ fn resolve_runtime_workspace_roots( fn map_additional_context( additional_context: Option>, -) -> BTreeMap { +) -> BTreeMap { additional_context .unwrap_or_default() .into_iter() - .map(|(key, entry)| (key, entry.value)) + .map(|(key, entry)| { + ( + key, + CoreAdditionalContextEntry { + value: entry.value, + is_untrusted: entry.is_untrusted, + }, + ) + }) .collect() } diff --git a/codex-rs/app-server/tests/suite/v2/turn_start.rs b/codex-rs/app-server/tests/suite/v2/turn_start.rs index 4e41f434fae..8fdd1ba7e09 100644 --- a/codex-rs/app-server/tests/suite/v2/turn_start.rs +++ b/codex-rs/app-server/tests/suite/v2/turn_start.rs @@ -342,6 +342,7 @@ async fn turn_start_additional_context_flows_to_model_input() -> Result<()> { "custom_source".to_string(), AdditionalContextEntry { value: "source value".to_string(), + is_untrusted: true, }, )])), ..Default::default() diff --git a/codex-rs/app-server/tests/suite/v2/turn_steer.rs b/codex-rs/app-server/tests/suite/v2/turn_steer.rs index c265e69a44c..d8d8bdf52ba 100644 --- a/codex-rs/app-server/tests/suite/v2/turn_steer.rs +++ b/codex-rs/app-server/tests/suite/v2/turn_steer.rs @@ -388,6 +388,7 @@ async fn turn_steer_accepts_new_context_only_input_and_rejects_duplicate() -> Re "browser_info".to_string(), AdditionalContextEntry { value: "tab one".to_string(), + is_untrusted: true, }, )])); let steer_req = mcp diff --git a/codex-rs/core/src/codex_thread.rs b/codex-rs/core/src/codex_thread.rs index 9d54716c9c0..1f5369d0593 100644 --- a/codex-rs/core/src/codex_thread.rs +++ b/codex-rs/core/src/codex_thread.rs @@ -21,6 +21,7 @@ use codex_protocol::models::PermissionProfile; use codex_protocol::models::ResponseInputItem; use codex_protocol::models::ResponseItem; use codex_protocol::openai_models::ReasoningEffort; +use codex_protocol::protocol::AdditionalContextEntry; use codex_protocol::protocol::AskForApproval; use codex_protocol::protocol::Event; use codex_protocol::protocol::Op; @@ -237,7 +238,7 @@ impl CodexThread { pub async fn steer_input( &self, input: Vec, - additional_context: BTreeMap, + additional_context: BTreeMap, expected_turn_id: Option<&str>, responsesapi_client_metadata: Option>, ) -> Result { diff --git a/codex-rs/core/src/context/fragments.rs b/codex-rs/core/src/context/fragments.rs index 5b6af5eb853..e00274eeb7d 100644 --- a/codex-rs/core/src/context/fragments.rs +++ b/codex-rs/core/src/context/fragments.rs @@ -1,37 +1,48 @@ use super::ContextualUserFragment; use codex_protocol::models::ContentItem; use codex_protocol::models::ResponseInputItem; +use codex_utils_string::truncate_middle_with_token_budget; + +const MAX_ADDITIONAL_CONTEXT_VALUE_TOKENS: usize = 1_000; #[derive(Debug, Clone, PartialEq, Eq)] pub(crate) struct AdditionalContextFragment { pub(crate) key: String, pub(crate) value: String, + pub(crate) is_untrusted: bool, } impl AdditionalContextFragment { const END_MARKER_SUFFIX: &'static str = ">"; const START_MARKER_PREFIX: &'static str = " Self { - Self { key, value } + pub(crate) fn new(key: String, value: String, is_untrusted: bool) -> Self { + Self { + key, + value, + is_untrusted, + } } - pub(crate) fn input_item(fragments: Vec) -> Option { - let content = fragments + pub(crate) fn input_items(fragments: Vec) -> Vec { + fragments .into_iter() - .map(|fragment| ContentItem::InputText { - text: fragment.render(), + .map(|fragment| ResponseInputItem::Message { + role: fragment.role().to_string(), + content: vec![ContentItem::InputText { + text: fragment.render(), + }], + phase: None, }) - .collect::>(); - if content.is_empty() { - return None; - } + .collect() + } - Some(ResponseInputItem::Message { - role: Self::role().to_string(), - content, - phase: None, - }) + fn role(&self) -> &'static str { + if self.is_untrusted { + "user" + } else { + "developer" + } } } @@ -49,6 +60,8 @@ impl ContextualUserFragment for AdditionalContextFragment { } fn body(&self) -> String { - format!("{}>{}{value}, - additional_context: BTreeMap, + additional_context: BTreeMap, expected_turn_id: Option<&str>, responsesapi_client_metadata: Option>, ) -> Result { @@ -3160,7 +3161,7 @@ impl Session { pub async fn steer_input( &self, input: Vec, - additional_context: BTreeMap, + additional_context: BTreeMap, expected_turn_id: Option<&str>, responsesapi_client_metadata: Option>, ) -> Result { @@ -3204,11 +3205,11 @@ impl Session { }; let fragments = additional_context_store.merge(additional_context); ( - AdditionalContextFragment::input_item(fragments), + AdditionalContextFragment::input_items(fragments), additional_context_store, ) }; - if input.is_empty() && additional_context_input.is_none() { + if input.is_empty() && additional_context_input.is_empty() { return Err(SteerInputError::EmptyInput); } { diff --git a/codex-rs/core/src/session/turn.rs b/codex-rs/core/src/session/turn.rs index f81b2b1f742..7f0e157c3fd 100644 --- a/codex-rs/core/src/session/turn.rs +++ b/codex-rs/core/src/session/turn.rs @@ -418,14 +418,16 @@ async fn run_hooks_and_record_inputs( input: &[TurnInput], ) -> bool { let mut blocked_input = false; - let mut accepted_input = false; + let mut accepted_user_input = false; for input_item in input { let hook_outcome = inspect_pending_input(sess, turn_context, input_item).await; if hook_outcome.should_stop { blocked_input = true; record_additional_contexts(sess, turn_context, hook_outcome.additional_contexts).await; } else { - accepted_input = true; + if matches!(input_item, TurnInput::UserInput(items) if !items.is_empty()) { + accepted_user_input = true; + } record_pending_input( sess, turn_context, @@ -435,7 +437,7 @@ async fn run_hooks_and_record_inputs( .await; } } - blocked_input && !accepted_input + blocked_input && !accepted_user_input } #[expect( diff --git a/codex-rs/core/src/state/additional_context.rs b/codex-rs/core/src/state/additional_context.rs index 52c5e603c6a..ea93e489114 100644 --- a/codex-rs/core/src/state/additional_context.rs +++ b/codex-rs/core/src/state/additional_context.rs @@ -1,21 +1,24 @@ use std::collections::BTreeMap; use crate::context::AdditionalContextFragment; +use codex_protocol::protocol::AdditionalContextEntry; #[derive(Debug, Clone, Default, PartialEq, Eq)] pub(crate) struct AdditionalContextStore { - values: BTreeMap, + values: BTreeMap, } impl AdditionalContextStore { pub(crate) fn merge( &mut self, - values: BTreeMap, + values: BTreeMap, ) -> Vec { let fragments = values .iter() .filter(|(key, value)| self.values.get(*key) != Some(*value)) - .map(|(key, value)| AdditionalContextFragment::new(key.clone(), value.clone())) + .map(|(key, entry)| { + AdditionalContextFragment::new(key.clone(), entry.value.clone(), entry.is_untrusted) + }) .collect(); self.values = values; fragments diff --git a/codex-rs/core/tests/suite/additional_context.rs b/codex-rs/core/tests/suite/additional_context.rs index 1d42cae12ed..44e9190f094 100644 --- a/codex-rs/core/tests/suite/additional_context.rs +++ b/codex-rs/core/tests/suite/additional_context.rs @@ -1,5 +1,6 @@ use anyhow::Result; use codex_protocol::items::TurnItem; +use codex_protocol::protocol::AdditionalContextEntry; use codex_protocol::protocol::EventMsg; use codex_protocol::protocol::ItemCompletedEvent; use codex_protocol::protocol::Op; @@ -16,7 +17,21 @@ use core_test_support::wait_for_event_match; use pretty_assertions::assert_eq; use std::collections::BTreeMap; -fn user_turn(text: &str, additional_context: BTreeMap) -> Op { +fn untrusted_context(value: &str) -> AdditionalContextEntry { + AdditionalContextEntry { + value: value.to_string(), + is_untrusted: true, + } +} + +fn trusted_context(value: &str) -> AdditionalContextEntry { + AdditionalContextEntry { + value: value.to_string(), + is_untrusted: false, + } +} + +fn user_turn(text: &str, additional_context: BTreeMap) -> Op { Op::UserInput { environments: None, items: vec![UserInput::Text { @@ -53,8 +68,8 @@ async fn additional_context_is_model_visible_but_not_a_user_message_item() -> Re .submit(user_turn( "inspect the active tab", BTreeMap::from([ - ("browser_info".to_string(), "tab one".to_string()), - ("automation_info".to_string(), "run one".to_string()), + ("browser_info".to_string(), untrusted_context("tab one")), + ("automation_info".to_string(), untrusted_context("run one")), ]), )) .await?; @@ -88,6 +103,53 @@ async fn additional_context_is_model_visible_but_not_a_user_message_item() -> Re Ok(()) } +#[tokio::test(flavor = "multi_thread", worker_threads = 2)] +async fn additional_context_trust_controls_message_role() -> Result<()> { + skip_if_no_network!(Ok(())); + + let server = start_mock_server().await; + let request = mount_sse_once( + &server, + sse(vec![ev_response_created("resp-1"), ev_completed("resp-1")]), + ) + .await; + let test = test_codex() + .with_config(|config| config.include_environment_context = false) + .build(&server) + .await?; + + test.codex + .submit(user_turn( + "inspect context", + BTreeMap::from([ + ("browser_info".to_string(), untrusted_context("tab one")), + ("automation_info".to_string(), trusted_context("run one")), + ]), + )) + .await?; + wait_for_turn_complete(&test.codex).await; + + let request = request.single_request(); + let developer_external_texts = request + .message_input_texts("developer") + .into_iter() + .filter(|text| text.starts_with(">(); + assert_eq!( + developer_external_texts, + vec!["run one"] + ); + assert_eq!( + request.message_input_texts("user"), + vec![ + "tab one", + "inspect context", + ] + ); + + Ok(()) +} + #[tokio::test(flavor = "multi_thread", worker_threads = 2)] async fn additional_context_is_deduplicated_between_turns_while_retained() -> Result<()> { skip_if_no_network!(Ok(())); @@ -107,7 +169,8 @@ async fn additional_context_is_deduplicated_between_turns_while_retained() -> Re .with_config(|config| config.include_environment_context = false) .build(&server) .await?; - let additional_context = BTreeMap::from([("browser_info".to_string(), "same tab".to_string())]); + let additional_context = + BTreeMap::from([("browser_info".to_string(), untrusted_context("same tab"))]); test.codex .submit(user_turn("first turn", additional_context.clone())) @@ -167,8 +230,8 @@ async fn additional_context_removes_one_value_while_adding_another() -> Result<( .submit(user_turn( "first turn", BTreeMap::from([ - ("automation_info".to_string(), "run one".to_string()), - ("browser_info".to_string(), "tab one".to_string()), + ("automation_info".to_string(), untrusted_context("run one")), + ("browser_info".to_string(), untrusted_context("tab one")), ]), )) .await?; @@ -178,8 +241,8 @@ async fn additional_context_removes_one_value_while_adding_another() -> Result<( .submit(user_turn( "second turn", BTreeMap::from([ - ("automation_info".to_string(), "run one".to_string()), - ("terminal_info".to_string(), "pty one".to_string()), + ("automation_info".to_string(), untrusted_context("run one")), + ("terminal_info".to_string(), untrusted_context("pty one")), ]), )) .await?; @@ -189,9 +252,9 @@ async fn additional_context_removes_one_value_while_adding_another() -> Result<( .submit(user_turn( "third turn", BTreeMap::from([ - ("automation_info".to_string(), "run one".to_string()), - ("browser_info".to_string(), "tab one".to_string()), - ("terminal_info".to_string(), "pty one".to_string()), + ("automation_info".to_string(), untrusted_context("run one")), + ("browser_info".to_string(), untrusted_context("tab one")), + ("terminal_info".to_string(), untrusted_context("pty one")), ]), )) .await?; @@ -230,3 +293,49 @@ async fn additional_context_removes_one_value_while_adding_another() -> Result<( Ok(()) } + +#[tokio::test(flavor = "multi_thread", worker_threads = 2)] +async fn additional_context_value_is_truncated_before_model_input() -> Result<()> { + skip_if_no_network!(Ok(())); + + const MAX_EXPECTED_EXTERNAL_CONTEXT_TEXT_BYTES: usize = 5 * 1024; + + let server = start_mock_server().await; + let request = mount_sse_once( + &server, + sse(vec![ev_response_created("resp-1"), ev_completed("resp-1")]), + ) + .await; + let test = test_codex() + .with_config(|config| config.include_environment_context = false) + .build(&server) + .await?; + let long_value = format!("{}tail", "a".repeat(40_000)); + let untruncated_fragment = + format!("{long_value}"); + + test.codex + .submit(user_turn( + "summarize context", + BTreeMap::from([("browser_info".to_string(), untrusted_context(&long_value))]), + )) + .await?; + wait_for_turn_complete(&test.codex).await; + + let user_texts = request.single_request().message_input_texts("user"); + let [external_text, user_text] = user_texts.as_slice() else { + panic!("expected external context plus user input, got {user_texts:?}"); + }; + assert_eq!(user_text, "summarize context"); + assert!(external_text.starts_with(&format!("{}", "a".repeat(1024)))); + assert!(external_text.contains("tokens truncated")); + assert!(external_text.ends_with("tail")); + assert!(external_text.len() < untruncated_fragment.len()); + assert!( + external_text.len() <= MAX_EXPECTED_EXTERNAL_CONTEXT_TEXT_BYTES, + "external context was not capped before model input: {} bytes", + external_text.len() + ); + + Ok(()) +} diff --git a/codex-rs/protocol/src/protocol.rs b/codex-rs/protocol/src/protocol.rs index b420ec4021f..dde39422b9d 100644 --- a/codex-rs/protocol/src/protocol.rs +++ b/codex-rs/protocol/src/protocol.rs @@ -472,6 +472,14 @@ pub struct ThreadSettingsOverrides { pub personality: Option, } +/// Client-supplied context keyed by an opaque source identifier. +#[derive(Debug, Clone, Default, Deserialize, Serialize, PartialEq, Eq, JsonSchema)] +pub struct AdditionalContextEntry { + pub value: String, + #[serde(default, skip_serializing_if = "std::ops::Not::not")] + pub is_untrusted: bool, +} + /// Submission operation #[derive(Debug, Clone, Deserialize, Serialize, PartialEq, JsonSchema)] #[serde(tag = "type", rename_all = "snake_case")] @@ -516,7 +524,7 @@ pub enum Op { responsesapi_client_metadata: Option>, /// Client-supplied context fragments keyed by an opaque source identifier. #[serde(default, skip_serializing_if = "BTreeMap::is_empty")] - additional_context: BTreeMap, + additional_context: BTreeMap, /// Persistent thread-settings overrides to apply before the input. #[serde(default, flatten)] From 9eaacb6d9152b41a6d6164f2ad0232dbdb29534c Mon Sep 17 00:00:00 2001 From: pakrym-oai Date: Fri, 22 May 2026 16:01:35 -0700 Subject: [PATCH 06/17] Split additional context fragments by role --- .../src/context/contextual_user_message.rs | 4 +- codex-rs/core/src/context/fragments.rs | 102 +++++++++++------- codex-rs/core/src/context/mod.rs | 3 +- codex-rs/core/src/session/handlers.rs | 8 +- codex-rs/core/src/session/mod.rs | 6 +- codex-rs/core/src/state/additional_context.rs | 14 ++- .../core/tests/suite/additional_context.rs | 32 +++++- ...text__additional_context_simple_input.snap | 11 ++ 8 files changed, 124 insertions(+), 56 deletions(-) create mode 100644 codex-rs/core/tests/suite/snapshots/all__suite__additional_context__additional_context_simple_input.snap diff --git a/codex-rs/core/src/context/contextual_user_message.rs b/codex-rs/core/src/context/contextual_user_message.rs index 6b361a9cf4a..940a938fcee 100644 --- a/codex-rs/core/src/context/contextual_user_message.rs +++ b/codex-rs/core/src/context/contextual_user_message.rs @@ -2,7 +2,7 @@ use codex_protocol::items::HookPromptItem; use codex_protocol::items::parse_hook_prompt_fragment; use codex_protocol::models::ContentItem; -use super::AdditionalContextFragment; +use super::AdditionalContextUserFragment; use super::EnvironmentContext; use super::FragmentRegistration; use super::FragmentRegistrationProxy; @@ -20,7 +20,7 @@ static USER_INSTRUCTIONS_REGISTRATION: FragmentRegistrationProxy = FragmentRegistrationProxy::new(); -static ADDITIONAL_CONTEXT_REGISTRATION: FragmentRegistrationProxy = +static ADDITIONAL_CONTEXT_REGISTRATION: FragmentRegistrationProxy = FragmentRegistrationProxy::new(); static SKILL_INSTRUCTIONS_REGISTRATION: FragmentRegistrationProxy = FragmentRegistrationProxy::new(); diff --git a/codex-rs/core/src/context/fragments.rs b/codex-rs/core/src/context/fragments.rs index e00274eeb7d..25190e4499b 100644 --- a/codex-rs/core/src/context/fragments.rs +++ b/codex-rs/core/src/context/fragments.rs @@ -4,51 +4,65 @@ use codex_protocol::models::ResponseInputItem; use codex_utils_string::truncate_middle_with_token_budget; const MAX_ADDITIONAL_CONTEXT_VALUE_TOKENS: usize = 1_000; +const ADDITIONAL_CONTEXT_END_MARKER_SUFFIX: &str = ">"; +const ADDITIONAL_CONTEXT_START_MARKER_PREFIX: &str = " Self { + Self { key, value } + } + + pub(crate) fn into_input_item(self) -> ResponseInputItem { + additional_context_input_item(self) + } +} + +impl ContextualUserFragment for AdditionalContextUserFragment { + fn role() -> &'static str { + "user" + } + + fn markers(&self) -> (&'static str, &'static str) { + Self::type_markers() + } + + fn type_markers() -> (&'static str, &'static str) { + ( + ADDITIONAL_CONTEXT_START_MARKER_PREFIX, + ADDITIONAL_CONTEXT_END_MARKER_SUFFIX, + ) + } - pub(crate) fn new(key: String, value: String, is_untrusted: bool) -> Self { - Self { - key, - value, - is_untrusted, - } + fn body(&self) -> String { + additional_context_body(&self.key, &self.value) } +} + +#[derive(Debug, Clone, PartialEq, Eq)] +pub(crate) struct AdditionalContextDeveloperFragment { + key: String, + value: String, +} - pub(crate) fn input_items(fragments: Vec) -> Vec { - fragments - .into_iter() - .map(|fragment| ResponseInputItem::Message { - role: fragment.role().to_string(), - content: vec![ContentItem::InputText { - text: fragment.render(), - }], - phase: None, - }) - .collect() +impl AdditionalContextDeveloperFragment { + pub(crate) fn new(key: String, value: String) -> Self { + Self { key, value } } - fn role(&self) -> &'static str { - if self.is_untrusted { - "user" - } else { - "developer" - } + pub(crate) fn into_input_item(self) -> ResponseInputItem { + additional_context_input_item(self) } } -impl ContextualUserFragment for AdditionalContextFragment { +impl ContextualUserFragment for AdditionalContextDeveloperFragment { fn role() -> &'static str { - "user" + "developer" } fn markers(&self) -> (&'static str, &'static str) { @@ -56,12 +70,28 @@ impl ContextualUserFragment for AdditionalContextFragment { } fn type_markers() -> (&'static str, &'static str) { - (Self::START_MARKER_PREFIX, Self::END_MARKER_SUFFIX) + ( + ADDITIONAL_CONTEXT_START_MARKER_PREFIX, + ADDITIONAL_CONTEXT_END_MARKER_SUFFIX, + ) } fn body(&self) -> String { - let value = - truncate_middle_with_token_budget(&self.value, MAX_ADDITIONAL_CONTEXT_VALUE_TOKENS).0; - format!("{}>{value}(fragment: T) -> ResponseInputItem { + ResponseInputItem::Message { + role: T::role().to_string(), + content: vec![ContentItem::InputText { + text: fragment.render(), + }], + phase: None, } } + +fn additional_context_body(key: &str, value: &str) -> String { + let value = truncate_middle_with_token_budget(value, MAX_ADDITIONAL_CONTEXT_VALUE_TOKENS).0; + format!("{key}>{value}, - ) -> Vec { + ) -> Vec { let fragments = values .iter() .filter(|(key, value)| self.values.get(*key) != Some(*value)) .map(|(key, entry)| { - AdditionalContextFragment::new(key.clone(), entry.value.clone(), entry.is_untrusted) + if entry.is_untrusted { + AdditionalContextUserFragment::new(key.clone(), entry.value.clone()) + .into_input_item() + } else { + AdditionalContextDeveloperFragment::new(key.clone(), entry.value.clone()) + .into_input_item() + } }) .collect(); self.values = values; diff --git a/codex-rs/core/tests/suite/additional_context.rs b/codex-rs/core/tests/suite/additional_context.rs index 44e9190f094..9e13eab9d82 100644 --- a/codex-rs/core/tests/suite/additional_context.rs +++ b/codex-rs/core/tests/suite/additional_context.rs @@ -5,6 +5,9 @@ use codex_protocol::protocol::EventMsg; use codex_protocol::protocol::ItemCompletedEvent; use codex_protocol::protocol::Op; use codex_protocol::user_input::UserInput; +use core_test_support::context_snapshot; +use core_test_support::context_snapshot::ContextSnapshotOptions; +use core_test_support::context_snapshot::ContextSnapshotRenderMode; use core_test_support::responses::ev_completed; use core_test_support::responses::ev_response_created; use core_test_support::responses::mount_sse_once; @@ -49,6 +52,12 @@ async fn wait_for_turn_complete(codex: &codex_core::CodexThread) { wait_for_event(codex, |event| matches!(event, EventMsg::TurnComplete(_))).await; } +fn additional_context_snapshot_options() -> ContextSnapshotOptions { + ContextSnapshotOptions::default() + .strip_capability_instructions() + .render_mode(ContextSnapshotRenderMode::KindWithTextPrefix { max_chars: 160 }) +} + #[tokio::test(flavor = "multi_thread", worker_threads = 2)] async fn additional_context_is_model_visible_but_not_a_user_message_item() -> Result<()> { skip_if_no_network!(Ok(())); @@ -69,7 +78,7 @@ async fn additional_context_is_model_visible_but_not_a_user_message_item() -> Re "inspect the active tab", BTreeMap::from([ ("browser_info".to_string(), untrusted_context("tab one")), - ("automation_info".to_string(), untrusted_context("run one")), + ("automation_info".to_string(), trusted_context("run one")), ]), )) .await?; @@ -91,10 +100,27 @@ async fn additional_context_is_model_visible_but_not_a_user_message_item() -> Re ); wait_for_turn_complete(&test.codex).await; + let request = request.single_request(); + insta::assert_snapshot!( + "additional_context_simple_input", + context_snapshot::format_labeled_requests_snapshot( + "additional context is inserted before the user turn input.", + &[("Request", &request)], + &additional_context_snapshot_options(), + ) + ); + let developer_external_texts = request + .message_input_texts("developer") + .into_iter() + .filter(|text| text.starts_with(">(); + assert_eq!( + developer_external_texts, + vec!["run one"] + ); assert_eq!( - request.single_request().message_input_texts("user"), + request.message_input_texts("user"), vec![ - "run one", "tab one", "inspect the active tab", ] diff --git a/codex-rs/core/tests/suite/snapshots/all__suite__additional_context__additional_context_simple_input.snap b/codex-rs/core/tests/suite/snapshots/all__suite__additional_context__additional_context_simple_input.snap new file mode 100644 index 00000000000..4f16b91ed61 --- /dev/null +++ b/codex-rs/core/tests/suite/snapshots/all__suite__additional_context__additional_context_simple_input.snap @@ -0,0 +1,11 @@ +--- +source: core/tests/suite/additional_context.rs +expression: "context_snapshot::format_labeled_requests_snapshot(\"additional context is inserted before the user turn input.\",\n&[(\"Request\", &request)], &additional_context_snapshot_options(),)" +--- +Scenario: additional context is inserted before the user turn input. + +## Request +00:message/developer: +01:message/developer:run one +02:message/user:tab one +03:message/user:inspect the active tab From 7450223ea201c2c1016e11de5c3e98bb614fbba3 Mon Sep 17 00:00:00 2001 From: pakrym-oai Date: Fri, 22 May 2026 16:24:32 -0700 Subject: [PATCH 07/17] Render trusted additional context without external markers --- codex-rs/core/src/context/fragments.rs | 12 +++++++----- codex-rs/core/tests/suite/additional_context.rs | 16 ++++++++-------- ...context__additional_context_simple_input.snap | 2 +- 3 files changed, 16 insertions(+), 14 deletions(-) diff --git a/codex-rs/core/src/context/fragments.rs b/codex-rs/core/src/context/fragments.rs index 25190e4499b..b627d46834c 100644 --- a/codex-rs/core/src/context/fragments.rs +++ b/codex-rs/core/src/context/fragments.rs @@ -70,14 +70,11 @@ impl ContextualUserFragment for AdditionalContextDeveloperFragment { } fn type_markers() -> (&'static str, &'static str) { - ( - ADDITIONAL_CONTEXT_START_MARKER_PREFIX, - ADDITIONAL_CONTEXT_END_MARKER_SUFFIX, - ) + ("", "") } fn body(&self) -> String { - additional_context_body(&self.key, &self.value) + additional_context_developer_body(&self.key, &self.value) } } @@ -95,3 +92,8 @@ fn additional_context_body(key: &str, value: &str) -> String { let value = truncate_middle_with_token_budget(value, MAX_ADDITIONAL_CONTEXT_VALUE_TOKENS).0; format!("{key}>{value} String { + let value = truncate_middle_with_token_budget(value, MAX_ADDITIONAL_CONTEXT_VALUE_TOKENS).0; + format!("<{key}>{value}") +} diff --git a/codex-rs/core/tests/suite/additional_context.rs b/codex-rs/core/tests/suite/additional_context.rs index 9e13eab9d82..8e0045d6ef7 100644 --- a/codex-rs/core/tests/suite/additional_context.rs +++ b/codex-rs/core/tests/suite/additional_context.rs @@ -109,14 +109,14 @@ async fn additional_context_is_model_visible_but_not_a_user_message_item() -> Re &additional_context_snapshot_options(), ) ); - let developer_external_texts = request + let developer_context_texts = request .message_input_texts("developer") .into_iter() - .filter(|text| text.starts_with("")) .collect::>(); assert_eq!( - developer_external_texts, - vec!["run one"] + developer_context_texts, + vec!["run one"] ); assert_eq!( request.message_input_texts("user"), @@ -156,14 +156,14 @@ async fn additional_context_trust_controls_message_role() -> Result<()> { wait_for_turn_complete(&test.codex).await; let request = request.single_request(); - let developer_external_texts = request + let developer_context_texts = request .message_input_texts("developer") .into_iter() - .filter(|text| text.starts_with("")) .collect::>(); assert_eq!( - developer_external_texts, - vec!["run one"] + developer_context_texts, + vec!["run one"] ); assert_eq!( request.message_input_texts("user"), diff --git a/codex-rs/core/tests/suite/snapshots/all__suite__additional_context__additional_context_simple_input.snap b/codex-rs/core/tests/suite/snapshots/all__suite__additional_context__additional_context_simple_input.snap index 4f16b91ed61..fefdfde60cd 100644 --- a/codex-rs/core/tests/suite/snapshots/all__suite__additional_context__additional_context_simple_input.snap +++ b/codex-rs/core/tests/suite/snapshots/all__suite__additional_context__additional_context_simple_input.snap @@ -6,6 +6,6 @@ Scenario: additional context is inserted before the user turn input. ## Request 00:message/developer: -01:message/developer:run one +01:message/developer:run one 02:message/user:tab one 03:message/user:inspect the active tab From b4223d46199fb9c0b4a7bc5b015597332c050ec3 Mon Sep 17 00:00:00 2001 From: pakrym-oai Date: Fri, 22 May 2026 16:41:33 -0700 Subject: [PATCH 08/17] Test additional context truncation by role --- .../core/tests/suite/additional_context.rs | 57 +++++++++++++++---- 1 file changed, 47 insertions(+), 10 deletions(-) diff --git a/codex-rs/core/tests/suite/additional_context.rs b/codex-rs/core/tests/suite/additional_context.rs index 8e0045d6ef7..6ef42873f36 100644 --- a/codex-rs/core/tests/suite/additional_context.rs +++ b/codex-rs/core/tests/suite/additional_context.rs @@ -321,7 +321,7 @@ async fn additional_context_removes_one_value_while_adding_another() -> Result<( } #[tokio::test(flavor = "multi_thread", worker_threads = 2)] -async fn additional_context_value_is_truncated_before_model_input() -> Result<()> { +async fn additional_context_values_are_truncated_before_model_input() -> Result<()> { skip_if_no_network!(Ok(())); const MAX_EXPECTED_EXTERNAL_CONTEXT_TEXT_BYTES: usize = 5 * 1024; @@ -336,30 +336,67 @@ async fn additional_context_value_is_truncated_before_model_input() -> Result<() .with_config(|config| config.include_environment_context = false) .build(&server) .await?; - let long_value = format!("{}tail", "a".repeat(40_000)); - let untruncated_fragment = - format!("{long_value}"); + let long_browser_value = format!("browser-head-{}browser-tail", "b".repeat(40_000)); + let long_automation_value = format!("automation-head-{}automation-tail", "a".repeat(40_000)); + let untruncated_browser_fragment = + format!("{long_browser_value}"); + let untruncated_automation_fragment = + format!("{long_automation_value}"); test.codex .submit(user_turn( "summarize context", - BTreeMap::from([("browser_info".to_string(), untrusted_context(&long_value))]), + BTreeMap::from([ + ( + "automation_info".to_string(), + trusted_context(&long_automation_value), + ), + ( + "browser_info".to_string(), + untrusted_context(&long_browser_value), + ), + ]), )) .await?; wait_for_turn_complete(&test.codex).await; - let user_texts = request.single_request().message_input_texts("user"); + let request = request.single_request(); + let developer_texts = request + .message_input_texts("developer") + .into_iter() + .filter(|text| text.starts_with("")) + .collect::>(); + let [automation_text] = developer_texts.as_slice() else { + panic!("expected trusted additional context, got {developer_texts:?}"); + }; + assert!(automation_text.starts_with(&format!( + "automation-head-{}", + "a".repeat(1024) + ))); + assert!(automation_text.contains("tokens truncated")); + assert!(automation_text.ends_with("automation-tail")); + assert!(automation_text.len() < untruncated_automation_fragment.len()); + assert!( + automation_text.len() <= MAX_EXPECTED_EXTERNAL_CONTEXT_TEXT_BYTES, + "trusted additional context was not capped before model input: {} bytes", + automation_text.len() + ); + + let user_texts = request.message_input_texts("user"); let [external_text, user_text] = user_texts.as_slice() else { panic!("expected external context plus user input, got {user_texts:?}"); }; assert_eq!(user_text, "summarize context"); - assert!(external_text.starts_with(&format!("{}", "a".repeat(1024)))); + assert!(external_text.starts_with(&format!( + "browser-head-{}", + "b".repeat(1024) + ))); assert!(external_text.contains("tokens truncated")); - assert!(external_text.ends_with("tail")); - assert!(external_text.len() < untruncated_fragment.len()); + assert!(external_text.ends_with("browser-tail")); + assert!(external_text.len() < untruncated_browser_fragment.len()); assert!( external_text.len() <= MAX_EXPECTED_EXTERNAL_CONTEXT_TEXT_BYTES, - "external context was not capped before model input: {} bytes", + "untrusted additional context was not capped before model input: {} bytes", external_text.len() ); From 904b2ea2eb059584530bf0d4ba31ddd2e44b16cb Mon Sep 17 00:00:00 2001 From: pakrym-oai Date: Fri, 22 May 2026 17:21:21 -0700 Subject: [PATCH 09/17] Simplify additional context turn input plumbing --- codex-rs/app-server/README.md | 17 ++----- .../app-server/tests/suite/v2/turn_steer.rs | 30 +++---------- codex-rs/core/src/session/handlers.rs | 2 +- codex-rs/core/src/session/mod.rs | 21 +++------ codex-rs/core/src/session/review.rs | 4 +- codex-rs/core/src/session/tests.rs | 44 +++++++++---------- codex-rs/core/src/tasks/mod.rs | 31 +------------ 7 files changed, 43 insertions(+), 106 deletions(-) diff --git a/codex-rs/app-server/README.md b/codex-rs/app-server/README.md index db5efc3cfe7..dcc29530736 100644 --- a/codex-rs/app-server/README.md +++ b/codex-rs/app-server/README.md @@ -158,9 +158,9 @@ Example with notification opt-out: - `thread/shellCommand` — run a user-initiated `!` shell command against a thread; this runs unsandboxed with full access rather than inheriting the thread sandbox policy. Returns `{}` immediately while progress streams through standard turn/item notifications and any active turn receives the formatted output in its message stream. - `thread/backgroundTerminals/clean` — terminate all running background terminals for a thread (experimental; requires `capabilities.experimentalApi`); returns `{}` when the cleanup request is accepted. - `thread/rollback` — drop the last N turns from the agent’s in-memory context and persist a rollback marker in the rollout so future resumes see the pruned history; returns the updated `thread` (with `turns` populated) on success. -- `turn/start` — add user input to a thread and begin Codex generation; responds with the initial `turn` object and streams `turn/started`, `item/*`, and `turn/completed` notifications. Experimental `additionalContext` supplies hidden model-visible user context as arbitrary key/value entries. Experimental `runtimeWorkspaceRoots` replaces the thread-scoped runtime workspace roots used to materialize `:workspace_roots`; relative paths resolve against the effective turn cwd. Prefer experimental `permissions` profile selection by id for permission overrides; the legacy `sandboxPolicy` field is still accepted but cannot be combined with `permissions`. For `collaborationMode`, `settings.developer_instructions: null` means "use built-in instructions for the selected mode". +- `turn/start` — add user input to a thread and begin Codex generation; responds with the initial `turn` object and streams `turn/started`, `item/*`, and `turn/completed` notifications. Experimental `runtimeWorkspaceRoots` replaces the thread-scoped runtime workspace roots used to materialize `:workspace_roots`; relative paths resolve against the effective turn cwd. Prefer experimental `permissions` profile selection by id for permission overrides; the legacy `sandboxPolicy` field is still accepted but cannot be combined with `permissions`. For `collaborationMode`, `settings.developer_instructions: null` means "use built-in instructions for the selected mode". - `thread/inject_items` — append raw Responses API items to a loaded thread’s model-visible history without starting a user turn; returns `{}` on success. -- `turn/steer` — add user input or experimental hidden `additionalContext` to an already in-flight regular turn without starting a new turn; returns the active `turnId` that accepted the input. Review and manual compaction turns reject `turn/steer`. +- `turn/steer` — add user input to an already in-flight regular turn without starting a new turn; returns the active `turnId` that accepted the input. Review and manual compaction turns reject `turn/steer`. - `turn/interrupt` — request cancellation of an in-flight turn by `(thread_id, turn_id)`; success is an empty `{}` response and the turn finishes with `status: "interrupted"`. - `thread/realtime/start` — start a thread-scoped realtime session (experimental); pass `outputModality: "text"` or `outputModality: "audio"` to choose model output, returns `{}` and streams `thread/realtime/*` notifications. Omit `transport` for the websocket transport, or pass `{ "type": "webrtc", "sdp": "..." }` to create a WebRTC session from a browser-generated SDP offer; the remote answer SDP is emitted as `thread/realtime/sdp`. - `thread/realtime/appendAudio` — append an input audio chunk to the active realtime session (experimental); returns `{}`. @@ -643,10 +643,6 @@ You can optionally specify config overrides on the new turn. If specified, these { "method": "turn/start", "id": 30, "params": { "threadId": "thr_123", "input": [ { "type": "text", "text": "Run tests" } ], - // Experimental hidden client context, keyed by the client. - "additionalContext": { - "browser_info": { "value": "Active tab is CI failures." } - }, // Below are optional config overrides "cwd": "/Users/me/project", // Experimental: turn-scoped environment selection. @@ -838,18 +834,13 @@ Use `thread/backgroundTerminals/clean` to terminate all running background termi ### Example: Steer an active turn -Use `turn/steer` to append additional user input or experimental hidden `additionalContext` to the -currently active regular turn. A context-only steer is accepted when it contributes at least one -new retained key/value entry. This does not emit `turn/started` and does not accept thread settings -overrides. +Use `turn/steer` to append additional user input to the currently active regular turn. This does +not emit `turn/started` and does not accept thread settings overrides. ```json { "method": "turn/steer", "id": 32, "params": { "threadId": "thr_123", "input": [ { "type": "text", "text": "Actually focus on failing tests first." } ], - "additionalContext": { - "automation_info": { "value": "CI rerun is in progress." } - }, "expectedTurnId": "turn_456" } } { "id": 32, "result": { "turnId": "turn_456" } } diff --git a/codex-rs/app-server/tests/suite/v2/turn_steer.rs b/codex-rs/app-server/tests/suite/v2/turn_steer.rs index d8d8bdf52ba..cdbbd44f1ee 100644 --- a/codex-rs/app-server/tests/suite/v2/turn_steer.rs +++ b/codex-rs/app-server/tests/suite/v2/turn_steer.rs @@ -321,7 +321,7 @@ async fn turn_steer_returns_active_turn_id() -> Result<()> { } #[tokio::test] -async fn turn_steer_accepts_new_context_only_input_and_rejects_duplicate() -> Result<()> { +async fn turn_steer_rejects_context_only_input_without_merging_context() -> Result<()> { let tmp = TempDir::new()?; let codex_home = tmp.path().join("codex_home"); std::fs::create_dir(&codex_home)?; @@ -392,23 +392,6 @@ async fn turn_steer_accepts_new_context_only_input_and_rejects_duplicate() -> Re }, )])); let steer_req = mcp - .send_turn_steer_request(TurnSteerParams { - thread_id: thread.id.clone(), - input: Vec::new(), - responsesapi_client_metadata: None, - additional_context: additional_context.clone(), - expected_turn_id: turn.id.clone(), - }) - .await?; - let steer_resp: JSONRPCResponse = timeout( - DEFAULT_READ_TIMEOUT, - mcp.read_stream_until_response_message(RequestId::Integer(steer_req)), - ) - .await??; - let steer: TurnSteerResponse = to_response::(steer_resp)?; - assert_eq!(steer.turn_id, turn.id); - - let duplicate_req = mcp .send_turn_steer_request(TurnSteerParams { thread_id: thread.id.clone(), input: Vec::new(), @@ -417,13 +400,13 @@ async fn turn_steer_accepts_new_context_only_input_and_rejects_duplicate() -> Re expected_turn_id: turn.id, }) .await?; - let duplicate_error: JSONRPCError = timeout( + let steer_error: JSONRPCError = timeout( DEFAULT_READ_TIMEOUT, - mcp.read_stream_until_error_message(RequestId::Integer(duplicate_req)), + mcp.read_stream_until_error_message(RequestId::Integer(steer_req)), ) .await??; - assert_eq!(duplicate_error.error.code, -32600); - assert_eq!(duplicate_error.error.message, "input must not be empty"); + assert_eq!(steer_error.error.code, -32600); + assert_eq!(steer_error.error.message, "input must not be empty"); timeout( DEFAULT_READ_TIMEOUT, @@ -444,7 +427,8 @@ async fn turn_steer_accepts_new_context_only_input_and_rejects_duplicate() -> Re .body_json::() .context("request body should be JSON")?; assert!( - body.to_string() + !body + .to_string() .contains("tab one") ); diff --git a/codex-rs/core/src/session/handlers.rs b/codex-rs/core/src/session/handlers.rs index bdb17876d5f..cf46ecba9ac 100644 --- a/codex-rs/core/src/session/handlers.rs +++ b/codex-rs/core/src/session/handlers.rs @@ -260,7 +260,7 @@ pub(super) async fn user_input_or_turn_inner( if !items.is_empty() { task_input.push(TurnInput::UserInput(items)); } - sess.spawn_task_with_input( + sess.spawn_task( Arc::clone(¤t_context), task_input, crate::tasks::RegularTask::new(), diff --git a/codex-rs/core/src/session/mod.rs b/codex-rs/core/src/session/mod.rs index 7efc699240c..7b31aea96fb 100644 --- a/codex-rs/core/src/session/mod.rs +++ b/codex-rs/core/src/session/mod.rs @@ -3197,21 +3197,14 @@ impl Session { None => return Err(SteerInputError::NoActiveTurn(input)), } - let (additional_context_input, additional_context_store) = { - let mut additional_context_store = { - let state = self.state.lock().await; - state.additional_context.clone() - }; - let fragments = additional_context_store.merge(additional_context); - (fragments, additional_context_store) - }; - if input.is_empty() && additional_context_input.is_empty() { + if input.is_empty() { return Err(SteerInputError::EmptyInput); } - { + + let additional_context_input = { let mut state = self.state.lock().await; - state.additional_context = additional_context_store; - } + state.additional_context.merge(additional_context) + }; if let Some(responsesapi_client_metadata) = responsesapi_client_metadata && let Some((_, active_task)) = active_turn.tasks.first() @@ -3226,9 +3219,7 @@ impl Session { .into_iter() .map(TurnInput::ResponseInputItem) .collect::>(); - if !input.is_empty() { - pending_input.push(TurnInput::UserInput(input)); - } + pending_input.push(TurnInput::UserInput(input)); self.input_queue .extend_pending_input_and_accept_mailbox_delivery_for_turn_state( active_turn.turn_state.as_ref(), diff --git a/codex-rs/core/src/session/review.rs b/codex-rs/core/src/session/review.rs index 059dc8abbd7..32122873cb2 100644 --- a/codex-rs/core/src/session/review.rs +++ b/codex-rs/core/src/session/review.rs @@ -132,11 +132,11 @@ pub(super) async fn spawn_review_thread( }; // Seed the child task with the review prompt as the initial user message. - let input: Vec = vec![UserInput::Text { + let input = vec![TurnInput::UserInput(vec![UserInput::Text { text: review_prompt, // Review prompt is synthesized; no UI element ranges to preserve. text_elements: Vec::new(), - }]; + }])]; let tc = Arc::new(review_turn_context); tc.turn_metadata_state.spawn_git_enrichment_task(); // TODO(ccunningham): Review turns currently rely on `spawn_task` for TurnComplete but do not diff --git a/codex-rs/core/src/session/tests.rs b/codex-rs/core/src/session/tests.rs index 64b9d29a59c..1250eb0641c 100644 --- a/codex-rs/core/src/session/tests.rs +++ b/codex-rs/core/src/session/tests.rs @@ -5784,10 +5784,10 @@ async fn spawn_task_turn_span_inherits_dispatch_trace_context() { async { sess.spawn_task( Arc::clone(&tc), - vec![UserInput::Text { + vec![TurnInput::UserInput(vec![UserInput::Text { text: "hello".to_string(), text_elements: Vec::new(), - }], + }])], TraceCaptureTask { captured_trace: Arc::clone(&captured_trace), }, @@ -6594,10 +6594,10 @@ async fn spawn_task_does_not_update_previous_turn_settings_for_non_run_turn_task let (sess, tc, _rx) = make_session_and_context_with_rx().await; sess.set_previous_turn_settings(/*previous_turn_settings*/ None) .await; - let input = vec![UserInput::Text { + let input = vec![TurnInput::UserInput(vec![UserInput::Text { text: "hello".to_string(), text_elements: Vec::new(), - }]; + }])]; sess.spawn_task( Arc::clone(&tc), @@ -7863,10 +7863,10 @@ impl SessionTask for GuardianDeniedApprovalTask { #[tokio::test(flavor = "multi_thread", worker_threads = 2)] async fn guardian_auto_review_interrupts_after_three_consecutive_denials() { let (sess, tc, rx) = make_session_and_context_with_rx().await; - let input = vec![UserInput::Text { + let input = vec![TurnInput::UserInput(vec![UserInput::Text { text: "trigger guardian denials".to_string(), text_elements: Vec::new(), - }]; + }])]; sess.spawn_task(Arc::clone(&tc), input, GuardianDeniedApprovalTask) .await; @@ -7894,10 +7894,10 @@ async fn guardian_auto_review_interrupts_after_three_consecutive_denials() { #[tokio::test(flavor = "multi_thread", worker_threads = 2)] async fn guardian_helper_review_interrupts_after_three_consecutive_denials() { let (sess, tc, rx) = make_session_and_context_with_rx().await; - let input = vec![UserInput::Text { + let input = vec![TurnInput::UserInput(vec![UserInput::Text { text: "keep turn active for helper reviews".to_string(), text_elements: Vec::new(), - }]; + }])]; sess.spawn_task( Arc::clone(&tc), input, @@ -7954,10 +7954,10 @@ async fn guardian_helper_review_interrupts_after_three_consecutive_denials() { #[test_log::test] async fn abort_regular_task_emits_turn_aborted_only() { let (sess, tc, rx) = make_session_and_context_with_rx().await; - let input = vec![UserInput::Text { + let input = vec![TurnInput::UserInput(vec![UserInput::Text { text: "hello".to_string(), text_elements: Vec::new(), - }]; + }])]; sess.spawn_task( Arc::clone(&tc), input, @@ -7987,10 +7987,10 @@ async fn abort_regular_task_emits_turn_aborted_only() { #[tokio::test] async fn abort_gracefully_emits_turn_aborted_only() { let (sess, tc, rx) = make_session_and_context_with_rx().await; - let input = vec![UserInput::Text { + let input = vec![TurnInput::UserInput(vec![UserInput::Text { text: "hello".to_string(), text_elements: Vec::new(), - }]; + }])]; sess.spawn_task( Arc::clone(&tc), input, @@ -8020,10 +8020,10 @@ async fn abort_gracefully_emits_turn_aborted_only() { #[tokio::test(flavor = "multi_thread", worker_threads = 2)] async fn task_finish_emits_turn_item_lifecycle_for_leftover_pending_user_input() { let (sess, tc, rx) = make_session_and_context_with_rx().await; - let input = vec![UserInput::Text { + let input = vec![TurnInput::UserInput(vec![UserInput::Text { text: "hello".to_string(), text_elements: Vec::new(), - }]; + }])]; sess.spawn_task( Arc::clone(&tc), input, @@ -8157,10 +8157,10 @@ async fn steer_input_requires_active_turn() { #[tokio::test] async fn steer_input_enforces_expected_turn_id() { let (sess, tc, _rx) = make_session_and_context_with_rx().await; - let input = vec![UserInput::Text { + let input = vec![TurnInput::UserInput(vec![UserInput::Text { text: "hello".to_string(), text_elements: Vec::new(), - }]; + }])]; sess.spawn_task( Arc::clone(&tc), input, @@ -8203,10 +8203,10 @@ async fn steer_input_rejects_non_regular_turns() { (TaskKind::Compact, NonSteerableTurnKind::Compact), ] { let (sess, _tc, _rx) = make_session_and_context_with_rx().await; - let input = vec![UserInput::Text { + let input = vec![TurnInput::UserInput(vec![UserInput::Text { text: "hello".to_string(), text_elements: Vec::new(), - }]; + }])]; let turn_context = sess.new_default_turn_with_sub_id("turn".to_string()).await; sess.spawn_task( turn_context, @@ -8241,10 +8241,10 @@ async fn steer_input_rejects_non_regular_turns() { #[tokio::test] async fn steer_input_returns_active_turn_id() { let (sess, tc, _rx) = make_session_and_context_with_rx().await; - let input = vec![UserInput::Text { + let input = vec![TurnInput::UserInput(vec![UserInput::Text { text: "hello".to_string(), text_elements: Vec::new(), - }]; + }])]; sess.spawn_task( Arc::clone(&tc), input, @@ -9440,10 +9440,10 @@ async fn tool_calls_reopen_mailbox_delivery_for_current_turn() { #[tokio::test(flavor = "multi_thread", worker_threads = 2)] async fn abort_review_task_emits_exited_then_aborted_and_records_history() { let (sess, tc, rx) = make_session_and_context_with_rx().await; - let input = vec![UserInput::Text { + let input = vec![TurnInput::UserInput(vec![UserInput::Text { text: "start review".to_string(), text_elements: Vec::new(), - }]; + }])]; sess.spawn_task(Arc::clone(&tc), input, ReviewTask::new()) .await; diff --git a/codex-rs/core/src/tasks/mod.rs b/codex-rs/core/src/tasks/mod.rs index 69b4e1735a5..9a458e68842 100644 --- a/codex-rs/core/src/tasks/mod.rs +++ b/codex-rs/core/src/tasks/mod.rs @@ -50,7 +50,6 @@ use codex_protocol::protocol::TurnAbortReason; use codex_protocol::protocol::TurnAbortedEvent; use codex_protocol::protocol::TurnCompleteEvent; use codex_protocol::protocol::WarningEvent; -use codex_protocol::user_input::UserInput; use codex_features::Feature; use codex_protocol::models::ContentItem; @@ -297,26 +296,8 @@ where } } -fn user_input_to_turn_input(input: Vec) -> Vec { - if input.is_empty() { - Vec::new() - } else { - vec![TurnInput::UserInput(input)] - } -} - impl Session { pub async fn spawn_task( - self: &Arc, - turn_context: Arc, - input: Vec, - task: T, - ) { - let input = user_input_to_turn_input(input); - self.spawn_task_with_input(turn_context, input, task).await; - } - - pub(crate) async fn spawn_task_with_input( self: &Arc, turn_context: Arc, input: Vec, @@ -324,20 +305,10 @@ impl Session { ) { self.abort_all_tasks(TurnAbortReason::Replaced).await; self.clear_connector_selection().await; - self.start_task_with_input(turn_context, input, task).await; + self.start_task(turn_context, input, task).await; } pub(crate) async fn start_task( - self: &Arc, - turn_context: Arc, - input: Vec, - task: T, - ) { - let input = user_input_to_turn_input(input); - self.start_task_with_input(turn_context, input, task).await; - } - - pub(crate) async fn start_task_with_input( self: &Arc, turn_context: Arc, input: Vec, From 4349a7b6352b4b166db019cdb8ada161dd5a2691 Mon Sep 17 00:00:00 2001 From: pakrym-oai Date: Fri, 22 May 2026 17:51:51 -0700 Subject: [PATCH 10/17] Add multiple steer additional context test --- .../core/tests/suite/additional_context.rs | 481 ++++++++++++++---- 1 file changed, 392 insertions(+), 89 deletions(-) diff --git a/codex-rs/core/tests/suite/additional_context.rs b/codex-rs/core/tests/suite/additional_context.rs index 6ef42873f36..d65a2847a17 100644 --- a/codex-rs/core/tests/suite/additional_context.rs +++ b/codex-rs/core/tests/suite/additional_context.rs @@ -14,49 +14,14 @@ 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::skip_if_no_network; +use core_test_support::streaming_sse::StreamingSseChunk; +use core_test_support::streaming_sse::start_streaming_sse_server; use core_test_support::test_codex::test_codex; -use core_test_support::wait_for_event; use core_test_support::wait_for_event_match; use pretty_assertions::assert_eq; +use serde_json::Value; use std::collections::BTreeMap; - -fn untrusted_context(value: &str) -> AdditionalContextEntry { - AdditionalContextEntry { - value: value.to_string(), - is_untrusted: true, - } -} - -fn trusted_context(value: &str) -> AdditionalContextEntry { - AdditionalContextEntry { - value: value.to_string(), - is_untrusted: false, - } -} - -fn user_turn(text: &str, additional_context: BTreeMap) -> Op { - Op::UserInput { - environments: None, - items: vec![UserInput::Text { - text: text.to_string(), - text_elements: Vec::new(), - }], - final_output_json_schema: None, - responsesapi_client_metadata: None, - additional_context, - thread_settings: Default::default(), - } -} - -async fn wait_for_turn_complete(codex: &codex_core::CodexThread) { - wait_for_event(codex, |event| matches!(event, EventMsg::TurnComplete(_))).await; -} - -fn additional_context_snapshot_options() -> ContextSnapshotOptions { - ContextSnapshotOptions::default() - .strip_capability_instructions() - .render_mode(ContextSnapshotRenderMode::KindWithTextPrefix { max_chars: 160 }) -} +use tokio::sync::oneshot; #[tokio::test(flavor = "multi_thread", worker_threads = 2)] async fn additional_context_is_model_visible_but_not_a_user_message_item() -> Result<()> { @@ -74,13 +39,32 @@ async fn additional_context_is_model_visible_but_not_a_user_message_item() -> Re .await?; test.codex - .submit(user_turn( - "inspect the active tab", - BTreeMap::from([ - ("browser_info".to_string(), untrusted_context("tab one")), - ("automation_info".to_string(), trusted_context("run one")), + .submit(Op::UserInput { + environments: None, + items: vec![UserInput::Text { + text: "inspect the active tab".to_string(), + text_elements: Vec::new(), + }], + final_output_json_schema: None, + responsesapi_client_metadata: None, + additional_context: BTreeMap::from([ + ( + "browser_info".to_string(), + AdditionalContextEntry { + value: "tab one".to_string(), + is_untrusted: true, + }, + ), + ( + "automation_info".to_string(), + AdditionalContextEntry { + value: "run one".to_string(), + is_untrusted: false, + }, + ), ]), - )) + thread_settings: Default::default(), + }) .await?; let user_item = wait_for_event_match(&test.codex, |event| match event { @@ -98,7 +82,10 @@ async fn additional_context_is_model_visible_but_not_a_user_message_item() -> Re text_elements: Vec::new(), }] ); - wait_for_turn_complete(&test.codex).await; + wait_for_event_match(&test.codex, |event| { + matches!(event, EventMsg::TurnComplete(_)).then_some(()) + }) + .await; let request = request.single_request(); insta::assert_snapshot!( @@ -106,7 +93,9 @@ async fn additional_context_is_model_visible_but_not_a_user_message_item() -> Re context_snapshot::format_labeled_requests_snapshot( "additional context is inserted before the user turn input.", &[("Request", &request)], - &additional_context_snapshot_options(), + &ContextSnapshotOptions::default() + .strip_capability_instructions() + .render_mode(ContextSnapshotRenderMode::KindWithTextPrefix { max_chars: 160 }), ) ); let developer_context_texts = request @@ -145,15 +134,37 @@ async fn additional_context_trust_controls_message_role() -> Result<()> { .await?; test.codex - .submit(user_turn( - "inspect context", - BTreeMap::from([ - ("browser_info".to_string(), untrusted_context("tab one")), - ("automation_info".to_string(), trusted_context("run one")), + .submit(Op::UserInput { + environments: None, + items: vec![UserInput::Text { + text: "inspect context".to_string(), + text_elements: Vec::new(), + }], + final_output_json_schema: None, + responsesapi_client_metadata: None, + additional_context: BTreeMap::from([ + ( + "browser_info".to_string(), + AdditionalContextEntry { + value: "tab one".to_string(), + is_untrusted: true, + }, + ), + ( + "automation_info".to_string(), + AdditionalContextEntry { + value: "run one".to_string(), + is_untrusted: false, + }, + ), ]), - )) + thread_settings: Default::default(), + }) .await?; - wait_for_turn_complete(&test.codex).await; + wait_for_event_match(&test.codex, |event| { + matches!(event, EventMsg::TurnComplete(_)).then_some(()) + }) + .await; let request = request.single_request(); let developer_context_texts = request @@ -195,18 +206,49 @@ async fn additional_context_is_deduplicated_between_turns_while_retained() -> Re .with_config(|config| config.include_environment_context = false) .build(&server) .await?; - let additional_context = - BTreeMap::from([("browser_info".to_string(), untrusted_context("same tab"))]); + let additional_context = BTreeMap::from([( + "browser_info".to_string(), + AdditionalContextEntry { + value: "same tab".to_string(), + is_untrusted: true, + }, + )]); test.codex - .submit(user_turn("first turn", additional_context.clone())) + .submit(Op::UserInput { + environments: None, + items: vec![UserInput::Text { + text: "first turn".to_string(), + text_elements: Vec::new(), + }], + final_output_json_schema: None, + responsesapi_client_metadata: None, + additional_context: additional_context.clone(), + thread_settings: Default::default(), + }) .await?; - wait_for_turn_complete(&test.codex).await; + wait_for_event_match(&test.codex, |event| { + matches!(event, EventMsg::TurnComplete(_)).then_some(()) + }) + .await; test.codex - .submit(user_turn("second turn", additional_context)) + .submit(Op::UserInput { + environments: None, + items: vec![UserInput::Text { + text: "second turn".to_string(), + text_elements: Vec::new(), + }], + final_output_json_schema: None, + responsesapi_client_metadata: None, + additional_context, + thread_settings: Default::default(), + }) .await?; - wait_for_turn_complete(&test.codex).await; + wait_for_event_match(&test.codex, |event| { + matches!(event, EventMsg::TurnComplete(_)).then_some(()) + }) + .await; assert_eq!( first_request.single_request().message_input_texts("user"), @@ -253,38 +295,110 @@ async fn additional_context_removes_one_value_while_adding_another() -> Result<( .await?; test.codex - .submit(user_turn( - "first turn", - BTreeMap::from([ - ("automation_info".to_string(), untrusted_context("run one")), - ("browser_info".to_string(), untrusted_context("tab one")), + .submit(Op::UserInput { + environments: None, + items: vec![UserInput::Text { + text: "first turn".to_string(), + text_elements: Vec::new(), + }], + final_output_json_schema: None, + responsesapi_client_metadata: None, + additional_context: BTreeMap::from([ + ( + "automation_info".to_string(), + AdditionalContextEntry { + value: "run one".to_string(), + is_untrusted: true, + }, + ), + ( + "browser_info".to_string(), + AdditionalContextEntry { + value: "tab one".to_string(), + is_untrusted: true, + }, + ), ]), - )) + thread_settings: Default::default(), + }) .await?; - wait_for_turn_complete(&test.codex).await; + wait_for_event_match(&test.codex, |event| { + matches!(event, EventMsg::TurnComplete(_)).then_some(()) + }) + .await; test.codex - .submit(user_turn( - "second turn", - BTreeMap::from([ - ("automation_info".to_string(), untrusted_context("run one")), - ("terminal_info".to_string(), untrusted_context("pty one")), + .submit(Op::UserInput { + environments: None, + items: vec![UserInput::Text { + text: "second turn".to_string(), + text_elements: Vec::new(), + }], + final_output_json_schema: None, + responsesapi_client_metadata: None, + additional_context: BTreeMap::from([ + ( + "automation_info".to_string(), + AdditionalContextEntry { + value: "run one".to_string(), + is_untrusted: true, + }, + ), + ( + "terminal_info".to_string(), + AdditionalContextEntry { + value: "pty one".to_string(), + is_untrusted: true, + }, + ), ]), - )) + thread_settings: Default::default(), + }) .await?; - wait_for_turn_complete(&test.codex).await; + wait_for_event_match(&test.codex, |event| { + matches!(event, EventMsg::TurnComplete(_)).then_some(()) + }) + .await; test.codex - .submit(user_turn( - "third turn", - BTreeMap::from([ - ("automation_info".to_string(), untrusted_context("run one")), - ("browser_info".to_string(), untrusted_context("tab one")), - ("terminal_info".to_string(), untrusted_context("pty one")), + .submit(Op::UserInput { + environments: None, + items: vec![UserInput::Text { + text: "third turn".to_string(), + text_elements: Vec::new(), + }], + final_output_json_schema: None, + responsesapi_client_metadata: None, + additional_context: BTreeMap::from([ + ( + "automation_info".to_string(), + AdditionalContextEntry { + value: "run one".to_string(), + is_untrusted: true, + }, + ), + ( + "browser_info".to_string(), + AdditionalContextEntry { + value: "tab one".to_string(), + is_untrusted: true, + }, + ), + ( + "terminal_info".to_string(), + AdditionalContextEntry { + value: "pty one".to_string(), + is_untrusted: true, + }, + ), ]), - )) + thread_settings: Default::default(), + }) .await?; - wait_for_turn_complete(&test.codex).await; + wait_for_event_match(&test.codex, |event| { + matches!(event, EventMsg::TurnComplete(_)).then_some(()) + }) + .await; assert_eq!( first_request.single_request().message_input_texts("user"), @@ -320,6 +434,179 @@ async fn additional_context_removes_one_value_while_adding_another() -> Result<( Ok(()) } +#[tokio::test(flavor = "multi_thread", worker_threads = 2)] +async fn additional_context_multiple_steers_dedupe_against_current_values() -> Result<()> { + skip_if_no_network!(Ok(())); + + let (first_response_done_tx, first_response_done_rx) = oneshot::channel(); + let first_chunks = vec![ + StreamingSseChunk { + gate: None, + body: sse(vec![ev_response_created("resp-1")]), + }, + StreamingSseChunk { + gate: Some(first_response_done_rx), + body: sse(vec![ev_completed("resp-1")]), + }, + ]; + let second_chunks = vec![StreamingSseChunk { + gate: None, + body: sse(vec![ev_response_created("resp-2"), ev_completed("resp-2")]), + }]; + let (server, _completions) = + start_streaming_sse_server(vec![first_chunks, second_chunks]).await; + let test = test_codex() + .with_config(|config| config.include_environment_context = false) + .build_with_streaming_server(&server) + .await?; + + test.codex + .submit(Op::UserInput { + environments: None, + items: vec![UserInput::Text { + text: "initial turn".to_string(), + text_elements: Vec::new(), + }], + final_output_json_schema: None, + responsesapi_client_metadata: None, + additional_context: BTreeMap::from([( + "browser_info".to_string(), + AdditionalContextEntry { + value: "tab one".to_string(), + is_untrusted: true, + }, + )]), + thread_settings: Default::default(), + }) + .await?; + server.wait_for_request_count(1).await; + + test.codex + .steer_input( + vec![UserInput::Text { + text: "first steer".to_string(), + text_elements: Vec::new(), + }], + BTreeMap::from([ + ( + "automation_info".to_string(), + AdditionalContextEntry { + value: "run one".to_string(), + is_untrusted: false, + }, + ), + ( + "browser_info".to_string(), + AdditionalContextEntry { + value: "tab two".to_string(), + is_untrusted: true, + }, + ), + ]), + None, + None, + ) + .await + .map_err(|err| anyhow::anyhow!("steer input: {err:?}"))?; + test.codex + .steer_input( + vec![UserInput::Text { + text: "second steer".to_string(), + text_elements: Vec::new(), + }], + BTreeMap::from([ + ( + "automation_info".to_string(), + AdditionalContextEntry { + value: "run two".to_string(), + is_untrusted: false, + }, + ), + ( + "browser_info".to_string(), + AdditionalContextEntry { + value: "tab two".to_string(), + is_untrusted: true, + }, + ), + ( + "terminal_info".to_string(), + AdditionalContextEntry { + value: "pty one".to_string(), + is_untrusted: true, + }, + ), + ]), + None, + None, + ) + .await + .map_err(|err| anyhow::anyhow!("steer input: {err:?}"))?; + + let _ = first_response_done_tx.send(()); + wait_for_event_match(&test.codex, |event| { + matches!(event, EventMsg::TurnComplete(_)).then_some(()) + }) + .await; + + let requests = server.requests().await; + assert_eq!(requests.len(), 2); + let second_body = serde_json::from_slice::(&requests[1])?; + let user_texts = second_body["input"] + .as_array() + .into_iter() + .flatten() + .filter(|item| item.get("type").and_then(Value::as_str) == Some("message")) + .filter(|item| item.get("role").and_then(Value::as_str) == Some("user")) + .flat_map(|item| { + item.get("content") + .and_then(Value::as_array) + .into_iter() + .flatten() + }) + .filter(|span| span.get("type").and_then(Value::as_str) == Some("input_text")) + .filter_map(|span| span.get("text").and_then(Value::as_str).map(str::to_owned)) + .collect::>(); + assert_eq!( + user_texts, + vec![ + "tab one", + "initial turn", + "tab two", + "first steer", + "pty one", + "second steer", + ] + ); + let developer_texts = second_body["input"] + .as_array() + .into_iter() + .flatten() + .filter(|item| item.get("type").and_then(Value::as_str) == Some("message")) + .filter(|item| item.get("role").and_then(Value::as_str) == Some("developer")) + .flat_map(|item| { + item.get("content") + .and_then(Value::as_array) + .into_iter() + .flatten() + }) + .filter(|span| span.get("type").and_then(Value::as_str) == Some("input_text")) + .filter_map(|span| span.get("text").and_then(Value::as_str).map(str::to_owned)) + .filter(|text| text.starts_with("")) + .collect::>(); + assert_eq!( + developer_texts, + vec![ + "run one", + "run two", + ] + ); + + server.shutdown().await; + + Ok(()) +} + #[tokio::test(flavor = "multi_thread", worker_threads = 2)] async fn additional_context_values_are_truncated_before_model_input() -> Result<()> { skip_if_no_network!(Ok(())); @@ -344,21 +631,37 @@ async fn additional_context_values_are_truncated_before_model_input() -> Result< format!("{long_automation_value}"); test.codex - .submit(user_turn( - "summarize context", - BTreeMap::from([ + .submit(Op::UserInput { + environments: None, + items: vec![UserInput::Text { + text: "summarize context".to_string(), + text_elements: Vec::new(), + }], + final_output_json_schema: None, + responsesapi_client_metadata: None, + additional_context: BTreeMap::from([ ( "automation_info".to_string(), - trusted_context(&long_automation_value), + AdditionalContextEntry { + value: long_automation_value.clone(), + is_untrusted: false, + }, ), ( "browser_info".to_string(), - untrusted_context(&long_browser_value), + AdditionalContextEntry { + value: long_browser_value.clone(), + is_untrusted: true, + }, ), ]), - )) + thread_settings: Default::default(), + }) .await?; - wait_for_turn_complete(&test.codex).await; + wait_for_event_match(&test.codex, |event| { + matches!(event, EventMsg::TurnComplete(_)).then_some(()) + }) + .await; let request = request.single_request(); let developer_texts = request From 2f47af92c3e5bc97338029c7cd3ca93fb1d949e1 Mon Sep 17 00:00:00 2001 From: pakrym-oai Date: Fri, 22 May 2026 17:55:14 -0700 Subject: [PATCH 11/17] Use streaming request text helper --- codex-rs/core/tests/common/streaming_sse.rs | 18 ++++++++++ .../core/tests/suite/additional_context.rs | 36 +++---------------- 2 files changed, 22 insertions(+), 32 deletions(-) diff --git a/codex-rs/core/tests/common/streaming_sse.rs b/codex-rs/core/tests/common/streaming_sse.rs index 95fff73b9b9..93f651c9b9a 100644 --- a/codex-rs/core/tests/common/streaming_sse.rs +++ b/codex-rs/core/tests/common/streaming_sse.rs @@ -3,6 +3,7 @@ use std::sync::Arc; use std::time::SystemTime; use std::time::UNIX_EPOCH; +use serde_json::Value; use tokio::io::AsyncReadExt; use tokio::io::AsyncWriteExt; use tokio::net::TcpListener; @@ -50,6 +51,23 @@ impl StreamingSseServer { } } +/// Returns all `input_text` spans from a captured `/responses` request body for the provided role. +pub fn message_input_texts(body: &[u8], role: &str) -> Vec { + let body: Value = serde_json::from_slice(body) + .unwrap_or_else(|error| panic!("parse streaming SSE request body: {error}")); + body.get("input") + .and_then(Value::as_array) + .into_iter() + .flatten() + .filter(|item| item.get("type").and_then(Value::as_str) == Some("message")) + .filter(|item| item.get("role").and_then(Value::as_str) == Some(role)) + .filter_map(|item| item.get("content").and_then(Value::as_array)) + .flatten() + .filter(|span| span.get("type").and_then(Value::as_str) == Some("input_text")) + .filter_map(|span| span.get("text").and_then(Value::as_str).map(str::to_owned)) + .collect() +} + /// Starts a lightweight HTTP server that supports: /// - GET /v1/models -> empty models response /// - POST /v1/responses -> SSE stream gated per-chunk, served in order diff --git a/codex-rs/core/tests/suite/additional_context.rs b/codex-rs/core/tests/suite/additional_context.rs index d65a2847a17..3b72c65697c 100644 --- a/codex-rs/core/tests/suite/additional_context.rs +++ b/codex-rs/core/tests/suite/additional_context.rs @@ -15,11 +15,11 @@ 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::streaming_sse::StreamingSseChunk; +use core_test_support::streaming_sse::message_input_texts; use core_test_support::streaming_sse::start_streaming_sse_server; use core_test_support::test_codex::test_codex; use core_test_support::wait_for_event_match; use pretty_assertions::assert_eq; -use serde_json::Value; use std::collections::BTreeMap; use tokio::sync::oneshot; @@ -551,24 +551,8 @@ async fn additional_context_multiple_steers_dedupe_against_current_values() -> R let requests = server.requests().await; assert_eq!(requests.len(), 2); - let second_body = serde_json::from_slice::(&requests[1])?; - let user_texts = second_body["input"] - .as_array() - .into_iter() - .flatten() - .filter(|item| item.get("type").and_then(Value::as_str) == Some("message")) - .filter(|item| item.get("role").and_then(Value::as_str) == Some("user")) - .flat_map(|item| { - item.get("content") - .and_then(Value::as_array) - .into_iter() - .flatten() - }) - .filter(|span| span.get("type").and_then(Value::as_str) == Some("input_text")) - .filter_map(|span| span.get("text").and_then(Value::as_str).map(str::to_owned)) - .collect::>(); assert_eq!( - user_texts, + message_input_texts(&requests[1], "user"), vec![ "tab one", "initial turn", @@ -578,24 +562,12 @@ async fn additional_context_multiple_steers_dedupe_against_current_values() -> R "second steer", ] ); - let developer_texts = second_body["input"] - .as_array() + let developer_context_texts = message_input_texts(&requests[1], "developer") .into_iter() - .flatten() - .filter(|item| item.get("type").and_then(Value::as_str) == Some("message")) - .filter(|item| item.get("role").and_then(Value::as_str) == Some("developer")) - .flat_map(|item| { - item.get("content") - .and_then(Value::as_array) - .into_iter() - .flatten() - }) - .filter(|span| span.get("type").and_then(Value::as_str) == Some("input_text")) - .filter_map(|span| span.get("text").and_then(Value::as_str).map(str::to_owned)) .filter(|text| text.starts_with("")) .collect::>(); assert_eq!( - developer_texts, + developer_context_texts, vec![ "run one", "run two", From 56b20582385413b4be242a645b2ac225ac763234 Mon Sep 17 00:00:00 2001 From: pakrym-oai Date: Fri, 22 May 2026 17:57:13 -0700 Subject: [PATCH 12/17] Use non-streaming additional context steer test --- codex-rs/core/tests/common/streaming_sse.rs | 18 ------ .../core/tests/suite/additional_context.rs | 59 ++++++++++--------- 2 files changed, 30 insertions(+), 47 deletions(-) diff --git a/codex-rs/core/tests/common/streaming_sse.rs b/codex-rs/core/tests/common/streaming_sse.rs index 93f651c9b9a..95fff73b9b9 100644 --- a/codex-rs/core/tests/common/streaming_sse.rs +++ b/codex-rs/core/tests/common/streaming_sse.rs @@ -3,7 +3,6 @@ use std::sync::Arc; use std::time::SystemTime; use std::time::UNIX_EPOCH; -use serde_json::Value; use tokio::io::AsyncReadExt; use tokio::io::AsyncWriteExt; use tokio::net::TcpListener; @@ -51,23 +50,6 @@ impl StreamingSseServer { } } -/// Returns all `input_text` spans from a captured `/responses` request body for the provided role. -pub fn message_input_texts(body: &[u8], role: &str) -> Vec { - let body: Value = serde_json::from_slice(body) - .unwrap_or_else(|error| panic!("parse streaming SSE request body: {error}")); - body.get("input") - .and_then(Value::as_array) - .into_iter() - .flatten() - .filter(|item| item.get("type").and_then(Value::as_str) == Some("message")) - .filter(|item| item.get("role").and_then(Value::as_str) == Some(role)) - .filter_map(|item| item.get("content").and_then(Value::as_array)) - .flatten() - .filter(|span| span.get("type").and_then(Value::as_str) == Some("input_text")) - .filter_map(|span| span.get("text").and_then(Value::as_str).map(str::to_owned)) - .collect() -} - /// Starts a lightweight HTTP server that supports: /// - GET /v1/models -> empty models response /// - POST /v1/responses -> SSE stream gated per-chunk, served in order diff --git a/codex-rs/core/tests/suite/additional_context.rs b/codex-rs/core/tests/suite/additional_context.rs index 3b72c65697c..053db2c61e6 100644 --- a/codex-rs/core/tests/suite/additional_context.rs +++ b/codex-rs/core/tests/suite/additional_context.rs @@ -10,18 +10,17 @@ use core_test_support::context_snapshot::ContextSnapshotOptions; use core_test_support::context_snapshot::ContextSnapshotRenderMode; use core_test_support::responses::ev_completed; use core_test_support::responses::ev_response_created; +use core_test_support::responses::mount_response_sequence; use core_test_support::responses::mount_sse_once; use core_test_support::responses::sse; +use core_test_support::responses::sse_response; use core_test_support::responses::start_mock_server; use core_test_support::skip_if_no_network; -use core_test_support::streaming_sse::StreamingSseChunk; -use core_test_support::streaming_sse::message_input_texts; -use core_test_support::streaming_sse::start_streaming_sse_server; use core_test_support::test_codex::test_codex; use core_test_support::wait_for_event_match; use pretty_assertions::assert_eq; use std::collections::BTreeMap; -use tokio::sync::oneshot; +use std::time::Duration; #[tokio::test(flavor = "multi_thread", worker_threads = 2)] async fn additional_context_is_model_visible_but_not_a_user_message_item() -> Result<()> { @@ -438,26 +437,25 @@ async fn additional_context_removes_one_value_while_adding_another() -> Result<( async fn additional_context_multiple_steers_dedupe_against_current_values() -> Result<()> { skip_if_no_network!(Ok(())); - let (first_response_done_tx, first_response_done_rx) = oneshot::channel(); - let first_chunks = vec![ - StreamingSseChunk { - gate: None, - body: sse(vec![ev_response_created("resp-1")]), - }, - StreamingSseChunk { - gate: Some(first_response_done_rx), - body: sse(vec![ev_completed("resp-1")]), - }, - ]; - let second_chunks = vec![StreamingSseChunk { - gate: None, - body: sse(vec![ev_response_created("resp-2"), ev_completed("resp-2")]), - }]; - let (server, _completions) = - start_streaming_sse_server(vec![first_chunks, second_chunks]).await; + let server = start_mock_server().await; + let responses = mount_response_sequence( + &server, + vec![ + sse_response(sse(vec![ + ev_response_created("resp-1"), + ev_completed("resp-1"), + ])) + .set_delay(Duration::from_secs(1)), + sse_response(sse(vec![ + ev_response_created("resp-2"), + ev_completed("resp-2"), + ])), + ], + ) + .await; let test = test_codex() .with_config(|config| config.include_environment_context = false) - .build_with_streaming_server(&server) + .build(&server) .await?; test.codex @@ -479,7 +477,12 @@ async fn additional_context_multiple_steers_dedupe_against_current_values() -> R thread_settings: Default::default(), }) .await?; - server.wait_for_request_count(1).await; + tokio::time::timeout(Duration::from_secs(5), async { + while responses.requests().len() < 1 { + tokio::time::sleep(Duration::from_millis(10)).await; + } + }) + .await?; test.codex .steer_input( @@ -543,16 +546,15 @@ async fn additional_context_multiple_steers_dedupe_against_current_values() -> R .await .map_err(|err| anyhow::anyhow!("steer input: {err:?}"))?; - let _ = first_response_done_tx.send(()); wait_for_event_match(&test.codex, |event| { matches!(event, EventMsg::TurnComplete(_)).then_some(()) }) .await; - let requests = server.requests().await; + let requests = responses.requests(); assert_eq!(requests.len(), 2); assert_eq!( - message_input_texts(&requests[1], "user"), + requests[1].message_input_texts("user"), vec![ "tab one", "initial turn", @@ -562,7 +564,8 @@ async fn additional_context_multiple_steers_dedupe_against_current_values() -> R "second steer", ] ); - let developer_context_texts = message_input_texts(&requests[1], "developer") + let developer_context_texts = requests[1] + .message_input_texts("developer") .into_iter() .filter(|text| text.starts_with("")) .collect::>(); @@ -574,8 +577,6 @@ async fn additional_context_multiple_steers_dedupe_against_current_values() -> R ] ); - server.shutdown().await; - Ok(()) } From f15d6c393858be3e0b7b49530be95916756caa35 Mon Sep 17 00:00:00 2001 From: pakrym-oai Date: Fri, 22 May 2026 17:58:36 -0700 Subject: [PATCH 13/17] Drop multiple steer additional context test --- .../core/tests/suite/additional_context.rs | 150 ------------------ 1 file changed, 150 deletions(-) diff --git a/codex-rs/core/tests/suite/additional_context.rs b/codex-rs/core/tests/suite/additional_context.rs index 053db2c61e6..747d2707b62 100644 --- a/codex-rs/core/tests/suite/additional_context.rs +++ b/codex-rs/core/tests/suite/additional_context.rs @@ -10,17 +10,14 @@ use core_test_support::context_snapshot::ContextSnapshotOptions; use core_test_support::context_snapshot::ContextSnapshotRenderMode; use core_test_support::responses::ev_completed; use core_test_support::responses::ev_response_created; -use core_test_support::responses::mount_response_sequence; use core_test_support::responses::mount_sse_once; use core_test_support::responses::sse; -use core_test_support::responses::sse_response; 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::wait_for_event_match; use pretty_assertions::assert_eq; use std::collections::BTreeMap; -use std::time::Duration; #[tokio::test(flavor = "multi_thread", worker_threads = 2)] async fn additional_context_is_model_visible_but_not_a_user_message_item() -> Result<()> { @@ -433,153 +430,6 @@ async fn additional_context_removes_one_value_while_adding_another() -> Result<( Ok(()) } -#[tokio::test(flavor = "multi_thread", worker_threads = 2)] -async fn additional_context_multiple_steers_dedupe_against_current_values() -> Result<()> { - skip_if_no_network!(Ok(())); - - let server = start_mock_server().await; - let responses = mount_response_sequence( - &server, - vec![ - sse_response(sse(vec![ - ev_response_created("resp-1"), - ev_completed("resp-1"), - ])) - .set_delay(Duration::from_secs(1)), - sse_response(sse(vec![ - ev_response_created("resp-2"), - ev_completed("resp-2"), - ])), - ], - ) - .await; - let test = test_codex() - .with_config(|config| config.include_environment_context = false) - .build(&server) - .await?; - - test.codex - .submit(Op::UserInput { - environments: None, - items: vec![UserInput::Text { - text: "initial turn".to_string(), - text_elements: Vec::new(), - }], - final_output_json_schema: None, - responsesapi_client_metadata: None, - additional_context: BTreeMap::from([( - "browser_info".to_string(), - AdditionalContextEntry { - value: "tab one".to_string(), - is_untrusted: true, - }, - )]), - thread_settings: Default::default(), - }) - .await?; - tokio::time::timeout(Duration::from_secs(5), async { - while responses.requests().len() < 1 { - tokio::time::sleep(Duration::from_millis(10)).await; - } - }) - .await?; - - test.codex - .steer_input( - vec![UserInput::Text { - text: "first steer".to_string(), - text_elements: Vec::new(), - }], - BTreeMap::from([ - ( - "automation_info".to_string(), - AdditionalContextEntry { - value: "run one".to_string(), - is_untrusted: false, - }, - ), - ( - "browser_info".to_string(), - AdditionalContextEntry { - value: "tab two".to_string(), - is_untrusted: true, - }, - ), - ]), - None, - None, - ) - .await - .map_err(|err| anyhow::anyhow!("steer input: {err:?}"))?; - test.codex - .steer_input( - vec![UserInput::Text { - text: "second steer".to_string(), - text_elements: Vec::new(), - }], - BTreeMap::from([ - ( - "automation_info".to_string(), - AdditionalContextEntry { - value: "run two".to_string(), - is_untrusted: false, - }, - ), - ( - "browser_info".to_string(), - AdditionalContextEntry { - value: "tab two".to_string(), - is_untrusted: true, - }, - ), - ( - "terminal_info".to_string(), - AdditionalContextEntry { - value: "pty one".to_string(), - is_untrusted: true, - }, - ), - ]), - None, - None, - ) - .await - .map_err(|err| anyhow::anyhow!("steer input: {err:?}"))?; - - wait_for_event_match(&test.codex, |event| { - matches!(event, EventMsg::TurnComplete(_)).then_some(()) - }) - .await; - - let requests = responses.requests(); - assert_eq!(requests.len(), 2); - assert_eq!( - requests[1].message_input_texts("user"), - vec![ - "tab one", - "initial turn", - "tab two", - "first steer", - "pty one", - "second steer", - ] - ); - let developer_context_texts = requests[1] - .message_input_texts("developer") - .into_iter() - .filter(|text| text.starts_with("")) - .collect::>(); - assert_eq!( - developer_context_texts, - vec![ - "run one", - "run two", - ] - ); - - Ok(()) -} - #[tokio::test(flavor = "multi_thread", worker_threads = 2)] async fn additional_context_values_are_truncated_before_model_input() -> Result<()> { skip_if_no_network!(Ok(())); From 14ebcf61d81dfa335acf0e45c9e2d20e3185a0fc Mon Sep 17 00:00:00 2001 From: pakrym-oai Date: Fri, 22 May 2026 18:14:26 -0700 Subject: [PATCH 14/17] Use additional context kind --- .../schema/json/ClientRequest.json | 22 +++++++++++++ .../codex_app_server_protocol.schemas.json | 22 +++++++++++++ .../codex_app_server_protocol.v2.schemas.json | 22 +++++++++++++ .../schema/json/v2/TurnStartParams.json | 22 +++++++++++++ .../schema/json/v2/TurnSteerParams.json | 22 +++++++++++++ .../typescript/v2/AdditionalContextEntry.ts | 6 ++++ .../typescript/v2/AdditionalContextKind.ts | 5 +++ .../schema/typescript/v2/index.ts | 2 ++ .../src/protocol/v2/turn.rs | 14 ++++++-- codex-rs/app-server/src/request_processors.rs | 1 + .../src/request_processors/turn_processor.rs | 8 ++++- .../app-server/tests/suite/v2/turn_start.rs | 3 +- .../app-server/tests/suite/v2/turn_steer.rs | 3 +- codex-rs/core/src/state/additional_context.rs | 8 +++-- .../core/tests/suite/additional_context.rs | 33 ++++++++++--------- codex-rs/protocol/src/protocol.rs | 13 ++++++-- 16 files changed, 178 insertions(+), 28 deletions(-) create mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/AdditionalContextEntry.ts create mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/AdditionalContextKind.ts diff --git a/codex-rs/app-server-protocol/schema/json/ClientRequest.json b/codex-rs/app-server-protocol/schema/json/ClientRequest.json index 7595527c212..fba8c1ac749 100644 --- a/codex-rs/app-server-protocol/schema/json/ClientRequest.json +++ b/codex-rs/app-server-protocol/schema/json/ClientRequest.json @@ -12,6 +12,28 @@ ], "type": "string" }, + "AdditionalContextEntry": { + "properties": { + "kind": { + "$ref": "#/definitions/AdditionalContextKind" + }, + "value": { + "type": "string" + } + }, + "required": [ + "kind", + "value" + ], + "type": "object" + }, + "AdditionalContextKind": { + "enum": [ + "untrusted", + "application" + ], + "type": "string" + }, "ApprovalsReviewer": { "description": "Configures who approval requests are routed to for review. Examples include sandbox escapes, blocked network access, MCP approval prompts, and ARC escalations. Defaults to `user`. `auto_review` uses a carefully prompted subagent to gather relevant context and apply a risk-based decision framework before approving or denying the request. The legacy value `guardian_subagent` is accepted for compatibility.", "enum": [ diff --git a/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.schemas.json b/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.schemas.json index a7384050362..e3cc91f7707 100644 --- a/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.schemas.json +++ b/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.schemas.json @@ -5768,6 +5768,28 @@ ], "type": "string" }, + "AdditionalContextEntry": { + "properties": { + "kind": { + "$ref": "#/definitions/v2/AdditionalContextKind" + }, + "value": { + "type": "string" + } + }, + "required": [ + "kind", + "value" + ], + "type": "object" + }, + "AdditionalContextKind": { + "enum": [ + "untrusted", + "application" + ], + "type": "string" + }, "AdditionalFileSystemPermissions": { "properties": { "entries": { diff --git a/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.v2.schemas.json b/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.v2.schemas.json index ac565328f9d..c2511655cce 100644 --- a/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.v2.schemas.json +++ b/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.v2.schemas.json @@ -164,6 +164,28 @@ ], "type": "string" }, + "AdditionalContextEntry": { + "properties": { + "kind": { + "$ref": "#/definitions/AdditionalContextKind" + }, + "value": { + "type": "string" + } + }, + "required": [ + "kind", + "value" + ], + "type": "object" + }, + "AdditionalContextKind": { + "enum": [ + "untrusted", + "application" + ], + "type": "string" + }, "AdditionalFileSystemPermissions": { "properties": { "entries": { diff --git a/codex-rs/app-server-protocol/schema/json/v2/TurnStartParams.json b/codex-rs/app-server-protocol/schema/json/v2/TurnStartParams.json index ecea8f19979..ffc130dcc9c 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/TurnStartParams.json +++ b/codex-rs/app-server-protocol/schema/json/v2/TurnStartParams.json @@ -5,6 +5,28 @@ "description": "A path that is guaranteed to be absolute and normalized (though it is not guaranteed to be canonicalized or exist on the filesystem).\n\nIMPORTANT: When deserializing an `AbsolutePathBuf`, a base path must be set using [AbsolutePathBufGuard::new]. If no base path is set, the deserialization will fail unless the path being deserialized is already absolute.", "type": "string" }, + "AdditionalContextEntry": { + "properties": { + "kind": { + "$ref": "#/definitions/AdditionalContextKind" + }, + "value": { + "type": "string" + } + }, + "required": [ + "kind", + "value" + ], + "type": "object" + }, + "AdditionalContextKind": { + "enum": [ + "untrusted", + "application" + ], + "type": "string" + }, "ApprovalsReviewer": { "description": "Configures who approval requests are routed to for review. Examples include sandbox escapes, blocked network access, MCP approval prompts, and ARC escalations. Defaults to `user`. `auto_review` uses a carefully prompted subagent to gather relevant context and apply a risk-based decision framework before approving or denying the request. The legacy value `guardian_subagent` is accepted for compatibility.", "enum": [ diff --git a/codex-rs/app-server-protocol/schema/json/v2/TurnSteerParams.json b/codex-rs/app-server-protocol/schema/json/v2/TurnSteerParams.json index 1b7cfbf4008..ef05b276730 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/TurnSteerParams.json +++ b/codex-rs/app-server-protocol/schema/json/v2/TurnSteerParams.json @@ -1,6 +1,28 @@ { "$schema": "http://json-schema.org/draft-07/schema#", "definitions": { + "AdditionalContextEntry": { + "properties": { + "kind": { + "$ref": "#/definitions/AdditionalContextKind" + }, + "value": { + "type": "string" + } + }, + "required": [ + "kind", + "value" + ], + "type": "object" + }, + "AdditionalContextKind": { + "enum": [ + "untrusted", + "application" + ], + "type": "string" + }, "ByteRange": { "properties": { "end": { diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/AdditionalContextEntry.ts b/codex-rs/app-server-protocol/schema/typescript/v2/AdditionalContextEntry.ts new file mode 100644 index 00000000000..8d959269d42 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/typescript/v2/AdditionalContextEntry.ts @@ -0,0 +1,6 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. +import type { AdditionalContextKind } from "./AdditionalContextKind"; + +export type AdditionalContextEntry = { value: string, kind: AdditionalContextKind, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/AdditionalContextKind.ts b/codex-rs/app-server-protocol/schema/typescript/v2/AdditionalContextKind.ts new file mode 100644 index 00000000000..cd60bd7a8dc --- /dev/null +++ b/codex-rs/app-server-protocol/schema/typescript/v2/AdditionalContextKind.ts @@ -0,0 +1,5 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +export type AdditionalContextKind = "untrusted" | "application"; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/index.ts b/codex-rs/app-server-protocol/schema/typescript/v2/index.ts index 5b4f2ed2831..2a4220cb605 100644 --- a/codex-rs/app-server-protocol/schema/typescript/v2/index.ts +++ b/codex-rs/app-server-protocol/schema/typescript/v2/index.ts @@ -7,6 +7,8 @@ export type { AccountUpdatedNotification } from "./AccountUpdatedNotification"; export type { ActivePermissionProfile } from "./ActivePermissionProfile"; export type { AddCreditsNudgeCreditType } from "./AddCreditsNudgeCreditType"; export type { AddCreditsNudgeEmailStatus } from "./AddCreditsNudgeEmailStatus"; +export type { AdditionalContextEntry } from "./AdditionalContextEntry"; +export type { AdditionalContextKind } from "./AdditionalContextKind"; export type { AdditionalFileSystemPermissions } from "./AdditionalFileSystemPermissions"; export type { AdditionalNetworkPermissions } from "./AdditionalNetworkPermissions"; export type { AdditionalPermissionProfile } from "./AdditionalPermissionProfile"; diff --git a/codex-rs/app-server-protocol/src/protocol/v2/turn.rs b/codex-rs/app-server-protocol/src/protocol/v2/turn.rs index 7b6796cb707..ab5e59a4644 100644 --- a/codex-rs/app-server-protocol/src/protocol/v2/turn.rs +++ b/codex-rs/app-server-protocol/src/protocol/v2/turn.rs @@ -41,13 +41,21 @@ pub struct TurnEnvironmentParams { pub cwd: AbsolutePathBuf, } -#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, JsonSchema, TS)] +#[derive(Serialize, Deserialize, Debug, Clone, Copy, PartialEq, Eq, JsonSchema, TS)] +#[serde(rename_all = "lowercase")] +#[ts(rename_all = "lowercase")] +#[ts(export_to = "v2/")] +pub enum AdditionalContextKind { + Untrusted, + Application, +} + +#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, JsonSchema, TS)] #[serde(rename_all = "camelCase")] #[ts(export_to = "v2/")] pub struct AdditionalContextEntry { pub value: String, - #[serde(default, skip_serializing_if = "std::ops::Not::not")] - pub is_untrusted: bool, + pub kind: AdditionalContextKind, } #[derive( diff --git a/codex-rs/app-server/src/request_processors.rs b/codex-rs/app-server/src/request_processors.rs index 978f1adc328..66ab8e3a1da 100644 --- a/codex-rs/app-server/src/request_processors.rs +++ b/codex-rs/app-server/src/request_processors.rs @@ -26,6 +26,7 @@ use codex_app_server_protocol::AccountUpdatedNotification; use codex_app_server_protocol::AddCreditsNudgeCreditType; use codex_app_server_protocol::AddCreditsNudgeEmailStatus; use codex_app_server_protocol::AdditionalContextEntry; +use codex_app_server_protocol::AdditionalContextKind; use codex_app_server_protocol::AppInfo; use codex_app_server_protocol::AppListUpdatedNotification; use codex_app_server_protocol::AppSummary; diff --git a/codex-rs/app-server/src/request_processors/turn_processor.rs b/codex-rs/app-server/src/request_processors/turn_processor.rs index 4be6f1596df..975ff22d071 100644 --- a/codex-rs/app-server/src/request_processors/turn_processor.rs +++ b/codex-rs/app-server/src/request_processors/turn_processor.rs @@ -1,5 +1,6 @@ use super::*; use codex_protocol::protocol::AdditionalContextEntry as CoreAdditionalContextEntry; +use codex_protocol::protocol::AdditionalContextKind as CoreAdditionalContextKind; #[derive(Clone)] pub(crate) struct TurnRequestProcessor { @@ -42,7 +43,12 @@ fn map_additional_context( key, CoreAdditionalContextEntry { value: entry.value, - is_untrusted: entry.is_untrusted, + kind: match entry.kind { + AdditionalContextKind::Untrusted => CoreAdditionalContextKind::Untrusted, + AdditionalContextKind::Application => { + CoreAdditionalContextKind::Application + } + }, }, ) }) diff --git a/codex-rs/app-server/tests/suite/v2/turn_start.rs b/codex-rs/app-server/tests/suite/v2/turn_start.rs index 8fdd1ba7e09..88596b46399 100644 --- a/codex-rs/app-server/tests/suite/v2/turn_start.rs +++ b/codex-rs/app-server/tests/suite/v2/turn_start.rs @@ -17,6 +17,7 @@ use app_test_support::write_models_cache; use codex_app_server::INPUT_TOO_LARGE_ERROR_CODE; use codex_app_server::INVALID_PARAMS_ERROR_CODE; use codex_app_server_protocol::AdditionalContextEntry; +use codex_app_server_protocol::AdditionalContextKind; use codex_app_server_protocol::ByteRange; use codex_app_server_protocol::ClientInfo; use codex_app_server_protocol::CollabAgentStatus; @@ -342,7 +343,7 @@ async fn turn_start_additional_context_flows_to_model_input() -> Result<()> { "custom_source".to_string(), AdditionalContextEntry { value: "source value".to_string(), - is_untrusted: true, + kind: AdditionalContextKind::Untrusted, }, )])), ..Default::default() diff --git a/codex-rs/app-server/tests/suite/v2/turn_steer.rs b/codex-rs/app-server/tests/suite/v2/turn_steer.rs index cdbbd44f1ee..66ac33972b1 100644 --- a/codex-rs/app-server/tests/suite/v2/turn_steer.rs +++ b/codex-rs/app-server/tests/suite/v2/turn_steer.rs @@ -11,6 +11,7 @@ use app_test_support::write_mock_responses_config_toml_with_chatgpt_base_url; use codex_app_server::INPUT_TOO_LARGE_ERROR_CODE; use codex_app_server::INVALID_PARAMS_ERROR_CODE; use codex_app_server_protocol::AdditionalContextEntry; +use codex_app_server_protocol::AdditionalContextKind; use codex_app_server_protocol::JSONRPCError; use codex_app_server_protocol::JSONRPCNotification; use codex_app_server_protocol::JSONRPCResponse; @@ -388,7 +389,7 @@ async fn turn_steer_rejects_context_only_input_without_merging_context() -> Resu "browser_info".to_string(), AdditionalContextEntry { value: "tab one".to_string(), - is_untrusted: true, + kind: AdditionalContextKind::Untrusted, }, )])); let steer_req = mcp diff --git a/codex-rs/core/src/state/additional_context.rs b/codex-rs/core/src/state/additional_context.rs index e35b71ca71b..d98d862bb5b 100644 --- a/codex-rs/core/src/state/additional_context.rs +++ b/codex-rs/core/src/state/additional_context.rs @@ -4,6 +4,7 @@ use crate::context::AdditionalContextDeveloperFragment; use crate::context::AdditionalContextUserFragment; use codex_protocol::models::ResponseInputItem; use codex_protocol::protocol::AdditionalContextEntry; +use codex_protocol::protocol::AdditionalContextKind; #[derive(Debug, Clone, Default, PartialEq, Eq)] pub(crate) struct AdditionalContextStore { @@ -18,11 +19,12 @@ impl AdditionalContextStore { let fragments = values .iter() .filter(|(key, value)| self.values.get(*key) != Some(*value)) - .map(|(key, entry)| { - if entry.is_untrusted { + .map(|(key, entry)| match entry.kind { + AdditionalContextKind::Untrusted => { AdditionalContextUserFragment::new(key.clone(), entry.value.clone()) .into_input_item() - } else { + } + AdditionalContextKind::Application => { AdditionalContextDeveloperFragment::new(key.clone(), entry.value.clone()) .into_input_item() } diff --git a/codex-rs/core/tests/suite/additional_context.rs b/codex-rs/core/tests/suite/additional_context.rs index 747d2707b62..1dae93df5c8 100644 --- a/codex-rs/core/tests/suite/additional_context.rs +++ b/codex-rs/core/tests/suite/additional_context.rs @@ -1,6 +1,7 @@ use anyhow::Result; use codex_protocol::items::TurnItem; use codex_protocol::protocol::AdditionalContextEntry; +use codex_protocol::protocol::AdditionalContextKind; use codex_protocol::protocol::EventMsg; use codex_protocol::protocol::ItemCompletedEvent; use codex_protocol::protocol::Op; @@ -48,14 +49,14 @@ async fn additional_context_is_model_visible_but_not_a_user_message_item() -> Re "browser_info".to_string(), AdditionalContextEntry { value: "tab one".to_string(), - is_untrusted: true, + kind: AdditionalContextKind::Untrusted, }, ), ( "automation_info".to_string(), AdditionalContextEntry { value: "run one".to_string(), - is_untrusted: false, + kind: AdditionalContextKind::Application, }, ), ]), @@ -143,14 +144,14 @@ async fn additional_context_trust_controls_message_role() -> Result<()> { "browser_info".to_string(), AdditionalContextEntry { value: "tab one".to_string(), - is_untrusted: true, + kind: AdditionalContextKind::Untrusted, }, ), ( "automation_info".to_string(), AdditionalContextEntry { value: "run one".to_string(), - is_untrusted: false, + kind: AdditionalContextKind::Application, }, ), ]), @@ -206,7 +207,7 @@ async fn additional_context_is_deduplicated_between_turns_while_retained() -> Re "browser_info".to_string(), AdditionalContextEntry { value: "same tab".to_string(), - is_untrusted: true, + kind: AdditionalContextKind::Untrusted, }, )]); @@ -304,14 +305,14 @@ async fn additional_context_removes_one_value_while_adding_another() -> Result<( "automation_info".to_string(), AdditionalContextEntry { value: "run one".to_string(), - is_untrusted: true, + kind: AdditionalContextKind::Untrusted, }, ), ( "browser_info".to_string(), AdditionalContextEntry { value: "tab one".to_string(), - is_untrusted: true, + kind: AdditionalContextKind::Untrusted, }, ), ]), @@ -337,14 +338,14 @@ async fn additional_context_removes_one_value_while_adding_another() -> Result<( "automation_info".to_string(), AdditionalContextEntry { value: "run one".to_string(), - is_untrusted: true, + kind: AdditionalContextKind::Untrusted, }, ), ( "terminal_info".to_string(), AdditionalContextEntry { value: "pty one".to_string(), - is_untrusted: true, + kind: AdditionalContextKind::Untrusted, }, ), ]), @@ -370,21 +371,21 @@ async fn additional_context_removes_one_value_while_adding_another() -> Result<( "automation_info".to_string(), AdditionalContextEntry { value: "run one".to_string(), - is_untrusted: true, + kind: AdditionalContextKind::Untrusted, }, ), ( "browser_info".to_string(), AdditionalContextEntry { value: "tab one".to_string(), - is_untrusted: true, + kind: AdditionalContextKind::Untrusted, }, ), ( "terminal_info".to_string(), AdditionalContextEntry { value: "pty one".to_string(), - is_untrusted: true, + kind: AdditionalContextKind::Untrusted, }, ), ]), @@ -467,14 +468,14 @@ async fn additional_context_values_are_truncated_before_model_input() -> Result< "automation_info".to_string(), AdditionalContextEntry { value: long_automation_value.clone(), - is_untrusted: false, + kind: AdditionalContextKind::Application, }, ), ( "browser_info".to_string(), AdditionalContextEntry { value: long_browser_value.clone(), - is_untrusted: true, + kind: AdditionalContextKind::Untrusted, }, ), ]), @@ -493,7 +494,7 @@ async fn additional_context_values_are_truncated_before_model_input() -> Result< .filter(|text| text.starts_with("")) .collect::>(); let [automation_text] = developer_texts.as_slice() else { - panic!("expected trusted additional context, got {developer_texts:?}"); + panic!("expected application additional context, got {developer_texts:?}"); }; assert!(automation_text.starts_with(&format!( "automation-head-{}", @@ -504,7 +505,7 @@ async fn additional_context_values_are_truncated_before_model_input() -> Result< assert!(automation_text.len() < untruncated_automation_fragment.len()); assert!( automation_text.len() <= MAX_EXPECTED_EXTERNAL_CONTEXT_TEXT_BYTES, - "trusted additional context was not capped before model input: {} bytes", + "application additional context was not capped before model input: {} bytes", automation_text.len() ); diff --git a/codex-rs/protocol/src/protocol.rs b/codex-rs/protocol/src/protocol.rs index dde39422b9d..efbc44c9cec 100644 --- a/codex-rs/protocol/src/protocol.rs +++ b/codex-rs/protocol/src/protocol.rs @@ -472,12 +472,19 @@ pub struct ThreadSettingsOverrides { pub personality: Option, } +/// Source classification for client-supplied context. +#[derive(Debug, Clone, Copy, Deserialize, Serialize, PartialEq, Eq, JsonSchema)] +#[serde(rename_all = "snake_case")] +pub enum AdditionalContextKind { + Untrusted, + Application, +} + /// Client-supplied context keyed by an opaque source identifier. -#[derive(Debug, Clone, Default, Deserialize, Serialize, PartialEq, Eq, JsonSchema)] +#[derive(Debug, Clone, Deserialize, Serialize, PartialEq, Eq, JsonSchema)] pub struct AdditionalContextEntry { pub value: String, - #[serde(default, skip_serializing_if = "std::ops::Not::not")] - pub is_untrusted: bool, + pub kind: AdditionalContextKind, } /// Submission operation From dadbce52a0407075de2cdfe55acc5bbec246c9c2 Mon Sep 17 00:00:00 2001 From: pakrym-oai Date: Fri, 22 May 2026 18:19:04 -0700 Subject: [PATCH 15/17] Tighten external context marker matching --- codex-rs/core/src/context/fragments.rs | 13 +++++ .../core/tests/suite/additional_context.rs | 50 +++++++++++++++++++ 2 files changed, 63 insertions(+) diff --git a/codex-rs/core/src/context/fragments.rs b/codex-rs/core/src/context/fragments.rs index b627d46834c..f7f1e083bd5 100644 --- a/codex-rs/core/src/context/fragments.rs +++ b/codex-rs/core/src/context/fragments.rs @@ -39,6 +39,19 @@ impl ContextualUserFragment for AdditionalContextUserFragment { ) } + fn matches_text(text: &str) -> bool { + let trimmed = text.trim(); + let Some(rest) = trimmed.strip_prefix(ADDITIONAL_CONTEXT_START_MARKER_PREFIX) else { + return false; + }; + let Some((key, value_and_close)) = rest.split_once(ADDITIONAL_CONTEXT_END_MARKER_SUFFIX) + else { + return false; + }; + + value_and_close.ends_with(&format!("")) + } + fn body(&self) -> String { additional_context_body(&self.key, &self.value) } diff --git a/codex-rs/core/tests/suite/additional_context.rs b/codex-rs/core/tests/suite/additional_context.rs index 1dae93df5c8..f9bfdb966b6 100644 --- a/codex-rs/core/tests/suite/additional_context.rs +++ b/codex-rs/core/tests/suite/additional_context.rs @@ -115,6 +115,56 @@ async fn additional_context_is_model_visible_but_not_a_user_message_item() -> Re Ok(()) } +#[tokio::test(flavor = "multi_thread", worker_threads = 2)] +async fn external_context_like_user_text_remains_a_user_message_item() -> Result<()> { + skip_if_no_network!(Ok(())); + + let server = start_mock_server().await; + let request = mount_sse_once( + &server, + sse(vec![ev_response_created("resp-1"), ev_completed("resp-1")]), + ) + .await; + let test = test_codex() + .with_config(|config| config.include_environment_context = false) + .build(&server) + .await?; + let user_input = UserInput::Text { + text: "".to_string(), + text_elements: Vec::new(), + }; + + test.codex + .submit(Op::UserInput { + environments: None, + items: vec![user_input.clone()], + final_output_json_schema: None, + responsesapi_client_metadata: None, + additional_context: BTreeMap::new(), + thread_settings: Default::default(), + }) + .await?; + + let user_item = wait_for_event_match(&test.codex, |event| match event { + EventMsg::ItemCompleted(ItemCompletedEvent { + item: TurnItem::UserMessage(item), + .. + }) => Some(item.clone()), + _ => None, + }) + .await; + assert_eq!(user_item.content, vec![user_input]); + wait_for_event_match(&test.codex, |event| { + matches!(event, EventMsg::TurnComplete(_)).then_some(()) + }) + .await; + + let request = request.single_request(); + assert_eq!(request.message_input_texts("user"), vec![""]); + + Ok(()) +} + #[tokio::test(flavor = "multi_thread", worker_threads = 2)] async fn additional_context_trust_controls_message_role() -> Result<()> { skip_if_no_network!(Ok(())); From d3d12c74ce6eba70da2298890b089239f4b3b043 Mon Sep 17 00:00:00 2001 From: pakrym-oai Date: Fri, 22 May 2026 18:42:39 -0700 Subject: [PATCH 16/17] Fill additional context in app server callers --- codex-rs/analytics/src/analytics_client_tests.rs | 1 + codex-rs/analytics/src/client_tests.rs | 1 + codex-rs/exec/src/lib.rs | 1 + codex-rs/tui/src/app_server_session.rs | 2 ++ 4 files changed, 5 insertions(+) diff --git a/codex-rs/analytics/src/analytics_client_tests.rs b/codex-rs/analytics/src/analytics_client_tests.rs index cabea808865..26daadf5f51 100644 --- a/codex-rs/analytics/src/analytics_client_tests.rs +++ b/codex-rs/analytics/src/analytics_client_tests.rs @@ -401,6 +401,7 @@ fn sample_turn_steer_request( }, ], responsesapi_client_metadata: None, + additional_context: None, }, } } diff --git a/codex-rs/analytics/src/client_tests.rs b/codex-rs/analytics/src/client_tests.rs index bfb224d8990..c6a928afa3f 100644 --- a/codex-rs/analytics/src/client_tests.rs +++ b/codex-rs/analytics/src/client_tests.rs @@ -103,6 +103,7 @@ fn sample_turn_steer_request() -> ClientRequest { expected_turn_id: "turn-1".to_string(), input: Vec::new(), responsesapi_client_metadata: None, + additional_context: None, }, } } diff --git a/codex-rs/exec/src/lib.rs b/codex-rs/exec/src/lib.rs index 9061227b6b9..2df97b5bd74 100644 --- a/codex-rs/exec/src/lib.rs +++ b/codex-rs/exec/src/lib.rs @@ -781,6 +781,7 @@ async fn run_exec_session(args: ExecRunArgs) -> anyhow::Result<()> { thread_id: primary_thread_id_for_span.clone(), input: items.into_iter().map(Into::into).collect(), responsesapi_client_metadata: None, + additional_context: None, environments: None, cwd: Some(default_cwd), runtime_workspace_roots: None, diff --git a/codex-rs/tui/src/app_server_session.rs b/codex-rs/tui/src/app_server_session.rs index 59d56ca56eb..52fcff134e4 100644 --- a/codex-rs/tui/src/app_server_session.rs +++ b/codex-rs/tui/src/app_server_session.rs @@ -663,6 +663,7 @@ impl AppServerSession { thread_id: thread_id.to_string(), input: items, responsesapi_client_metadata: None, + additional_context: None, environments: None, cwd: Some(cwd), runtime_workspace_roots: Some( @@ -726,6 +727,7 @@ impl AppServerSession { thread_id: thread_id.to_string(), input: items, responsesapi_client_metadata: None, + additional_context: None, expected_turn_id: turn_id, }, }) From a2c9e8cfcbd030164b32f1130440dac73397b3e9 Mon Sep 17 00:00:00 2001 From: pakrym-oai Date: Tue, 26 May 2026 11:48:03 -0700 Subject: [PATCH 17/17] Move response input conversion onto fragments --- codex-rs/core/src/context/fragment.rs | 14 +++++++++++++ codex-rs/core/src/context/fragments.rs | 20 ------------------- codex-rs/core/src/context/goal_context.rs | 13 ------------ codex-rs/core/src/goals.rs | 1 + codex-rs/core/src/state/additional_context.rs | 5 +++-- codex-rs/ext/goal/src/steering.rs | 1 + 6 files changed, 19 insertions(+), 35 deletions(-) diff --git a/codex-rs/core/src/context/fragment.rs b/codex-rs/core/src/context/fragment.rs index 4a9e284d126..5c500fe8efd 100644 --- a/codex-rs/core/src/context/fragment.rs +++ b/codex-rs/core/src/context/fragment.rs @@ -1,4 +1,5 @@ use codex_protocol::models::ContentItem; +use codex_protocol::models::ResponseInputItem; use codex_protocol::models::ResponseItem; use std::marker::PhantomData; @@ -81,6 +82,19 @@ pub trait ContextualUserFragment { phase: None, } } + + fn into_response_input_item(self) -> ResponseInputItem + where + Self: Sized, + { + ResponseInputItem::Message { + role: Self::role().to_string(), + content: vec![ContentItem::InputText { + text: self.render(), + }], + phase: None, + } + } } fn matches_marked_text(start_marker: &str, end_marker: &str, text: &str) -> bool { diff --git a/codex-rs/core/src/context/fragments.rs b/codex-rs/core/src/context/fragments.rs index f7f1e083bd5..e23f96f59f3 100644 --- a/codex-rs/core/src/context/fragments.rs +++ b/codex-rs/core/src/context/fragments.rs @@ -1,6 +1,4 @@ use super::ContextualUserFragment; -use codex_protocol::models::ContentItem; -use codex_protocol::models::ResponseInputItem; use codex_utils_string::truncate_middle_with_token_budget; const MAX_ADDITIONAL_CONTEXT_VALUE_TOKENS: usize = 1_000; @@ -17,10 +15,6 @@ impl AdditionalContextUserFragment { pub(crate) fn new(key: String, value: String) -> Self { Self { key, value } } - - pub(crate) fn into_input_item(self) -> ResponseInputItem { - additional_context_input_item(self) - } } impl ContextualUserFragment for AdditionalContextUserFragment { @@ -67,10 +61,6 @@ impl AdditionalContextDeveloperFragment { pub(crate) fn new(key: String, value: String) -> Self { Self { key, value } } - - pub(crate) fn into_input_item(self) -> ResponseInputItem { - additional_context_input_item(self) - } } impl ContextualUserFragment for AdditionalContextDeveloperFragment { @@ -91,16 +81,6 @@ impl ContextualUserFragment for AdditionalContextDeveloperFragment { } } -fn additional_context_input_item(fragment: T) -> ResponseInputItem { - ResponseInputItem::Message { - role: T::role().to_string(), - content: vec![ContentItem::InputText { - text: fragment.render(), - }], - phase: None, - } -} - fn additional_context_body(key: &str, value: &str) -> String { let value = truncate_middle_with_token_budget(value, MAX_ADDITIONAL_CONTEXT_VALUE_TOKENS).0; format!("{key}>{value} ResponseInputItem { - ResponseInputItem::Message { - role: ::role().to_string(), - content: vec![ContentItem::InputText { - text: self.render(), - }], - phase: None, - } - } } impl ContextualUserFragment for GoalContext { diff --git a/codex-rs/core/src/goals.rs b/codex-rs/core/src/goals.rs index 75b84093e70..6df681d4b01 100644 --- a/codex-rs/core/src/goals.rs +++ b/codex-rs/core/src/goals.rs @@ -5,6 +5,7 @@ //! events, and owns helper hooks used by goal lifecycle behavior. use crate::StateDbHandle; +use crate::context::ContextualUserFragment; use crate::context::GoalContext; use crate::session::TurnInput; use crate::session::session::Session; diff --git a/codex-rs/core/src/state/additional_context.rs b/codex-rs/core/src/state/additional_context.rs index d98d862bb5b..eb5727ac23c 100644 --- a/codex-rs/core/src/state/additional_context.rs +++ b/codex-rs/core/src/state/additional_context.rs @@ -2,6 +2,7 @@ use std::collections::BTreeMap; use crate::context::AdditionalContextDeveloperFragment; use crate::context::AdditionalContextUserFragment; +use crate::context::ContextualUserFragment; use codex_protocol::models::ResponseInputItem; use codex_protocol::protocol::AdditionalContextEntry; use codex_protocol::protocol::AdditionalContextKind; @@ -22,11 +23,11 @@ impl AdditionalContextStore { .map(|(key, entry)| match entry.kind { AdditionalContextKind::Untrusted => { AdditionalContextUserFragment::new(key.clone(), entry.value.clone()) - .into_input_item() + .into_response_input_item() } AdditionalContextKind::Application => { AdditionalContextDeveloperFragment::new(key.clone(), entry.value.clone()) - .into_input_item() + .into_response_input_item() } }) .collect(); diff --git a/codex-rs/ext/goal/src/steering.rs b/codex-rs/ext/goal/src/steering.rs index e08c47ae263..83f41ea538d 100644 --- a/codex-rs/ext/goal/src/steering.rs +++ b/codex-rs/ext/goal/src/steering.rs @@ -1,3 +1,4 @@ +use codex_core::context::ContextualUserFragment; use codex_core::context::GoalContext; use codex_protocol::models::ResponseInputItem; use codex_protocol::protocol::ThreadGoal;