From 1c71641cdd656dc8eea55708622f0c4990c96f50 Mon Sep 17 00:00:00 2001 From: tauraamui Date: Mon, 8 Dec 2025 14:00:00 +0000 Subject: [PATCH] feat: hitting ctrl+e opens API key model with existing key pre-filled --- .../tui/components/dialogs/models/keys.go | 2 + .../tui/components/dialogs/models/models.go | 46 +++++++++++-------- 2 files changed, 29 insertions(+), 19 deletions(-) diff --git a/internal/tui/components/dialogs/models/keys.go b/internal/tui/components/dialogs/models/keys.go index dd98719cb883831930165e738dc56bfbfb982d15..84235e3dce398d5d3bf3e329a7f42b3d70791a13 100644 --- a/internal/tui/components/dialogs/models/keys.go +++ b/internal/tui/components/dialogs/models/keys.go @@ -61,6 +61,7 @@ func (k KeyMap) KeyBindings() []key.Binding { k.Select, k.Next, k.Previous, + k.Edit, k.Tab, k.Close, } @@ -150,6 +151,7 @@ func (k KeyMap) ShortHelp() []key.Binding { key.WithHelp("↑↓", "choose"), ), k.Tab, + k.Edit, k.Select, k.Close, } diff --git a/internal/tui/components/dialogs/models/models.go b/internal/tui/components/dialogs/models/models.go index ff7243ca7ea344208a1b637a1cf2818c8121638c..6e862c9307dcb79246097e5b70c501fe12bc1f0c 100644 --- a/internal/tui/components/dialogs/models/models.go +++ b/internal/tui/components/dialogs/models/models.go @@ -274,27 +274,35 @@ func (m *modelDialogCmp) Update(msg tea.Msg) (util.Model, tea.Cmd) { m.modelList.SetInputPlaceholder(largeModelInputPlaceholder) return m, m.modelList.SetModelType(LargeModelType) } - case key.Matches(msg, m.keyMap.Close): - if m.showClaudeAuthMethodChooser { - m.claudeAuthMethodChooser.SetDefaults() - m.showClaudeAuthMethodChooser = false - m.keyMap.isClaudeAuthChoiseHelp = false - m.keyMap.isClaudeOAuthHelp = false - return m, nil - } - if m.needsAPIKey { - if m.isAPIKeyValid { - return m, nil + case key.Matches(msg, m.keyMap.Edit): + // Only handle edit key in the main model selection view + if !m.showClaudeAuthMethodChooser && !m.showClaudeOAuth2 && !m.needsAPIKey { + selectedItem := m.modelList.SelectedModel() + if selectedItem != nil { + // Check if provider is configured + if m.isProviderConfigured(string(selectedItem.Provider.ID)) { + // Trigger API key editing flow + m.keyMap.isClaudeAuthChoiseHelp = false + m.keyMap.isClaudeOAuthHelp = false + m.keyMap.isAPIKeyHelp = true + m.showClaudeAuthMethodChooser = false + m.needsAPIKey = true + m.selectedModel = selectedItem + m.selectedModelType = config.SelectedModelTypeLarge + if m.modelList.GetModelType() == SmallModelType { + m.selectedModelType = config.SelectedModelTypeSmall + } + m.apiKeyInput.SetProviderName(selectedItem.Provider.Name) + // Pre-fill with existing API key if available + if providerConfig, ok := config.Get().Providers.Get(string(selectedItem.Provider.ID)); ok && providerConfig.APIKey != "" { + m.apiKeyInput.input.SetValue(providerConfig.APIKey) + } + return m, nil + } } - // Go back to model selection - m.needsAPIKey = false - m.selectedModel = nil - m.isAPIKeyValid = false - m.apiKeyValue = "" - m.apiKeyInput.Reset() - return m, nil } - return m, util.CmdHandler(dialogs.CloseDialogMsg{}) + return m, nil + case key.Matches(msg, m.keyMap.Close): default: if m.showClaudeAuthMethodChooser { u, cmd := m.claudeAuthMethodChooser.Update(msg)