From 23a535c2e2da5a4ed769f1cc947a30385ba1eb22 Mon Sep 17 00:00:00 2001 From: AshwinSaklecha Date: Sat, 14 Mar 2026 12:15:32 +0530 Subject: [PATCH] Reject positional prompt with --prompt-interactive --- packages/cli/src/config/config.test.ts | 36 ++++++++++++++++++++++++++ packages/cli/src/config/config.ts | 3 +++ 2 files changed, 39 insertions(+) diff --git a/packages/cli/src/config/config.test.ts b/packages/cli/src/config/config.test.ts index 04df366a98..72ac7c4ac2 100644 --- a/packages/cli/src/config/config.test.ts +++ b/packages/cli/src/config/config.test.ts @@ -3278,6 +3278,42 @@ describe('parseArguments with positional prompt', () => { debugErrorSpy.mockRestore(); }); + it('should throw an error when both a positional prompt and the --prompt-interactive flag are used', async () => { + process.argv = [ + 'node', + 'script.js', + 'positional', + 'prompt', + '--prompt-interactive', + 'interactive prompt', + ]; + + const mockExit = vi.spyOn(process, 'exit').mockImplementation(() => { + throw new Error('process.exit called'); + }); + + const mockConsoleError = vi + .spyOn(console, 'error') + .mockImplementation(() => {}); + const debugErrorSpy = vi + .spyOn(debugLogger, 'error') + .mockImplementation(() => {}); + + await expect(parseArguments(createTestMergedSettings())).rejects.toThrow( + 'process.exit called', + ); + + expect(debugErrorSpy).toHaveBeenCalledWith( + expect.stringContaining( + 'Cannot use both a positional prompt and the --prompt-interactive (-i) flag together', + ), + ); + + mockExit.mockRestore(); + mockConsoleError.mockRestore(); + debugErrorSpy.mockRestore(); + }); + it('should correctly parse a positional prompt to query field', async () => { process.argv = ['node', 'script.js', 'positional', 'prompt']; const argv = await parseArguments(createTestMergedSettings()); diff --git a/packages/cli/src/config/config.ts b/packages/cli/src/config/config.ts index 4e7e1db6f2..adb5f50a60 100755 --- a/packages/cli/src/config/config.ts +++ b/packages/cli/src/config/config.ts @@ -236,6 +236,9 @@ export async function parseArguments( if (argv['prompt'] && hasPositionalQuery) { return 'Cannot use both a positional prompt and the --prompt (-p) flag together'; } + if (argv['promptInteractive'] !== undefined && hasPositionalQuery) { + return 'Cannot use both a positional prompt and the --prompt-interactive (-i) flag together'; + } if (argv['prompt'] && argv['promptInteractive']) { return 'Cannot use both --prompt (-p) and --prompt-interactive (-i) together'; }