feat(cli): add support for --prompt-interactive/-i flag (#1743)

This commit is contained in:
Daniel Lee
2025-07-11 16:52:56 -07:00
committed by GitHub
parent 5b5f496436
commit 5b6608ad84
6 changed files with 331 additions and 46 deletions

View File

@@ -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<CliArgs> {
export async function parseArguments(): Promise<CliArgs> {
const yargsInstance = yargs(hideBin(process.argv))
.scriptName('gemini')
.usage(
@@ -73,6 +74,12 @@ async function parseArguments(): Promise<CliArgs> {
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<CliArgs> {
.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<Config> {
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,