mirror of
https://github.com/openai/codex.git
synced 2026-04-28 08:34:54 +00:00
## Summary - split `models-manager` out of `core` and add `ModelsManagerConfig` plus `Config::to_models_manager_config()` so model metadata paths stop depending on `core::Config` - move login-owned/auth-owned code out of `core` into `codex-login`, move model provider config into `codex-model-provider-info`, move API bridge mapping into `codex-api`, move protocol-owned types/impls into `codex-protocol`, and move response debug helpers into a dedicated `response-debug-context` crate - move feedback tag emission into `codex-feedback`, relocate tests to the crates that now own the code, and keep broad temporary re-exports so this PR avoids a giant import-only rewrite ## Major moves and decisions - created `codex-models-manager` as the owner for model cache/catalog/config/model info logic, including the new `ModelsManagerConfig` struct - created `codex-model-provider-info` as the owner for provider config parsing/defaults and kept temporary `codex-login`/`codex-core` re-exports for old import paths - moved `api_bridge` error mapping + `CoreAuthProvider` into `codex-api`, while `codex-login::api_bridge` temporarily re-exports those symbols and keeps the `auth_provider_from_auth` wrapper - moved `auth_env_telemetry` and `provider_auth` ownership to `codex-login` - moved `CodexErr` ownership to `codex-protocol::error`, plus `StreamOutput`, `bytes_to_string_smart`, and network policy helpers to protocol-owned modules - created `codex-response-debug-context` for `extract_response_debug_context`, `telemetry_transport_error_message`, and related response-debug plumbing instead of leaving that behavior in `core` - moved `FeedbackRequestTags`, `emit_feedback_request_tags`, and `emit_feedback_request_tags_with_auth_env` to `codex-feedback` - deferred removal of temporary re-exports and the mechanical import rewrites to a stacked follow-up PR so this PR stays reviewable ## Test moves - moved auth refresh coverage from `core/tests/suite/auth_refresh.rs` to `login/tests/suite/auth_refresh.rs` - moved text encoding coverage from `core/tests/suite/text_encoding_fix.rs` to `protocol/src/exec_output_tests.rs` - moved model info override coverage from `core/tests/suite/model_info_overrides.rs` to `models-manager/src/model_info_overrides_tests.rs` --------- Co-authored-by: Codex <noreply@openai.com>
157 lines
4.1 KiB
Rust
157 lines
4.1 KiB
Rust
// Aggregates all former standalone integration tests as modules.
|
|
use std::ffi::OsString;
|
|
use std::path::Path;
|
|
|
|
use codex_apply_patch::CODEX_CORE_APPLY_PATCH_ARG1;
|
|
use codex_arg0::Arg0PathEntryGuard;
|
|
use codex_arg0::arg0_dispatch;
|
|
use codex_sandboxing::landlock::CODEX_LINUX_SANDBOX_ARG0;
|
|
use ctor::ctor;
|
|
use tempfile::TempDir;
|
|
|
|
struct TestCodexAliasesGuard {
|
|
_codex_home: TempDir,
|
|
_arg0: Arg0PathEntryGuard,
|
|
_previous_codex_home: Option<OsString>,
|
|
}
|
|
|
|
const CODEX_HOME_ENV_VAR: &str = "CODEX_HOME";
|
|
|
|
// This code runs before any other tests are run.
|
|
// It allows the test binary to behave like codex and dispatch to apply_patch and codex-linux-sandbox
|
|
// based on the arg0.
|
|
// NOTE: this doesn't work on ARM
|
|
#[ctor]
|
|
pub static CODEX_ALIASES_TEMP_DIR: Option<TestCodexAliasesGuard> = {
|
|
let mut args = std::env::args_os();
|
|
let argv0 = args.next().unwrap_or_default();
|
|
let exe_name = Path::new(&argv0)
|
|
.file_name()
|
|
.and_then(|name| name.to_str())
|
|
.unwrap_or("");
|
|
let argv1 = args.next().unwrap_or_default();
|
|
// Helper re-execs inherit this ctor too, but they may run inside a sandbox
|
|
// where creating another CODEX_HOME tempdir under /tmp is not allowed.
|
|
if exe_name == CODEX_LINUX_SANDBOX_ARG0 || argv1 == CODEX_CORE_APPLY_PATCH_ARG1 {
|
|
return None;
|
|
}
|
|
|
|
#[allow(clippy::unwrap_used)]
|
|
let codex_home = tempfile::Builder::new()
|
|
.prefix("codex-core-tests")
|
|
.tempdir()
|
|
.unwrap();
|
|
let previous_codex_home = std::env::var_os(CODEX_HOME_ENV_VAR);
|
|
// arg0_dispatch() creates helper links under CODEX_HOME/tmp. Point it at a
|
|
// test-owned temp dir so startup never mutates the developer's real ~/.codex.
|
|
//
|
|
// Safety: #[ctor] runs before tests start, so no test threads exist yet.
|
|
unsafe {
|
|
std::env::set_var(CODEX_HOME_ENV_VAR, codex_home.path());
|
|
}
|
|
|
|
#[allow(clippy::unwrap_used)]
|
|
let arg0 = arg0_dispatch().unwrap();
|
|
// Restore the process environment immediately so later tests observe the
|
|
// same CODEX_HOME state they started with.
|
|
match previous_codex_home.as_ref() {
|
|
Some(value) => unsafe {
|
|
std::env::set_var(CODEX_HOME_ENV_VAR, value);
|
|
},
|
|
None => unsafe {
|
|
std::env::remove_var(CODEX_HOME_ENV_VAR);
|
|
},
|
|
}
|
|
|
|
Some(TestCodexAliasesGuard {
|
|
_codex_home: codex_home,
|
|
_arg0: arg0,
|
|
_previous_codex_home: previous_codex_home,
|
|
})
|
|
};
|
|
|
|
#[cfg(not(target_os = "windows"))]
|
|
mod abort_tasks;
|
|
mod agent_jobs;
|
|
mod agent_websocket;
|
|
mod apply_patch_cli;
|
|
#[cfg(not(target_os = "windows"))]
|
|
mod approvals;
|
|
mod cli_stream;
|
|
mod client;
|
|
mod client_websockets;
|
|
mod code_mode;
|
|
mod codex_delegate;
|
|
mod collaboration_instructions;
|
|
mod compact;
|
|
mod compact_remote;
|
|
mod compact_resume_fork;
|
|
mod deprecation_notice;
|
|
mod exec;
|
|
mod exec_policy;
|
|
mod fork_thread;
|
|
mod hierarchical_agents;
|
|
#[cfg(not(target_os = "windows"))]
|
|
mod hooks;
|
|
mod image_rollout;
|
|
mod items;
|
|
mod js_repl;
|
|
mod json_result;
|
|
mod live_cli;
|
|
mod live_reload;
|
|
mod memories;
|
|
mod model_overrides;
|
|
mod model_switching;
|
|
mod model_visible_layout;
|
|
mod models_cache_ttl;
|
|
mod models_etag_responses;
|
|
mod otel;
|
|
mod pending_input;
|
|
mod permissions_messages;
|
|
mod personality;
|
|
mod personality_migration;
|
|
mod plugins;
|
|
mod prompt_caching;
|
|
mod quota_exceeded;
|
|
mod realtime_conversation;
|
|
mod remote_env;
|
|
mod remote_models;
|
|
mod request_compression;
|
|
#[cfg(not(target_os = "windows"))]
|
|
mod request_permissions;
|
|
#[cfg(not(target_os = "windows"))]
|
|
mod request_permissions_tool;
|
|
mod request_user_input;
|
|
mod resume;
|
|
mod resume_warning;
|
|
mod review;
|
|
mod rmcp_client;
|
|
mod rollout_list_find;
|
|
mod safety_check_downgrade;
|
|
mod search_tool;
|
|
mod seatbelt;
|
|
mod shell_command;
|
|
mod shell_serialization;
|
|
mod shell_snapshot;
|
|
mod skill_approval;
|
|
mod skills;
|
|
mod spawn_agent_description;
|
|
mod sqlite_state;
|
|
mod stream_error_allows_next_turn;
|
|
mod stream_no_completed;
|
|
mod subagent_notifications;
|
|
mod tool_harness;
|
|
mod tool_parallelism;
|
|
mod tool_suggest;
|
|
mod tools;
|
|
mod truncation;
|
|
mod turn_state;
|
|
mod undo;
|
|
mod unified_exec;
|
|
mod unstable_features_warning;
|
|
mod user_notification;
|
|
mod user_shell_cmd;
|
|
mod view_image;
|
|
mod web_search;
|
|
mod websocket_fallback;
|