diff --git a/codex-rs/Cargo.lock b/codex-rs/Cargo.lock index da0ec92bcc..d8744c4373 100644 --- a/codex-rs/Cargo.lock +++ b/codex-rs/Cargo.lock @@ -2977,9 +2977,7 @@ dependencies = [ "codex-config", "codex-core", "codex-exec-server", - "codex-features", "codex-login", - "codex-models-manager", "codex-protocol", "codex-shell-command", "codex-utils-absolute-path", diff --git a/codex-rs/app-server/README.md b/codex-rs/app-server/README.md index 12fe679e5d..a92e287427 100644 --- a/codex-rs/app-server/README.md +++ b/codex-rs/app-server/README.md @@ -194,7 +194,7 @@ Example with notification opt-out: - `modelProvider/capabilities/read` — read provider-level capabilities for the currently configured model provider. - `experimentalFeature/list` — list feature flags with stage metadata (`beta`, `underDevelopment`, `stable`, etc.), enabled/default-enabled state, and cursor pagination. For non-beta flags, `displayName`/`description`/`announcement` are `null`. - `experimentalFeature/enablement/set` — patch the in-memory process-wide runtime feature enablement for the currently supported feature keys (`apps`, `memories`, `plugins`, `remote_control`, `tool_search`, `tool_suggest`, `tool_call_mcp_elicitation`). For each feature, precedence is: cloud requirements > --enable > config.toml > experimentalFeature/enablement/set (new) > code default. -- `collaborationMode/list` — list available collaboration mode presets (experimental, no pagination). This response omits built-in developer instructions; clients should either pass `settings.developer_instructions: null` when setting a mode to use Codex's built-in instructions, or provide their own instructions explicitly. +- `collaborationMode/list` — list available collaboration mode presets (experimental, no pagination). Built-in presets do not select a model; the Plan preset selects medium reasoning effort. This response omits built-in developer instructions; clients should either pass `settings.developer_instructions: null` when setting a mode to use Codex's built-in instructions, or provide their own instructions explicitly. - `skills/list` — list skills for one or more `cwd` values (optional `forceReload`). - `hooks/list` — list discovered hooks for one or more `cwd` values. - `marketplace/add` — add a remote plugin marketplace from an HTTP(S) Git URL, SSH Git URL, or GitHub `owner/repo` shorthand, then persist it into the user marketplace config. Returns the installed root path plus whether the marketplace was already present. diff --git a/codex-rs/app-server/src/codex_message_processor.rs b/codex-rs/app-server/src/codex_message_processor.rs index 956062dc36..ffd858ef0d 100644 --- a/codex-rs/app-server/src/codex_message_processor.rs +++ b/codex-rs/app-server/src/codex_message_processor.rs @@ -323,7 +323,6 @@ use codex_mcp::resolve_oauth_scopes; use codex_memories_write::clear_memory_roots_contents; use codex_model_provider::ProviderAccountError; use codex_model_provider::create_model_provider; -use codex_models_manager::collaboration_mode_presets::CollaborationModesConfig; use codex_models_manager::collaboration_mode_presets::builtin_collaboration_mode_presets; use codex_protocol::ThreadId; use codex_protocol::config_types::CollaborationMode; @@ -903,15 +902,13 @@ impl CodexMessageProcessor { fn normalize_turn_start_collaboration_mode( &self, mut collaboration_mode: CollaborationMode, - collaboration_modes_config: CollaborationModesConfig, ) -> CollaborationMode { if collaboration_mode.settings.developer_instructions.is_none() - && let Some(instructions) = - builtin_collaboration_mode_presets(collaboration_modes_config) - .into_iter() - .find(|preset| preset.mode == Some(collaboration_mode.mode)) - .and_then(|preset| preset.developer_instructions.flatten()) - .filter(|instructions| !instructions.is_empty()) + && let Some(instructions) = builtin_collaboration_mode_presets() + .into_iter() + .find(|preset| preset.mode == Some(collaboration_mode.mode)) + .and_then(|preset| preset.developer_instructions.flatten()) + .filter(|instructions| !instructions.is_empty()) { collaboration_mode.settings.developer_instructions = Some(instructions); } @@ -6566,13 +6563,9 @@ impl CodexMessageProcessor { self.track_error_response(&request_id, error, /*error_type*/ None); })?; - let collaboration_modes_config = CollaborationModesConfig { - default_mode_request_user_input: thread - .enabled(Feature::DefaultModeRequestUserInput), - }; - let collaboration_mode = params.collaboration_mode.map(|mode| { - self.normalize_turn_start_collaboration_mode(mode, collaboration_modes_config) - }); + let collaboration_mode = params + .collaboration_mode + .map(|mode| self.normalize_turn_start_collaboration_mode(mode)); let environments: Option> = params.environments.map(|environments| { environments diff --git a/codex-rs/app-server/src/message_processor.rs b/codex-rs/app-server/src/message_processor.rs index 43a899def8..aec4ec5091 100644 --- a/codex-rs/app-server/src/message_processor.rs +++ b/codex-rs/app-server/src/message_processor.rs @@ -79,7 +79,6 @@ use codex_login::default_client::get_codex_user_agent; use codex_login::default_client::set_default_client_residency_requirement; use codex_login::default_client::set_default_originator; use codex_model_provider::create_model_provider; -use codex_models_manager::collaboration_mode_presets::CollaborationModesConfig; use codex_protocol::ThreadId; use codex_protocol::protocol::SessionSource; use codex_protocol::protocol::W3cTraceContext; @@ -290,11 +289,6 @@ impl MessageProcessor { config.as_ref(), auth_manager.clone(), session_source, - CollaborationModesConfig { - default_mode_request_user_input: config - .features - .enabled(Feature::DefaultModeRequestUserInput), - }, environment_manager, Some(analytics_events_client.clone()), )); diff --git a/codex-rs/app-server/tests/suite/v2/collaboration_mode_list.rs b/codex-rs/app-server/tests/suite/v2/collaboration_mode_list.rs index 3c8a3e573e..f5914f0449 100644 --- a/codex-rs/app-server/tests/suite/v2/collaboration_mode_list.rs +++ b/codex-rs/app-server/tests/suite/v2/collaboration_mode_list.rs @@ -1,8 +1,7 @@ //! Validates that the collaboration mode list endpoint returns the expected default presets. //! //! The test drives the app server through the MCP harness and asserts that the list response -//! includes the plan and default modes with their default model and reasoning effort -//! settings, which keeps the API contract visible in one place. +//! includes the plan and default modes, which keeps the API contract visible in one place. #![allow(clippy::unwrap_used)] 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 3ff04d5022..faba13f606 100644 --- a/codex-rs/app-server/tests/suite/v2/turn_start.rs +++ b/codex-rs/app-server/tests/suite/v2/turn_start.rs @@ -969,7 +969,7 @@ async fn turn_start_accepts_collaboration_mode_override_v2() -> Result<()> { codex_home.path(), &server.uri(), "never", - &BTreeMap::from([(Feature::DefaultModeRequestUserInput, true)]), + &BTreeMap::default(), )?; let mut mcp = McpProcess::new(codex_home.path()).await?; @@ -1029,13 +1029,15 @@ async fn turn_start_accepts_collaboration_mode_override_v2() -> Result<()> { let payload = request.body_json(); assert_eq!(payload["model"].as_str(), Some("mock-model-collab")); let payload_text = payload.to_string(); - assert!(payload_text.contains("The `request_user_input` tool is available in Default mode.")); + assert!(payload_text.contains( + "Use the `request_user_input` tool only when it is listed in the available tools" + )); Ok(()) } #[tokio::test] -async fn turn_start_uses_thread_feature_overrides_for_collaboration_mode_instructions_v2() +async fn turn_start_uses_thread_feature_overrides_for_request_user_input_tool_description_v2() -> Result<()> { skip_if_no_network!(Ok(())); @@ -1114,7 +1116,7 @@ async fn turn_start_uses_thread_feature_overrides_for_collaboration_mode_instruc let request = response_mock.single_request(); let payload_text = request.body_json().to_string(); - assert!(payload_text.contains("The `request_user_input` tool is available in Default mode.")); + assert!(payload_text.contains("This tool is only available in Default or Plan mode.")); Ok(()) } diff --git a/codex-rs/cli/src/main.rs b/codex-rs/cli/src/main.rs index 9881878554..83790c2c54 100644 --- a/codex-rs/cli/src/main.rs +++ b/codex-rs/cli/src/main.rs @@ -62,7 +62,6 @@ use codex_features::is_known_feature_key; use codex_login::AuthManager; use codex_memories_write::clear_memory_roots_contents; use codex_models_manager::bundled_models_response; -use codex_models_manager::collaboration_mode_presets::CollaborationModesConfig; use codex_models_manager::manager::RefreshStrategy; use codex_protocol::protocol::AskForApproval; use codex_protocol::user_input::UserInput; @@ -1411,8 +1410,7 @@ async fn run_debug_models_command( let config = Config::load_with_cli_overrides(cli_overrides).await?; let auth_manager = AuthManager::shared_from_config(&config, /*enable_codex_api_key_env*/ true).await; - let models_manager = - build_models_manager(&config, auth_manager, CollaborationModesConfig::default()); + let models_manager = build_models_manager(&config, auth_manager); models_manager .raw_model_catalog(RefreshStrategy::OnlineIfUncached) .await diff --git a/codex-rs/collaboration-mode-templates/templates/default.md b/codex-rs/collaboration-mode-templates/templates/default.md index ff00857c6d..715982c396 100644 --- a/codex-rs/collaboration-mode-templates/templates/default.md +++ b/codex-rs/collaboration-mode-templates/templates/default.md @@ -6,6 +6,6 @@ Your active mode changes only when new developer instructions with a different ` ## request_user_input availability -{{REQUEST_USER_INPUT_AVAILABILITY}} +Use the `request_user_input` tool only when it is listed in the available tools for this turn. -{{ASKING_QUESTIONS_GUIDANCE}} +In Default mode, strongly prefer making reasonable assumptions and executing the user's request rather than stopping to ask questions. If you absolutely must ask a question because the answer cannot be discovered from local context and a reasonable assumption would be risky, ask the user directly with a concise plain-text question. Never write a multiple choice question as a textual assistant message. diff --git a/codex-rs/core-api/src/lib.rs b/codex-rs/core-api/src/lib.rs index 52b4995e89..00f1abb247 100644 --- a/codex-rs/core-api/src/lib.rs +++ b/codex-rs/core-api/src/lib.rs @@ -46,7 +46,6 @@ pub use codex_login::AuthManager; pub use codex_login::default_client::set_default_originator; pub use codex_model_provider_info::OPENAI_PROVIDER_ID; pub use codex_model_provider_info::built_in_model_providers; -pub use codex_models_manager::collaboration_mode_presets::CollaborationModesConfig; pub use codex_models_manager::manager::RefreshStrategy; pub use codex_models_manager::manager::SharedModelsManager; pub use codex_protocol::ThreadId; diff --git a/codex-rs/core/src/prompt_debug.rs b/codex-rs/core/src/prompt_debug.rs index 46431c59d8..2a91f2e54c 100644 --- a/codex-rs/core/src/prompt_debug.rs +++ b/codex-rs/core/src/prompt_debug.rs @@ -4,9 +4,7 @@ use std::sync::Arc; use codex_exec_server::EnvironmentManager; use codex_exec_server::EnvironmentManagerArgs; use codex_exec_server::ExecServerRuntimePaths; -use codex_features::Feature; use codex_login::AuthManager; -use codex_models_manager::collaboration_mode_presets::CollaborationModesConfig; use codex_protocol::error::Result as CodexResult; use codex_protocol::models::ResponseInputItem; use codex_protocol::models::ResponseItem; @@ -41,11 +39,6 @@ pub async fn build_prompt_input( &config, Arc::clone(&auth_manager), SessionSource::Exec, - CollaborationModesConfig { - default_mode_request_user_input: config - .features - .enabled(Feature::DefaultModeRequestUserInput), - }, Arc::new(EnvironmentManager::new(EnvironmentManagerArgs::new(local_runtime_paths)).await), /*analytics_events_client*/ None, ); diff --git a/codex-rs/core/src/test_support.rs b/codex-rs/core/src/test_support.rs index 6c2f29d9c0..34ed487fc5 100644 --- a/codex-rs/core/src/test_support.rs +++ b/codex-rs/core/src/test_support.rs @@ -110,11 +110,7 @@ pub fn models_manager_with_provider( provider: ModelProviderInfo, ) -> SharedModelsManager { let provider = create_model_provider(provider, Some(auth_manager)); - provider.models_manager( - codex_home, - /*config_model_catalog*/ None, - Default::default(), - ) + provider.models_manager(codex_home, /*config_model_catalog*/ None) } pub fn get_model_offline(model: Option<&str>) -> String { @@ -130,7 +126,5 @@ pub fn all_model_presets() -> &'static Vec { } pub fn builtin_collaboration_mode_presets() -> Vec { - collaboration_mode_presets::builtin_collaboration_mode_presets( - collaboration_mode_presets::CollaborationModesConfig::default(), - ) + collaboration_mode_presets::builtin_collaboration_mode_presets() } diff --git a/codex-rs/core/src/thread_manager.rs b/codex-rs/core/src/thread_manager.rs index 2a83eb4511..3587dc937e 100644 --- a/codex-rs/core/src/thread_manager.rs +++ b/codex-rs/core/src/thread_manager.rs @@ -28,7 +28,6 @@ use codex_login::AuthManager; use codex_login::CodexAuth; use codex_model_provider::create_model_provider; use codex_model_provider_info::ModelProviderInfo; -use codex_models_manager::collaboration_mode_presets::CollaborationModesConfig; use codex_models_manager::manager::RefreshStrategy; use codex_models_manager::manager::SharedModelsManager; use codex_protocol::ThreadId; @@ -255,13 +254,11 @@ pub(crate) struct ThreadManagerState { pub fn build_models_manager( config: &Config, auth_manager: Arc, - collaboration_modes_config: CollaborationModesConfig, ) -> SharedModelsManager { let provider = create_model_provider(config.model_provider.clone(), Some(auth_manager)); provider.models_manager( config.codex_home.to_path_buf(), config.model_catalog.clone(), - collaboration_modes_config, ) } @@ -281,7 +278,6 @@ impl ThreadManager { config: &Config, auth_manager: Arc, session_source: SessionSource, - collaboration_modes_config: CollaborationModesConfig, environment_manager: Arc, analytics_events_client: Option, ) -> Self { @@ -303,11 +299,7 @@ impl ThreadManager { state: Arc::new(ThreadManagerState { threads: Arc::new(RwLock::new(HashMap::new())), thread_created_tx, - models_manager: build_models_manager( - config, - auth_manager.clone(), - collaboration_modes_config, - ), + models_manager: build_models_manager(config, auth_manager.clone()), environment_manager, skills_manager, plugins_manager, @@ -378,11 +370,7 @@ impl ThreadManager { threads: Arc::new(RwLock::new(HashMap::new())), thread_created_tx, models_manager: create_model_provider(provider, Some(auth_manager.clone())) - .models_manager( - codex_home, - /*config_model_catalog*/ None, - CollaborationModesConfig::default(), - ), + .models_manager(codex_home, /*config_model_catalog*/ None), environment_manager, skills_manager, plugins_manager, diff --git a/codex-rs/core/src/thread_manager_tests.rs b/codex-rs/core/src/thread_manager_tests.rs index 348edaa221..c79321b94b 100644 --- a/codex-rs/core/src/thread_manager_tests.rs +++ b/codex-rs/core/src/thread_manager_tests.rs @@ -6,7 +6,6 @@ use crate::session::tests::make_session_and_context; use crate::tasks::InterruptedTurnHistoryMarker; use crate::tasks::interrupted_turn_history_marker; use codex_features::Feature; -use codex_models_manager::collaboration_mode_presets::CollaborationModesConfig; use codex_models_manager::manager::RefreshStrategy; use codex_protocol::models::ContentItem; use codex_protocol::models::ReasoningItemReasoningSummary; @@ -392,7 +391,6 @@ async fn resume_and_fork_do_not_restore_thread_environments_from_rollout() { &config, auth_manager.clone(), SessionSource::Exec, - CollaborationModesConfig::default(), Arc::new(codex_exec_server::EnvironmentManager::default_for_tests()), /*analytics_events_client*/ None, ); @@ -499,7 +497,6 @@ async fn new_uses_active_provider_for_model_refresh() { &config, auth_manager, SessionSource::Exec, - CollaborationModesConfig::default(), Arc::new(codex_exec_server::EnvironmentManager::default_for_tests()), /*analytics_events_client*/ None, ); @@ -710,7 +707,6 @@ async fn interrupted_fork_snapshot_does_not_synthesize_turn_id_for_legacy_histor &config, auth_manager.clone(), SessionSource::Exec, - CollaborationModesConfig::default(), Arc::new(codex_exec_server::EnvironmentManager::default_for_tests()), /*analytics_events_client*/ None, ); @@ -814,7 +810,6 @@ async fn interrupted_fork_snapshot_preserves_explicit_turn_id() { &config, auth_manager.clone(), SessionSource::Exec, - CollaborationModesConfig::default(), Arc::new(codex_exec_server::EnvironmentManager::default_for_tests()), /*analytics_events_client*/ None, ); @@ -907,7 +902,6 @@ async fn interrupted_fork_snapshot_uses_persisted_mid_turn_history_without_live_ &config, auth_manager.clone(), SessionSource::Exec, - CollaborationModesConfig::default(), Arc::new(codex_exec_server::EnvironmentManager::default_for_tests()), /*analytics_events_client*/ None, ); @@ -1046,7 +1040,6 @@ async fn resumed_thread_activates_paused_goal_and_continues_on_request() -> anyh &config, auth_manager.clone(), SessionSource::Exec, - CollaborationModesConfig::default(), Arc::new(codex_exec_server::EnvironmentManager::default_for_tests()), /*analytics_events_client*/ None, ); diff --git a/codex-rs/core/src/tools/handlers/request_user_input.rs b/codex-rs/core/src/tools/handlers/request_user_input.rs index 2c94145d31..eea6612762 100644 --- a/codex-rs/core/src/tools/handlers/request_user_input.rs +++ b/codex-rs/core/src/tools/handlers/request_user_input.rs @@ -5,13 +5,14 @@ use crate::tools::context::ToolPayload; use crate::tools::handlers::parse_arguments; use crate::tools::registry::ToolHandler; use crate::tools::registry::ToolKind; +use codex_protocol::config_types::ModeKind; use codex_protocol::request_user_input::RequestUserInputArgs; use codex_tools::REQUEST_USER_INPUT_TOOL_NAME; use codex_tools::normalize_request_user_input_args; use codex_tools::request_user_input_unavailable_message; pub struct RequestUserInputHandler { - pub default_mode_request_user_input: bool, + pub available_modes: Vec, } impl ToolHandler for RequestUserInputHandler { @@ -46,9 +47,7 @@ impl ToolHandler for RequestUserInputHandler { } let mode = session.collaboration_mode().await.mode; - if let Some(message) = - request_user_input_unavailable_message(mode, self.default_mode_request_user_input) - { + if let Some(message) = request_user_input_unavailable_message(mode, &self.available_modes) { return Err(FunctionCallError::RespondToModel(message)); } diff --git a/codex-rs/core/src/tools/handlers/request_user_input_tests.rs b/codex-rs/core/src/tools/handlers/request_user_input_tests.rs index 811e4a6686..7c577c54be 100644 --- a/codex-rs/core/src/tools/handlers/request_user_input_tests.rs +++ b/codex-rs/core/src/tools/handlers/request_user_input_tests.rs @@ -23,7 +23,7 @@ async fn multi_agent_v2_request_user_input_rejects_subagent_threads() { }); let result = RequestUserInputHandler { - default_mode_request_user_input: true, + available_modes: Vec::new(), } .handle(ToolInvocation { session: Arc::new(session), diff --git a/codex-rs/core/src/tools/spec.rs b/codex-rs/core/src/tools/spec.rs index c167fdbc3c..308d8c46f7 100644 --- a/codex-rs/core/src/tools/spec.rs +++ b/codex-rs/core/src/tools/spec.rs @@ -166,7 +166,7 @@ pub(crate) fn build_specs_with_discoverable_tools( let shell_command_handler = Arc::new(ShellCommandHandler::from(config.shell_command_backend)); let request_permissions_handler = Arc::new(RequestPermissionsHandler); let request_user_input_handler = Arc::new(RequestUserInputHandler { - default_mode_request_user_input: config.default_mode_request_user_input, + available_modes: config.request_user_input_available_modes.clone(), }); let deferred_dynamic_tools = dynamic_tools .iter() diff --git a/codex-rs/core/tests/common/test_codex.rs b/codex-rs/core/tests/common/test_codex.rs index 600a58c720..374116e3fe 100644 --- a/codex-rs/core/tests/common/test_codex.rs +++ b/codex-rs/core/tests/common/test_codex.rs @@ -27,7 +27,6 @@ use codex_login::CodexAuth; use codex_model_provider_info::ModelProviderInfo; use codex_model_provider_info::built_in_model_providers; use codex_models_manager::bundled_models_response; -use codex_models_manager::collaboration_mode_presets::CollaborationModesConfig; use codex_protocol::config_types::ServiceTier; use codex_protocol::models::PermissionProfile; use codex_protocol::openai_models::ModelsResponse; @@ -429,7 +428,6 @@ impl TestCodexBuilder { &config, codex_core::test_support::auth_manager_from_auth(auth.clone()), SessionSource::Exec, - CollaborationModesConfig::default(), Arc::clone(&environment_manager), /*analytics_events_client*/ None, ) diff --git a/codex-rs/core/tests/suite/client.rs b/codex-rs/core/tests/suite/client.rs index b8871cf524..9ed83605c2 100644 --- a/codex-rs/core/tests/suite/client.rs +++ b/codex-rs/core/tests/suite/client.rs @@ -14,7 +14,6 @@ use codex_model_provider_info::ModelProviderInfo; use codex_model_provider_info::WireApi; use codex_model_provider_info::built_in_model_providers; use codex_models_manager::bundled_models_response; -use codex_models_manager::collaboration_mode_presets::CollaborationModesConfig; use codex_otel::SessionTelemetry; use codex_otel::TelemetryAuthMode; use codex_protocol::ThreadId; @@ -1106,11 +1105,6 @@ async fn prefers_apikey_when_config_prefers_apikey_even_with_chatgpt_tokens() { &config, auth_manager, SessionSource::Exec, - CollaborationModesConfig { - default_mode_request_user_input: config - .features - .enabled(Feature::DefaultModeRequestUserInput), - }, Arc::new(codex_exec_server::EnvironmentManager::default_for_tests()), /*analytics_events_client*/ None, ); diff --git a/codex-rs/core/tests/suite/skills.rs b/codex-rs/core/tests/suite/skills.rs index 87b5eb46fc..f6db9a7098 100644 --- a/codex-rs/core/tests/suite/skills.rs +++ b/codex-rs/core/tests/suite/skills.rs @@ -9,7 +9,6 @@ use codex_exec_server::EnvironmentManager; use codex_exec_server::ExecServerRuntimePaths; use codex_exec_server::ExecutorFileSystem; use codex_login::CodexAuth; -use codex_models_manager::collaboration_mode_presets::CollaborationModesConfig; use codex_protocol::models::PermissionProfile; use codex_protocol::protocol::AskForApproval; use codex_protocol::protocol::Op; @@ -240,7 +239,6 @@ async fn list_skills_skips_cwd_roots_when_environment_disabled() -> Result<()> { &config, codex_core::test_support::auth_manager_from_auth(CodexAuth::from_api_key("dummy")), SessionSource::Exec, - CollaborationModesConfig::default(), Arc::new(EnvironmentManager::disabled_for_tests( ExecServerRuntimePaths::new( std::env::current_exe()?, diff --git a/codex-rs/docs/codex_mcp_interface.md b/codex-rs/docs/codex_mcp_interface.md index b4e3adfe53..7e3d4c6843 100644 --- a/codex-rs/docs/codex_mcp_interface.md +++ b/codex-rs/docs/codex_mcp_interface.md @@ -88,6 +88,7 @@ Fetch the built-in collaboration mode presets with `collaborationMode/list`. Thi - `data` - ordered list of collaboration mode masks (partial settings to apply on top of the base mode) - For tri-state fields like `reasoning_effort` and `developer_instructions`, omit the field to keep the current value, set it to `null` to clear it, or set a concrete value to update it. + - Built-in presets do not set `model`. The Plan preset sets `reasoning_effort` to medium; clients keep or override model separately. When sending `turn/start` with `collaborationMode`, `settings.developer_instructions: null` means "use built-in instructions for the selected mode". diff --git a/codex-rs/mcp-server/Cargo.toml b/codex-rs/mcp-server/Cargo.toml index b9b16cbf9d..74873023da 100644 --- a/codex-rs/mcp-server/Cargo.toml +++ b/codex-rs/mcp-server/Cargo.toml @@ -21,9 +21,7 @@ codex-arg0 = { workspace = true } codex-config = { workspace = true } codex-core = { workspace = true } codex-exec-server = { workspace = true } -codex-features = { workspace = true } codex-login = { workspace = true } -codex-models-manager = { workspace = true } codex-protocol = { workspace = true } codex-utils-cli = { workspace = true } codex-utils-json-to-toml = { workspace = true } diff --git a/codex-rs/mcp-server/src/message_processor.rs b/codex-rs/mcp-server/src/message_processor.rs index 32d05d1f93..0e9a1435fc 100644 --- a/codex-rs/mcp-server/src/message_processor.rs +++ b/codex-rs/mcp-server/src/message_processor.rs @@ -5,11 +5,9 @@ use codex_arg0::Arg0DispatchPaths; use codex_core::ThreadManager; use codex_core::config::Config; use codex_exec_server::EnvironmentManager; -use codex_features::Feature; use codex_login::AuthManager; use codex_login::default_client::USER_AGENT_SUFFIX; use codex_login::default_client::get_codex_user_agent; -use codex_models_manager::collaboration_mode_presets::CollaborationModesConfig; use codex_protocol::ThreadId; use codex_protocol::protocol::SessionSource; use codex_protocol::protocol::Submission; @@ -65,11 +63,6 @@ impl MessageProcessor { config.as_ref(), auth_manager, SessionSource::Mcp, - CollaborationModesConfig { - default_mode_request_user_input: config - .features - .enabled(Feature::DefaultModeRequestUserInput), - }, environment_manager, /*analytics_events_client*/ None, )); diff --git a/codex-rs/model-provider/src/amazon_bedrock/mod.rs b/codex-rs/model-provider/src/amazon_bedrock/mod.rs index b9987ed2a8..c8f772c62a 100644 --- a/codex-rs/model-provider/src/amazon_bedrock/mod.rs +++ b/codex-rs/model-provider/src/amazon_bedrock/mod.rs @@ -11,7 +11,6 @@ use codex_login::AuthManager; use codex_login::CodexAuth; use codex_model_provider_info::ModelProviderAwsAuthInfo; use codex_model_provider_info::ModelProviderInfo; -use codex_models_manager::collaboration_mode_presets::CollaborationModesConfig; use codex_models_manager::manager::SharedModelsManager; use codex_models_manager::manager::StaticModelsManager; use codex_protocol::account::ProviderAccount; @@ -94,12 +93,10 @@ impl ModelProvider for AmazonBedrockModelProvider { &self, _codex_home: PathBuf, config_model_catalog: Option, - collaboration_modes_config: CollaborationModesConfig, ) -> SharedModelsManager { Arc::new(StaticModelsManager::new( /*auth_manager*/ None, config_model_catalog.unwrap_or_else(static_model_catalog), - collaboration_modes_config, )) } } diff --git a/codex-rs/model-provider/src/provider.rs b/codex-rs/model-provider/src/provider.rs index b6ce0da3cd..67240a6f57 100644 --- a/codex-rs/model-provider/src/provider.rs +++ b/codex-rs/model-provider/src/provider.rs @@ -7,7 +7,6 @@ use codex_api::SharedAuthProvider; use codex_login::AuthManager; use codex_login::CodexAuth; use codex_model_provider_info::ModelProviderInfo; -use codex_models_manager::collaboration_mode_presets::CollaborationModesConfig; use codex_models_manager::manager::OpenAiModelsManager; use codex_models_manager::manager::SharedModelsManager; use codex_models_manager::manager::StaticModelsManager; @@ -118,7 +117,6 @@ pub trait ModelProvider: fmt::Debug + Send + Sync { &self, codex_home: PathBuf, config_model_catalog: Option, - collaboration_modes_config: CollaborationModesConfig, ) -> SharedModelsManager; } @@ -213,13 +211,11 @@ impl ModelProvider for ConfiguredModelProvider { &self, codex_home: PathBuf, config_model_catalog: Option, - collaboration_modes_config: CollaborationModesConfig, ) -> SharedModelsManager { match config_model_catalog { Some(model_catalog) => Arc::new(StaticModelsManager::new( self.auth_manager.clone(), model_catalog, - collaboration_modes_config, )), None => { let endpoint = Arc::new(OpenAiModelsEndpoint::new( @@ -230,7 +226,6 @@ impl ModelProvider for ConfiguredModelProvider { codex_home, endpoint, self.auth_manager.clone(), - collaboration_modes_config, )) } } @@ -445,11 +440,8 @@ mod tests { ModelProviderInfo::create_amazon_bedrock_provider(/*aws*/ None), /*auth_manager*/ None, ); - let manager = provider.models_manager( - test_codex_home(), - /*config_model_catalog*/ None, - Default::default(), - ); + let manager = + provider.models_manager(test_codex_home(), /*config_model_catalog*/ None); let catalog = manager.raw_model_catalog(RefreshStrategy::Online).await; let model_ids = catalog @@ -491,7 +483,6 @@ mod tests { Some(ModelsResponse { models: vec![custom_model], }), - Default::default(), ); let catalog = manager.raw_model_catalog(RefreshStrategy::Online).await; @@ -528,11 +519,8 @@ mod tests { )), ); - let manager = provider.models_manager( - test_codex_home(), - /*config_model_catalog*/ None, - Default::default(), - ); + let manager = + provider.models_manager(test_codex_home(), /*config_model_catalog*/ None); let catalog = manager.raw_model_catalog(RefreshStrategy::Online).await; assert!( diff --git a/codex-rs/models-manager/src/collaboration_mode_presets.rs b/codex-rs/models-manager/src/collaboration_mode_presets.rs index f67ab91db4..72731c52d3 100644 --- a/codex-rs/models-manager/src/collaboration_mode_presets.rs +++ b/codex-rs/models-manager/src/collaboration_mode_presets.rs @@ -8,28 +8,13 @@ use codex_utils_template::Template; use std::sync::LazyLock; const KNOWN_MODE_NAMES_TEMPLATE_KEY: &str = "KNOWN_MODE_NAMES"; -const REQUEST_USER_INPUT_AVAILABILITY_TEMPLATE_KEY: &str = "REQUEST_USER_INPUT_AVAILABILITY"; -const ASKING_QUESTIONS_GUIDANCE_TEMPLATE_KEY: &str = "ASKING_QUESTIONS_GUIDANCE"; static COLLABORATION_MODE_DEFAULT_TEMPLATE: LazyLock