diff --git a/packages/core/src/utils/headless.test.ts b/packages/core/src/utils/headless.test.ts index 89f42ffcd6..059aab5a25 100644 --- a/packages/core/src/utils/headless.test.ts +++ b/packages/core/src/utils/headless.test.ts @@ -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', () => { diff --git a/packages/core/src/utils/headless.ts b/packages/core/src/utils/headless.ts index 27ea5f9cbf..edaad7120a 100644 --- a/packages/core/src/utils/headless.ts +++ b/packages/core/src/utils/headless.ts @@ -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)) }