From d8f533d51df31afcafbbba52da5a70121d0e3c79 Mon Sep 17 00:00:00 2001 From: findshan <224246733+findshan@users.noreply.github.com> Date: Sat, 27 Jun 2026 20:52:47 +0800 Subject: [PATCH] feat(settings): accept `collapsed` as alias for default tool-collapse mode Issue #3256 proposes naming the default tool-call verbosity `collapsed` (opposite `expanded`). The implementation shipped the canonical name as `compact`, so a user following the issue/docs and setting `tool_collapse=collapsed` was stored verbatim and only worked by falling through to the default match arm. Accept `collapsed`/`collapse` as explicit aliases that normalize to the canonical `compact`, align the settings help text, and document the intent in ToolCollapseMode::from_setting. Backward compatible; adds round-trip coverage to the existing tool_collapse_mode_is_configurable test. Refs #3256 Signed-off-by: findshan <224246733+findshan@users.noreply.github.com> --- crates/tui/src/settings.rs | 16 ++++++++++++++-- crates/tui/src/tui/app.rs | 2 ++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/crates/tui/src/settings.rs b/crates/tui/src/settings.rs index e6f4c5f04..2e0092346 100644 --- a/crates/tui/src/settings.rs +++ b/crates/tui/src/settings.rs @@ -985,7 +985,7 @@ impl Settings { ("calm_mode", "Calmer UI defaults: on/off"), ( "tool_collapse", - "Dense tool-run collapse mode: compact, expanded, calm", + "Dense tool-run collapse mode: collapsed (alias compact), expanded, calm", ), ( "low_motion", @@ -1362,7 +1362,7 @@ fn normalize_transcript_spacing(value: &str) -> &str { fn normalize_tool_collapse_mode(value: &str) -> &str { match value.trim().to_ascii_lowercase().as_str() { - "compact" | "default" | "on" | "true" => "compact", + "compact" | "collapsed" | "collapse" | "default" | "on" | "true" => "compact", "expanded" | "expand" | "off" | "none" | "false" => "expanded", "calm" | "calm_mode" | "calm-mode" | "calm_only" | "calm-only" => "calm", _ => value, @@ -1830,6 +1830,18 @@ mod tests { settings.set("collapse", "off").expect("off alias"); assert_eq!(settings.tool_collapse_mode, "expanded"); + // Issue #3256 proposes `collapsed` as the default verbosity name; + // accept it (and the bare verb) as an alias of the canonical `compact`. + settings + .set("tool_collapse", "collapsed") + .expect("collapsed alias"); + assert_eq!(settings.tool_collapse_mode, "compact"); + settings.set("tool_collapse", "expanded").expect("reset"); + settings + .set("tool_collapse", "collapse") + .expect("collapse alias"); + assert_eq!(settings.tool_collapse_mode, "compact"); + let err = settings .set("tool_collapse", "mystery") .expect_err("invalid collapse mode"); diff --git a/crates/tui/src/tui/app.rs b/crates/tui/src/tui/app.rs index f76142c96..ec2982480 100644 --- a/crates/tui/src/tui/app.rs +++ b/crates/tui/src/tui/app.rs @@ -436,6 +436,8 @@ impl ToolCollapseMode { match value.trim().to_ascii_lowercase().as_str() { "expanded" | "off" | "none" => Self::Expanded, "calm" | "calm-mode" | "calm_only" | "calm-only" => Self::Calm, + // `collapsed`/`collapse` are issue #3256's preferred names for the + // default; treat them like the canonical `compact`. _ => Self::Compact, } }