/**
 * ============================================================
 *  src/cli/args.ts —— CLI 参数解析纯函数
 * ------------------------------------------------------------
 *  零依赖、零副作用的命令行参数提取工具，供 main.tsx 的 -p 分支使用。
 *
 *  为什么单独成文件（而非塞进 main.tsx）：
 *    main.tsx 顶层有 `main().catch(...)` 自调用，一旦被 import 就会启动整个
 *    应用。把纯函数抽出来，单测可零副作用地 import 断言。main.tsx re-export
 *    同名符号，对外仍是「main.tsx 提供 extractFlagValue」的语义。
 *
 *  不引 commander：手撸即可，逻辑足够简单且教学清晰。
 * ============================================================
 */
/**
 * 从 args 里提取「带值标志」的值：找到 names 中任一标志，取其后**紧跟的下一个元素**当 value。
 *
 *   - 命中多次：取**第一次**出现的值
 *   - 标志在末尾（后面没有元素）：返回 undefined（args[i+1] 天然是 undefined）
 *   - 没命中任何 name：返回 undefined
 *
 * 例：extractFlagValue(['-p','--output-format','json','x'], ['--output-format']) === 'json'
 *
 * 用于 -p 模式提取 --output-format / --max-turns 的值。
 */
export function extractFlagValue(args, names) {
    for (let i = 0; i < args.length; i++) {
        if (names.includes(args[i])) {
            return args[i + 1]; // 末尾标志时 args[i+1] 为 undefined，符合语义
        }
    }
    return undefined;
}
/**
 * CLI 布尔标志（出现即生效、不带值）。集中定义一份，供 print.ts 的 extractPromptArgs
 * 共用 —— 避免 flag 列表在多处各维护一份、新增 flag 时漏改导致「flag 值被当 prompt 污染」。
 */
export const BOOLEAN_FLAGS = new Set([
    '-p',
    '--print',
    '--verbose',
    '-v',
    '-h',
    '--help',
    '-V',
    '--version',
    // stream-json 控制位（webchat broker / 网关用）；出现即生效、不带值。
    '--clear',
    '--compact',
]);
/**
 * CLI 带值标志（标志本身 + 紧跟的下一个元素都不是位置参数）。
 * 新增带值标志务必加到这里，否则它的值会被 extractPromptArgs 当成 prompt 文本。
 */
export const VALUE_FLAGS = new Set([
    '-d',
    '--cwd',
    '--output-format',
    '--max-turns',
]);
