mirror of
https://github.com/openai/codex.git
synced 2026-10-28 18:58:46 +00:00
## What changed - Use the managed configuration loader in CLI, exec, TUI, and app-server configuration flows so `requirements.toml` can select a config server. - Sign in to the config server when needed during interactive TUI startup and CLI login, reload configuration after CLI sign-in, and clear config-server credentials on CLI logout. - Preserve the app-server's config-server settings and refresh worker across OpenAI login and logout. - Require config-server settings to be applied when loading CLI and doctor configuration. ## Testing Add app-server integration tests using a local HTTPS config server to verify managed provider and instruction settings at startup, preservation across API-key login and logout, and cache reuse after restart and thread resume. GitOrigin-RevId: 27ee81f7943d2290a5c3fcc0ac556579ec63f8b4
192 lines
6.0 KiB
Rust
192 lines
6.0 KiB
Rust
pub mod cloud_config;
|
|
pub(crate) mod debug_sandbox;
|
|
mod exit_status;
|
|
pub(crate) mod login;
|
|
|
|
use clap::Args;
|
|
use clap::Parser;
|
|
use codex_utils_absolute_path::AbsolutePathBuf;
|
|
use codex_utils_cli::CliConfigOverrides;
|
|
use codex_utils_cli::ProfileV2Name;
|
|
use std::path::PathBuf;
|
|
|
|
pub use debug_sandbox::run_command_under_landlock;
|
|
pub use debug_sandbox::run_command_under_seatbelt;
|
|
pub use debug_sandbox::run_command_under_windows_sandbox;
|
|
pub use login::read_access_token_from_stdin;
|
|
pub use login::read_api_key_from_stdin;
|
|
pub use login::run_login_status;
|
|
pub use login::run_login_with_access_token;
|
|
pub use login::run_login_with_api_key;
|
|
pub use login::run_login_with_browser;
|
|
pub use login::run_login_with_device_code;
|
|
pub use login::run_login_with_device_code_fallback_to_browser;
|
|
pub use login::run_logout;
|
|
|
|
#[derive(Debug, Default, Args)]
|
|
pub struct SandboxStateArgs {
|
|
/// Opaque JSON value from `codex/sandbox-state` to apply directly.
|
|
#[arg(
|
|
long = "sandbox-state-json",
|
|
value_name = "JSON",
|
|
conflicts_with_all = ["permissions_profile", "cwd", "include_managed_config"]
|
|
)]
|
|
pub sandbox_state_json: Option<String>,
|
|
|
|
/// Add a readable root to the supplied sandbox state. Repeat for multiple roots.
|
|
#[arg(
|
|
long,
|
|
requires = "sandbox_state_json",
|
|
value_parser = parse_absolute_path
|
|
)]
|
|
pub sandbox_state_readable_root: Vec<AbsolutePathBuf>,
|
|
|
|
/// Disable direct network access in the supplied sandbox state.
|
|
#[arg(long, requires = "sandbox_state_json", default_value_t = false)]
|
|
pub sandbox_state_disable_network: bool,
|
|
}
|
|
|
|
// These command structs share common sandbox options, but remain separate
|
|
// because each host backend has a slightly different option surface.
|
|
#[derive(Debug, Parser)]
|
|
pub struct SeatbeltCommand {
|
|
#[command(flatten)]
|
|
pub sandbox_state: SandboxStateArgs,
|
|
|
|
/// Named permissions profile to apply from the active configuration stack.
|
|
#[arg(
|
|
long = "permission-profile",
|
|
alias = "permissions-profile",
|
|
short = 'P',
|
|
value_name = "NAME"
|
|
)]
|
|
pub permissions_profile: Option<String>,
|
|
|
|
/// Layer $CODEX_HOME/<name>.config.toml on top of the base user config.
|
|
#[arg(long = "profile", short = 'p')]
|
|
pub config_profile: Option<ProfileV2Name>,
|
|
|
|
/// Working directory used for profile resolution and command execution.
|
|
#[arg(
|
|
short = 'C',
|
|
long = "cd",
|
|
value_name = "DIR",
|
|
requires = "permissions_profile"
|
|
)]
|
|
pub cwd: Option<PathBuf>,
|
|
|
|
/// Include managed requirements while resolving an explicit permissions profile.
|
|
#[arg(
|
|
long = "include-managed-config",
|
|
default_value_t = false,
|
|
requires = "permissions_profile"
|
|
)]
|
|
pub include_managed_config: bool,
|
|
|
|
/// Allow the sandboxed command to bind/connect AF_UNIX sockets rooted at this path. Relative paths are resolved against the current directory. Repeat to allow multiple paths.
|
|
#[arg(long = "allow-unix-socket", value_parser = parse_absolute_path)]
|
|
pub allow_unix_sockets: Vec<AbsolutePathBuf>,
|
|
|
|
/// While the command runs, capture macOS sandbox denials via `log stream` and print them after exit
|
|
#[arg(long = "log-denials", default_value_t = false)]
|
|
pub log_denials: bool,
|
|
|
|
#[clap(skip)]
|
|
pub config_overrides: CliConfigOverrides,
|
|
|
|
/// Full command args to run under seatbelt.
|
|
#[arg(trailing_var_arg = true)]
|
|
pub command: Vec<String>,
|
|
}
|
|
|
|
fn parse_absolute_path(raw: &str) -> Result<AbsolutePathBuf, String> {
|
|
AbsolutePathBuf::relative_to_current_dir(raw)
|
|
.map_err(|err| format!("invalid path {raw}: {err}"))
|
|
}
|
|
|
|
#[derive(Debug, Parser)]
|
|
pub struct LandlockCommand {
|
|
#[command(flatten)]
|
|
pub sandbox_state: SandboxStateArgs,
|
|
|
|
/// Named permissions profile to apply from the active configuration stack.
|
|
#[arg(
|
|
long = "permission-profile",
|
|
alias = "permissions-profile",
|
|
short = 'P',
|
|
value_name = "NAME"
|
|
)]
|
|
pub permissions_profile: Option<String>,
|
|
|
|
/// Layer $CODEX_HOME/<name>.config.toml on top of the base user config.
|
|
#[arg(long = "profile", short = 'p')]
|
|
pub config_profile: Option<ProfileV2Name>,
|
|
|
|
/// Working directory used for profile resolution and command execution.
|
|
#[arg(
|
|
short = 'C',
|
|
long = "cd",
|
|
value_name = "DIR",
|
|
requires = "permissions_profile"
|
|
)]
|
|
pub cwd: Option<PathBuf>,
|
|
|
|
/// Include managed requirements while resolving an explicit permissions profile.
|
|
#[arg(
|
|
long = "include-managed-config",
|
|
default_value_t = false,
|
|
requires = "permissions_profile"
|
|
)]
|
|
pub include_managed_config: bool,
|
|
|
|
#[clap(skip)]
|
|
pub config_overrides: CliConfigOverrides,
|
|
|
|
/// Full command args to run under the Linux sandbox.
|
|
#[arg(trailing_var_arg = true)]
|
|
pub command: Vec<String>,
|
|
}
|
|
|
|
#[derive(Debug, Parser)]
|
|
pub struct WindowsCommand {
|
|
#[command(flatten)]
|
|
pub sandbox_state: SandboxStateArgs,
|
|
|
|
/// Named permissions profile to apply from the active configuration stack.
|
|
#[arg(
|
|
long = "permission-profile",
|
|
alias = "permissions-profile",
|
|
short = 'P',
|
|
value_name = "NAME"
|
|
)]
|
|
pub permissions_profile: Option<String>,
|
|
|
|
/// Layer $CODEX_HOME/<name>.config.toml on top of the base user config.
|
|
#[arg(long = "profile", short = 'p')]
|
|
pub config_profile: Option<ProfileV2Name>,
|
|
|
|
/// Working directory used for profile resolution and command execution.
|
|
#[arg(
|
|
short = 'C',
|
|
long = "cd",
|
|
value_name = "DIR",
|
|
requires = "permissions_profile"
|
|
)]
|
|
pub cwd: Option<PathBuf>,
|
|
|
|
/// Include managed requirements while resolving an explicit permissions profile.
|
|
#[arg(
|
|
long = "include-managed-config",
|
|
default_value_t = false,
|
|
requires = "permissions_profile"
|
|
)]
|
|
pub include_managed_config: bool,
|
|
|
|
#[clap(skip)]
|
|
pub config_overrides: CliConfigOverrides,
|
|
|
|
/// Full command args to run under Windows restricted token sandbox.
|
|
#[arg(trailing_var_arg = true)]
|
|
pub command: Vec<String>,
|
|
}
|