import type { GrawkusConfig, VoiceConfig, VoiceSttConfig, VoiceTtsConfig, VoiceAccessibilityConfig } from './types.js';
export declare const DEFAULT_ASSISTANT_VOICE = "21m00Tcm4TlvDq8ikWAM";
export declare const DEFAULT_USER_VOICE = "AZnzlk1XvdvUeBnXmlld";
export declare function getVoiceConfig(config: GrawkusConfig): VoiceConfig;
export declare function isVoiceEnabled(config: GrawkusConfig): boolean;
export declare function getSttKey(config: GrawkusConfig): string;
export declare function getTtsKey(config: GrawkusConfig): string;
export declare function getSttConfig(config: GrawkusConfig): Required<Omit<VoiceSttConfig, 'apiKey'>> & {
    apiKey: string;
};
export declare function getTtsConfig(config: GrawkusConfig): Required<Omit<VoiceTtsConfig, 'apiKey'>> & {
    apiKey: string;
};
export declare function getAccessibilityConfig(config: GrawkusConfig): Required<VoiceAccessibilityConfig>;
/**
 * Remove fenced + inline code blocks from text before TTS. Code read aloud is
 * a wall of symbols ("backtick t s c semicolon") that's both useless to a
 * blind user and very long. We replace fenced blocks with a brief audible
 * announcement so the listener knows code WAS produced, just not read.
 */
export declare function stripCodeForTts(text: string): string;
/**
 * Split text into sentence-ish chunks so we can stream TTS — play paragraph
 * 1 while paragraph 2 is being synthesized. Also lets the user skip/replay
 * at a meaningful granularity (Alt+D = skip, Alt+A = replay).
 *
 * Splits on paragraph boundaries first; chunks larger than ~400 chars are
 * further split on sentence boundaries.
 */
export declare function chunkForTts(text: string, maxChunkChars?: number): string[];
/**
 * Synthesize text to speech via ElevenLabs and return the audio bytes.
 * Returns null when not configured or on error — callers fall back silently
 * to text-only output rather than crashing the REPL.
 */
export interface TtsRequestOptions {
    voiceId: string;
    model?: string;
    speed?: number;
    stability?: number;
    similarityBoost?: number;
}
export declare function synthesizeSpeech(text: string, cfg: GrawkusConfig, opts: TtsRequestOptions): Promise<Buffer | null>;
/**
 * Convenience: synthesize + play. Returns true if played successfully.
 * Use this for short utterances (mode announcements, beeps, errors).
 *
 * Honors the panic-stop suppression window set by Shift+F6 — if
 * __voiceSuppressUntilMs is in the future, every speak() call no-ops
 * silently. F6 / F8 only abort the CURRENT chunk; panic-stop has to
 * also prevent incidental utterances (error announcements, mode
 * switches, audio cues) from immediately filling the silence.
 */
export declare function speak(text: string, cfg: GrawkusConfig, opts: TtsRequestOptions & {
    signal?: AbortSignal;
}): Promise<boolean>;
/**
 * Speak the assistant's response, chunked, with code stripped if configured.
 * Returns the number of chunks played. Honors the cancel signal so Ctrl+C
 * during playback halts cleanly.
 */
export declare function speakAssistantResponse(text: string, cfg: GrawkusConfig, signal?: AbortSignal): Promise<number>;
/**
 * Speak the user's input back in the user-echo voice. Skipped for slash
 * commands (`/foo …`) since those aren't worth re-reading.
 */
export declare function speakUserEcho(text: string, cfg: GrawkusConfig, signal?: AbortSignal): Promise<boolean>;
/**
 * Send recorded audio to Whisper and return the transcript. Returns null on
 * failure; caller logs + degrades.
 */
export declare function transcribeAudio(audio: Buffer, cfg: GrawkusConfig, format?: 'wav' | 'mp3' | 'webm'): Promise<string | null>;
/**
 * Record from the mic, send to Whisper, return the transcript. Plays audio
 * cues at each state change so blind users can follow what's happening.
 *
 * Caller is responsible for starting/stopping the recording via the
 * `recordController` — but for the simple "one-shot" case (e.g. `/dictate`
 * slash command), `dictateOnce(maxSeconds)` is the easy entry point.
 */
export declare function dictateOnce(cfg: GrawkusConfig, maxSeconds?: number): Promise<string | null>;
/**
 * Pretty-print voice config status for /voice (no args).
 */
export declare function printVoiceStatus(cfg: GrawkusConfig): void;
