UNPKG

@agentman/chat-widget

Version:

Agentman Chat Widget for easy integration with web applications

159 lines (158 loc) 5.72 kB
import type { ChatConfig } from '../types/types'; import type { StateManager } from '../StateManager'; import type { ViewManager } from '../components/ViewManager'; import type { PersistenceManager } from '../PersistenceManager'; import type { EventBus } from '../utils/EventBus'; import type { MessageHandler } from './MessageHandler'; import type { FileHandler } from './FileHandler'; import type { ErrorHandler } from './ErrorHandler'; /** * ConversationOrchestrator - High-level conversation flow management * * This orchestrator manages: * - Complete conversation lifecycles * - Multi-turn conversation flows * - Conversation state transitions * - Integration between message, file, and view handling * - Business logic for conversation management */ export declare class ConversationOrchestrator { private config; private stateManager; private viewManager; private messageHandler; private fileHandler; private errorHandler; private eventBus; private persistenceManager; private logger; private currentConversationId; private conversationStartTime; private messageCount; constructor(config: ChatConfig, stateManager: StateManager, viewManager: ViewManager, messageHandler: MessageHandler, fileHandler: FileHandler | null, errorHandler: ErrorHandler, eventBus: EventBus, persistenceManager: PersistenceManager | null, debug?: boolean); /** * Start a new conversation * @param conversationId - Optional ID for the conversation, will generate if not provided * @param initialMessage - Optional initial message to send immediately * @returns Promise that resolves when conversation is started */ startNewConversation(conversationId?: string, initialMessage?: string): Promise<void>; /** * Send a message in the current conversation * @param message - Text message to send * @param attachments - Optional array of attachment file paths * @returns Promise that resolves when message is sent * @throws Error if message sending fails */ sendMessage(message: string, attachments?: string[]): Promise<void>; /** * Handle prompt click from welcome screen * @param prompt - The prompt text clicked by user * @returns Promise that resolves when prompt is sent as message */ handlePromptClick(prompt: string): Promise<void>; /** * Load an existing conversation from storage * @param conversationId - ID of the conversation to load * @returns Promise that resolves when conversation is loaded * @throws Error if persistence is not enabled or conversation cannot be loaded */ loadConversation(conversationId: string): Promise<void>; /** * Delete a conversation from storage * @param conversationId - ID of the conversation to delete * @returns Promise that resolves when conversation is deleted * @throws Error if persistence is not enabled or deletion fails */ deleteConversation(conversationId: string): Promise<void>; /** * Clear current conversation and return to welcome screen * @returns Promise that resolves when conversation is cleared */ clearConversation(): Promise<void>; /** * Get current conversation information * @returns Object containing conversation ID, message count, start time, and duration */ getConversationInfo(): { id: string | null; messageCount: number; startTime: number | null; duration: number | null; }; /** * Check if there's an active conversation with messages * @returns True if there's an active conversation with at least one message */ hasActiveConversation(): boolean; /** * Setup event listeners */ private setupEventListeners; /** * Auto-save conversation if persistence is enabled */ private autoSaveConversation; /** * Gather client metadata for API calls */ private gatherClientMetadata; /** * Generate a unique conversation ID */ private generateConversationId; /** * Wait for DOM to be ready after view transitions * Uses requestAnimationFrame for proper synchronization with browser paint cycle * @returns Promise that resolves when DOM is ready */ private waitForDOMReady; /** * Clean up resources and save current conversation * @description Auto-saves current conversation before cleanup */ destroy(): void; } declare module '../types/events' { interface EventTypeRegistry { 'conversation:started': { conversationId: string; hasInitialMessage: boolean; source: string; timestamp: number; }; 'conversation:message_sent': { conversationId: string; messageCount: number; hasAttachments: boolean; source: string; timestamp: number; }; 'conversation:error': { conversationId: string; error: Error; operation: string; source: string; timestamp: number; }; 'conversation:deleted': { conversationId: string; source: string; timestamp: number; }; 'conversation:switch_requested': { conversationId: string; source: string; timestamp: number; }; 'conversation:delete_requested': { conversationId: string; source: string; timestamp: number; }; 'conversation:new_requested': { source: string; timestamp: number; }; } }