/** * @license * Copyright 2026 Alibaba Group Holding Limited * Copyright 2026 Qwen * SPDX-License-Identifier: Apache-2.0 * Adapted to TypeScript from qwen-omni-realtime-agent; modified for Qwen Live Harness. */ import type { ProactiveConfig } from '../config.js'; import type { MonitorDebugStore } from './monitor-debug-store.js'; import type { DebugArchive } from '../log/debug-archive.js'; import { type DashScopeRealtimeMonitorCallbacks, type DashScopeRealtimeMonitorOptions, type ProactiveRealtimeMonitor } from './realtime-monitor.js'; import { type CreateMonitorInput, type CreateNarrationInput, type CreateTimerInput, type ProactiveTask, type TaskSelector, type UpdateTaskInput } from './task-manager.js'; export interface ProactiveDelivery { taskId: string; taskGeneration: number; deliveryId: string; event: string; } export type ProactiveNotificationState = 'queued' | 'preparing' | 'speaking' | 'delivered' | 'undelivered'; export interface ProactiveSchedulerRealtimeConfig { endpoint: string; apiKey?: string; model: string; } export interface ProactiveSchedulerOptions { config: ProactiveConfig; realtime: ProactiveSchedulerRealtimeConfig; onEvent: (delivery: ProactiveDelivery) => boolean; onDeliveryInvalidated?: (delivery: ProactiveDelivery) => void; /** Called exactly once when a task first enters the failed state. */ onTaskFailed?: (task: ProactiveTask, error: string) => void; onTaskChanged?: (task: ProactiveTask, notification?: ProactiveNotificationState) => void; captureVision?: () => Promise; monitorDebug?: MonitorDebugStore; debugArchive?: DebugArchive; debugContext?: Record; createMonitor?: (options: DashScopeRealtimeMonitorOptions, callbacks: DashScopeRealtimeMonitorCallbacks) => ProactiveRealtimeMonitor; now?: () => number; debug?: (event: string, details: Record) => void; } /** The call-scoped surface consumed by LiveSession and its tests. */ export interface ProactiveSchedulerControl { createPerceptionMonitor(input: CreateMonitorInput): ProactiveTask; createLiveNarration(input: CreateNarrationInput): ProactiveTask; createTimer(input: CreateTimerInput): ProactiveTask; updateTask(input: UpdateTaskInput): ProactiveTask; cancelTasks(selector: TaskSelector): ProactiveTask[]; cancelTaskById(taskId: string): ProactiveTask | undefined; listTasks(): ProactiveTask[]; feedAudio(pcm16: Uint8Array): void; feedImage(jpegBase64: string): void; resetVisualSource(): void; announcementStarted(delivery: ProactiveDelivery, options?: { fallback?: boolean; }): void; playbackStarted?(delivery: ProactiveDelivery): void; deferDelivery(delivery: ProactiveDelivery): boolean; acknowledgeDelivery(delivery: ProactiveDelivery): void; failDelivery(delivery: ProactiveDelivery, error: string): void; /** Retire only this announcement; a repeating monitor remains active. */ undeliverDelivery?(delivery: ProactiveDelivery, error: string): void; dispose(): void; } export declare class ProactiveScheduler implements ProactiveSchedulerControl { private readonly options; private readonly manager; private readonly monitors; private readonly evidence; private readonly visualCaptureFailures; private readonly repeats; private readonly cooldownAudioDrops; private readonly timers; private readonly deliveries; private readonly deliveryOutcomes; private readonly deliveryTimers; private readonly createMonitor; private readonly now; private pollTimer; private visionTimer; private visionCaptureInFlight; private lastVisionAt; private disposed; private readonly diagnosticStates; constructor(options: ProactiveSchedulerOptions); createPerceptionMonitor(input: CreateMonitorInput): ProactiveTask; createLiveNarration(input: CreateNarrationInput): ProactiveTask; createTimer(input: CreateTimerInput): ProactiveTask; updateTask(input: UpdateTaskInput): ProactiveTask; cancelTasks(selector: TaskSelector): ProactiveTask[]; cancelTaskById(taskId: string): ProactiveTask | undefined; listTasks(): ProactiveTask[]; feedAudio(pcm16: Uint8Array): void; feedImage(jpegBase64: string): void; private forwardImage; resetVisualSource(): void; announcementStarted(delivery: ProactiveDelivery, options?: { fallback?: boolean; }): void; playbackStarted(delivery: ProactiveDelivery): void; deferDelivery(delivery: ProactiveDelivery): boolean; acknowledgeDelivery(delivery: ProactiveDelivery): void; failDelivery(delivery: ProactiveDelivery, error: string): void; undeliverDelivery(delivery: ProactiveDelivery, error: string): void; dispose(): void; private startLoops; private captureVision; private recordVisualCaptureFailure; private clearVisualCaptureFailures; private installMonitor; private failMonitorSetup; private armTimer; private scheduleTimerSegment; private fireTimer; private poll; private hasWarmEvidence; private audioSeconds; private onMonitorResult; private onMonitorLifecycleError; private trigger; private resumeRepeatForMedia; private evidenceFor; private pruneEvidence; private clearTaskEvidence; private failTask; private notifyTaskFailed; private notifyTaskId; private notifyTask; private cleanupTask; private invalidateDeliveries; private closeMonitor; private clearTimer; private clearDeliveryTimer; private sameDelivery; private ensureActive; private debug; private debugEvaluationDecision; private recordCooldownAudioDrop; private flushCooldownAudioDrops; private debugGate; }