From aa2403e2eb4126a6bebb50b9db8d943510bd37b9 Mon Sep 17 00:00:00 2001 From: Michael Bolin Date: Wed, 1 Apr 2026 23:06:24 -0700 Subject: [PATCH] core: remove cross-crate re-exports from lib.rs (#16512) ## Why `codex-core` was re-exporting APIs owned by sibling `codex-*` crates, which made downstream crates depend on `codex-core` as a proxy module instead of the actual owner crate. Removing those forwards makes crate boundaries explicit and lets leaf crates drop unnecessary `codex-core` dependencies. In this PR, this reduces the dependency on `codex-core` to `codex-login` in the following files: ``` codex-rs/backend-client/Cargo.toml codex-rs/mcp-server/tests/common/Cargo.toml ``` ## What - Remove `codex-rs/core/src/lib.rs` re-exports for symbols owned by `codex-login`, `codex-mcp`, `codex-rollout`, `codex-analytics`, `codex-protocol`, `codex-shell-command`, `codex-sandboxing`, `codex-tools`, and `codex-utils-path`. - Delete the `default_client` forwarding shim in `codex-rs/core`. - Update in-crate and downstream callsites to import directly from the owning `codex-*` crate. - Add direct Cargo dependencies where callsites now target the owner crate, and remove `codex-core` from `codex-rs/backend-client`. --- codex-rs/Cargo.lock | 11 +- codex-rs/app-server/Cargo.toml | 2 + .../app-server/src/codex_message_processor.rs | 20 ++-- codex-rs/app-server/src/config_api.rs | 8 +- codex-rs/app-server/src/in_process.rs | 2 +- codex-rs/app-server/src/lib.rs | 4 +- codex-rs/app-server/src/message_processor.rs | 16 +-- .../src/message_processor/tracing_tests.rs | 2 +- .../app-server/tests/common/auth_fixtures.rs | 6 +- .../app-server/tests/common/mcp_process.rs | 2 +- codex-rs/app-server/tests/suite/auth.rs | 4 +- codex-rs/app-server/tests/suite/v2/account.rs | 2 +- .../app-server/tests/suite/v2/analytics.rs | 2 +- .../app-server/tests/suite/v2/app_list.rs | 6 +- .../app-server/tests/suite/v2/compaction.rs | 2 +- .../tests/suite/v2/mcp_server_elicitation.rs | 2 +- .../tests/suite/v2/plugin_install.rs | 2 +- .../app-server/tests/suite/v2/plugin_list.rs | 2 +- .../app-server/tests/suite/v2/plugin_read.rs | 2 +- .../tests/suite/v2/plugin_uninstall.rs | 2 +- .../app-server/tests/suite/v2/rate_limits.rs | 2 +- .../app-server/tests/suite/v2/thread_fork.rs | 4 +- .../tests/suite/v2/thread_metadata_update.rs | 2 +- .../tests/suite/v2/thread_resume.rs | 4 +- .../app-server/tests/suite/v2/thread_start.rs | 4 +- codex-rs/backend-client/Cargo.toml | 2 +- codex-rs/backend-client/src/client.rs | 4 +- codex-rs/chatgpt/src/chatgpt_client.rs | 2 +- codex-rs/chatgpt/src/chatgpt_token.rs | 5 +- codex-rs/chatgpt/src/connectors.rs | 2 +- codex-rs/cli/Cargo.toml | 1 + codex-rs/cli/src/login.rs | 12 +- codex-rs/cli/src/wsl_paths.rs | 2 +- codex-rs/cloud-requirements/Cargo.toml | 1 + codex-rs/cloud-requirements/src/lib.rs | 10 +- codex-rs/cloud-tasks/src/lib.rs | 5 +- codex-rs/cloud-tasks/src/util.rs | 4 +- codex-rs/core/src/agent/control.rs | 2 +- codex-rs/core/src/agent/control_tests.rs | 2 +- codex-rs/core/src/api_bridge.rs | 2 +- codex-rs/core/src/apply_patch.rs | 4 +- codex-rs/core/src/arc_monitor.rs | 8 +- codex-rs/core/src/arc_monitor_tests.rs | 4 +- codex-rs/core/src/auth_env_telemetry.rs | 6 +- codex-rs/core/src/client.rs | 33 +++--- codex-rs/core/src/client_tests.rs | 2 +- codex-rs/core/src/codex.rs | 104 +++++++++--------- .../src/codex/rollout_reconstruction_tests.rs | 6 +- codex-rs/core/src/codex_delegate.rs | 2 +- codex-rs/core/src/codex_tests.rs | 79 +++++++------ codex-rs/core/src/codex_tests_guardian.rs | 2 +- codex-rs/core/src/codex_thread.rs | 8 +- codex-rs/core/src/command_canonicalization.rs | 6 +- codex-rs/core/src/compact.rs | 8 +- codex-rs/core/src/compact_remote.rs | 6 +- codex-rs/core/src/config/mod.rs | 8 +- codex-rs/core/src/config/profile.rs | 2 +- codex-rs/core/src/connectors.rs | 26 ++--- codex-rs/core/src/connectors_tests.rs | 2 +- .../core/src/default_client_forwarding.rs | 2 - codex-rs/core/src/exec.rs | 10 +- codex-rs/core/src/exec_policy.rs | 8 +- codex-rs/core/src/guardian/review_session.rs | 2 +- codex-rs/core/src/guardian/tests.rs | 2 +- codex-rs/core/src/hook_runtime.rs | 3 +- codex-rs/core/src/landlock.rs | 2 +- codex-rs/core/src/lib.rs | 30 ----- codex-rs/core/src/mcp.rs | 2 +- codex-rs/core/src/mcp_tool_call.rs | 10 +- codex-rs/core/src/mcp_tool_call_tests.rs | 10 +- codex-rs/core/src/memories/tests.rs | 4 +- codex-rs/core/src/memories/usage.rs | 4 +- codex-rs/core/src/model_provider_info.rs | 2 +- codex-rs/core/src/models_manager/manager.rs | 8 +- .../core/src/models_manager/manager_tests.rs | 8 +- codex-rs/core/src/otel_init.rs | 2 +- codex-rs/core/src/personality_migration.rs | 2 +- codex-rs/core/src/plugins/injection.rs | 2 +- codex-rs/core/src/plugins/manager.rs | 4 +- codex-rs/core/src/plugins/manager_tests.rs | 2 +- codex-rs/core/src/plugins/remote.rs | 4 +- codex-rs/core/src/plugins/startup_sync.rs | 4 +- .../core/src/plugins/startup_sync_tests.rs | 2 +- codex-rs/core/src/provider_auth.rs | 2 +- codex-rs/core/src/realtime_conversation.rs | 9 +- codex-rs/core/src/review_format.rs | 4 +- codex-rs/core/src/safety.rs | 6 +- codex-rs/core/src/sandbox_tags.rs | 2 +- codex-rs/core/src/sandbox_tags_tests.rs | 2 +- codex-rs/core/src/seatbelt.rs | 2 +- codex-rs/core/src/state/service.rs | 6 +- codex-rs/core/src/state/session.rs | 6 +- codex-rs/core/src/state/session_tests.rs | 7 +- codex-rs/core/src/state/turn.rs | 4 +- codex-rs/core/src/stream_events_utils.rs | 2 +- codex-rs/core/src/tasks/ghost_snapshot.rs | 4 +- codex-rs/core/src/tasks/mod.rs | 13 ++- codex-rs/core/src/tasks/regular.rs | 4 +- codex-rs/core/src/tasks/undo.rs | 6 +- codex-rs/core/src/tasks/user_shell.rs | 16 +-- codex-rs/core/src/test_support.rs | 4 +- codex-rs/core/src/thread_manager.rs | 10 +- codex-rs/core/src/tools/events.rs | 22 ++-- codex-rs/core/src/tools/handlers/js_repl.rs | 2 +- .../core/src/tools/handlers/js_repl_tests.rs | 4 +- .../core/src/tools/handlers/mcp_resource.rs | 8 +- .../src/tools/handlers/multi_agents_tests.rs | 28 ++--- codex-rs/core/src/tools/handlers/shell.rs | 4 +- .../core/src/tools/handlers/shell_tests.rs | 6 +- .../core/src/tools/handlers/tool_search.rs | 2 +- .../core/src/tools/handlers/tool_suggest.rs | 4 +- .../core/src/tools/handlers/unified_exec.rs | 6 +- .../core/src/tools/handlers/view_image.rs | 4 +- codex-rs/core/src/tools/js_repl/mod_tests.rs | 14 +-- codex-rs/core/src/tools/registry.rs | 2 +- codex-rs/core/src/tools/router.rs | 2 +- codex-rs/core/src/tools/runtimes/shell.rs | 2 +- .../runtimes/shell/unix_escalation_tests.rs | 8 +- .../core/src/tools/runtimes/unified_exec.rs | 2 +- codex-rs/core/src/tools/sandboxing.rs | 6 +- codex-rs/core/src/tools/spec.rs | 2 +- codex-rs/core/src/turn_diff_tracker.rs | 2 +- .../core/src/unified_exec/async_watcher.rs | 8 +- .../core/src/unified_exec/process_manager.rs | 2 +- codex-rs/core/src/util.rs | 2 +- codex-rs/core/src/windows_sandbox.rs | 4 +- .../core/src/windows_sandbox_read_grants.rs | 2 +- .../src/windows_sandbox_read_grants_tests.rs | 2 +- codex-rs/core/tests/common/Cargo.toml | 1 + codex-rs/core/tests/common/test_codex.rs | 2 +- codex-rs/core/tests/common/test_codex_exec.rs | 2 +- codex-rs/core/tests/responses_headers.rs | 2 +- codex-rs/core/tests/suite/auth_refresh.rs | 14 +-- codex-rs/core/tests/suite/cli_stream.rs | 2 +- codex-rs/core/tests/suite/client.rs | 10 +- .../core/tests/suite/client_websockets.rs | 2 +- codex-rs/core/tests/suite/compact.rs | 2 +- codex-rs/core/tests/suite/compact_remote.rs | 2 +- .../core/tests/suite/compact_resume_fork.rs | 2 +- .../core/tests/suite/model_info_overrides.rs | 2 +- codex-rs/core/tests/suite/model_switching.rs | 2 +- codex-rs/core/tests/suite/models_cache_ttl.rs | 2 +- .../core/tests/suite/models_etag_responses.rs | 2 +- codex-rs/core/tests/suite/personality.rs | 4 +- codex-rs/core/tests/suite/plugins.rs | 4 +- .../core/tests/suite/realtime_conversation.rs | 4 +- codex-rs/core/tests/suite/remote_models.rs | 2 +- .../core/tests/suite/request_compression.rs | 2 +- codex-rs/core/tests/suite/resume_warning.rs | 2 +- codex-rs/core/tests/suite/rmcp_client.rs | 2 +- codex-rs/core/tests/suite/search_tool.rs | 2 +- .../tests/suite/spawn_agent_description.rs | 2 +- codex-rs/core/tests/suite/tool_suggest.rs | 2 +- .../tests/suite/unstable_features_warning.rs | 2 +- codex-rs/core/tests/suite/view_image.rs | 2 +- codex-rs/exec/Cargo.toml | 1 + codex-rs/exec/src/lib.rs | 8 +- codex-rs/exec/tests/suite/originator.rs | 2 +- codex-rs/mcp-server/Cargo.toml | 1 + codex-rs/mcp-server/src/message_processor.rs | 6 +- codex-rs/mcp-server/tests/common/Cargo.toml | 2 +- .../mcp-server/tests/common/mcp_process.rs | 2 +- codex-rs/tui/Cargo.toml | 1 + codex-rs/tui/src/app.rs | 2 +- codex-rs/tui/src/chatwidget.rs | 2 +- codex-rs/tui/src/lib.rs | 10 +- codex-rs/tui/src/local_chatgpt_auth.rs | 8 +- codex-rs/tui/src/onboarding/auth.rs | 4 +- .../onboarding/auth/headless_chatgpt_login.rs | 2 +- codex-rs/tui/src/updates.rs | 2 +- 170 files changed, 495 insertions(+), 512 deletions(-) delete mode 100644 codex-rs/core/src/default_client_forwarding.rs diff --git a/codex-rs/Cargo.lock b/codex-rs/Cargo.lock index 454d41d9b..0f1046b69 100644 --- a/codex-rs/Cargo.lock +++ b/codex-rs/Cargo.lock @@ -1401,6 +1401,7 @@ dependencies = [ "base64 0.22.1", "chrono", "clap", + "codex-analytics", "codex-app-server-protocol", "codex-arg0", "codex-backend-client", @@ -1417,6 +1418,7 @@ dependencies = [ "codex-otel", "codex-protocol", "codex-rmcp-client", + "codex-rollout", "codex-sandboxing", "codex-shell-command", "codex-state", @@ -1573,7 +1575,7 @@ dependencies = [ "anyhow", "codex-backend-openapi-models", "codex-client", - "codex-core", + "codex-login", "codex-protocol", "pretty_assertions", "reqwest", @@ -1642,6 +1644,7 @@ dependencies = [ "codex-tui", "codex-utils-cargo-bin", "codex-utils-cli", + "codex-utils-path", "codex-windows-sandbox", "libc", "owo-colors", @@ -1698,6 +1701,7 @@ dependencies = [ "chrono", "codex-backend-client", "codex-core", + "codex-login", "codex-otel", "codex-protocol", "hmac", @@ -1995,6 +1999,7 @@ dependencies = [ "codex-core", "codex-feedback", "codex-git-utils", + "codex-login", "codex-otel", "codex-protocol", "codex-utils-absolute-path", @@ -2301,6 +2306,7 @@ dependencies = [ "codex-core", "codex-exec-server", "codex-features", + "codex-login", "codex-protocol", "codex-shell-command", "codex-utils-cli", @@ -2696,6 +2702,7 @@ dependencies = [ "codex-mcp", "codex-otel", "codex-protocol", + "codex-rollout", "codex-shell-command", "codex-state", "codex-terminal-detection", @@ -3197,6 +3204,7 @@ dependencies = [ "codex-core", "codex-exec-server", "codex-features", + "codex-login", "codex-protocol", "codex-utils-absolute-path", "codex-utils-cargo-bin", @@ -6012,6 +6020,7 @@ version = "0.0.0" dependencies = [ "anyhow", "codex-core", + "codex-login", "codex-mcp-server", "codex-terminal-detection", "codex-utils-cargo-bin", diff --git a/codex-rs/app-server/Cargo.toml b/codex-rs/app-server/Cargo.toml index fc3e8c8cb..3d58bbe14 100644 --- a/codex-rs/app-server/Cargo.toml +++ b/codex-rs/app-server/Cargo.toml @@ -29,6 +29,7 @@ axum = { workspace = true, default-features = false, features = [ "tokio", "ws", ] } +codex-analytics = { workspace = true } codex-arg0 = { workspace = true } codex-cloud-requirements = { workspace = true } codex-core = { workspace = true } @@ -48,6 +49,7 @@ codex-protocol = { workspace = true } codex-app-server-protocol = { workspace = true } codex-feedback = { workspace = true } codex-rmcp-client = { workspace = true } +codex-rollout = { workspace = true } codex-sandboxing = { workspace = true } codex-state = { workspace = true } codex-tools = { workspace = true } diff --git a/codex-rs/app-server/src/codex_message_processor.rs b/codex-rs/app-server/src/codex_message_processor.rs index 4eea3fed6..f833e5234 100644 --- a/codex-rs/app-server/src/codex_message_processor.rs +++ b/codex-rs/app-server/src/codex_message_processor.rs @@ -20,6 +20,7 @@ use crate::thread_status::resolve_thread_status; use chrono::DateTime; use chrono::SecondsFormat; use chrono::Utc; +use codex_analytics::AnalyticsEventsClient; use codex_app_server_protocol::Account; use codex_app_server_protocol::AccountLoginCompletedNotification; use codex_app_server_protocol::AccountUpdatedNotification; @@ -180,9 +181,6 @@ use codex_arg0::Arg0DispatchPaths; use codex_backend_client::Client as BackendClient; use codex_chatgpt::connectors; use codex_cloud_requirements::cloud_requirements_loader; -use codex_core::AnalyticsEventsClient; -use codex_core::AuthManager; -use codex_core::CodexAuth; use codex_core::CodexThread; use codex_core::Cursor as RolloutCursor; use codex_core::ForkSnapshot; @@ -193,9 +191,6 @@ use codex_core::SteerInputError; use codex_core::ThreadConfigSnapshot; use codex_core::ThreadManager; use codex_core::ThreadSortKey as CoreThreadSortKey; -use codex_core::auth::AuthMode as CoreAuthMode; -use codex_core::auth::CLIENT_ID; -use codex_core::auth::login_with_api_key; use codex_core::config::Config; use codex_core::config::ConfigOverrides; use codex_core::config::NetworkProxyAuditMetadata; @@ -207,7 +202,6 @@ use codex_core::config_loader::CloudRequirementsLoadErrorCode; use codex_core::config_loader::CloudRequirementsLoader; use codex_core::config_loader::LoaderOverrides; use codex_core::config_loader::load_config_layers_state; -use codex_core::default_client::set_default_client_residency_requirement; use codex_core::error::CodexErr; use codex_core::error::Result as CodexResult; use codex_core::exec::ExecCapturePolicy; @@ -233,9 +227,6 @@ use codex_core::read_head_for_summary; use codex_core::read_session_meta_line; use codex_core::rollout_date_parts; use codex_core::sandboxing::SandboxPermissions; -use codex_core::state_db::StateDbHandle; -use codex_core::state_db::get_state_db; -use codex_core::state_db::reconcile_rollout; use codex_core::windows_sandbox::WindowsSandboxLevelExt; use codex_core::windows_sandbox::WindowsSandboxSetupMode as CoreWindowsSandboxSetupMode; use codex_core::windows_sandbox::WindowsSandboxSetupRequest; @@ -244,10 +235,16 @@ use codex_features::Feature; use codex_features::Stage; use codex_feedback::CodexFeedback; use codex_git_utils::git_diff_to_remote; +use codex_login::AuthManager; +use codex_login::AuthMode as CoreAuthMode; +use codex_login::CLIENT_ID; +use codex_login::CodexAuth; use codex_login::ServerOptions as LoginServerOptions; use codex_login::ShutdownHandle; use codex_login::auth::login_with_chatgpt_auth_tokens; use codex_login::complete_device_code_login; +use codex_login::default_client::set_default_client_residency_requirement; +use codex_login::login_with_api_key; use codex_login::request_device_code; use codex_login::run_login_server; use codex_mcp::mcp::auth::discover_supported_scopes; @@ -284,6 +281,9 @@ use codex_protocol::protocol::W3cTraceContext; use codex_protocol::user_input::MAX_USER_INPUT_TEXT_CHARS; use codex_protocol::user_input::UserInput as CoreInputItem; use codex_rmcp_client::perform_oauth_login_return_url; +use codex_rollout::state_db::StateDbHandle; +use codex_rollout::state_db::get_state_db; +use codex_rollout::state_db::reconcile_rollout; use codex_state::StateRuntime; use codex_state::ThreadMetadata; use codex_state::ThreadMetadataBuilder; diff --git a/codex-rs/app-server/src/config_api.rs b/codex-rs/app-server/src/config_api.rs index d138d2f5e..c36d406d8 100644 --- a/codex-rs/app-server/src/config_api.rs +++ b/codex-rs/app-server/src/config_api.rs @@ -1,6 +1,7 @@ use crate::error_code::INTERNAL_ERROR_CODE; use crate::error_code::INVALID_REQUEST_ERROR_CODE; use async_trait::async_trait; +use codex_analytics::AnalyticsEventsClient; use codex_app_server_protocol::ConfigBatchWriteParams; use codex_app_server_protocol::ConfigReadParams; use codex_app_server_protocol::ConfigReadResponse; @@ -16,7 +17,6 @@ use codex_app_server_protocol::NetworkDomainPermission; use codex_app_server_protocol::NetworkRequirements; use codex_app_server_protocol::NetworkUnixSocketPermission; use codex_app_server_protocol::SandboxMode; -use codex_core::AnalyticsEventsClient; use codex_core::ThreadManager; use codex_core::config::Config; use codex_core::config::ConfigService; @@ -510,15 +510,15 @@ fn config_write_error(code: ConfigWriteErrorCode, message: impl Into) -> #[cfg(test)] mod tests { use super::*; - use codex_core::AnalyticsEventsClient; - use codex_core::AuthManager; - use codex_core::CodexAuth; + use codex_analytics::AnalyticsEventsClient; use codex_core::config_loader::NetworkDomainPermissionToml as CoreNetworkDomainPermissionToml; use codex_core::config_loader::NetworkDomainPermissionsToml as CoreNetworkDomainPermissionsToml; use codex_core::config_loader::NetworkRequirementsToml as CoreNetworkRequirementsToml; use codex_core::config_loader::NetworkUnixSocketPermissionToml as CoreNetworkUnixSocketPermissionToml; use codex_core::config_loader::NetworkUnixSocketPermissionsToml as CoreNetworkUnixSocketPermissionsToml; use codex_features::Feature; + use codex_login::AuthManager; + use codex_login::CodexAuth; use codex_protocol::protocol::AskForApproval as CoreAskForApproval; use pretty_assertions::assert_eq; use serde_json::json; diff --git a/codex-rs/app-server/src/in_process.rs b/codex-rs/app-server/src/in_process.rs index 4f79b1445..eda2c75da 100644 --- a/codex-rs/app-server/src/in_process.rs +++ b/codex-rs/app-server/src/in_process.rs @@ -64,6 +64,7 @@ use crate::outgoing_message::QueuedOutgoingMessage; use crate::transport::CHANNEL_CAPACITY; use crate::transport::OutboundConnectionState; use crate::transport::route_outgoing_envelope; +use codex_analytics::AppServerRpcTransport; use codex_app_server_protocol::ClientNotification; use codex_app_server_protocol::ClientRequest; use codex_app_server_protocol::ConfigWarningNotification; @@ -74,7 +75,6 @@ use codex_app_server_protocol::Result; use codex_app_server_protocol::ServerNotification; use codex_app_server_protocol::ServerRequest; use codex_arg0::Arg0DispatchPaths; -use codex_core::AppServerRpcTransport; use codex_core::config::Config; use codex_core::config_loader::CloudRequirementsLoader; use codex_core::config_loader::LoaderOverrides; diff --git a/codex-rs/app-server/src/lib.rs b/codex-rs/app-server/src/lib.rs index d2bae7ccd..a4e458abf 100644 --- a/codex-rs/app-server/src/lib.rs +++ b/codex-rs/app-server/src/lib.rs @@ -2,7 +2,6 @@ use codex_arg0::Arg0DispatchPaths; use codex_cloud_requirements::cloud_requirements_loader; -use codex_core::AuthManager; use codex_core::config::Config; use codex_core::config::ConfigBuilder; use codex_core::config_loader::CloudRequirementsLoader; @@ -31,18 +30,19 @@ use crate::transport::auth::policy_from_settings; use crate::transport::route_outgoing_envelope; use crate::transport::start_stdio_connection; use crate::transport::start_websocket_acceptor; +use codex_analytics::AppServerRpcTransport; use codex_app_server_protocol::ConfigLayerSource; use codex_app_server_protocol::ConfigWarningNotification; use codex_app_server_protocol::JSONRPCMessage; use codex_app_server_protocol::TextPosition as AppTextPosition; use codex_app_server_protocol::TextRange as AppTextRange; -use codex_core::AppServerRpcTransport; use codex_core::ExecPolicyError; use codex_core::check_execpolicy_for_warnings; use codex_core::config_loader::ConfigLoadError; use codex_core::config_loader::TextRange as CoreTextRange; use codex_exec_server::EnvironmentManager; use codex_feedback::CodexFeedback; +use codex_login::AuthManager; use codex_protocol::protocol::SessionSource; use codex_state::log_db; use tokio::sync::mpsc; diff --git a/codex-rs/app-server/src/message_processor.rs b/codex-rs/app-server/src/message_processor.rs index 47be1e1e5..c63d0a83c 100644 --- a/codex-rs/app-server/src/message_processor.rs +++ b/codex-rs/app-server/src/message_processor.rs @@ -20,6 +20,8 @@ use crate::outgoing_message::OutgoingMessageSender; use crate::outgoing_message::RequestContext; use crate::transport::AppServerTransport; use async_trait::async_trait; +use codex_analytics::AnalyticsEventsClient; +use codex_analytics::AppServerRpcTransport; use codex_app_server_protocol::AppListUpdatedNotification; use codex_app_server_protocol::ChatgptAuthTokensRefreshParams; use codex_app_server_protocol::ChatgptAuthTokensRefreshReason; @@ -55,27 +57,25 @@ use codex_app_server_protocol::ServerRequestPayload; use codex_app_server_protocol::experimental_required_message; use codex_arg0::Arg0DispatchPaths; use codex_chatgpt::connectors; -use codex_core::AnalyticsEventsClient; -use codex_core::AppServerRpcTransport; -use codex_core::AuthManager; use codex_core::ThreadManager; use codex_core::config::Config; use codex_core::config_loader::CloudRequirementsLoader; use codex_core::config_loader::LoaderOverrides; -use codex_core::default_client::SetOriginatorError; -use codex_core::default_client::USER_AGENT_SUFFIX; -use codex_core::default_client::get_codex_user_agent; -use codex_core::default_client::set_default_client_residency_requirement; -use codex_core::default_client::set_default_originator; use codex_core::models_manager::collaboration_mode_presets::CollaborationModesConfig; use codex_exec_server::EnvironmentManager; use codex_features::Feature; use codex_feedback::CodexFeedback; +use codex_login::AuthManager; use codex_login::AuthMode as LoginAuthMode; use codex_login::auth::ExternalAuth; use codex_login::auth::ExternalAuthRefreshContext; use codex_login::auth::ExternalAuthRefreshReason; use codex_login::auth::ExternalAuthTokens; +use codex_login::default_client::SetOriginatorError; +use codex_login::default_client::USER_AGENT_SUFFIX; +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_protocol::ThreadId; use codex_protocol::protocol::SessionSource; use codex_protocol::protocol::W3cTraceContext; 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 44cbe21b6..d110f4fee 100644 --- a/codex-rs/app-server/src/message_processor/tracing_tests.rs +++ b/codex-rs/app-server/src/message_processor/tracing_tests.rs @@ -7,6 +7,7 @@ use crate::transport::AppServerTransport; use anyhow::Result; use app_test_support::create_mock_responses_server_repeating_assistant; use app_test_support::write_mock_responses_config_toml; +use codex_analytics::AppServerRpcTransport; use codex_app_server_protocol::ClientInfo; use codex_app_server_protocol::ClientRequest; use codex_app_server_protocol::InitializeCapabilities; @@ -20,7 +21,6 @@ use codex_app_server_protocol::TurnStartParams; use codex_app_server_protocol::TurnStartResponse; use codex_app_server_protocol::UserInput; use codex_arg0::Arg0DispatchPaths; -use codex_core::AppServerRpcTransport; use codex_core::config::Config; use codex_core::config::ConfigBuilder; use codex_core::config_loader::CloudRequirementsLoader; diff --git a/codex-rs/app-server/tests/common/auth_fixtures.rs b/codex-rs/app-server/tests/common/auth_fixtures.rs index d814dece4..dfda24725 100644 --- a/codex-rs/app-server/tests/common/auth_fixtures.rs +++ b/codex-rs/app-server/tests/common/auth_fixtures.rs @@ -7,9 +7,9 @@ use base64::engine::general_purpose::URL_SAFE_NO_PAD; use chrono::DateTime; use chrono::Utc; use codex_app_server_protocol::AuthMode; -use codex_core::auth::AuthCredentialsStoreMode; -use codex_core::auth::AuthDotJson; -use codex_core::auth::save_auth; +use codex_login::AuthCredentialsStoreMode; +use codex_login::AuthDotJson; +use codex_login::save_auth; use codex_login::token_data::TokenData; use codex_login::token_data::parse_chatgpt_jwt_claims; use serde_json::json; diff --git a/codex-rs/app-server/tests/common/mcp_process.rs b/codex-rs/app-server/tests/common/mcp_process.rs index 0345028d8..a94b601d5 100644 --- a/codex-rs/app-server/tests/common/mcp_process.rs +++ b/codex-rs/app-server/tests/common/mcp_process.rs @@ -79,7 +79,7 @@ use codex_app_server_protocol::TurnInterruptParams; use codex_app_server_protocol::TurnStartParams; use codex_app_server_protocol::TurnSteerParams; use codex_app_server_protocol::WindowsSandboxSetupStartParams; -use codex_core::default_client::CODEX_INTERNAL_ORIGINATOR_OVERRIDE_ENV_VAR; +use codex_login::default_client::CODEX_INTERNAL_ORIGINATOR_OVERRIDE_ENV_VAR; use tokio::process::Command; pub struct McpProcess { diff --git a/codex-rs/app-server/tests/suite/auth.rs b/codex-rs/app-server/tests/suite/auth.rs index 769d73b82..78572d8ce 100644 --- a/codex-rs/app-server/tests/suite/auth.rs +++ b/codex-rs/app-server/tests/suite/auth.rs @@ -12,8 +12,8 @@ use codex_app_server_protocol::JSONRPCError; use codex_app_server_protocol::JSONRPCResponse; use codex_app_server_protocol::LoginAccountResponse; use codex_app_server_protocol::RequestId; -use codex_core::auth::AuthCredentialsStoreMode; -use codex_core::auth::REFRESH_TOKEN_URL_OVERRIDE_ENV_VAR; +use codex_login::AuthCredentialsStoreMode; +use codex_login::REFRESH_TOKEN_URL_OVERRIDE_ENV_VAR; use pretty_assertions::assert_eq; use std::path::Path; use tempfile::TempDir; diff --git a/codex-rs/app-server/tests/suite/v2/account.rs b/codex-rs/app-server/tests/suite/v2/account.rs index 1505060a9..0755c3755 100644 --- a/codex-rs/app-server/tests/suite/v2/account.rs +++ b/codex-rs/app-server/tests/suite/v2/account.rs @@ -28,7 +28,7 @@ use codex_app_server_protocol::ServerNotification; use codex_app_server_protocol::ServerRequest; use codex_app_server_protocol::TurnCompletedNotification; use codex_app_server_protocol::TurnStatus; -use codex_core::auth::AuthCredentialsStoreMode; +use codex_login::AuthCredentialsStoreMode; use codex_login::login_with_api_key; use codex_protocol::account::PlanType as AccountPlanType; use core_test_support::responses; diff --git a/codex-rs/app-server/tests/suite/v2/analytics.rs b/codex-rs/app-server/tests/suite/v2/analytics.rs index bd9276ddc..d4884d133 100644 --- a/codex-rs/app-server/tests/suite/v2/analytics.rs +++ b/codex-rs/app-server/tests/suite/v2/analytics.rs @@ -2,10 +2,10 @@ use anyhow::Result; use app_test_support::ChatGptAuthFixture; use app_test_support::DEFAULT_CLIENT_NAME; use app_test_support::write_chatgpt_auth; -use codex_core::auth::AuthCredentialsStoreMode; use codex_core::config::ConfigBuilder; use codex_core::config::types::OtelExporterKind; use codex_core::config::types::OtelHttpProtocol; +use codex_login::AuthCredentialsStoreMode; use pretty_assertions::assert_eq; use serde_json::Value; use std::collections::HashMap; diff --git a/codex-rs/app-server/tests/suite/v2/app_list.rs b/codex-rs/app-server/tests/suite/v2/app_list.rs index 23ffa80a6..d8cedf2a4 100644 --- a/codex-rs/app-server/tests/suite/v2/app_list.rs +++ b/codex-rs/app-server/tests/suite/v2/app_list.rs @@ -35,9 +35,9 @@ use codex_app_server_protocol::RequestId; use codex_app_server_protocol::ServerNotification; use codex_app_server_protocol::ThreadStartParams; use codex_app_server_protocol::ThreadStartResponse; -use codex_core::auth::AuthCredentialsStoreMode; -use codex_core::auth::AuthDotJson; -use codex_core::auth::save_auth; +use codex_login::AuthCredentialsStoreMode; +use codex_login::AuthDotJson; +use codex_login::save_auth; use pretty_assertions::assert_eq; use rmcp::handler::server::ServerHandler; use rmcp::model::JsonObject; diff --git a/codex-rs/app-server/tests/suite/v2/compaction.rs b/codex-rs/app-server/tests/suite/v2/compaction.rs index a1bde9e96..8849b39ab 100644 --- a/codex-rs/app-server/tests/suite/v2/compaction.rs +++ b/codex-rs/app-server/tests/suite/v2/compaction.rs @@ -28,7 +28,7 @@ use codex_app_server_protocol::TurnCompletedNotification; use codex_app_server_protocol::TurnStartParams; use codex_app_server_protocol::TurnStartResponse; use codex_app_server_protocol::UserInput as V2UserInput; -use codex_core::auth::AuthCredentialsStoreMode; +use codex_login::AuthCredentialsStoreMode; use codex_protocol::models::ContentItem; use codex_protocol::models::ResponseItem; use core_test_support::responses; diff --git a/codex-rs/app-server/tests/suite/v2/mcp_server_elicitation.rs b/codex-rs/app-server/tests/suite/v2/mcp_server_elicitation.rs index a784b3490..7a50092b9 100644 --- a/codex-rs/app-server/tests/suite/v2/mcp_server_elicitation.rs +++ b/codex-rs/app-server/tests/suite/v2/mcp_server_elicitation.rs @@ -31,7 +31,7 @@ use codex_app_server_protocol::TurnStartParams; use codex_app_server_protocol::TurnStartResponse; use codex_app_server_protocol::TurnStatus; use codex_app_server_protocol::UserInput as V2UserInput; -use codex_core::auth::AuthCredentialsStoreMode; +use codex_login::AuthCredentialsStoreMode; use core_test_support::responses; use pretty_assertions::assert_eq; use rmcp::handler::server::ServerHandler; diff --git a/codex-rs/app-server/tests/suite/v2/plugin_install.rs b/codex-rs/app-server/tests/suite/v2/plugin_install.rs index 90a7d813b..95630079c 100644 --- a/codex-rs/app-server/tests/suite/v2/plugin_install.rs +++ b/codex-rs/app-server/tests/suite/v2/plugin_install.rs @@ -25,7 +25,7 @@ use codex_app_server_protocol::PluginAuthPolicy; use codex_app_server_protocol::PluginInstallParams; use codex_app_server_protocol::PluginInstallResponse; use codex_app_server_protocol::RequestId; -use codex_core::auth::AuthCredentialsStoreMode; +use codex_login::AuthCredentialsStoreMode; use codex_utils_absolute_path::AbsolutePathBuf; use pretty_assertions::assert_eq; use rmcp::handler::server::ServerHandler; diff --git a/codex-rs/app-server/tests/suite/v2/plugin_list.rs b/codex-rs/app-server/tests/suite/v2/plugin_list.rs index 4136c6d67..d1ee1aa20 100644 --- a/codex-rs/app-server/tests/suite/v2/plugin_list.rs +++ b/codex-rs/app-server/tests/suite/v2/plugin_list.rs @@ -15,8 +15,8 @@ use codex_app_server_protocol::PluginMarketplaceEntry; use codex_app_server_protocol::PluginSource; use codex_app_server_protocol::PluginSummary; use codex_app_server_protocol::RequestId; -use codex_core::auth::AuthCredentialsStoreMode; use codex_core::config::set_project_trust_level; +use codex_login::AuthCredentialsStoreMode; use codex_protocol::config_types::TrustLevel; use codex_utils_absolute_path::AbsolutePathBuf; use pretty_assertions::assert_eq; diff --git a/codex-rs/app-server/tests/suite/v2/plugin_read.rs b/codex-rs/app-server/tests/suite/v2/plugin_read.rs index 977ceb269..32e799468 100644 --- a/codex-rs/app-server/tests/suite/v2/plugin_read.rs +++ b/codex-rs/app-server/tests/suite/v2/plugin_read.rs @@ -23,7 +23,7 @@ use codex_app_server_protocol::PluginInstallPolicy; use codex_app_server_protocol::PluginReadParams; use codex_app_server_protocol::PluginReadResponse; use codex_app_server_protocol::RequestId; -use codex_core::auth::AuthCredentialsStoreMode; +use codex_login::AuthCredentialsStoreMode; use codex_utils_absolute_path::AbsolutePathBuf; use pretty_assertions::assert_eq; use rmcp::handler::server::ServerHandler; diff --git a/codex-rs/app-server/tests/suite/v2/plugin_uninstall.rs b/codex-rs/app-server/tests/suite/v2/plugin_uninstall.rs index 6e0938aa5..d0122c62f 100644 --- a/codex-rs/app-server/tests/suite/v2/plugin_uninstall.rs +++ b/codex-rs/app-server/tests/suite/v2/plugin_uninstall.rs @@ -11,7 +11,7 @@ use codex_app_server_protocol::JSONRPCResponse; use codex_app_server_protocol::PluginUninstallParams; use codex_app_server_protocol::PluginUninstallResponse; use codex_app_server_protocol::RequestId; -use codex_core::auth::AuthCredentialsStoreMode; +use codex_login::AuthCredentialsStoreMode; use pretty_assertions::assert_eq; use serde_json::json; use tempfile::TempDir; diff --git a/codex-rs/app-server/tests/suite/v2/rate_limits.rs b/codex-rs/app-server/tests/suite/v2/rate_limits.rs index 51048202f..64c155081 100644 --- a/codex-rs/app-server/tests/suite/v2/rate_limits.rs +++ b/codex-rs/app-server/tests/suite/v2/rate_limits.rs @@ -10,7 +10,7 @@ use codex_app_server_protocol::LoginAccountResponse; use codex_app_server_protocol::RateLimitSnapshot; use codex_app_server_protocol::RateLimitWindow; use codex_app_server_protocol::RequestId; -use codex_core::auth::AuthCredentialsStoreMode; +use codex_login::AuthCredentialsStoreMode; use codex_protocol::account::PlanType as AccountPlanType; use pretty_assertions::assert_eq; use serde_json::json; diff --git a/codex-rs/app-server/tests/suite/v2/thread_fork.rs b/codex-rs/app-server/tests/suite/v2/thread_fork.rs index dc68992fe..0a62ad7ff 100644 --- a/codex-rs/app-server/tests/suite/v2/thread_fork.rs +++ b/codex-rs/app-server/tests/suite/v2/thread_fork.rs @@ -24,8 +24,8 @@ use codex_app_server_protocol::TurnStartParams; use codex_app_server_protocol::TurnStartResponse; use codex_app_server_protocol::TurnStatus; use codex_app_server_protocol::UserInput; -use codex_core::auth::AuthCredentialsStoreMode; -use codex_core::auth::REFRESH_TOKEN_URL_OVERRIDE_ENV_VAR; +use codex_login::AuthCredentialsStoreMode; +use codex_login::REFRESH_TOKEN_URL_OVERRIDE_ENV_VAR; use pretty_assertions::assert_eq; use serde_json::Value; use serde_json::json; diff --git a/codex-rs/app-server/tests/suite/v2/thread_metadata_update.rs b/codex-rs/app-server/tests/suite/v2/thread_metadata_update.rs index 9ce233f94..8bf9a8a9a 100644 --- a/codex-rs/app-server/tests/suite/v2/thread_metadata_update.rs +++ b/codex-rs/app-server/tests/suite/v2/thread_metadata_update.rs @@ -19,10 +19,10 @@ use codex_app_server_protocol::ThreadStartParams; use codex_app_server_protocol::ThreadStartResponse; use codex_app_server_protocol::ThreadStatus; use codex_core::ARCHIVED_SESSIONS_SUBDIR; -use codex_core::state_db::reconcile_rollout; use codex_git_utils::GitSha; use codex_protocol::ThreadId; use codex_protocol::protocol::GitInfo as RolloutGitInfo; +use codex_rollout::state_db::reconcile_rollout; use codex_state::StateRuntime; use pretty_assertions::assert_eq; use serde_json::Value; diff --git a/codex-rs/app-server/tests/suite/v2/thread_resume.rs b/codex-rs/app-server/tests/suite/v2/thread_resume.rs index 3a9345132..83ed147e1 100644 --- a/codex-rs/app-server/tests/suite/v2/thread_resume.rs +++ b/codex-rs/app-server/tests/suite/v2/thread_resume.rs @@ -38,8 +38,8 @@ use codex_app_server_protocol::TurnStartParams; use codex_app_server_protocol::TurnStartResponse; use codex_app_server_protocol::TurnStatus; use codex_app_server_protocol::UserInput; -use codex_core::auth::AuthCredentialsStoreMode; -use codex_core::auth::REFRESH_TOKEN_URL_OVERRIDE_ENV_VAR; +use codex_login::AuthCredentialsStoreMode; +use codex_login::REFRESH_TOKEN_URL_OVERRIDE_ENV_VAR; use codex_protocol::ThreadId; use codex_protocol::config_types::Personality; use codex_protocol::models::ContentItem; diff --git a/codex-rs/app-server/tests/suite/v2/thread_start.rs b/codex-rs/app-server/tests/suite/v2/thread_start.rs index c684bd233..979c36e11 100644 --- a/codex-rs/app-server/tests/suite/v2/thread_start.rs +++ b/codex-rs/app-server/tests/suite/v2/thread_start.rs @@ -16,9 +16,9 @@ use codex_app_server_protocol::ThreadStartResponse; use codex_app_server_protocol::ThreadStartedNotification; use codex_app_server_protocol::ThreadStatus; use codex_app_server_protocol::ThreadStatusChangedNotification; -use codex_core::auth::AuthCredentialsStoreMode; -use codex_core::auth::REFRESH_TOKEN_URL_OVERRIDE_ENV_VAR; use codex_core::config::set_project_trust_level; +use codex_login::AuthCredentialsStoreMode; +use codex_login::REFRESH_TOKEN_URL_OVERRIDE_ENV_VAR; use codex_protocol::config_types::ServiceTier; use codex_protocol::config_types::TrustLevel; use codex_protocol::openai_models::ReasoningEffort; diff --git a/codex-rs/backend-client/Cargo.toml b/codex-rs/backend-client/Cargo.toml index 96e9d7359..1707d45b1 100644 --- a/codex-rs/backend-client/Cargo.toml +++ b/codex-rs/backend-client/Cargo.toml @@ -18,8 +18,8 @@ serde_json = "1" reqwest = { version = "0.12", default-features = false, features = ["json", "rustls-tls"] } codex-backend-openapi-models = { path = "../codex-backend-openapi-models" } codex-client = { workspace = true } +codex-login = { workspace = true } codex-protocol = { workspace = true } -codex-core = { workspace = true } [dev-dependencies] pretty_assertions = "1" diff --git a/codex-rs/backend-client/src/client.rs b/codex-rs/backend-client/src/client.rs index cb1e003ff..3d5beb9d1 100644 --- a/codex-rs/backend-client/src/client.rs +++ b/codex-rs/backend-client/src/client.rs @@ -5,8 +5,8 @@ use crate::types::RateLimitStatusPayload; use crate::types::TurnAttemptsSiblingTurnsResponse; use anyhow::Result; use codex_client::build_reqwest_client_with_custom_ca; -use codex_core::auth::CodexAuth; -use codex_core::default_client::get_codex_user_agent; +use codex_login::CodexAuth; +use codex_login::default_client::get_codex_user_agent; use codex_protocol::account::PlanType as AccountPlanType; use codex_protocol::protocol::CreditsSnapshot; use codex_protocol::protocol::RateLimitSnapshot; diff --git a/codex-rs/chatgpt/src/chatgpt_client.rs b/codex-rs/chatgpt/src/chatgpt_client.rs index 5d02bdac7..fa3a63dad 100644 --- a/codex-rs/chatgpt/src/chatgpt_client.rs +++ b/codex-rs/chatgpt/src/chatgpt_client.rs @@ -1,5 +1,5 @@ use codex_core::config::Config; -use codex_core::default_client::create_client; +use codex_login::default_client::create_client; use crate::chatgpt_token::get_chatgpt_token_data; use crate::chatgpt_token::init_chatgpt_token_from_auth; diff --git a/codex-rs/chatgpt/src/chatgpt_token.rs b/codex-rs/chatgpt/src/chatgpt_token.rs index ceca132e9..4f6c492a4 100644 --- a/codex-rs/chatgpt/src/chatgpt_token.rs +++ b/codex-rs/chatgpt/src/chatgpt_token.rs @@ -1,11 +1,10 @@ -use codex_core::AuthManager; +use codex_login::AuthCredentialsStoreMode; +use codex_login::AuthManager; use codex_login::token_data::TokenData; use std::path::Path; use std::sync::LazyLock; use std::sync::RwLock; -use codex_core::auth::AuthCredentialsStoreMode; - static CHATGPT_TOKEN: LazyLock>> = LazyLock::new(|| RwLock::new(None)); pub fn get_chatgpt_token_data() -> Option { diff --git a/codex-rs/chatgpt/src/connectors.rs b/codex-rs/chatgpt/src/connectors.rs index aa13d70d4..8ba12b346 100644 --- a/codex-rs/chatgpt/src/connectors.rs +++ b/codex-rs/chatgpt/src/connectors.rs @@ -1,5 +1,5 @@ -use codex_core::AuthManager; use codex_core::config::Config; +use codex_login::AuthManager; use codex_login::token_data::TokenData; use std::collections::HashSet; use std::time::Duration; diff --git a/codex-rs/cli/Cargo.toml b/codex-rs/cli/Cargo.toml index db2f9a396..8ba27b333 100644 --- a/codex-rs/cli/Cargo.toml +++ b/codex-rs/cli/Cargo.toml @@ -42,6 +42,7 @@ codex-state = { workspace = true } codex-stdio-to-uds = { workspace = true } codex-terminal-detection = { workspace = true } codex-tui = { workspace = true } +codex-utils-path = { workspace = true } libc = { workspace = true } owo-colors = { workspace = true } regex-lite = { workspace = true } diff --git a/codex-rs/cli/src/login.rs b/codex-rs/cli/src/login.rs index d0cc1a3a1..f4e20effb 100644 --- a/codex-rs/cli/src/login.rs +++ b/codex-rs/cli/src/login.rs @@ -7,14 +7,14 @@ //! into a one-shot CLI command while still producing a durable `codex-login.log` artifact that //! support can request from users. -use codex_core::CodexAuth; -use codex_core::auth::AuthCredentialsStoreMode; -use codex_core::auth::AuthMode; -use codex_core::auth::CLIENT_ID; -use codex_core::auth::login_with_api_key; -use codex_core::auth::logout; use codex_core::config::Config; +use codex_login::AuthCredentialsStoreMode; +use codex_login::AuthMode; +use codex_login::CLIENT_ID; +use codex_login::CodexAuth; use codex_login::ServerOptions; +use codex_login::login_with_api_key; +use codex_login::logout; use codex_login::run_device_code_login; use codex_login::run_login_server; use codex_protocol::config_types::ForcedLoginMethod; diff --git a/codex-rs/cli/src/wsl_paths.rs b/codex-rs/cli/src/wsl_paths.rs index b6ceb2e0b..28366579e 100644 --- a/codex-rs/cli/src/wsl_paths.rs +++ b/codex-rs/cli/src/wsl_paths.rs @@ -1,7 +1,7 @@ use std::ffi::OsStr; /// Returns true if the current process is running under WSL. -pub use codex_core::env::is_wsl; +pub use codex_utils_path::env::is_wsl; /// Convert a Windows absolute path (`C:\foo\bar` or `C:/foo/bar`) to a WSL mount path (`/mnt/c/foo/bar`). /// Returns `None` if the input does not look like a Windows drive path. diff --git a/codex-rs/cloud-requirements/Cargo.toml b/codex-rs/cloud-requirements/Cargo.toml index bbaa3a6db..9eda7a7c3 100644 --- a/codex-rs/cloud-requirements/Cargo.toml +++ b/codex-rs/cloud-requirements/Cargo.toml @@ -13,6 +13,7 @@ base64 = { workspace = true } chrono = { workspace = true, features = ["serde"] } codex-backend-client = { workspace = true } codex-core = { workspace = true } +codex-login = { workspace = true } codex-otel = { workspace = true } codex-protocol = { workspace = true } hmac = "0.12.1" diff --git a/codex-rs/cloud-requirements/src/lib.rs b/codex-rs/cloud-requirements/src/lib.rs index b5080ea63..1befb936c 100644 --- a/codex-rs/cloud-requirements/src/lib.rs +++ b/codex-rs/cloud-requirements/src/lib.rs @@ -15,15 +15,15 @@ use chrono::DateTime; use chrono::Duration as ChronoDuration; use chrono::Utc; use codex_backend_client::Client as BackendClient; -use codex_core::AuthManager; -use codex_core::auth::AuthCredentialsStoreMode; -use codex_core::auth::CodexAuth; -use codex_core::auth::RefreshTokenError; use codex_core::config_loader::CloudRequirementsLoadError; use codex_core::config_loader::CloudRequirementsLoadErrorCode; use codex_core::config_loader::CloudRequirementsLoader; use codex_core::config_loader::ConfigRequirementsToml; use codex_core::util::backoff; +use codex_login::AuthCredentialsStoreMode; +use codex_login::AuthManager; +use codex_login::CodexAuth; +use codex_login::RefreshTokenError; use codex_protocol::account::PlanType; use hmac::Hmac; use hmac::Mac; @@ -820,7 +820,7 @@ mod tests { use super::*; use base64::Engine; use base64::engine::general_purpose::URL_SAFE_NO_PAD; - use codex_core::auth::AuthCredentialsStoreMode; + use codex_login::AuthCredentialsStoreMode; use codex_protocol::protocol::AskForApproval; use pretty_assertions::assert_eq; use serde_json::json; diff --git a/codex-rs/cloud-tasks/src/lib.rs b/codex-rs/cloud-tasks/src/lib.rs index f7698a300..f96ac62ed 100644 --- a/codex-rs/cloud-tasks/src/lib.rs +++ b/codex-rs/cloud-tasks/src/lib.rs @@ -12,6 +12,7 @@ use chrono::Utc; use codex_cloud_tasks_client::TaskStatus; use codex_git_utils::current_branch_name; use codex_git_utils::default_branch_name; +use codex_login::default_client::get_codex_user_agent; use owo_colors::OwoColorize; use owo_colors::Stream; use std::cmp::Ordering; @@ -58,7 +59,7 @@ async fn init_backend(user_agent_suffix: &str) -> anyhow::Result }); } - let ua = codex_core::default_client::get_codex_user_agent(); + let ua = get_codex_user_agent(); let mut http = codex_cloud_tasks_client::HttpClient::new(base_url.clone())?.with_user_agent(ua); let style = if base_url.contains("/backend-api") { "wham" @@ -804,7 +805,7 @@ pub async fn run_main(cli: Cli, _codex_linux_sandbox_exe: Option) -> an append_error_log(format!( "startup: wham_force_internal={} ua={}", force_internal, - codex_core::default_client::get_codex_user_agent() + get_codex_user_agent() )); // Non-blocking initial load so the in-box spinner can animate app.status = "Loading tasks…".to_string(); diff --git a/codex-rs/cloud-tasks/src/util.rs b/codex-rs/cloud-tasks/src/util.rs index 0dcf18432..090eec227 100644 --- a/codex-rs/cloud-tasks/src/util.rs +++ b/codex-rs/cloud-tasks/src/util.rs @@ -8,7 +8,7 @@ use codex_core::config::Config; use codex_login::AuthManager; pub fn set_user_agent_suffix(suffix: &str) { - if let Ok(mut guard) = codex_core::default_client::USER_AGENT_SUFFIX.lock() { + if let Ok(mut guard) = codex_login::default_client::USER_AGENT_SUFFIX.lock() { guard.replace(suffix.to_string()); } } @@ -78,7 +78,7 @@ pub async fn build_chatgpt_headers() -> HeaderMap { use reqwest::header::USER_AGENT; set_user_agent_suffix("codex_cloud_tasks_tui"); - let ua = codex_core::default_client::get_codex_user_agent(); + let ua = codex_login::default_client::get_codex_user_agent(); let mut headers = HeaderMap::new(); headers.insert( USER_AGENT, diff --git a/codex-rs/core/src/agent/control.rs b/codex-rs/core/src/agent/control.rs index c522acd1c..2b4409c27 100644 --- a/codex-rs/core/src/agent/control.rs +++ b/codex-rs/core/src/agent/control.rs @@ -13,7 +13,6 @@ use crate::rollout::RolloutRecorder; use crate::session_prefix::format_subagent_context_line; use crate::session_prefix::format_subagent_notification_message; use crate::shell_snapshot::ShellSnapshot; -use crate::state_db; use crate::thread_manager::ThreadManagerState; use crate::thread_rollout_truncation::truncate_rollout_to_last_n_fork_turns; use codex_features::Feature; @@ -29,6 +28,7 @@ use codex_protocol::protocol::SessionSource; use codex_protocol::protocol::SubAgentSource; use codex_protocol::protocol::TokenUsage; use codex_protocol::user_input::UserInput; +use codex_rollout::state_db; use codex_state::DirectionalThreadSpawnEdgeStatus; use serde::Serialize; use std::collections::HashMap; diff --git a/codex-rs/core/src/agent/control_tests.rs b/codex-rs/core/src/agent/control_tests.rs index 834ab2037..e92ef67a7 100644 --- a/codex-rs/core/src/agent/control_tests.rs +++ b/codex-rs/core/src/agent/control_tests.rs @@ -1,5 +1,4 @@ use super::*; -use crate::CodexAuth; use crate::CodexThread; use crate::ThreadManager; use crate::agent::agent_status_from_event; @@ -11,6 +10,7 @@ use crate::contextual_user_message::SUBAGENT_NOTIFICATION_OPEN_TAG; use assert_matches::assert_matches; use chrono::Utc; use codex_features::Feature; +use codex_login::CodexAuth; use codex_protocol::AgentPath; use codex_protocol::config_types::ModeKind; use codex_protocol::models::ContentItem; diff --git a/codex-rs/core/src/api_bridge.rs b/codex-rs/core/src/api_bridge.rs index e7826f9ac..8f900b724 100644 --- a/codex-rs/core/src/api_bridge.rs +++ b/codex-rs/core/src/api_bridge.rs @@ -11,12 +11,12 @@ use http::HeaderMap; use serde::Deserialize; use serde_json::Value; -use crate::auth::CodexAuth; use crate::error::CodexErr; use crate::error::RetryLimitReachedError; use crate::error::UnexpectedResponseError; use crate::error::UsageLimitReachedError; use crate::model_provider_info::ModelProviderInfo; +use codex_login::CodexAuth; pub(crate) fn map_api_error(err: ApiError) -> CodexErr { match err { diff --git a/codex-rs/core/src/apply_patch.rs b/codex-rs/core/src/apply_patch.rs index 9a09ae9f0..0810d319b 100644 --- a/codex-rs/core/src/apply_patch.rs +++ b/codex-rs/core/src/apply_patch.rs @@ -1,12 +1,12 @@ use crate::codex::TurnContext; use crate::function_tool::FunctionCallError; -use crate::protocol::FileChange; -use crate::protocol::FileSystemSandboxPolicy; use crate::safety::SafetyCheck; use crate::safety::assess_patch_safety; use crate::tools::sandboxing::ExecApprovalRequirement; use codex_apply_patch::ApplyPatchAction; use codex_apply_patch::ApplyPatchFileChange; +use codex_protocol::protocol::FileChange; +use codex_protocol::protocol::FileSystemSandboxPolicy; use std::collections::HashMap; use std::path::PathBuf; diff --git a/codex-rs/core/src/arc_monitor.rs b/codex-rs/core/src/arc_monitor.rs index ba9a886de..13f33f6c9 100644 --- a/codex-rs/core/src/arc_monitor.rs +++ b/codex-rs/core/src/arc_monitor.rs @@ -8,8 +8,9 @@ use tracing::warn; use crate::codex::Session; use crate::codex::TurnContext; use crate::compact::content_items_to_text; -use crate::default_client::build_reqwest_client; use crate::event_mapping::is_contextual_user_message_content; +use codex_login::CodexAuth; +use codex_login::default_client::build_reqwest_client; use codex_protocol::models::MessagePhase; use codex_protocol::models::ResponseItem; @@ -147,10 +148,7 @@ pub(crate) async fn monitor_action( .timeout(ARC_MONITOR_TIMEOUT) .json(&body) .bearer_auth(token); - if let Some(account_id) = auth - .as_ref() - .and_then(crate::auth::CodexAuth::get_account_id) - { + if let Some(account_id) = auth.as_ref().and_then(CodexAuth::get_account_id) { request = request.header("chatgpt-account-id", account_id); } diff --git a/codex-rs/core/src/arc_monitor_tests.rs b/codex-rs/core/src/arc_monitor_tests.rs index ab88fddca..a7ba23997 100644 --- a/codex-rs/core/src/arc_monitor_tests.rs +++ b/codex-rs/core/src/arc_monitor_tests.rs @@ -253,7 +253,7 @@ async fn monitor_action_posts_expected_arc_request() { let server = MockServer::start().await; let (session, mut turn_context) = make_session_and_context().await; turn_context.auth_manager = Some(crate::test_support::auth_manager_from_auth( - crate::CodexAuth::create_dummy_chatgpt_auth_for_testing(), + codex_login::CodexAuth::create_dummy_chatgpt_auth_for_testing(), )); turn_context.developer_instructions = Some("Developer policy".to_string()); turn_context.user_instructions = Some("User policy".to_string()); @@ -407,7 +407,7 @@ async fn monitor_action_rejects_legacy_response_fields() { let (session, mut turn_context) = make_session_and_context().await; turn_context.auth_manager = Some(crate::test_support::auth_manager_from_auth( - crate::CodexAuth::create_dummy_chatgpt_auth_for_testing(), + codex_login::CodexAuth::create_dummy_chatgpt_auth_for_testing(), )); let mut config = (*turn_context.config).clone(); config.chatgpt_base_url = server.uri(); diff --git a/codex-rs/core/src/auth_env_telemetry.rs b/codex-rs/core/src/auth_env_telemetry.rs index 583d79de1..b87dd42cc 100644 --- a/codex-rs/core/src/auth_env_telemetry.rs +++ b/codex-rs/core/src/auth_env_telemetry.rs @@ -1,9 +1,9 @@ use codex_otel::AuthEnvTelemetryMetadata; -use crate::auth::CODEX_API_KEY_ENV_VAR; -use crate::auth::OPENAI_API_KEY_ENV_VAR; -use crate::auth::REFRESH_TOKEN_URL_OVERRIDE_ENV_VAR; use crate::model_provider_info::ModelProviderInfo; +use codex_login::CODEX_API_KEY_ENV_VAR; +use codex_login::OPENAI_API_KEY_ENV_VAR; +use codex_login::REFRESH_TOKEN_URL_OVERRIDE_ENV_VAR; #[derive(Debug, Clone, Default, PartialEq, Eq)] pub(crate) struct AuthEnvTelemetry { diff --git a/codex-rs/core/src/client.rs b/codex-rs/core/src/client.rs index 57e5db1d0..407c4f2e9 100644 --- a/codex-rs/core/src/client.rs +++ b/codex-rs/core/src/client.rs @@ -33,7 +33,6 @@ use std::sync::atomic::Ordering; use crate::api_bridge::CoreAuthProvider; use crate::api_bridge::auth_provider_from_auth; use crate::api_bridge::map_api_error; -use crate::auth::UnauthorizedRecovery; use crate::auth_env_telemetry::AuthEnvTelemetry; use crate::auth_env_telemetry::collect_auth_env_telemetry; use codex_api::CompactClient as ApiCompactClient; @@ -60,6 +59,12 @@ use codex_api::create_text_param_for_request; use codex_api::error::ApiError; use codex_api::requests::responses::Compression; use codex_api::response_create_client_metadata; +use codex_login::AuthManager; +use codex_login::AuthMode; +use codex_login::CodexAuth; +use codex_login::RefreshTokenError; +use codex_login::UnauthorizedRecovery; +use codex_login::default_client::build_reqwest_client; use codex_otel::SessionTelemetry; use codex_otel::current_span_w3c_trace_context; @@ -71,6 +76,7 @@ use codex_protocol::models::ResponseItem; use codex_protocol::openai_models::ModelInfo; use codex_protocol::openai_models::ReasoningEffort as ReasoningEffortConfig; use codex_protocol::protocol::SessionSource; +use codex_protocol::protocol::SubAgentSource; use codex_protocol::protocol::W3cTraceContext; use codex_tools::create_tools_json_for_responses_api; use eventsource_stream::Event; @@ -91,14 +97,9 @@ use tracing::instrument; use tracing::trace; use tracing::warn; -use crate::AuthManager; -use crate::auth::AuthMode; -use crate::auth::CodexAuth; -use crate::auth::RefreshTokenError; use crate::client_common::Prompt; use crate::client_common::ResponseEvent; use crate::client_common::ResponseStream; -use crate::default_client::build_reqwest_client; use crate::error::CodexErr; use crate::error::Result; use crate::flags::CODEX_RS_SSE_FIXTURE; @@ -460,13 +461,11 @@ impl ModelClient { let mut extra_headers = ApiHeaderMap::new(); if let SessionSource::SubAgent(sub) = &self.state.session_source { let subagent = match sub { - crate::protocol::SubAgentSource::Review => "review".to_string(), - crate::protocol::SubAgentSource::Compact => "compact".to_string(), - crate::protocol::SubAgentSource::MemoryConsolidation => { - "memory_consolidation".to_string() - } - crate::protocol::SubAgentSource::ThreadSpawn { .. } => "collab_spawn".to_string(), - crate::protocol::SubAgentSource::Other(label) => label.clone(), + SubAgentSource::Review => "review".to_string(), + SubAgentSource::Compact => "compact".to_string(), + SubAgentSource::MemoryConsolidation => "memory_consolidation".to_string(), + SubAgentSource::ThreadSpawn { .. } => "collab_spawn".to_string(), + SubAgentSource::Other(label) => label.clone(), }; if let Ok(val) = HeaderValue::from_str(&subagent) { extra_headers.insert("x-openai-subagent", val); @@ -574,7 +573,7 @@ impl ModelClient { websocket_connect_timeout, ApiWebSocketResponsesClient::new(api_provider, api_auth).connect( headers, - crate::default_client::default_headers(), + codex_login::default_client::default_headers(), turn_state, Some(websocket_telemetry), ), @@ -972,7 +971,7 @@ impl ModelClientSession { )) } - fn responses_request_compression(&self, auth: Option<&crate::auth::CodexAuth>) -> Compression { + fn responses_request_compression(&self, auth: Option<&CodexAuth>) -> Compression { if self.client.state.enable_request_compression && auth.is_some_and(CodexAuth::is_chatgpt_auth) && self.client.state.provider.is_openai() @@ -1025,7 +1024,7 @@ impl ModelClientSession { let auth_manager = self.client.state.auth_manager.clone(); let mut auth_recovery = auth_manager .as_ref() - .map(super::auth::AuthManager::unauthorized_recovery); + .map(AuthManager::unauthorized_recovery); let mut pending_retry = PendingUnauthorizedRetry::default(); loop { let client_setup = self.client.current_client_setup().await?; @@ -1114,7 +1113,7 @@ impl ModelClientSession { let mut auth_recovery = auth_manager .as_ref() - .map(super::auth::AuthManager::unauthorized_recovery); + .map(AuthManager::unauthorized_recovery); let mut pending_retry = PendingUnauthorizedRetry::default(); loop { let client_setup = self.client.current_client_setup().await?; diff --git a/codex-rs/core/src/client_tests.rs b/codex-rs/core/src/client_tests.rs index b7d8075f0..53a110aca 100644 --- a/codex-rs/core/src/client_tests.rs +++ b/codex-rs/core/src/client_tests.rs @@ -105,7 +105,7 @@ async fn summarize_memories_returns_empty_for_empty_input() { #[test] fn auth_request_telemetry_context_tracks_attached_auth_and_retry_phase() { let auth_context = AuthRequestTelemetryContext::new( - Some(crate::auth::AuthMode::Chatgpt), + Some(codex_login::AuthMode::Chatgpt), &crate::api_bridge::CoreAuthProvider::for_test(Some("access-token"), Some("workspace-123")), PendingUnauthorizedRetry::from_recovery(UnauthorizedRecoveryExecution { mode: "managed", diff --git a/codex-rs/core/src/codex.rs b/codex-rs/core/src/codex.rs index a26adf97c..47c6cf860 100644 --- a/codex-rs/core/src/codex.rs +++ b/codex-rs/core/src/codex.rs @@ -6,9 +6,6 @@ use std::path::PathBuf; use std::sync::Arc; use std::sync::atomic::AtomicU64; -use crate::AuthManager; -use crate::CodexAuth; -use crate::SandboxState; use crate::agent::AgentControl; use crate::agent::AgentStatus; use crate::agent::Mailbox; @@ -30,7 +27,6 @@ use crate::exec_policy::ExecPolicyManager; use crate::models_manager::collaboration_mode_presets::CollaborationModesConfig; use crate::models_manager::manager::ModelsManager; use crate::models_manager::manager::RefreshStrategy; -use crate::parse_command::parse_command; use crate::parse_turn_item; use crate::path_utils::normalize_for_native_workdir; use crate::realtime_conversation::RealtimeConversationManager; @@ -71,6 +67,14 @@ use codex_hooks::HookPayload; use codex_hooks::HookResult; use codex_hooks::Hooks; use codex_hooks::HooksConfig; +use codex_login::AuthManager; +use codex_login::CodexAuth; +use codex_login::default_client::originator; +use codex_mcp::mcp_connection_manager::McpConnectionManager; +use codex_mcp::mcp_connection_manager::SandboxState; +use codex_mcp::mcp_connection_manager::ToolInfo as McpToolInfo; +use codex_mcp::mcp_connection_manager::codex_apps_tools_cache_key; +use codex_mcp::mcp_connection_manager::filter_non_codex_apps_mcp_tools_only; use codex_network_proxy::NetworkProxy; use codex_network_proxy::NetworkProxyAuditMetadata; use codex_network_proxy::normalize_host; @@ -122,6 +126,8 @@ use codex_protocol::request_user_input::RequestUserInputArgs; use codex_protocol::request_user_input::RequestUserInputResponse; use codex_rmcp_client::ElicitationResponse; use codex_rmcp_client::OAuthCredentialsStoreMode; +use codex_rollout::state_db; +use codex_shell_command::parse_command::parse_command; use codex_terminal_detection::user_agent; use codex_tools::filter_tool_suggest_discoverable_tools_for_client; use codex_utils_output_truncation::TruncationPolicy; @@ -263,9 +269,6 @@ use crate::injection::app_id_from_path; use crate::injection::tool_kind_for_path; use crate::instructions::UserInstructions; use crate::mcp::McpManager; -use crate::mcp_connection_manager::McpConnectionManager; -use crate::mcp_connection_manager::codex_apps_tools_cache_key; -use crate::mcp_connection_manager::filter_non_codex_apps_mcp_tools_only; use crate::mcp_skill_dependencies::maybe_prompt_and_install_mcp_dependencies; use crate::memories; use crate::mentions::build_connector_slug_counts; @@ -278,43 +281,6 @@ use crate::plugins::PluginsManager; use crate::plugins::build_plugin_injections; use crate::plugins::render_plugins_section; use crate::project_doc::get_user_instructions; -use crate::protocol::AgentMessageContentDeltaEvent; -use crate::protocol::AgentReasoningSectionBreakEvent; -use crate::protocol::ApplyPatchApprovalRequestEvent; -use crate::protocol::AskForApproval; -use crate::protocol::BackgroundEventEvent; -use crate::protocol::CompactedItem; -use crate::protocol::DeprecationNoticeEvent; -use crate::protocol::ErrorEvent; -use crate::protocol::Event; -use crate::protocol::EventMsg; -use crate::protocol::ExecApprovalRequestEvent; -use crate::protocol::McpServerRefreshConfig; -use crate::protocol::ModelRerouteEvent; -use crate::protocol::ModelRerouteReason; -use crate::protocol::NetworkApprovalContext; -use crate::protocol::Op; -use crate::protocol::PlanDeltaEvent; -use crate::protocol::RateLimitSnapshot; -use crate::protocol::ReasoningContentDeltaEvent; -use crate::protocol::ReasoningRawContentDeltaEvent; -use crate::protocol::RequestUserInputEvent; -use crate::protocol::ReviewDecision; -use crate::protocol::SandboxPolicy; -use crate::protocol::SessionConfiguredEvent; -use crate::protocol::SessionNetworkProxyRuntime; -use crate::protocol::SkillDependencies as ProtocolSkillDependencies; -use crate::protocol::SkillErrorInfo; -use crate::protocol::SkillInterface as ProtocolSkillInterface; -use crate::protocol::SkillMetadata as ProtocolSkillMetadata; -use crate::protocol::SkillToolDependency as ProtocolSkillToolDependency; -use crate::protocol::StreamErrorEvent; -use crate::protocol::Submission; -use crate::protocol::TokenCountEvent; -use crate::protocol::TokenUsage; -use crate::protocol::TokenUsageInfo; -use crate::protocol::TurnDiffEvent; -use crate::protocol::WarningEvent; use crate::resolve_skill_dependencies_for_turn; use crate::rollout::RolloutRecorder; use crate::rollout::RolloutRecorderParams; @@ -329,7 +295,6 @@ use crate::skills_watcher::SkillsWatcherEvent; use crate::state::ActiveTurn; use crate::state::SessionServices; use crate::state::SessionState; -use crate::state_db; use crate::tasks::GhostSnapshotTask; use crate::tasks::ReviewTask; use crate::tasks::SessionTask; @@ -369,9 +334,46 @@ use codex_protocol::models::DeveloperInstructions; use codex_protocol::models::ResponseInputItem; use codex_protocol::models::ResponseItem; use codex_protocol::openai_models::ReasoningEffort as ReasoningEffortConfig; +use codex_protocol::protocol::AgentMessageContentDeltaEvent; +use codex_protocol::protocol::AgentReasoningSectionBreakEvent; +use codex_protocol::protocol::ApplyPatchApprovalRequestEvent; +use codex_protocol::protocol::AskForApproval; +use codex_protocol::protocol::BackgroundEventEvent; use codex_protocol::protocol::CodexErrorInfo; +use codex_protocol::protocol::CompactedItem; +use codex_protocol::protocol::DeprecationNoticeEvent; +use codex_protocol::protocol::ErrorEvent; +use codex_protocol::protocol::Event; +use codex_protocol::protocol::EventMsg; +use codex_protocol::protocol::ExecApprovalRequestEvent; use codex_protocol::protocol::InitialHistory; +use codex_protocol::protocol::McpServerRefreshConfig; +use codex_protocol::protocol::ModelRerouteEvent; +use codex_protocol::protocol::ModelRerouteReason; +use codex_protocol::protocol::NetworkApprovalContext; use codex_protocol::protocol::NonSteerableTurnKind; +use codex_protocol::protocol::Op; +use codex_protocol::protocol::PlanDeltaEvent; +use codex_protocol::protocol::RateLimitSnapshot; +use codex_protocol::protocol::ReasoningContentDeltaEvent; +use codex_protocol::protocol::ReasoningRawContentDeltaEvent; +use codex_protocol::protocol::RequestUserInputEvent; +use codex_protocol::protocol::ReviewDecision; +use codex_protocol::protocol::SandboxPolicy; +use codex_protocol::protocol::SessionConfiguredEvent; +use codex_protocol::protocol::SessionNetworkProxyRuntime; +use codex_protocol::protocol::SkillDependencies as ProtocolSkillDependencies; +use codex_protocol::protocol::SkillErrorInfo; +use codex_protocol::protocol::SkillInterface as ProtocolSkillInterface; +use codex_protocol::protocol::SkillMetadata as ProtocolSkillMetadata; +use codex_protocol::protocol::SkillToolDependency as ProtocolSkillToolDependency; +use codex_protocol::protocol::StreamErrorEvent; +use codex_protocol::protocol::Submission; +use codex_protocol::protocol::TokenCountEvent; +use codex_protocol::protocol::TokenUsage; +use codex_protocol::protocol::TokenUsageInfo; +use codex_protocol::protocol::TurnDiffEvent; +use codex_protocol::protocol::WarningEvent; use codex_protocol::user_input::UserInput; use codex_tools::ToolsConfig; use codex_tools::ToolsConfigParams; @@ -1664,7 +1666,7 @@ impl Session { let auth_mode = auth.map(CodexAuth::auth_mode).map(TelemetryAuthMode::from); let account_id = auth.and_then(CodexAuth::get_account_id); let account_email = auth.and_then(CodexAuth::get_account_email); - let originator = crate::default_client::originator().value; + let originator = originator().value; let terminal_type = user_agent(); let session_model = session_configuration.collaboration_mode.model().to_string(); let auth_env_telemetry = collect_auth_env_telemetry( @@ -4965,7 +4967,7 @@ mod handlers { let event = Event { id: sub_id, msg: EventMsg::GetHistoryEntryResponse( - crate::protocol::GetHistoryEntryResponseEvent { + codex_protocol::protocol::GetHistoryEntryResponseEvent { offset, log_id, entry: entry_opt.map(|e| codex_protocol::message_history::HistoryEntry { @@ -6017,7 +6019,7 @@ pub(crate) async fn run_turn( for run in sess.hooks().preview_stop(&stop_request) { sess.send_event( &turn_context, - EventMsg::HookStarted(crate::protocol::HookStartedEvent { + EventMsg::HookStarted(codex_protocol::protocol::HookStartedEvent { turn_id: Some(turn_context.sub_id.clone()), run, }), @@ -6367,10 +6369,10 @@ fn connector_inserted_in_messages( } fn filter_codex_apps_mcp_tools( - mcp_tools: &HashMap, + mcp_tools: &HashMap, connectors: &[connectors::AppInfo], config: &Config, -) -> HashMap { +) -> HashMap { let allowed: HashSet<&str> = connectors .iter() .map(|connector| connector.id.as_str()) @@ -6391,7 +6393,7 @@ fn filter_codex_apps_mcp_tools( .collect() } -fn codex_apps_connector_id(tool: &crate::mcp_connection_manager::ToolInfo) -> Option<&str> { +fn codex_apps_connector_id(tool: &McpToolInfo) -> Option<&str> { tool.connector_id.as_deref() } diff --git a/codex-rs/core/src/codex/rollout_reconstruction_tests.rs b/codex-rs/core/src/codex/rollout_reconstruction_tests.rs index 86abfa675..5dd4f60e1 100644 --- a/codex-rs/core/src/codex/rollout_reconstruction_tests.rs +++ b/codex-rs/core/src/codex/rollout_reconstruction_tests.rs @@ -1,13 +1,13 @@ use super::*; -use crate::protocol::CompactedItem; -use crate::protocol::InitialHistory; -use crate::protocol::ResumedHistory; use codex_protocol::AgentPath; use codex_protocol::ThreadId; use codex_protocol::models::ContentItem; use codex_protocol::models::ResponseItem; +use codex_protocol::protocol::CompactedItem; +use codex_protocol::protocol::InitialHistory; use codex_protocol::protocol::InterAgentCommunication; +use codex_protocol::protocol::ResumedHistory; use pretty_assertions::assert_eq; use std::path::PathBuf; diff --git a/codex-rs/core/src/codex_delegate.rs b/codex-rs/core/src/codex_delegate.rs index b968d219d..6bb8257f0 100644 --- a/codex-rs/core/src/codex_delegate.rs +++ b/codex-rs/core/src/codex_delegate.rs @@ -30,7 +30,6 @@ use tokio::sync::oneshot; use tokio::time::timeout; use tokio_util::sync::CancellationToken; -use crate::AuthManager; use crate::codex::Codex; use crate::codex::CodexSpawnArgs; use crate::codex::CodexSpawnOk; @@ -49,6 +48,7 @@ use crate::mcp_tool_call::build_guardian_mcp_tool_review_request; use crate::mcp_tool_call::is_mcp_tool_approval_question_id; use crate::mcp_tool_call::lookup_mcp_tool_metadata; use crate::models_manager::manager::ModelsManager; +use codex_login::AuthManager; use codex_protocol::protocol::InitialHistory; #[cfg(test)] diff --git a/codex-rs/core/src/codex_tests.rs b/codex-rs/core/src/codex_tests.rs index 22681f7a4..24c24eb93 100644 --- a/codex-rs/core/src/codex_tests.rs +++ b/codex-rs/core/src/codex_tests.rs @@ -1,5 +1,4 @@ use super::*; -use crate::CodexAuth; use crate::config::ConfigBuilder; use crate::config::test_config; use crate::config_loader::ConfigLayerStack; @@ -12,12 +11,13 @@ use crate::config_loader::Sourced; use crate::exec::ExecCapturePolicy; use crate::exec::ExecToolCallOutput; use crate::function_tool::FunctionCallError; -use crate::mcp_connection_manager::ToolInfo; use crate::models_manager::model_info; use crate::shell::default_user_shell; use crate::tools::format_exec_output_str; use codex_features::Features; +use codex_login::CodexAuth; +use codex_mcp::mcp_connection_manager::ToolInfo; use codex_protocol::ThreadId; use codex_protocol::models::FunctionCallOutputBody; use codex_protocol::models::FunctionCallOutputPayload; @@ -33,20 +33,6 @@ use codex_protocol::request_permissions::PermissionGrantScope; use codex_protocol::request_permissions::RequestPermissionProfile; use tracing::Span; -use crate::protocol::CompactedItem; -use crate::protocol::CreditsSnapshot; -use crate::protocol::InitialHistory; -use crate::protocol::NetworkApprovalProtocol; -use crate::protocol::RateLimitSnapshot; -use crate::protocol::RateLimitWindow; -use crate::protocol::ResumedHistory; -use crate::protocol::RolloutItem; -use crate::protocol::TokenCountEvent; -use crate::protocol::TokenUsage; -use crate::protocol::TokenUsageInfo; -use crate::protocol::TurnCompleteEvent; -use crate::protocol::TurnStartedEvent; -use crate::protocol::UserMessageEvent; use crate::rollout::policy::EventPersistenceMode; use crate::rollout::recorder::RolloutRecorder; use crate::rollout::recorder::RolloutRecorderParams; @@ -78,9 +64,26 @@ use codex_protocol::models::ResponseInputItem; use codex_protocol::models::ResponseItem; use codex_protocol::openai_models::ModelsResponse; use codex_protocol::protocol::AskForApproval; +use codex_protocol::protocol::CompactedItem; use codex_protocol::protocol::ConversationAudioParams; +use codex_protocol::protocol::CreditsSnapshot; +use codex_protocol::protocol::GranularApprovalConfig; +use codex_protocol::protocol::InitialHistory; +use codex_protocol::protocol::NetworkApprovalProtocol; +use codex_protocol::protocol::RateLimitSnapshot; +use codex_protocol::protocol::RateLimitWindow; use codex_protocol::protocol::RealtimeAudioFrame; +use codex_protocol::protocol::ResumedHistory; +use codex_protocol::protocol::RolloutItem; use codex_protocol::protocol::Submission; +use codex_protocol::protocol::ThreadRolledBackEvent; +use codex_protocol::protocol::TokenCountEvent; +use codex_protocol::protocol::TokenUsage; +use codex_protocol::protocol::TokenUsageInfo; +use codex_protocol::protocol::TurnAbortedEvent; +use codex_protocol::protocol::TurnCompleteEvent; +use codex_protocol::protocol::TurnStartedEvent; +use codex_protocol::protocol::UserMessageEvent; use codex_protocol::protocol::W3cTraceContext; use core_test_support::PathBufExt; use core_test_support::context_snapshot; @@ -238,7 +241,7 @@ async fn interrupting_regular_turn_waiting_on_startup_prewarm_emits_turn_aborted .expect("channel open"); assert!(matches!( second.msg, - EventMsg::TurnAborted(crate::protocol::TurnAbortedEvent { + EventMsg::TurnAborted(TurnAbortedEvent { turn_id: Some(turn_id), reason: TurnAbortReason::Interrupted, }) if turn_id == tc.sub_id @@ -2120,9 +2123,7 @@ fn success_flag_true_with_no_error_and_content_used() { assert_eq!(expected, got); } -async fn wait_for_thread_rolled_back( - rx: &async_channel::Receiver, -) -> crate::protocol::ThreadRolledBackEvent { +async fn wait_for_thread_rolled_back(rx: &async_channel::Receiver) -> ThreadRolledBackEvent { let deadline = StdDuration::from_secs(2); let start = std::time::Instant::now(); loop { @@ -2788,15 +2789,13 @@ async fn request_permissions_emits_event_when_granular_policy_allows_requests() Arc::get_mut(&mut turn_context) .expect("single turn context ref") .approval_policy - .set(crate::protocol::AskForApproval::Granular( - crate::protocol::GranularApprovalConfig { - sandbox_approval: true, - rules: true, - skill_approval: true, - request_permissions: true, - mcp_elicitations: true, - }, - )) + .set(AskForApproval::Granular(GranularApprovalConfig { + sandbox_approval: true, + rules: true, + skill_approval: true, + request_permissions: true, + mcp_elicitations: true, + })) .expect("test setup should allow updating approval policy"); let session = Arc::new(session); @@ -2863,15 +2862,13 @@ async fn request_permissions_is_auto_denied_when_granular_policy_blocks_tool_req Arc::get_mut(&mut turn_context) .expect("single turn context ref") .approval_policy - .set(crate::protocol::AskForApproval::Granular( - crate::protocol::GranularApprovalConfig { - sandbox_approval: true, - rules: true, - skill_approval: true, - request_permissions: false, - mcp_elicitations: true, - }, - )) + .set(AskForApproval::Granular(GranularApprovalConfig { + sandbox_approval: true, + rules: true, + skill_approval: true, + request_permissions: false, + mcp_elicitations: true, + })) .expect("test setup should allow updating approval policy"); let session = Arc::new(session); @@ -5087,10 +5084,10 @@ async fn sample_rollout( #[tokio::test] async fn rejects_escalated_permissions_when_policy_not_on_request() { use crate::exec::ExecParams; - use crate::protocol::AskForApproval; - use crate::protocol::SandboxPolicy; use crate::sandboxing::SandboxPermissions; use crate::turn_diff_tracker::TurnDiffTracker; + use codex_protocol::protocol::AskForApproval; + use codex_protocol::protocol::SandboxPolicy; use std::collections::HashMap; let (session, mut turn_context_raw) = make_session_and_context().await; @@ -5242,9 +5239,9 @@ async fn rejects_escalated_permissions_when_policy_not_on_request() { } #[tokio::test] async fn unified_exec_rejects_escalated_permissions_when_policy_not_on_request() { - use crate::protocol::AskForApproval; use crate::sandboxing::SandboxPermissions; use crate::turn_diff_tracker::TurnDiffTracker; + use codex_protocol::protocol::AskForApproval; let (session, mut turn_context_raw) = make_session_and_context().await; turn_context_raw diff --git a/codex-rs/core/src/codex_tests_guardian.rs b/codex-rs/core/src/codex_tests_guardian.rs index f5698d58f..4f60c2f28 100644 --- a/codex-rs/core/src/codex_tests_guardian.rs +++ b/codex-rs/core/src/codex_tests_guardian.rs @@ -7,7 +7,6 @@ use crate::exec::ExecCapturePolicy; use crate::exec::ExecParams; use crate::exec_policy::ExecPolicyManager; use crate::guardian::GUARDIAN_REVIEWER_NAME; -use crate::protocol::AskForApproval; use crate::sandboxing::SandboxPermissions; use crate::tools::context::FunctionToolOutput; use crate::turn_diff_tracker::TurnDiffTracker; @@ -24,6 +23,7 @@ use codex_protocol::models::ResponseItem; use codex_protocol::models::function_call_output_content_items_to_text; use codex_protocol::permissions::FileSystemSandboxPolicy; use codex_protocol::permissions::NetworkSandboxPolicy; +use codex_protocol::protocol::AskForApproval; use core_test_support::PathExt; use core_test_support::TempDirExt; use core_test_support::codex_linux_sandbox_exe_or_skip; diff --git a/codex-rs/core/src/codex_thread.rs b/codex-rs/core/src/codex_thread.rs index 8b467fc10..2b7327df6 100644 --- a/codex-rs/core/src/codex_thread.rs +++ b/codex-rs/core/src/codex_thread.rs @@ -5,9 +5,6 @@ use crate::config::ConstraintResult; use crate::error::CodexErr; use crate::error::Result as CodexResult; use crate::file_watcher::WatchRegistration; -use crate::protocol::Event; -use crate::protocol::Op; -use crate::protocol::Submission; use codex_features::Feature; use codex_protocol::config_types::ApprovalsReviewer; use codex_protocol::config_types::Personality; @@ -17,8 +14,11 @@ use codex_protocol::models::ResponseInputItem; use codex_protocol::models::ResponseItem; use codex_protocol::openai_models::ReasoningEffort; use codex_protocol::protocol::AskForApproval; +use codex_protocol::protocol::Event; +use codex_protocol::protocol::Op; use codex_protocol::protocol::SandboxPolicy; use codex_protocol::protocol::SessionSource; +use codex_protocol::protocol::Submission; use codex_protocol::protocol::TokenUsage; use codex_protocol::protocol::W3cTraceContext; use codex_protocol::user_input::UserInput; @@ -26,7 +26,7 @@ use std::path::PathBuf; use tokio::sync::Mutex; use tokio::sync::watch; -use crate::state_db::StateDbHandle; +use codex_rollout::state_db::StateDbHandle; #[derive(Clone, Debug)] pub struct ThreadConfigSnapshot { diff --git a/codex-rs/core/src/command_canonicalization.rs b/codex-rs/core/src/command_canonicalization.rs index 3457fa2f6..b88a79375 100644 --- a/codex-rs/core/src/command_canonicalization.rs +++ b/codex-rs/core/src/command_canonicalization.rs @@ -1,6 +1,6 @@ -use crate::bash::extract_bash_command; -use crate::bash::parse_shell_lc_plain_commands; -use crate::powershell::extract_powershell_command; +use codex_shell_command::bash::extract_bash_command; +use codex_shell_command::bash::parse_shell_lc_plain_commands; +use codex_shell_command::powershell::extract_powershell_command; const CANONICAL_BASH_SCRIPT_PREFIX: &str = "__codex_shell_script__"; const CANONICAL_POWERSHELL_SCRIPT_PREFIX: &str = "__codex_powershell_script__"; diff --git a/codex-rs/core/src/compact.rs b/codex-rs/core/src/compact.rs index 82fd5c15e..a281134e7 100644 --- a/codex-rs/core/src/compact.rs +++ b/codex-rs/core/src/compact.rs @@ -11,16 +11,16 @@ use crate::codex::TurnContext; use crate::codex::get_last_assistant_message_from_turn; use crate::error::CodexErr; use crate::error::Result as CodexResult; -use crate::protocol::CompactedItem; -use crate::protocol::EventMsg; -use crate::protocol::TurnStartedEvent; -use crate::protocol::WarningEvent; use crate::util::backoff; use codex_protocol::items::ContextCompactionItem; use codex_protocol::items::TurnItem; use codex_protocol::models::ContentItem; use codex_protocol::models::ResponseInputItem; use codex_protocol::models::ResponseItem; +use codex_protocol::protocol::CompactedItem; +use codex_protocol::protocol::EventMsg; +use codex_protocol::protocol::TurnStartedEvent; +use codex_protocol::protocol::WarningEvent; use codex_protocol::user_input::UserInput; use codex_utils_output_truncation::TruncationPolicy; use codex_utils_output_truncation::approx_token_count; diff --git a/codex-rs/core/src/compact_remote.rs b/codex-rs/core/src/compact_remote.rs index 28be57431..123a79ebb 100644 --- a/codex-rs/core/src/compact_remote.rs +++ b/codex-rs/core/src/compact_remote.rs @@ -13,13 +13,13 @@ use crate::context_manager::estimate_response_item_model_visible_bytes; use crate::context_manager::is_codex_generated_item; use crate::error::CodexErr; use crate::error::Result as CodexResult; -use crate::protocol::CompactedItem; -use crate::protocol::EventMsg; -use crate::protocol::TurnStartedEvent; use codex_protocol::items::ContextCompactionItem; use codex_protocol::items::TurnItem; use codex_protocol::models::BaseInstructions; use codex_protocol::models::ResponseItem; +use codex_protocol::protocol::CompactedItem; +use codex_protocol::protocol::EventMsg; +use codex_protocol::protocol::TurnStartedEvent; use futures::TryFutureExt; use tokio_util::sync::CancellationToken; use tracing::error; diff --git a/codex-rs/core/src/config/mod.rs b/codex-rs/core/src/config/mod.rs index 785238e26..67b6afc85 100644 --- a/codex-rs/core/src/config/mod.rs +++ b/codex-rs/core/src/config/mod.rs @@ -1,4 +1,3 @@ -use crate::auth::AuthCredentialsStoreMode; use crate::config::edit::ConfigEdit; use crate::config::edit::ConfigEditsBuilder; use crate::config::types::AppsConfigToml; @@ -50,9 +49,6 @@ use crate::model_provider_info::built_in_model_providers; use crate::path_utils::normalize_for_native_workdir; use crate::project_doc::DEFAULT_PROJECT_DOC_FILENAME; use crate::project_doc::LOCAL_PROJECT_DOC_FILENAME; -use crate::protocol::AskForApproval; -use crate::protocol::ReadOnlyAccess; -use crate::protocol::SandboxPolicy; use crate::unified_exec::DEFAULT_MAX_BACKGROUND_TERMINAL_TIMEOUT_MS; use crate::unified_exec::MIN_EMPTY_YIELD_TIME_MS; use crate::windows_sandbox::WindowsSandboxLevelExt; @@ -66,6 +62,7 @@ use codex_features::FeatureOverrides; use codex_features::Features; use codex_features::FeaturesToml; use codex_git_utils::resolve_root_git_project_for_trust; +use codex_login::AuthCredentialsStoreMode; use codex_mcp::mcp::McpConfig; use codex_protocol::config_types::AltScreenMode; use codex_protocol::config_types::ForcedLoginMethod; @@ -83,6 +80,9 @@ use codex_protocol::openai_models::ModelsResponse; use codex_protocol::openai_models::ReasoningEffort; use codex_protocol::permissions::FileSystemSandboxPolicy; use codex_protocol::permissions::NetworkSandboxPolicy; +use codex_protocol::protocol::AskForApproval; +use codex_protocol::protocol::ReadOnlyAccess; +use codex_protocol::protocol::SandboxPolicy; use codex_rmcp_client::OAuthCredentialsStoreMode; use codex_utils_absolute_path::AbsolutePathBuf; use codex_utils_absolute_path::AbsolutePathBufGuard; diff --git a/codex-rs/core/src/config/profile.rs b/codex-rs/core/src/config/profile.rs index e0947302e..fcfda644e 100644 --- a/codex-rs/core/src/config/profile.rs +++ b/codex-rs/core/src/config/profile.rs @@ -7,7 +7,6 @@ use crate::config::ToolsToml; use crate::config::types::ApprovalsReviewer; use crate::config::types::Personality; use crate::config::types::WindowsToml; -use crate::protocol::AskForApproval; use codex_features::FeaturesToml; use codex_protocol::config_types::ReasoningSummary; use codex_protocol::config_types::SandboxMode; @@ -15,6 +14,7 @@ use codex_protocol::config_types::ServiceTier; use codex_protocol::config_types::Verbosity; use codex_protocol::config_types::WebSearchMode; use codex_protocol::openai_models::ReasoningEffort; +use codex_protocol::protocol::AskForApproval; /// Collection of common configuration options that a user can define as a unit /// in `config.toml`. diff --git a/codex-rs/core/src/connectors.rs b/codex-rs/core/src/connectors.rs index 4a19163a8..e02a6fc22 100644 --- a/codex-rs/core/src/connectors.rs +++ b/codex-rs/core/src/connectors.rs @@ -24,29 +24,30 @@ use serde::Deserialize; use serde::de::DeserializeOwned; use tracing::warn; -use crate::AuthManager; -use crate::CodexAuth; -use crate::SandboxState; use crate::codex::INITIAL_SUBMIT_ID; use crate::config::Config; use crate::config::types::AppToolApproval; use crate::config::types::AppsConfigToml; use crate::config::types::ToolSuggestDiscoverableType; use crate::config_loader::AppsRequirementsToml; -use crate::default_client::create_client; -use crate::default_client::is_first_party_chat_originator; -use crate::default_client::originator; use crate::mcp::McpManager; -use crate::mcp_connection_manager::McpConnectionManager; -use crate::mcp_connection_manager::codex_apps_tools_cache_key; use crate::plugins::AppConnectorId; use crate::plugins::PluginsManager; use crate::plugins::list_tool_suggest_discoverable_plugins; use codex_features::Feature; +use codex_login::AuthManager; +use codex_login::CodexAuth; +use codex_login::default_client::create_client; +use codex_login::default_client::is_first_party_chat_originator; +use codex_login::default_client::originator; use codex_mcp::mcp::CODEX_APPS_MCP_SERVER_NAME; use codex_mcp::mcp::ToolPluginProvenance; use codex_mcp::mcp::auth::compute_auth_statuses; use codex_mcp::mcp::with_codex_apps_mcp; +use codex_mcp::mcp_connection_manager::McpConnectionManager; +use codex_mcp::mcp_connection_manager::SandboxState; +use codex_mcp::mcp_connection_manager::ToolInfo; +use codex_mcp::mcp_connection_manager::codex_apps_tools_cache_key; pub use codex_connectors::CONNECTORS_CACHE_TTL; const CONNECTORS_READY_TIMEOUT_ON_EMPTY_TOOLS: Duration = Duration::from_secs(30); @@ -154,7 +155,7 @@ pub async fn list_cached_accessible_connectors_from_mcp_tools( pub(crate) fn refresh_accessible_connectors_cache_from_mcp_tools( config: &Config, auth: Option<&CodexAuth>, - mcp_tools: &HashMap, + mcp_tools: &HashMap, ) { if !config.features.enabled(Feature::Apps) { return; @@ -508,7 +509,7 @@ pub fn connector_mention_slug(connector: &AppInfo) -> String { } pub(crate) fn accessible_connectors_from_mcp_tools( - mcp_tools: &HashMap, + mcp_tools: &HashMap, ) -> Vec { // ToolInfo already carries plugin provenance, so app-level plugin sources // can be derived here instead of requiring a separate enrichment pass. @@ -682,10 +683,7 @@ pub(crate) fn app_tool_policy( ) } -pub(crate) fn codex_app_tool_is_enabled( - config: &Config, - tool_info: &crate::mcp_connection_manager::ToolInfo, -) -> bool { +pub(crate) fn codex_app_tool_is_enabled(config: &Config, tool_info: &ToolInfo) -> bool { if tool_info.server_name != CODEX_APPS_MCP_SERVER_NAME { return true; } diff --git a/codex-rs/core/src/connectors_tests.rs b/codex-rs/core/src/connectors_tests.rs index 16ff8b8e0..11ec4b6ca 100644 --- a/codex-rs/core/src/connectors_tests.rs +++ b/codex-rs/core/src/connectors_tests.rs @@ -11,9 +11,9 @@ use crate::config_loader::CloudRequirementsLoader; use crate::config_loader::ConfigLayerStack; use crate::config_loader::ConfigRequirements; use crate::config_loader::ConfigRequirementsToml; -use crate::mcp_connection_manager::ToolInfo; use codex_features::Feature; use codex_mcp::mcp::CODEX_APPS_MCP_SERVER_NAME; +use codex_mcp::mcp_connection_manager::ToolInfo; use codex_utils_absolute_path::AbsolutePathBuf; use pretty_assertions::assert_eq; use rmcp::model::JsonObject; diff --git a/codex-rs/core/src/default_client_forwarding.rs b/codex-rs/core/src/default_client_forwarding.rs deleted file mode 100644 index 75b76b042..000000000 --- a/codex-rs/core/src/default_client_forwarding.rs +++ /dev/null @@ -1,2 +0,0 @@ -// Re-exported as `crate::default_client` from `lib.rs`. -pub use codex_login::default_client::*; diff --git a/codex-rs/core/src/exec.rs b/codex-rs/core/src/exec.rs index 0582232d9..bfefc2510 100644 --- a/codex-rs/core/src/exec.rs +++ b/codex-rs/core/src/exec.rs @@ -20,11 +20,6 @@ use tokio_util::sync::CancellationToken; use crate::error::CodexErr; use crate::error::Result; use crate::error::SandboxErr; -use crate::protocol::Event; -use crate::protocol::EventMsg; -use crate::protocol::ExecCommandOutputDeltaEvent; -use crate::protocol::ExecOutputStream; -use crate::protocol::SandboxPolicy; use crate::sandboxing::ExecOptions; use crate::sandboxing::ExecRequest; use crate::sandboxing::SandboxPermissions; @@ -37,6 +32,11 @@ use codex_protocol::config_types::WindowsSandboxLevel; use codex_protocol::permissions::FileSystemSandboxKind; use codex_protocol::permissions::FileSystemSandboxPolicy; use codex_protocol::permissions::NetworkSandboxPolicy; +use codex_protocol::protocol::Event; +use codex_protocol::protocol::EventMsg; +use codex_protocol::protocol::ExecCommandOutputDeltaEvent; +use codex_protocol::protocol::ExecOutputStream; +use codex_protocol::protocol::SandboxPolicy; use codex_sandboxing::SandboxCommand; use codex_sandboxing::SandboxManager; use codex_sandboxing::SandboxTransformRequest; diff --git a/codex-rs/core/src/exec_policy.rs b/codex-rs/core/src/exec_policy.rs index a027f2461..dbfab81d3 100644 --- a/codex-rs/core/src/exec_policy.rs +++ b/codex-rs/core/src/exec_policy.rs @@ -7,8 +7,6 @@ use arc_swap::ArcSwap; use crate::config_loader::ConfigLayerStack; use crate::config_loader::ConfigLayerStackOrdering; -use crate::is_dangerous_command::command_might_be_dangerous; -use crate::is_safe_command::is_known_safe_command; use codex_execpolicy::AmendError; use codex_execpolicy::Decision; use codex_execpolicy::Error as ExecPolicyRuleError; @@ -25,16 +23,18 @@ use codex_protocol::permissions::FileSystemSandboxKind; use codex_protocol::permissions::FileSystemSandboxPolicy; use codex_protocol::protocol::AskForApproval; use codex_protocol::protocol::SandboxPolicy; +use codex_shell_command::is_dangerous_command::command_might_be_dangerous; +use codex_shell_command::is_safe_command::is_known_safe_command; use thiserror::Error; use tokio::fs; use tokio::task::spawn_blocking; use tracing::instrument; -use crate::bash::parse_shell_lc_plain_commands; -use crate::bash::parse_shell_lc_single_command_prefix; use crate::config::Config; use crate::sandboxing::SandboxPermissions; use crate::tools::sandboxing::ExecApprovalRequirement; +use codex_shell_command::bash::parse_shell_lc_plain_commands; +use codex_shell_command::bash::parse_shell_lc_single_command_prefix; use codex_utils_absolute_path::AbsolutePathBuf; use shlex::try_join as shlex_try_join; diff --git a/codex-rs/core/src/guardian/review_session.rs b/codex-rs/core/src/guardian/review_session.rs index 17993a974..88bc795c1 100644 --- a/codex-rs/core/src/guardian/review_session.rs +++ b/codex-rs/core/src/guardian/review_session.rs @@ -17,6 +17,7 @@ use codex_protocol::protocol::EventMsg; use codex_protocol::protocol::InitialHistory; use codex_protocol::protocol::Op; use codex_protocol::protocol::RolloutItem; +use codex_protocol::protocol::SandboxPolicy; use codex_protocol::protocol::SubAgentSource; use codex_protocol::user_input::UserInput; use serde_json::Value; @@ -35,7 +36,6 @@ use crate::config::NetworkProxySpec; use crate::config::Permissions; use crate::config::types::McpServerConfig; use crate::model_provider_info::ModelProviderInfo; -use crate::protocol::SandboxPolicy; use crate::rollout::recorder::RolloutRecorder; use codex_features::Feature; diff --git a/codex-rs/core/src/guardian/tests.rs b/codex-rs/core/src/guardian/tests.rs index fa59cf908..17813ee7d 100644 --- a/codex-rs/core/src/guardian/tests.rs +++ b/codex-rs/core/src/guardian/tests.rs @@ -15,7 +15,6 @@ use crate::config_loader::NetworkDomainPermissionToml; use crate::config_loader::NetworkDomainPermissionsToml; use crate::config_loader::RequirementSource; use crate::config_loader::Sourced; -use crate::protocol::SandboxPolicy; use crate::test_support; use codex_network_proxy::NetworkProxyConfig; use codex_protocol::approvals::NetworkApprovalProtocol; @@ -27,6 +26,7 @@ use codex_protocol::protocol::EventMsg; use codex_protocol::protocol::GuardianAssessmentStatus; use codex_protocol::protocol::GuardianRiskLevel; use codex_protocol::protocol::ReviewDecision; +use codex_protocol::protocol::SandboxPolicy; use core_test_support::PathBufExt; use core_test_support::TempDirExt; use core_test_support::context_snapshot; diff --git a/codex-rs/core/src/hook_runtime.rs b/codex-rs/core/src/hook_runtime.rs index ece93b1da..0d620119f 100644 --- a/codex-rs/core/src/hook_runtime.rs +++ b/codex-rs/core/src/hook_runtime.rs @@ -16,6 +16,7 @@ use codex_protocol::protocol::AskForApproval; use codex_protocol::protocol::EventMsg; use codex_protocol::protocol::HookCompletedEvent; use codex_protocol::protocol::HookRunSummary; +use codex_protocol::protocol::HookStartedEvent; use codex_protocol::user_input::UserInput; use serde_json::Value; @@ -306,7 +307,7 @@ async fn emit_hook_started_events( for run in preview_runs { sess.send_event( turn_context, - EventMsg::HookStarted(crate::protocol::HookStartedEvent { + EventMsg::HookStarted(HookStartedEvent { turn_id: Some(turn_context.sub_id.clone()), run, }), diff --git a/codex-rs/core/src/landlock.rs b/codex-rs/core/src/landlock.rs index ef55a207e..95f107be9 100644 --- a/codex-rs/core/src/landlock.rs +++ b/codex-rs/core/src/landlock.rs @@ -1,10 +1,10 @@ -use crate::protocol::SandboxPolicy; use crate::spawn::SpawnChildRequest; use crate::spawn::StdioPolicy; use crate::spawn::spawn_child_async; use codex_network_proxy::NetworkProxy; use codex_protocol::permissions::FileSystemSandboxPolicy; use codex_protocol::permissions::NetworkSandboxPolicy; +use codex_protocol::protocol::SandboxPolicy; use codex_sandboxing::landlock::CODEX_LINUX_SANDBOX_ARG0; use codex_sandboxing::landlock::allow_network_for_proxy; use codex_sandboxing::landlock::create_linux_sandbox_command_args_for_policies; diff --git a/codex-rs/core/src/lib.rs b/codex-rs/core/src/lib.rs index 4b8510bc8..8ffc7acfb 100644 --- a/codex-rs/core/src/lib.rs +++ b/codex-rs/core/src/lib.rs @@ -9,7 +9,6 @@ pub mod api_bridge; mod apply_patch; mod apps; mod arc_monitor; -pub use codex_login as auth; mod auth_env_telemetry; mod client; mod client_common; @@ -30,7 +29,6 @@ pub mod config_loader; pub mod connectors; mod context_manager; mod contextual_user_message; -pub use codex_utils_path::env; mod environment_context; pub mod error; pub mod exec; @@ -52,10 +50,6 @@ pub mod models_manager; mod network_policy_decision; pub mod network_proxy_loader; mod original_image_detail; -pub use codex_mcp::mcp_connection_manager; -pub use codex_mcp::mcp_connection_manager::MCP_SANDBOX_STATE_CAPABILITY; -pub use codex_mcp::mcp_connection_manager::MCP_SANDBOX_STATE_METHOD; -pub use codex_mcp::mcp_connection_manager::SandboxState; pub use text_encoding::bytes_to_string_smart; mod mcp_tool_call; mod memories; @@ -105,7 +99,6 @@ mod text_encoding; mod unified_exec; pub mod windows_sandbox; pub use client::X_RESPONSESAPI_INCLUDE_TIMING_METRICS_HEADER; -pub use codex_protocol::config_types::ModelProviderAuthInfo; pub use model_provider_info::DEFAULT_LMSTUDIO_PORT; pub use model_provider_info::DEFAULT_OLLAMA_PORT; pub use model_provider_info::LMSTUDIO_OSS_PROVIDER_ID; @@ -131,20 +124,6 @@ pub type ConversationManager = ThreadManager; pub type NewConversation = NewThread; #[deprecated(note = "use CodexThread")] pub type CodexConversation = CodexThread; -// Re-export common auth types for workspace consumers -pub use auth::AuthManager; -pub use auth::CodexAuth; -pub use codex_analytics::AnalyticsEventsClient; -pub use codex_analytics::AppServerRpcTransport; -mod default_client_forwarding; - -/// Default Codex HTTP client headers and reqwest construction. -/// -/// Implemented in [`codex_login::default_client`]; this module re-exports that API for crates -/// that import `codex_core::default_client`. -pub mod default_client { - pub use super::default_client_forwarding::*; -} pub mod project_doc; mod rollout; pub(crate) mod safety; @@ -154,7 +133,6 @@ pub mod shell; pub mod shell_snapshot; pub mod spawn; pub mod state_db_bridge; -pub use codex_rollout::state_db; mod thread_rollout_truncation; mod tools; pub mod turn_diff_tracker; @@ -188,12 +166,6 @@ mod state; mod tasks; mod user_shell_command; pub mod util; -pub(crate) use codex_protocol::protocol; -pub(crate) use codex_shell_command::bash; -pub(crate) use codex_shell_command::is_dangerous_command; -pub(crate) use codex_shell_command::is_safe_command; -pub(crate) use codex_shell_command::parse_command; -pub(crate) use codex_shell_command::powershell; pub use client::ModelClient; pub use client::ModelClientSession; @@ -202,8 +174,6 @@ pub use client_common::Prompt; pub use client_common::REVIEW_PROMPT; pub use client_common::ResponseEvent; pub use client_common::ResponseStream; -pub use codex_sandboxing::get_platform_sandbox; -pub use codex_tools::parse_tool_input_schema; pub use compact::content_items_to_text; pub use event_mapping::parse_turn_item; pub use exec_policy::ExecPolicyError; diff --git a/codex-rs/core/src/mcp.rs b/codex-rs/core/src/mcp.rs index 552868304..d82452c54 100644 --- a/codex-rs/core/src/mcp.rs +++ b/codex-rs/core/src/mcp.rs @@ -1,10 +1,10 @@ use std::collections::HashMap; use std::sync::Arc; -use crate::CodexAuth; use crate::config::Config; use crate::plugins::PluginsManager; use codex_config::McpServerConfig; +use codex_login::CodexAuth; use codex_mcp::mcp::ToolPluginProvenance; use codex_mcp::mcp::configured_mcp_servers; use codex_mcp::mcp::effective_mcp_servers; diff --git a/codex-rs/core/src/mcp_tool_call.rs b/codex-rs/core/src/mcp_tool_call.rs index 8f81c2384..994f9586d 100644 --- a/codex-rs/core/src/mcp_tool_call.rs +++ b/codex-rs/core/src/mcp_tool_call.rs @@ -28,11 +28,6 @@ use crate::guardian::review_approval_request; use crate::guardian::routes_approval_to_guardian; use crate::mcp_tool_approval_templates::RenderedMcpToolApprovalParam; use crate::mcp_tool_approval_templates::render_mcp_tool_approval_template; -use crate::protocol::EventMsg; -use crate::protocol::McpInvocation; -use crate::protocol::McpToolCallBeginEvent; -use crate::protocol::McpToolCallEndEvent; -use crate::state_db; use codex_analytics::AppInvocation; use codex_analytics::InvocationType; use codex_analytics::build_track_events_context; @@ -42,6 +37,10 @@ use codex_otel::sanitize_metric_tag_value; use codex_protocol::mcp::CallToolResult; use codex_protocol::openai_models::InputModality; use codex_protocol::protocol::AskForApproval; +use codex_protocol::protocol::EventMsg; +use codex_protocol::protocol::McpInvocation; +use codex_protocol::protocol::McpToolCallBeginEvent; +use codex_protocol::protocol::McpToolCallEndEvent; use codex_protocol::protocol::ReviewDecision; use codex_protocol::protocol::SandboxPolicy; use codex_protocol::request_user_input::RequestUserInputAnswer; @@ -51,6 +50,7 @@ use codex_protocol::request_user_input::RequestUserInputQuestionOption; use codex_protocol::request_user_input::RequestUserInputResponse; use codex_rmcp_client::ElicitationAction; use codex_rmcp_client::ElicitationResponse; +use codex_rollout::state_db; use rmcp::model::ToolAnnotations; use serde::Deserialize; use serde::Serialize; diff --git a/codex-rs/core/src/mcp_tool_call_tests.rs b/codex-rs/core/src/mcp_tool_call_tests.rs index d7fcb374f..8acdf917e 100644 --- a/codex-rs/core/src/mcp_tool_call_tests.rs +++ b/codex-rs/core/src/mcp_tool_call_tests.rs @@ -1384,7 +1384,7 @@ async fn approve_mode_blocks_when_arc_returns_interrupt_for_model() { let (session, mut turn_context) = make_session_and_context().await; turn_context.auth_manager = Some(crate::test_support::auth_manager_from_auth( - crate::CodexAuth::create_dummy_chatgpt_auth_for_testing(), + codex_login::CodexAuth::create_dummy_chatgpt_auth_for_testing(), )); let mut config = (*turn_context.config).clone(); config.chatgpt_base_url = server.uri(); @@ -1453,7 +1453,7 @@ async fn custom_approve_mode_blocks_when_arc_returns_interrupt_for_model() { let (session, mut turn_context) = make_session_and_context().await; turn_context.auth_manager = Some(crate::test_support::auth_manager_from_auth( - crate::CodexAuth::create_dummy_chatgpt_auth_for_testing(), + codex_login::CodexAuth::create_dummy_chatgpt_auth_for_testing(), )); let mut config = (*turn_context.config).clone(); config.chatgpt_base_url = server.uri(); @@ -1522,7 +1522,7 @@ async fn approve_mode_blocks_when_arc_returns_interrupt_without_annotations() { let (session, mut turn_context) = make_session_and_context().await; turn_context.auth_manager = Some(crate::test_support::auth_manager_from_auth( - crate::CodexAuth::create_dummy_chatgpt_auth_for_testing(), + codex_login::CodexAuth::create_dummy_chatgpt_auth_for_testing(), )); let mut config = (*turn_context.config).clone(); config.chatgpt_base_url = server.uri(); @@ -1591,7 +1591,7 @@ async fn full_access_mode_skips_arc_monitor_for_all_approval_modes() { let (session, mut turn_context) = make_session_and_context().await; turn_context.auth_manager = Some(crate::test_support::auth_manager_from_auth( - crate::CodexAuth::create_dummy_chatgpt_auth_for_testing(), + codex_login::CodexAuth::create_dummy_chatgpt_auth_for_testing(), )); turn_context .approval_policy @@ -1689,7 +1689,7 @@ async fn approve_mode_routes_arc_ask_user_to_guardian_when_guardian_reviewer_is_ let (mut session, mut turn_context) = make_session_and_context().await; turn_context.auth_manager = Some(crate::test_support::auth_manager_from_auth( - crate::CodexAuth::create_dummy_chatgpt_auth_for_testing(), + codex_login::CodexAuth::create_dummy_chatgpt_auth_for_testing(), )); turn_context .approval_policy diff --git a/codex-rs/core/src/memories/tests.rs b/codex-rs/core/src/memories/tests.rs index 8eae9db86..783bac3c3 100644 --- a/codex-rs/core/src/memories/tests.rs +++ b/codex-rs/core/src/memories/tests.rs @@ -414,7 +414,6 @@ task_outcome: success } mod phase2 { - use crate::CodexAuth; use crate::ThreadManager; use crate::agent::AgentControl; use crate::codex::Session; @@ -427,6 +426,7 @@ mod phase2 { use crate::memories::rollout_summaries_dir; use chrono::Utc; use codex_config::Constrained; + use codex_login::CodexAuth; use codex_protocol::ThreadId; use codex_protocol::protocol::AskForApproval; use codex_protocol::protocol::Op; @@ -693,7 +693,7 @@ mod phase2 { let rollout_path = subagent .rollout_path() .expect("consolidation thread should have a rollout path"); - crate::state_db::read_repair_rollout_path( + codex_rollout::state_db::read_repair_rollout_path( Some(harness.state_db.as_ref()), Some(thread_id), Some(/*archived_only*/ false), diff --git a/codex-rs/core/src/memories/usage.rs b/codex-rs/core/src/memories/usage.rs index 337ee782f..b98a00982 100644 --- a/codex-rs/core/src/memories/usage.rs +++ b/codex-rs/core/src/memories/usage.rs @@ -1,11 +1,11 @@ -use crate::is_safe_command::is_known_safe_command; -use crate::parse_command::parse_command; use crate::tools::context::ToolInvocation; use crate::tools::context::ToolPayload; use crate::tools::handlers::unified_exec::ExecCommandArgs; use codex_protocol::models::ShellCommandToolCallParams; use codex_protocol::models::ShellToolCallParams; use codex_protocol::parse_command::ParsedCommand; +use codex_shell_command::is_safe_command::is_known_safe_command; +use codex_shell_command::parse_command::parse_command; use std::path::PathBuf; const MEMORIES_USAGE_METRIC: &str = "codex.memories.usage"; diff --git a/codex-rs/core/src/model_provider_info.rs b/codex-rs/core/src/model_provider_info.rs index a3df34b64..231fe73b9 100644 --- a/codex-rs/core/src/model_provider_info.rs +++ b/codex-rs/core/src/model_provider_info.rs @@ -5,10 +5,10 @@ //! 2. User-defined entries inside `~/.codex/config.toml` under the `model_providers` //! key. These override or extend the defaults at runtime. -use crate::auth::AuthMode; use crate::error::EnvVarError; use codex_api::Provider as ApiProvider; use codex_api::provider::RetryConfig as ApiRetryConfig; +use codex_login::AuthMode; use codex_protocol::config_types::ModelProviderAuthInfo; use http::HeaderMap; use http::header::HeaderName; diff --git a/codex-rs/core/src/models_manager/manager.rs b/codex-rs/core/src/models_manager/manager.rs index aa22186f9..8f52bab37 100644 --- a/codex-rs/core/src/models_manager/manager.rs +++ b/codex-rs/core/src/models_manager/manager.rs @@ -1,13 +1,9 @@ use super::cache::ModelsCacheManager; use crate::api_bridge::auth_provider_from_auth; use crate::api_bridge::map_api_error; -use crate::auth::AuthManager; -use crate::auth::AuthMode; -use crate::auth::CodexAuth; use crate::auth_env_telemetry::AuthEnvTelemetry; use crate::auth_env_telemetry::collect_auth_env_telemetry; use crate::config::Config; -use crate::default_client::build_reqwest_client; use crate::error::CodexErr; use crate::error::Result as CoreResult; use crate::model_provider_info::ModelProviderInfo; @@ -23,6 +19,10 @@ use codex_api::ModelsClient; use codex_api::RequestTelemetry; use codex_api::ReqwestTransport; use codex_api::TransportError; +use codex_login::AuthManager; +use codex_login::AuthMode; +use codex_login::CodexAuth; +use codex_login::default_client::build_reqwest_client; use codex_otel::TelemetryAuthMode; use codex_protocol::config_types::CollaborationModeMask; use codex_protocol::openai_models::ModelInfo; diff --git a/codex-rs/core/src/models_manager/manager_tests.rs b/codex-rs/core/src/models_manager/manager_tests.rs index 7f79e0705..3e0ca152c 100644 --- a/codex-rs/core/src/models_manager/manager_tests.rs +++ b/codex-rs/core/src/models_manager/manager_tests.rs @@ -1,13 +1,13 @@ use super::*; -use crate::AuthManager; -use crate::CodexAuth; -use crate::ModelProviderAuthInfo; -use crate::auth::AuthCredentialsStoreMode; use crate::config::ConfigBuilder; use crate::model_provider_info::WireApi; use base64::Engine as _; use chrono::Utc; use codex_api::TransportError; +use codex_login::AuthCredentialsStoreMode; +use codex_login::AuthManager; +use codex_login::CodexAuth; +use codex_protocol::config_types::ModelProviderAuthInfo; use codex_protocol::openai_models::ModelsResponse; use core_test_support::responses::mount_models_once; use http::HeaderMap; diff --git a/codex-rs/core/src/otel_init.rs b/codex-rs/core/src/otel_init.rs index 0bec06724..9e38cea52 100644 --- a/codex-rs/core/src/otel_init.rs +++ b/codex-rs/core/src/otel_init.rs @@ -1,8 +1,8 @@ use crate::config::Config; use crate::config::types::OtelExporterKind as Kind; use crate::config::types::OtelHttpProtocol as Protocol; -use crate::default_client::originator; use codex_features::Feature; +use codex_login::default_client::originator; use codex_otel::OtelProvider; use codex_otel::config::OtelExporter; use codex_otel::config::OtelHttpProtocol; diff --git a/codex-rs/core/src/personality_migration.rs b/codex-rs/core/src/personality_migration.rs index f53546520..8a3786e79 100644 --- a/codex-rs/core/src/personality_migration.rs +++ b/codex-rs/core/src/personality_migration.rs @@ -6,9 +6,9 @@ use crate::rollout::list::ThreadListConfig; use crate::rollout::list::ThreadListLayout; use crate::rollout::list::ThreadSortKey; use crate::rollout::list::get_threads_in_root; -use crate::state_db; use codex_protocol::config_types::Personality; use codex_protocol::protocol::SessionSource; +use codex_rollout::state_db; use std::io; use std::path::Path; use tokio::fs::OpenOptions; diff --git a/codex-rs/core/src/plugins/injection.rs b/codex-rs/core/src/plugins/injection.rs index 26d5f0816..e482010b2 100644 --- a/codex-rs/core/src/plugins/injection.rs +++ b/codex-rs/core/src/plugins/injection.rs @@ -5,10 +5,10 @@ use codex_protocol::models::DeveloperInstructions; use codex_protocol::models::ResponseItem; use crate::connectors; -use crate::mcp_connection_manager::ToolInfo; use crate::plugins::PluginCapabilitySummary; use crate::plugins::render_explicit_plugin_instructions; use codex_mcp::mcp::CODEX_APPS_MCP_SERVER_NAME; +use codex_mcp::mcp_connection_manager::ToolInfo; pub(crate) fn build_plugin_injections( mentioned_plugins: &[PluginCapabilitySummary], diff --git a/codex-rs/core/src/plugins/manager.rs b/codex-rs/core/src/plugins/manager.rs index 59bc99b23..9147675e2 100644 --- a/codex-rs/core/src/plugins/manager.rs +++ b/codex-rs/core/src/plugins/manager.rs @@ -26,9 +26,7 @@ use super::store::PluginInstallResult as StorePluginInstallResult; use super::store::PluginStore; use super::store::PluginStoreError; use super::sync_openai_plugins_repo; -use crate::AuthManager; use crate::SkillMetadata; -use crate::auth::CodexAuth; use crate::config::CONFIG_TOML_FILE; use crate::config::Config; use crate::config::ConfigService; @@ -47,6 +45,8 @@ use codex_analytics::AnalyticsEventsClient; use codex_app_server_protocol::ConfigValueWriteParams; use codex_app_server_protocol::MergeStrategy; use codex_features::Feature; +use codex_login::AuthManager; +use codex_login::CodexAuth; use codex_plugin::AppConnectorId; use codex_plugin::PluginCapabilitySummary; use codex_plugin::PluginId; diff --git a/codex-rs/core/src/plugins/manager_tests.rs b/codex-rs/core/src/plugins/manager_tests.rs index 08d0e7cc7..2089670d7 100644 --- a/codex-rs/core/src/plugins/manager_tests.rs +++ b/codex-rs/core/src/plugins/manager_tests.rs @@ -1,5 +1,4 @@ use super::*; -use crate::auth::CodexAuth; use crate::config::CONFIG_TOML_FILE; use crate::config::ConfigBuilder; use crate::config::types::McpServerTransportConfig; @@ -15,6 +14,7 @@ use crate::plugins::test_support::write_curated_plugin_sha_with as write_curated use crate::plugins::test_support::write_file; use crate::plugins::test_support::write_openai_curated_marketplace; use codex_app_server_protocol::ConfigLayerSource; +use codex_login::CodexAuth; use codex_protocol::protocol::Product; use pretty_assertions::assert_eq; use std::fs; diff --git a/codex-rs/core/src/plugins/remote.rs b/codex-rs/core/src/plugins/remote.rs index 756824b33..f26bbe888 100644 --- a/codex-rs/core/src/plugins/remote.rs +++ b/codex-rs/core/src/plugins/remote.rs @@ -1,6 +1,6 @@ -use crate::auth::CodexAuth; use crate::config::Config; -use crate::default_client::build_reqwest_client; +use codex_login::CodexAuth; +use codex_login::default_client::build_reqwest_client; use codex_protocol::protocol::Product; use serde::Deserialize; use std::time::Duration; diff --git a/codex-rs/core/src/plugins/startup_sync.rs b/codex-rs/core/src/plugins/startup_sync.rs index ceeb1d0f8..6dcf18f54 100644 --- a/codex-rs/core/src/plugins/startup_sync.rs +++ b/codex-rs/core/src/plugins/startup_sync.rs @@ -1,4 +1,3 @@ -use crate::default_client::build_reqwest_client; use std::path::Path; use std::path::PathBuf; use std::process::Command; @@ -16,8 +15,9 @@ use tracing::info; use tracing::warn; use zip::ZipArchive; -use crate::AuthManager; use crate::config::Config; +use codex_login::AuthManager; +use codex_login::default_client::build_reqwest_client; use super::PluginsManager; diff --git a/codex-rs/core/src/plugins/startup_sync_tests.rs b/codex-rs/core/src/plugins/startup_sync_tests.rs index c3d11572c..e1a1d8596 100644 --- a/codex-rs/core/src/plugins/startup_sync_tests.rs +++ b/codex-rs/core/src/plugins/startup_sync_tests.rs @@ -1,10 +1,10 @@ use super::*; -use crate::auth::CodexAuth; use crate::config::CONFIG_TOML_FILE; use crate::plugins::test_support::TEST_CURATED_PLUGIN_SHA; use crate::plugins::test_support::write_curated_plugin_sha; use crate::plugins::test_support::write_file; use crate::plugins::test_support::write_openai_curated_marketplace; +use codex_login::CodexAuth; use pretty_assertions::assert_eq; use std::io::Write; use std::path::Path; diff --git a/codex-rs/core/src/provider_auth.rs b/codex-rs/core/src/provider_auth.rs index 4737ccc8b..09f8b273c 100644 --- a/codex-rs/core/src/provider_auth.rs +++ b/codex-rs/core/src/provider_auth.rs @@ -1,7 +1,7 @@ use std::sync::Arc; -use crate::AuthManager; use crate::model_provider_info::ModelProviderInfo; +use codex_login::AuthManager; /// Returns the provider-scoped auth manager when this provider uses command-backed auth. /// diff --git a/codex-rs/core/src/realtime_conversation.rs b/codex-rs/core/src/realtime_conversation.rs index 1bfe1b5a8..fafbb5063 100644 --- a/codex-rs/core/src/realtime_conversation.rs +++ b/codex-rs/core/src/realtime_conversation.rs @@ -1,10 +1,7 @@ -use crate::CodexAuth; use crate::api_bridge::map_api_error; -use crate::auth::read_openai_api_key_from_env; use crate::codex::Session; use crate::config::RealtimeWsMode; use crate::config::RealtimeWsVersion; -use crate::default_client::default_headers; use crate::error::CodexErr; use crate::error::Result as CodexResult; use crate::realtime_context::build_realtime_startup_context; @@ -22,6 +19,10 @@ use codex_api::RealtimeSessionMode; use codex_api::RealtimeWebsocketClient; use codex_api::endpoint::realtime_websocket::RealtimeWebsocketEvents; use codex_api::endpoint::realtime_websocket::RealtimeWebsocketWriter; +use codex_login::AuthMode; +use codex_login::CodexAuth; +use codex_login::default_client::default_headers; +use codex_login::read_openai_api_key_from_env; use codex_protocol::protocol::CodexErrorInfo; use codex_protocol::protocol::ConversationAudioParams; use codex_protocol::protocol::ConversationStartParams; @@ -459,7 +460,7 @@ async fn prepare_realtime_start( .unwrap_or_else(|| Arc::clone(&sess.services.auth_manager)); let auth = auth_manager.auth().await; let realtime_api_key = realtime_api_key(auth.as_ref(), &provider)?; - let mut api_provider = provider.to_api_provider(Some(crate::auth::AuthMode::ApiKey))?; + let mut api_provider = provider.to_api_provider(Some(AuthMode::ApiKey))?; let config = sess.get_config().await; if let Some(realtime_ws_base_url) = &config.experimental_realtime_ws_base_url { api_provider.base_url = realtime_ws_base_url.clone(); diff --git a/codex-rs/core/src/review_format.rs b/codex-rs/core/src/review_format.rs index b0e286ce9..2e249df79 100644 --- a/codex-rs/core/src/review_format.rs +++ b/codex-rs/core/src/review_format.rs @@ -1,5 +1,5 @@ -use crate::protocol::ReviewFinding; -use crate::protocol::ReviewOutputEvent; +use codex_protocol::protocol::ReviewFinding; +use codex_protocol::protocol::ReviewOutputEvent; // Note: We keep this module UI-agnostic. It returns plain strings that // higher layers (e.g., TUI) may style as needed. diff --git a/codex-rs/core/src/safety.rs b/codex-rs/core/src/safety.rs index 61fdc8f6e..dec7a0087 100644 --- a/codex-rs/core/src/safety.rs +++ b/codex-rs/core/src/safety.rs @@ -2,13 +2,13 @@ use std::path::Component; use std::path::Path; use std::path::PathBuf; -use crate::protocol::AskForApproval; -use crate::protocol::FileSystemSandboxPolicy; -use crate::protocol::SandboxPolicy; use crate::util::resolve_path; use codex_apply_patch::ApplyPatchAction; use codex_apply_patch::ApplyPatchFileChange; use codex_protocol::config_types::WindowsSandboxLevel; +use codex_protocol::permissions::FileSystemSandboxPolicy; +use codex_protocol::protocol::AskForApproval; +use codex_protocol::protocol::SandboxPolicy; use codex_sandboxing::SandboxType; use codex_sandboxing::get_platform_sandbox; diff --git a/codex-rs/core/src/sandbox_tags.rs b/codex-rs/core/src/sandbox_tags.rs index 57a99a803..b3b474909 100644 --- a/codex-rs/core/src/sandbox_tags.rs +++ b/codex-rs/core/src/sandbox_tags.rs @@ -1,5 +1,5 @@ -use crate::protocol::SandboxPolicy; use codex_protocol::config_types::WindowsSandboxLevel; +use codex_protocol::protocol::SandboxPolicy; use codex_sandboxing::SandboxType; use codex_sandboxing::get_platform_sandbox; diff --git a/codex-rs/core/src/sandbox_tags_tests.rs b/codex-rs/core/src/sandbox_tags_tests.rs index cc75d4750..6ff54f6eb 100644 --- a/codex-rs/core/src/sandbox_tags_tests.rs +++ b/codex-rs/core/src/sandbox_tags_tests.rs @@ -1,7 +1,7 @@ use super::sandbox_tag; -use crate::protocol::SandboxPolicy; use codex_protocol::config_types::WindowsSandboxLevel; use codex_protocol::protocol::NetworkAccess; +use codex_protocol::protocol::SandboxPolicy; use codex_sandboxing::SandboxType; use codex_sandboxing::get_platform_sandbox; use pretty_assertions::assert_eq; diff --git a/codex-rs/core/src/seatbelt.rs b/codex-rs/core/src/seatbelt.rs index 353c9708f..cc59f65c8 100644 --- a/codex-rs/core/src/seatbelt.rs +++ b/codex-rs/core/src/seatbelt.rs @@ -1,6 +1,5 @@ #![cfg(target_os = "macos")] -use crate::protocol::SandboxPolicy; use crate::spawn::CODEX_SANDBOX_ENV_VAR; use crate::spawn::SpawnChildRequest; use crate::spawn::StdioPolicy; @@ -8,6 +7,7 @@ use crate::spawn::spawn_child_async; use codex_network_proxy::NetworkProxy; use codex_protocol::permissions::FileSystemSandboxPolicy; use codex_protocol::permissions::NetworkSandboxPolicy; +use codex_protocol::protocol::SandboxPolicy; use codex_sandboxing::seatbelt::MACOS_PATH_TO_SEATBELT_EXECUTABLE; use codex_sandboxing::seatbelt::create_seatbelt_command_args_for_policies; use std::collections::HashMap; diff --git a/codex-rs/core/src/state/service.rs b/codex-rs/core/src/state/service.rs index 2e33f03d8..a7c384202 100644 --- a/codex-rs/core/src/state/service.rs +++ b/codex-rs/core/src/state/service.rs @@ -1,6 +1,5 @@ use std::sync::Arc; -use crate::AuthManager; use crate::RolloutRecorder; use crate::SkillsManager; use crate::agent::AgentControl; @@ -8,11 +7,9 @@ use crate::client::ModelClient; use crate::config::StartedNetworkProxy; use crate::exec_policy::ExecPolicyManager; use crate::mcp::McpManager; -use crate::mcp_connection_manager::McpConnectionManager; use crate::models_manager::manager::ModelsManager; use crate::plugins::PluginsManager; use crate::skills_watcher::SkillsWatcher; -use crate::state_db::StateDbHandle; use crate::tools::code_mode::CodeModeService; use crate::tools::network_approval::NetworkApprovalService; use crate::tools::sandboxing::ApprovalStore; @@ -20,7 +17,10 @@ use crate::unified_exec::UnifiedExecProcessManager; use codex_analytics::AnalyticsEventsClient; use codex_exec_server::Environment; use codex_hooks::Hooks; +use codex_login::AuthManager; +use codex_mcp::mcp_connection_manager::McpConnectionManager; use codex_otel::SessionTelemetry; +use codex_rollout::state_db::StateDbHandle; use std::path::PathBuf; use tokio::sync::Mutex; use tokio::sync::RwLock; diff --git a/codex-rs/core/src/state/session.rs b/codex-rs/core/src/state/session.rs index 1a1423616..206f75060 100644 --- a/codex-rs/core/src/state/session.rs +++ b/codex-rs/core/src/state/session.rs @@ -9,10 +9,10 @@ use std::collections::HashSet; use crate::codex::PreviousTurnSettings; use crate::codex::SessionConfiguration; use crate::context_manager::ContextManager; -use crate::protocol::RateLimitSnapshot; -use crate::protocol::TokenUsage; -use crate::protocol::TokenUsageInfo; use crate::session_startup_prewarm::SessionStartupPrewarmHandle; +use codex_protocol::protocol::RateLimitSnapshot; +use codex_protocol::protocol::TokenUsage; +use codex_protocol::protocol::TokenUsageInfo; use codex_protocol::protocol::TurnContextItem; use codex_utils_output_truncation::TruncationPolicy; diff --git a/codex-rs/core/src/state/session_tests.rs b/codex-rs/core/src/state/session_tests.rs index 2b7c276d7..1af7ccc8f 100644 --- a/codex-rs/core/src/state/session_tests.rs +++ b/codex-rs/core/src/state/session_tests.rs @@ -1,6 +1,7 @@ use super::*; use crate::codex::make_session_configuration_for_tests; -use crate::protocol::RateLimitWindow; +use codex_protocol::protocol::CreditsSnapshot; +use codex_protocol::protocol::RateLimitWindow; use pretty_assertions::assert_eq; #[tokio::test] @@ -112,7 +113,7 @@ async fn set_rate_limits_carries_credits_and_plan_type_from_codex_to_codex_other resets_at: Some(100), }), secondary: None, - credits: Some(crate::protocol::CreditsSnapshot { + credits: Some(CreditsSnapshot { has_credits: true, unlimited: false, balance: Some("50".to_string()), @@ -144,7 +145,7 @@ async fn set_rate_limits_carries_credits_and_plan_type_from_codex_to_codex_other resets_at: Some(200), }), secondary: None, - credits: Some(crate::protocol::CreditsSnapshot { + credits: Some(CreditsSnapshot { has_credits: true, unlimited: false, balance: Some("50".to_string()), diff --git a/codex-rs/core/src/state/turn.rs b/codex-rs/core/src/state/turn.rs index 07d040ca2..b573123ad 100644 --- a/codex-rs/core/src/state/turn.rs +++ b/codex-rs/core/src/state/turn.rs @@ -18,10 +18,10 @@ use rmcp::model::RequestId; use tokio::sync::oneshot; use crate::codex::TurnContext; -use crate::protocol::ReviewDecision; -use crate::protocol::TokenUsage; use crate::tasks::SessionTask; use codex_protocol::models::PermissionProfile; +use codex_protocol::protocol::ReviewDecision; +use codex_protocol::protocol::TokenUsage; /// Metadata about the currently running turn. pub(crate) struct ActiveTurn { diff --git a/codex-rs/core/src/stream_events_utils.rs b/codex-rs/core/src/stream_events_utils.rs index cd77f1d5a..5cc9574db 100644 --- a/codex-rs/core/src/stream_events_utils.rs +++ b/codex-rs/core/src/stream_events_utils.rs @@ -18,7 +18,6 @@ use crate::function_tool::FunctionCallError; use crate::memories::citations::get_thread_id_from_citations; use crate::memories::citations::parse_memory_citation; use crate::parse_turn_item; -use crate::state_db; use crate::tools::parallel::ToolCallRuntime; use crate::tools::router::ToolRouter; use codex_protocol::models::DeveloperInstructions; @@ -26,6 +25,7 @@ use codex_protocol::models::FunctionCallOutputBody; use codex_protocol::models::FunctionCallOutputPayload; use codex_protocol::models::ResponseInputItem; use codex_protocol::models::ResponseItem; +use codex_rollout::state_db; use codex_utils_stream_parser::strip_proposed_plan_blocks; use futures::Future; use tracing::debug; diff --git a/codex-rs/core/src/tasks/ghost_snapshot.rs b/codex-rs/core/src/tasks/ghost_snapshot.rs index 6028c311c..7b848098a 100644 --- a/codex-rs/core/src/tasks/ghost_snapshot.rs +++ b/codex-rs/core/src/tasks/ghost_snapshot.rs @@ -1,6 +1,4 @@ use crate::codex::TurnContext; -use crate::protocol::EventMsg; -use crate::protocol::WarningEvent; use crate::state::TaskKind; use crate::tasks::SessionTask; use crate::tasks::SessionTaskContext; @@ -10,6 +8,8 @@ use codex_git_utils::GhostSnapshotReport; use codex_git_utils::GitToolingError; use codex_git_utils::create_ghost_commit_with_report; use codex_protocol::models::ResponseItem; +use codex_protocol::protocol::EventMsg; +use codex_protocol::protocol::WarningEvent; use codex_protocol::user_input::UserInput; use codex_utils_readiness::Readiness; use codex_utils_readiness::Token; diff --git a/codex-rs/core/src/tasks/mod.rs b/codex-rs/core/src/tasks/mod.rs index 0f14e233c..74b2e471c 100644 --- a/codex-rs/core/src/tasks/mod.rs +++ b/codex-rs/core/src/tasks/mod.rs @@ -19,7 +19,6 @@ use tracing::info_span; use tracing::trace; use tracing::warn; -use crate::AuthManager; use crate::codex::Session; use crate::codex::TurnContext; use crate::contextual_user_message::TURN_ABORTED_CLOSE_TAG; @@ -29,13 +28,10 @@ use crate::hook_runtime::inspect_pending_input; use crate::hook_runtime::record_additional_contexts; use crate::hook_runtime::record_pending_input; use crate::models_manager::manager::ModelsManager; -use crate::protocol::EventMsg; -use crate::protocol::TurnAbortReason; -use crate::protocol::TurnAbortedEvent; -use crate::protocol::TurnCompleteEvent; use crate::state::ActiveTurn; use crate::state::RunningTask; use crate::state::TaskKind; +use codex_login::AuthManager; use codex_otel::SessionTelemetry; use codex_otel::metrics::names::TURN_E2E_DURATION_METRIC; use codex_otel::metrics::names::TURN_NETWORK_PROXY_METRIC; @@ -44,7 +40,12 @@ use codex_otel::metrics::names::TURN_TOOL_CALL_METRIC; use codex_protocol::models::ContentItem; use codex_protocol::models::ResponseInputItem; use codex_protocol::models::ResponseItem; +use codex_protocol::protocol::EventMsg; use codex_protocol::protocol::RolloutItem; +use codex_protocol::protocol::TokenUsage; +use codex_protocol::protocol::TurnAbortReason; +use codex_protocol::protocol::TurnAbortedEvent; +use codex_protocol::protocol::TurnCompleteEvent; use codex_protocol::user_input::UserInput; use codex_features::Feature; @@ -405,7 +406,7 @@ impl Session { &[tmp_mem], ); let total_token_usage = self.total_token_usage().await.unwrap_or_default(); - let turn_token_usage = crate::protocol::TokenUsage { + let turn_token_usage = TokenUsage { input_tokens: (total_token_usage.input_tokens - token_usage_at_turn_start.input_tokens) .max(0), diff --git a/codex-rs/core/src/tasks/regular.rs b/codex-rs/core/src/tasks/regular.rs index 171c0adaa..7a274d534 100644 --- a/codex-rs/core/src/tasks/regular.rs +++ b/codex-rs/core/src/tasks/regular.rs @@ -5,10 +5,10 @@ use tokio_util::sync::CancellationToken; use crate::codex::TurnContext; use crate::codex::run_turn; -use crate::protocol::EventMsg; -use crate::protocol::TurnStartedEvent; 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; diff --git a/codex-rs/core/src/tasks/undo.rs b/codex-rs/core/src/tasks/undo.rs index 7fd2ea07e..48cdf11aa 100644 --- a/codex-rs/core/src/tasks/undo.rs +++ b/codex-rs/core/src/tasks/undo.rs @@ -1,9 +1,6 @@ use std::sync::Arc; use crate::codex::TurnContext; -use crate::protocol::EventMsg; -use crate::protocol::UndoCompletedEvent; -use crate::protocol::UndoStartedEvent; use crate::state::TaskKind; use crate::tasks::SessionTask; use crate::tasks::SessionTaskContext; @@ -11,6 +8,9 @@ use async_trait::async_trait; use codex_git_utils::RestoreGhostCommitOptions; use codex_git_utils::restore_ghost_commit_with_options; use codex_protocol::models::ResponseItem; +use codex_protocol::protocol::EventMsg; +use codex_protocol::protocol::UndoCompletedEvent; +use codex_protocol::protocol::UndoStartedEvent; use codex_protocol::user_input::UserInput; use tokio_util::sync::CancellationToken; use tracing::error; diff --git a/codex-rs/core/src/tasks/user_shell.rs b/codex-rs/core/src/tasks/user_shell.rs index 25f994c86..4d4ff383a 100644 --- a/codex-rs/core/src/tasks/user_shell.rs +++ b/codex-rs/core/src/tasks/user_shell.rs @@ -16,20 +16,20 @@ use crate::exec::StdoutStream; use crate::exec::StreamOutput; use crate::exec::execute_exec_request; use crate::exec_env::create_env; -use crate::parse_command::parse_command; -use crate::protocol::EventMsg; -use crate::protocol::ExecCommandBeginEvent; -use crate::protocol::ExecCommandEndEvent; -use crate::protocol::ExecCommandSource; -use crate::protocol::ExecCommandStatus; -use crate::protocol::SandboxPolicy; -use crate::protocol::TurnStartedEvent; use crate::sandboxing::ExecRequest; use crate::state::TaskKind; use crate::tools::format_exec_output_str; use crate::tools::runtimes::maybe_wrap_shell_lc_with_snapshot; use crate::user_shell_command::user_shell_command_record_item; +use codex_protocol::protocol::EventMsg; +use codex_protocol::protocol::ExecCommandBeginEvent; +use codex_protocol::protocol::ExecCommandEndEvent; +use codex_protocol::protocol::ExecCommandSource; +use codex_protocol::protocol::ExecCommandStatus; +use codex_protocol::protocol::SandboxPolicy; +use codex_protocol::protocol::TurnStartedEvent; use codex_sandboxing::SandboxType; +use codex_shell_command::parse_command::parse_command; use super::SessionTask; use super::SessionTaskContext; diff --git a/codex-rs/core/src/test_support.rs b/codex-rs/core/src/test_support.rs index 075395e3a..d6f99a0ae 100644 --- a/codex-rs/core/src/test_support.rs +++ b/codex-rs/core/src/test_support.rs @@ -14,8 +14,6 @@ use codex_protocol::openai_models::ModelPreset; use codex_protocol::openai_models::ModelsResponse; use once_cell::sync::Lazy; -use crate::AuthManager; -use crate::CodexAuth; use crate::ModelProviderInfo; use crate::ThreadManager; use crate::config::Config; @@ -23,6 +21,8 @@ use crate::models_manager::collaboration_mode_presets; use crate::models_manager::manager::ModelsManager; use crate::thread_manager; use crate::unified_exec; +use codex_login::AuthManager; +use codex_login::CodexAuth; static TEST_MODEL_PRESETS: Lazy> = Lazy::new(|| { let file_contents = include_str!("../models.json"); diff --git a/codex-rs/core/src/thread_manager.rs b/codex-rs/core/src/thread_manager.rs index 7f272f959..94a81d620 100644 --- a/codex-rs/core/src/thread_manager.rs +++ b/codex-rs/core/src/thread_manager.rs @@ -1,5 +1,3 @@ -use crate::AuthManager; -use crate::CodexAuth; use crate::ModelProviderInfo; use crate::OPENAI_PROVIDER_ID; use crate::SkillsManager; @@ -17,9 +15,6 @@ use crate::mcp::McpManager; use crate::models_manager::collaboration_mode_presets::CollaborationModesConfig; use crate::models_manager::manager::ModelsManager; use crate::plugins::PluginsManager; -use crate::protocol::Event; -use crate::protocol::EventMsg; -use crate::protocol::SessionConfiguredEvent; use crate::rollout::RolloutRecorder; use crate::rollout::truncation; use crate::shell_snapshot::ShellSnapshot; @@ -29,15 +24,20 @@ use crate::tasks::interrupted_turn_history_marker; use codex_app_server_protocol::ThreadHistoryBuilder; use codex_app_server_protocol::TurnStatus; use codex_exec_server::EnvironmentManager; +use codex_login::AuthManager; +use codex_login::CodexAuth; use codex_protocol::ThreadId; use codex_protocol::config_types::CollaborationModeMask; #[cfg(test)] use codex_protocol::models::ResponseItem; use codex_protocol::openai_models::ModelPreset; +use codex_protocol::protocol::Event; +use codex_protocol::protocol::EventMsg; use codex_protocol::protocol::InitialHistory; use codex_protocol::protocol::McpServerRefreshConfig; use codex_protocol::protocol::Op; use codex_protocol::protocol::RolloutItem; +use codex_protocol::protocol::SessionConfiguredEvent; use codex_protocol::protocol::SessionSource; use codex_protocol::protocol::TurnAbortReason; use codex_protocol::protocol::TurnAbortedEvent; diff --git a/codex-rs/core/src/tools/events.rs b/codex-rs/core/src/tools/events.rs index 7cf3382ab..b66423540 100644 --- a/codex-rs/core/src/tools/events.rs +++ b/codex-rs/core/src/tools/events.rs @@ -4,20 +4,20 @@ use crate::error::CodexErr; use crate::error::SandboxErr; use crate::exec::ExecToolCallOutput; use crate::function_tool::FunctionCallError; -use crate::parse_command::parse_command; -use crate::protocol::EventMsg; -use crate::protocol::ExecCommandBeginEvent; -use crate::protocol::ExecCommandEndEvent; -use crate::protocol::ExecCommandSource; -use crate::protocol::ExecCommandStatus; -use crate::protocol::FileChange; -use crate::protocol::PatchApplyBeginEvent; -use crate::protocol::PatchApplyEndEvent; -use crate::protocol::PatchApplyStatus; -use crate::protocol::TurnDiffEvent; use crate::tools::context::SharedTurnDiffTracker; use crate::tools::sandboxing::ToolError; use codex_protocol::parse_command::ParsedCommand; +use codex_protocol::protocol::EventMsg; +use codex_protocol::protocol::ExecCommandBeginEvent; +use codex_protocol::protocol::ExecCommandEndEvent; +use codex_protocol::protocol::ExecCommandSource; +use codex_protocol::protocol::ExecCommandStatus; +use codex_protocol::protocol::FileChange; +use codex_protocol::protocol::PatchApplyBeginEvent; +use codex_protocol::protocol::PatchApplyEndEvent; +use codex_protocol::protocol::PatchApplyStatus; +use codex_protocol::protocol::TurnDiffEvent; +use codex_shell_command::parse_command::parse_command; use std::collections::HashMap; use std::path::Path; use std::path::PathBuf; diff --git a/codex-rs/core/src/tools/handlers/js_repl.rs b/codex-rs/core/src/tools/handlers/js_repl.rs index 43b986e0d..c5906abaf 100644 --- a/codex-rs/core/src/tools/handlers/js_repl.rs +++ b/codex-rs/core/src/tools/handlers/js_repl.rs @@ -7,7 +7,6 @@ use std::time::Instant; use crate::exec::ExecToolCallOutput; use crate::exec::StreamOutput; use crate::function_tool::FunctionCallError; -use crate::protocol::ExecCommandSource; use crate::tools::context::FunctionToolOutput; use crate::tools::context::ToolInvocation; use crate::tools::context::ToolPayload; @@ -22,6 +21,7 @@ use crate::tools::registry::ToolHandler; use crate::tools::registry::ToolKind; use codex_features::Feature; use codex_protocol::models::FunctionCallOutputContentItem; +use codex_protocol::protocol::ExecCommandSource; pub struct JsReplHandler; pub struct JsReplResetHandler; diff --git a/codex-rs/core/src/tools/handlers/js_repl_tests.rs b/codex-rs/core/src/tools/handlers/js_repl_tests.rs index 51f7b3a17..9697d7700 100644 --- a/codex-rs/core/src/tools/handlers/js_repl_tests.rs +++ b/codex-rs/core/src/tools/handlers/js_repl_tests.rs @@ -2,8 +2,8 @@ use std::time::Duration; use super::parse_freeform_args; use crate::codex::make_session_and_context_with_rx; -use crate::protocol::EventMsg; -use crate::protocol::ExecCommandSource; +use codex_protocol::protocol::EventMsg; +use codex_protocol::protocol::ExecCommandSource; use pretty_assertions::assert_eq; #[test] diff --git a/codex-rs/core/src/tools/handlers/mcp_resource.rs b/codex-rs/core/src/tools/handlers/mcp_resource.rs index 02253d108..158aee612 100644 --- a/codex-rs/core/src/tools/handlers/mcp_resource.rs +++ b/codex-rs/core/src/tools/handlers/mcp_resource.rs @@ -21,15 +21,15 @@ use serde_json::Value; use crate::codex::Session; use crate::codex::TurnContext; use crate::function_tool::FunctionCallError; -use crate::protocol::EventMsg; -use crate::protocol::McpInvocation; -use crate::protocol::McpToolCallBeginEvent; -use crate::protocol::McpToolCallEndEvent; use crate::tools::context::FunctionToolOutput; use crate::tools::context::ToolInvocation; use crate::tools::context::ToolPayload; use crate::tools::registry::ToolHandler; use crate::tools::registry::ToolKind; +use codex_protocol::protocol::EventMsg; +use codex_protocol::protocol::McpInvocation; +use codex_protocol::protocol::McpToolCallBeginEvent; +use codex_protocol::protocol::McpToolCallEndEvent; pub struct McpResourceHandler; 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 c971346d7..bb9408587 100644 --- a/codex-rs/core/src/tools/handlers/multi_agents_tests.rs +++ b/codex-rs/core/src/tools/handlers/multi_agents_tests.rs @@ -1,24 +1,10 @@ use super::*; -use crate::AuthManager; -use crate::CodexAuth; use crate::ThreadManager; use crate::built_in_model_providers; use crate::codex::make_session_and_context; use crate::config::DEFAULT_AGENT_MAX_DEPTH; use crate::config::types::ShellEnvironmentPolicy; use crate::function_tool::FunctionCallError; -use crate::protocol::AgentStatus; -use crate::protocol::AskForApproval; -use crate::protocol::EventMsg; -use crate::protocol::FileSystemSandboxPolicy; -use crate::protocol::NetworkSandboxPolicy; -use crate::protocol::Op; -use crate::protocol::SandboxPolicy; -use crate::protocol::SessionSource; -use crate::protocol::SubAgentSource; -use crate::protocol::TurnAbortReason; -use crate::protocol::TurnAbortedEvent; -use crate::protocol::TurnCompleteEvent; use crate::session_prefix::format_subagent_notification_message; use crate::state::TaskKind; use crate::tasks::SessionTask; @@ -32,6 +18,8 @@ use crate::tools::handlers::multi_agents_v2::SpawnAgentHandler as SpawnAgentHand use crate::tools::handlers::multi_agents_v2::WaitAgentHandler as WaitAgentHandlerV2; use crate::turn_diff_tracker::TurnDiffTracker; use codex_features::Feature; +use codex_login::AuthManager; +use codex_login::CodexAuth; use codex_protocol::AgentPath; use codex_protocol::ThreadId; use codex_protocol::models::BaseInstructions; @@ -39,9 +27,21 @@ use codex_protocol::models::ContentItem; use codex_protocol::models::FunctionCallOutputBody; use codex_protocol::models::ResponseInputItem; use codex_protocol::models::ResponseItem; +use codex_protocol::protocol::AgentStatus; +use codex_protocol::protocol::AskForApproval; +use codex_protocol::protocol::EventMsg; +use codex_protocol::protocol::FileSystemSandboxPolicy; use codex_protocol::protocol::InitialHistory; use codex_protocol::protocol::InterAgentCommunication; +use codex_protocol::protocol::NetworkSandboxPolicy; +use codex_protocol::protocol::Op; use codex_protocol::protocol::RolloutItem; +use codex_protocol::protocol::SandboxPolicy; +use codex_protocol::protocol::SessionSource; +use codex_protocol::protocol::SubAgentSource; +use codex_protocol::protocol::TurnAbortReason; +use codex_protocol::protocol::TurnAbortedEvent; +use codex_protocol::protocol::TurnCompleteEvent; use codex_protocol::user_input::UserInput; use core_test_support::TempDirExt; use pretty_assertions::assert_eq; diff --git a/codex-rs/core/src/tools/handlers/shell.rs b/codex-rs/core/src/tools/handlers/shell.rs index 5191b893e..34cdd5b97 100644 --- a/codex-rs/core/src/tools/handlers/shell.rs +++ b/codex-rs/core/src/tools/handlers/shell.rs @@ -11,9 +11,7 @@ use crate::exec::ExecParams; use crate::exec_env::create_env; use crate::exec_policy::ExecApprovalRequest; use crate::function_tool::FunctionCallError; -use crate::is_safe_command::is_known_safe_command; use crate::maybe_emit_implicit_skill_invocation; -use crate::protocol::ExecCommandSource; use crate::shell::Shell; use crate::tools::context::FunctionToolOutput; use crate::tools::context::ToolInvocation; @@ -39,6 +37,8 @@ use crate::tools::runtimes::shell::ShellRuntimeBackend; use crate::tools::sandboxing::ToolCtx; use codex_features::Feature; use codex_protocol::models::PermissionProfile; +use codex_protocol::protocol::ExecCommandSource; +use codex_shell_command::is_safe_command::is_known_safe_command; use codex_tools::ShellCommandBackendConfig; pub struct ShellHandler; diff --git a/codex-rs/core/src/tools/handlers/shell_tests.rs b/codex-rs/core/src/tools/handlers/shell_tests.rs index 68b92dcf9..fee47c214 100644 --- a/codex-rs/core/src/tools/handlers/shell_tests.rs +++ b/codex-rs/core/src/tools/handlers/shell_tests.rs @@ -6,9 +6,6 @@ use pretty_assertions::assert_eq; use crate::codex::make_session_and_context; use crate::exec_env::create_env; -use crate::is_safe_command::is_known_safe_command; -use crate::powershell::try_find_powershell_executable_blocking; -use crate::powershell::try_find_pwsh_executable_blocking; use crate::sandboxing::SandboxPermissions; use crate::shell::Shell; use crate::shell::ShellType; @@ -20,6 +17,9 @@ use crate::tools::handlers::ShellCommandHandler; use crate::tools::handlers::ShellHandler; use crate::tools::registry::ToolHandler; use crate::turn_diff_tracker::TurnDiffTracker; +use codex_shell_command::is_safe_command::is_known_safe_command; +use codex_shell_command::powershell::try_find_powershell_executable_blocking; +use codex_shell_command::powershell::try_find_pwsh_executable_blocking; use serde_json::json; use tokio::sync::Mutex; use tokio::sync::watch; diff --git a/codex-rs/core/src/tools/handlers/tool_search.rs b/codex-rs/core/src/tools/handlers/tool_search.rs index dac79a257..aa9d8e92f 100644 --- a/codex-rs/core/src/tools/handlers/tool_search.rs +++ b/codex-rs/core/src/tools/handlers/tool_search.rs @@ -1,5 +1,4 @@ use crate::function_tool::FunctionCallError; -use crate::mcp_connection_manager::ToolInfo; use crate::tools::context::ToolInvocation; use crate::tools::context::ToolPayload; use crate::tools::context::ToolSearchOutput; @@ -9,6 +8,7 @@ use async_trait::async_trait; use bm25::Document; use bm25::Language; use bm25::SearchEngineBuilder; +use codex_mcp::mcp_connection_manager::ToolInfo; use codex_tools::TOOL_SEARCH_DEFAULT_LIMIT; use codex_tools::TOOL_SEARCH_TOOL_NAME; use codex_tools::ToolSearchResultSource; diff --git a/codex-rs/core/src/tools/handlers/tool_suggest.rs b/codex-rs/core/src/tools/handlers/tool_suggest.rs index 440f8d58b..45c77a350 100644 --- a/codex-rs/core/src/tools/handlers/tool_suggest.rs +++ b/codex-rs/core/src/tools/handlers/tool_suggest.rs @@ -160,7 +160,7 @@ async fn verify_tool_suggestion_completed( session: &crate::codex::Session, turn: &crate::codex::TurnContext, tool: &DiscoverableTool, - auth: Option<&crate::CodexAuth>, + auth: Option<&codex_login::CodexAuth>, ) -> bool { match tool { DiscoverableTool::Connector(connector) => refresh_missing_suggested_connectors( @@ -198,7 +198,7 @@ async fn verify_tool_suggestion_completed( async fn refresh_missing_suggested_connectors( session: &crate::codex::Session, turn: &crate::codex::TurnContext, - auth: Option<&crate::CodexAuth>, + auth: Option<&codex_login::CodexAuth>, expected_connector_ids: &[String], tool_id: &str, ) -> Option> { diff --git a/codex-rs/core/src/tools/handlers/unified_exec.rs b/codex-rs/core/src/tools/handlers/unified_exec.rs index 1b0e393c6..98d7d717f 100644 --- a/codex-rs/core/src/tools/handlers/unified_exec.rs +++ b/codex-rs/core/src/tools/handlers/unified_exec.rs @@ -1,8 +1,5 @@ use crate::function_tool::FunctionCallError; -use crate::is_safe_command::is_known_safe_command; use crate::maybe_emit_implicit_skill_invocation; -use crate::protocol::EventMsg; -use crate::protocol::TerminalInteractionEvent; use crate::sandboxing::SandboxPermissions; use crate::shell::Shell; use crate::shell::get_shell_by_model_provided_path; @@ -30,6 +27,9 @@ use codex_features::Feature; use codex_otel::SessionTelemetry; use codex_otel::metrics::names::TOOL_CALL_UNIFIED_EXEC_METRIC; use codex_protocol::models::PermissionProfile; +use codex_protocol::protocol::EventMsg; +use codex_protocol::protocol::TerminalInteractionEvent; +use codex_shell_command::is_safe_command::is_known_safe_command; use codex_tools::UnifiedExecShellMode; use serde::Deserialize; use std::path::PathBuf; diff --git a/codex-rs/core/src/tools/handlers/view_image.rs b/codex-rs/core/src/tools/handlers/view_image.rs index f4015a762..e87638bba 100644 --- a/codex-rs/core/src/tools/handlers/view_image.rs +++ b/codex-rs/core/src/tools/handlers/view_image.rs @@ -12,14 +12,14 @@ use serde::Deserialize; use crate::function_tool::FunctionCallError; use crate::original_image_detail::can_request_original_image_detail; -use crate::protocol::EventMsg; -use crate::protocol::ViewImageToolCallEvent; use crate::tools::context::ToolInvocation; use crate::tools::context::ToolOutput; use crate::tools::context::ToolPayload; use crate::tools::handlers::parse_arguments; use crate::tools::registry::ToolHandler; use crate::tools::registry::ToolKind; +use codex_protocol::protocol::EventMsg; +use codex_protocol::protocol::ViewImageToolCallEvent; pub struct ViewImageHandler; diff --git a/codex-rs/core/src/tools/js_repl/mod_tests.rs b/codex-rs/core/src/tools/js_repl/mod_tests.rs index 242fe9140..bbc0f50dc 100644 --- a/codex-rs/core/src/tools/js_repl/mod_tests.rs +++ b/codex-rs/core/src/tools/js_repl/mod_tests.rs @@ -1,9 +1,6 @@ use super::*; use crate::codex::make_session_and_context; use crate::codex::make_session_and_context_with_dynamic_tools_and_rx; -use crate::protocol::AskForApproval; -use crate::protocol::EventMsg; -use crate::protocol::SandboxPolicy; use crate::turn_diff_tracker::TurnDiffTracker; use codex_features::Feature; use codex_protocol::dynamic_tools::DynamicToolCallOutputContentItem; @@ -14,6 +11,11 @@ use codex_protocol::models::FunctionCallOutputPayload; use codex_protocol::models::ImageDetail; use codex_protocol::models::ResponseInputItem; use codex_protocol::openai_models::InputModality; +use codex_protocol::permissions::FileSystemSandboxPolicy; +use codex_protocol::permissions::NetworkSandboxPolicy; +use codex_protocol::protocol::AskForApproval; +use codex_protocol::protocol::EventMsg; +use codex_protocol::protocol::SandboxPolicy; use core_test_support::PathBufExt; use core_test_support::TempDirExt; use pretty_assertions::assert_eq; @@ -25,10 +27,8 @@ fn set_danger_full_access(turn: &mut crate::codex::TurnContext) { turn.sandbox_policy .set(SandboxPolicy::DangerFullAccess) .expect("test setup should allow updating sandbox policy"); - turn.file_system_sandbox_policy = - crate::protocol::FileSystemSandboxPolicy::from(turn.sandbox_policy.get()); - turn.network_sandbox_policy = - crate::protocol::NetworkSandboxPolicy::from(turn.sandbox_policy.get()); + turn.file_system_sandbox_policy = FileSystemSandboxPolicy::from(turn.sandbox_policy.get()); + turn.network_sandbox_policy = NetworkSandboxPolicy::from(turn.sandbox_policy.get()); } #[test] diff --git a/codex-rs/core/src/tools/registry.rs b/codex-rs/core/src/tools/registry.rs index 6cacfd27a..f1ebb38c0 100644 --- a/codex-rs/core/src/tools/registry.rs +++ b/codex-rs/core/src/tools/registry.rs @@ -8,7 +8,6 @@ use crate::hook_runtime::record_additional_contexts; use crate::hook_runtime::run_post_tool_use_hooks; use crate::hook_runtime::run_pre_tool_use_hooks; use crate::memories::usage::emit_metric_for_tool_read; -use crate::protocol::SandboxPolicy; use crate::sandbox_tags::sandbox_tag; use crate::tools::context::FunctionToolOutput; use crate::tools::context::ToolInvocation; @@ -23,6 +22,7 @@ use codex_hooks::HookToolInput; use codex_hooks::HookToolInputLocalShell; use codex_hooks::HookToolKind; use codex_protocol::models::ResponseInputItem; +use codex_protocol::protocol::SandboxPolicy; use codex_tools::ConfiguredToolSpec; use codex_tools::ToolSpec; use codex_utils_readiness::Readiness; diff --git a/codex-rs/core/src/tools/router.rs b/codex-rs/core/src/tools/router.rs index 1fe100513..4fd64715b 100644 --- a/codex-rs/core/src/tools/router.rs +++ b/codex-rs/core/src/tools/router.rs @@ -1,7 +1,6 @@ use crate::codex::Session; use crate::codex::TurnContext; use crate::function_tool::FunctionCallError; -use crate::mcp_connection_manager::ToolInfo; use crate::sandboxing::SandboxPermissions; use crate::tools::context::SharedTurnDiffTracker; use crate::tools::context::ToolInvocation; @@ -9,6 +8,7 @@ use crate::tools::context::ToolPayload; use crate::tools::registry::AnyToolResult; use crate::tools::registry::ToolRegistry; use crate::tools::spec::build_specs_with_discoverable_tools; +use codex_mcp::mcp_connection_manager::ToolInfo; use codex_protocol::dynamic_tools::DynamicToolSpec; use codex_protocol::models::LocalShellAction; use codex_protocol::models::ResponseItem; diff --git a/codex-rs/core/src/tools/runtimes/shell.rs b/codex-rs/core/src/tools/runtimes/shell.rs index 3916a8630..27645ccb7 100644 --- a/codex-rs/core/src/tools/runtimes/shell.rs +++ b/codex-rs/core/src/tools/runtimes/shell.rs @@ -14,7 +14,6 @@ use crate::exec::ExecToolCallOutput; use crate::guardian::GuardianApprovalRequest; use crate::guardian::review_approval_request; use crate::guardian::routes_approval_to_guardian; -use crate::powershell::prefix_powershell_script_with_utf8; use crate::sandboxing::ExecOptions; use crate::sandboxing::SandboxPermissions; use crate::sandboxing::execute_env; @@ -38,6 +37,7 @@ use codex_network_proxy::NetworkProxy; use codex_protocol::models::PermissionProfile; use codex_protocol::protocol::ReviewDecision; use codex_sandboxing::SandboxablePreference; +use codex_shell_command::powershell::prefix_powershell_script_with_utf8; use futures::future::BoxFuture; use std::collections::HashMap; use std::path::PathBuf; diff --git a/codex-rs/core/src/tools/runtimes/shell/unix_escalation_tests.rs b/codex-rs/core/src/tools/runtimes/shell/unix_escalation_tests.rs index 226f7f054..f11050f72 100644 --- a/codex-rs/core/src/tools/runtimes/shell/unix_escalation_tests.rs +++ b/codex-rs/core/src/tools/runtimes/shell/unix_escalation_tests.rs @@ -6,10 +6,6 @@ use super::evaluate_intercepted_exec_policy; use super::extract_shell_script; use super::join_program_and_argv; use super::map_exec_result; -use crate::protocol::AskForApproval; -use crate::protocol::GranularApprovalConfig; -use crate::protocol::ReadOnlyAccess; -use crate::protocol::SandboxPolicy; use crate::sandboxing::SandboxPermissions; use codex_execpolicy::Decision; use codex_execpolicy::Evaluation; @@ -23,6 +19,10 @@ use codex_protocol::permissions::FileSystemSandboxEntry; use codex_protocol::permissions::FileSystemSandboxPolicy; use codex_protocol::permissions::FileSystemSpecialPath; use codex_protocol::permissions::NetworkSandboxPolicy; +use codex_protocol::protocol::AskForApproval; +use codex_protocol::protocol::GranularApprovalConfig; +use codex_protocol::protocol::ReadOnlyAccess; +use codex_protocol::protocol::SandboxPolicy; use codex_sandboxing::SandboxType; use codex_shell_escalation::EscalationExecution; use codex_shell_escalation::EscalationPermissions; diff --git a/codex-rs/core/src/tools/runtimes/unified_exec.rs b/codex-rs/core/src/tools/runtimes/unified_exec.rs index 4f5e970ed..bafb614ec 100644 --- a/codex-rs/core/src/tools/runtimes/unified_exec.rs +++ b/codex-rs/core/src/tools/runtimes/unified_exec.rs @@ -12,7 +12,6 @@ use crate::exec::ExecExpiration; use crate::guardian::GuardianApprovalRequest; use crate::guardian::review_approval_request; use crate::guardian::routes_approval_to_guardian; -use crate::powershell::prefix_powershell_script_with_utf8; use crate::sandboxing::ExecOptions; use crate::sandboxing::SandboxPermissions; use crate::shell::ShellType; @@ -40,6 +39,7 @@ use codex_network_proxy::NetworkProxy; use codex_protocol::models::PermissionProfile; use codex_protocol::protocol::ReviewDecision; use codex_sandboxing::SandboxablePreference; +use codex_shell_command::powershell::prefix_powershell_script_with_utf8; use codex_tools::UnifiedExecShellMode; use futures::future::BoxFuture; use std::collections::HashMap; diff --git a/codex-rs/core/src/tools/sandboxing.rs b/codex-rs/core/src/tools/sandboxing.rs index 5b7e95019..5316501e6 100644 --- a/codex-rs/core/src/tools/sandboxing.rs +++ b/codex-rs/core/src/tools/sandboxing.rs @@ -7,8 +7,6 @@ use crate::codex::Session; use crate::codex::TurnContext; use crate::error::CodexErr; -#[cfg(test)] -use crate::protocol::SandboxPolicy; use crate::sandboxing::ExecOptions; use crate::sandboxing::SandboxPermissions; use crate::state::SessionServices; @@ -21,6 +19,8 @@ use codex_protocol::permissions::FileSystemSandboxPolicy; use codex_protocol::permissions::NetworkSandboxPolicy; use codex_protocol::protocol::AskForApproval; use codex_protocol::protocol::ReviewDecision; +#[cfg(test)] +use codex_protocol::protocol::SandboxPolicy; use codex_sandboxing::SandboxCommand; use codex_sandboxing::SandboxManager; use codex_sandboxing::SandboxTransformError; @@ -319,7 +319,7 @@ pub(crate) trait ToolRuntime: Approvable + Sandboxable { pub(crate) struct SandboxAttempt<'a> { pub sandbox: SandboxType, - pub policy: &'a crate::protocol::SandboxPolicy, + pub policy: &'a codex_protocol::protocol::SandboxPolicy, pub file_system_policy: &'a FileSystemSandboxPolicy, pub network_policy: NetworkSandboxPolicy, pub enforce_managed_network: bool, diff --git a/codex-rs/core/src/tools/spec.rs b/codex-rs/core/src/tools/spec.rs index 0a7ddb1aa..1a9db0708 100644 --- a/codex-rs/core/src/tools/spec.rs +++ b/codex-rs/core/src/tools/spec.rs @@ -1,4 +1,3 @@ -use crate::mcp_connection_manager::ToolInfo; use crate::shell::Shell; use crate::shell::ShellType; use crate::tools::code_mode::PUBLIC_TOOL_NAME; @@ -10,6 +9,7 @@ use crate::tools::handlers::multi_agents_common::MIN_WAIT_TIMEOUT_MS; use crate::tools::registry::ToolRegistryBuilder; use crate::tools::registry::tool_handler_key; use codex_mcp::mcp::CODEX_APPS_MCP_SERVER_NAME; +use codex_mcp::mcp_connection_manager::ToolInfo; use codex_protocol::dynamic_tools::DynamicToolSpec; use codex_protocol::openai_models::ApplyPatchToolType; use codex_protocol::openai_models::ConfigShellToolType; diff --git a/codex-rs/core/src/turn_diff_tracker.rs b/codex-rs/core/src/turn_diff_tracker.rs index 3568c915a..2353e49e8 100644 --- a/codex-rs/core/src/turn_diff_tracker.rs +++ b/codex-rs/core/src/turn_diff_tracker.rs @@ -10,7 +10,7 @@ use anyhow::anyhow; use sha1::digest::Output; use uuid::Uuid; -use crate::protocol::FileChange; +use codex_protocol::protocol::FileChange; const ZERO_OID: &str = "0000000000000000000000000000000000000000"; const DEV_NULL: &str = "/dev/null"; diff --git a/codex-rs/core/src/unified_exec/async_watcher.rs b/codex-rs/core/src/unified_exec/async_watcher.rs index eee6e869e..45cbc0d67 100644 --- a/codex-rs/core/src/unified_exec/async_watcher.rs +++ b/codex-rs/core/src/unified_exec/async_watcher.rs @@ -14,15 +14,15 @@ use crate::codex::TurnContext; use crate::exec::ExecToolCallOutput; use crate::exec::MAX_EXEC_OUTPUT_DELTAS_PER_CALL; use crate::exec::StreamOutput; -use crate::protocol::EventMsg; -use crate::protocol::ExecCommandOutputDeltaEvent; -use crate::protocol::ExecCommandSource; -use crate::protocol::ExecOutputStream; use crate::tools::events::ToolEmitter; use crate::tools::events::ToolEventCtx; use crate::tools::events::ToolEventFailure; use crate::tools::events::ToolEventStage; use crate::unified_exec::head_tail_buffer::HeadTailBuffer; +use codex_protocol::protocol::EventMsg; +use codex_protocol::protocol::ExecCommandOutputDeltaEvent; +use codex_protocol::protocol::ExecCommandSource; +use codex_protocol::protocol::ExecOutputStream; pub(crate) const TRAILING_OUTPUT_GRACE: Duration = Duration::from_millis(100); diff --git a/codex-rs/core/src/unified_exec/process_manager.rs b/codex-rs/core/src/unified_exec/process_manager.rs index 2d992507b..a3465f7d6 100644 --- a/codex-rs/core/src/unified_exec/process_manager.rs +++ b/codex-rs/core/src/unified_exec/process_manager.rs @@ -14,7 +14,6 @@ use tokio_util::sync::CancellationToken; use crate::exec_env::create_env; use crate::exec_policy::ExecApprovalRequest; -use crate::protocol::ExecCommandSource; use crate::sandboxing::ExecRequest; use crate::tools::context::ExecCommandToolOutput; use crate::tools::events::ToolEmitter; @@ -49,6 +48,7 @@ use crate::unified_exec::process::OutputBuffer; use crate::unified_exec::process::OutputHandles; use crate::unified_exec::process::SpawnLifecycleHandle; use crate::unified_exec::process::UnifiedExecProcess; +use codex_protocol::protocol::ExecCommandSource; use codex_utils_output_truncation::approx_token_count; const UNIFIED_EXEC_ENV: [(&str, &str); 10] = [ diff --git a/codex-rs/core/src/util.rs b/codex-rs/core/src/util.rs index 04d973c86..0856b1689 100644 --- a/codex-rs/core/src/util.rs +++ b/codex-rs/core/src/util.rs @@ -7,7 +7,7 @@ use rand::Rng; use tracing::error; use crate::auth_env_telemetry::AuthEnvTelemetry; -use crate::parse_command::shlex_join; +use codex_shell_command::parse_command::shlex_join; const INITIAL_DELAY_MS: u64 = 200; const BACKOFF_FACTOR: f64 = 2.0; diff --git a/codex-rs/core/src/windows_sandbox.rs b/codex-rs/core/src/windows_sandbox.rs index ee3a040a6..391c59d25 100644 --- a/codex-rs/core/src/windows_sandbox.rs +++ b/codex-rs/core/src/windows_sandbox.rs @@ -3,13 +3,13 @@ use crate::config::ConfigToml; use crate::config::edit::ConfigEditsBuilder; use crate::config::profile::ConfigProfile; use crate::config::types::WindowsSandboxModeToml; -use crate::default_client::originator; -use crate::protocol::SandboxPolicy; use codex_features::Feature; use codex_features::Features; use codex_features::FeaturesToml; +use codex_login::default_client::originator; use codex_otel::sanitize_metric_tag_value; use codex_protocol::config_types::WindowsSandboxLevel; +use codex_protocol::protocol::SandboxPolicy; use std::collections::BTreeMap; use std::collections::HashMap; use std::path::Path; diff --git a/codex-rs/core/src/windows_sandbox_read_grants.rs b/codex-rs/core/src/windows_sandbox_read_grants.rs index ec08e55cf..b0891ec6a 100644 --- a/codex-rs/core/src/windows_sandbox_read_grants.rs +++ b/codex-rs/core/src/windows_sandbox_read_grants.rs @@ -1,6 +1,6 @@ -use crate::protocol::SandboxPolicy; use crate::windows_sandbox::run_setup_refresh_with_extra_read_roots; use anyhow::Result; +use codex_protocol::protocol::SandboxPolicy; use std::collections::HashMap; use std::path::Path; use std::path::PathBuf; diff --git a/codex-rs/core/src/windows_sandbox_read_grants_tests.rs b/codex-rs/core/src/windows_sandbox_read_grants_tests.rs index c23920264..bffa840ed 100644 --- a/codex-rs/core/src/windows_sandbox_read_grants_tests.rs +++ b/codex-rs/core/src/windows_sandbox_read_grants_tests.rs @@ -1,5 +1,5 @@ use super::grant_read_root_non_elevated; -use crate::protocol::SandboxPolicy; +use codex_protocol::protocol::SandboxPolicy; use std::collections::HashMap; use std::path::Path; use tempfile::TempDir; diff --git a/codex-rs/core/tests/common/Cargo.toml b/codex-rs/core/tests/common/Cargo.toml index 0fcf81281..2611aa5d2 100644 --- a/codex-rs/core/tests/common/Cargo.toml +++ b/codex-rs/core/tests/common/Cargo.toml @@ -18,6 +18,7 @@ codex-arg0 = { workspace = true } codex-core = { workspace = true } codex-exec-server = { workspace = true } codex-features = { workspace = true } +codex-login = { workspace = true } codex-protocol = { workspace = true } codex-utils-absolute-path = { workspace = true } codex-utils-cargo-bin = { workspace = true } diff --git a/codex-rs/core/tests/common/test_codex.rs b/codex-rs/core/tests/common/test_codex.rs index 3b910838b..a347488c2 100644 --- a/codex-rs/core/tests/common/test_codex.rs +++ b/codex-rs/core/tests/common/test_codex.rs @@ -11,7 +11,6 @@ use std::time::Instant; use anyhow::Context; use anyhow::Result; use anyhow::anyhow; -use codex_core::CodexAuth; use codex_core::CodexThread; use codex_core::ModelProviderInfo; use codex_core::ThreadManager; @@ -23,6 +22,7 @@ use codex_core::shell::get_shell_by_model_provided_path; use codex_exec_server::CreateDirectoryOptions; use codex_exec_server::ExecutorFileSystem; use codex_features::Feature; +use codex_login::CodexAuth; use codex_protocol::config_types::ServiceTier; use codex_protocol::openai_models::ModelsResponse; use codex_protocol::protocol::AskForApproval; diff --git a/codex-rs/core/tests/common/test_codex_exec.rs b/codex-rs/core/tests/common/test_codex_exec.rs index 681569286..5fe47018a 100644 --- a/codex-rs/core/tests/common/test_codex_exec.rs +++ b/codex-rs/core/tests/common/test_codex_exec.rs @@ -1,5 +1,5 @@ #![allow(clippy::expect_used)] -use codex_core::auth::CODEX_API_KEY_ENV_VAR; +use codex_login::CODEX_API_KEY_ENV_VAR; use std::path::Path; use tempfile::TempDir; use wiremock::MockServer; diff --git a/codex-rs/core/tests/responses_headers.rs b/codex-rs/core/tests/responses_headers.rs index 536e985d1..8bed61458 100644 --- a/codex-rs/core/tests/responses_headers.rs +++ b/codex-rs/core/tests/responses_headers.rs @@ -1,12 +1,12 @@ use std::process::Command; use std::sync::Arc; -use codex_core::CodexAuth; use codex_core::ModelClient; use codex_core::ModelProviderInfo; use codex_core::Prompt; use codex_core::ResponseEvent; use codex_core::WireApi; +use codex_login::CodexAuth; use codex_otel::SessionTelemetry; use codex_otel::TelemetryAuthMode; use codex_protocol::ThreadId; diff --git a/codex-rs/core/tests/suite/auth_refresh.rs b/codex-rs/core/tests/suite/auth_refresh.rs index bdac334a6..b4249ea96 100644 --- a/codex-rs/core/tests/suite/auth_refresh.rs +++ b/codex-rs/core/tests/suite/auth_refresh.rs @@ -4,14 +4,14 @@ use base64::Engine; use chrono::Duration; use chrono::Utc; use codex_app_server_protocol::AuthMode; -use codex_core::AuthManager; -use codex_core::auth::AuthCredentialsStoreMode; -use codex_core::auth::AuthDotJson; -use codex_core::auth::REFRESH_TOKEN_URL_OVERRIDE_ENV_VAR; -use codex_core::auth::RefreshTokenError; -use codex_core::auth::load_auth_dot_json; -use codex_core::auth::save_auth; use codex_core::error::RefreshTokenFailedReason; +use codex_login::AuthCredentialsStoreMode; +use codex_login::AuthDotJson; +use codex_login::AuthManager; +use codex_login::REFRESH_TOKEN_URL_OVERRIDE_ENV_VAR; +use codex_login::RefreshTokenError; +use codex_login::load_auth_dot_json; +use codex_login::save_auth; use codex_login::token_data::IdTokenInfo; use codex_login::token_data::TokenData; use core_test_support::skip_if_no_network; diff --git a/codex-rs/core/tests/suite/cli_stream.rs b/codex-rs/core/tests/suite/cli_stream.rs index cc8a0103a..85cde5b22 100644 --- a/codex-rs/core/tests/suite/cli_stream.rs +++ b/codex-rs/core/tests/suite/cli_stream.rs @@ -1,6 +1,6 @@ use assert_cmd::Command as AssertCommand; -use codex_core::auth::CODEX_API_KEY_ENV_VAR; use codex_git_utils::collect_git_info; +use codex_login::CODEX_API_KEY_ENV_VAR; use codex_protocol::protocol::GitInfo; use codex_utils_cargo_bin::find_resource; use core_test_support::fs_wait; diff --git a/codex-rs/core/tests/suite/client.rs b/codex-rs/core/tests/suite/client.rs index 37a9d838f..231ab1a5d 100644 --- a/codex-rs/core/tests/suite/client.rs +++ b/codex-rs/core/tests/suite/client.rs @@ -1,24 +1,24 @@ -use codex_core::AuthManager; -use codex_core::CodexAuth; use codex_core::ModelClient; -use codex_core::ModelProviderAuthInfo; use codex_core::ModelProviderInfo; use codex_core::NewThread; use codex_core::Prompt; use codex_core::ResponseEvent; use codex_core::ThreadManager; use codex_core::WireApi; -use codex_core::auth::AuthCredentialsStoreMode; use codex_core::built_in_model_providers; -use codex_core::default_client::originator; use codex_core::error::CodexErr; use codex_core::models_manager::collaboration_mode_presets::CollaborationModesConfig; use codex_features::Feature; +use codex_login::AuthCredentialsStoreMode; +use codex_login::AuthManager; +use codex_login::CodexAuth; +use codex_login::default_client::originator; use codex_otel::SessionTelemetry; use codex_otel::TelemetryAuthMode; use codex_protocol::ThreadId; use codex_protocol::config_types::CollaborationMode; use codex_protocol::config_types::ModeKind; +use codex_protocol::config_types::ModelProviderAuthInfo; use codex_protocol::config_types::ReasoningSummary; use codex_protocol::config_types::Settings; use codex_protocol::config_types::Verbosity; diff --git a/codex-rs/core/tests/suite/client_websockets.rs b/codex-rs/core/tests/suite/client_websockets.rs index 836399f0c..f863ea0b6 100755 --- a/codex-rs/core/tests/suite/client_websockets.rs +++ b/codex-rs/core/tests/suite/client_websockets.rs @@ -1,7 +1,6 @@ #![allow(clippy::expect_used, clippy::unwrap_used)] use codex_api::WS_REQUEST_HEADER_TRACEPARENT_CLIENT_METADATA_KEY; use codex_api::WS_REQUEST_HEADER_TRACESTATE_CLIENT_METADATA_KEY; -use codex_core::CodexAuth; use codex_core::ModelClient; use codex_core::ModelClientSession; use codex_core::ModelProviderInfo; @@ -10,6 +9,7 @@ use codex_core::ResponseEvent; use codex_core::WireApi; use codex_core::X_RESPONSESAPI_INCLUDE_TIMING_METRICS_HEADER; use codex_features::Feature; +use codex_login::CodexAuth; use codex_otel::SessionTelemetry; use codex_otel::TelemetryAuthMode; use codex_otel::current_span_w3c_trace_context; diff --git a/codex-rs/core/tests/suite/compact.rs b/codex-rs/core/tests/suite/compact.rs index 8be8c72da..35fe9d07e 100644 --- a/codex-rs/core/tests/suite/compact.rs +++ b/codex-rs/core/tests/suite/compact.rs @@ -1,11 +1,11 @@ #![allow(clippy::expect_used)] -use codex_core::CodexAuth; use codex_core::ModelProviderInfo; use codex_core::built_in_model_providers; use codex_core::compact::SUMMARIZATION_PROMPT; use codex_core::compact::SUMMARY_PREFIX; use codex_core::config::Config; use codex_features::Feature; +use codex_login::CodexAuth; use codex_protocol::items::TurnItem; use codex_protocol::openai_models::ModelInfo; use codex_protocol::openai_models::ModelsResponse; diff --git a/codex-rs/core/tests/suite/compact_remote.rs b/codex-rs/core/tests/suite/compact_remote.rs index 3ab92e773..0069c5fb8 100644 --- a/codex-rs/core/tests/suite/compact_remote.rs +++ b/codex-rs/core/tests/suite/compact_remote.rs @@ -4,8 +4,8 @@ use std::fs; use std::path::PathBuf; use anyhow::Result; -use codex_core::CodexAuth; use codex_core::compact::SUMMARY_PREFIX; +use codex_login::CodexAuth; use codex_protocol::items::TurnItem; use codex_protocol::models::ContentItem; use codex_protocol::models::ResponseItem; diff --git a/codex-rs/core/tests/suite/compact_resume_fork.rs b/codex-rs/core/tests/suite/compact_resume_fork.rs index 3fd0dab04..d47ed7c94 100644 --- a/codex-rs/core/tests/suite/compact_resume_fork.rs +++ b/codex-rs/core/tests/suite/compact_resume_fork.rs @@ -843,7 +843,7 @@ async fn resume_conversation( path: std::path::PathBuf, ) -> Arc { let auth_manager = codex_core::test_support::auth_manager_from_auth( - codex_core::CodexAuth::from_api_key("dummy"), + codex_login::CodexAuth::from_api_key("dummy"), ); Box::pin(manager.resume_thread_from_rollout( config.clone(), diff --git a/codex-rs/core/tests/suite/model_info_overrides.rs b/codex-rs/core/tests/suite/model_info_overrides.rs index fc1cbac76..52656affe 100644 --- a/codex-rs/core/tests/suite/model_info_overrides.rs +++ b/codex-rs/core/tests/suite/model_info_overrides.rs @@ -1,6 +1,6 @@ -use codex_core::CodexAuth; use codex_core::models_manager::collaboration_mode_presets::CollaborationModesConfig; use codex_core::models_manager::manager::ModelsManager; +use codex_login::CodexAuth; use codex_protocol::openai_models::TruncationPolicyConfig; use core_test_support::load_default_config_for_test; use pretty_assertions::assert_eq; diff --git a/codex-rs/core/tests/suite/model_switching.rs b/codex-rs/core/tests/suite/model_switching.rs index 808b04191..de8845548 100644 --- a/codex-rs/core/tests/suite/model_switching.rs +++ b/codex-rs/core/tests/suite/model_switching.rs @@ -1,8 +1,8 @@ use anyhow::Result; -use codex_core::CodexAuth; use codex_core::config::types::Personality; use codex_core::models_manager::manager::RefreshStrategy; use codex_features::Feature; +use codex_login::CodexAuth; use codex_protocol::config_types::ReasoningSummary; use codex_protocol::config_types::ServiceTier; use codex_protocol::openai_models::ConfigShellToolType; diff --git a/codex-rs/core/tests/suite/models_cache_ttl.rs b/codex-rs/core/tests/suite/models_cache_ttl.rs index 7d0ce8046..0e043bd9f 100644 --- a/codex-rs/core/tests/suite/models_cache_ttl.rs +++ b/codex-rs/core/tests/suite/models_cache_ttl.rs @@ -5,8 +5,8 @@ use anyhow::Result; use chrono::DateTime; use chrono::TimeZone; use chrono::Utc; -use codex_core::CodexAuth; use codex_core::models_manager::manager::RefreshStrategy; +use codex_login::CodexAuth; use codex_protocol::config_types::ReasoningSummary; use codex_protocol::openai_models::ConfigShellToolType; use codex_protocol::openai_models::ModelInfo; diff --git a/codex-rs/core/tests/suite/models_etag_responses.rs b/codex-rs/core/tests/suite/models_etag_responses.rs index 272c820ca..daf3e8946 100644 --- a/codex-rs/core/tests/suite/models_etag_responses.rs +++ b/codex-rs/core/tests/suite/models_etag_responses.rs @@ -3,7 +3,7 @@ use std::sync::Arc; use anyhow::Result; -use codex_core::CodexAuth; +use codex_login::CodexAuth; use codex_protocol::openai_models::ModelsResponse; use codex_protocol::protocol::AskForApproval; use codex_protocol::protocol::EventMsg; diff --git a/codex-rs/core/tests/suite/personality.rs b/codex-rs/core/tests/suite/personality.rs index cc68c5715..a51a39826 100644 --- a/codex-rs/core/tests/suite/personality.rs +++ b/codex-rs/core/tests/suite/personality.rs @@ -684,7 +684,7 @@ async fn remote_model_friendly_personality_instructions_with_feature() -> anyhow let resp_mock = mount_sse_once(&server, sse_completed("resp-1")).await; let mut builder = test_codex() - .with_auth(codex_core::CodexAuth::create_dummy_chatgpt_auth_for_testing()) + .with_auth(codex_login::CodexAuth::create_dummy_chatgpt_auth_for_testing()) .with_config(|config| { config .features @@ -804,7 +804,7 @@ async fn user_turn_personality_remote_model_template_includes_update_message() - .await; let mut builder = test_codex() - .with_auth(codex_core::CodexAuth::create_dummy_chatgpt_auth_for_testing()) + .with_auth(codex_login::CodexAuth::create_dummy_chatgpt_auth_for_testing()) .with_config(|config| { config .features diff --git a/codex-rs/core/tests/suite/plugins.rs b/codex-rs/core/tests/suite/plugins.rs index 5448e4916..cd0ad330a 100644 --- a/codex-rs/core/tests/suite/plugins.rs +++ b/codex-rs/core/tests/suite/plugins.rs @@ -6,8 +6,8 @@ use std::time::Duration; use std::time::Instant; use anyhow::Result; -use codex_core::CodexAuth; use codex_features::Feature; +use codex_login::CodexAuth; use codex_protocol::protocol::EventMsg; use codex_protocol::protocol::Op; use core_test_support::apps_test_server::AppsTestServer; @@ -400,7 +400,7 @@ async fn explicit_plugin_mentions_track_plugin_used_analytics() -> Result<()> { ); assert_eq!( event["event_params"]["product_client_id"], - serde_json::json!(codex_core::default_client::originator().value) + serde_json::json!(codex_login::default_client::originator().value) ); assert_eq!(event["event_params"]["model_slug"], "gpt-5"); assert!(event["event_params"]["thread_id"].as_str().is_some()); diff --git a/codex-rs/core/tests/suite/realtime_conversation.rs b/codex-rs/core/tests/suite/realtime_conversation.rs index 415d764e4..b169e229a 100644 --- a/codex-rs/core/tests/suite/realtime_conversation.rs +++ b/codex-rs/core/tests/suite/realtime_conversation.rs @@ -1,8 +1,8 @@ use anyhow::Context; use anyhow::Result; use chrono::Utc; -use codex_core::CodexAuth; -use codex_core::auth::OPENAI_API_KEY_ENV_VAR; +use codex_login::CodexAuth; +use codex_login::OPENAI_API_KEY_ENV_VAR; use codex_protocol::ThreadId; use codex_protocol::protocol::CodexErrorInfo; use codex_protocol::protocol::ConversationAudioParams; diff --git a/codex-rs/core/tests/suite/remote_models.rs b/codex-rs/core/tests/suite/remote_models.rs index 6b2da1116..c0776e1ea 100644 --- a/codex-rs/core/tests/suite/remote_models.rs +++ b/codex-rs/core/tests/suite/remote_models.rs @@ -4,11 +4,11 @@ use std::sync::Arc; use anyhow::Result; -use codex_core::CodexAuth; use codex_core::ModelProviderInfo; use codex_core::built_in_model_providers; use codex_core::models_manager::manager::ModelsManager; use codex_core::models_manager::manager::RefreshStrategy; +use codex_login::CodexAuth; use codex_protocol::config_types::ReasoningSummary; use codex_protocol::openai_models::ConfigShellToolType; use codex_protocol::openai_models::ModelInfo; diff --git a/codex-rs/core/tests/suite/request_compression.rs b/codex-rs/core/tests/suite/request_compression.rs index dd4249928..fb0125e66 100644 --- a/codex-rs/core/tests/suite/request_compression.rs +++ b/codex-rs/core/tests/suite/request_compression.rs @@ -1,7 +1,7 @@ #![cfg(not(target_os = "windows"))] -use codex_core::CodexAuth; use codex_features::Feature; +use codex_login::CodexAuth; use codex_protocol::protocol::EventMsg; use codex_protocol::protocol::Op; use codex_protocol::user_input::UserInput; diff --git a/codex-rs/core/tests/suite/resume_warning.rs b/codex-rs/core/tests/suite/resume_warning.rs index f55f87e53..0252a9927 100644 --- a/codex-rs/core/tests/suite/resume_warning.rs +++ b/codex-rs/core/tests/suite/resume_warning.rs @@ -1,7 +1,7 @@ #![allow(clippy::unwrap_used, clippy::expect_used)] -use codex_core::CodexAuth; use codex_core::NewThread; +use codex_login::CodexAuth; use codex_protocol::ThreadId; use codex_protocol::config_types::ModeKind; use codex_protocol::config_types::ReasoningSummary; diff --git a/codex-rs/core/tests/suite/rmcp_client.rs b/codex-rs/core/tests/suite/rmcp_client.rs index 0335ead7e..5b942c201 100644 --- a/codex-rs/core/tests/suite/rmcp_client.rs +++ b/codex-rs/core/tests/suite/rmcp_client.rs @@ -9,10 +9,10 @@ use std::time::Duration; use std::time::SystemTime; use std::time::UNIX_EPOCH; -use codex_core::CodexAuth; use codex_core::config::types::McpServerConfig; use codex_core::config::types::McpServerTransportConfig; use codex_core::models_manager::manager::RefreshStrategy; +use codex_login::CodexAuth; use codex_protocol::config_types::ReasoningSummary; use codex_protocol::openai_models::ConfigShellToolType; diff --git a/codex-rs/core/tests/suite/search_tool.rs b/codex-rs/core/tests/suite/search_tool.rs index 423c57a8c..a9f4c3e44 100644 --- a/codex-rs/core/tests/suite/search_tool.rs +++ b/codex-rs/core/tests/suite/search_tool.rs @@ -2,9 +2,9 @@ #![allow(clippy::unwrap_used, clippy::expect_used)] use anyhow::Result; -use codex_core::CodexAuth; use codex_core::config::Config; use codex_features::Feature; +use codex_login::CodexAuth; use codex_protocol::openai_models::ModelsResponse; use codex_protocol::protocol::AskForApproval; use codex_protocol::protocol::EventMsg; diff --git a/codex-rs/core/tests/suite/spawn_agent_description.rs b/codex-rs/core/tests/suite/spawn_agent_description.rs index e27e3466f..3b1cfa200 100644 --- a/codex-rs/core/tests/suite/spawn_agent_description.rs +++ b/codex-rs/core/tests/suite/spawn_agent_description.rs @@ -2,10 +2,10 @@ #![allow(clippy::unwrap_used, clippy::expect_used)] use anyhow::Result; -use codex_core::CodexAuth; use codex_core::models_manager::manager::ModelsManager; use codex_core::models_manager::manager::RefreshStrategy; use codex_features::Feature; +use codex_login::CodexAuth; use codex_protocol::config_types::ReasoningSummary; use codex_protocol::openai_models::ConfigShellToolType; use codex_protocol::openai_models::ModelInfo; diff --git a/codex-rs/core/tests/suite/tool_suggest.rs b/codex-rs/core/tests/suite/tool_suggest.rs index 460c7366a..09c29cb1f 100644 --- a/codex-rs/core/tests/suite/tool_suggest.rs +++ b/codex-rs/core/tests/suite/tool_suggest.rs @@ -2,11 +2,11 @@ #![allow(clippy::unwrap_used, clippy::expect_used)] use anyhow::Result; -use codex_core::CodexAuth; use codex_core::config::Config; use codex_core::config::types::ToolSuggestDiscoverable; use codex_core::config::types::ToolSuggestDiscoverableType; use codex_features::Feature; +use codex_login::CodexAuth; use codex_protocol::openai_models::ModelsResponse; use codex_protocol::protocol::AskForApproval; use codex_protocol::protocol::SandboxPolicy; diff --git a/codex-rs/core/tests/suite/unstable_features_warning.rs b/codex-rs/core/tests/suite/unstable_features_warning.rs index efb154e6e..1b1869729 100644 --- a/codex-rs/core/tests/suite/unstable_features_warning.rs +++ b/codex-rs/core/tests/suite/unstable_features_warning.rs @@ -1,9 +1,9 @@ #![allow(clippy::unwrap_used, clippy::expect_used)] use codex_config::CONFIG_TOML_FILE; -use codex_core::CodexAuth; use codex_core::NewThread; use codex_features::Feature; +use codex_login::CodexAuth; use codex_protocol::protocol::EventMsg; use codex_protocol::protocol::InitialHistory; use codex_protocol::protocol::WarningEvent; diff --git a/codex-rs/core/tests/suite/view_image.rs b/codex-rs/core/tests/suite/view_image.rs index fab2098ca..f16d3c2b1 100644 --- a/codex-rs/core/tests/suite/view_image.rs +++ b/codex-rs/core/tests/suite/view_image.rs @@ -2,9 +2,9 @@ use base64::Engine; use base64::engine::general_purpose::STANDARD as BASE64_STANDARD; -use codex_core::CodexAuth; use codex_exec_server::CreateDirectoryOptions; use codex_features::Feature; +use codex_login::CodexAuth; use codex_protocol::config_types::ReasoningSummary; use codex_protocol::openai_models::ConfigShellToolType; use codex_protocol::openai_models::InputModality; diff --git a/codex-rs/exec/Cargo.toml b/codex-rs/exec/Cargo.toml index be9cf5d75..0933f4a44 100644 --- a/codex-rs/exec/Cargo.toml +++ b/codex-rs/exec/Cargo.toml @@ -30,6 +30,7 @@ codex-cloud-requirements = { workspace = true } codex-core = { workspace = true } codex-feedback = { workspace = true } codex-git-utils = { workspace = true } +codex-login = { workspace = true } codex-otel = { workspace = true } codex-protocol = { workspace = true } codex-utils-absolute-path = { workspace = true } diff --git a/codex-rs/exec/src/lib.rs b/codex-rs/exec/src/lib.rs index ae1285be4..6ad3b2047 100644 --- a/codex-rs/exec/src/lib.rs +++ b/codex-rs/exec/src/lib.rs @@ -51,8 +51,6 @@ use codex_arg0::Arg0DispatchPaths; use codex_cloud_requirements::cloud_requirements_loader_for_storage; use codex_core::LMSTUDIO_OSS_PROVIDER_ID; use codex_core::OLLAMA_OSS_PROVIDER_ID; -use codex_core::auth::AuthConfig; -use codex_core::auth::enforce_login_restrictions; use codex_core::check_execpolicy_for_warnings; use codex_core::config::Config; use codex_core::config::ConfigBuilder; @@ -67,6 +65,10 @@ use codex_core::format_exec_policy_error_with_source; use codex_core::path_utils; use codex_feedback::CodexFeedback; use codex_git_utils::get_git_repo_root; +use codex_login::AuthConfig; +use codex_login::default_client::set_default_client_residency_requirement; +use codex_login::default_client::set_default_originator; +use codex_login::enforce_login_restrictions; use codex_otel::set_parent_from_context; use codex_otel::traceparent_context_from_env; use codex_protocol::config_types::SandboxMode; @@ -105,8 +107,6 @@ use uuid::Uuid; use crate::cli::Command as ExecCommand; use crate::event_processor::CodexStatus; use crate::event_processor::EventProcessor; -use codex_core::default_client::set_default_client_residency_requirement; -use codex_core::default_client::set_default_originator; const DEFAULT_ANALYTICS_ENABLED: bool = true; diff --git a/codex-rs/exec/tests/suite/originator.rs b/codex-rs/exec/tests/suite/originator.rs index 9b57c2c92..e63f57ab0 100644 --- a/codex-rs/exec/tests/suite/originator.rs +++ b/codex-rs/exec/tests/suite/originator.rs @@ -1,7 +1,7 @@ #![cfg(not(target_os = "windows"))] #![allow(clippy::expect_used, clippy::unwrap_used)] -use codex_core::default_client::CODEX_INTERNAL_ORIGINATOR_OVERRIDE_ENV_VAR; +use codex_login::default_client::CODEX_INTERNAL_ORIGINATOR_OVERRIDE_ENV_VAR; use core_test_support::responses; use core_test_support::test_codex_exec::test_codex_exec; use wiremock::matchers::header; diff --git a/codex-rs/mcp-server/Cargo.toml b/codex-rs/mcp-server/Cargo.toml index a7d38a0fe..5de2a9e5a 100644 --- a/codex-rs/mcp-server/Cargo.toml +++ b/codex-rs/mcp-server/Cargo.toml @@ -21,6 +21,7 @@ codex-arg0 = { workspace = true } codex-core = { workspace = true } codex-exec-server = { workspace = true } codex-features = { workspace = true } +codex-login = { workspace = true } codex-protocol = { workspace = true } codex-shell-command = { workspace = true } codex-utils-cli = { workspace = true } diff --git a/codex-rs/mcp-server/src/message_processor.rs b/codex-rs/mcp-server/src/message_processor.rs index 1fba41164..a41c6ddcf 100644 --- a/codex-rs/mcp-server/src/message_processor.rs +++ b/codex-rs/mcp-server/src/message_processor.rs @@ -2,14 +2,14 @@ use std::collections::HashMap; use std::sync::Arc; use codex_arg0::Arg0DispatchPaths; -use codex_core::AuthManager; use codex_core::ThreadManager; use codex_core::config::Config; -use codex_core::default_client::USER_AGENT_SUFFIX; -use codex_core::default_client::get_codex_user_agent; use codex_core::models_manager::collaboration_mode_presets::CollaborationModesConfig; 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_protocol::ThreadId; use codex_protocol::protocol::SessionSource; use codex_protocol::protocol::Submission; diff --git a/codex-rs/mcp-server/tests/common/Cargo.toml b/codex-rs/mcp-server/tests/common/Cargo.toml index d19f67363..d642cca82 100644 --- a/codex-rs/mcp-server/tests/common/Cargo.toml +++ b/codex-rs/mcp-server/tests/common/Cargo.toml @@ -12,7 +12,7 @@ workspace = true [dependencies] anyhow = { workspace = true } -codex-core = { workspace = true } +codex-login = { workspace = true } codex-mcp-server = { workspace = true } codex-terminal-detection = { workspace = true } codex-utils-cargo-bin = { workspace = true } diff --git a/codex-rs/mcp-server/tests/common/mcp_process.rs b/codex-rs/mcp-server/tests/common/mcp_process.rs index 53925ca39..f50f25f49 100644 --- a/codex-rs/mcp-server/tests/common/mcp_process.rs +++ b/codex-rs/mcp-server/tests/common/mcp_process.rs @@ -151,7 +151,7 @@ impl McpProcess { let initialized = self.read_jsonrpc_message().await?; let os_info = os_info::get(); let build_version = env!("CARGO_PKG_VERSION"); - let originator = codex_core::default_client::originator().value; + let originator = codex_login::default_client::originator().value; let user_agent = format!( "{originator}/{build_version} ({} {}; {}) {} (elicitation test; 0.0.0)", os_info.os_type(), diff --git a/codex-rs/tui/Cargo.toml b/codex-rs/tui/Cargo.toml index 33c2de00f..590257609 100644 --- a/codex-rs/tui/Cargo.toml +++ b/codex-rs/tui/Cargo.toml @@ -39,6 +39,7 @@ codex-git-utils = { workspace = true } codex-login = { workspace = true } codex-otel = { workspace = true } codex-protocol = { workspace = true } +codex-rollout = { workspace = true } codex-shell-command = { workspace = true } codex-state = { workspace = true } codex-terminal-detection = { workspace = true } diff --git a/codex-rs/tui/src/app.rs b/codex-rs/tui/src/app.rs index 7e1a0abdd..89f5916e1 100644 --- a/codex-rs/tui/src/app.rs +++ b/codex-rs/tui/src/app.rs @@ -3550,7 +3550,7 @@ impl App { /*account_id*/ None, bootstrap.account_email.clone(), auth_mode, - codex_core::default_client::originator().value, + codex_login::default_client::originator().value, config.otel.log_user_prompt, user_agent(), SessionSource::Cli, diff --git a/codex-rs/tui/src/chatwidget.rs b/codex-rs/tui/src/chatwidget.rs index 2b245428c..3c8d068f9 100644 --- a/codex-rs/tui/src/chatwidget.rs +++ b/codex-rs/tui/src/chatwidget.rs @@ -5191,7 +5191,7 @@ impl ChatWidget { self.request_quit_without_confirmation(); } SlashCommand::Logout => { - if let Err(e) = codex_core::auth::logout( + if let Err(e) = codex_login::logout( &self.config.codex_home, self.config.cli_auth_credentials_store_mode, ) { diff --git a/codex-rs/tui/src/lib.rs b/codex-rs/tui/src/lib.rs index 6cf864751..2fd9ebd12 100644 --- a/codex-rs/tui/src/lib.rs +++ b/codex-rs/tui/src/lib.rs @@ -21,8 +21,6 @@ use codex_app_server_protocol::ThreadListParams; use codex_app_server_protocol::ThreadSortKey as AppServerThreadSortKey; use codex_app_server_protocol::ThreadSourceKind; use codex_cloud_requirements::cloud_requirements_loader_for_storage; -use codex_core::auth::AuthConfig; -use codex_core::auth::enforce_login_restrictions; use codex_core::check_execpolicy_for_warnings; use codex_core::config::Config; use codex_core::config::ConfigBuilder; @@ -34,12 +32,13 @@ use codex_core::config_loader::CloudRequirementsLoader; use codex_core::config_loader::ConfigLoadError; use codex_core::config_loader::LoaderOverrides; use codex_core::config_loader::format_config_error_with_source; -use codex_core::default_client::set_default_client_residency_requirement; use codex_core::format_exec_policy_error_with_source; use codex_core::path_utils; use codex_core::read_session_meta_line; -use codex_core::state_db::get_state_db; use codex_core::windows_sandbox::WindowsSandboxLevelExt; +use codex_login::AuthConfig; +use codex_login::default_client::set_default_client_residency_requirement; +use codex_login::enforce_login_restrictions; use codex_protocol::ThreadId; use codex_protocol::config_types::AltScreenMode; use codex_protocol::config_types::SandboxMode; @@ -48,6 +47,7 @@ use codex_protocol::protocol::AskForApproval; use codex_protocol::protocol::RolloutItem; use codex_protocol::protocol::RolloutLine; use codex_protocol::protocol::TurnContextItem; +use codex_rollout::state_db::get_state_db; use codex_state::log_db; use codex_terminal_detection::Multiplexer; use codex_terminal_detection::terminal_info; @@ -890,7 +890,7 @@ pub async fn run_main( let otel_tracing_layer = otel.as_ref().and_then(|o| o.tracing_layer()); - let log_db_layer = codex_core::state_db::get_state_db(&config) + let log_db_layer = get_state_db(&config) .await .map(|db| log_db::start(db).with_filter(env_filter())); diff --git a/codex-rs/tui/src/local_chatgpt_auth.rs b/codex-rs/tui/src/local_chatgpt_auth.rs index b671d818e..cb8a3a4aa 100644 --- a/codex-rs/tui/src/local_chatgpt_auth.rs +++ b/codex-rs/tui/src/local_chatgpt_auth.rs @@ -1,8 +1,8 @@ use std::path::Path; use codex_app_server_protocol::AuthMode; -use codex_core::auth::AuthCredentialsStoreMode; -use codex_core::auth::load_auth_dot_json; +use codex_login::AuthCredentialsStoreMode; +use codex_login::load_auth_dot_json; #[derive(Debug, Clone, PartialEq, Eq)] pub(crate) struct LocalChatgptAuth { @@ -58,9 +58,9 @@ mod tests { use base64::Engine; use chrono::Utc; use codex_app_server_protocol::AuthMode; - use codex_core::auth::AuthDotJson; - use codex_core::auth::save_auth; + use codex_login::AuthDotJson; use codex_login::auth::login_with_chatgpt_auth_tokens; + use codex_login::save_auth; use codex_login::token_data::TokenData; use pretty_assertions::assert_eq; use serde::Serialize; diff --git a/codex-rs/tui/src/onboarding/auth.rs b/codex-rs/tui/src/onboarding/auth.rs index e442eebb1..a5915618c 100644 --- a/codex-rs/tui/src/onboarding/auth.rs +++ b/codex-rs/tui/src/onboarding/auth.rs @@ -8,9 +8,9 @@ use codex_app_server_protocol::CancelLoginAccountParams; use codex_app_server_protocol::ClientRequest; use codex_app_server_protocol::LoginAccountParams; use codex_app_server_protocol::LoginAccountResponse; -use codex_core::auth::AuthCredentialsStoreMode; -use codex_core::auth::read_openai_api_key_from_env; +use codex_login::AuthCredentialsStoreMode; use codex_login::DeviceCode; +use codex_login::read_openai_api_key_from_env; use crossterm::event::KeyCode; use crossterm::event::KeyEvent; use crossterm::event::KeyEventKind; diff --git a/codex-rs/tui/src/onboarding/auth/headless_chatgpt_login.rs b/codex-rs/tui/src/onboarding/auth/headless_chatgpt_login.rs index d0834fe16..97709e949 100644 --- a/codex-rs/tui/src/onboarding/auth/headless_chatgpt_login.rs +++ b/codex-rs/tui/src/onboarding/auth/headless_chatgpt_login.rs @@ -3,7 +3,7 @@ use codex_app_server_protocol::ClientRequest; use codex_app_server_protocol::LoginAccountParams; use codex_app_server_protocol::LoginAccountResponse; -use codex_core::auth::CLIENT_ID; +use codex_login::CLIENT_ID; use codex_login::ServerOptions; use codex_login::complete_device_code_login; use codex_login::request_device_code; diff --git a/codex-rs/tui/src/updates.rs b/codex-rs/tui/src/updates.rs index 58d025a4a..1edd871d0 100644 --- a/codex-rs/tui/src/updates.rs +++ b/codex-rs/tui/src/updates.rs @@ -6,7 +6,7 @@ use chrono::DateTime; use chrono::Duration; use chrono::Utc; use codex_core::config::Config; -use codex_core::default_client::create_client; +use codex_login::default_client::create_client; use serde::Deserialize; use serde::Serialize; use std::path::Path;