mirror of
https://github.com/openai/codex.git
synced 2026-04-30 11:21:34 +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`.
44 lines
1.2 KiB
Rust
44 lines
1.2 KiB
Rust
use codex_core::skills::model::SkillMetadata;
|
|
use codex_utils_fuzzy_match::fuzzy_match;
|
|
|
|
use crate::text_formatting::truncate_text;
|
|
|
|
pub(crate) const SKILL_NAME_TRUNCATE_LEN: usize = 21;
|
|
|
|
pub(crate) fn skill_display_name(skill: &SkillMetadata) -> &str {
|
|
skill
|
|
.interface
|
|
.as_ref()
|
|
.and_then(|interface| interface.display_name.as_deref())
|
|
.unwrap_or(&skill.name)
|
|
}
|
|
|
|
pub(crate) fn skill_description(skill: &SkillMetadata) -> &str {
|
|
skill
|
|
.interface
|
|
.as_ref()
|
|
.and_then(|interface| interface.short_description.as_deref())
|
|
.or(skill.short_description.as_deref())
|
|
.unwrap_or(&skill.description)
|
|
}
|
|
|
|
pub(crate) fn truncate_skill_name(name: &str) -> String {
|
|
truncate_text(name, SKILL_NAME_TRUNCATE_LEN)
|
|
}
|
|
|
|
pub(crate) fn match_skill(
|
|
filter: &str,
|
|
display_name: &str,
|
|
skill_name: &str,
|
|
) -> Option<(Option<Vec<usize>>, i32)> {
|
|
if let Some((indices, score)) = fuzzy_match(display_name, filter) {
|
|
return Some((Some(indices), score));
|
|
}
|
|
if display_name != skill_name
|
|
&& let Some((_indices, score)) = fuzzy_match(skill_name, filter)
|
|
{
|
|
return Some((None, score));
|
|
}
|
|
None
|
|
}
|