fix(core): ensure --yolo does not force headless mode (#18976)

# Conflicts:
#	packages/core/src/utils/headless.test.ts
#	packages/core/src/utils/headless.ts
This commit is contained in:
N. Taylor Mullen
2026-02-13 07:43:50 -08:00
committed by gemini-cli-robot
parent a212e5c565
commit 65ce1d770d
2 changed files with 50 additions and 0 deletions

View File

@@ -99,10 +99,49 @@ describe('isHeadlessMode', () => {
expect(isHeadlessMode({ prompt: true })).toBe(true);
});
<<<<<<< HEAD
it('should return false if query is provided but it is still a TTY', () => {
// Note: per current logic, query alone doesn't force headless if TTY
// This matches the existing behavior in packages/cli/src/config/config.ts
expect(isHeadlessMode({ query: 'test query' })).toBe(false);
=======
it('should return true if query is provided', () => {
expect(isHeadlessMode({ query: 'test query' })).toBe(true);
});
it('should return true if -p or --prompt is in process.argv as a fallback', () => {
const originalArgv = process.argv;
process.argv = ['node', 'index.js', '-p', 'hello'];
try {
expect(isHeadlessMode()).toBe(true);
} finally {
process.argv = originalArgv;
}
process.argv = ['node', 'index.js', '--prompt', 'hello'];
try {
expect(isHeadlessMode()).toBe(true);
} finally {
process.argv = originalArgv;
}
});
it('should return false if -y or --yolo is in process.argv as a fallback', () => {
const originalArgv = process.argv;
process.argv = ['node', 'index.js', '-y'];
try {
expect(isHeadlessMode()).toBe(false);
} finally {
process.argv = originalArgv;
}
process.argv = ['node', 'index.js', '--yolo'];
try {
expect(isHeadlessMode()).toBe(false);
} finally {
process.argv = originalArgv;
}
>>>>>>> d0c6a56c6 (fix(core): ensure --yolo does not force headless mode (#18976))
});
it('should handle undefined process.stdout gracefully', () => {

View File

@@ -40,6 +40,17 @@ export function isHeadlessMode(options?: HeadlessModeOptions): boolean {
process.env['GITHUB_ACTIONS'] === 'true' ||
!!options?.prompt ||
(!!process.stdin && !process.stdin.isTTY) ||
<<<<<<< HEAD
(!!process.stdout && !process.stdout.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');
>>>>>>> d0c6a56c6 (fix(core): ensure --yolo does not force headless mode (#18976))
}