diff options
Diffstat (limited to 'packages/cli')
| -rw-r--r-- | packages/cli/src/ui/App.test.tsx | 4 | ||||
| -rw-r--r-- | packages/cli/src/ui/App.tsx | 30 |
2 files changed, 30 insertions, 4 deletions
diff --git a/packages/cli/src/ui/App.test.tsx b/packages/cli/src/ui/App.test.tsx index 22547ae1..32f13329 100644 --- a/packages/cli/src/ui/App.test.tsx +++ b/packages/cli/src/ui/App.test.tsx @@ -67,6 +67,7 @@ interface MockServerConfig { getAccessibility: Mock<() => AccessibilitySettings>; getProjectRoot: Mock<() => string | undefined>; getAllGeminiMdFilenames: Mock<() => string[]>; + getUserTier: Mock<() => Promise<string | undefined>>; } // Mock @google/gemini-cli-core and its Config class @@ -129,6 +130,7 @@ vi.mock('@google/gemini-cli-core', async (importOriginal) => { getAllGeminiMdFilenames: vi.fn(() => ['GEMINI.md']), setFlashFallbackHandler: vi.fn(), getSessionId: vi.fn(() => 'test-session-id'), + getUserTier: vi.fn().mockResolvedValue(undefined), }; }); return { @@ -155,6 +157,8 @@ vi.mock('./hooks/useAuthCommand', () => ({ openAuthDialog: vi.fn(), handleAuthSelect: vi.fn(), handleAuthHighlight: vi.fn(), + isAuthenticating: false, + cancelAuthentication: vi.fn(), })), })); diff --git a/packages/cli/src/ui/App.tsx b/packages/cli/src/ui/App.tsx index 2a6bf088..4e2c7242 100644 --- a/packages/cli/src/ui/App.tsx +++ b/packages/cli/src/ui/App.tsx @@ -139,6 +139,7 @@ const App = ({ config, settings, startupWarnings = [] }: AppProps) => { const [showPrivacyNotice, setShowPrivacyNotice] = useState<boolean>(false); const [modelSwitchedFromQuotaError, setModelSwitchedFromQuotaError] = useState<boolean>(false); + const [userTier, setUserTier] = useState<UserTierId | undefined>(undefined); const openPrivacyNotice = useCallback(() => { setShowPrivacyNotice(true); @@ -174,6 +175,29 @@ const App = ({ config, settings, startupWarnings = [] }: AppProps) => { } }, [settings.merged.selectedAuthType, openAuthDialog, setAuthError]); + // Sync user tier from config when authentication changes + useEffect(() => { + const syncUserTier = async () => { + try { + const configUserTier = await config.getUserTier(); + if (configUserTier !== userTier) { + setUserTier(configUserTier); + } + } catch (error) { + // Silently fail - this is not critical functionality + // Only log in debug mode to avoid cluttering the console + if (config.getDebugMode()) { + console.debug('Failed to sync user tier:', error); + } + } + }; + + // Only sync when not currently authenticating + if (!isAuthenticating) { + syncUserTier(); + } + }, [config, userTier, isAuthenticating]); + const { isEditorDialogOpen, openEditorDialog, @@ -254,9 +278,7 @@ const App = ({ config, settings, startupWarnings = [] }: AppProps) => { ): Promise<boolean> => { let message: string; - // For quota errors, assume FREE tier (safe default) - only show upgrade messaging to free tier users - // TODO: Get actual user tier from config when available - const userTier = undefined; // Defaults to FREE tier behavior + // Use actual user tier if available, otherwise default to FREE tier behavior (safe default) const isPaidTier = userTier === UserTierId.LEGACY || userTier === UserTierId.STANDARD; @@ -320,7 +342,7 @@ const App = ({ config, settings, startupWarnings = [] }: AppProps) => { }; config.setFlashFallbackHandler(flashFallbackHandler); - }, [config, addItem]); + }, [config, addItem, userTier]); const { handleSlashCommand, |
