import type { SIPOutboundConfig } from '@livekit/protocol';
import type { LLMModels, STTModelString, TTSModelString } from '../inference/index.js';
import type { ChatContext, LLM, RealtimeModel, ToolContextEntry } from '../llm/index.js';
import type { STT } from '../stt/index.js';
import type { TTS } from '../tts/index.js';
import type { VAD } from '../vad.js';
import { AgentTask } from '../voice/agent.js';
import { type TurnDetectionMode } from '../voice/agent_session.js';
import { type AudioConfig, type AudioSourceType } from '../voice/background_audio.js';
import type { InstructionParts } from './utils.js';
export interface WarmTransferResult {
    humanAgentIdentity: string;
}
export interface WarmTransferTaskOptions {
    /** The phone number or SIP URI to dial for the human agent. */
    sipCallTo?: string;
    /**
     * ID of a pre-configured LiveKit SIP outbound trunk used to originate the call.
     * Falls back to the `LIVEKIT_SIP_OUTBOUND_TRUNK` environment variable when not provided.
     */
    sipTrunkId?: string | null;
    /** Low-level SIP connection config for originating calls through a custom SIP domain. */
    sipConnection?: SIPOutboundConfig;
    /** Optional SIP From number. Falls back to `LIVEKIT_SIP_NUMBER`. */
    sipNumber?: string;
    /** Headers to include on the outbound SIP call. */
    sipHeaders?: Record<string, string>;
    /**
     * DTMF tones to send once the human agent's call is answered, e.g. to dial an extension or
     * navigate an IVR menu (`'1234#'`). Insert `w` characters to pause ~0.5s each before/between
     * digits (`'wwww1234#'` waits ~2s, useful when the destination plays a greeting before
     * accepting input).
     */
    dtmf?: string | null;
    /**
     * How long to wait, in milliseconds, for the human agent to answer before giving up. The
     * underlying SIP API only supports whole-second granularity, so the value is rounded to the
     * nearest second.
     */
    ringingTimeout?: number | null;
    /** Audio played to the caller while they are on hold during the transfer. */
    holdAudio?: AudioSourceType | AudioConfig | AudioConfig[] | null;
    /**
     * Instructions for the human agent briefing. Pass a full string to replace the built-in prompt
     * entirely, or {@link InstructionParts} to override individual sections (e.g. `persona`) while
     * keeping the built-in template and auto-formatted conversation history.
     */
    instructions?: InstructionParts | string;
    chatCtx?: ChatContext;
    turnDetection?: TurnDetectionMode | null;
    tools?: readonly ToolContextEntry[];
    stt?: STT | STTModelString | null;
    vad?: VAD | null;
    llm?: LLM | RealtimeModel | LLMModels | null;
    tts?: TTS | TTSModelString | null;
    allowInterruptions?: boolean;
}
/**
 * Build a warm-transfer {@link AgentTask} that dials a human agent over SIP, briefs them
 * in a private room, and (on confirmation) merges them into the caller room.
 *
 * This is the functional core; {@link WarmTransferTask} is a thin class wrapper over it.
 */
export declare function createWarmTransferTask({ sipCallTo, sipTrunkId: rawSipTrunkId, sipConnection, sipNumber, sipHeaders, dtmf, ringingTimeout, holdAudio, instructions, chatCtx, turnDetection, tools, stt, vad, llm, tts, allowInterruptions, }?: WarmTransferTaskOptions): AgentTask<WarmTransferResult>;
/**
 * Class wrapper around {@link createWarmTransferTask}, preserving the
 * `new WarmTransferTask(options).run()` API. It composes the functional task and
 * delegates `run()` to it.
 */
export declare class WarmTransferTask extends AgentTask<WarmTransferResult> {
    #private;
    constructor(options?: WarmTransferTaskOptions);
    run(): Promise<WarmTransferResult>;
}
//# sourceMappingURL=warm_transfer.d.ts.map