parseCliArgs function
Parse CLI arguments.
Implementation
CliArgs parseCliArgs(List<String> args) {
String? prompt;
String? model;
String? apiKey;
String? apiEndpoint;
bool headless = false;
bool verbose = false;
bool version = false;
bool help = false;
bool noColor = false;
String? sessionId;
String? resumeSession;
String? workingDir;
final files = <String>[];
final env = <String, String>{};
String? outputFormat;
int? maxTokens;
bool dangerouslySkipPermissions = false;
var i = 0;
final positional = <String>[];
while (i < args.length) {
final arg = args[i];
switch (arg) {
case '-p' || '--prompt':
prompt = _nextArg(args, i, 'prompt');
i += 2;
case '-m' || '--model':
model = _nextArg(args, i, 'model');
i += 2;
case '-k' || '--api-key':
apiKey = _nextArg(args, i, 'api-key');
i += 2;
case '--api-endpoint':
apiEndpoint = _nextArg(args, i, 'api-endpoint');
i += 2;
case '--headless':
headless = true;
i++;
case '-v' || '--verbose':
verbose = true;
i++;
case '--version':
version = true;
i++;
case '-h' || '--help':
help = true;
i++;
case '--no-color':
noColor = true;
i++;
case '-s' || '--session':
sessionId = _nextArg(args, i, 'session');
i += 2;
case '-r' || '--resume':
resumeSession = _nextArg(args, i, 'resume');
i += 2;
case '-C' || '--directory':
workingDir = _nextArg(args, i, 'directory');
i += 2;
case '-f' || '--file':
files.add(_nextArg(args, i, 'file'));
i += 2;
case '-e' || '--env':
final kv = _nextArg(args, i, 'env');
final eq = kv.indexOf('=');
if (eq > 0) {
env[kv.substring(0, eq)] = kv.substring(eq + 1);
}
i += 2;
case '-o' || '--output-format':
outputFormat = _nextArg(args, i, 'output-format');
i += 2;
case '--max-tokens':
maxTokens = int.tryParse(_nextArg(args, i, 'max-tokens'));
i += 2;
case '--dangerously-skip-permissions':
dangerouslySkipPermissions = true;
i++;
default:
if (arg.startsWith('-')) {
stderr.writeln('Unknown option: $arg');
i++;
} else {
positional.add(arg);
i++;
}
}
}
// First positional is the prompt
if (positional.isNotEmpty && prompt == null) {
prompt = positional.join(' ');
}
// Detect piped stdin
final stdinPipe = !stdin.hasTerminal;
return CliArgs(
prompt: prompt,
model: model,
apiKey: apiKey,
apiEndpoint: apiEndpoint,
headless: headless,
verbose: verbose,
version: version,
help: help,
noColor: noColor,
sessionId: sessionId,
resumeSession: resumeSession,
workingDir: workingDir,
files: files,
env: env,
stdinPipe: stdinPipe,
outputFormat: outputFormat,
maxTokens: maxTokens,
dangerouslySkipPermissions: dangerouslySkipPermissions,
);
}