import type { RealtimeEvent, RealtimeSubscriptionHandle } from '../../realtime/broker.js'; import type { SessionInput, SessionInputState } from '../../storage/sqlite/session-input-repository.js'; import type { SubmitSessionInput } from '../../gateway/service/session-input-coordinator.js'; export interface VoiceAgentEvent { type: string; payload?: Record; } export interface VoiceAgentTask { taskId: string; runId: string; events: AsyncIterable; } export interface VoiceAgentBroker { delegate(input: { conversationId: string; expectedTranscriptId: string; turnId: string; text: string; signal: AbortSignal; clientMessageId?: string; origin?: SubmitSessionInput['origin']; }): Promise; cancel(taskId: string): Promise; } type SubmitResult = { ok: true; effectiveDelivery: 'next' | 'steer'; state: SessionInputState; } | { ok: false; code: string; }; type BrokerDependencies = { submit(input: SubmitSessionInput): Promise; find(conversationId: string, clientMessageId: string): SessionInput | undefined; snapshot(conversationId: string): SessionInputState; currentSequence(topic: string): number; subscribe(topic: string, afterSeq: number, listener: (event: RealtimeEvent) => void): RealtimeSubscriptionHandle; cancelRun(runId: string): Promise; }; /** Durable voice-to-Agent boundary. Playback and socket cancellation only detach event delivery. */ export declare class DurableVoiceAgentBroker implements VoiceAgentBroker { private readonly deps; private readonly runByTask; constructor(deps: BrokerDependencies); delegate(input: { conversationId: string; expectedTranscriptId: string; turnId: string; text: string; signal: AbortSignal; clientMessageId?: string; origin?: SubmitSessionInput['origin']; }): Promise; cancel(taskId: string): Promise; private events; } export {};