import type { CliId } from '../adapters/cli/types.js';
/** 一个用户可选项；wrapperCli 不为空时表示它以该前缀启动（如 `aiden x claude`）。 */
export interface CliSelectOption {
    /** 唯一选择键：合法 CliId，或 'aiden-x-claude' / 'aiden-x-codex'。 */
    readonly key: string;
    /** 展示名。 */
    readonly label: string;
    /** 底层适配器 cliId。 */
    readonly cliId: CliId;
    /** 通用启动前缀，如 'aiden x claude'；普通 CLI 无此项。 */
    readonly wrapperCli?: string;
}
/** 级联树节点：顶层 CLI；children 非空表示选中后进二级菜单（目前只有 Aiden）。 */
export interface CliSelectGroup {
    readonly key: string;
    readonly label: string;
    /** 叶子项：直接可选；children：进二级菜单。两者必居其一。 */
    readonly option?: CliSelectOption;
    readonly children?: ReadonlyArray<CliSelectOption>;
}
/** 解析结果：落进 bot 配置的 cliId（+ 可选 wrapperCli）。 */
export interface ResolvedCliSelection {
    readonly cliId: CliId;
    readonly wrapperCli?: string;
}
/**
 * 级联树（终端 TUI 用）：顺序同 CLI_OPTIONS；'aiden' 一项展开成 children。
 */
export declare const CLI_SELECT_TREE: ReadonlyArray<CliSelectGroup>;
/**
 * 扁平选项（web 下拉 + 非 TTY 回退用）：在 'aiden' 之后紧跟两个 aiden×* 项。
 */
export declare const CLI_SELECT_OPTIONS: ReadonlyArray<CliSelectOption>;
/** 按 key 查选项；非法 key 返回 undefined。 */
export declare function lookupCliSelection(key: string): CliSelectOption | undefined;
/** 反查：由一个 bot 现有的 cliId + wrapperCli 得到对应的选择键（供编辑时高亮默认）。 */
export declare function selectionKeyForBot(cliId: string, wrapperCli?: string): string;
/**
 * 把选择键解析成可落盘的 bot 配置片段（纯映射，无副作用）。非法 key 抛错。
 */
export declare function resolveCliSelection(key: string): ResolvedCliSelection;
/** 按空格把 wrapperCli 前缀拆成 token（首 token 为 bin）。 */
export declare function parseWrapperCli(wrapperCli: string): string[];
/**
 * 剥掉 aiden x claude 拒收的 `--settings`（含其值），支持 `--settings <v>` 与
 * `--settings=<v>` 两种写法。其余参数原样保留。改用纯 argv 处理（跨系统、无 shell）。
 */
export declare function stripSettingsArgs(args: ReadonlyArray<string>): string[];
/**
 * 由 wrapperCli 前缀 + 底层 CLI 的 args 构造实际 spawn 的 `{ bin, args }`。
 *   - bin = 前缀首 token（经 binResolver 走 PATH 解析）
 *   - args = 前缀其余 token + CLI 参数（aiden x claude 形态会先剥掉 --settings）
 * 前缀为空时返回 `{ bin: '', args }`，调用方据此跳过（不改写 spawn）。
 */
export declare function buildWrappedLaunch(wrapperCli: string, cliArgs: ReadonlyArray<string>, binResolver?: (bin: string) => string): {
    bin: string;
    args: string[];
};
/**
 * 把适配器给出的「裸 CLI 恢复命令」改写成 wrapperCli 形态，供 session-closed 卡片里
 * 展示给用户手动 resume。例：`claude --resume <id>` + 前缀 `aiden x claude` →
 * `aiden x claude --resume <id>`。wrapperCli 未设时原样返回。
 */
export declare function decorateResumeForWrapper(cmd: string, wrapperCli: string | undefined): string;
//# sourceMappingURL=cli-selection.d.ts.map