import type { InteractionDecision, InteractionObservation, PluginConfig } from "@kuralle-syrinx/core"; export interface VapPredictor { initialize(cfg: PluginConfig): Promise; push(frame: VapPredictorFrame): Promise; reset(contextId: string): void; close(): Promise; } export interface VapPredictorFrame { readonly contextId: string; readonly timestampMs: number; readonly channel: "user" | "assistant"; readonly audio: Int16Array; readonly sampleRateHz: number; } export interface VapProbs { readonly pShift: number; readonly pBackchannel: number; readonly pHold: number; } export type VapTranscriptObservation = Extract; export type VapTranscriptFusion = (probs: VapProbs, transcript: VapTranscriptObservation) => VapProbs; export interface VapThresholds { readonly shift: number; readonly backchannel: number; readonly take: number; readonly hold: number; } export declare const DEFAULT_VAP_THRESHOLDS: VapThresholds; export declare const ZERO_VAP_PROBS: VapProbs; export interface VapDecisionContext { readonly ttsActive: boolean; readonly ttsContextId: string; readonly delegateInFlight: boolean; } export declare function decideFromProbs(probs: VapProbs, ctx: VapDecisionContext, thresholds?: VapThresholds): readonly InteractionDecision[]; /** Conservative transcript evidence used by the C6 VAP+STT arm. */ export declare function semanticTranscriptFusion(probs: VapProbs, transcript: VapTranscriptObservation): VapProbs; export declare class RollingFeatureBuffer { private readonly maxSamples; private readonly storage; private length; private writeIndex; constructor(maxSamples?: number); append(audio?: Int16Array): void; /** Returns an immutable chronological copy suitable for async inference. */ snapshot(): Float32Array; reset(): void; } //# sourceMappingURL=vap-policy.d.ts.map