import { ReactiveController, ReactiveControllerHost } from 'lit'; import { AgentAdapter } from '../ai-chatbot/agent-adapter.js'; import { ChatMessage, FileAttachment, FileUploadCallbacks, MessageItem, ThreadState, ToolCall, ToolDefinition } from '../ai-chatbot/types.js'; export interface ChatbotCoreCallbacks { onRequestUpdate: () => void; onScrollToBottom: () => void; onDispatchEvent: (type: string, detail?: unknown, cancelable?: boolean) => CustomEvent; } export interface ChatbotCoreControllerConfig { callbacks: ChatbotCoreCallbacks; } export declare class ChatbotCoreController implements ReactiveController { #private; constructor(host: ReactiveControllerHost, config: ChatbotCoreControllerConfig); hostConnected(): void; hostDisconnected(): void; get adapter(): AgentAdapter | undefined; set adapter(value: AgentAdapter | undefined); get messageItems(): MessageItem[]; get isStreaming(): boolean; get isUploading(): boolean; get hasMessages(): boolean; get tools(): Map; get pendingAttachments(): FileAttachment[]; get completedAttachments(): FileAttachment[]; sendMessage(config: { content: string; timestamp?: number; attachments?: FileAttachment[]; }): Promise; processFileUpload(file: File, timestamp: number): string; createFileUploadCallbacks(fileId: string): FileUploadCallbacks; abortFileUpload(fileId: string): void; removeCompletedAttachment(attachmentId: string): void; getMessage(id: string): ChatMessage | undefined; getToolCall(id: string): ToolCall | undefined; clearMessages(): void; getMessages(): ChatMessage[]; setMessages(messages: ChatMessage[]): void; updateMessageContent(id: string, content: string): void; removeMessageItemsFrom(index: number): void; setResponseFeedback(responseId: string, feedback: { type: 'positive' | 'negative'; reason?: string; }): void; addMessage(message: ChatMessage): void; getThreadState(): ThreadState; setThreadState(state: ThreadState): void; abort(): void; canSendMessage(): boolean; }