mirror of
https://github.com/openai/codex.git
synced 2026-11-07 20:30:33 +00:00
## Why `codex-core` still had a `test-support` crate feature that was enabled by multiple consumers (`core_test_support`, `app_test_support`, and `codex-tui` dev-deps). That introduced a second feature-resolved shape of `codex-core`, which increases compile cost and cache fragmentation across the workspace. The same root issue previously affected `deterministic_process_ids`: we were using crate features as a test/runtime switch, and Cargo had to build extra variants of a very large crate. ## What Changed ### 1) Remove `test-support` as a crate feature - Deleted the feature declaration from `core/Cargo.toml`. - Removed `features = ["test-support"]` from: - `core/tests/common/Cargo.toml` - `app-server/tests/common/Cargo.toml` - `tui/Cargo.toml` (dev-dependency) - Removed Bazel `crate_features = ["test-support"]` from `core/BUILD.bazel`. ### 2) Keep test behavior without feature-gated crate variants - Converted test-only behavior toggles to **explicit runtime switches** backed by `AtomicBool`: - thread-manager test mode toggle - deterministic unified-exec process-id toggle - Enabled those toggles from `core_test_support` ctor so integration tests keep deterministic and test-friendly behavior. ### 3) Replace feature-gated helper APIs with always-compiled hidden helpers - APIs that were previously behind `#[cfg(feature = "test-support")]` are now available as `#[doc(hidden)]` test helpers, avoiding feature-split builds while preserving existing test call sites. ## Expected Benefits ### Concrete dependency-graph effect `cargo tree -p codex-core -e features` now shows only the default feature path for `codex-core`; there are no `test-support` or `deterministic_process_ids` feature edges remaining. ### Build-performance impact - Eliminates feature-driven duplicate `codex-core` compilation variants. - Improves cache reuse across test-support consumers that previously forced separate feature resolution. - Reduces rebuild churn when switching between targets that did and did not depend on the feature-enabled `codex-core` shape. ## Safety / behavior notes - Production behavior remains unchanged by default. - Test-only behavior is now explicit and opt-in via dedicated test toggles, with docstrings clarifying these must stay at default values in production. ## Validation - `just fmt` - `cargo test -p codex-core unified_exec::` - `cargo test -p codex-core --test all unified_exec -- --test-threads=1` - `cargo check -p app_test_support` - `cargo check -p codex-tui --tests` - `cargo check -p codex-core` - `cargo tree -p codex-core -e features`
134 lines
4.0 KiB
TOML
134 lines
4.0 KiB
TOML
[package]
|
|
name = "codex-tui"
|
|
version.workspace = true
|
|
edition.workspace = true
|
|
license.workspace = true
|
|
|
|
[[bin]]
|
|
name = "codex-tui"
|
|
path = "src/main.rs"
|
|
|
|
[lib]
|
|
name = "codex_tui"
|
|
path = "src/lib.rs"
|
|
|
|
[features]
|
|
# Enable vt100-based tests (emulator) when running with `--features vt100-tests`.
|
|
vt100-tests = []
|
|
# Gate verbose debug logging inside the TUI implementation.
|
|
debug-logs = []
|
|
|
|
[lints]
|
|
workspace = true
|
|
|
|
[dependencies]
|
|
anyhow = { workspace = true }
|
|
base64 = { workspace = true }
|
|
chrono = { workspace = true, features = ["serde"] }
|
|
clap = { workspace = true, features = ["derive"] }
|
|
codex-ansi-escape = { workspace = true }
|
|
codex-app-server-protocol = { workspace = true }
|
|
codex-arg0 = { workspace = true }
|
|
codex-backend-client = { workspace = true }
|
|
codex-chatgpt = { workspace = true }
|
|
codex-cloud-requirements = { workspace = true }
|
|
codex-common = { workspace = true, features = [
|
|
"cli",
|
|
"elapsed",
|
|
"sandbox_summary",
|
|
] }
|
|
codex-core = { workspace = true }
|
|
codex-feedback = { workspace = true }
|
|
codex-file-search = { workspace = true }
|
|
codex-login = { workspace = true }
|
|
codex-otel = { workspace = true }
|
|
codex-protocol = { workspace = true }
|
|
codex-state = { workspace = true }
|
|
codex-utils-absolute-path = { workspace = true }
|
|
color-eyre = { workspace = true }
|
|
crossterm = { workspace = true, features = ["bracketed-paste", "event-stream"] }
|
|
derive_more = { workspace = true, features = ["is_variant"] }
|
|
diffy = { workspace = true }
|
|
dirs = { workspace = true }
|
|
dunce = { workspace = true }
|
|
image = { workspace = true, features = ["jpeg", "png", "gif", "webp"] }
|
|
itertools = { workspace = true }
|
|
lazy_static = { workspace = true }
|
|
pathdiff = { workspace = true }
|
|
pulldown-cmark = { workspace = true }
|
|
rand = { workspace = true }
|
|
ratatui = { workspace = true, features = [
|
|
"scrolling-regions",
|
|
"unstable-backend-writer",
|
|
"unstable-rendered-line-info",
|
|
"unstable-widget-ref",
|
|
] }
|
|
ratatui-macros = { workspace = true }
|
|
regex-lite = { workspace = true }
|
|
reqwest = { version = "0.12", features = ["json"] }
|
|
rmcp = { workspace = true }
|
|
serde = { workspace = true, features = ["derive"] }
|
|
serde_json = { workspace = true, features = ["preserve_order"] }
|
|
shlex = { workspace = true }
|
|
strum = { workspace = true }
|
|
strum_macros = { workspace = true }
|
|
supports-color = { workspace = true }
|
|
tempfile = { workspace = true }
|
|
textwrap = { workspace = true }
|
|
thiserror = { workspace = true }
|
|
tokio = { workspace = true, features = [
|
|
"io-std",
|
|
"macros",
|
|
"process",
|
|
"rt-multi-thread",
|
|
"signal",
|
|
"test-util",
|
|
"time",
|
|
] }
|
|
tokio-stream = { workspace = true, features = ["sync"] }
|
|
toml = { workspace = true }
|
|
tracing = { workspace = true, features = ["log"] }
|
|
tracing-appender = { workspace = true }
|
|
tracing-subscriber = { workspace = true, features = ["env-filter"] }
|
|
tree-sitter-bash = { workspace = true }
|
|
tree-sitter-highlight = { workspace = true }
|
|
unicode-segmentation = { workspace = true }
|
|
unicode-width = { workspace = true }
|
|
url = { workspace = true }
|
|
webbrowser = { workspace = true }
|
|
uuid = { workspace = true }
|
|
|
|
codex-windows-sandbox = { workspace = true }
|
|
tokio-util = { workspace = true, features = ["time"] }
|
|
|
|
[target.'cfg(unix)'.dependencies]
|
|
libc = { workspace = true }
|
|
|
|
[target.'cfg(windows)'.dependencies]
|
|
which = { workspace = true }
|
|
windows-sys = { version = "0.52", features = [
|
|
"Win32_Foundation",
|
|
"Win32_System_Console",
|
|
] }
|
|
winsplit = "0.1"
|
|
|
|
# Clipboard support via `arboard` is not available on Android/Termux.
|
|
# Only include it for non-Android targets so the crate builds on Android.
|
|
[target.'cfg(not(target_os = "android"))'.dependencies]
|
|
arboard = { workspace = true }
|
|
|
|
|
|
[dev-dependencies]
|
|
codex-cli = { workspace = true }
|
|
codex-core = { workspace = true }
|
|
codex-utils-cargo-bin = { workspace = true }
|
|
codex-utils-pty = { workspace = true }
|
|
assert_matches = { workspace = true }
|
|
chrono = { workspace = true, features = ["serde"] }
|
|
insta = { workspace = true }
|
|
pretty_assertions = { workspace = true }
|
|
rand = { workspace = true }
|
|
serial_test = { workspace = true }
|
|
vt100 = { workspace = true }
|
|
uuid = { workspace = true }
|