mirror of
https://github.com/openai/codex.git
synced 2026-05-04 05:11:37 +03:00
We are removing feature-gated shared crates from the `codex-rs` workspace. `codex-common` grouped several unrelated utilities behind `[features]`, which made dependency boundaries harder to reason about and worked against the ongoing effort to eliminate feature flags from workspace crates. Splitting these utilities into dedicated crates under `utils/` aligns this area with existing workspace structure and keeps each dependency explicit at the crate boundary. ## What changed - Removed `codex-rs/common` (`codex-common`) from workspace members and workspace dependencies. - Added six new utility crates under `codex-rs/utils/`: - `codex-utils-cli` - `codex-utils-elapsed` - `codex-utils-sandbox-summary` - `codex-utils-approval-presets` - `codex-utils-oss` - `codex-utils-fuzzy-match` - Migrated the corresponding modules out of `codex-common` into these crates (with tests), and added matching `BUILD.bazel` targets. - Updated direct consumers to use the new crates instead of `codex-common`: - `codex-rs/cli` - `codex-rs/tui` - `codex-rs/exec` - `codex-rs/app-server` - `codex-rs/mcp-server` - `codex-rs/chatgpt` - `codex-rs/cloud-tasks` - Updated workspace lockfile entries to reflect the new dependency graph and removal of `codex-common`.
66 lines
2.2 KiB
Rust
66 lines
2.2 KiB
Rust
//! Shared helpers for filtering and matching built-in slash commands.
|
|
//!
|
|
//! 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_utils_fuzzy_match::fuzzy_match;
|
|
|
|
use crate::slash_command::SlashCommand;
|
|
use crate::slash_command::built_in_slash_commands;
|
|
|
|
/// Return the built-ins that should be visible/usable for the current input.
|
|
pub(crate) fn builtins_for_input(
|
|
collaboration_modes_enabled: bool,
|
|
connectors_enabled: bool,
|
|
personality_command_enabled: bool,
|
|
allow_elevate_sandbox: bool,
|
|
) -> Vec<(&'static str, SlashCommand)> {
|
|
built_in_slash_commands()
|
|
.into_iter()
|
|
.filter(|(_, cmd)| allow_elevate_sandbox || *cmd != SlashCommand::ElevateSandbox)
|
|
.filter(|(_, cmd)| {
|
|
collaboration_modes_enabled
|
|
|| !matches!(*cmd, SlashCommand::Collab | SlashCommand::Plan)
|
|
})
|
|
.filter(|(_, cmd)| connectors_enabled || *cmd != SlashCommand::Apps)
|
|
.filter(|(_, cmd)| personality_command_enabled || *cmd != SlashCommand::Personality)
|
|
.collect()
|
|
}
|
|
|
|
/// Find a single built-in command by exact name, after applying the gating rules.
|
|
pub(crate) fn find_builtin_command(
|
|
name: &str,
|
|
collaboration_modes_enabled: bool,
|
|
connectors_enabled: bool,
|
|
personality_command_enabled: bool,
|
|
allow_elevate_sandbox: bool,
|
|
) -> Option<SlashCommand> {
|
|
builtins_for_input(
|
|
collaboration_modes_enabled,
|
|
connectors_enabled,
|
|
personality_command_enabled,
|
|
allow_elevate_sandbox,
|
|
)
|
|
.into_iter()
|
|
.find(|(command_name, _)| *command_name == name)
|
|
.map(|(_, cmd)| cmd)
|
|
}
|
|
|
|
/// Whether any visible built-in fuzzily matches the provided prefix.
|
|
pub(crate) fn has_builtin_prefix(
|
|
name: &str,
|
|
collaboration_modes_enabled: bool,
|
|
connectors_enabled: bool,
|
|
personality_command_enabled: bool,
|
|
allow_elevate_sandbox: bool,
|
|
) -> bool {
|
|
builtins_for_input(
|
|
collaboration_modes_enabled,
|
|
connectors_enabled,
|
|
personality_command_enabled,
|
|
allow_elevate_sandbox,
|
|
)
|
|
.into_iter()
|
|
.any(|(command_name, _)| fuzzy_match(command_name, name).is_some())
|
|
}
|