diff --git a/crates/assistant2/src/tool_selector.rs b/crates/assistant2/src/tool_selector.rs index e93b727cd267be35a7315c3b3e630d45bcf3e4a0..ffe4f533cfb2a17d51bda7384943d6e045873c63 100644 --- a/crates/assistant2/src/tool_selector.rs +++ b/crates/assistant2/src/tool_selector.rs @@ -50,7 +50,8 @@ impl ToolSelector { menu = menu.toggleable_entry(profile.name.clone(), false, icon_position, None, { let tools = tool_set.clone(); move |_window, cx| { - tools.disable_source(ToolSource::Native, cx); + tools.disable_all_tools(cx); + tools.enable( ToolSource::Native, &profile @@ -59,6 +60,19 @@ impl ToolSelector { .filter_map(|(tool, enabled)| enabled.then(|| tool.clone())) .collect::>(), ); + + for (context_server_id, preset) in &profile.context_servers { + tools.enable( + ToolSource::ContextServer { + id: context_server_id.clone().into(), + }, + &preset + .tools + .iter() + .filter_map(|(tool, enabled)| enabled.then(|| tool.clone())) + .collect::>(), + ) + } } }); } diff --git a/crates/assistant_settings/src/agent_profile.rs b/crates/assistant_settings/src/agent_profile.rs index f2085689163a764ec8730d39cd08b7745516800e..2b7c91cd9f668eeb2a1c53cfce913fc77dd82081 100644 --- a/crates/assistant_settings/src/agent_profile.rs +++ b/crates/assistant_settings/src/agent_profile.rs @@ -9,12 +9,10 @@ pub struct AgentProfile { /// The name of the profile. pub name: SharedString, pub tools: IndexMap, bool>, - #[allow(dead_code)] pub context_servers: IndexMap, ContextServerPreset>, } #[derive(Debug, Clone)] pub struct ContextServerPreset { - #[allow(dead_code)] pub tools: IndexMap, bool>, } diff --git a/crates/assistant_settings/src/assistant_settings.rs b/crates/assistant_settings/src/assistant_settings.rs index 1e37ef91c0cddc2335e8cdf2db55134be2f3112d..552bea6bfc9bdf8823d2e6238d3cff33d3f1cfb8 100644 --- a/crates/assistant_settings/src/assistant_settings.rs +++ b/crates/assistant_settings/src/assistant_settings.rs @@ -412,6 +412,13 @@ impl Default for LanguageModelSelection { pub struct AgentProfileContent { pub name: Arc, pub tools: IndexMap, bool>, + #[serde(default)] + pub context_servers: IndexMap, ContextServerPresetContent>, +} + +#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, JsonSchema)] +pub struct ContextServerPresetContent { + pub tools: IndexMap, bool>, } #[derive(Clone, Serialize, Deserialize, JsonSchema, Debug)] @@ -522,7 +529,18 @@ impl Settings for AssistantSettings { AgentProfile { name: profile.name.into(), tools: profile.tools, - context_servers: IndexMap::default(), + context_servers: profile + .context_servers + .into_iter() + .map(|(context_server_id, preset)| { + ( + context_server_id, + ContextServerPreset { + tools: preset.tools.clone(), + }, + ) + }) + .collect(), }, ) }));