Add NO_BROWSER environment variable to trigger offline oauth flow (#3713)

This commit is contained in:
Seth Troisi
2025-07-10 18:59:02 -07:00
committed by GitHub
parent ab66e3a24e
commit 8a128d8dc6
11 changed files with 169 additions and 35 deletions

View File

@@ -317,6 +317,7 @@ export async function loadCliConfig(
name: e.config.name,
version: e.config.version,
})),
noBrowser: !!process.env.NO_BROWSER,
});
}

View File

@@ -35,6 +35,7 @@ import {
sessionId,
logUserPrompt,
AuthType,
getOauthClient,
} from '@google/gemini-cli-core';
import { validateAuthMethod } from './config/auth.js';
import { setMaxSizedBoxDebugging } from './ui/components/shared/MaxSizedBox.js';
@@ -165,6 +166,15 @@ export async function main() {
}
}
}
if (
settings.merged.selectedAuthType === AuthType.LOGIN_WITH_GOOGLE &&
config.getNoBrowser()
) {
// Do oauth before app renders to make copying the link possible.
await getOauthClient(settings.merged.selectedAuthType, config);
}
let input = config.getQuestion();
const startupWarnings = [
...(await getStartupWarnings()),

View File

@@ -728,13 +728,29 @@ const App = ({ config, settings, startupWarnings = [] }: AppProps) => {
/>
</Box>
) : isAuthenticating ? (
<AuthInProgress
onTimeout={() => {
setAuthError('Authentication timed out. Please try again.');
cancelAuthentication();
openAuthDialog();
}}
/>
<>
<AuthInProgress
onTimeout={() => {
setAuthError('Authentication timed out. Please try again.');
cancelAuthentication();
openAuthDialog();
}}
/>
{showErrorDetails && (
<OverflowProvider>
<Box flexDirection="column">
<DetailedMessagesDisplay
messages={filteredConsoleMessages}
maxHeight={
constrainHeight ? debugConsoleMaxHeight : undefined
}
width={inputWidth}
/>
<ShowMoreLines constrainHeight={constrainHeight} />
</Box>
</OverflowProvider>
)}
</>
) : isAuthDialogOpen ? (
<Box flexDirection="column">
<AuthDialog