detect static method

EntryMode detect(
  1. List<String> args,
  2. Map<String, String> env
)

Detect the entry mode from command-line args and environment variables.

Implementation

static EntryMode detect(List<String> args, Map<String, String> env) {
  // Explicit mode flags take precedence.
  if (args.contains('--mode')) {
    final idx = args.indexOf('--mode');
    if (idx + 1 < args.length) {
      return EntryMode.fromString(args[idx + 1]);
    }
  }

  // Check for MCP server subcommand.
  if (args.isNotEmpty && args.first == 'mcp') {
    return EntryMode.mcpServer;
  }

  // Check for listen subcommand.
  if (args.contains('--listen') ||
      (args.isNotEmpty && args.first == 'listen')) {
    return EntryMode.remote;
  }

  // Check environment variables.
  if (env.containsKey('MAGE_SDK_MODE')) {
    return EntryMode.sdk;
  }
  if (env.containsKey('MAGE_EMBEDDED')) {
    return EntryMode.embedded;
  }

  // Check if stdin is a pipe (not a terminal).
  if (_stdinIsPiped()) {
    return EntryMode.piped;
  }

  // Check for non-interactive indicators.
  if (args.any((a) => a == '--json' || a == '--print')) {
    return EntryMode.headless;
  }

  // Positional prompt with --quiet or non-tty stdout => headless.
  if (args.isNotEmpty &&
      !args.first.startsWith('-') &&
      (args.contains('--quiet') || !_stdoutIsTty())) {
    return EntryMode.headless;
  }

  return EntryMode.interactive;
}