From 5b6608ad844f89954b9107ad81b3791fae02607a Mon Sep 17 00:00:00 2001 From: Daniel Lee Date: Fri, 11 Jul 2025 16:52:56 -0700 Subject: feat(cli): add support for --prompt-interactive/-i flag (#1743) --- packages/cli/src/config/config.ts | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) (limited to 'packages/cli/src/config/config.ts') diff --git a/packages/cli/src/config/config.ts b/packages/cli/src/config/config.ts index b685f090..1c1f0746 100644 --- a/packages/cli/src/config/config.ts +++ b/packages/cli/src/config/config.ts @@ -34,12 +34,13 @@ const logger = { error: (...args: any[]) => console.error('[ERROR]', ...args), }; -interface CliArgs { +export interface CliArgs { model: string | undefined; sandbox: boolean | string | undefined; sandboxImage: string | undefined; debug: boolean | undefined; prompt: string | undefined; + promptInteractive: string | undefined; allFiles: boolean | undefined; all_files: boolean | undefined; showMemoryUsage: boolean | undefined; @@ -55,7 +56,7 @@ interface CliArgs { listExtensions: boolean | undefined; } -async function parseArguments(): Promise { +export async function parseArguments(): Promise { const yargsInstance = yargs(hideBin(process.argv)) .scriptName('gemini') .usage( @@ -73,6 +74,12 @@ async function parseArguments(): Promise { type: 'string', description: 'Prompt. Appended to input on stdin (if any).', }) + .option('prompt-interactive', { + alias: 'i', + type: 'string', + description: + 'Execute the provided prompt and continue in interactive mode', + }) .option('sandbox', { alias: 's', type: 'boolean', @@ -173,10 +180,17 @@ async function parseArguments(): Promise { .alias('v', 'version') .help() .alias('h', 'help') - .strict(); + .strict() + .check((argv) => { + if (argv.prompt && argv.promptInteractive) { + throw new Error( + 'Cannot use both --prompt (-p) and --prompt-interactive (-i) together', + ); + } + return true; + }); yargsInstance.wrap(yargsInstance.terminalWidth()); - return yargsInstance.argv; } @@ -208,8 +222,8 @@ export async function loadCliConfig( settings: Settings, extensions: Extension[], sessionId: string, + argv: CliArgs, ): Promise { - const argv = await parseArguments(); const debugMode = argv.debug || [process.env.DEBUG, process.env.DEBUG_MODE].some( @@ -267,7 +281,7 @@ export async function loadCliConfig( sandbox: sandboxConfig, targetDir: process.cwd(), debugMode, - question: argv.prompt || '', + question: argv.promptInteractive || argv.prompt || '', fullContext: argv.allFiles || argv.all_files || false, coreTools: settings.coreTools || undefined, excludeTools, -- cgit v1.2.3