diff --git a/codex-rs/Cargo.lock b/codex-rs/Cargo.lock index 36ee957471c..913fa21c310 100644 --- a/codex-rs/Cargo.lock +++ b/codex-rs/Cargo.lock @@ -1353,7 +1353,6 @@ dependencies = [ "codex-backend-client", "codex-chatgpt", "codex-cloud-requirements", - "codex-common", "codex-core", "codex-execpolicy", "codex-feedback", @@ -1362,6 +1361,7 @@ dependencies = [ "codex-protocol", "codex-rmcp-client", "codex-utils-absolute-path", + "codex-utils-cli", "codex-utils-json-to-toml", "core_test_support", "os_info", @@ -1485,10 +1485,10 @@ version = "0.0.0" dependencies = [ "anyhow", "clap", - "codex-common", "codex-core", "codex-git", "codex-utils-cargo-bin", + "codex-utils-cli", "pretty_assertions", "serde", "serde_json", @@ -1512,7 +1512,6 @@ dependencies = [ "codex-arg0", "codex-chatgpt", "codex-cloud-tasks", - "codex-common", "codex-core", "codex-exec", "codex-execpolicy", @@ -1524,6 +1523,7 @@ dependencies = [ "codex-stdio-to-uds", "codex-tui", "codex-utils-cargo-bin", + "codex-utils-cli", "codex-windows-sandbox", "libc", "owo-colors", @@ -1589,10 +1589,10 @@ dependencies = [ "chrono", "clap", "codex-cloud-tasks-client", - "codex-common", "codex-core", "codex-login", "codex-tui", + "codex-utils-cli", "crossterm", "owo-colors", "pretty_assertions", @@ -1623,21 +1623,6 @@ dependencies = [ "thiserror 2.0.18", ] -[[package]] -name = "codex-common" -version = "0.0.0" -dependencies = [ - "clap", - "codex-core", - "codex-lmstudio", - "codex-ollama", - "codex-protocol", - "codex-utils-absolute-path", - "pretty_assertions", - "serde", - "toml 0.9.12+spec-1.1.0", -] - [[package]] name = "codex-core" version = "0.0.0" @@ -1765,11 +1750,14 @@ dependencies = [ "clap", "codex-arg0", "codex-cloud-requirements", - "codex-common", "codex-core", "codex-protocol", "codex-utils-absolute-path", "codex-utils-cargo-bin", + "codex-utils-cli", + "codex-utils-elapsed", + "codex-utils-oss", + "codex-utils-sandbox-summary", "core_test_support", "libc", "owo-colors", @@ -1990,9 +1978,9 @@ version = "0.0.0" dependencies = [ "anyhow", "codex-arg0", - "codex-common", "codex-core", "codex-protocol", + "codex-utils-cli", "codex-utils-json-to-toml", "core_test_support", "mcp_test_support", @@ -2259,7 +2247,6 @@ dependencies = [ "codex-chatgpt", "codex-cli", "codex-cloud-requirements", - "codex-common", "codex-core", "codex-feedback", "codex-file-search", @@ -2268,8 +2255,14 @@ dependencies = [ "codex-protocol", "codex-state", "codex-utils-absolute-path", + "codex-utils-approval-presets", "codex-utils-cargo-bin", + "codex-utils-cli", + "codex-utils-elapsed", + "codex-utils-fuzzy-match", + "codex-utils-oss", "codex-utils-pty", + "codex-utils-sandbox-summary", "codex-windows-sandbox", "color-eyre", "crossterm", @@ -2335,6 +2328,13 @@ dependencies = [ "ts-rs", ] +[[package]] +name = "codex-utils-approval-presets" +version = "0.0.0" +dependencies = [ + "codex-core", +] + [[package]] name = "codex-utils-cache" version = "0.0.0" @@ -2353,6 +2353,26 @@ dependencies = [ "thiserror 2.0.18", ] +[[package]] +name = "codex-utils-cli" +version = "0.0.0" +dependencies = [ + "clap", + "codex-core", + "codex-protocol", + "pretty_assertions", + "serde", + "toml 0.9.12+spec-1.1.0", +] + +[[package]] +name = "codex-utils-elapsed" +version = "0.0.0" + +[[package]] +name = "codex-utils-fuzzy-match" +version = "0.0.0" + [[package]] name = "codex-utils-home-dir" version = "0.0.0" @@ -2383,6 +2403,15 @@ dependencies = [ "toml 0.9.12+spec-1.1.0", ] +[[package]] +name = "codex-utils-oss" +version = "0.0.0" +dependencies = [ + "codex-core", + "codex-lmstudio", + "codex-ollama", +] + [[package]] name = "codex-utils-pty" version = "0.0.0" @@ -2417,6 +2446,15 @@ dependencies = [ "rustls", ] +[[package]] +name = "codex-utils-sandbox-summary" +version = "0.0.0" +dependencies = [ + "codex-core", + "codex-utils-absolute-path", + "pretty_assertions", +] + [[package]] name = "codex-utils-string" version = "0.0.0" diff --git a/codex-rs/Cargo.toml b/codex-rs/Cargo.toml index e7b30353f21..3b57f1a1750 100644 --- a/codex-rs/Cargo.toml +++ b/codex-rs/Cargo.toml @@ -15,7 +15,6 @@ members = [ "cloud-tasks", "cloud-tasks-client", "cli", - "common", "shell-command", "core", "hooks", @@ -50,6 +49,12 @@ members = [ "utils/readiness", "utils/rustls-provider", "utils/string", + "utils/cli", + "utils/elapsed", + "utils/sandbox-summary", + "utils/approval-presets", + "utils/oss", + "utils/fuzzy-match", "codex-client", "codex-api", "state", @@ -82,7 +87,6 @@ codex-cloud-requirements = { path = "cloud-requirements" } codex-chatgpt = { path = "chatgpt" } codex-cli = { path = "cli"} codex-client = { path = "codex-client" } -codex-common = { path = "common" } codex-shell-command = { path = "shell-command" } codex-core = { path = "core" } codex-hooks = { path = "hooks" } @@ -118,6 +122,12 @@ codex-utils-pty = { path = "utils/pty" } codex-utils-readiness = { path = "utils/readiness" } codex-utils-rustls-provider = { path = "utils/rustls-provider" } codex-utils-string = { path = "utils/string" } +codex-utils-cli = { path = "utils/cli" } +codex-utils-elapsed = { path = "utils/elapsed" } +codex-utils-sandbox-summary = { path = "utils/sandbox-summary" } +codex-utils-approval-presets = { path = "utils/approval-presets" } +codex-utils-oss = { path = "utils/oss" } +codex-utils-fuzzy-match = { path = "utils/fuzzy-match" } codex-windows-sandbox = { path = "windows-sandbox-rs" } core_test_support = { path = "core/tests/common" } exec_server_test_support = { path = "exec-server/tests/common" } diff --git a/codex-rs/app-server/Cargo.toml b/codex-rs/app-server/Cargo.toml index a4e848213aa..7cd2091826d 100644 --- a/codex-rs/app-server/Cargo.toml +++ b/codex-rs/app-server/Cargo.toml @@ -20,8 +20,8 @@ anyhow = { workspace = true } async-trait = { workspace = true } codex-arg0 = { workspace = true } codex-cloud-requirements = { workspace = true } -codex-common = { workspace = true, features = ["cli"] } codex-core = { workspace = true } +codex-utils-cli = { workspace = true } codex-backend-client = { workspace = true } codex-file-search = { workspace = true } codex-chatgpt = { workspace = true } diff --git a/codex-rs/app-server/src/lib.rs b/codex-rs/app-server/src/lib.rs index 1b940c70d81..0c3af0ea8a0 100644 --- a/codex-rs/app-server/src/lib.rs +++ b/codex-rs/app-server/src/lib.rs @@ -1,13 +1,13 @@ #![deny(clippy::print_stdout, clippy::print_stderr)] use codex_cloud_requirements::cloud_requirements_loader; -use codex_common::CliConfigOverrides; use codex_core::AuthManager; use codex_core::config::Config; use codex_core::config::ConfigBuilder; use codex_core::config_loader::CloudRequirementsLoader; use codex_core::config_loader::ConfigLayerStackOrdering; use codex_core::config_loader::LoaderOverrides; +use codex_utils_cli::CliConfigOverrides; use std::io::ErrorKind; use std::io::Result as IoResult; use std::path::PathBuf; diff --git a/codex-rs/app-server/src/main.rs b/codex-rs/app-server/src/main.rs index 71d6dc338c2..c436300a2d7 100644 --- a/codex-rs/app-server/src/main.rs +++ b/codex-rs/app-server/src/main.rs @@ -1,7 +1,7 @@ use codex_app_server::run_main; use codex_arg0::arg0_dispatch_or_else; -use codex_common::CliConfigOverrides; use codex_core::config_loader::LoaderOverrides; +use codex_utils_cli::CliConfigOverrides; use std::path::PathBuf; // Debug-only test hook: lets integration tests point the server at a temporary diff --git a/codex-rs/chatgpt/Cargo.toml b/codex-rs/chatgpt/Cargo.toml index 3c55878c8fe..823b63cad22 100644 --- a/codex-rs/chatgpt/Cargo.toml +++ b/codex-rs/chatgpt/Cargo.toml @@ -10,8 +10,8 @@ workspace = true [dependencies] anyhow = { workspace = true } clap = { workspace = true, features = ["derive"] } -codex-common = { workspace = true, features = ["cli"] } codex-core = { workspace = true } +codex-utils-cli = { workspace = true } codex-utils-cargo-bin = { workspace = true } serde = { workspace = true, features = ["derive"] } serde_json = { workspace = true } diff --git a/codex-rs/chatgpt/src/apply_command.rs b/codex-rs/chatgpt/src/apply_command.rs index e6b546281e3..6497777a9ff 100644 --- a/codex-rs/chatgpt/src/apply_command.rs +++ b/codex-rs/chatgpt/src/apply_command.rs @@ -1,8 +1,8 @@ use std::path::PathBuf; use clap::Parser; -use codex_common::CliConfigOverrides; use codex_core::config::Config; +use codex_utils_cli::CliConfigOverrides; use crate::chatgpt_token::init_chatgpt_token_from_auth; use crate::get_task::GetTaskResponse; diff --git a/codex-rs/cli/Cargo.toml b/codex-rs/cli/Cargo.toml index 77344df4772..fd15f87916c 100644 --- a/codex-rs/cli/Cargo.toml +++ b/codex-rs/cli/Cargo.toml @@ -25,7 +25,7 @@ codex-app-server-test-client = { workspace = true } codex-arg0 = { workspace = true } codex-chatgpt = { workspace = true } codex-cloud-tasks = { path = "../cloud-tasks" } -codex-common = { workspace = true, features = ["cli"] } +codex-utils-cli = { workspace = true } codex-core = { workspace = true } codex-exec = { workspace = true } codex-execpolicy = { workspace = true } diff --git a/codex-rs/cli/src/debug_sandbox.rs b/codex-rs/cli/src/debug_sandbox.rs index 39255b8d04f..ca4e9999d0e 100644 --- a/codex-rs/cli/src/debug_sandbox.rs +++ b/codex-rs/cli/src/debug_sandbox.rs @@ -5,7 +5,6 @@ mod seatbelt; use std::path::PathBuf; -use codex_common::CliConfigOverrides; use codex_core::config::Config; use codex_core::config::ConfigOverrides; use codex_core::exec_env::create_env; @@ -14,6 +13,7 @@ use codex_core::landlock::spawn_command_under_linux_sandbox; use codex_core::seatbelt::spawn_command_under_seatbelt; use codex_core::spawn::StdioPolicy; use codex_protocol::config_types::SandboxMode; +use codex_utils_cli::CliConfigOverrides; use crate::LandlockCommand; use crate::SeatbeltCommand; diff --git a/codex-rs/cli/src/lib.rs b/codex-rs/cli/src/lib.rs index e9f60eba769..f71d4598396 100644 --- a/codex-rs/cli/src/lib.rs +++ b/codex-rs/cli/src/lib.rs @@ -3,7 +3,7 @@ mod exit_status; pub mod login; use clap::Parser; -use codex_common::CliConfigOverrides; +use codex_utils_cli::CliConfigOverrides; #[derive(Debug, Parser)] pub struct SeatbeltCommand { diff --git a/codex-rs/cli/src/login.rs b/codex-rs/cli/src/login.rs index 8cb6f3d01f1..42622f25d33 100644 --- a/codex-rs/cli/src/login.rs +++ b/codex-rs/cli/src/login.rs @@ -1,4 +1,3 @@ -use codex_common::CliConfigOverrides; use codex_core::CodexAuth; use codex_core::auth::AuthCredentialsStoreMode; use codex_core::auth::AuthMode; @@ -10,6 +9,7 @@ use codex_login::ServerOptions; use codex_login::run_device_code_login; use codex_login::run_login_server; use codex_protocol::config_types::ForcedLoginMethod; +use codex_utils_cli::CliConfigOverrides; use std::io::IsTerminal; use std::io::Read; use std::path::PathBuf; diff --git a/codex-rs/cli/src/main.rs b/codex-rs/cli/src/main.rs index defc063eb6d..fa4dc5e3d92 100644 --- a/codex-rs/cli/src/main.rs +++ b/codex-rs/cli/src/main.rs @@ -16,7 +16,6 @@ use codex_cli::login::run_login_with_chatgpt; use codex_cli::login::run_login_with_device_code; use codex_cli::login::run_logout; use codex_cloud_tasks::Cli as CloudTasksCli; -use codex_common::CliConfigOverrides; use codex_exec::Cli as ExecCli; use codex_exec::Command as ExecCommand; use codex_exec::ReviewArgs; @@ -26,6 +25,7 @@ use codex_tui::AppExitInfo; use codex_tui::Cli as TuiCli; use codex_tui::ExitReason; use codex_tui::update_action::UpdateAction; +use codex_utils_cli::CliConfigOverrides; use owo_colors::OwoColorize; use std::io::IsTerminal; use std::path::PathBuf; @@ -1248,11 +1248,11 @@ mod tests { assert_eq!(interactive.config_profile.as_deref(), Some("my-profile")); assert_matches!( interactive.sandbox_mode, - Some(codex_common::SandboxModeCliArg::WorkspaceWrite) + Some(codex_utils_cli::SandboxModeCliArg::WorkspaceWrite) ); assert_matches!( interactive.approval_policy, - Some(codex_common::ApprovalModeCliArg::OnRequest) + Some(codex_utils_cli::ApprovalModeCliArg::OnRequest) ); assert!(interactive.full_auto); assert_eq!( diff --git a/codex-rs/cli/src/mcp_cmd.rs b/codex-rs/cli/src/mcp_cmd.rs index 0b6076130b6..052af56196c 100644 --- a/codex-rs/cli/src/mcp_cmd.rs +++ b/codex-rs/cli/src/mcp_cmd.rs @@ -5,8 +5,6 @@ use anyhow::Result; use anyhow::anyhow; use anyhow::bail; use clap::ArgGroup; -use codex_common::CliConfigOverrides; -use codex_common::format_env_display::format_env_display; use codex_core::config::Config; use codex_core::config::edit::ConfigEditsBuilder; use codex_core::config::find_codex_home; @@ -19,6 +17,8 @@ use codex_core::mcp::auth::oauth_login_support; use codex_core::protocol::McpAuthStatus; use codex_rmcp_client::delete_oauth_tokens; use codex_rmcp_client::perform_oauth_login; +use codex_utils_cli::CliConfigOverrides; +use codex_utils_cli::format_env_display::format_env_display; /// Subcommands: /// - `list` — list configured servers (with `--json`) diff --git a/codex-rs/cloud-tasks/Cargo.toml b/codex-rs/cloud-tasks/Cargo.toml index cc79b3e7907..717f499033c 100644 --- a/codex-rs/cloud-tasks/Cargo.toml +++ b/codex-rs/cloud-tasks/Cargo.toml @@ -20,10 +20,10 @@ codex-cloud-tasks-client = { path = "../cloud-tasks-client", features = [ "mock", "online", ] } -codex-common = { path = "../common", features = ["cli"] } codex-core = { path = "../core" } codex-login = { path = "../login" } codex-tui = { path = "../tui" } +codex-utils-cli = { workspace = true } crossterm = { workspace = true, features = ["event-stream"] } ratatui = { workspace = true } reqwest = { workspace = true, features = ["json"] } diff --git a/codex-rs/cloud-tasks/src/cli.rs b/codex-rs/cloud-tasks/src/cli.rs index 595c649b380..e2c3a244422 100644 --- a/codex-rs/cloud-tasks/src/cli.rs +++ b/codex-rs/cloud-tasks/src/cli.rs @@ -1,6 +1,6 @@ use clap::Args; use clap::Parser; -use codex_common::CliConfigOverrides; +use codex_utils_cli::CliConfigOverrides; #[derive(Parser, Debug, Default)] #[command(version)] diff --git a/codex-rs/common/BUILD.bazel b/codex-rs/common/BUILD.bazel deleted file mode 100644 index c42c7bd76be..00000000000 --- a/codex-rs/common/BUILD.bazel +++ /dev/null @@ -1,11 +0,0 @@ -load("//:defs.bzl", "codex_rust_crate") - -codex_rust_crate( - name = "common", - crate_name = "codex_common", - crate_features = [ - "cli", - "elapsed", - "sandbox_summary", - ], -) diff --git a/codex-rs/common/Cargo.toml b/codex-rs/common/Cargo.toml deleted file mode 100644 index cd7b8dfe34c..00000000000 --- a/codex-rs/common/Cargo.toml +++ /dev/null @@ -1,30 +0,0 @@ -[package] -name = "codex-common" -version.workspace = true -edition.workspace = true -license.workspace = true - -[lints] -workspace = true - -[dependencies] -clap = { workspace = true, features = ["derive", "wrap_help"], optional = true } -codex-core = { workspace = true } -codex-lmstudio = { workspace = true } -codex-ollama = { workspace = true } -codex-protocol = { workspace = true } -serde = { workspace = true, optional = true } -toml = { workspace = true, optional = true } - -[features] -# Separate feature so that `clap` is not a mandatory dependency. -cli = ["clap", "serde", "toml"] -elapsed = [] -sandbox_summary = [] - -[dev-dependencies] -clap = { workspace = true, features = ["derive", "wrap_help"] } -codex-utils-absolute-path = { workspace = true } -pretty_assertions = { workspace = true } -serde = { workspace = true } -toml = { workspace = true } diff --git a/codex-rs/common/README.md b/codex-rs/common/README.md deleted file mode 100644 index 9d5d4151260..00000000000 --- a/codex-rs/common/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# codex-common - -This crate is designed for utilities that need to be shared across other crates in the workspace, but should not go in `core`. - -For narrow utility features, the pattern is to add introduce a new feature under `[features]` in `Cargo.toml` and then gate it with `#[cfg]` in `lib.rs`, as appropriate. diff --git a/codex-rs/common/src/lib.rs b/codex-rs/common/src/lib.rs deleted file mode 100644 index 20c22c6845e..00000000000 --- a/codex-rs/common/src/lib.rs +++ /dev/null @@ -1,39 +0,0 @@ -#[cfg(feature = "cli")] -mod approval_mode_cli_arg; - -#[cfg(feature = "elapsed")] -pub mod elapsed; - -#[cfg(feature = "cli")] -pub use approval_mode_cli_arg::ApprovalModeCliArg; - -#[cfg(feature = "cli")] -mod sandbox_mode_cli_arg; - -#[cfg(feature = "cli")] -pub use sandbox_mode_cli_arg::SandboxModeCliArg; - -#[cfg(feature = "cli")] -pub mod format_env_display; - -#[cfg(feature = "cli")] -mod config_override; - -#[cfg(feature = "cli")] -pub use config_override::CliConfigOverrides; - -mod sandbox_summary; - -#[cfg(feature = "sandbox_summary")] -pub use sandbox_summary::summarize_sandbox_policy; - -mod config_summary; - -pub use config_summary::create_config_summary_entries; -// Shared fuzzy matcher (used by TUI selection popups and other UI filtering) -pub mod fuzzy_match; -// Shared approval presets (AskForApproval + Sandbox) used by TUI and MCP server -// Not to be confused with AskForApproval, which we should probably rename to EscalationPolicy. -pub mod approval_presets; -// Shared OSS provider utilities used by TUI and exec -pub mod oss; diff --git a/codex-rs/exec/Cargo.toml b/codex-rs/exec/Cargo.toml index 860f4034bea..bb2f8498e3d 100644 --- a/codex-rs/exec/Cargo.toml +++ b/codex-rs/exec/Cargo.toml @@ -20,14 +20,13 @@ anyhow = { workspace = true } clap = { workspace = true, features = ["derive"] } codex-arg0 = { workspace = true } codex-cloud-requirements = { workspace = true } -codex-common = { workspace = true, features = [ - "cli", - "elapsed", - "sandbox_summary", -] } codex-core = { workspace = true } codex-protocol = { workspace = true } codex-utils-absolute-path = { workspace = true } +codex-utils-cli = { workspace = true } +codex-utils-elapsed = { workspace = true } +codex-utils-oss = { workspace = true } +codex-utils-sandbox-summary = { workspace = true } owo-colors = { workspace = true } serde = { workspace = true, features = ["derive"] } serde_json = { workspace = true } diff --git a/codex-rs/exec/src/cli.rs b/codex-rs/exec/src/cli.rs index 5d7a9ba7252..05845e00fa8 100644 --- a/codex-rs/exec/src/cli.rs +++ b/codex-rs/exec/src/cli.rs @@ -2,7 +2,7 @@ use clap::Args; use clap::FromArgMatches; use clap::Parser; use clap::ValueEnum; -use codex_common::CliConfigOverrides; +use codex_utils_cli::CliConfigOverrides; use std::path::PathBuf; #[derive(Parser, Debug)] @@ -38,7 +38,7 @@ pub struct Cli { /// Select the sandbox policy to use when executing model-generated shell /// commands. #[arg(long = "sandbox", short = 's', value_enum)] - pub sandbox_mode: Option, + pub sandbox_mode: Option, /// Configuration profile from config.toml to specify default options. #[arg(long = "profile", short = 'p')] diff --git a/codex-rs/exec/src/event_processor_with_human_output.rs b/codex-rs/exec/src/event_processor_with_human_output.rs index f9edc36627f..d7b95e28825 100644 --- a/codex-rs/exec/src/event_processor_with_human_output.rs +++ b/codex-rs/exec/src/event_processor_with_human_output.rs @@ -1,5 +1,3 @@ -use codex_common::elapsed::format_duration; -use codex_common::elapsed::format_elapsed; use codex_core::config::Config; use codex_core::protocol::AgentMessageEvent; use codex_core::protocol::AgentReasoningRawContentEvent; @@ -36,6 +34,8 @@ use codex_core::protocol::WebSearchEndEvent; use codex_core::web_search::web_search_detail; use codex_protocol::items::TurnItem; use codex_protocol::num_format::format_with_separators; +use codex_utils_elapsed::format_duration; +use codex_utils_elapsed::format_elapsed; use owo_colors::OwoColorize; use owo_colors::Style; use shlex::try_join; @@ -46,9 +46,9 @@ use std::time::Instant; use crate::event_processor::CodexStatus; use crate::event_processor::EventProcessor; use crate::event_processor::handle_last_message; -use codex_common::create_config_summary_entries; use codex_protocol::plan_tool::StepStatus; use codex_protocol::plan_tool::UpdatePlanArgs; +use codex_utils_sandbox_summary::create_config_summary_entries; /// This should be configurable. When used in CI, users may not want to impose /// a limit so they can see the full transcript. diff --git a/codex-rs/exec/src/lib.rs b/codex-rs/exec/src/lib.rs index 52aa6973b0f..f6a8c8b990c 100644 --- a/codex-rs/exec/src/lib.rs +++ b/codex-rs/exec/src/lib.rs @@ -14,8 +14,6 @@ pub use cli::Cli; pub use cli::Command; pub use cli::ReviewArgs; use codex_cloud_requirements::cloud_requirements_loader; -use codex_common::oss::ensure_oss_provider_ready; -use codex_common::oss::get_default_model_for_oss_provider; use codex_core::AuthManager; use codex_core::LMSTUDIO_OSS_PROVIDER_ID; use codex_core::NewThread; @@ -43,6 +41,8 @@ use codex_protocol::approvals::ElicitationAction; use codex_protocol::config_types::SandboxMode; use codex_protocol::user_input::UserInput; use codex_utils_absolute_path::AbsolutePathBuf; +use codex_utils_oss::ensure_oss_provider_ready; +use codex_utils_oss::get_default_model_for_oss_provider; use event_processor_with_human_output::EventProcessorWithHumanOutput; use event_processor_with_jsonl_output::EventProcessorWithJsonOutput; use serde_json::Value; diff --git a/codex-rs/exec/src/main.rs b/codex-rs/exec/src/main.rs index 2d3db1f42e5..9c6cf52f9f5 100644 --- a/codex-rs/exec/src/main.rs +++ b/codex-rs/exec/src/main.rs @@ -11,9 +11,9 @@ //! of the `codex-exec` binary. use clap::Parser; use codex_arg0::arg0_dispatch_or_else; -use codex_common::CliConfigOverrides; use codex_exec::Cli; use codex_exec::run_main; +use codex_utils_cli::CliConfigOverrides; #[derive(Parser, Debug)] struct TopCli { diff --git a/codex-rs/mcp-server/Cargo.toml b/codex-rs/mcp-server/Cargo.toml index 7a952342dee..e3f0db82ebe 100644 --- a/codex-rs/mcp-server/Cargo.toml +++ b/codex-rs/mcp-server/Cargo.toml @@ -18,9 +18,9 @@ workspace = true [dependencies] anyhow = { workspace = true } codex-arg0 = { workspace = true } -codex-common = { workspace = true, features = ["cli"] } codex-core = { workspace = true } codex-protocol = { workspace = true } +codex-utils-cli = { workspace = true } codex-utils-json-to-toml = { workspace = true } rmcp = { workspace = true } schemars = { workspace = true } diff --git a/codex-rs/mcp-server/src/lib.rs b/codex-rs/mcp-server/src/lib.rs index eed176c5758..fd4475a61d0 100644 --- a/codex-rs/mcp-server/src/lib.rs +++ b/codex-rs/mcp-server/src/lib.rs @@ -5,8 +5,8 @@ use std::io::ErrorKind; use std::io::Result as IoResult; use std::path::PathBuf; -use codex_common::CliConfigOverrides; use codex_core::config::Config; +use codex_utils_cli::CliConfigOverrides; use rmcp::model::ClientNotification; use rmcp::model::ClientRequest; diff --git a/codex-rs/mcp-server/src/main.rs b/codex-rs/mcp-server/src/main.rs index 314944fab57..c6ffd49b407 100644 --- a/codex-rs/mcp-server/src/main.rs +++ b/codex-rs/mcp-server/src/main.rs @@ -1,6 +1,6 @@ use codex_arg0::arg0_dispatch_or_else; -use codex_common::CliConfigOverrides; use codex_mcp_server::run_main; +use codex_utils_cli::CliConfigOverrides; fn main() -> anyhow::Result<()> { arg0_dispatch_or_else(|codex_linux_sandbox_exe| async move { diff --git a/codex-rs/tui/Cargo.toml b/codex-rs/tui/Cargo.toml index 5e313f19b1c..9f268fbd498 100644 --- a/codex-rs/tui/Cargo.toml +++ b/codex-rs/tui/Cargo.toml @@ -32,11 +32,6 @@ 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 } @@ -44,7 +39,13 @@ codex-login = { workspace = true } codex-otel = { workspace = true } codex-protocol = { workspace = true } codex-state = { workspace = true } +codex-utils-approval-presets = { workspace = true } codex-utils-absolute-path = { workspace = true } +codex-utils-cli = { workspace = true } +codex-utils-elapsed = { workspace = true } +codex-utils-fuzzy-match = { workspace = true } +codex-utils-oss = { workspace = true } +codex-utils-sandbox-summary = { workspace = true } color-eyre = { workspace = true } crossterm = { workspace = true, features = ["bracketed-paste", "event-stream"] } derive_more = { workspace = true, features = ["is_variant"] } diff --git a/codex-rs/tui/src/app_event.rs b/codex-rs/tui/src/app_event.rs index 0b85fafbb7c..7244367fa15 100644 --- a/codex-rs/tui/src/app_event.rs +++ b/codex-rs/tui/src/app_event.rs @@ -11,12 +11,12 @@ use std::path::PathBuf; use codex_chatgpt::connectors::AppInfo; -use codex_common::approval_presets::ApprovalPreset; use codex_core::protocol::Event; use codex_core::protocol::RateLimitSnapshot; use codex_file_search::FileMatch; use codex_protocol::ThreadId; use codex_protocol::openai_models::ModelPreset; +use codex_utils_approval_presets::ApprovalPreset; use crate::bottom_pane::ApprovalRequest; use crate::bottom_pane::StatusLineItem; diff --git a/codex-rs/tui/src/bottom_pane/chat_composer.rs b/codex-rs/tui/src/bottom_pane/chat_composer.rs index 38376a5278e..3ceeb728c1e 100644 --- a/codex-rs/tui/src/bottom_pane/chat_composer.rs +++ b/codex-rs/tui/src/bottom_pane/chat_composer.rs @@ -152,12 +152,12 @@ use crate::render::RectExt; use crate::render::renderable::Renderable; use crate::slash_command::SlashCommand; use crate::style::user_message_style; -use codex_common::fuzzy_match::fuzzy_match; use codex_protocol::custom_prompts::CustomPrompt; use codex_protocol::custom_prompts::PROMPTS_CMD_PREFIX; use codex_protocol::models::local_image_label_text; use codex_protocol::user_input::ByteRange; use codex_protocol::user_input::TextElement; +use codex_utils_fuzzy_match::fuzzy_match; use crate::app_event::AppEvent; use crate::app_event::ConnectorsSnapshot; diff --git a/codex-rs/tui/src/bottom_pane/multi_select_picker.rs b/codex-rs/tui/src/bottom_pane/multi_select_picker.rs index 0fb027a57a7..65dfbb77414 100644 --- a/codex-rs/tui/src/bottom_pane/multi_select_picker.rs +++ b/codex-rs/tui/src/bottom_pane/multi_select_picker.rs @@ -25,7 +25,7 @@ //! .build(); //! ``` -use codex_common::fuzzy_match::fuzzy_match; +use codex_utils_fuzzy_match::fuzzy_match; use crossterm::event::KeyCode; use crossterm::event::KeyEvent; use crossterm::event::KeyModifiers; diff --git a/codex-rs/tui/src/bottom_pane/skill_popup.rs b/codex-rs/tui/src/bottom_pane/skill_popup.rs index 6ce8d4e373d..e3a6c9880bd 100644 --- a/codex-rs/tui/src/bottom_pane/skill_popup.rs +++ b/codex-rs/tui/src/bottom_pane/skill_popup.rs @@ -15,7 +15,7 @@ use crate::key_hint; use crate::render::Insets; use crate::render::RectExt; use crate::text_formatting::truncate_text; -use codex_common::fuzzy_match::fuzzy_match; +use codex_utils_fuzzy_match::fuzzy_match; #[derive(Clone, Debug)] pub(crate) struct MentionItem { diff --git a/codex-rs/tui/src/bottom_pane/slash_commands.rs b/codex-rs/tui/src/bottom_pane/slash_commands.rs index 34ad17330d7..cdd0ba8f7d0 100644 --- a/codex-rs/tui/src/bottom_pane/slash_commands.rs +++ b/codex-rs/tui/src/bottom_pane/slash_commands.rs @@ -3,7 +3,7 @@ //! The same sandbox- and feature-gating rules are used by both the composer //! and the command popup. Centralizing them here keeps those call sites small //! and ensures they stay in sync. -use codex_common::fuzzy_match::fuzzy_match; +use codex_utils_fuzzy_match::fuzzy_match; use crate::slash_command::SlashCommand; use crate::slash_command::built_in_slash_commands; diff --git a/codex-rs/tui/src/chatwidget.rs b/codex-rs/tui/src/chatwidget.rs index 29ab15cf0c2..40f30fd538c 100644 --- a/codex-rs/tui/src/chatwidget.rs +++ b/codex-rs/tui/src/chatwidget.rs @@ -231,8 +231,6 @@ use crate::streaming::controller::PlanStreamController; use crate::streaming::controller::StreamController; use chrono::Local; -use codex_common::approval_presets::ApprovalPreset; -use codex_common::approval_presets::builtin_approval_presets; use codex_core::AuthManager; use codex_core::CodexAuth; use codex_core::ThreadManager; @@ -243,6 +241,8 @@ use codex_protocol::openai_models::InputModality; use codex_protocol::openai_models::ModelPreset; use codex_protocol::openai_models::ReasoningEffort as ReasoningEffortConfig; use codex_protocol::plan_tool::UpdatePlanArgs; +use codex_utils_approval_presets::ApprovalPreset; +use codex_utils_approval_presets::builtin_approval_presets; use strum::IntoEnumIterator; const USER_SHELL_COMMAND_HELP_TITLE: &str = "Prefix a command with ! to run it locally"; diff --git a/codex-rs/tui/src/chatwidget/tests.rs b/codex-rs/tui/src/chatwidget/tests.rs index 92fcf4ec530..8aac4505c14 100644 --- a/codex-rs/tui/src/chatwidget/tests.rs +++ b/codex-rs/tui/src/chatwidget/tests.rs @@ -15,7 +15,6 @@ use crate::history_cell::UserHistoryCell; use crate::test_backend::VT100Backend; use crate::tui::FrameRequester; use assert_matches::assert_matches; -use codex_common::approval_presets::builtin_approval_presets; use codex_core::CodexAuth; use codex_core::config::Config; use codex_core::config::ConfigBuilder; @@ -88,6 +87,7 @@ use codex_protocol::protocol::SkillScope; use codex_protocol::user_input::TextElement; use codex_protocol::user_input::UserInput; use codex_utils_absolute_path::AbsolutePathBuf; +use codex_utils_approval_presets::builtin_approval_presets; use crossterm::event::KeyCode; use crossterm::event::KeyEvent; use crossterm::event::KeyModifiers; diff --git a/codex-rs/tui/src/cli.rs b/codex-rs/tui/src/cli.rs index e6880437e66..86bea97abe5 100644 --- a/codex-rs/tui/src/cli.rs +++ b/codex-rs/tui/src/cli.rs @@ -1,7 +1,7 @@ use clap::Parser; use clap::ValueHint; -use codex_common::ApprovalModeCliArg; -use codex_common::CliConfigOverrides; +use codex_utils_cli::ApprovalModeCliArg; +use codex_utils_cli::CliConfigOverrides; use std::path::PathBuf; #[derive(Parser, Debug)] @@ -70,7 +70,7 @@ pub struct Cli { /// Select the sandbox policy to use when executing model-generated shell /// commands. #[arg(long = "sandbox", short = 's')] - pub sandbox_mode: Option, + pub sandbox_mode: Option, /// Configure when the model requires human approval before executing a command. #[arg(long = "ask-for-approval", short = 'a')] diff --git a/codex-rs/tui/src/exec_cell/render.rs b/codex-rs/tui/src/exec_cell/render.rs index 6517bcf470a..4f7b1cd6356 100644 --- a/codex-rs/tui/src/exec_cell/render.rs +++ b/codex-rs/tui/src/exec_cell/render.rs @@ -13,10 +13,10 @@ use crate::wrapping::RtOptions; use crate::wrapping::word_wrap_line; use crate::wrapping::word_wrap_lines; use codex_ansi_escape::ansi_escape_line; -use codex_common::elapsed::format_duration; use codex_core::bash::extract_bash_command; use codex_core::protocol::ExecCommandSource; use codex_protocol::parse_command::ParsedCommand; +use codex_utils_elapsed::format_duration; use itertools::Itertools; use ratatui::prelude::*; use ratatui::style::Modifier; diff --git a/codex-rs/tui/src/history_cell.rs b/codex-rs/tui/src/history_cell.rs index 9f27bc9cf1e..360d481aad3 100644 --- a/codex-rs/tui/src/history_cell.rs +++ b/codex-rs/tui/src/history_cell.rs @@ -37,7 +37,6 @@ use crate::wrapping::RtOptions; use crate::wrapping::word_wrap_line; use crate::wrapping::word_wrap_lines; use base64::Engine; -use codex_common::format_env_display::format_env_display; use codex_core::config::Config; use codex_core::config::types::McpServerTransportConfig; use codex_core::protocol::FileChange; @@ -57,6 +56,7 @@ use codex_protocol::plan_tool::UpdatePlanArgs; use codex_protocol::request_user_input::RequestUserInputAnswer; use codex_protocol::request_user_input::RequestUserInputQuestion; use codex_protocol::user_input::TextElement; +use codex_utils_cli::format_env_display::format_env_display; use image::DynamicImage; use image::ImageReader; use ratatui::prelude::*; diff --git a/codex-rs/tui/src/lib.rs b/codex-rs/tui/src/lib.rs index ac82c1d7e11..eb83f519647 100644 --- a/codex-rs/tui/src/lib.rs +++ b/codex-rs/tui/src/lib.rs @@ -8,8 +8,6 @@ use app::App; pub use app::AppExitInfo; pub use app::ExitReason; use codex_cloud_requirements::cloud_requirements_loader; -use codex_common::oss::ensure_oss_provider_ready; -use codex_common::oss::get_default_model_for_oss_provider; use codex_core::AuthManager; use codex_core::CodexAuth; use codex_core::INTERACTIVE_SESSION_SOURCES; @@ -41,6 +39,8 @@ use codex_protocol::protocol::RolloutItem; use codex_protocol::protocol::RolloutLine; use codex_state::log_db; use codex_utils_absolute_path::AbsolutePathBuf; +use codex_utils_oss::ensure_oss_provider_ready; +use codex_utils_oss::get_default_model_for_oss_provider; use cwd_prompt::CwdPromptAction; use cwd_prompt::CwdSelection; use std::fs::OpenOptions; @@ -156,7 +156,7 @@ pub async fn run_main( // gpt-oss:20b) and ensure it is present locally. Also, force the built‑in let raw_overrides = cli.config_overrides.raw_overrides.clone(); // `oss` model provider. - let overrides_cli = codex_common::CliConfigOverrides { raw_overrides }; + let overrides_cli = codex_utils_cli::CliConfigOverrides { raw_overrides }; let cli_kv_overrides = match overrides_cli.parse_overrides() { // Parse `-c` overrides from the CLI. Ok(v) => v, diff --git a/codex-rs/tui/src/main.rs b/codex-rs/tui/src/main.rs index 50ea95f170f..7f043ef0f97 100644 --- a/codex-rs/tui/src/main.rs +++ b/codex-rs/tui/src/main.rs @@ -1,8 +1,8 @@ use clap::Parser; use codex_arg0::arg0_dispatch_or_else; -use codex_common::CliConfigOverrides; use codex_tui::Cli; use codex_tui::run_main; +use codex_utils_cli::CliConfigOverrides; #[derive(Parser, Debug)] struct TopCli { diff --git a/codex-rs/tui/src/skills_helpers.rs b/codex-rs/tui/src/skills_helpers.rs index 1a8c78bb10a..2aa2919e7c4 100644 --- a/codex-rs/tui/src/skills_helpers.rs +++ b/codex-rs/tui/src/skills_helpers.rs @@ -1,5 +1,5 @@ -use codex_common::fuzzy_match::fuzzy_match; use codex_core::skills::model::SkillMetadata; +use codex_utils_fuzzy_match::fuzzy_match; use crate::text_formatting::truncate_text; diff --git a/codex-rs/tui/src/status/card.rs b/codex-rs/tui/src/status/card.rs index 60f7f937526..f8361d67487 100644 --- a/codex-rs/tui/src/status/card.rs +++ b/codex-rs/tui/src/status/card.rs @@ -5,7 +5,6 @@ use crate::history_cell::with_border_with_inner_width; use crate::version::CODEX_CLI_VERSION; use chrono::DateTime; use chrono::Local; -use codex_common::summarize_sandbox_policy; use codex_core::WireApi; use codex_core::config::Config; use codex_core::protocol::NetworkAccess; @@ -15,6 +14,7 @@ use codex_core::protocol::TokenUsageInfo; use codex_protocol::ThreadId; use codex_protocol::account::PlanType; use codex_protocol::openai_models::ReasoningEffort; +use codex_utils_sandbox_summary::summarize_sandbox_policy; use ratatui::prelude::*; use ratatui::style::Stylize; use std::collections::BTreeSet; diff --git a/codex-rs/utils/approval-presets/BUILD.bazel b/codex-rs/utils/approval-presets/BUILD.bazel new file mode 100644 index 00000000000..5fd49844864 --- /dev/null +++ b/codex-rs/utils/approval-presets/BUILD.bazel @@ -0,0 +1,6 @@ +load("//:defs.bzl", "codex_rust_crate") + +codex_rust_crate( + name = "approval-presets", + crate_name = "codex_utils_approval_presets", +) diff --git a/codex-rs/utils/approval-presets/Cargo.toml b/codex-rs/utils/approval-presets/Cargo.toml new file mode 100644 index 00000000000..1237545cd64 --- /dev/null +++ b/codex-rs/utils/approval-presets/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "codex-utils-approval-presets" +version.workspace = true +edition.workspace = true +license.workspace = true + +[lints] +workspace = true + +[dependencies] +codex-core = { workspace = true } diff --git a/codex-rs/common/src/approval_presets.rs b/codex-rs/utils/approval-presets/src/lib.rs similarity index 100% rename from codex-rs/common/src/approval_presets.rs rename to codex-rs/utils/approval-presets/src/lib.rs diff --git a/codex-rs/utils/cli/BUILD.bazel b/codex-rs/utils/cli/BUILD.bazel new file mode 100644 index 00000000000..df9373b54c4 --- /dev/null +++ b/codex-rs/utils/cli/BUILD.bazel @@ -0,0 +1,6 @@ +load("//:defs.bzl", "codex_rust_crate") + +codex_rust_crate( + name = "cli", + crate_name = "codex_utils_cli", +) diff --git a/codex-rs/utils/cli/Cargo.toml b/codex-rs/utils/cli/Cargo.toml new file mode 100644 index 00000000000..7e9d2c5a1d4 --- /dev/null +++ b/codex-rs/utils/cli/Cargo.toml @@ -0,0 +1,18 @@ +[package] +name = "codex-utils-cli" +version.workspace = true +edition.workspace = true +license.workspace = true + +[lints] +workspace = true + +[dependencies] +clap = { workspace = true, features = ["derive", "wrap_help"] } +codex-core = { workspace = true } +codex-protocol = { workspace = true } +serde = { workspace = true } +toml = { workspace = true } + +[dev-dependencies] +pretty_assertions = { workspace = true } diff --git a/codex-rs/common/src/approval_mode_cli_arg.rs b/codex-rs/utils/cli/src/approval_mode_cli_arg.rs similarity index 95% rename from codex-rs/common/src/approval_mode_cli_arg.rs rename to codex-rs/utils/cli/src/approval_mode_cli_arg.rs index e8c06826877..2ba1e3dc597 100644 --- a/codex-rs/common/src/approval_mode_cli_arg.rs +++ b/codex-rs/utils/cli/src/approval_mode_cli_arg.rs @@ -1,5 +1,4 @@ //! Standard type to use with the `--approval-mode` CLI option. -//! Available when the `cli` feature is enabled for the crate. use clap::ValueEnum; diff --git a/codex-rs/common/src/config_override.rs b/codex-rs/utils/cli/src/config_override.rs similarity index 99% rename from codex-rs/common/src/config_override.rs rename to codex-rs/utils/cli/src/config_override.rs index 9bbec2b6f26..1592563a0bf 100644 --- a/codex-rs/common/src/config_override.rs +++ b/codex-rs/utils/cli/src/config_override.rs @@ -149,7 +149,7 @@ fn parse_toml_value(raw: &str) -> Result { .ok_or_else(|| SerdeError::custom("missing sentinel key")) } -#[cfg(all(test, feature = "cli"))] +#[cfg(test)] mod tests { use super::*; diff --git a/codex-rs/common/src/format_env_display.rs b/codex-rs/utils/cli/src/format_env_display.rs similarity index 100% rename from codex-rs/common/src/format_env_display.rs rename to codex-rs/utils/cli/src/format_env_display.rs diff --git a/codex-rs/utils/cli/src/lib.rs b/codex-rs/utils/cli/src/lib.rs new file mode 100644 index 00000000000..b3ce23b9083 --- /dev/null +++ b/codex-rs/utils/cli/src/lib.rs @@ -0,0 +1,8 @@ +mod approval_mode_cli_arg; +mod config_override; +pub mod format_env_display; +mod sandbox_mode_cli_arg; + +pub use approval_mode_cli_arg::ApprovalModeCliArg; +pub use config_override::CliConfigOverrides; +pub use sandbox_mode_cli_arg::SandboxModeCliArg; diff --git a/codex-rs/common/src/sandbox_mode_cli_arg.rs b/codex-rs/utils/cli/src/sandbox_mode_cli_arg.rs similarity index 100% rename from codex-rs/common/src/sandbox_mode_cli_arg.rs rename to codex-rs/utils/cli/src/sandbox_mode_cli_arg.rs diff --git a/codex-rs/utils/elapsed/BUILD.bazel b/codex-rs/utils/elapsed/BUILD.bazel new file mode 100644 index 00000000000..dcc7b206d20 --- /dev/null +++ b/codex-rs/utils/elapsed/BUILD.bazel @@ -0,0 +1,6 @@ +load("//:defs.bzl", "codex_rust_crate") + +codex_rust_crate( + name = "elapsed", + crate_name = "codex_utils_elapsed", +) diff --git a/codex-rs/utils/elapsed/Cargo.toml b/codex-rs/utils/elapsed/Cargo.toml new file mode 100644 index 00000000000..a29d36995f1 --- /dev/null +++ b/codex-rs/utils/elapsed/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "codex-utils-elapsed" +version.workspace = true +edition.workspace = true +license.workspace = true + +[lints] +workspace = true diff --git a/codex-rs/common/src/elapsed.rs b/codex-rs/utils/elapsed/src/lib.rs similarity index 100% rename from codex-rs/common/src/elapsed.rs rename to codex-rs/utils/elapsed/src/lib.rs diff --git a/codex-rs/utils/fuzzy-match/BUILD.bazel b/codex-rs/utils/fuzzy-match/BUILD.bazel new file mode 100644 index 00000000000..bcafc003552 --- /dev/null +++ b/codex-rs/utils/fuzzy-match/BUILD.bazel @@ -0,0 +1,6 @@ +load("//:defs.bzl", "codex_rust_crate") + +codex_rust_crate( + name = "fuzzy-match", + crate_name = "codex_utils_fuzzy_match", +) diff --git a/codex-rs/utils/fuzzy-match/Cargo.toml b/codex-rs/utils/fuzzy-match/Cargo.toml new file mode 100644 index 00000000000..4788faba15a --- /dev/null +++ b/codex-rs/utils/fuzzy-match/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "codex-utils-fuzzy-match" +version.workspace = true +edition.workspace = true +license.workspace = true + +[lints] +workspace = true diff --git a/codex-rs/common/src/fuzzy_match.rs b/codex-rs/utils/fuzzy-match/src/lib.rs similarity index 100% rename from codex-rs/common/src/fuzzy_match.rs rename to codex-rs/utils/fuzzy-match/src/lib.rs diff --git a/codex-rs/utils/oss/BUILD.bazel b/codex-rs/utils/oss/BUILD.bazel new file mode 100644 index 00000000000..1ac873c9444 --- /dev/null +++ b/codex-rs/utils/oss/BUILD.bazel @@ -0,0 +1,6 @@ +load("//:defs.bzl", "codex_rust_crate") + +codex_rust_crate( + name = "oss", + crate_name = "codex_utils_oss", +) diff --git a/codex-rs/utils/oss/Cargo.toml b/codex-rs/utils/oss/Cargo.toml new file mode 100644 index 00000000000..93623615e6b --- /dev/null +++ b/codex-rs/utils/oss/Cargo.toml @@ -0,0 +1,13 @@ +[package] +name = "codex-utils-oss" +version.workspace = true +edition.workspace = true +license.workspace = true + +[lints] +workspace = true + +[dependencies] +codex-core = { workspace = true } +codex-lmstudio = { workspace = true } +codex-ollama = { workspace = true } diff --git a/codex-rs/common/src/oss.rs b/codex-rs/utils/oss/src/lib.rs similarity index 100% rename from codex-rs/common/src/oss.rs rename to codex-rs/utils/oss/src/lib.rs diff --git a/codex-rs/utils/sandbox-summary/BUILD.bazel b/codex-rs/utils/sandbox-summary/BUILD.bazel new file mode 100644 index 00000000000..fd3e5371b62 --- /dev/null +++ b/codex-rs/utils/sandbox-summary/BUILD.bazel @@ -0,0 +1,6 @@ +load("//:defs.bzl", "codex_rust_crate") + +codex_rust_crate( + name = "sandbox-summary", + crate_name = "codex_utils_sandbox_summary", +) diff --git a/codex-rs/utils/sandbox-summary/Cargo.toml b/codex-rs/utils/sandbox-summary/Cargo.toml new file mode 100644 index 00000000000..6e44b2d2011 --- /dev/null +++ b/codex-rs/utils/sandbox-summary/Cargo.toml @@ -0,0 +1,15 @@ +[package] +name = "codex-utils-sandbox-summary" +version.workspace = true +edition.workspace = true +license.workspace = true + +[lints] +workspace = true + +[dependencies] +codex-core = { workspace = true } + +[dev-dependencies] +codex-utils-absolute-path = { workspace = true } +pretty_assertions = { workspace = true } diff --git a/codex-rs/common/src/config_summary.rs b/codex-rs/utils/sandbox-summary/src/config_summary.rs similarity index 100% rename from codex-rs/common/src/config_summary.rs rename to codex-rs/utils/sandbox-summary/src/config_summary.rs diff --git a/codex-rs/utils/sandbox-summary/src/lib.rs b/codex-rs/utils/sandbox-summary/src/lib.rs new file mode 100644 index 00000000000..0e5e09af62f --- /dev/null +++ b/codex-rs/utils/sandbox-summary/src/lib.rs @@ -0,0 +1,5 @@ +mod config_summary; +mod sandbox_summary; + +pub use config_summary::create_config_summary_entries; +pub use sandbox_summary::summarize_sandbox_policy; diff --git a/codex-rs/common/src/sandbox_summary.rs b/codex-rs/utils/sandbox-summary/src/sandbox_summary.rs similarity index 100% rename from codex-rs/common/src/sandbox_summary.rs rename to codex-rs/utils/sandbox-summary/src/sandbox_summary.rs