import { boolean, choice } from '../../evaluate/index.js';
import { DefinedAgent } from './define-agent.js';
import { SubagentOrder, SubagentRouterPick } from './spawn.js';
export interface SubagentRouteOptions<TAgents extends ReadonlyArray<DefinedAgent>> {
    /**
     * Question text for every agent. The key is the agent name.
     * Omit this and each question uses that agent's description.
     */
    when?: {
        [K in TAgents[number]['name']]: string;
    };
    /**
     * Agents that run after the other selected agents. The lead group starts
     * together. The `then` agents then run one after another in list order, and
     * each reads the text so far. Used only when the router picks at least one
     * agent from each group. Otherwise `pick` returns `{ names, order }`.
     */
    then?: ReadonlyArray<TAgents[number]['name']>;
}
type RouteQuestions<TAgents extends ReadonlyArray<DefinedAgent>> = {
    [K in TAgents[number]['name']]: ReturnType<typeof boolean>;
} & {
    order: ReturnType<typeof choice<{
        parallel: string;
        sequence: string;
    }>>;
};
type RouteAnswers<TAgents extends ReadonlyArray<DefinedAgent>> = {
    [K in TAgents[number]['name']]: {
        value: boolean;
    };
} & {
    order: {
        value: SubagentOrder;
    };
};
/**
 * Build `decide()` questions for a subagent router.
 *
 * One yes/no question per agent, plus an `order` choice.
 * `pick` returns `main`, one name, `{ names, order }`, or `{ steps }`.
 * Names follow the `agents` array order.
 * `{ names, order }` overrides `subagents.order` for that turn.
 * `then`: agents that run after the other selected agents. The lead group
 * starts together. The `then` agents then run one after another in list
 * order, and each reads the text so far. Used only when the router picks at
 * least one agent from each group. Otherwise `pick` returns `{ names, order }`.
 */
export declare function subagentRoute<const TAgents extends ReadonlyArray<DefinedAgent>>(agents: TAgents, options?: SubagentRouteOptions<TAgents>): {
    questions: RouteQuestions<TAgents>;
    pick: (result: RouteAnswers<TAgents>) => SubagentRouterPick;
};
export {};
