@cadraos/sdk 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/chat/adapters/default-adapter.ts","../../src/chat/context/ChatConfigContext.tsx","../../src/chat/hooks/useExecutionStream.ts","../../src/chat/hooks/useAgentChat.ts","../../src/chat/icons/index.tsx","../../src/chat/components/ChatContainer.tsx","../../src/chat/components/ChatInput.tsx","../../src/chat/components/internal-tools/AskUserPrompt.tsx","../../src/chat/components/MarkdownContent.tsx","../../src/chat/components/ToolCallEntry.tsx","../../src/chat/components/ChatMessage.tsx","../../src/chat/components/MessageList.tsx","../../src/chat/components/AgentChat.tsx","../../src/chat/components/internal-tools/TodoList.tsx"],"names":["createContext","useMemo","jsx","useContext","useState","useRef","useCallback","useEffect","jsxs","cn","Fragment","ReactMarkdown","remarkGfm"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Default HTTP adapter for ChatAdapter\n *\n * Uses the AI SaaS External API for all operations.\n *\n * @module @cadraos/sdk/chat\n */\n\nimport type {\n Artifact,\n ChatAdapter,\n Execution,\n ExecutionResult,\n SendMessageInput,\n SessionHistory,\n StartExecutionInput,\n UploadUrlInput,\n UploadUrlResult,\n} from \"./types.js\";\n\n// =============================================================================\n// CONFIGURATION\n// =============================================================================\n\n/**\n * Configuration for the default HTTP adapter\n */\nexport interface DefaultAdapterConfig {\n /**\n * Base URL for the API\n * @example \"https://api.example.com/api/v1/external\"\n */\n baseUrl: string;\n\n /**\n * API key for authentication\n */\n apiKey?: string;\n\n /**\n * Organization ID for multi-tenant access\n */\n orgId?: number;\n\n /**\n * Custom fetch function (for testing or custom HTTP clients)\n */\n fetch?: typeof fetch;\n}\n\n// =============================================================================\n// ADAPTER FACTORY\n// =============================================================================\n\n/**\n * Create a default HTTP adapter for the Chat component\n *\n * @param config - Adapter configuration\n * @returns ChatAdapter implementation\n *\n * @example\n * ```typescript\n * const adapter = createDefaultAdapter({\n * baseUrl: 'https://api.example.com/api/v1/external',\n * apiKey: 'your-api-key',\n * orgId: 123,\n * });\n * ```\n */\nexport function createDefaultAdapter(config: DefaultAdapterConfig): ChatAdapter {\n const fetchFn = config.fetch ?? fetch;\n\n /**\n * Build headers for API requests\n */\n const headers = (): HeadersInit => {\n const h: HeadersInit = {\n \"Content-Type\": \"application/json\",\n };\n if (config.apiKey) {\n h[\"Authorization\"] = `Bearer ${config.apiKey}`;\n }\n if (config.orgId) {\n h[\"X-Org-Id\"] = String(config.orgId);\n }\n return h;\n };\n\n /**\n * Make a request and handle errors\n */\n async function request<T>(\n method: string,\n path: string,\n body?: unknown\n ): Promise<T> {\n const url = `${config.baseUrl}${path}`;\n\n const response = await fetchFn(url, {\n method,\n headers: headers(),\n body: body ? JSON.stringify(body) : undefined,\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n let errorMessage = `HTTP ${response.status}: ${response.statusText}`;\n try {\n const errorData = JSON.parse(errorText);\n if (errorData.message) {\n errorMessage = errorData.message;\n }\n } catch {\n if (errorText) {\n errorMessage = errorText;\n }\n }\n throw new Error(errorMessage);\n }\n\n // Handle empty responses\n const text = await response.text();\n if (!text) {\n return undefined as T;\n }\n\n return JSON.parse(text) as T;\n }\n\n return {\n // -------------------------------------------------------------------------\n // Execution Methods\n // -------------------------------------------------------------------------\n\n async startExecution(input: StartExecutionInput): Promise<ExecutionResult> {\n return request<ExecutionResult>(\"POST\", `/agents/${input.agentId}/execute`, {\n sessionId: input.sessionId,\n input: input.content,\n attachmentUuids: input.attachmentUuids,\n });\n },\n\n async sendMessage(input: SendMessageInput): Promise<ExecutionResult> {\n return request<ExecutionResult>(\"POST\", `/sessions/${input.sessionId}/messages`, {\n content: input.content,\n attachmentUuids: input.attachmentUuids,\n });\n },\n\n async cancelExecution(uuid: string): Promise<void> {\n await request<void>(\"POST\", `/executions/${uuid}/cancel`);\n },\n\n async getExecution(uuid: string): Promise<Execution> {\n return request<Execution>(\"GET\", `/executions/${uuid}`);\n },\n\n // -------------------------------------------------------------------------\n // Attachment Methods\n // -------------------------------------------------------------------------\n\n async getUploadUrl(input: UploadUrlInput): Promise<UploadUrlResult> {\n return request<UploadUrlResult>(\"POST\", `/attachments/upload-url`, {\n sessionId: input.sessionId,\n filename: input.filename,\n mimeType: input.mimeType,\n size: input.size,\n });\n },\n\n async confirmUpload(uuid: string): Promise<void> {\n await request<void>(\"POST\", `/attachments/${uuid}/confirm`);\n },\n\n async getDownloadUrl(uuid: string): Promise<string> {\n const result = await request<{ url: string }>(\"GET\", `/attachments/${uuid}/download-url`);\n return result.url;\n },\n\n // -------------------------------------------------------------------------\n // Artifact Methods\n // -------------------------------------------------------------------------\n\n async getSessionArtifacts(sessionId: string): Promise<Artifact[]> {\n const result = await request<{ data: Artifact[] }>(\"GET\", `/sessions/${sessionId}/artifacts`);\n return result.data ?? [];\n },\n\n // -------------------------------------------------------------------------\n // Session History Methods\n // -------------------------------------------------------------------------\n\n async getSessionHistory(sessionId: string): Promise<SessionHistory> {\n return request<SessionHistory>(\"GET\", `/sessions/${sessionId}`);\n },\n\n // -------------------------------------------------------------------------\n // SSE Stream URL\n // -------------------------------------------------------------------------\n\n getStreamUrl(executionId: string): string {\n // Build URL with auth params for SSE (can't use headers)\n const url = new URL(`${config.baseUrl}/executions/${executionId}/stream`);\n if (config.apiKey) {\n url.searchParams.set(\"apiKey\", config.apiKey);\n }\n if (config.orgId) {\n url.searchParams.set(\"orgId\", String(config.orgId));\n }\n return url.toString();\n },\n };\n}\n","\"use client\";\n\n/**\n * ChatConfigContext - Configuration provider for SDK chat components\n *\n * Provides a default adapter via context so that AgentChat can be used\n * without explicitly passing an adapter prop.\n *\n * @module @cadraos/sdk/chat\n */\n\nimport * as React from \"react\";\nimport { createContext, useContext, useMemo } from \"react\";\nimport { createDefaultAdapter, type DefaultAdapterConfig } from \"../adapters/default-adapter.js\";\nimport type { ChatAdapter } from \"../adapters/types.js\";\n\n// =============================================================================\n// CONTEXT\n// =============================================================================\n\ninterface ChatConfigContextValue {\n /** The configured adapter instance */\n adapter: ChatAdapter;\n}\n\nconst ChatConfigContext = createContext<ChatConfigContextValue | null>(null);\n\n// =============================================================================\n// PROVIDER\n// =============================================================================\n\nexport interface ChatConfigProviderProps {\n /**\n * Configuration for the default HTTP adapter\n */\n config: DefaultAdapterConfig;\n /**\n * Child components\n */\n children: React.ReactNode;\n}\n\n/**\n * Provider component that configures the default adapter for all child AgentChat components\n *\n * @example\n * ```tsx\n * import { ChatConfigProvider, AgentChat } from '@cadraos/sdk/chat';\n *\n * function App() {\n * return (\n * <ChatConfigProvider config={{\n * baseUrl: 'https://api.example.com/api/v1/external',\n * apiKey: 'your-api-key',\n * orgId: 123,\n * }}>\n * <AgentChat agentId=\"agent-uuid\" />\n * </ChatConfigProvider>\n * );\n * }\n * ```\n */\nexport function ChatConfigProvider({ config, children }: ChatConfigProviderProps) {\n const adapter = useMemo(\n () => createDefaultAdapter(config),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [config.baseUrl, config.apiKey, config.orgId]\n );\n\n const value = useMemo(() => ({ adapter }), [adapter]);\n\n return (\n <ChatConfigContext.Provider value={value}>\n {children}\n </ChatConfigContext.Provider>\n );\n}\n\n// =============================================================================\n// HOOK\n// =============================================================================\n\n/**\n * Hook to access the chat configuration from context\n *\n * @returns The chat configuration context value\n * @throws Error if used outside of ChatConfigProvider\n */\nexport function useChatConfig(): ChatConfigContextValue {\n const context = useContext(ChatConfigContext);\n if (!context) {\n throw new Error(\n \"useChatConfig must be used within ChatConfigProvider or provide adapter prop to AgentChat\"\n );\n }\n return context;\n}\n\n/**\n * Hook to optionally access the chat configuration from context\n *\n * @returns The chat configuration context value, or null if not available\n */\nexport function useChatConfigOptional(): ChatConfigContextValue | null {\n return useContext(ChatConfigContext);\n}\n","\"use client\";\n\n/**\n * useExecutionStream - Real-time SSE streaming hook for agent executions\n *\n * Connects to the SSE endpoint to receive real-time events from agent execution.\n * Falls back to polling if SSE connection fails or is unavailable.\n *\n * Ported from: ai-saas-v2/src/extensions/agents/hooks/useExecutionStream.ts\n *\n * @module @cadraos/sdk/chat\n */\n\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport type { ClarificationData, ExecutionStreamEvent } from \"../types.js\";\n\n// =============================================================================\n// CONFIGURATION (inline - no external dependencies)\n// =============================================================================\n\n/**\n * SSE Configuration constants\n * These replace SSE_CONFIG from ai-saas-v2\n */\nconst STREAM_CONFIG = {\n /** Maximum reconnection attempts before falling back to polling */\n maxReconnectAttempts: 5,\n /** Base reconnection delay in milliseconds (uses exponential backoff) */\n baseReconnectDelayMs: 1000,\n /** Maximum reconnection delay in milliseconds */\n maxReconnectDelayMs: 10000,\n /** Client-side activity timeout - should be 3x keepalive interval */\n clientActivityTimeoutMs: 45000,\n} as const;\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface UseExecutionStreamOptions {\n /** Execution ID to stream events for */\n executionId: string | undefined;\n /** Function to get stream URL - allows adapter pattern */\n getStreamUrl: (executionId: string) => string;\n /** Whether streaming is enabled */\n enabled?: boolean;\n /** Callback for all events */\n onEvent?: (event: ExecutionStreamEvent) => void;\n /** Callback for log events */\n onLog?: (log: NonNullable<ExecutionStreamEvent[\"data\"][\"log\"]>) => void;\n /** Callback when a tool is called */\n onToolCall?: (toolName: string, args: unknown) => void;\n /** Callback when a tool returns a result */\n onToolResult?: (toolName: string, result: unknown, durationMs: number) => void;\n /** Callback for progress updates */\n onProgress?: (data: {\n iteration?: number;\n tokenUsage?: { prompt: number; completion: number; total: number };\n cost?: number;\n }) => void;\n /** Callback when execution completes */\n onComplete?: () => void;\n /** Callback when an error occurs */\n onError?: (error: string) => void;\n /** Callback when agent needs clarification */\n onClarification?: (data: ClarificationData) => void;\n /** Callback when connection status changes */\n onConnectionChange?: (connected: boolean, usingFallback: boolean) => void;\n}\n\nexport interface UseExecutionStreamResult {\n /** Whether SSE is currently connected */\n isConnected: boolean;\n /** Whether using polling fallback */\n isUsingFallback: boolean;\n /** Connection error message if any */\n connectionError: string | null;\n /** Disconnect from the stream */\n disconnect: () => void;\n /** Reconnect to the stream */\n reconnect: () => void;\n}\n\n// =============================================================================\n// HOOK IMPLEMENTATION\n// =============================================================================\n\n/**\n * Hook for streaming agent execution events via SSE\n *\n * @example\n * ```typescript\n * const { isConnected, disconnect } = useExecutionStream({\n * executionId: currentExecutionId,\n * getStreamUrl: (id) => adapter.getStreamUrl(id),\n * onLog: (log) => console.log(log.message),\n * onComplete: () => console.log('Done!'),\n * });\n * ```\n */\nexport function useExecutionStream(\n options: UseExecutionStreamOptions\n): UseExecutionStreamResult {\n const {\n executionId,\n getStreamUrl,\n enabled = true,\n onEvent,\n onLog,\n onToolCall,\n onToolResult,\n onProgress,\n onComplete,\n onError,\n onClarification,\n onConnectionChange,\n } = options;\n\n const [isConnected, setIsConnected] = useState(false);\n const [isUsingFallback, setIsUsingFallback] = useState(false);\n const [connectionError, setConnectionError] = useState<string | null>(null);\n\n const eventSourceRef = useRef<EventSource | null>(null);\n const reconnectTimeoutRef = useRef<NodeJS.Timeout | null>(null);\n const activityTimeoutRef = useRef<NodeJS.Timeout | null>(null);\n const reconnectAttemptsRef = useRef(0);\n const seenEventIdsRef = useRef<Set<string>>(new Set());\n const isTerminatedRef = useRef(false);\n\n /**\n * Clean up EventSource connection\n */\n const cleanup = useCallback(() => {\n if (reconnectTimeoutRef.current) {\n clearTimeout(reconnectTimeoutRef.current);\n reconnectTimeoutRef.current = null;\n }\n if (activityTimeoutRef.current) {\n clearTimeout(activityTimeoutRef.current);\n activityTimeoutRef.current = null;\n }\n if (eventSourceRef.current) {\n eventSourceRef.current.close();\n eventSourceRef.current = null;\n }\n seenEventIdsRef.current.clear();\n setIsConnected(false);\n }, []);\n\n /**\n * Reset activity timeout - called when any event is received\n */\n const resetActivityTimeout = useCallback(() => {\n if (activityTimeoutRef.current) {\n clearTimeout(activityTimeoutRef.current);\n }\n if (isTerminatedRef.current) return;\n\n activityTimeoutRef.current = setTimeout(() => {\n if (eventSourceRef.current) {\n eventSourceRef.current.close();\n eventSourceRef.current = null;\n setIsConnected(false);\n }\n }, STREAM_CONFIG.clientActivityTimeoutMs);\n }, []);\n\n /**\n * Handle incoming SSE events\n */\n const handleEvent = useCallback(\n (event: MessageEvent) => {\n console.log('[useExecutionStream] Event received:', event.type, event.data);\n try {\n resetActivityTimeout();\n const parsed: ExecutionStreamEvent = JSON.parse(event.data);\n console.log('[useExecutionStream] Parsed event:', parsed.type, parsed);\n\n // Deduplicate by event ID\n if (parsed.id && seenEventIdsRef.current.has(parsed.id)) {\n return;\n }\n if (parsed.id) {\n seenEventIdsRef.current.add(parsed.id);\n // Limit Set size to prevent memory leaks\n if (seenEventIdsRef.current.size > 1000) {\n const idsArray = Array.from(seenEventIdsRef.current);\n seenEventIdsRef.current = new Set(idsArray.slice(-500));\n }\n }\n\n // Call generic event handler\n onEvent?.(parsed);\n\n // Handle specific event types\n const eventType = parsed.type;\n const data = parsed.data;\n\n switch (eventType) {\n case \"log\":\n if (data.log) {\n onLog?.(data.log);\n\n // Dispatch specific log type handlers\n if (data.log.logType === \"tool_call\") {\n const toolName = data.log.metadata?.toolName as string;\n const args = data.log.metadata?.inputs;\n if (toolName) {\n onToolCall?.(toolName, args);\n }\n } else if (data.log.logType === \"tool_result\") {\n const toolName = data.log.metadata?.toolName as string;\n const result = data.log.metadata?.output;\n const durationMs = data.log.durationMs ?? 0;\n if (toolName) {\n onToolResult?.(toolName, result, durationMs);\n }\n }\n }\n break;\n\n case \"step\":\n onProgress?.({\n iteration: data.iteration as number | undefined,\n tokenUsage: data.tokenUsage as { prompt: number; completion: number; total: number } | undefined,\n cost: data.cost as number | undefined,\n });\n break;\n\n case \"tool_call\":\n if (data.toolName) {\n onToolCall?.(data.toolName as string, data.args);\n }\n break;\n\n case \"complete\":\n isTerminatedRef.current = true;\n if (activityTimeoutRef.current) {\n clearTimeout(activityTimeoutRef.current);\n activityTimeoutRef.current = null;\n }\n onComplete?.();\n break;\n\n case \"error\":\n const errorMsg = data.error || \"Unknown error\";\n isTerminatedRef.current = true;\n if (activityTimeoutRef.current) {\n clearTimeout(activityTimeoutRef.current);\n activityTimeoutRef.current = null;\n }\n onError?.(errorMsg as string);\n break;\n\n case \"timeout\":\n if (data.retryable && reconnectAttemptsRef.current < STREAM_CONFIG.maxReconnectAttempts) {\n reconnectAttemptsRef.current++;\n const delay = Math.min(\n STREAM_CONFIG.baseReconnectDelayMs * Math.pow(2, reconnectAttemptsRef.current),\n STREAM_CONFIG.maxReconnectDelayMs\n );\n setConnectionError(\"Stream timeout, reconnecting...\");\n reconnectTimeoutRef.current = setTimeout(() => {\n setConnectionError(null);\n }, delay);\n } else {\n setConnectionError(\"Stream timeout, using polling\");\n setIsUsingFallback(true);\n onConnectionChange?.(false, true);\n onError?.(\"Stream connection timed out. Updates will continue via polling.\");\n }\n break;\n\n case \"info\":\n if (data.fallback === \"polling\") {\n setIsUsingFallback(true);\n onConnectionChange?.(true, true);\n }\n break;\n\n case \"connected\":\n case \"subscribed\":\n setIsConnected(true);\n setIsUsingFallback(data.redisAvailable === false);\n onConnectionChange?.(true, data.redisAvailable === false);\n break;\n\n case \"clarification\":\n if (data.question) {\n onClarification?.({\n question: data.question as string,\n reason: data.reason as string | undefined,\n suggestedOptions: data.suggestedOptions as string[] | undefined,\n });\n }\n break;\n }\n } catch {\n // Parse error - ignore malformed events\n }\n },\n [\n onEvent,\n onLog,\n onToolCall,\n onToolResult,\n onProgress,\n onComplete,\n onError,\n onClarification,\n onConnectionChange,\n resetActivityTimeout,\n ]\n );\n\n /**\n * Connect to SSE endpoint\n */\n const connect = useCallback(() => {\n console.log('[useExecutionStream] connect called', { executionId, enabled });\n\n if (!executionId || !enabled) {\n console.log('[useExecutionStream] Skipping - executionId or enabled is falsy');\n return;\n }\n\n cleanup();\n isTerminatedRef.current = false;\n\n const url = getStreamUrl(executionId);\n console.log('[useExecutionStream] Connecting to:', url);\n\n try {\n const eventSource = new EventSource(url, {\n withCredentials: true,\n });\n console.log('[useExecutionStream] EventSource created');\n\n eventSource.onopen = () => {\n console.log('[useExecutionStream] EventSource onopen');\n reconnectAttemptsRef.current = 0;\n setConnectionError(null);\n resetActivityTimeout();\n };\n\n eventSource.onerror = (err) => {\n console.log('[useExecutionStream] EventSource onerror', { readyState: eventSource.readyState, err });\n if (eventSource.readyState === EventSource.CLOSED) {\n setIsConnected(false);\n\n if (reconnectAttemptsRef.current < STREAM_CONFIG.maxReconnectAttempts) {\n reconnectAttemptsRef.current++;\n const delay = Math.min(\n STREAM_CONFIG.baseReconnectDelayMs * Math.pow(2, reconnectAttemptsRef.current),\n STREAM_CONFIG.maxReconnectDelayMs\n );\n\n reconnectTimeoutRef.current = setTimeout(() => {\n connect();\n }, delay);\n } else {\n setConnectionError(\"Connection failed, using polling\");\n setIsUsingFallback(true);\n onConnectionChange?.(false, true);\n }\n }\n };\n\n // Listen for specific named events\n const eventTypes = [\n \"connected\",\n \"subscribed\",\n \"log\",\n \"step\",\n \"tool_call\",\n \"complete\",\n \"error\",\n \"info\",\n \"timeout\",\n \"clarification\",\n ];\n\n for (const eventType of eventTypes) {\n eventSource.addEventListener(eventType, handleEvent);\n }\n\n // For any unnamed events (fallback)\n eventSource.onmessage = handleEvent;\n\n eventSourceRef.current = eventSource;\n } catch {\n setConnectionError(\"Failed to connect to stream\");\n setIsUsingFallback(true);\n onConnectionChange?.(false, true);\n }\n }, [executionId, enabled, getStreamUrl, cleanup, handleEvent, onConnectionChange, resetActivityTimeout]);\n\n /**\n * Disconnect from SSE\n */\n const disconnect = useCallback(() => {\n cleanup();\n }, [cleanup]);\n\n /**\n * Reconnect to SSE\n */\n const reconnect = useCallback(() => {\n reconnectAttemptsRef.current = 0;\n isTerminatedRef.current = false;\n setConnectionError(null);\n setIsUsingFallback(false);\n connect();\n }, [connect]);\n\n // Connect when executionId changes\n useEffect(() => {\n console.log('[useExecutionStream] useEffect triggered', { executionId, enabled });\n if (executionId && enabled) {\n console.log('[useExecutionStream] Calling connect()');\n connect();\n }\n\n return () => {\n cleanup();\n };\n }, [executionId, enabled, connect, cleanup]);\n\n return {\n isConnected,\n isUsingFallback,\n connectionError,\n disconnect,\n reconnect,\n };\n}\n","\"use client\";\n\n/**\n * useAgentChat - Main state management hook for the chat component\n *\n * Provides:\n * - Message state management\n * - Streaming via useExecutionStream\n * - Error handling\n * - Session management\n * - Adapter integration\n *\n * @module @cadraos/sdk/chat\n */\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport type { ChatAdapter, HistoryMessage } from \"../adapters/types.js\";\nimport { useChatConfigOptional } from \"../context/ChatConfigContext.js\";\nimport type {\n ChatError,\n ChatMessage,\n ClarificationData,\n ExecutionStreamEvent,\n ToolCall,\n} from \"../types.js\";\nimport { useExecutionStream } from \"./useExecutionStream.js\";\n\n// =============================================================================\n// HELPERS\n// =============================================================================\n\n/**\n * Generate a unique ID for messages\n */\nfunction generateId(): string {\n return `msg-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`;\n}\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface UseAgentChatOptions {\n /** UUID of the agent to chat with */\n agentId: string;\n /**\n * Session ID to resume an existing conversation\n * If provided, the hook will attempt to load the session history on mount\n */\n sessionId?: string;\n /** Custom adapter (optional - uses context if not provided) */\n adapter?: ChatAdapter;\n /** Initial messages to populate the chat */\n initialMessages?: ChatMessage[];\n /** Callback fired when a new message is added */\n onMessage?: (message: ChatMessage) => void;\n /** Callback fired when an error occurs */\n onError?: (error: ChatError) => void;\n /**\n * Callback fired when a new session is created\n * Called with the sessionId when starting a new chat (no existing sessionId)\n * Useful for updating external state like session lists\n */\n onSessionCreated?: (sessionId: string) => void;\n /** @deprecated Use onSessionCreated instead */\n onSessionStart?: (sessionId: string) => void;\n /** Callback fired when a tool is called */\n onToolCall?: (toolName: string, args: unknown) => void;\n /** Callback fired when clarification is needed */\n onClarification?: (data: ClarificationData) => void;\n}\n\nexport interface UseAgentChatResult {\n /** Current messages in the chat */\n messages: ChatMessage[];\n /** Whether a message is being sent */\n isLoading: boolean;\n /** Whether the assistant is currently streaming */\n isStreaming: boolean;\n /** Whether session history is being loaded */\n isLoadingHistory: boolean;\n /** Current error if any */\n error: ChatError | null;\n /** Current session ID */\n sessionId: string | null;\n /** Current clarification request if any */\n clarification: ClarificationData | null;\n /** Send a message to the agent */\n sendMessage: (content: string) => Promise<void>;\n /** Respond to a clarification request */\n respondToClarification: (response: string) => Promise<void>;\n /** Cancel the current execution */\n cancel: () => Promise<void>;\n /** Retry the last failed message */\n retry: () => void;\n /** Clear the current error */\n clearError: () => void;\n /** Clear all messages and start a new session */\n clearMessages: () => void;\n /**\n * Load history for a specific session\n * @param sessionId - Session ID to load\n * @returns Promise that resolves when history is loaded\n */\n loadSession: (sessionId: string) => Promise<void>;\n}\n\n// =============================================================================\n// HOOK IMPLEMENTATION\n// =============================================================================\n\n/**\n * Main hook for managing chat state and interactions\n *\n * @example\n * ```typescript\n * const {\n * messages,\n * isLoading,\n * isStreaming,\n * sendMessage,\n * error,\n * } = useAgentChat({\n * agentId: 'agent-uuid',\n * adapter: myAdapter,\n * onMessage: (msg) => console.log('New message:', msg),\n * });\n *\n * // Send a message\n * await sendMessage('Hello, agent!');\n * ```\n */\n/**\n * Convert a history message to a ChatMessage\n */\nfunction historyToMessage(historyMsg: HistoryMessage): ChatMessage {\n return {\n id: historyMsg.uuid,\n role: historyMsg.role,\n content: historyMsg.content,\n timestamp: new Date(historyMsg.timestamp),\n attachments: historyMsg.attachments?.map((a) => ({\n uuid: a.uuid,\n filename: a.filename,\n mimeType: a.mimeType,\n size: a.size,\n category: a.category,\n previewUrl: a.previewUrl,\n thumbnailUrl: a.thumbnailUrl,\n status: \"ready\" as const,\n })),\n toolCalls: historyMsg.toolCalls?.map((tc) => ({\n id: tc.id,\n name: tc.name,\n args: tc.args,\n result: tc.result,\n status: tc.status,\n durationMs: tc.durationMs,\n })),\n };\n}\n\nexport function useAgentChat(options: UseAgentChatOptions): UseAgentChatResult {\n const {\n agentId,\n sessionId: initialSessionId,\n adapter: propsAdapter,\n initialMessages = [],\n onMessage,\n onError,\n onSessionCreated,\n onSessionStart, // Deprecated, but still supported\n onToolCall,\n onClarification,\n } = options;\n\n // Get adapter from props or context\n const contextConfig = useChatConfigOptional();\n const adapter = propsAdapter ?? contextConfig?.adapter;\n\n if (!adapter) {\n throw new Error(\n \"No adapter provided. Use ChatConfigProvider or pass adapter prop to AgentChat.\"\n );\n }\n\n // State\n const [messages, setMessages] = useState<ChatMessage[]>(initialMessages);\n const [isLoading, setIsLoading] = useState(false);\n const [isLoadingHistory, setIsLoadingHistory] = useState(false);\n const [error, setError] = useState<ChatError | null>(null);\n const [currentSessionId, setCurrentSessionId] = useState<string | null>(initialSessionId ?? null);\n const [currentExecutionId, setCurrentExecutionId] = useState<string | null>(null);\n const [clarification, setClarification] = useState<ClarificationData | null>(null);\n\n // Track if we've already loaded the initial session\n const hasLoadedInitialSession = useRef(false);\n\n // Refs for streaming content\n const streamingContentRef = useRef<string>(\"\");\n const streamingMessageIdRef = useRef<string | null>(null);\n const pendingToolCallsRef = useRef<Map<string, ToolCall>>(new Map());\n const lastMessageContentRef = useRef<string>(\"\");\n\n /**\n * Update the streaming message content\n */\n const updateStreamingMessage = useCallback((content: string) => {\n if (!streamingMessageIdRef.current) return;\n\n setMessages((prev) =>\n prev.map((msg) =>\n msg.id === streamingMessageIdRef.current\n ? { ...msg, content, isStreaming: true }\n : msg\n )\n );\n }, []);\n\n /**\n * Add or update a tool call on the streaming message\n */\n const updateToolCall = useCallback((toolCall: ToolCall) => {\n if (!streamingMessageIdRef.current) return;\n\n setMessages((prev) =>\n prev.map((msg) => {\n if (msg.id !== streamingMessageIdRef.current) return msg;\n\n const existingIndex = msg.toolCalls?.findIndex((tc) => tc.id === toolCall.id) ?? -1;\n\n if (existingIndex >= 0) {\n // Update existing tool call\n const newToolCalls = [...(msg.toolCalls ?? [])];\n newToolCalls[existingIndex] = toolCall;\n return { ...msg, toolCalls: newToolCalls };\n } else {\n // Add new tool call\n return {\n ...msg,\n toolCalls: [...(msg.toolCalls ?? []), toolCall],\n };\n }\n })\n );\n }, []);\n\n /**\n * Finalize the streaming message\n */\n const finalizeStreamingMessage = useCallback(() => {\n if (!streamingMessageIdRef.current) return;\n\n setMessages((prev) =>\n prev.map((msg) =>\n msg.id === streamingMessageIdRef.current\n ? { ...msg, isStreaming: false }\n : msg\n )\n );\n\n streamingMessageIdRef.current = null;\n streamingContentRef.current = \"\";\n pendingToolCallsRef.current.clear();\n }, []);\n\n /**\n * Handle stream log events\n *\n * Handles log types from ai-saas-api worker:\n * - llm_response: Contains LLM response text in metadata.text\n * - message: Contains assistant message in metadata.content with metadata.role\n * - info: Info/status messages\n * - system: System messages like \"Execution completed successfully\"\n *\n * Also handles legacy/fallback types:\n * - response_text, text_chunk: Append text to streaming content\n * - tool_call, tool_result: Tool execution events\n * - final_response: Final response text\n */\n const handleStreamLog = useCallback(\n (log: NonNullable<ExecutionStreamEvent[\"data\"][\"log\"]>) => {\n console.log('[useAgentChat] handleStreamLog:', log.logType, log.metadata);\n\n switch (log.logType) {\n // Primary handlers for ai-saas-api worker log types\n case \"llm_response\": {\n // LLM response text - update streaming content\n const llmText = (log.metadata?.text as string) || log.message || \"\";\n if (llmText) {\n streamingContentRef.current = llmText;\n updateStreamingMessage(llmText);\n }\n break;\n }\n\n case \"message\": {\n // Assistant message - check role and update content\n const role = log.metadata?.role as string;\n const content = log.metadata?.content as string;\n if (role === \"assistant\" && content) {\n streamingContentRef.current = content;\n updateStreamingMessage(content);\n }\n break;\n }\n\n case \"info\":\n case \"system\":\n // Info and system messages - typically status updates, no UI action needed\n // Could be used for status indicators in the future\n console.log('[useAgentChat] Status:', log.logType, log.message);\n break;\n\n // Legacy/fallback handlers\n case \"response_text\":\n case \"text_chunk\": {\n // Append text to streaming content\n const text = (log.metadata?.text as string) || log.message || \"\";\n streamingContentRef.current += text;\n updateStreamingMessage(streamingContentRef.current);\n break;\n }\n\n case \"tool_call\": {\n const toolName = log.metadata?.toolName as string;\n const toolCallId = (log.metadata?.toolCallId as string) || `tool-${Date.now()}`;\n const args = log.metadata?.inputs as Record<string, unknown>;\n\n const newToolCall: ToolCall = {\n id: toolCallId,\n name: toolName,\n args,\n status: \"running\",\n };\n\n pendingToolCallsRef.current.set(toolCallId, newToolCall);\n updateToolCall(newToolCall);\n onToolCall?.(toolName, args);\n break;\n }\n\n case \"tool_result\": {\n const resultToolName = log.metadata?.toolName as string;\n const resultToolCallId = log.metadata?.toolCallId as string;\n const result = log.metadata?.output;\n const durationMs = log.durationMs;\n\n // Find matching tool call\n let matchedToolCall = resultToolCallId\n ? pendingToolCallsRef.current.get(resultToolCallId)\n : undefined;\n\n if (!matchedToolCall) {\n // Fallback: find by tool name\n for (const [, tc] of pendingToolCallsRef.current) {\n if (tc.name === resultToolName && tc.status === \"running\") {\n matchedToolCall = tc;\n break;\n }\n }\n }\n\n if (matchedToolCall) {\n const completedToolCall: ToolCall = {\n ...matchedToolCall,\n result,\n status: \"completed\",\n durationMs,\n };\n updateToolCall(completedToolCall);\n pendingToolCallsRef.current.delete(matchedToolCall.id);\n }\n break;\n }\n\n case \"final_response\": {\n // Final response text\n const finalText = (log.metadata?.response as string | undefined) || log.message || \"\";\n if (finalText && finalText !== streamingContentRef.current) {\n streamingContentRef.current = finalText;\n updateStreamingMessage(finalText);\n }\n break;\n }\n\n default:\n // Unknown log type - log for debugging\n console.log('[useAgentChat] Unknown log type:', log.logType, log);\n }\n },\n [updateStreamingMessage, updateToolCall, onToolCall]\n );\n\n /**\n * Handle clarification events\n */\n const handleClarification = useCallback(\n (data: ClarificationData) => {\n setClarification(data);\n onClarification?.(data);\n },\n [onClarification]\n );\n\n /**\n * Handle completion\n */\n const handleComplete = useCallback(() => {\n console.log('[useAgentChat] handleComplete called');\n setIsLoading(false);\n finalizeStreamingMessage();\n setCurrentExecutionId(null);\n }, [finalizeStreamingMessage]);\n\n /**\n * Handle errors\n */\n const handleError = useCallback(\n (errorMsg: string) => {\n console.log('[useAgentChat] handleError called:', errorMsg);\n const chatError: ChatError = {\n code: \"EXECUTION_ERROR\",\n message: errorMsg,\n retryable: true,\n };\n\n setError(chatError);\n setIsLoading(false);\n finalizeStreamingMessage();\n setCurrentExecutionId(null);\n onError?.(chatError);\n },\n [finalizeStreamingMessage, onError]\n );\n\n // Use execution stream hook\n const { isConnected, disconnect } = useExecutionStream({\n executionId: currentExecutionId ?? undefined,\n getStreamUrl: adapter.getStreamUrl,\n enabled: !!currentExecutionId,\n onLog: handleStreamLog,\n onClarification: handleClarification,\n onComplete: handleComplete,\n onError: handleError,\n });\n\n /**\n * Send a new message\n */\n const sendMessage = useCallback(\n async (content: string) => {\n if (!content.trim()) return;\n\n lastMessageContentRef.current = content;\n setIsLoading(true);\n setError(null);\n setClarification(null);\n\n // Add user message\n const userMessage: ChatMessage = {\n id: generateId(),\n role: \"user\",\n content: content.trim(),\n timestamp: new Date(),\n };\n\n setMessages((prev) => [...prev, userMessage]);\n onMessage?.(userMessage);\n\n // Add placeholder assistant message\n const assistantMessageId = generateId();\n const assistantMessage: ChatMessage = {\n id: assistantMessageId,\n role: \"assistant\",\n content: \"\",\n timestamp: new Date(),\n isStreaming: true,\n toolCalls: [],\n };\n\n setMessages((prev) => [...prev, assistantMessage]);\n streamingMessageIdRef.current = assistantMessageId;\n streamingContentRef.current = \"\";\n\n try {\n console.log('[useAgentChat] Starting execution...', { agentId, sessionId: currentSessionId });\n\n // Start execution via adapter\n const result = await adapter.startExecution({\n agentId,\n sessionId: currentSessionId ?? undefined,\n content: content.trim(),\n });\n\n console.log('[useAgentChat] Execution started:', result);\n\n // Update session ID if new\n if (!currentSessionId && result.sessionId) {\n setCurrentSessionId(result.sessionId);\n // Call both callbacks for backwards compatibility\n onSessionCreated?.(result.sessionId);\n onSessionStart?.(result.sessionId);\n }\n\n // Set execution ID to trigger streaming\n console.log('[useAgentChat] Setting executionId:', result.executionId);\n setCurrentExecutionId(result.executionId);\n } catch (err) {\n console.error('[useAgentChat] Error starting execution:', err);\n const errorMessage = err instanceof Error ? err.message : \"Failed to send message\";\n handleError(errorMessage);\n }\n },\n [\n agentId,\n currentSessionId,\n adapter,\n onMessage,\n onSessionCreated,\n onSessionStart,\n handleError,\n ]\n );\n\n /**\n * Respond to a clarification request\n */\n const respondToClarification = useCallback(\n async (response: string) => {\n if (!clarification) return;\n\n setClarification(null);\n await sendMessage(response);\n },\n [clarification, sendMessage]\n );\n\n /**\n * Cancel the current execution\n */\n const cancel = useCallback(async () => {\n if (currentExecutionId) {\n try {\n await adapter.cancelExecution(currentExecutionId);\n } catch {\n // Ignore cancel errors\n }\n disconnect();\n setIsLoading(false);\n finalizeStreamingMessage();\n setCurrentExecutionId(null);\n }\n }, [currentExecutionId, adapter, disconnect, finalizeStreamingMessage]);\n\n /**\n * Retry the last failed message\n */\n const retry = useCallback(() => {\n if (lastMessageContentRef.current && error) {\n setError(null);\n sendMessage(lastMessageContentRef.current);\n }\n }, [error, sendMessage]);\n\n /**\n * Clear the current error\n */\n const clearError = useCallback(() => {\n setError(null);\n }, []);\n\n /**\n * Clear all messages and reset session\n */\n const clearMessages = useCallback(() => {\n setMessages([]);\n setCurrentSessionId(null);\n hasLoadedInitialSession.current = false;\n }, []);\n\n /**\n * Load session history from the API\n */\n const loadSession = useCallback(\n async (sessionId: string) => {\n // Check if adapter supports session history\n if (!adapter.getSessionHistory) {\n const loadError: ChatError = {\n code: \"UNSUPPORTED_OPERATION\",\n message: \"Session history loading is not supported by this adapter\",\n retryable: false,\n };\n setError(loadError);\n onError?.(loadError);\n return;\n }\n\n setIsLoadingHistory(true);\n setError(null);\n\n try {\n const history = await adapter.getSessionHistory(sessionId);\n\n // Convert history messages to ChatMessage format\n const loadedMessages = history.messages.map(historyToMessage);\n\n setMessages(loadedMessages);\n setCurrentSessionId(sessionId);\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : \"Failed to load session history\";\n const loadError: ChatError = {\n code: \"LOAD_HISTORY_ERROR\",\n message: errorMessage,\n retryable: true,\n };\n setError(loadError);\n onError?.(loadError);\n } finally {\n setIsLoadingHistory(false);\n }\n },\n [adapter, onError]\n );\n\n /**\n * Load initial session if sessionId prop is provided\n */\n useEffect(() => {\n if (initialSessionId && !hasLoadedInitialSession.current) {\n hasLoadedInitialSession.current = true;\n loadSession(initialSessionId);\n }\n }, [initialSessionId, loadSession]);\n\n // Compute isStreaming\n const isStreaming = useMemo(\n () => !!currentExecutionId && isConnected,\n [currentExecutionId, isConnected]\n );\n\n return {\n messages,\n isLoading,\n isStreaming,\n isLoadingHistory,\n error,\n sessionId: currentSessionId,\n clarification,\n sendMessage,\n respondToClarification,\n cancel,\n retry,\n clearError,\n clearMessages,\n loadSession,\n };\n}\n","\"use client\";\n\n/**\n * Built-in SVG icons for @cadraos/sdk/chat\n *\n * These replace lucide-react to avoid external dependencies and reduce bundle size.\n *\n * @module @cadraos/sdk/chat\n */\n\n// =============================================================================\n// HELPER\n// =============================================================================\n\nfunction cn(...classes: (string | undefined | false)[]): string {\n return classes.filter(Boolean).join(\" \");\n}\n\n// =============================================================================\n// ICON PROPS\n// =============================================================================\n\nexport interface IconProps {\n /** Additional CSS classes */\n className?: string;\n /** Accessibility label */\n \"aria-label\"?: string;\n}\n\n// =============================================================================\n// MESSAGING ICONS\n// =============================================================================\n\nexport function SendIcon({ className, ...props }: IconProps) {\n return (\n <svg\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <path d=\"M22 2L11 13M22 2l-7 20-4-9-9-4 20-7z\" />\n </svg>\n );\n}\n\nexport function MessageCircleIcon({ className, ...props }: IconProps) {\n return (\n <svg\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <path d=\"M21 11.5a8.38 8.38 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.38 8.38 0 0 1-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.38 8.38 0 0 1 3.8-.9h.5a8.48 8.48 0 0 1 8 8v.5z\" />\n </svg>\n );\n}\n\n// =============================================================================\n// ACTION ICONS\n// =============================================================================\n\nexport function PaperclipIcon({ className, ...props }: IconProps) {\n return (\n <svg\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <path d=\"M21.44 11.05l-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66l-9.2 9.19a2 2 0 0 1-2.83-2.83l8.49-8.48\" />\n </svg>\n );\n}\n\nexport function XIcon({ className, ...props }: IconProps) {\n return (\n <svg\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <path d=\"M18 6L6 18M6 6l12 12\" />\n </svg>\n );\n}\n\nexport function CheckIcon({ className, ...props }: IconProps) {\n return (\n <svg\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n );\n}\n\nexport function CheckCircleIcon({ className, ...props }: IconProps) {\n return (\n <svg\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <path d=\"M22 11.08V12a10 10 0 1 1-5.93-9.14\" />\n <polyline points=\"22 4 12 14.01 9 11.01\" />\n </svg>\n );\n}\n\nexport function CopyIcon({ className, ...props }: IconProps) {\n return (\n <svg\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\" />\n <path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\" />\n </svg>\n );\n}\n\n// =============================================================================\n// NAVIGATION ICONS\n// =============================================================================\n\nexport function ChevronDownIcon({ className, ...props }: IconProps) {\n return (\n <svg\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n );\n}\n\nexport function ChevronRightIcon({ className, ...props }: IconProps) {\n return (\n <svg\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n );\n}\n\nexport function ChevronLeftIcon({ className, ...props }: IconProps) {\n return (\n <svg\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <polyline points=\"15 18 9 12 15 6\" />\n </svg>\n );\n}\n\n// =============================================================================\n// LOADING & STATUS ICONS\n// =============================================================================\n\nexport function LoadingSpinner({ className, ...props }: IconProps) {\n return (\n <svg\n className={cn(\"animate-spin\", className)}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n {...props}\n >\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n strokeOpacity=\"0.25\"\n />\n <path\n d=\"M4 12a8 8 0 0 1 8-8\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n strokeLinecap=\"round\"\n />\n </svg>\n );\n}\n\nexport function AlertCircleIcon({ className, ...props }: IconProps) {\n return (\n <svg\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\" />\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\" />\n </svg>\n );\n}\n\nexport function CircleIcon({ className, ...props }: IconProps) {\n return (\n <svg\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n </svg>\n );\n}\n\nexport function StopCircleIcon({ className, ...props }: IconProps) {\n return (\n <svg\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <rect x=\"9\" y=\"9\" width=\"6\" height=\"6\" />\n </svg>\n );\n}\n\n// =============================================================================\n// FILE & MEDIA ICONS\n// =============================================================================\n\nexport function ImageIcon({ className, ...props }: IconProps) {\n return (\n <svg\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\" />\n <circle cx=\"8.5\" cy=\"8.5\" r=\"1.5\" />\n <polyline points=\"21 15 16 10 5 21\" />\n </svg>\n );\n}\n\nexport function ImagesIcon({ className, ...props }: IconProps) {\n return (\n <svg\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <path d=\"M18 22H4a2 2 0 0 1-2-2V6\" />\n <path d=\"m22 13-1.296-1.296a2.41 2.41 0 0 0-3.408 0L11 18\" />\n <circle cx=\"12\" cy=\"8\" r=\"2\" />\n <rect x=\"6\" y=\"2\" width=\"16\" height=\"16\" rx=\"2\" />\n </svg>\n );\n}\n\nexport function FileIcon({ className, ...props }: IconProps) {\n return (\n <svg\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\n <polyline points=\"14 2 14 8 20 8\" />\n </svg>\n );\n}\n\nexport function FileTextIcon({ className, ...props }: IconProps) {\n return (\n <svg\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\n <polyline points=\"14 2 14 8 20 8\" />\n <line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\" />\n <line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\" />\n <polyline points=\"10 9 9 9 8 9\" />\n </svg>\n );\n}\n\nexport function CodeIcon({ className, ...props }: IconProps) {\n return (\n <svg\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <polyline points=\"16 18 22 12 16 6\" />\n <polyline points=\"8 6 2 12 8 18\" />\n </svg>\n );\n}\n\n// =============================================================================\n// VIEW ICONS\n// =============================================================================\n\nexport function ZoomInIcon({ className, ...props }: IconProps) {\n return (\n <svg\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\" />\n <line x1=\"11\" y1=\"8\" x2=\"11\" y2=\"14\" />\n <line x1=\"8\" y1=\"11\" x2=\"14\" y2=\"11\" />\n </svg>\n );\n}\n\nexport function ZoomOutIcon({ className, ...props }: IconProps) {\n return (\n <svg\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\" />\n <line x1=\"8\" y1=\"11\" x2=\"14\" y2=\"11\" />\n </svg>\n );\n}\n\nexport function DownloadIcon({ className, ...props }: IconProps) {\n return (\n <svg\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" />\n <polyline points=\"7 10 12 15 17 10\" />\n <line x1=\"12\" y1=\"15\" x2=\"12\" y2=\"3\" />\n </svg>\n );\n}\n\nexport function ExternalLinkIcon({ className, ...props }: IconProps) {\n return (\n <svg\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\" />\n <polyline points=\"15 3 21 3 21 9\" />\n <line x1=\"10\" y1=\"14\" x2=\"21\" y2=\"3\" />\n </svg>\n );\n}\n\nexport function Minimize2Icon({ className, ...props }: IconProps) {\n return (\n <svg\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <polyline points=\"4 14 10 14 10 20\" />\n <polyline points=\"20 10 14 10 14 4\" />\n <line x1=\"14\" y1=\"10\" x2=\"21\" y2=\"3\" />\n <line x1=\"3\" y1=\"21\" x2=\"10\" y2=\"14\" />\n </svg>\n );\n}\n\nexport function Maximize2Icon({ className, ...props }: IconProps) {\n return (\n <svg\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <polyline points=\"15 3 21 3 21 9\" />\n <polyline points=\"9 21 3 21 3 15\" />\n <line x1=\"21\" y1=\"3\" x2=\"14\" y2=\"10\" />\n <line x1=\"3\" y1=\"21\" x2=\"10\" y2=\"14\" />\n </svg>\n );\n}\n\n// =============================================================================\n// ROLE ICONS\n// =============================================================================\n\nexport function BotIcon({ className, ...props }: IconProps) {\n return (\n <svg\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <rect x=\"3\" y=\"11\" width=\"18\" height=\"10\" rx=\"2\" />\n <circle cx=\"12\" cy=\"5\" r=\"2\" />\n <path d=\"M12 7v4\" />\n <line x1=\"8\" y1=\"16\" x2=\"8\" y2=\"16\" />\n <line x1=\"16\" y1=\"16\" x2=\"16\" y2=\"16\" />\n </svg>\n );\n}\n\nexport function UserIcon({ className, ...props }: IconProps) {\n return (\n <svg\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <path d=\"M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2\" />\n <circle cx=\"12\" cy=\"7\" r=\"4\" />\n </svg>\n );\n}\n\nexport function SparklesIcon({ className, ...props }: IconProps) {\n return (\n <svg\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <path d=\"M12 3l1.5 4.5L18 9l-4.5 1.5L12 15l-1.5-4.5L6 9l4.5-1.5L12 3z\" />\n <path d=\"M5 19l.5 1.5L7 21l-1.5.5L5 23l-.5-1.5L3 21l1.5-.5L5 19z\" />\n <path d=\"M19 5l.5 1.5L21 7l-1.5.5L19 9l-.5-1.5L17 7l1.5-.5L19 5z\" />\n </svg>\n );\n}\n\n// =============================================================================\n// TASK ICONS\n// =============================================================================\n\nexport function ListTodoIcon({ className, ...props }: IconProps) {\n return (\n <svg\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <rect x=\"3\" y=\"5\" width=\"6\" height=\"6\" rx=\"1\" />\n <path d=\"m3 17 2 2 4-4\" />\n <path d=\"M13 6h8\" />\n <path d=\"M13 12h8\" />\n <path d=\"M13 18h8\" />\n </svg>\n );\n}\n\nexport function HelpCircleIcon({ className, ...props }: IconProps) {\n return (\n <svg\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3\" />\n <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\" />\n </svg>\n );\n}\n\nexport function DatabaseIcon({ className, ...props }: IconProps) {\n return (\n <svg\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <ellipse cx=\"12\" cy=\"5\" rx=\"9\" ry=\"3\" />\n <path d=\"M21 12c0 1.66-4 3-9 3s-9-1.34-9-3\" />\n <path d=\"M3 5v14c0 1.66 4 3 9 3s9-1.34 9-3V5\" />\n </svg>\n );\n}\n\nexport function ClockIcon({ className, ...props }: IconProps) {\n return (\n <svg\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <polyline points=\"12 6 12 12 16 14\" />\n </svg>\n );\n}\n","\"use client\";\n\n/**\n * ChatContainer - Layout container for the chat interface\n *\n * Provides:\n * - Flex column layout\n * - Theme support\n * - Max height constraint\n * - Border and rounded corners\n *\n * @module @cadraos/sdk/chat\n */\n\nimport * as React from \"react\";\nimport type { ThemeMode } from \"../types.js\";\n\n// =============================================================================\n// HELPERS\n// =============================================================================\n\nfunction cn(...classes: (string | undefined | false)[]): string {\n return classes.filter(Boolean).join(\" \");\n}\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface ChatContainerProps {\n /** Child components (MessageList, ChatInput, etc.) */\n children: React.ReactNode;\n /** Maximum height of the container */\n maxHeight?: string | number;\n /** Additional CSS classes */\n className?: string;\n /** Theme mode */\n theme?: ThemeMode;\n}\n\n// =============================================================================\n// COMPONENT\n// =============================================================================\n\n/**\n * Container component for the chat interface\n *\n * @example\n * ```tsx\n * <ChatContainer maxHeight=\"600px\" theme=\"dark\">\n * <MessageList messages={messages} />\n * <ChatInput onSend={handleSend} />\n * </ChatContainer>\n * ```\n */\nexport function ChatContainer({\n children,\n maxHeight = \"600px\",\n className,\n theme = \"system\",\n}: ChatContainerProps) {\n const maxHeightValue =\n typeof maxHeight === \"number\" ? `${maxHeight}px` : maxHeight;\n\n return (\n <div\n className={cn(\n \"flex flex-col bg-white dark:bg-gray-900 rounded-lg border border-gray-200 dark:border-gray-700 overflow-hidden\",\n className\n )}\n style={{ maxHeight: maxHeightValue }}\n data-theme={theme}\n >\n {children}\n </div>\n );\n}\n\nexport default ChatContainer;\n","\"use client\";\n\n/**\n * ChatInput - Message input component with attachment support\n *\n * Features:\n * - Auto-resizing textarea\n * - Enter to send (Shift+Enter for newline)\n * - Attachment button (optional)\n * - Send button with loading state\n * - Disabled state during streaming\n *\n * @module @cadraos/sdk/chat\n */\n\nimport * as React from \"react\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport { LoadingSpinner, SendIcon, StopCircleIcon } from \"../icons/index.js\";\n\n// =============================================================================\n// HELPERS\n// =============================================================================\n\nfunction cn(...classes: (string | undefined | false)[]): string {\n return classes.filter(Boolean).join(\" \");\n}\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface ChatInputProps {\n /** Callback when user sends a message */\n onSend: (content: string) => void | Promise<void>;\n /** Callback when user requests to stop/cancel */\n onStop?: () => void;\n /** Placeholder text */\n placeholder?: string;\n /** Whether the input is disabled */\n disabled?: boolean;\n /** Whether currently sending/streaming */\n isLoading?: boolean;\n /** Whether to enable attachments */\n enableAttachments?: boolean;\n /** Additional CSS classes */\n className?: string;\n}\n\n// =============================================================================\n// COMPONENT\n// =============================================================================\n\n/**\n * Input component for sending chat messages\n *\n * @example\n * ```tsx\n * <ChatInput\n * onSend={async (content) => {\n * await sendMessage(content);\n * }}\n * placeholder=\"Type a message...\"\n * disabled={isStreaming}\n * />\n * ```\n */\nexport function ChatInput({\n onSend,\n onStop,\n placeholder = \"Type a message...\",\n disabled = false,\n isLoading = false,\n enableAttachments = false,\n className,\n}: ChatInputProps) {\n // Note: enableAttachments is reserved for future use\n void enableAttachments;\n\n const [content, setContent] = useState(\"\");\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n\n // Auto-resize textarea\n useEffect(() => {\n const textarea = textareaRef.current;\n if (textarea) {\n // Reset height to calculate new height\n textarea.style.height = \"auto\";\n // Set new height based on scroll height (max 200px)\n textarea.style.height = `${Math.min(textarea.scrollHeight, 200)}px`;\n }\n }, [content]);\n\n const handleSubmit = useCallback(async () => {\n const trimmedContent = content.trim();\n if (!trimmedContent || disabled || isLoading) return;\n\n setContent(\"\");\n await onSend(trimmedContent);\n }, [content, disabled, isLoading, onSend]);\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n // Enter to send, Shift+Enter for newline\n if (e.key === \"Enter\" && !e.shiftKey) {\n e.preventDefault();\n handleSubmit();\n }\n },\n [handleSubmit]\n );\n\n const handleStopClick = useCallback(() => {\n onStop?.();\n }, [onStop]);\n\n const canSend = content.trim().length > 0 && !disabled && !isLoading;\n const showStopButton = isLoading && onStop;\n\n return (\n <div\n className={cn(\n \"border-t border-gray-200 dark:border-gray-700 p-4\",\n className\n )}\n >\n <div className=\"flex items-end gap-2\">\n {/* Textarea */}\n <div className=\"flex-1 relative\">\n <textarea\n ref={textareaRef}\n value={content}\n onChange={(e) => setContent(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n disabled={disabled}\n rows={1}\n className={cn(\n \"w-full resize-none rounded-lg border px-4 py-3 text-sm\",\n \"border-gray-300 dark:border-gray-600\",\n \"bg-white dark:bg-gray-800\",\n \"text-gray-900 dark:text-gray-100\",\n \"placeholder-gray-500 dark:placeholder-gray-400\",\n \"focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent\",\n \"disabled:opacity-50 disabled:cursor-not-allowed\"\n )}\n style={{ minHeight: \"44px\", maxHeight: \"200px\" }}\n />\n </div>\n\n {/* Stop or Send button */}\n {showStopButton ? (\n <button\n type=\"button\"\n onClick={handleStopClick}\n className={cn(\n \"flex-shrink-0 p-3 rounded-lg transition-colors\",\n \"bg-red-500 text-white hover:bg-red-600\",\n \"focus:outline-none focus:ring-2 focus:ring-red-500 focus:ring-offset-2\"\n )}\n aria-label=\"Stop generation\"\n >\n <StopCircleIcon className=\"h-5 w-5\" />\n </button>\n ) : (\n <button\n type=\"button\"\n onClick={handleSubmit}\n disabled={!canSend}\n className={cn(\n \"flex-shrink-0 p-3 rounded-lg transition-colors\",\n canSend\n ? \"bg-blue-500 text-white hover:bg-blue-600\"\n : \"bg-gray-200 dark:bg-gray-700 text-gray-400 dark:text-gray-500\",\n \"disabled:cursor-not-allowed\",\n \"focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2\"\n )}\n aria-label=\"Send message\"\n >\n {isLoading ? (\n <LoadingSpinner className=\"h-5 w-5\" />\n ) : (\n <SendIcon className=\"h-5 w-5\" />\n )}\n </button>\n )}\n </div>\n\n {/* Helper text */}\n <p className=\"mt-2 text-xs text-gray-500 dark:text-gray-400\">\n Press Enter to send, Shift+Enter for new line\n </p>\n </div>\n );\n}\n\nexport default ChatInput;\n","\"use client\";\n\n/**\n * AskUserPrompt Component\n *\n * Displays when the agent calls ask_user to request user input.\n * Shows the question and optional choices, with an input field.\n *\n * Ported from: ai-saas-v2/src/extensions/agents/components/playground/internal-tools/AskUserPrompt.tsx\n *\n * @module @cadraos/sdk/chat\n */\n\nimport * as React from \"react\";\nimport { useCallback, useState } from \"react\";\nimport { CheckCircleIcon, MessageCircleIcon, SendIcon } from \"../../icons/index.js\";\n\n// =============================================================================\n// HELPERS\n// =============================================================================\n\nfunction cn(...classes: (string | undefined | false)[]): string {\n return classes.filter(Boolean).join(\" \");\n}\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface AskUserPromptProps {\n /** The question to display to the user */\n question: string;\n /** Optional predefined choices */\n options?: string[];\n /** Callback when user submits their response */\n onSubmit: (response: string) => void;\n /** Whether a response is required */\n required?: boolean;\n /** Whether the prompt is disabled (e.g., already responded) */\n disabled?: boolean;\n /** Current status */\n status?: \"waiting\" | \"submitted\" | \"processing\";\n /** Additional CSS classes */\n className?: string;\n}\n\n// =============================================================================\n// COMPONENT\n// =============================================================================\n\n/**\n * Input prompt for agent clarification requests\n *\n * @example\n * ```tsx\n * <AskUserPrompt\n * question=\"What format would you like the report in?\"\n * options={[\"PDF\", \"CSV\", \"Excel\"]}\n * onSubmit={(response) => handleClarification(response)}\n * />\n * ```\n */\nexport function AskUserPrompt({\n question,\n options,\n onSubmit,\n required = true,\n disabled = false,\n status = \"waiting\",\n className,\n}: AskUserPromptProps) {\n const [response, setResponse] = useState(\"\");\n const [selectedOption, setSelectedOption] = useState<string | null>(null);\n\n const handleSubmit = useCallback(() => {\n const finalResponse = selectedOption || response.trim();\n if (required && !finalResponse) return;\n onSubmit(finalResponse);\n }, [selectedOption, response, required, onSubmit]);\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key === \"Enter\" && !e.shiftKey) {\n e.preventDefault();\n handleSubmit();\n }\n },\n [handleSubmit]\n );\n\n const handleOptionSelect = useCallback((option: string) => {\n setSelectedOption((prev) => (prev === option ? null : option));\n setResponse(\"\"); // Clear text input when option selected\n }, []);\n\n const isSubmitDisabled =\n disabled ||\n status !== \"waiting\" ||\n (required && !response.trim() && !selectedOption);\n\n return (\n <div\n className={cn(\n \"rounded-lg border p-4 space-y-3\",\n status === \"waiting\"\n ? \"border-blue-200 bg-blue-50/50 dark:border-blue-800 dark:bg-blue-950/20\"\n : \"border-green-200 bg-green-50/50 dark:border-green-800 dark:bg-green-950/20\",\n className\n )}\n >\n {/* Header */}\n <div className=\"flex items-center gap-2\">\n <MessageCircleIcon className=\"h-5 w-5 text-blue-600 dark:text-blue-400\" />\n <span className=\"font-medium text-blue-900 dark:text-blue-100\">\n Agent needs your input\n </span>\n <span\n className={cn(\n \"ml-auto text-xs px-2 py-1 rounded-full font-medium\",\n status === \"waiting\"\n ? \"bg-blue-100 text-blue-700 dark:bg-blue-900 dark:text-blue-300\"\n : \"bg-green-100 text-green-700 dark:bg-green-900 dark:text-green-300\"\n )}\n >\n {status === \"waiting\"\n ? \"Waiting\"\n : status === \"submitted\"\n ? \"Submitted\"\n : \"Processing\"}\n </span>\n </div>\n\n {/* Question */}\n <p className=\"text-sm text-gray-700 dark:text-gray-300 whitespace-pre-wrap\">\n {question}\n </p>\n\n {/* Options (if provided) */}\n {options && options.length > 0 && status === \"waiting\" && (\n <div className=\"flex flex-wrap gap-2\">\n {options.map((option, idx) => (\n <button\n key={idx}\n type=\"button\"\n onClick={() => handleOptionSelect(option)}\n disabled={disabled}\n className={cn(\n \"px-3 py-1.5 text-sm rounded-md border transition-all\",\n selectedOption === option\n ? \"bg-blue-600 text-white border-blue-600 hover:bg-blue-700\"\n : \"bg-white dark:bg-gray-800 border-gray-300 dark:border-gray-600 hover:bg-gray-50 dark:hover:bg-gray-700 text-gray-700 dark:text-gray-300\",\n disabled && \"opacity-50 cursor-not-allowed\"\n )}\n >\n {option}\n </button>\n ))}\n </div>\n )}\n\n {/* Input area (for open-ended or in addition to options) */}\n {status === \"waiting\" && (\n <div className=\"flex gap-2\">\n <textarea\n value={response}\n onChange={(e) => {\n setResponse(e.target.value);\n setSelectedOption(null); // Clear option selection when typing\n }}\n onKeyDown={handleKeyDown}\n placeholder={\n options?.length\n ? \"Or type a custom response...\"\n : \"Type your response...\"\n }\n className={cn(\n \"flex-1 min-h-[60px] px-3 py-2 text-sm resize-none rounded-md border\",\n \"border-gray-300 dark:border-gray-600\",\n \"bg-white dark:bg-gray-800\",\n \"text-gray-900 dark:text-gray-100\",\n \"placeholder-gray-500 dark:placeholder-gray-400\",\n \"focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent\",\n disabled && \"opacity-50 cursor-not-allowed\"\n )}\n disabled={disabled}\n />\n <button\n type=\"button\"\n onClick={handleSubmit}\n disabled={isSubmitDisabled}\n className={cn(\n \"self-end px-4 py-2 rounded-md text-white transition-colors\",\n \"bg-blue-600 hover:bg-blue-700\",\n \"disabled:opacity-50 disabled:cursor-not-allowed\"\n )}\n >\n <SendIcon className=\"h-4 w-4\" />\n </button>\n </div>\n )}\n\n {/* Submitted state */}\n {status !== \"waiting\" && (\n <div className=\"flex items-center gap-2 text-sm text-green-700 dark:text-green-400\">\n <CheckCircleIcon className=\"h-4 w-4\" />\n <span>\n Response submitted:{\" \"}\n <span className=\"font-medium\">{selectedOption || response}</span>\n </span>\n </div>\n )}\n </div>\n );\n}\n\nexport default AskUserPrompt;\n","\"use client\";\n\n/**\n * MarkdownContent - Markdown rendering component for chat messages\n *\n * Renders markdown content with proper styling for:\n * - Headers\n * - Code blocks (with syntax highlighting placeholder)\n * - Tables\n * - Links (open in new tab)\n * - Lists\n * - GFM features (strikethrough, task lists)\n *\n * Ported from: ai-saas-v2/src/extensions/agents/components/playground/PlaygroundChat.tsx (inline)\n *\n * @module @cadraos/sdk/chat\n */\n\nimport { useMemo } from \"react\";\nimport type { Components } from \"react-markdown\";\nimport ReactMarkdown from \"react-markdown\";\nimport remarkGfm from \"remark-gfm\";\n\n// =============================================================================\n// HELPERS\n// =============================================================================\n\nfunction cn(...classes: (string | undefined | false)[]): string {\n return classes.filter(Boolean).join(\" \");\n}\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface MarkdownContentProps {\n /** Markdown content to render */\n content: string;\n /** Additional CSS classes */\n className?: string;\n}\n\n// =============================================================================\n// COMPONENT\n// =============================================================================\n\n/**\n * Renders markdown content with chat-appropriate styling\n *\n * @example\n * ```tsx\n * <MarkdownContent content=\"# Hello\\n\\nThis is **bold** text.\" />\n * ```\n */\nexport function MarkdownContent({ content, className }: MarkdownContentProps) {\n const components: Partial<Components> = useMemo(\n () => ({\n // Headers\n h1: ({ children }) => (\n <h1 className=\"text-2xl font-bold mt-4 mb-2 first:mt-0\">{children}</h1>\n ),\n h2: ({ children }) => (\n <h2 className=\"text-xl font-bold mt-4 mb-2 first:mt-0\">{children}</h2>\n ),\n h3: ({ children }) => (\n <h3 className=\"text-lg font-semibold mt-3 mb-1 first:mt-0\">{children}</h3>\n ),\n h4: ({ children }) => (\n <h4 className=\"text-base font-semibold mt-2 mb-1 first:mt-0\">{children}</h4>\n ),\n\n // Paragraphs\n p: ({ children }) => (\n <p className=\"mb-2 last:mb-0 leading-relaxed\">{children}</p>\n ),\n\n // Lists\n ul: ({ children }) => (\n <ul className=\"list-disc list-inside mb-2 space-y-1\">{children}</ul>\n ),\n ol: ({ children }) => (\n <ol className=\"list-decimal list-inside mb-2 space-y-1\">{children}</ol>\n ),\n li: ({ children }) => (\n <li className=\"leading-relaxed\">{children}</li>\n ),\n\n // Links\n a: ({ href, children }) => (\n <a\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300 underline\"\n >\n {children}\n </a>\n ),\n\n // Tables\n table: ({ children }) => (\n <div className=\"overflow-x-auto my-2\">\n <table className=\"min-w-full divide-y divide-gray-200 dark:divide-gray-700 border border-gray-200 dark:border-gray-700 rounded-lg\">\n {children}\n </table>\n </div>\n ),\n thead: ({ children }) => (\n <thead className=\"bg-gray-50 dark:bg-gray-800\">{children}</thead>\n ),\n tbody: ({ children }) => (\n <tbody className=\"bg-white dark:bg-gray-900 divide-y divide-gray-200 dark:divide-gray-700\">\n {children}\n </tbody>\n ),\n tr: ({ children }) => <tr>{children}</tr>,\n th: ({ children }) => (\n <th className=\"px-3 py-2 text-left text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider\">\n {children}\n </th>\n ),\n td: ({ children }) => (\n <td className=\"px-3 py-2 text-sm text-gray-900 dark:text-gray-100 whitespace-nowrap\">\n {children}\n </td>\n ),\n\n // Blockquotes\n blockquote: ({ children }) => (\n <blockquote className=\"border-l-4 border-gray-300 dark:border-gray-600 pl-4 italic text-gray-600 dark:text-gray-400 my-2\">\n {children}\n </blockquote>\n ),\n\n // Horizontal rule\n hr: () => (\n <hr className=\"my-4 border-gray-200 dark:border-gray-700\" />\n ),\n\n // Strong and emphasis\n strong: ({ children }) => (\n <strong className=\"font-semibold\">{children}</strong>\n ),\n em: ({ children }) => (\n <em className=\"italic\">{children}</em>\n ),\n\n // Strikethrough (GFM)\n del: ({ children }) => (\n <del className=\"line-through text-gray-500 dark:text-gray-400\">\n {children}\n </del>\n ),\n\n // Code - inline and blocks\n code: ({ className: codeClassName, children, ...props }) => {\n // Check if it's a code block (has language class) or inline code\n const isCodeBlock = /language-(\\w+)/.exec(codeClassName || \"\");\n const language = isCodeBlock ? isCodeBlock[1] : null;\n\n if (isCodeBlock) {\n return (\n <div className=\"relative my-2\">\n {language && (\n <div className=\"absolute top-0 right-0 px-2 py-1 text-xs font-mono text-gray-500 dark:text-gray-400 bg-gray-100 dark:bg-gray-800 rounded-bl rounded-tr border-b border-l border-gray-200 dark:border-gray-700\">\n {language}\n </div>\n )}\n <pre className=\"bg-gray-100 dark:bg-gray-800 rounded-lg p-4 overflow-x-auto text-sm\">\n <code className={cn(\"font-mono\", codeClassName)} {...props}>\n {children}\n </code>\n </pre>\n </div>\n );\n }\n\n // Inline code\n return (\n <code\n className=\"bg-gray-100 dark:bg-gray-800 text-gray-800 dark:text-gray-200 px-1.5 py-0.5 rounded text-sm font-mono\"\n {...props}\n >\n {children}\n </code>\n );\n },\n\n // Pre element (for code blocks)\n pre: ({ children }) => (\n <>{children}</>\n ),\n\n // Images\n img: ({ src, alt }) => (\n <img\n src={src}\n alt={alt || \"\"}\n className=\"max-w-full h-auto rounded-lg my-2\"\n loading=\"lazy\"\n />\n ),\n\n // Task lists (GFM)\n input: ({ type, checked, disabled }) => {\n if (type === \"checkbox\") {\n return (\n <input\n type=\"checkbox\"\n checked={checked}\n disabled={disabled}\n readOnly\n className=\"mr-2 rounded border-gray-300 dark:border-gray-600\"\n />\n );\n }\n return <input type={type} />;\n },\n }),\n []\n );\n\n return (\n <div className={cn(\"prose prose-sm dark:prose-invert max-w-none\", className)}>\n <ReactMarkdown remarkPlugins={[remarkGfm]} components={components}>\n {content}\n </ReactMarkdown>\n </div>\n );\n}\n\nexport default MarkdownContent;\n","\"use client\";\n\n/**\n * ToolCallEntry - Tool call visualization component\n *\n * Displays tool calls with:\n * - Status indicators (pending, running, completed, failed)\n * - Collapsible input/output view\n * - Duration display\n * - Formatted tool names\n *\n * Ported from: ai-saas-v2/src/extensions/agents/components/playground/PlaygroundChat.tsx (inline)\n *\n * @module @cadraos/sdk/chat\n */\n\nimport { useMemo, useState } from \"react\";\nimport {\n AlertCircleIcon,\n CheckIcon,\n ChevronDownIcon,\n ChevronRightIcon,\n ClockIcon,\n LoadingSpinner,\n} from \"../icons/index.js\";\nimport type { ToolCall } from \"../types.js\";\n\n// =============================================================================\n// HELPERS\n// =============================================================================\n\nfunction cn(...classes: (string | undefined | false)[]): string {\n return classes.filter(Boolean).join(\" \");\n}\n\n/**\n * Convert tool names from snake_case with prefixes to friendly Title Case\n *\n * Examples:\n * - \"skills_api_create_skill\" -> \"Create Skill\"\n * - \"tools_api_list_tools\" -> \"List Tools\"\n * - \"browse_web_browse_web_page\" -> \"Browse Page\"\n * - \"search_google\" -> \"Search Google\"\n * - \"notion_api_create_page\" -> \"Create Page\"\n */\nfunction formatToolName(toolName: string): string {\n if (!toolName) return toolName;\n\n // Common prefixes to remove (order matters - longer/more specific first)\n const prefixesToRemove = [\n \"skills_api_\",\n \"tools_api_\",\n \"tools_management_api_\",\n \"browse_web_browse_web_\",\n \"browse_web_browse_\",\n \"browse_web_\",\n \"notion_api_\",\n \"google_api_\",\n \"slack_api_\",\n \"github_api_\",\n \"search_api_\",\n \"file_system_\",\n \"code_execution_\",\n \"data_analysis_\",\n \"knowledge_base_\",\n \"memory_api_\",\n \"database_api_\",\n \"email_api_\",\n \"calendar_api_\",\n \"storage_api_\",\n \"api_\",\n ];\n\n let cleanName = toolName;\n\n // Remove known prefixes (can remove multiple)\n let foundPrefix = true;\n while (foundPrefix) {\n foundPrefix = false;\n for (const prefix of prefixesToRemove) {\n if (cleanName.toLowerCase().startsWith(prefix)) {\n cleanName = cleanName.slice(prefix.length);\n foundPrefix = true;\n break;\n }\n }\n }\n\n // Remove duplicate words\n const words = cleanName.split(\"_\");\n const uniqueWords: string[] = [];\n for (const word of words) {\n if (\n uniqueWords.length === 0 ||\n uniqueWords[uniqueWords.length - 1]?.toLowerCase() !== word.toLowerCase()\n ) {\n uniqueWords.push(word);\n }\n }\n\n // Convert to Title Case\n return uniqueWords\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join(\" \");\n}\n\n/**\n * Format duration in a human-readable way\n */\nfunction formatDuration(ms: number): string {\n if (ms < 1000) {\n return `${ms}ms`;\n }\n const seconds = (ms / 1000).toFixed(1);\n return `${seconds}s`;\n}\n\n/**\n * Truncate and format JSON for display\n */\nfunction formatJsonPreview(data: unknown, maxLength = 100): string {\n if (data === undefined || data === null) {\n return String(data);\n }\n try {\n const str = JSON.stringify(data, null, 2);\n if (str.length > maxLength) {\n return str.slice(0, maxLength) + \"...\";\n }\n return str;\n } catch {\n return String(data);\n }\n}\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface ToolCallEntryProps {\n /** Tool call data */\n toolCall: ToolCall;\n /** Additional CSS classes */\n className?: string;\n /** Whether to show the full JSON in expanded view */\n showFullJson?: boolean;\n}\n\n// =============================================================================\n// COMPONENT\n// =============================================================================\n\n/**\n * Displays a single tool call with status and expandable details\n *\n * @example\n * ```tsx\n * <ToolCallEntry\n * toolCall={{\n * id: \"1\",\n * name: \"search_google\",\n * status: \"completed\",\n * args: { query: \"weather today\" },\n * result: { results: [...] },\n * durationMs: 1234,\n * }}\n * />\n * ```\n */\nexport function ToolCallEntry({\n toolCall,\n className,\n showFullJson = true,\n}: ToolCallEntryProps) {\n const [isExpanded, setIsExpanded] = useState(false);\n\n const formattedName = useMemo(\n () => formatToolName(toolCall.name),\n [toolCall.name]\n );\n\n const statusIcon = useMemo(() => {\n switch (toolCall.status) {\n case \"pending\":\n return <ClockIcon className=\"h-4 w-4 text-gray-400\" />;\n case \"running\":\n return <LoadingSpinner className=\"h-4 w-4 text-blue-500\" />;\n case \"completed\":\n return <CheckIcon className=\"h-4 w-4 text-green-500\" />;\n case \"failed\":\n return <AlertCircleIcon className=\"h-4 w-4 text-red-500\" />;\n default:\n return null;\n }\n }, [toolCall.status]);\n\n const statusColor = useMemo(() => {\n switch (toolCall.status) {\n case \"pending\":\n return \"border-gray-200 dark:border-gray-700\";\n case \"running\":\n return \"border-blue-200 dark:border-blue-800 bg-blue-50/50 dark:bg-blue-950/20\";\n case \"completed\":\n return \"border-green-200 dark:border-green-800\";\n case \"failed\":\n return \"border-red-200 dark:border-red-800 bg-red-50/50 dark:bg-red-950/20\";\n default:\n return \"border-gray-200 dark:border-gray-700\";\n }\n }, [toolCall.status]);\n\n return (\n <div\n className={cn(\n \"rounded-lg border text-sm\",\n statusColor,\n className\n )}\n >\n {/* Header - always visible */}\n <button\n type=\"button\"\n onClick={() => setIsExpanded(!isExpanded)}\n className=\"w-full flex items-center gap-2 px-3 py-2 hover:bg-gray-50 dark:hover:bg-gray-800/50 transition-colors rounded-lg\"\n >\n {/* Expand/Collapse icon */}\n {isExpanded ? (\n <ChevronDownIcon className=\"h-4 w-4 text-gray-400 flex-shrink-0\" />\n ) : (\n <ChevronRightIcon className=\"h-4 w-4 text-gray-400 flex-shrink-0\" />\n )}\n\n {/* Status icon */}\n <span className=\"flex-shrink-0\">{statusIcon}</span>\n\n {/* Tool name */}\n <span className=\"font-medium text-gray-900 dark:text-gray-100 truncate\">\n {formattedName}\n </span>\n\n {/* Duration (if completed) */}\n {toolCall.status === \"completed\" && toolCall.durationMs !== undefined && (\n <span className=\"ml-auto text-xs text-gray-500 dark:text-gray-400 flex-shrink-0\">\n {formatDuration(toolCall.durationMs)}\n </span>\n )}\n\n {/* Error indicator */}\n {toolCall.status === \"failed\" && toolCall.error && (\n <span className=\"ml-auto text-xs text-red-600 dark:text-red-400 truncate max-w-[150px]\">\n {toolCall.error}\n </span>\n )}\n </button>\n\n {/* Expanded content */}\n {isExpanded && (\n <div className=\"border-t border-gray-200 dark:border-gray-700 px-3 py-2 space-y-2\">\n {/* Input/Args */}\n {toolCall.args && Object.keys(toolCall.args).length > 0 && (\n <div>\n <div className=\"text-xs font-medium text-gray-500 dark:text-gray-400 mb-1\">\n Input\n </div>\n <pre className=\"bg-gray-100 dark:bg-gray-800 rounded p-2 text-xs overflow-x-auto font-mono text-gray-700 dark:text-gray-300\">\n {showFullJson\n ? JSON.stringify(toolCall.args, null, 2)\n : formatJsonPreview(toolCall.args, 200)}\n </pre>\n </div>\n )}\n\n {/* Output/Result */}\n {toolCall.status === \"completed\" && toolCall.result !== undefined && (\n <div>\n <div className=\"text-xs font-medium text-gray-500 dark:text-gray-400 mb-1\">\n Output\n </div>\n <pre className=\"bg-gray-100 dark:bg-gray-800 rounded p-2 text-xs overflow-x-auto font-mono text-gray-700 dark:text-gray-300 max-h-[200px]\">\n {showFullJson\n ? JSON.stringify(toolCall.result, null, 2)\n : formatJsonPreview(toolCall.result, 500)}\n </pre>\n </div>\n )}\n\n {/* Error details */}\n {toolCall.status === \"failed\" && toolCall.error && (\n <div>\n <div className=\"text-xs font-medium text-red-600 dark:text-red-400 mb-1\">\n Error\n </div>\n <pre className=\"bg-red-50 dark:bg-red-950/30 rounded p-2 text-xs overflow-x-auto font-mono text-red-700 dark:text-red-300\">\n {toolCall.error}\n </pre>\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n\nexport default ToolCallEntry;\n","\"use client\";\n\n/**\n * ChatMessage - Individual message bubble component\n *\n * Displays a single message with:\n * - Role-based styling (user/assistant)\n * - Avatar\n * - Markdown content (for assistant)\n * - Attachments\n * - Tool calls\n * - Thinking blocks\n *\n * @module @cadraos/sdk/chat\n */\n\nimport { useMemo } from \"react\";\nimport { BotIcon, LoadingSpinner, UserIcon } from \"../icons/index.js\";\nimport type { ChatMessage as ChatMessageType } from \"../types.js\";\nimport { MarkdownContent } from \"./MarkdownContent.js\";\nimport { ToolCallEntry } from \"./ToolCallEntry.js\";\n\n// =============================================================================\n// HELPERS\n// =============================================================================\n\nfunction cn(...classes: (string | undefined | false)[]): string {\n return classes.filter(Boolean).join(\" \");\n}\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface ChatMessageProps {\n /** Message data */\n message: ChatMessageType;\n /** Whether to enable markdown rendering */\n enableMarkdown?: boolean;\n /** Whether to show tool calls */\n showToolCalls?: boolean;\n /** Additional CSS classes */\n className?: string;\n}\n\n// =============================================================================\n// COMPONENT\n// =============================================================================\n\n/**\n * Renders a single chat message with appropriate styling\n *\n * @example\n * ```tsx\n * <ChatMessage\n * message={{\n * id: \"1\",\n * role: \"assistant\",\n * content: \"Hello! How can I help?\",\n * timestamp: new Date(),\n * }}\n * enableMarkdown\n * showToolCalls\n * />\n * ```\n */\nexport function ChatMessage({\n message,\n enableMarkdown = true,\n showToolCalls = true,\n className,\n}: ChatMessageProps) {\n const isUser = message.role === \"user\";\n const isAssistant = message.role === \"assistant\";\n\n // Format timestamp\n const formattedTime = useMemo(() => {\n const date = message.timestamp instanceof Date ? message.timestamp : new Date(message.timestamp);\n return date.toLocaleTimeString([], { hour: \"2-digit\", minute: \"2-digit\" });\n }, [message.timestamp]);\n\n return (\n <div\n className={cn(\n \"flex gap-3 p-4\",\n isUser ? \"flex-row-reverse\" : \"flex-row\",\n className\n )}\n >\n {/* Avatar */}\n <div\n className={cn(\n \"flex-shrink-0 w-8 h-8 rounded-full flex items-center justify-center\",\n isUser\n ? \"bg-blue-500 text-white\"\n : \"bg-gray-200 dark:bg-gray-700 text-gray-600 dark:text-gray-300\"\n )}\n >\n {isUser ? (\n <UserIcon className=\"h-4 w-4\" />\n ) : (\n <BotIcon className=\"h-4 w-4\" />\n )}\n </div>\n\n {/* Message content */}\n <div\n className={cn(\n \"flex-1 min-w-0 space-y-2\",\n isUser ? \"text-right\" : \"text-left\"\n )}\n >\n {/* Role label and timestamp */}\n <div\n className={cn(\n \"flex items-center gap-2 text-xs text-gray-500 dark:text-gray-400\",\n isUser ? \"justify-end\" : \"justify-start\"\n )}\n >\n <span className=\"font-medium\">\n {isUser ? \"You\" : \"Assistant\"}\n </span>\n <span>{formattedTime}</span>\n {message.isStreaming && (\n <LoadingSpinner className=\"h-3 w-3\" />\n )}\n </div>\n\n {/* Thinking blocks (for extended thinking models) */}\n {message.thinkingBlocks && message.thinkingBlocks.length > 0 && (\n <div className=\"space-y-2\">\n {message.thinkingBlocks.map((block) => (\n <div\n key={block.id}\n className=\"bg-purple-50 dark:bg-purple-950/30 border border-purple-200 dark:border-purple-800 rounded-lg p-3 text-sm text-purple-800 dark:text-purple-200\"\n >\n <div className=\"text-xs font-medium text-purple-600 dark:text-purple-400 mb-1\">\n Thinking...\n </div>\n <div className=\"whitespace-pre-wrap\">{block.content}</div>\n </div>\n ))}\n </div>\n )}\n\n {/* Main message content */}\n {message.content && (\n <div\n className={cn(\n \"rounded-lg p-3\",\n isUser\n ? \"bg-blue-500 text-white\"\n : \"bg-gray-100 dark:bg-gray-800 text-gray-900 dark:text-gray-100\"\n )}\n >\n {isAssistant && enableMarkdown ? (\n <MarkdownContent content={message.content} />\n ) : (\n <p className=\"whitespace-pre-wrap\">{message.content}</p>\n )}\n </div>\n )}\n\n {/* Tool calls */}\n {showToolCalls && message.toolCalls && message.toolCalls.length > 0 && (\n <div className=\"space-y-2\">\n {message.toolCalls.map((toolCall) => (\n <ToolCallEntry\n key={toolCall.id}\n toolCall={toolCall}\n />\n ))}\n </div>\n )}\n\n {/* Attachments (placeholder - would need AttachmentDisplay) */}\n {message.attachments && message.attachments.length > 0 && (\n <div className=\"flex flex-wrap gap-2\">\n {message.attachments.map((attachment) => (\n <div\n key={attachment.uuid}\n className=\"flex items-center gap-2 bg-gray-100 dark:bg-gray-800 rounded-lg px-3 py-2 text-sm\"\n >\n <span className=\"truncate max-w-[150px]\">\n {attachment.filename}\n </span>\n </div>\n ))}\n </div>\n )}\n </div>\n </div>\n );\n}\n\nexport default ChatMessage;\n","\"use client\";\n\n/**\n * MessageList - Message rendering and scroll management component\n *\n * Features:\n * - Auto-scroll on new messages\n * - Welcome message when empty\n * - Loading state\n * - Streaming indicator\n *\n * @module @cadraos/sdk/chat\n */\n\nimport { useEffect, useRef } from \"react\";\nimport { LoadingSpinner } from \"../icons/index.js\";\nimport type { ChatMessage as ChatMessageType } from \"../types.js\";\nimport { ChatMessage } from \"./ChatMessage.js\";\n\n// =============================================================================\n// HELPERS\n// =============================================================================\n\nfunction cn(...classes: (string | undefined | false)[]): string {\n return classes.filter(Boolean).join(\" \");\n}\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface MessageListProps {\n /** Array of messages to display */\n messages: ChatMessageType[];\n /** Welcome message shown when chat is empty */\n welcomeMessage?: string;\n /** Whether a new message is loading */\n isLoading?: boolean;\n /** Whether the assistant is currently streaming a response */\n isStreaming?: boolean;\n /** Whether session history is being loaded */\n isLoadingHistory?: boolean;\n /** Whether to enable markdown rendering */\n enableMarkdown?: boolean;\n /** Whether to show tool calls */\n showToolCalls?: boolean;\n /** Additional CSS classes */\n className?: string;\n}\n\n// =============================================================================\n// COMPONENT\n// =============================================================================\n\n/**\n * Renders a scrollable list of chat messages with auto-scroll\n *\n * @example\n * ```tsx\n * <MessageList\n * messages={messages}\n * welcomeMessage=\"Hello! How can I help you today?\"\n * isLoading={isLoading}\n * isStreaming={isStreaming}\n * enableMarkdown\n * showToolCalls\n * />\n * ```\n */\nexport function MessageList({\n messages,\n welcomeMessage = \"Hello! How can I help you today?\",\n isLoading = false,\n isStreaming = false,\n isLoadingHistory = false,\n enableMarkdown = true,\n showToolCalls = true,\n className,\n}: MessageListProps) {\n const scrollRef = useRef<HTMLDivElement>(null);\n const messagesEndRef = useRef<HTMLDivElement>(null);\n\n // Auto-scroll to bottom when messages change or streaming\n useEffect(() => {\n if (messagesEndRef.current) {\n messagesEndRef.current.scrollIntoView({ behavior: \"smooth\" });\n }\n }, [messages, isStreaming]);\n\n return (\n <div\n ref={scrollRef}\n className={cn(\n \"flex-1 overflow-y-auto\",\n className\n )}\n >\n {/* Loading history indicator */}\n {isLoadingHistory && (\n <div className=\"flex items-center justify-center h-full p-8\">\n <div className=\"text-center text-gray-500 dark:text-gray-400\">\n <LoadingSpinner className=\"h-6 w-6 mx-auto mb-2\" />\n <p className=\"text-sm\">Loading conversation...</p>\n </div>\n </div>\n )}\n\n {/* Welcome message when empty */}\n {messages.length === 0 && !isLoading && !isLoadingHistory && (\n <div className=\"flex items-center justify-center h-full p-8\">\n <div className=\"text-center text-gray-500 dark:text-gray-400\">\n <p className=\"text-lg\">{welcomeMessage}</p>\n </div>\n </div>\n )}\n\n {/* Message list */}\n <div className=\"divide-y divide-gray-100 dark:divide-gray-800\">\n {messages.map((message) => (\n <ChatMessage\n key={message.id}\n message={message}\n enableMarkdown={enableMarkdown}\n showToolCalls={showToolCalls}\n />\n ))}\n </div>\n\n {/* Loading indicator (waiting for response) */}\n {isLoading && !isStreaming && (\n <div className=\"flex items-center gap-3 p-4\">\n <div className=\"flex-shrink-0 w-8 h-8 rounded-full bg-gray-200 dark:bg-gray-700 flex items-center justify-center\">\n <LoadingSpinner className=\"h-4 w-4 text-gray-600 dark:text-gray-300\" />\n </div>\n <div className=\"text-sm text-gray-500 dark:text-gray-400\">\n Thinking...\n </div>\n </div>\n )}\n\n {/* Scroll anchor */}\n <div ref={messagesEndRef} />\n </div>\n );\n}\n\nexport default MessageList;\n","\"use client\";\n\n/**\n * AgentChat - Main chat component for AI SaaS SDK\n *\n * Drop-in chat interface for interacting with AI agents.\n * Composes all sub-components and integrates with useAgentChat hook.\n *\n * @module @cadraos/sdk/chat\n */\nimport type { ChatAdapter } from \"../adapters/types.js\";\nimport { useAgentChat } from \"../hooks/useAgentChat.js\";\nimport { AlertCircleIcon, XIcon } from \"../icons/index.js\";\nimport type { ChatError, ChatMessage, ClarificationData, ThemeMode } from \"../types.js\";\nimport { ChatContainer } from \"./ChatContainer.js\";\nimport { ChatInput } from \"./ChatInput.js\";\nimport { AskUserPrompt } from \"./internal-tools/AskUserPrompt.js\";\nimport { MessageList } from \"./MessageList.js\";\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface AgentChatProps {\n /** The UUID of the agent to chat with */\n agentId: string;\n\n /**\n * Session ID to resume an existing conversation\n * When provided, the component will load the session's chat history\n */\n sessionId?: string;\n\n /** Custom adapter (optional - uses context if not provided) */\n adapter?: ChatAdapter;\n\n /** Callback fired when a new message is added */\n onMessage?: (message: ChatMessage) => void;\n\n /** Callback fired when an error occurs */\n onError?: (error: ChatError) => void;\n\n /**\n * Callback fired when a new session is created\n * Called with the sessionId when starting a new chat (no existing sessionId)\n * Useful for updating external state like session lists\n */\n onSessionCreated?: (sessionId: string) => void;\n\n /** @deprecated Use onSessionCreated instead */\n onSessionStart?: (sessionId: string) => void;\n\n /** Callback fired when a tool is called */\n onToolCall?: (toolName: string, args: unknown) => void;\n\n /** Callback fired when clarification is needed */\n onClarification?: (data: ClarificationData) => void;\n\n /** Initial messages to populate the chat */\n initialMessages?: ChatMessage[];\n\n /** Placeholder text for the input */\n placeholder?: string;\n\n /** Welcome message shown when chat is empty */\n welcomeMessage?: string;\n\n /** Maximum height of the chat container */\n maxHeight?: string | number;\n\n /** Additional CSS class for the container */\n className?: string;\n\n /** Theme mode */\n theme?: ThemeMode;\n\n /** Enable file attachments (future feature) */\n enableAttachments?: boolean;\n\n /** Enable markdown rendering */\n enableMarkdown?: boolean;\n\n /** Show tool call visualization */\n showToolCalls?: boolean;\n}\n\n// =============================================================================\n// ERROR BANNER COMPONENT\n// =============================================================================\n\ninterface ErrorBannerProps {\n error: ChatError;\n onRetry?: () => void;\n onDismiss?: () => void;\n}\n\nfunction ErrorBanner({ error, onRetry, onDismiss }: ErrorBannerProps) {\n return (\n <div className=\"flex items-center justify-between gap-3 px-4 py-3 bg-red-50 dark:bg-red-950/30 border-t border-red-200 dark:border-red-800 text-red-700 dark:text-red-300 text-sm\">\n <div className=\"flex items-center gap-2\">\n <AlertCircleIcon className=\"h-4 w-4 flex-shrink-0\" />\n <span className=\"truncate\">{error.message}</span>\n </div>\n <div className=\"flex items-center gap-2 flex-shrink-0\">\n {error.retryable && onRetry && (\n <button\n onClick={onRetry}\n className=\"text-red-600 dark:text-red-400 hover:underline font-medium\"\n >\n Retry\n </button>\n )}\n {onDismiss && (\n <button\n onClick={onDismiss}\n className=\"p-1 hover:bg-red-100 dark:hover:bg-red-900/30 rounded\"\n aria-label=\"Dismiss error\"\n >\n <XIcon className=\"h-4 w-4\" />\n </button>\n )}\n </div>\n </div>\n );\n}\n\n// =============================================================================\n// MAIN COMPONENT\n// =============================================================================\n\n/**\n * Complete chat interface for interacting with AI agents\n *\n * @example\n * ```tsx\n * // With ChatConfigProvider (recommended for API key users)\n * <ChatConfigProvider config={{ baseUrl: '...', apiKey: '...' }}>\n * <AgentChat\n * agentId=\"agent-uuid\"\n * onMessage={(msg) => console.log('New message:', msg)}\n * />\n * </ChatConfigProvider>\n *\n * // With custom adapter\n * <AgentChat\n * agentId=\"agent-uuid\"\n * adapter={myCustomAdapter}\n * />\n * ```\n */\nexport function AgentChat({\n agentId,\n sessionId,\n adapter,\n onMessage,\n onError,\n onSessionCreated,\n onSessionStart,\n onToolCall,\n onClarification,\n initialMessages = [],\n placeholder = \"Type a message...\",\n welcomeMessage = \"Hello! How can I help you today?\",\n maxHeight = \"600px\",\n className,\n theme = \"system\",\n enableAttachments = false,\n enableMarkdown = true,\n showToolCalls = true,\n}: AgentChatProps) {\n const {\n messages,\n isLoading,\n isStreaming,\n isLoadingHistory,\n error,\n clarification,\n sendMessage,\n respondToClarification,\n cancel,\n retry,\n clearError,\n } = useAgentChat({\n agentId,\n sessionId,\n adapter,\n initialMessages,\n onMessage,\n onError,\n onSessionCreated,\n onSessionStart,\n onToolCall,\n onClarification,\n });\n\n return (\n <ChatContainer maxHeight={maxHeight} className={className} theme={theme}>\n {/* Message list */}\n <MessageList\n messages={messages}\n welcomeMessage={welcomeMessage}\n isLoading={isLoading}\n isStreaming={isStreaming}\n isLoadingHistory={isLoadingHistory}\n enableMarkdown={enableMarkdown}\n showToolCalls={showToolCalls}\n />\n\n {/* Clarification prompt */}\n {clarification && (\n <div className=\"border-t border-gray-200 dark:border-gray-700 p-4\">\n <AskUserPrompt\n question={clarification.question}\n options={clarification.suggestedOptions}\n onSubmit={respondToClarification}\n />\n </div>\n )}\n\n {/* Error banner */}\n {error && (\n <ErrorBanner error={error} onRetry={retry} onDismiss={clearError} />\n )}\n\n {/* Input area */}\n <ChatInput\n onSend={sendMessage}\n onStop={isStreaming ? cancel : undefined}\n placeholder={placeholder}\n disabled={!!clarification || isLoadingHistory}\n isLoading={isLoading}\n enableAttachments={enableAttachments}\n />\n </ChatContainer>\n );\n}\n\nexport default AgentChat;\n","\"use client\";\n\n/**\n * TodoList Component\n *\n * Displays the agent's task list from todo_write tool.\n * Shows tasks with status indicators and progress.\n *\n * Ported from: ai-saas-v2/src/extensions/agents/components/playground/internal-tools/TodoList.tsx\n *\n * @module @cadraos/sdk/chat\n */\n\nimport { useMemo, useState } from \"react\";\nimport {\n CheckCircleIcon,\n ChevronDownIcon,\n ChevronRightIcon,\n CircleIcon,\n ListTodoIcon,\n LoadingSpinner,\n} from \"../../icons/index.js\";\nimport type { TodoItem } from \"../../types.js\";\n\n// =============================================================================\n// HELPERS\n// =============================================================================\n\nfunction cn(...classes: (string | undefined | false)[]): string {\n return classes.filter(Boolean).join(\" \");\n}\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface TodoListProps {\n /** List of todo items */\n todos: TodoItem[];\n /** Whether the list is collapsible */\n collapsible?: boolean;\n /** Default collapsed state */\n defaultCollapsed?: boolean;\n /** Custom title */\n title?: string;\n /** Additional CSS classes */\n className?: string;\n}\n\n// =============================================================================\n// COMPONENT\n// =============================================================================\n\n/**\n * Displays a task list with progress tracking\n *\n * @example\n * ```tsx\n * <TodoList\n * todos={[\n * { content: \"Research topic\", status: \"completed\", activeForm: \"Researching topic\" },\n * { content: \"Write outline\", status: \"in_progress\", activeForm: \"Writing outline\" },\n * { content: \"Draft document\", status: \"pending\", activeForm: \"Drafting document\" },\n * ]}\n * />\n * ```\n */\nexport function TodoList({\n todos,\n collapsible = true,\n defaultCollapsed = false,\n title = \"Task Progress\",\n className,\n}: TodoListProps) {\n const [isCollapsed, setIsCollapsed] = useState(defaultCollapsed);\n\n const stats = useMemo(() => {\n const total = todos.length;\n const completed = todos.filter((t) => t.status === \"completed\").length;\n const inProgress = todos.filter((t) => t.status === \"in_progress\").length;\n const pending = todos.filter((t) => t.status === \"pending\").length;\n const progress = total > 0 ? (completed / total) * 100 : 0;\n return { total, completed, inProgress, pending, progress };\n }, [todos]);\n\n // Find current task (in_progress)\n const currentTask = useMemo(\n () => todos.find((t) => t.status === \"in_progress\"),\n [todos]\n );\n\n if (todos.length === 0) {\n return null;\n }\n\n return (\n <div\n className={cn(\n \"rounded-lg border border-gray-200 dark:border-gray-700 overflow-hidden\",\n className\n )}\n >\n {/* Header */}\n <div\n className={cn(\n \"flex items-center gap-2 px-3 py-2 bg-gray-50 dark:bg-gray-800/50\",\n collapsible && \"cursor-pointer hover:bg-gray-100 dark:hover:bg-gray-800\"\n )}\n onClick={collapsible ? () => setIsCollapsed(!isCollapsed) : undefined}\n >\n {collapsible &&\n (isCollapsed ? (\n <ChevronRightIcon className=\"h-4 w-4 text-gray-500\" />\n ) : (\n <ChevronDownIcon className=\"h-4 w-4 text-gray-500\" />\n ))}\n <ListTodoIcon className=\"h-4 w-4 text-gray-600 dark:text-gray-400\" />\n <span className=\"text-sm font-medium text-gray-700 dark:text-gray-300\">\n {title}\n </span>\n\n {/* Progress badge */}\n <span className=\"ml-auto text-xs px-2 py-1 rounded-full bg-gray-200 dark:bg-gray-700 text-gray-700 dark:text-gray-300 font-medium\">\n {stats.completed}/{stats.total}\n </span>\n </div>\n\n {/* Progress bar */}\n <div className=\"h-1 bg-gray-200 dark:bg-gray-700\">\n <div\n className=\"h-full bg-blue-500 transition-all duration-300\"\n style={{ width: `${stats.progress}%` }}\n />\n </div>\n\n {/* Current task indicator (always visible when collapsed) */}\n {currentTask && isCollapsed && (\n <div className=\"px-3 py-2 flex items-center gap-2 text-sm border-t border-gray-100 dark:border-gray-700\">\n <LoadingSpinner className=\"h-3.5 w-3.5 text-blue-500\" />\n <span className=\"text-gray-600 dark:text-gray-400 truncate\">\n {currentTask.activeForm}\n </span>\n </div>\n )}\n\n {/* Task list (collapsible) */}\n {!isCollapsed && (\n <ul className=\"divide-y divide-gray-100 dark:divide-gray-700\">\n {todos.map((todo, idx) => (\n <li\n key={idx}\n className={cn(\n \"px-3 py-2 flex items-start gap-2 text-sm\",\n todo.status === \"in_progress\" && \"bg-blue-50/50 dark:bg-blue-950/20\",\n todo.status === \"completed\" && \"opacity-60\"\n )}\n >\n {/* Status icon */}\n <div className=\"mt-0.5 flex-shrink-0\">\n {todo.status === \"completed\" ? (\n <CheckCircleIcon className=\"h-4 w-4 text-green-600 dark:text-green-500\" />\n ) : todo.status === \"in_progress\" ? (\n <LoadingSpinner className=\"h-4 w-4 text-blue-500\" />\n ) : (\n <CircleIcon className=\"h-4 w-4 text-gray-300 dark:text-gray-600\" />\n )}\n </div>\n\n {/* Task content */}\n <div className=\"flex-1 min-w-0\">\n <p\n className={cn(\n \"text-gray-700 dark:text-gray-300\",\n todo.status === \"completed\" && \"line-through\"\n )}\n >\n {todo.status === \"in_progress\" ? todo.activeForm : todo.content}\n </p>\n </div>\n\n {/* Status badge for in_progress */}\n {todo.status === \"in_progress\" && (\n <span className=\"text-xs px-2 py-0.5 rounded-full bg-blue-500 text-white font-medium flex-shrink-0\">\n Active\n </span>\n )}\n </li>\n ))}\n </ul>\n )}\n </div>\n );\n}\n\nexport default TodoList;\n"]}