From f121d6f17034bc60d20f1eaeb16798b261d47d4f Mon Sep 17 00:00:00 2001 From: Tibsfox Date: Mon, 6 Apr 2026 19:23:14 -0700 Subject: [PATCH] fix(provider): handle Enter key to initiate auth setup in provider manager The provider manager let users navigate with arrow keys but pressing Enter did nothing. Users had no way to set up authentication from within the /provider command. Adds selectConfirm (Enter) handler that routes to showLoginDialog for the selected provider, with a hint in the status bar. Closes #3579 Closes #3567 Co-Authored-By: Claude Opus 4.6 (1M context) --- .../modes/interactive/components/provider-manager.ts | 10 ++++++++++ .../src/modes/interactive/interactive-mode.ts | 5 +++++ 2 files changed, 15 insertions(+) diff --git a/packages/pi-coding-agent/src/modes/interactive/components/provider-manager.ts b/packages/pi-coding-agent/src/modes/interactive/components/provider-manager.ts index 718d68030..4d45fa725 100644 --- a/packages/pi-coding-agent/src/modes/interactive/components/provider-manager.ts +++ b/packages/pi-coding-agent/src/modes/interactive/components/provider-manager.ts @@ -43,6 +43,7 @@ export class ProviderManagerComponent extends Container implements Focusable { private modelsJsonWriter: ModelsJsonWriter; private onDone: () => void; private onDiscover: (provider: string) => void; + private onSetupAuth: (provider: string) => void; private confirmingRemove = false; private hintsContainer: Container; @@ -52,6 +53,7 @@ export class ProviderManagerComponent extends Container implements Focusable { modelRegistry: ModelRegistry, onDone: () => void, onDiscover: (provider: string) => void, + onSetupAuth?: (provider: string) => void, ) { super(); @@ -61,6 +63,7 @@ export class ProviderManagerComponent extends Container implements Focusable { this.modelsJsonWriter = new ModelsJsonWriter(this.modelRegistry.modelsJsonPath); this.onDone = onDone; this.onDiscover = onDiscover; + this.onSetupAuth = onSetupAuth ?? (() => {}); // Header this.addChild(new Text(theme.fg("accent", "Provider Manager"), 0, 0)); @@ -125,6 +128,7 @@ export class ProviderManagerComponent extends Container implements Focusable { this.hintsContainer.addChild(new Text(hints, 0, 0)); } else { const hints = [ + rawKeyHint("enter", "setup auth"), rawKeyHint("d", "discover"), rawKeyHint("r", "remove auth"), rawKeyHint("esc", "close"), @@ -203,6 +207,12 @@ export class ProviderManagerComponent extends Container implements Focusable { this.tui.requestRender(); } } + } else if (kb.matches(keyData, "selectConfirm")) { + // Enter key → initiate auth setup for the selected provider (#3579) + const provider = this.providers[this.selectedIndex]; + if (provider) { + this.onSetupAuth(provider.name); + } } } } diff --git a/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts b/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts index ca98db678..80255d8de 100644 --- a/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +++ b/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts @@ -3411,6 +3411,11 @@ export class InteractiveMode { done(); this.ui.requestRender(); }, + async (provider: string) => { + // Enter key → auth setup for selected provider (#3579) + done(); + await this.showLoginDialog(provider); + }, ); return { component, focus: component }; });