diff options
| author | akbash <akbash@herdr.dev> | 2026-08-05 02:18:56 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-08-05 02:18:56 +0300 |
| commit | 1f1e434268ad6e8102fdac6d5996e3f190138a28 (patch) | |
| tree | 8ea2e75f819464dc71c8a44b909be2fbbafdee21 | |
| parent | d57cefb879e685b4876a84fa20cbfd0702ce4140 (diff) | |
fix(config): accept retired agent panel scope (#2295)
refs #2292
Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com>
Co-authored-by: Can Celik <ogulcancelik@gmail.com>
| -rw-r--r-- | docs/next/CHANGELOG.md | 1 | ||||
| -rw-r--r-- | src/config/io.rs | 37 | ||||
| -rw-r--r-- | src/config/model.rs | 11 |
3 files changed, 49 insertions, 0 deletions
diff --git a/docs/next/CHANGELOG.md b/docs/next/CHANGELOG.md index 9d8a1bd4..45216433 100644 --- a/docs/next/CHANGELOG.md +++ b/docs/next/CHANGELOG.md @@ -7,6 +7,7 @@ - The plugin marketplace now discovers valid manifests at repository roots and subdirectories, groups multiple plugins under each repository, and publishes their versions and exact default-branch commits. ### Fixed +- Configs containing the retired Herdr-written `ui.agent_panel_scope` setting no longer report it as an unknown key after upgrades. (#2292) - Claude Code confirmation prompts using `Enter to confirm ยท Esc to cancel` now report `blocked` instead of `idle`. (#2268) - Sidebar agent lists keep scrolling when differently sized clients are attached to the same session. (#2255, thanks @aiworkflowpro) - `pane send-keys` and `agent send-keys` now preserve Shift when sending `shift+tab`, allowing agent permission modes to be cycled programmatically. (#1561, thanks @keinstn and @tomohisa) diff --git a/src/config/io.rs b/src/config/io.rs index e19f6944..b6a70427 100644 --- a/src/config/io.rs +++ b/src/config/io.rs @@ -954,6 +954,25 @@ claude = [["terminal_title"]] } #[test] + fn load_live_config_accepts_legacy_agent_panel_scope_without_warning() { + let loaded = load_live_config_from_str( + r#" +[ui] +agent_panel_scope = "current" +agent_panel_sort = "priority" +"#, + ) + .unwrap(); + + assert!(loaded.diagnostics.is_empty()); + assert!(loaded.invalid_sections.is_empty()); + assert_eq!( + loaded.config.ui.agent_panel_sort, + super::super::AgentPanelSortConfig::Priority + ); + } + + #[test] fn load_live_config_discards_ignored_keys_from_an_invalid_section() { let loaded = load_live_config_from_str( r#" @@ -971,6 +990,24 @@ mouse_captur = true } #[test] + fn startup_config_accepts_legacy_agent_panel_scope_without_warning() { + let _guard = crate::config::test_config_env_lock().lock().unwrap(); + let path = std::env::temp_dir().join(format!( + "herdr-config-legacy-agent-panel-scope-{}.toml", + std::process::id() + )); + std::fs::write(&path, "[ui]\nagent_panel_scope = \"all\"\n").unwrap(); + std::env::set_var(CONFIG_PATH_ENV_VAR, &path); + + let loaded = Config::load(); + + std::env::remove_var(CONFIG_PATH_ENV_VAR); + let _ = std::fs::remove_file(path); + + assert!(loaded.diagnostics.is_empty(), "{:?}", loaded.diagnostics); + } + + #[test] fn startup_config_load_warns_about_unknown_top_level_sections() { let _guard = crate::config::test_config_env_lock().lock().unwrap(); let path = std::env::temp_dir().join(format!( diff --git a/src/config/model.rs b/src/config/model.rs index 97b8c7fa..5cbafaec 100644 --- a/src/config/model.rs +++ b/src/config/model.rs @@ -106,6 +106,13 @@ impl AgentPanelSortConfig { } } +#[derive(Debug, Clone, Copy, PartialEq, Eq, Deserialize)] +#[serde(rename_all = "lowercase")] +enum LegacyAgentPanelScopeConfig { + Current, + All, +} + #[derive(Debug, Clone, Copy, PartialEq, Eq, Deserialize, Serialize, Default)] #[serde(rename_all = "lowercase")] pub enum StatusIndicatorStyle { @@ -843,6 +850,9 @@ pub struct UiConfig { pub tab_bar_position: TabBarPositionConfig, /// Agent sidebar ordering. Saved values are "spaces" or "priority". Default: "spaces". pub agent_panel_sort: AgentPanelSortConfig, + /// Retired setting that Herdr wrote before the workspace filter was removed. + #[serde(rename = "agent_panel_scope")] + _legacy_agent_panel_scope: Option<LegacyAgentPanelScopeConfig>, /// Agent status indicator style. Saved values are "dots" or "symbols". Default: "dots". pub status_indicators: StatusIndicatorStyle, /// Expanded sidebar row composition. @@ -1048,6 +1058,7 @@ impl Default for UiConfig { hide_tab_bar_when_single_tab: false, tab_bar_position: TabBarPositionConfig::Top, agent_panel_sort: AgentPanelSortConfig::Spaces, + _legacy_agent_panel_scope: None, status_indicators: StatusIndicatorStyle::Dots, sidebar: SidebarConfig::default(), accent: "cyan".into(), |
