mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-03-13 07:30:52 -07:00
50 lines
1.3 KiB
TypeScript
50 lines
1.3 KiB
TypeScript
/**
|
|
* @license
|
|
* Copyright 2025 Google LLC
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
import process from 'node:process';
|
|
|
|
/**
|
|
* Options for headless mode detection.
|
|
*/
|
|
export interface HeadlessModeOptions {
|
|
/** Explicit prompt string or flag. */
|
|
prompt?: string | boolean;
|
|
/** Initial query positional argument. */
|
|
query?: string | boolean;
|
|
}
|
|
|
|
/**
|
|
* Detects if the CLI is running in a "headless" (non-interactive) mode.
|
|
*
|
|
* Headless mode is triggered by:
|
|
* 1. process.env.CI being set to 'true'.
|
|
* 2. process.stdout not being a TTY.
|
|
* 3. Presence of an explicit prompt flag.
|
|
*
|
|
* @param options - Optional flags and arguments from the CLI.
|
|
* @returns true if the environment is considered headless.
|
|
*/
|
|
export function isHeadlessMode(options?: HeadlessModeOptions): boolean {
|
|
if (process.env['GEMINI_CLI_INTEGRATION_TEST'] !== 'true') {
|
|
const isCI =
|
|
process.env['CI'] === 'true' || process.env['GITHUB_ACTIONS'] === 'true';
|
|
if (isCI) {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
const isNotTTY =
|
|
(!!process.stdin && !process.stdin.isTTY) ||
|
|
(!!process.stdout && !process.stdout.isTTY);
|
|
|
|
if (isNotTTY || !!options?.prompt || !!options?.query) {
|
|
return true;
|
|
}
|
|
|
|
// Fallback: check process.argv for flags that imply headless mode.
|
|
return process.argv.some((arg) => arg === '-p' || arg === '--prompt');
|
|
}
|