/**
 * A structured choice rendered by the host for an `ask_user` prompt.
 *
 * The label is the value returned to the model when the option is selected. The
 * optional description gives the host more context without changing the answer value.
 */
export interface AskUserOption {
    label: string;
    description?: string;
}
/**
 * Controls whether an `ask_user` prompt accepts one choice or multiple choices.
 *
 * `single_select` is the default for prompts that provide options, preserving the
 * original one-answer behavior. `multi_select` tells the host that the user may choose
 * more than one option and resume with those selections as an array.
 */
export type AskUserSelectionMode = 'single_select' | 'multi_select';
/**
 * Answer shape used to resume a suspended `ask_user` call.
 *
 * Free-text and single-select prompts resume with a string. Multi-select prompts
 * resume with a string array containing each selected option label.
 */
export type AskUserAnswer = string | string[];
/**
 * Payload carried by the native `tool-call-suspended` event when `ask_user` pauses.
 * Hosts read this to render the question, choices, and selection mode.
 */
export interface AskUserSuspendPayload {
    question: string;
    options?: AskUserOption[];
    selectionMode?: AskUserSelectionMode;
}
/**
 * Converts the resume answer into the text returned to the model after `ask_user`
 * resumes. Free-text and single-select prompts already produce a single string,
 * while multi-select prompts resume with an array of selected labels that must be
 * flattened before the tool result is added back into the generation context.
 *
 * The formatter keeps the model-facing output compact by joining multi-select
 * answers with commas, mirroring the single-answer behavior while still preserving
 * every selected option in a readable form.
 */
export declare function formatQuestionAnswer(answer: AskUserAnswer): string;
/**
 * Built-in, agent-agnostic tool: ask the user a question and wait for their response.
 *
 * The tool supports three prompt shapes. Omitting `options` asks an open-ended
 * free-text question. Providing `options` without `selectionMode` asks the host to
 * render a single-select prompt for backwards compatibility. Providing
 * `selectionMode: 'multi_select'` lets the host resume with multiple selected option
 * labels as a string array.
 *
 * Pausing uses the agent-native tool suspension primitive: the tool calls
 * `suspend({ question, options, selectionMode })`, which makes the agent emit a
 * `tool-call-suspended` event and persist run state. The host renders the question,
 * collects the user's answer, and continues the run via `agent.resumeStream(answer)`;
 * the tool re-runs with `resumeData` set to the answer and returns it to the model.
 *
 * When executed without an agent `suspend` (e.g. direct invocation outside an agent
 * run), the tool returns a readable fallback prompt so the question and choices are
 * still surfaced.
 */
export declare const askUserTool: import("..").Tool<{
    question: string;
    options?: {
        label: string;
        description?: string | undefined;
    }[] | undefined;
    selectionMode?: "single_select" | "multi_select" | undefined;
}, unknown, {
    question: string;
    options?: {
        label: string;
        description?: string | undefined;
    }[] | undefined;
    selectionMode?: "single_select" | "multi_select" | undefined;
}, string | string[], import("..").ToolExecutionContext<{
    question: string;
    options?: {
        label: string;
        description?: string | undefined;
    }[] | undefined;
    selectionMode?: "single_select" | "multi_select" | undefined;
}, string | string[], unknown>, "ask_user", unknown>;
//# sourceMappingURL=ask-user.d.ts.map