From 700af63c45aca1c389d980f927429f77822b0c89 Mon Sep 17 00:00:00 2001 From: Marshall Bowers Date: Thu, 20 Mar 2025 17:12:58 -0400 Subject: [PATCH] assistant2: Watch settings for changes to profiles (#27219) This PR makes it so we watch the settings and update when the profiles change. Release Notes: - N/A --- crates/assistant2/src/tool_selector.rs | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/crates/assistant2/src/tool_selector.rs b/crates/assistant2/src/tool_selector.rs index 43a59e61a8..138a462842 100644 --- a/crates/assistant2/src/tool_selector.rs +++ b/crates/assistant2/src/tool_selector.rs @@ -3,18 +3,34 @@ use std::sync::Arc; use assistant_settings::{AgentProfile, AssistantSettings}; use assistant_tool::{ToolSource, ToolWorkingSet}; use collections::HashMap; -use gpui::Entity; +use gpui::{Entity, Subscription}; use scripting_tool::ScriptingTool; -use settings::Settings as _; +use settings::{Settings as _, SettingsStore}; use ui::{prelude::*, ContextMenu, PopoverMenu, Tooltip}; pub struct ToolSelector { profiles: HashMap, AgentProfile>, tools: Arc, + _subscriptions: Vec, } impl ToolSelector { pub fn new(tools: Arc, cx: &mut Context) -> Self { + let settings_subscription = cx.observe_global::(move |this, cx| { + this.refresh_profiles(cx); + }); + + let mut this = Self { + profiles: HashMap::default(), + tools, + _subscriptions: vec![settings_subscription], + }; + this.refresh_profiles(cx); + + this + } + + fn refresh_profiles(&mut self, cx: &mut Context) { let settings = AssistantSettings::get_global(cx); let mut profiles = settings.profiles.clone(); @@ -28,7 +44,7 @@ impl ToolSelector { profiles.insert(code_writer.name.clone().into(), code_writer); } - Self { profiles, tools } + self.profiles = profiles; } fn build_context_menu(