muthuk1's picture
Convert OpenMAIC from Next.js to React (Vite)
f56a29b verified
raw
history blame
1.95 kB
/**
* Playback Types - Types for lecture playback and live discussion engine
*/
import type { PlaybackSnapshot } from '@/lib/utils/playback-storage';
export type { PlaybackSnapshot };
/** Visual effects (for onEffectFire callback) */
export type Effect =
| { kind: 'spotlight'; targetId: string; dimOpacity?: number }
| { kind: 'laser'; targetId: string; color?: string };
/** Engine mode state machine */
export type EngineMode = 'idle' | 'playing' | 'paused' | 'live';
/** Discussion topic state */
export type TopicState = 'active' | 'pending' | 'closed';
/** Trigger event (for proactive discussion card) */
export interface TriggerEvent {
id: string;
question: string;
prompt?: string;
agentId?: string;
}
/** Playback engine callbacks */
export interface PlaybackEngineCallbacks {
onModeChange?: (mode: EngineMode) => void;
onSceneChange?: (sceneId: string) => void;
onSpeechStart?: (text: string) => void;
onSpeechEnd?: () => void;
onTextDelta?: (content: string) => void;
onSpeakerChange?: (role: string) => void;
onEffectFire?: (effect: Effect) => void;
// Proactive discussion
onProactiveShow?: (trigger: TriggerEvent) => void;
onProactiveHide?: () => void;
// Discussion lifecycle
onDiscussionConfirmed?: (topic: string, prompt?: string, agentId?: string) => void;
onDiscussionEnd?: () => void;
onUserInterrupt?: (text: string) => void;
// Topic / Transcript
onTopicStart?: (type: 'lecture' | 'discussion', title: string) => void;
onTopicAppend?: (role: string, text: string) => void;
onTopicEnd?: () => void;
// Progress tracking (for persistence)
onProgress?: (snapshot: PlaybackSnapshot) => void;
/** Check if a given agent is in the user's selected list (for skipping discussion actions) */
isAgentSelected?: (agentId: string) => boolean;
/** Get current playback speed multiplier (e.g. 1, 1.5, 2) */
getPlaybackSpeed?: () => number;
onComplete?: () => void;
}