From f119550838db165ad165ae21b9a67a0634528acc Mon Sep 17 00:00:00 2001 From: Marshall Bowers Date: Fri, 21 Mar 2025 11:11:45 -0400 Subject: [PATCH] assistant2: Define built-in agent profiles in the default settings (#27251) This PR moves the definitions of the built-in agent profiles into the default `settings.json`. It also changes the behavior of how this setting is treated when merging settings such that the set of profiles will be merged. This is so users don't clobber the built-in profiles when adding profiles of their own. Release Notes: - N/A --- assets/settings/default.json | 31 +++++++++++++++ crates/assistant2/src/tool_selector.rs | 15 +------ .../assistant_settings/src/agent_profile.rs | 39 ------------------- .../src/assistant_settings.rs | 33 +++++++--------- 4 files changed, 47 insertions(+), 71 deletions(-) diff --git a/assets/settings/default.json b/assets/settings/default.json index bb587b1bcb7f2c7a0193a627cbc5785d719d3323..ae1f163c52fc4278445af3c019df43f674cc5174 100644 --- a/assets/settings/default.json +++ b/assets/settings/default.json @@ -614,6 +614,37 @@ "provider": "zed.dev", // The model to use. "model": "claude-3-5-sonnet-latest" + }, + "profiles": { + "read-only": { + "name": "Read-only", + "tools": { + "diagnostics": true, + "fetch": true, + "list-directory": true, + "now": true, + "path-search": true, + "read-file": true, + "regex-search": true, + "thinking": true + } + }, + "code-writer": { + "name": "Code Writer", + "tools": { + "bash": true, + "delete-path": true, + "diagnostics": true, + "edit-files": true, + "fetch": true, + "list-directory": true, + "now": true, + "path-search": true, + "read-file": true, + "regex-search": true, + "thinking": true + } + } } }, // The settings for slash commands. diff --git a/crates/assistant2/src/tool_selector.rs b/crates/assistant2/src/tool_selector.rs index 3ca60fe8cb6297f3097ef5fdc9a415562ce810f0..efb141b9336b7a7d14a93b00675726276a942f0e 100644 --- a/crates/assistant2/src/tool_selector.rs +++ b/crates/assistant2/src/tool_selector.rs @@ -32,21 +32,8 @@ impl ToolSelector { fn refresh_profiles(&mut self, cx: &mut Context) { let settings = AssistantSettings::get_global(cx); - let mut profiles = BTreeMap::from_iter(settings.profiles.clone()); - const READ_ONLY_ID: &str = "read-only"; - let read_only = AgentProfile::read_only(); - if !profiles.contains_key(READ_ONLY_ID) { - profiles.insert(READ_ONLY_ID.into(), read_only); - } - - const CODE_WRITER_ID: &str = "code-writer"; - let code_writer = AgentProfile::code_writer(); - if !profiles.contains_key(CODE_WRITER_ID) { - profiles.insert(CODE_WRITER_ID.into(), code_writer); - } - - self.profiles = profiles; + self.profiles = BTreeMap::from_iter(settings.profiles.clone()); } fn build_context_menu( diff --git a/crates/assistant_settings/src/agent_profile.rs b/crates/assistant_settings/src/agent_profile.rs index e707704c7d1449a8d4bc01084d7dcc68c5d1fafd..a6887498e14442a336321311610205cabbc1551e 100644 --- a/crates/assistant_settings/src/agent_profile.rs +++ b/crates/assistant_settings/src/agent_profile.rs @@ -18,42 +18,3 @@ pub struct ContextServerPreset { #[allow(dead_code)] pub tools: HashMap, bool>, } - -impl AgentProfile { - pub fn read_only() -> Self { - Self { - name: "Read-only".into(), - tools: HashMap::from_iter([ - ("diagnostics".into(), true), - ("fetch".into(), true), - ("list-directory".into(), true), - ("now".into(), true), - ("path-search".into(), true), - ("read-file".into(), true), - ("regex-search".into(), true), - ("thinking".into(), true), - ]), - context_servers: HashMap::default(), - } - } - - pub fn code_writer() -> Self { - Self { - name: "Code Writer".into(), - tools: HashMap::from_iter([ - ("bash".into(), true), - ("delete-path".into(), true), - ("diagnostics".into(), true), - ("edit-files".into(), true), - ("fetch".into(), true), - ("list-directory".into(), true), - ("now".into(), true), - ("path-search".into(), true), - ("read-file".into(), true), - ("regex-search".into(), true), - ("thinking".into(), true), - ]), - context_servers: HashMap::default(), - } - } -} diff --git a/crates/assistant_settings/src/assistant_settings.rs b/crates/assistant_settings/src/assistant_settings.rs index d59e4cbdf230f1af9c585d8a345e9ff4ab5d8a73..30972e32ea80687c44457d77f6f351f001669109 100644 --- a/crates/assistant_settings/src/assistant_settings.rs +++ b/crates/assistant_settings/src/assistant_settings.rs @@ -499,24 +499,21 @@ impl Settings for AssistantSettings { &mut settings.enable_experimental_live_diffs, value.enable_experimental_live_diffs, ); - merge( - &mut settings.profiles, - value.profiles.map(|profiles| { - profiles - .into_iter() - .map(|(id, profile)| { - ( - id, - AgentProfile { - name: profile.name.into(), - tools: profile.tools, - context_servers: HashMap::default(), - }, - ) - }) - .collect() - }), - ); + + if let Some(profiles) = value.profiles { + settings + .profiles + .extend(profiles.into_iter().map(|(id, profile)| { + ( + id, + AgentProfile { + name: profile.name.into(), + tools: profile.tools, + context_servers: HashMap::default(), + }, + ) + })); + } } Ok(settings)