import { ReactiveController, ReactiveControllerHost } from 'lit'; import { ChatMessage, MessageItem, ToolCall, ToolDefinition, AssistantResponse, ResponseFeedback } from './types.js'; import { MessageStartEvent, MessageDeltaEvent, MessageEndEvent, ToolCallStartEvent, ToolCallArgsEvent, ToolCallEndEvent, ToolResultEvent } from './agent-adapter.js'; export interface MessageStateControllerConfig { tools: Map; onThreadSettled?: () => void; } /** * Reactive controller that manages message and tool call state for the chatbot. * * Responsibilities: * - Maintains ordered list of messages and tool calls (messageItems) * - Tracks tool call state and lifecycle * - Provides CRUD operations for messages * - Triggers host re-renders when state changes */ export declare class MessageStateController implements ReactiveController { #private; private _host; private _config; private _messageItems; private _toolCalls; private _activeResponse; constructor(_host: ReactiveControllerHost, _config: MessageStateControllerConfig); hostConnected(): void; hostDisconnected(): void; updateConfig(config: Partial): void; get messageItems(): MessageItem[]; getToolCall(id: string): ToolCall | undefined; getActiveResponse(): AssistantResponse | null; startResponse(): AssistantResponse; addTextToResponse(messageId: string, content: string, event?: MessageStartEvent): void; appendTextDelta(messageId: string, delta: string, event?: MessageDeltaEvent): void; markTextComplete(messageId: string, event?: MessageEndEvent): void; addToolCallToResponse(toolCall: ToolCall, event?: ToolCallStartEvent): void; updateToolCallInResponse(toolCallId: string, updates: Partial, eventData?: { eventType: 'tool-call-args' | 'tool-call-end'; event: ToolCallArgsEvent | ToolCallEndEvent; }): void; completeToolCallInResponse(toolCallId: string, result: unknown, event?: ToolResultEvent): void; tryFinalizeResponse(): void; addMessageItem(item: MessageItem): void; addMessage(message: ChatMessage, event?: MessageStartEvent): void; getMessage(id: string): ChatMessage | undefined; updateMessageStatus(id: string, status: ChatMessage['status'], event?: MessageEndEvent): void; updateMessageContent(id: string, content: string): void; removeMessageItem(index: number): void; clearMessages(): void; removeMessageItemsFrom(index: number): void; /** * Reconstructs the message hierarchy for API compatibility. * Converts assistant responses back to ChatMessage format with tool calls. */ getMessages(): ChatMessage[]; setMessages(messages: ChatMessage[]): void; setResponseFeedback(responseId: string, feedback: ResponseFeedback): void; }