assistant2: Allow customizing tools for default profiles (#27594)

This PR adds support for customizing the tools for the default profiles.

Release Notes:

- N/A
This commit is contained in:
Marshall Bowers 2025-03-27 11:13:00 -04:00 committed by GitHub
parent 1c7cf1a5c1
commit 2dee03ebca
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -1,7 +1,8 @@
use std::sync::Arc; use std::sync::Arc;
use assistant_settings::{ use assistant_settings::{
AgentProfile, AssistantSettings, AssistantSettingsContent, VersionedAssistantSettingsContent, AgentProfile, AgentProfileContent, AssistantSettings, AssistantSettingsContent,
ContextServerPresetContent, VersionedAssistantSettingsContent,
}; };
use assistant_tool::{ToolSource, ToolWorkingSet}; use assistant_tool::{ToolSource, ToolWorkingSet};
use fs::Fs; use fs::Fs;
@ -184,26 +185,43 @@ impl PickerDelegate for ToolPickerDelegate {
update_settings_file::<AssistantSettings>(self.fs.clone(), cx, { update_settings_file::<AssistantSettings>(self.fs.clone(), cx, {
let profile_id = self.profile_id.clone(); let profile_id = self.profile_id.clone();
let default_profile = self.profile.clone();
let tool = tool.clone(); let tool = tool.clone();
move |settings, _cx| match settings { move |settings, _cx| match settings {
AssistantSettingsContent::Versioned(VersionedAssistantSettingsContent::V2( AssistantSettingsContent::Versioned(VersionedAssistantSettingsContent::V2(
settings, settings,
)) => { )) => {
if let Some(profiles) = &mut settings.profiles { let profiles = settings.profiles.get_or_insert_default();
if let Some(profile) = profiles.get_mut(&profile_id) { let profile =
match tool.source { profiles
ToolSource::Native => { .entry(profile_id)
*profile.tools.entry(tool.name).or_default() = is_enabled; .or_insert_with(|| AgentProfileContent {
} name: default_profile.name.into(),
ToolSource::ContextServer { id } => { tools: default_profile.tools,
let preset = profile context_servers: default_profile
.context_servers .context_servers
.entry(id.clone().into()) .into_iter()
.or_default(); .map(|(server_id, preset)| {
*preset.tools.entry(tool.name.clone()).or_default() = (
is_enabled; server_id,
} ContextServerPresetContent {
} tools: preset.tools,
},
)
})
.collect(),
});
match tool.source {
ToolSource::Native => {
*profile.tools.entry(tool.name).or_default() = is_enabled;
}
ToolSource::ContextServer { id } => {
let preset = profile
.context_servers
.entry(id.clone().into())
.or_default();
*preset.tools.entry(tool.name.clone()).or_default() = is_enabled;
} }
} }
} }