detect static method
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;
}