228 if (argc <= 0 || argv ==
nullptr) {
229 result.
error =
"Invalid argv provided";
236 bool passthrough =
false;
237 for (
int i = 1; i < argc; ++i) {
238 char* current = argv[i];
239 absl::string_view token(current);
248 if (absl::StartsWith(token,
"--help=")) {
249 std::string target(token.substr(7));
250 if (!target.empty()) {
257 if (token ==
"--help" || token ==
"-h") {
258 if (i + 1 < argc && argv[i + 1][0] !=
'-') {
267 if (token ==
"--version" || token ==
"-v") {
273 if (token ==
"--list-commands" || token ==
"--list") {
279 if (token ==
"--export-schemas" || token ==
"--export_schemas") {
285 if (token ==
"--self-test" || token ==
"--selftest") {
290 if (token ==
"--tui" || token ==
"--interactive") {
292 "--tui/--interactive was removed; use `z3ed help` for CLI "
298 if (token ==
"--quiet" || token ==
"-q") {
299 absl::SetFlag(&FLAGS_quiet,
true);
302 if (absl::StartsWith(token,
"--quiet=")) {
303 std::string value(token.substr(8));
304 absl::SetFlag(&FLAGS_quiet, value ==
"true" || value ==
"1");
309 if (token ==
"--sandbox") {
310 absl::SetFlag(&FLAGS_sandbox,
true);
313 if (absl::StartsWith(token,
"--sandbox=")) {
314 std::string value(token.substr(10));
315 absl::SetFlag(&FLAGS_sandbox, value ==
"true" || value ==
"1");
320 if (absl::StartsWith(token,
"--rom=")) {
321 absl::SetFlag(&FLAGS_rom, std::string(token.substr(6)));
324 if (token ==
"--rom") {
326 result.
error =
"--rom flag requires a value";
329 absl::SetFlag(&FLAGS_rom, std::string(argv[++i]));
334 if (absl::StartsWith(token,
"--ai_provider=") ||
335 absl::StartsWith(token,
"--ai-provider=")) {
336 size_t eq_pos = token.find(
'=');
337 absl::SetFlag(&FLAGS_ai_provider,
338 std::string(token.substr(eq_pos + 1)));
341 if (token ==
"--ai_provider" || token ==
"--ai-provider") {
343 result.
error =
"--ai-provider flag requires a value";
346 absl::SetFlag(&FLAGS_ai_provider, std::string(argv[++i]));
350 if (absl::StartsWith(token,
"--ai_model=") ||
351 absl::StartsWith(token,
"--ai-model=")) {
352 size_t eq_pos = token.find(
'=');
353 absl::SetFlag(&FLAGS_ai_model, std::string(token.substr(eq_pos + 1)));
356 if (token ==
"--ai_model" || token ==
"--ai-model") {
358 result.
error =
"--ai-model flag requires a value";
361 absl::SetFlag(&FLAGS_ai_model, std::string(argv[++i]));
365 if (absl::StartsWith(token,
"--gemini_api_key=") ||
366 absl::StartsWith(token,
"--gemini-api-key=")) {
367 size_t eq_pos = token.find(
'=');
368 absl::SetFlag(&FLAGS_gemini_api_key,
369 std::string(token.substr(eq_pos + 1)));
372 if (token ==
"--gemini_api_key" || token ==
"--gemini-api-key") {
374 result.
error =
"--gemini-api-key flag requires a value";
377 absl::SetFlag(&FLAGS_gemini_api_key, std::string(argv[++i]));
381 if (absl::StartsWith(token,
"--anthropic_api_key=") ||
382 absl::StartsWith(token,
"--anthropic-api-key=")) {
383 size_t eq_pos = token.find(
'=');
384 absl::SetFlag(&FLAGS_anthropic_api_key,
385 std::string(token.substr(eq_pos + 1)));
388 if (token ==
"--anthropic_api_key" || token ==
"--anthropic-api-key") {
390 result.
error =
"--anthropic-api-key flag requires a value";
393 absl::SetFlag(&FLAGS_anthropic_api_key, std::string(argv[++i]));
397 if (absl::StartsWith(token,
"--gui_server_address=") ||
398 absl::StartsWith(token,
"--gui-server-address=")) {
399 size_t eq_pos = token.find(
'=');
400 absl::SetFlag(&FLAGS_gui_server_address,
401 std::string(token.substr(eq_pos + 1)));
404 if (token ==
"--gui_server_address" || token ==
"--gui-server-address") {
406 result.
error =
"--gui-server-address flag requires a value";
409 absl::SetFlag(&FLAGS_gui_server_address, std::string(argv[++i]));
413 if (absl::StartsWith(token,
"--ollama_host=") ||
414 absl::StartsWith(token,
"--ollama-host=")) {
415 size_t eq_pos = token.find(
'=');
416 absl::SetFlag(&FLAGS_ollama_host,
417 std::string(token.substr(eq_pos + 1)));
420 if (token ==
"--ollama_host" || token ==
"--ollama-host") {
422 result.
error =
"--ollama-host flag requires a value";
425 absl::SetFlag(&FLAGS_ollama_host, std::string(argv[++i]));
429 if (absl::StartsWith(token,
"--mesen-socket=") ||
430 absl::StartsWith(token,
"--mesen_socket=")) {
431 size_t eq_pos = token.find(
'=');
432 absl::SetFlag(&FLAGS_mesen_socket,
433 std::string(token.substr(eq_pos + 1)));
436 if (token ==
"--mesen-socket" || token ==
"--mesen_socket") {
438 result.
error =
"--mesen-socket flag requires a value";
441 absl::SetFlag(&FLAGS_mesen_socket, std::string(argv[++i]));
445 if (absl::StartsWith(token,
"--prompt_version=") ||
446 absl::StartsWith(token,
"--prompt-version=")) {
447 size_t eq_pos = token.find(
'=');
448 absl::SetFlag(&FLAGS_prompt_version,
449 std::string(token.substr(eq_pos + 1)));
452 if (token ==
"--prompt_version" || token ==
"--prompt-version") {
454 result.
error =
"--prompt-version flag requires a value";
457 absl::SetFlag(&FLAGS_prompt_version, std::string(argv[++i]));
461 if (absl::StartsWith(token,
"--use_function_calling=") ||
462 absl::StartsWith(token,
"--use-function-calling=")) {
463 size_t eq_pos = token.find(
'=');
464 std::string value(token.substr(eq_pos + 1));
465 absl::SetFlag(&FLAGS_use_function_calling,
466 value ==
"true" || value ==
"1");
469 if (token ==
"--use_function_calling" ||
470 token ==
"--use-function-calling") {
472 result.
error =
"--use-function-calling flag requires a value";
475 std::string value(argv[++i]);
476 absl::SetFlag(&FLAGS_use_function_calling,
477 value ==
"true" || value ==
"1");
481#ifdef YAZE_HTTP_API_ENABLED
483 if (absl::StartsWith(token,
"--http-port=") ||
484 absl::StartsWith(token,
"--http_port=")) {
485 size_t eq_pos = token.find(
'=');
487 int port = std::stoi(std::string(token.substr(eq_pos + 1)));
488 absl::SetFlag(&FLAGS_http_port, port);
490 result.
error =
"--http-port requires an integer value";
495 if (token ==
"--http-port" || token ==
"--http_port") {
497 result.
error =
"--http-port flag requires a value";
501 int port = std::stoi(std::string(argv[++i]));
502 absl::SetFlag(&FLAGS_http_port, port);
504 result.
error =
"--http-port requires an integer value";
510 if (absl::StartsWith(token,
"--http-host=") ||
511 absl::StartsWith(token,
"--http_host=")) {
512 size_t eq_pos = token.find(
'=');
513 absl::SetFlag(&FLAGS_http_host, std::string(token.substr(eq_pos + 1)));
516 if (token ==
"--http-host" || token ==
"--http_host") {
518 result.
error =
"--http-host flag requires a value";
521 absl::SetFlag(&FLAGS_http_host, std::string(argv[++i]));