Files
gemini-cli/packages/core/src/utils/headless.ts
2026-02-10 10:50:49 -08:00

46 lines
1.2 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') {
return (
!!options?.prompt ||
(!!process.stdin && !process.stdin.isTTY) ||
(!!process.stdout && !process.stdout.isTTY)
);
}
return (
process.env['CI'] === 'true' ||
process.env['GITHUB_ACTIONS'] === 'true' ||
!!options?.prompt ||
(!!process.stdin && !process.stdin.isTTY) ||
(!!process.stdout && !process.stdout.isTTY)
);
}