From 64f4297046771902b609ae7368644a960e5ab448 Mon Sep 17 00:00:00 2001 From: "warp-agent-staging[bot]" <240773466+warp-agent-staging[bot]@users.noreply.github.com> Date: Fri, 4 Sep 2026 21:25:51 +0000 Subject: [PATCH 1/2] Fix default agent selection for API keys --- .../platform/create_api_key_modal.rs | 23 ++++++++++--- .../platform/create_api_key_modal_tests.rs | 33 ++++++++++++++++++- 2 files changed, 51 insertions(+), 5 deletions(-) diff --git a/app/src/settings_view/platform/create_api_key_modal.rs b/app/src/settings_view/platform/create_api_key_modal.rs index 42cc6d71520..ac67cd4da07 100644 --- a/app/src/settings_view/platform/create_api_key_modal.rs +++ b/app/src/settings_view/platform/create_api_key_modal.rs @@ -308,6 +308,13 @@ impl CreateApiKeyModal { } fn populate_agent_dropdown(&mut self, ctx: &mut ViewContext) { + if self.selected_agent_uid.is_none() { + self.selected_agent_uid = self + .agents + .iter() + .find(|agent| agent.available) + .map(|agent| agent.uid.clone()); + } let items: Vec> = self .agents .iter() @@ -321,6 +328,12 @@ impl CreateApiKeyModal { .collect(); self.agent_dropdown.update(ctx, |dropdown, ctx| { dropdown.set_items(items, ctx); + if let Some(selected_agent_uid) = &self.selected_agent_uid { + dropdown.set_selected_by_action( + CreateApiKeyModalAction::SelectAgent(selected_agent_uid.clone()), + ctx, + ); + } }); } @@ -480,6 +493,11 @@ impl CreateApiKeyModal { } } + fn is_create_disabled(&self, selected_key_type: ApiKeyType) -> bool { + self.request_state == RequestState::Pending + || (selected_key_type == ApiKeyType::Agent + && (self.selected_agent_uid.is_none() || self.is_loading_agents)) + } fn render_success_content(&self, app: &AppContext) -> Box { let appearance = Appearance::as_ref(app); let theme = appearance.theme(); @@ -651,10 +669,7 @@ impl View for CreateApiKeyModal { .finish(); let is_pending = self.request_state == RequestState::Pending; - - let is_create_disabled = is_pending - || (selected_key_type == ApiKeyType::Agent - && (self.selected_agent_uid.is_none() || self.is_loading_agents)); + let is_create_disabled = self.is_create_disabled(selected_key_type); let mut cancel_button_hover = appearance .ui_builder() diff --git a/app/src/settings_view/platform/create_api_key_modal_tests.rs b/app/src/settings_view/platform/create_api_key_modal_tests.rs index aed0cb9d943..cfcafb2bbb4 100644 --- a/app/src/settings_view/platform/create_api_key_modal_tests.rs +++ b/app/src/settings_view/platform/create_api_key_modal_tests.rs @@ -3,7 +3,7 @@ use warp_server_client::auth::AgentIdentity; use warpui::App; use warpui::platform::WindowStyle; -use super::CreateApiKeyModal; +use super::{ApiKeyType, CreateApiKeyModal}; use crate::auth::AuthStateProvider; use crate::server::telemetry::context_provider::AppTelemetryContextProvider; use crate::settings_view::keybindings::KeybindingChangedNotifier; @@ -105,3 +105,34 @@ fn test_agent_dropdown_is_searchable() { assert_eq!(restored, 3); }) } + +#[test] +fn available_agent_is_selected_by_default() { + App::test((), |mut app| async move { + initialize_settings_for_tests(&mut app); + app.add_singleton_model(|_| AuthStateProvider::new_for_test()); + app.add_singleton_model(AppTelemetryContextProvider::new_context_provider); + app.add_singleton_model(|_| Appearance::mock()); + app.add_singleton_model(|_| SyncedInputState::mock()); + app.add_singleton_model(|_| VimRegisters::new()); + app.add_singleton_model(|_| KeybindingChangedNotifier::mock()); + app.add_singleton_model(UserWorkspaces::default_mock); + + let (_, view) = app.add_window(WindowStyle::NotStealFocus, CreateApiKeyModal::new); + + view.update(&mut app, |modal, ctx| { + modal.set_agents_for_test( + vec![ + agent("1", "Default Service Account", true), + agent("2", "Ben's Agent", true), + ], + ctx, + ); + }); + + view.read(&app, |modal, _| { + assert_eq!(modal.selected_agent_uid.as_deref(), Some("1")); + assert!(!modal.is_create_disabled(ApiKeyType::Agent)); + }); + }) +} From 6c7252af0f13d38d20f38f93cb42351347b10923 Mon Sep 17 00:00:00 2001 From: "warp-agent-staging[bot]" <240773466+warp-agent-staging[bot]@users.noreply.github.com> Date: Fri, 4 Sep 2026 22:20:23 +0000 Subject: [PATCH 2/2] Reset agent filter when closing API key modal --- .../platform/create_api_key_modal.rs | 3 ++ .../platform/create_api_key_modal_tests.rs | 29 +++++++++++++++++-- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/app/src/settings_view/platform/create_api_key_modal.rs b/app/src/settings_view/platform/create_api_key_modal.rs index ac67cd4da07..952426ddb52 100644 --- a/app/src/settings_view/platform/create_api_key_modal.rs +++ b/app/src/settings_view/platform/create_api_key_modal.rs @@ -444,6 +444,9 @@ impl CreateApiKeyModal { self.raw_key_copied = false; self.raw_key = None; self.selected_agent_uid = None; + self.agent_dropdown.update(ctx, |dropdown, ctx| { + dropdown.clear_filter(ctx); + }); self.name_editor.update(ctx, |editor, ctx| { editor.clear_buffer_and_reset_undo_stack(ctx); }); diff --git a/app/src/settings_view/platform/create_api_key_modal_tests.rs b/app/src/settings_view/platform/create_api_key_modal_tests.rs index cfcafb2bbb4..6aa2933029a 100644 --- a/app/src/settings_view/platform/create_api_key_modal_tests.rs +++ b/app/src/settings_view/platform/create_api_key_modal_tests.rs @@ -107,7 +107,7 @@ fn test_agent_dropdown_is_searchable() { } #[test] -fn available_agent_is_selected_by_default() { +fn default_agent_selection_is_restored_after_modal_reset() { App::test((), |mut app| async move { initialize_settings_for_tests(&mut app); app.add_singleton_model(|_| AuthStateProvider::new_for_test()); @@ -128,10 +128,35 @@ fn available_agent_is_selected_by_default() { ], ctx, ); + modal.agent_dropdown.update(ctx, |dropdown, ctx| { + dropdown.set_filter_query_for_test("Ben", ctx); + }); + }); + + view.read(&app, |modal, ctx| { + assert_eq!( + modal.agent_dropdown.as_ref(ctx).selected_item_label(), + Some("Ben's Agent".to_string()) + ); + }); + + view.update(&mut app, |modal, ctx| { + modal.on_close(ctx); + modal.set_agents_for_test( + vec![ + agent("1", "Default Service Account", true), + agent("2", "Ben's Agent", true), + ], + ctx, + ); }); - view.read(&app, |modal, _| { + view.read(&app, |modal, ctx| { assert_eq!(modal.selected_agent_uid.as_deref(), Some("1")); + assert_eq!( + modal.agent_dropdown.as_ref(ctx).selected_item_label(), + Some("Default Service Account".to_string()) + ); assert!(!modal.is_create_disabled(ApiKeyType::Agent)); }); })