From b35959f4c2e5b1550a32ce8fc0dff57415eb11bc Mon Sep 17 00:00:00 2001
From: Umesh Yadav <23421535+imumesh18@users.noreply.github.com>
Date: Mon, 8 Sep 2025 10:20:26 +0530
Subject: [PATCH] agent_ui: Fix `context_server` duplication when name is
updated (#35403)
Closes #35400
| Before | After |
|--------|--------|
|
| |
Release Notes:
- agent: Fix `context_server` duplication when name is updated
---------
Signed-off-by: Umesh Yadav
Co-authored-by: Ben Brandt
---
.../configure_context_server_modal.rs | 22 ++++++++++++++++---
1 file changed, 19 insertions(+), 3 deletions(-)
diff --git a/crates/agent_ui/src/agent_configuration/configure_context_server_modal.rs b/crates/agent_ui/src/agent_configuration/configure_context_server_modal.rs
index e5027b876ac0f996e1f4df2a61af1477c6490c10..4d338840143fbcf007f7d5c66e2406ef4bb9fc88 100644
--- a/crates/agent_ui/src/agent_configuration/configure_context_server_modal.rs
+++ b/crates/agent_ui/src/agent_configuration/configure_context_server_modal.rs
@@ -251,6 +251,7 @@ pub struct ConfigureContextServerModal {
workspace: WeakEntity,
source: ConfigurationSource,
state: State,
+ original_server_id: Option,
}
impl ConfigureContextServerModal {
@@ -348,6 +349,11 @@ impl ConfigureContextServerModal {
context_server_store,
workspace: workspace_handle,
state: State::Idle,
+ original_server_id: match &target {
+ ConfigurationTarget::Existing { id, .. } => Some(id.clone()),
+ ConfigurationTarget::Extension { id, .. } => Some(id.clone()),
+ ConfigurationTarget::New => None,
+ },
source: ConfigurationSource::from_target(
target,
language_registry,
@@ -415,9 +421,19 @@ impl ConfigureContextServerModal {
// When we write the settings to the file, the context server will be restarted.
workspace.update(cx, |workspace, cx| {
let fs = workspace.app_state().fs.clone();
- update_settings_file::(fs.clone(), cx, |project_settings, _| {
- project_settings.context_servers.insert(id.0, settings);
- });
+ let original_server_id = self.original_server_id.clone();
+ update_settings_file::(
+ fs.clone(),
+ cx,
+ move |project_settings, _| {
+ if let Some(original_id) = original_server_id {
+ if original_id != id {
+ project_settings.context_servers.remove(&original_id.0);
+ }
+ }
+ project_settings.context_servers.insert(id.0, settings);
+ },
+ );
});
} else if let Some(existing_server) = existing_server {
self.context_server_store