mirror of
https://github.com/openai/codex.git
synced 2026-04-24 14:45:27 +00:00
feat: add name to beta features (#8266)
Add a name to Beta features <img width="906" height="153" alt="Screenshot 2025-12-18 at 16 42 49" src="https://github.com/user-attachments/assets/d56f3519-0613-4d9a-ad4d-38b1a7eb125a" />
This commit is contained in:
@@ -19,6 +19,7 @@ pub(crate) use legacy::LegacyFeatureToggles;
|
||||
pub enum Stage {
|
||||
Experimental,
|
||||
Beta {
|
||||
name: &'static str,
|
||||
menu_description: &'static str,
|
||||
announcement: &'static str,
|
||||
},
|
||||
@@ -28,6 +29,13 @@ pub enum Stage {
|
||||
}
|
||||
|
||||
impl Stage {
|
||||
pub fn beta_menu_name(self) -> Option<&'static str> {
|
||||
match self {
|
||||
Stage::Beta { name, .. } => Some(name),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn beta_menu_description(self) -> Option<&'static str> {
|
||||
match self {
|
||||
Stage::Beta {
|
||||
@@ -324,6 +332,7 @@ pub const FEATURES: &[FeatureSpec] = &[
|
||||
id: Feature::UnifiedExec,
|
||||
key: "unified_exec",
|
||||
stage: Stage::Beta {
|
||||
name: "Background terminal",
|
||||
menu_description: "Run long-running terminal commands in the background.",
|
||||
announcement: "NEW! Try Background terminals for long running processes. Enable in /experimental!",
|
||||
},
|
||||
@@ -333,6 +342,7 @@ pub const FEATURES: &[FeatureSpec] = &[
|
||||
id: Feature::ShellSnapshot,
|
||||
key: "shell_snapshot",
|
||||
stage: Stage::Beta {
|
||||
name: "Shell snapshot",
|
||||
menu_description: "Snapshot your shell environment to avoid re-running login scripts for every command.",
|
||||
announcement: "NEW! Try shell snapshotting to make your Codex faster. Enable in /experimental!",
|
||||
},
|
||||
|
||||
@@ -2730,10 +2730,11 @@ impl ChatWidget {
|
||||
let features: Vec<BetaFeatureItem> = FEATURES
|
||||
.iter()
|
||||
.filter_map(|spec| {
|
||||
let name = spec.stage.beta_menu_name()?;
|
||||
let description = spec.stage.beta_menu_description()?;
|
||||
Some(BetaFeatureItem {
|
||||
feature: spec.id,
|
||||
name: feature_label_from_key(spec.key),
|
||||
name: name.to_string(),
|
||||
description: description.to_string(),
|
||||
enabled: self.config.features.enabled(spec.id),
|
||||
})
|
||||
@@ -3427,23 +3428,6 @@ impl ChatWidget {
|
||||
}
|
||||
}
|
||||
|
||||
fn feature_label_from_key(key: &str) -> String {
|
||||
let mut out = String::with_capacity(key.len());
|
||||
let mut capitalize = true;
|
||||
for ch in key.chars() {
|
||||
if ch == '_' || ch == '-' {
|
||||
out.push(' ');
|
||||
capitalize = true;
|
||||
} else if capitalize {
|
||||
out.push(ch.to_ascii_uppercase());
|
||||
capitalize = false;
|
||||
} else {
|
||||
out.push(ch);
|
||||
}
|
||||
}
|
||||
out
|
||||
}
|
||||
|
||||
impl Drop for ChatWidget {
|
||||
fn drop(&mut self) {
|
||||
self.stop_rate_limit_poller();
|
||||
|
||||
Reference in New Issue
Block a user