From 02241e9126e82140235d4c83702f4e86478ab476 Mon Sep 17 00:00:00 2001 From: Abhi <43648792+abhipatel12@users.noreply.github.com> Date: Thu, 16 Oct 2025 18:08:42 -0400 Subject: [PATCH] feat(auth): Improve auth dialog error handling and messaging (#11320) --- packages/cli/src/config/auth.test.ts | 4 +++- packages/cli/src/config/auth.ts | 6 +++++- packages/cli/src/ui/auth/AuthDialog.test.tsx | 2 +- packages/cli/src/ui/auth/AuthDialog.tsx | 5 ++++- packages/cli/src/ui/auth/useAuth.ts | 6 ++++-- packages/cli/src/ui/contexts/UIActionsContext.tsx | 2 +- 6 files changed, 18 insertions(+), 7 deletions(-) diff --git a/packages/cli/src/config/auth.test.ts b/packages/cli/src/config/auth.test.ts index 2eacd71ed5..faae662825 100644 --- a/packages/cli/src/config/auth.test.ts +++ b/packages/cli/src/config/auth.test.ts @@ -45,7 +45,9 @@ describe('validateAuthMethod', () => { it('should return an error message if GEMINI_API_KEY is not set', () => { vi.stubEnv('GEMINI_API_KEY', undefined); expect(validateAuthMethod(AuthType.USE_GEMINI)).toBe( - 'GEMINI_API_KEY environment variable not found. Add that to your environment and try again (no reload needed if using .env)!', + 'GEMINI_API_KEY not found. Find your existing key or generate a new one at: https://aistudio.google.com/apikey\n' + + '\n' + + 'To continue, please set the GEMINI_API_KEY environment variable or add it to a .env file.', ); }); }); diff --git a/packages/cli/src/config/auth.ts b/packages/cli/src/config/auth.ts index 8917ba8717..4a0fd4fce0 100644 --- a/packages/cli/src/config/auth.ts +++ b/packages/cli/src/config/auth.ts @@ -18,7 +18,11 @@ export function validateAuthMethod(authMethod: string): string | null { if (authMethod === AuthType.USE_GEMINI) { if (!process.env['GEMINI_API_KEY']) { - return 'GEMINI_API_KEY environment variable not found. Add that to your environment and try again (no reload needed if using .env)!'; + return ( + 'GEMINI_API_KEY not found. Find your existing key or generate a new one at: https://aistudio.google.com/apikey\n' + + '\n' + + 'To continue, please set the GEMINI_API_KEY environment variable or add it to a .env file.' + ); } return null; } diff --git a/packages/cli/src/ui/auth/AuthDialog.test.tsx b/packages/cli/src/ui/auth/AuthDialog.test.tsx index 25446bf818..5a16acd47d 100644 --- a/packages/cli/src/ui/auth/AuthDialog.test.tsx +++ b/packages/cli/src/ui/auth/AuthDialog.test.tsx @@ -73,7 +73,7 @@ describe('AuthDialog', () => { settings: LoadedSettings; setAuthState: (state: AuthState) => void; authError: string | null; - onAuthError: (error: string) => void; + onAuthError: (error: string | null) => void; }; const originalEnv = { ...process.env }; diff --git a/packages/cli/src/ui/auth/AuthDialog.tsx b/packages/cli/src/ui/auth/AuthDialog.tsx index 7eb2c8ccd6..67d710d5a8 100644 --- a/packages/cli/src/ui/auth/AuthDialog.tsx +++ b/packages/cli/src/ui/auth/AuthDialog.tsx @@ -26,7 +26,7 @@ interface AuthDialogProps { settings: LoadedSettings; setAuthState: (state: AuthState) => void; authError: string | null; - onAuthError: (error: string) => void; + onAuthError: (error: string | null) => void; } export function AuthDialog({ @@ -174,6 +174,9 @@ Logging in with Google... Please restart Gemini CLI to continue. items={items} initialIndex={initialAuthIndex} onSelect={handleAuthSelect} + onHighlight={() => { + onAuthError(null); + }} /> {authError && ( diff --git a/packages/cli/src/ui/auth/useAuth.ts b/packages/cli/src/ui/auth/useAuth.ts index 69898f64a4..014b74a26c 100644 --- a/packages/cli/src/ui/auth/useAuth.ts +++ b/packages/cli/src/ui/auth/useAuth.ts @@ -33,9 +33,11 @@ export const useAuthCommand = (settings: LoadedSettings, config: Config) => { const [authError, setAuthError] = useState(null); const onAuthError = useCallback( - (error: string) => { + (error: string | null) => { setAuthError(error); - setAuthState(AuthState.Updating); + if (error) { + setAuthState(AuthState.Updating); + } }, [setAuthError, setAuthState], ); diff --git a/packages/cli/src/ui/contexts/UIActionsContext.tsx b/packages/cli/src/ui/contexts/UIActionsContext.tsx index 096128143f..555e2235d9 100644 --- a/packages/cli/src/ui/contexts/UIActionsContext.tsx +++ b/packages/cli/src/ui/contexts/UIActionsContext.tsx @@ -23,7 +23,7 @@ export interface UIActions { scope: SettingScope, ) => void; setAuthState: (state: AuthState) => void; - onAuthError: (error: string) => void; + onAuthError: (error: string | null) => void; handleEditorSelect: ( editorType: EditorType | undefined, scope: SettingScope,