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