chore: rename codex-command to codex-shell-command (#11378)

This addresses some post-merge feedback on
https://github.com/openai/codex/pull/11361:

- crate rename
- reuse `detect_shell_type()` utility
This commit is contained in:
Michael Bolin 2026-02-10 17:03:46 -08:00 committed by GitHub
parent 87bbfc50a1
commit d44f4205fb
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
19 changed files with 58 additions and 53 deletions

42
codex-rs/Cargo.lock generated
View file

@ -1623,26 +1623,6 @@ dependencies = [
"thiserror 2.0.18",
]
[[package]]
name = "codex-command"
version = "0.0.0"
dependencies = [
"anyhow",
"base64 0.22.1",
"codex-protocol",
"codex-utils-absolute-path",
"once_cell",
"pretty_assertions",
"regex",
"serde",
"serde_json",
"shlex",
"tree-sitter",
"tree-sitter-bash",
"url",
"which",
]
[[package]]
name = "codex-common"
version = "0.0.0"
@ -1680,7 +1660,6 @@ dependencies = [
"codex-arg0",
"codex-async-utils",
"codex-client",
"codex-command",
"codex-core",
"codex-execpolicy",
"codex-file-search",
@ -1691,6 +1670,7 @@ dependencies = [
"codex-otel",
"codex-protocol",
"codex-rmcp-client",
"codex-shell-command",
"codex-state",
"codex-utils-absolute-path",
"codex-utils-cargo-bin",
@ -2209,6 +2189,26 @@ dependencies = [
"tracing",
]
[[package]]
name = "codex-shell-command"
version = "0.0.0"
dependencies = [
"anyhow",
"base64 0.22.1",
"codex-protocol",
"codex-utils-absolute-path",
"once_cell",
"pretty_assertions",
"regex",
"serde",
"serde_json",
"shlex",
"tree-sitter",
"tree-sitter-bash",
"url",
"which",
]
[[package]]
name = "codex-state"
version = "0.0.0"

View file

@ -16,7 +16,7 @@ members = [
"cloud-tasks-client",
"cli",
"common",
"command",
"shell-command",
"core",
"hooks",
"secrets",
@ -83,7 +83,7 @@ codex-chatgpt = { path = "chatgpt" }
codex-cli = { path = "cli"}
codex-client = { path = "codex-client" }
codex-common = { path = "common" }
codex-command = { path = "command" }
codex-shell-command = { path = "shell-command" }
codex-core = { path = "core" }
codex-hooks = { path = "hooks" }
codex-secrets = { path = "secrets" }

View file

@ -33,7 +33,7 @@ codex-app-server-protocol = { workspace = true }
codex-apply-patch = { workspace = true }
codex-async-utils = { workspace = true }
codex-client = { workspace = true }
codex-command = { workspace = true }
codex-shell-command = { workspace = true }
codex-execpolicy = { workspace = true }
codex-file-search = { workspace = true }
codex-git = { workspace = true }

View file

@ -56,6 +56,7 @@ mod proposed_plan_parser;
mod sandbox_tags;
pub mod sandboxing;
mod session_prefix;
mod shell_detect;
mod stream_events_utils;
mod tagged_block_parser;
mod text_encoding;
@ -129,11 +130,11 @@ mod state;
mod tasks;
mod user_shell_command;
pub mod util;
pub use codex_command::bash;
pub use codex_command::is_dangerous_command;
pub use codex_command::is_safe_command;
pub use codex_command::parse_command;
pub use codex_command::powershell;
pub use codex_shell_command::bash;
pub use codex_shell_command::is_dangerous_command;
pub use codex_shell_command::is_safe_command;
pub use codex_shell_command::parse_command;
pub use codex_shell_command::powershell;
pub use apply_patch::CODEX_APPLY_PATCH_ARG1;
pub use client::X_CODEX_TURN_METADATA_HEADER;

View file

@ -1,3 +1,4 @@
use crate::shell_detect::detect_shell_type;
use crate::shell_snapshot::ShellSnapshot;
use serde::Deserialize;
use serde::Serialize;
@ -244,27 +245,6 @@ pub fn get_shell(shell_type: ShellType, path: Option<&PathBuf>) -> Option<Shell>
}
}
pub fn detect_shell_type(shell_path: &PathBuf) -> Option<ShellType> {
match shell_path.as_os_str().to_str() {
Some("zsh") => Some(ShellType::Zsh),
Some("sh") => Some(ShellType::Sh),
Some("cmd") => Some(ShellType::Cmd),
Some("bash") => Some(ShellType::Bash),
Some("pwsh") => Some(ShellType::PowerShell),
Some("powershell") => Some(ShellType::PowerShell),
_ => {
let shell_name = shell_path.file_stem();
if let Some(shell_name) = shell_name
&& shell_name != shell_path
{
detect_shell_type(&PathBuf::from(shell_name))
} else {
None
}
}
}
}
pub fn default_user_shell() -> Shell {
default_user_shell_from_path(get_user_shell_path())
}

View file

@ -0,0 +1,24 @@
use crate::shell::ShellType;
use std::path::Path;
use std::path::PathBuf;
pub(crate) fn detect_shell_type(shell_path: &PathBuf) -> Option<ShellType> {
match shell_path.as_os_str().to_str() {
Some("zsh") => Some(ShellType::Zsh),
Some("sh") => Some(ShellType::Sh),
Some("cmd") => Some(ShellType::Cmd),
Some("bash") => Some(ShellType::Bash),
Some("pwsh") => Some(ShellType::PowerShell),
Some("powershell") => Some(ShellType::PowerShell),
_ => {
let shell_name = shell_path.file_stem();
if let Some(shell_name) = shell_name {
let shell_name_path = Path::new(shell_name);
if shell_name_path != Path::new(shell_path) {
return detect_shell_type(&shell_name_path.to_path_buf());
}
}
None
}
}
}

View file

@ -1,7 +1,7 @@
load("//:defs.bzl", "codex_rust_crate")
codex_rust_crate(
name = "command",
crate_name = "codex_command",
name = "shell-command",
crate_name = "codex_shell_command",
compile_data = ["src/command_safety/powershell_parser.ps1"],
)

View file

@ -1,5 +1,5 @@
[package]
name = "codex-command"
name = "codex-shell-command"
version.workspace = true
edition.workspace = true
license.workspace = true