import type { VoiceInputState } from './voice-flow.js'; export type VoiceStateDetailParams = Readonly>; export type VoiceInputSessionSnapshot = { readonly state: VoiceInputState; readonly levels: readonly number[]; readonly detail: string; readonly detailCode?: string; readonly detailParams?: VoiceStateDetailParams; }; type Listener = () => void; type StopListener = () => void; export declare const VOICE_WAVEFORM_SLOTS = 128; export declare const VOICE_ERROR_DISMISS_MS = 2600; export type RecognitionBarAction = 'stop' | 'discard' | 'busy'; export type VoiceStateSetter = (state: VoiceInputState, detail?: string, detailCode?: string, detailParams?: VoiceStateDetailParams) => void; export declare function createVoiceStateSetter(session: VoiceInputSession): VoiceStateSetter; /** Recording keeps the stop square; transcribe/polish swap it for discard. */ export declare function recognitionBarAction(state: VoiceInputState): RecognitionBarAction; export declare class VoiceInputSession { private snapshot; private readonly listeners; private readonly stopListeners; private readonly cancelListeners; private epoch; private errorTimer; captureEpoch(): number; isCurrentEpoch(epoch: number): boolean; readonly getSnapshot: () => VoiceInputSessionSnapshot; readonly subscribe: (listener: Listener) => (() => void); readonly onStopRequested: (listener: StopListener) => (() => void); readonly onCancelRequested: (listener: StopListener) => (() => void); setState(state: VoiceInputState, detail?: string, detailCode?: string, detailParams?: VoiceStateDetailParams): void; pushAudioLevel(level: number): void; requestStop(): void; requestCancel(): void; dispose(): void; private clearErrorTimer; private emit; } export declare function useVoiceInputSession(session: VoiceInputSession): VoiceInputSessionSnapshot; export {};