@paymanai/payman-ask-sdk 4.0.8 → 4.0.10

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.
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/contexts/PaymanChatContext.tsx","../src/utils/cn.ts","../src/utils/formatDate.ts","../src/utils/sentryContext.ts","../src/utils/slashCommands.ts","../src/utils/errorMessages.ts","../src/utils/sentry.ts","../src/utils/feedbackClient.ts","../src/components/AgentMessage/ImageLightbox.tsx","../src/components/AgentMessage/MarkdownImage.tsx","../src/components/AgentMessage/markdownComponents.tsx","../src/components/AgentMessage/index.tsx","../src/components/UserMessage/index.tsx","../src/components/MessageRow/index.tsx","../src/components/MessageRowSkeleton/index.tsx","../src/components/MessageList/index.tsx","../src/components/ResetSessionConfirmModal/index.tsx","../src/components/v2/ActionTooltipV2.tsx","../src/components/v2/UserMessageV2.tsx","../src/components/v2/MarkdownImageV2.tsx","../src/components/v2/MarkdownRendererV2.tsx","../src/components/v2/ThinkingBlockV2.tsx","../src/components/v2/FeedbackReasonModal.tsx","../src/components/v2/useTypingEffect.ts","../src/components/v2/AssistantMessageV2.tsx","../src/components/v2/OtpInputV2.tsx","../src/components/v2/VerificationCardV2.tsx","../src/components/v2/MessageListV2.tsx","../src/components/v2/ChatInputV2.tsx","../src/components/v2/StreamingIndicatorV2.tsx","../src/components/v2/ImageLightboxV2.tsx","../src/components/v2/TraceTimelineModal.tsx","../src/components/PaymanChat/index.tsx"],"names":["init","Sentry2","frameStyle","jsxs","jsx","Loader2","useState","useEffect","motion","AnimatePresence","useMemo","X","useRef","useCallback","Fragment","createPortal","Check","RAG_IMAGE_PATH_REGEX","isUnresolvedRagImageSource","ReactMarkdown","remarkGfm","ChevronDown","AlertCircle","Copy","Binoculars","SCROLL_THRESHOLD","MessageListV2","ArrowDown","forwardRef","ChatInputV2","useImperativeHandle","Pencil","RotateCcw","PaymanChatInner","isEmpty","PaymanChat"],"mappings":"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","file":"index.mjs","sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { MessageDisplay } from \"../types\";\n\nexport interface PaymanChatContextValue {\n\t/**\n\t * Clear all messages and reset the chat\n\t */\n\tresetSession: () => void;\n\n\t/**\n\t * Clear all messages without resetting session ID\n\t */\n\tclearMessages: () => void;\n\n\t/**\n\t * Prepend older messages to the top of the list (e.g. from history pagination)\n\t */\n\tprependMessages: (messages: MessageDisplay[]) => void;\n\n\t/**\n\t * Cancel current streaming operation\n\t */\n\tcancelStream: () => void;\n\n\t/**\n\t * Get current session ID\n\t */\n\tgetSessionId: () => string | undefined;\n\n\t/**\n\t * Get all messages\n\t */\n\tgetMessages: () => MessageDisplay[];\n\n\t/**\n\t * Check if currently waiting for response\n\t */\n\tisWaitingForResponse: boolean;\n}\n\nexport const PaymanChatContext = createContext<\n\tPaymanChatContextValue | undefined\n>(undefined);\n\n/**\n * Hook to access PaymanChat controls from parent components\n * \n * @example\n * ```tsx\n * function MyComponent() {\n * const chat = usePaymanChat();\n * \n * return (\n * <>\n * <button onClick={chat.resetSession}>Reset</button>\n * <button onClick={chat.clearMessages}>Clear</button>\n * </>\n * );\n * }\n * ```\n */\nexport function usePaymanChat(): PaymanChatContextValue {\n\tconst context = useContext(PaymanChatContext);\n\tif (!context) {\n\t\tthrow new Error(\"usePaymanChat must be used within a PaymanChat component\");\n\t}\n\treturn context;\n}\n","import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n/**\n * Utility function to merge Tailwind CSS classes\n */\nexport function cn(...inputs: ClassValue[]) {\n\treturn twMerge(clsx(inputs));\n}\n","/**\n * Format a timestamp to a readable date/time string\n */\nexport function formatDate(timestamp: string | Date): string {\n\tconst date = typeof timestamp === \"string\" ? new Date(timestamp) : timestamp;\n\n\tconst now = new Date();\n\tconst diffMs = now.getTime() - date.getTime();\n\tconst diffMins = Math.floor(diffMs / 60000);\n\tconst diffHours = Math.floor(diffMs / 3600000);\n\tconst diffDays = Math.floor(diffMs / 86400000);\n\n\t// Less than a minute\n\tif (diffMins < 1) {\n\t\treturn \"Just now\";\n\t}\n\n\t// Less than an hour\n\tif (diffMins < 60) {\n\t\treturn `${diffMins}m ago`;\n\t}\n\n\t// Less than a day\n\tif (diffHours < 24) {\n\t\treturn `${diffHours}h ago`;\n\t}\n\n\t// Less than a week\n\tif (diffDays < 7) {\n\t\treturn `${diffDays}d ago`;\n\t}\n\n\t// Format as date\n\treturn date.toLocaleDateString(\"en-US\", {\n\t\tmonth: \"short\",\n\t\tday: \"numeric\",\n\t\tyear: date.getFullYear() !== now.getFullYear() ? \"numeric\" : undefined,\n\t});\n}\n\nexport function formatElapsedTime(ms?: number): string {\n\tif (!ms) return \"\";\n\tif (ms < 1000) return `${ms}ms`;\n\treturn `${(ms / 1000).toFixed(1)}s`;\n}\n","import * as Sentry from \"@sentry/react\";\n\nexport interface ChatSessionContext {\n\tsessionId?: string;\n\tsessionOwnerId?: string;\n\tagentId?: string;\n\texecutionId?: string;\n\tcfRay?: string;\n\troute?: string;\n\tcustomerId?: string;\n\tcustomerEmail?: string;\n}\n\n/**\n * Reports an error to Sentry enriched with chat session context.\n * Tags and context are scoped to this event so they don't leak\n * to unrelated errors.\n *\n * No-op when Sentry is not initialised.\n */\nexport function captureSentryError(\n\terror: Error | string,\n\tcontext: ChatSessionContext\n): void {\n\tif (!Sentry.getClient()) return;\n\n\tconst tags: Record<string, string> = {};\n\tif (context.executionId) tags.executionId = context.executionId;\n\tif (context.sessionId) tags.sessionId = context.sessionId;\n\tif (context.route) tags.route = context.route;\n\tif (context.cfRay) tags.cfRay = context.cfRay;\n\n\tif (context.customerId) tags.customerId = context.customerId;\n\tif (context.customerEmail) tags.customerEmail = context.customerEmail;\n\n\tconst contexts = {\n\t\tchat_session: {\n\t\t\tsessionId: context.sessionId ?? null,\n\t\t\tsessionOwnerId: context.sessionOwnerId ?? null,\n\t\t\texecutionId: context.executionId ?? null,\n\t\t\tagentId: context.agentId ?? null,\n\t\t\tcfRay: context.cfRay ?? null,\n\t\t\tcustomerId: context.customerId ?? null,\n\t\t\tcustomerEmail: context.customerEmail ?? null,\n\t\t},\n\t};\n\n\tif (typeof error === \"string\") {\n\t\tSentry.captureMessage(error, { level: \"error\", tags, contexts });\n\t} else {\n\t\tSentry.captureException(error, { tags, contexts });\n\t}\n}\n\n// ---------------------------------------------------------------------------\n// Targeted fetch interceptor for capturing cf-ray headers\n// ---------------------------------------------------------------------------\n\ntype CfRayListener = (cfRay: string) => void;\n\ninterface InterceptorEntry {\n\turlPattern: string;\n\tlistener: CfRayListener;\n}\n\nconst interceptors: Set<InterceptorEntry> = new Set();\nlet originalFetch: typeof globalThis.fetch | null = null;\n\nfunction patchFetch(): void {\n\tif (originalFetch !== null) return;\n\tif (typeof globalThis === \"undefined\" || typeof globalThis.fetch !== \"function\")\n\t\treturn;\n\n\toriginalFetch = globalThis.fetch;\n\n\tglobalThis.fetch = async function (\n\t\tthis: typeof globalThis,\n\t\tinput: RequestInfo | URL,\n\t\tinit?: RequestInit\n\t): Promise<Response> {\n\t\tconst response = await originalFetch!.call(this, input, init);\n\n\t\tif (interceptors.size > 0) {\n\t\t\tconst url =\n\t\t\t\ttypeof input === \"string\"\n\t\t\t\t\t? input\n\t\t\t\t\t: input instanceof URL\n\t\t\t\t\t\t? input.href\n\t\t\t\t\t\t: (input as Request).url;\n\n\t\t\ttry {\n\t\t\t\tconst cfRay = response.headers.get(\"cf-ray\");\n\t\t\t\tif (cfRay) {\n\t\t\t\t\tfor (const entry of interceptors) {\n\t\t\t\t\t\tif (url.includes(entry.urlPattern)) {\n\t\t\t\t\t\t\tentry.listener(cfRay);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t// headers may be inaccessible on opaque responses\n\t\t\t}\n\t\t}\n\n\t\treturn response;\n\t};\n}\n\nfunction maybeUnpatchFetch(): void {\n\tif (interceptors.size > 0 || originalFetch === null) return;\n\tglobalThis.fetch = originalFetch;\n\toriginalFetch = null;\n}\n\n/**\n * Registers a listener that receives the `cf-ray` header value whenever a\n * fetch response URL contains `urlPattern`.\n *\n * Returns an unsubscribe function (call on unmount).\n */\nexport function subscribeToCfRay(\n\turlPattern: string,\n\tlistener: CfRayListener\n): () => void {\n\tconst entry: InterceptorEntry = { urlPattern, listener };\n\tpatchFetch();\n\tinterceptors.add(entry);\n\treturn () => {\n\t\tinterceptors.delete(entry);\n\t\tmaybeUnpatchFetch();\n\t};\n}\n","import type { SlashCommandConfig } from \"../types\";\n\nexport const DEFAULT_SLASH_COMMANDS: SlashCommandConfig[] = [\n\t{\n\t\tname: \"/draft-knowledge\",\n\t\tdescription: \"Create a Knowledge Vault draft for admin review\",\n\t\trequiredAnyPermissions: [\"vault:author\", \"vault:publish\"],\n\t},\n];\n\nfunction hasCommandPermission(\n\tgranted: Set<string>,\n\trequiredPermission: string,\n): boolean {\n\tif (granted.has(\"*\") || granted.has(requiredPermission)) return true;\n\tif (!requiredPermission.includes(\".\")) return false;\n\tconst wildcard =\n\t\trequiredPermission.substring(0, requiredPermission.lastIndexOf(\".\")) + \".*\";\n\treturn granted.has(wildcard);\n}\n\nexport function filterSlashCommands(\n\tcommands: SlashCommandConfig[],\n\tpermissions: string[] | undefined,\n): SlashCommandConfig[] {\n\tconst granted = new Set(permissions ?? []);\n\treturn commands.filter((command) => {\n\t\tconst required = command.requiredAnyPermissions ?? [];\n\t\treturn (\n\t\t\trequired.length === 0 ||\n\t\t\trequired.some((permission) => hasCommandPermission(granted, permission))\n\t\t);\n\t});\n}\n\nexport function parseSlashCommand(content: string): {\n\tcommand: string;\n\tbody: string;\n} | null {\n\tconst trimmedStart = content.trimStart();\n\tif (!trimmedStart.startsWith(\"/\")) return null;\n\tconst match = trimmedStart.match(/^(\\/[a-z][a-z0-9-]*)(?:\\s+([\\s\\S]*))?$/i);\n\tif (!match) return null;\n\treturn {\n\t\tcommand: match[1],\n\t\tbody: match[2] ?? \"\",\n\t};\n}\n\nexport function slashCommandBodyIsEmpty(content: string): boolean {\n\tconst parsed = parseSlashCommand(content);\n\treturn parsed?.command === \"/draft-knowledge\" && parsed.body.trim().length === 0;\n}\n\nexport function getSlashCommandValidationHint(content: string): string | null {\n\tconst parsed = parseSlashCommand(content);\n\tif (parsed?.command !== \"/draft-knowledge\") return null;\n\n\tconst lines = parsed.body.split(/\\r?\\n/);\n\tconst title = lines[0]?.trim() ?? \"\";\n\tconst markdownContent = lines.slice(1).join(\"\\n\").trim();\n\n\tif (!title) {\n\t\treturn \"Add a title after /draft-knowledge, then add markdown content on the next line.\";\n\t}\n\tif (!markdownContent) {\n\t\treturn \"Add markdown content on a new line below the title.\";\n\t}\n\treturn null;\n}\n","const WORKFLOW_FAILED = \"WORKFLOW_FAILED\";\nconst STREAM_NOT_STARTED = \"STREAM_NOT_STARTED\";\nconst HTTP_ERROR_PREFIX = /^HTTP\\s+(\\d+)\\s*:\\s*([\\s\\S]+)$/;\n\ntype ErrorPayload = {\n\tstatus?: number;\n\tmessage?: string;\n};\n\nexport function isFriendlyWorkflowError(errorDetails?: string): boolean {\n\tif (!errorDetails) return false;\n\n\treturn (\n\t\terrorDetails === WORKFLOW_FAILED ||\n\t\terrorDetails === STREAM_NOT_STARTED ||\n\t\terrorDetails.includes(WORKFLOW_FAILED)\n\t);\n}\n\nfunction parseErrorPayload(payload: string): ErrorPayload {\n\ttry {\n\t\tconst parsed = JSON.parse(payload) as unknown;\n\n\t\tif (typeof parsed === \"string\") {\n\t\t\treturn { message: parsed.trim() || undefined };\n\t\t}\n\n\t\tif (typeof parsed === \"object\" && parsed !== null) {\n\t\t\tconst record = parsed as Record<string, unknown>;\n\t\t\treturn {\n\t\t\t\tstatus:\n\t\t\t\t\ttypeof record.status === \"number\" ? record.status : undefined,\n\t\t\t\tmessage:\n\t\t\t\t\ttypeof record.message === \"string\" && record.message.trim()\n\t\t\t\t\t\t? record.message.trim()\n\t\t\t\t\t\t: undefined,\n\t\t\t};\n\t\t}\n\t} catch {\n\t\t// Ignore invalid JSON payloads and fall back to plain-text handling.\n\t}\n\n\treturn {};\n}\n\nexport function getConflictErrorMessage(errorDetails?: string): string | undefined {\n\tif (!errorDetails) return undefined;\n\n\tconst trimmedError = errorDetails.trim();\n\tconst httpMatch = trimmedError.match(HTTP_ERROR_PREFIX);\n\tconst httpStatus = httpMatch ? Number(httpMatch[1]) : undefined;\n\tconst rawPayload = (httpMatch ? httpMatch[2] : trimmedError).trim();\n\tconst payload = parseErrorPayload(rawPayload);\n\tconst status = payload.status ?? httpStatus;\n\n\tif (status !== 409) {\n\t\treturn undefined;\n\t}\n\n\tif (payload.message) {\n\t\treturn payload.message;\n\t}\n\n\treturn rawPayload || undefined;\n}\n","import * as Sentry from \"@sentry/react\";\n\n/**\n * Initialise Sentry inside the SDK.\n * Only runs when a DSN is provided and Sentry has not already been initialised\n * by the host application, so it is safe to call even if the host also calls\n * Sentry.init().\n */\nexport function initSentryIfNeeded(dsn: string): void {\n\tif (!dsn) return;\n\n\t// getClient() returns undefined when Sentry has not been initialised yet\n\tif (Sentry.getClient()) return;\n\n\tSentry.init({\n\t\tdsn,\n\t\tsendDefaultPii: true,\n\t\tinitialScope: {\n\t\t\ttags: { source: \"payman-ask-sdk\" },\n\t\t},\n\t});\n}\n","// Feedback persistence for assistant responses. A thumbs-up is `POSITIVE`;\n// a thumbs-down resolves to one specific negative reason. The values mirror\n// the backend `Feedback` enum exactly — do not rename without changing the\n// k2-server enum (cloud.yaak.core.model.enums.Feedback).\n\nexport const NEGATIVE_FEEDBACK_REASONS = [\n\t{ value: \"NOT_FACTUALLY_CORRECT\", label: \"Not factually correct\" },\n\t{ value: \"INCOMPLETE_RESPONSE\", label: \"Incomplete response\" },\n\t{ value: \"DID_NOT_FOLLOW_REQUEST\", label: \"Did not follow my request\" },\n\t{ value: \"OVERACTIVE_REFUSAL\", label: \"Refused unnecessarily\" },\n\t{ value: \"ISSUE_WITH_THOUGHT_PROCESS\", label: \"Issue with reasoning\" },\n\t{ value: \"REPORT_CONTENT\", label: \"Report content\" },\n\t{ value: \"OTHER\", label: \"Other\" },\n] as const;\n\nexport type NegativeFeedbackReason =\n\t(typeof NEGATIVE_FEEDBACK_REASONS)[number][\"value\"];\n\n/** The full feedback value sent to the backend. */\nexport type FeedbackValue = \"POSITIVE\" | NegativeFeedbackReason;\n\nconst DEFAULT_STREAM_ENDPOINT = \"/api/playground/ask/stream\";\n\n/**\n * Handler threaded down to the message components. Resolves when the\n * feedback is durably saved and rejects when the POST fails, so the UI can\n * revert its optimistic state or surface an error.\n */\nexport type SubmitFeedbackHandler = (data: {\n\tmessageId: string;\n\texecutionId?: string;\n\tfeedback: FeedbackValue;\n\tdetails?: string;\n}) => Promise<void>;\n\nexport type SubmitFeedbackArgs = {\n\tbaseUrl: string;\n\t/**\n\t * The chat's streamEndpoint. The feedback path is derived from it the same\n\t * way the SDK derives other sub-resources (strip the trailing `/stream`,\n\t * append `/executions/{id}/feedback`) so it lands on the matching surface:\n\t * /api/playground/ask/stream → /api/playground/ask/executions/{id}/feedback (JWT)\n\t * /api/ask/stream → /api/ask/executions/{id}/feedback (api key)\n\t */\n\tstreamEndpoint?: string;\n\t/** Auth — mirrors buildRequestHeaders: custom headers + optional Bearer. */\n\theaders?: Record<string, string>;\n\tauthToken?: string;\n\t/** Deployment stage, forwarded as a query param like the stream call. */\n\tstage?: string;\n\tstageQueryParam?: string;\n\texecutionId: string;\n\tfeedback: FeedbackValue;\n\tdetails?: string;\n\tsignal?: AbortSignal;\n};\n\n/**\n * POST feedback for one execution. Resolves the URL and auth from the same\n * config the chat stream uses, so it works on both the JWT playground surface\n * and the API-key /api/ask surface. Throws on a non-2xx response.\n */\nexport async function submitFeedback({\n\tbaseUrl,\n\tstreamEndpoint,\n\theaders,\n\tauthToken,\n\tstage,\n\tstageQueryParam,\n\texecutionId,\n\tfeedback,\n\tdetails,\n\tsignal,\n}: SubmitFeedbackArgs): Promise<void> {\n\tconst base = baseUrl.replace(/\\/+$/, \"\");\n\tconst endpointPath = (streamEndpoint || DEFAULT_STREAM_ENDPOINT)\n\t\t.split(\"?\")[0]\n\t\t.replace(/\\/+$/, \"\");\n\tconst basePath = endpointPath.endsWith(\"/stream\")\n\t\t? endpointPath.slice(0, -\"/stream\".length)\n\t\t: endpointPath;\n\n\tconst query = new URLSearchParams();\n\tif (stage) query.set(stageQueryParam ?? \"stage\", stage);\n\tconst qs = query.toString() ? `?${query.toString()}` : \"\";\n\n\tconst url = `${base}${basePath}/executions/${encodeURIComponent(executionId)}/feedback${qs}`;\n\n\tconst requestHeaders: Record<string, string> = {\n\t\t\"Content-Type\": \"application/json\",\n\t\tAccept: \"application/json\",\n\t\t...(headers ?? {}),\n\t};\n\tif (authToken) requestHeaders.Authorization = `Bearer ${authToken}`;\n\n\tconst resp = await fetch(url, {\n\t\tmethod: \"POST\",\n\t\theaders: requestHeaders,\n\t\tbody: JSON.stringify(details ? { feedback, details } : { feedback }),\n\t\tsignal,\n\t});\n\tif (!resp.ok) {\n\t\tthrow new Error(`Feedback failed: ${resp.status} ${resp.statusText}`);\n\t}\n}\n","import { AnimatePresence, motion } from \"framer-motion\";\nimport { Loader2, X } from \"lucide-react\";\nimport type { CSSProperties } from \"react\";\nimport { useEffect, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\n\ntype ImageLightboxProps = {\n\tsrc: string;\n\talt?: string;\n\tonClose: () => void;\n};\n\nexport function ImageLightbox({\n\tsrc,\n\talt = \"\",\n\tonClose,\n}: ImageLightboxProps) {\n\tconst [isMounted, setIsMounted] = useState(false);\n\tconst [isImageLoaded, setIsImageLoaded] = useState(false);\n\tconst overlayStyle: CSSProperties = {\n\t\tposition: \"fixed\",\n\t\tinset: 0,\n\t\tzIndex: 2147483647,\n\t\tdisplay: \"flex\",\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t\tpadding: 16,\n\t\tbackground: \"rgba(2, 6, 23, 0.92)\",\n\t\tisolation: \"isolate\",\n\t};\n\tconst frameStyle: CSSProperties = {\n\t\tposition: \"relative\",\n\t\twidth: \"min(92vw, 1280px)\",\n\t\theight: \"min(88vh, 920px)\",\n\t\tdisplay: \"flex\",\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t\toverflow: \"hidden\",\n\t};\n\n\tuseEffect(() => {\n\t\tsetIsMounted(true);\n\t\treturn () => setIsMounted(false);\n\t}, []);\n\n\tuseEffect(() => {\n\t\tsetIsImageLoaded(false);\n\t}, [src]);\n\n\tuseEffect(() => {\n\t\tif (typeof document === \"undefined\") return;\n\n\t\tconst previousOverflow = document.body.style.overflow;\n\t\tdocument.body.style.overflow = \"hidden\";\n\n\t\treturn () => {\n\t\t\tdocument.body.style.overflow = previousOverflow;\n\t\t};\n\t}, []);\n\n\tuseEffect(() => {\n\t\tif (typeof document === \"undefined\") return;\n\n\t\tconst handleKeyDown = (event: KeyboardEvent) => {\n\t\t\tif (event.key === \"Escape\") {\n\t\t\t\tonClose();\n\t\t\t}\n\t\t};\n\n\t\tdocument.addEventListener(\"keydown\", handleKeyDown);\n\t\treturn () => {\n\t\t\tdocument.removeEventListener(\"keydown\", handleKeyDown);\n\t\t};\n\t}, [onClose]);\n\n\tif (!isMounted || typeof document === \"undefined\") {\n\t\treturn null;\n\t}\n\n\treturn createPortal(\n\t\t<AnimatePresence>\n\t\t\t<motion.div\n\t\t\t\tstyle={overlayStyle}\n\t\t\t\tinitial={{ opacity: 0 }}\n\t\t\t\tanimate={{ opacity: 1 }}\n\t\t\t\texit={{ opacity: 0 }}\n\t\t\t\ttransition={{ duration: 0.18 }}\n\t\t\t\tonClick={onClose}\n\t\t\t>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonClick={onClose}\n\t\t\t\t\tclassName=\"absolute top-4 right-4 z-[1] flex h-9 w-9 items-center justify-center rounded-full bg-black/60 text-white/90 transition-colors hover:bg-black/75\"\n\t\t\t\t\taria-label=\"Close\"\n\t\t\t\t>\n\t\t\t\t\t<X className=\"h-4 w-4\" />\n\t\t\t\t</button>\n\n\t\t\t\t<div style={frameStyle} onClick={(event) => event.stopPropagation()}>\n\t\t\t\t\t{!isImageLoaded ? (\n\t\t\t\t\t\t<div className=\"absolute inset-0 flex flex-col items-center justify-center gap-2\">\n\t\t\t\t\t\t\t<Loader2 className=\"h-5 w-5 animate-spin text-white/80\" />\n\t\t\t\t\t\t\t<p className=\"text-sm font-medium text-white/90\">\n\t\t\t\t\t\t\t\tLoading image\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t<p className=\"text-xs text-white/60\">Reference image</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) : null}\n\n\t\t\t\t\t<div className=\"flex h-full w-full items-center justify-center p-3 sm:p-4\">\n\t\t\t\t\t\t<img\n\t\t\t\t\t\t\tsrc={src}\n\t\t\t\t\t\t\talt={alt}\n\t\t\t\t\t\t\tdraggable={false}\n\t\t\t\t\t\t\tonLoad={() => setIsImageLoaded(true)}\n\t\t\t\t\t\t\tclassName={`block h-full w-full rounded-xl object-contain shadow-2xl transition-opacity duration-200 ${\n\t\t\t\t\t\t\t\tisImageLoaded ? \"opacity-100\" : \"opacity-0\"\n\t\t\t\t\t\t\t}`}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</motion.div>\n\t\t</AnimatePresence>,\n\t\tdocument.body,\n\t);\n}\n","import { Loader2 } from \"lucide-react\";\nimport type { CSSProperties } from \"react\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport { ImageLightbox } from \"./ImageLightbox\";\n\nconst RAG_IMAGE_PATH_REGEX =\n\t/^(?:https?:\\/\\/[^/\\s]+)?\\/api\\/rag\\/chunks\\/[^\"'\\s]+\\/image(?:[?#][^\"'\\s]*)?$/;\n\nfunction isUnresolvedRagImageSource(src: string) {\n\treturn RAG_IMAGE_PATH_REGEX.test(src);\n}\n\nfunction LoadingImageCard({\n\tlabel,\n\tdescription,\n}: {\n\tlabel: string;\n\tdescription: string;\n}) {\n\treturn (\n\t\t<span className=\"my-3 flex min-h-36 w-full flex-col items-center justify-center gap-2 px-4 py-5 text-center\">\n\t\t\t<Loader2 className=\"h-5 w-5 animate-spin text-slate-500 dark:text-slate-300\" />\n\t\t\t<span className=\"text-xs font-medium text-slate-600 dark:text-slate-200\">\n\t\t\t\t{label}\n\t\t\t</span>\n\t\t\t<span className=\"text-[11px] leading-relaxed text-slate-500/90 dark:text-slate-300/80\">\n\t\t\t\t{description}\n\t\t\t</span>\n\t\t</span>\n\t);\n}\n\nfunction BrokenImageCard({ alt }: { alt?: string }) {\n\treturn (\n\t\t<span className=\"my-3 flex min-h-44 w-full flex-col items-center justify-center gap-2 rounded-xl border border-dashed border-red-200 bg-red-50/60 px-4 py-5 text-center dark:border-red-900/40 dark:bg-red-950/20\">\n\t\t\t<span className=\"text-xs font-medium text-red-600 dark:text-red-300\">\n\t\t\t\tUnable to load image\n\t\t\t</span>\n\t\t\t{alt ? (\n\t\t\t\t<span className=\"max-w-sm text-[11px] leading-relaxed text-red-500/80 dark:text-red-200/80\">\n\t\t\t\t\t{alt}\n\t\t\t\t</span>\n\t\t\t) : null}\n\t\t</span>\n\t);\n}\n\ntype MarkdownImageProps = {\n\tsrc?: string;\n\talt?: string;\n\tisResolving?: boolean;\n};\n\nexport function MarkdownImage({\n\tsrc,\n\talt,\n\tisResolving = false,\n}: MarkdownImageProps) {\n\tconst imageFrameStyle: CSSProperties = {\n\t\twidth: \"min(100%, 32rem)\",\n\t\tmaxWidth: \"100%\",\n\t};\n\tconst imageStyle: CSSProperties = {\n\t\tdisplay: \"block\",\n\t\twidth: \"100%\",\n\t\theight: \"auto\",\n\t\tmaxWidth: \"100%\",\n\t\tmaxHeight: \"18rem\",\n\t\tobjectFit: \"contain\",\n\t};\n\tconst [isLoaded, setIsLoaded] = useState(false);\n\tconst [hasError, setHasError] = useState(false);\n\tconst [isLightboxOpen, setIsLightboxOpen] = useState(false);\n\tconst isUnresolvedRagImage = useMemo(\n\t\t() => (src ? isUnresolvedRagImageSource(src) : false),\n\t\t[src]\n\t);\n\tconst isResolvingRagImage = isResolving && isUnresolvedRagImage;\n\n\tuseEffect(() => {\n\t\tsetIsLoaded(false);\n\t\tsetHasError(false);\n\t\tsetIsLightboxOpen(false);\n\t}, [src]);\n\n\tif (!src) {\n\t\treturn null;\n\t}\n\n\tif (isResolvingRagImage) {\n\t\treturn (\n\t\t\t<LoadingImageCard label=\"Loading image\" description=\"Reference image\" />\n\t\t);\n\t}\n\n\tif (hasError) {\n\t\treturn <BrokenImageCard alt={alt} />;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<span className=\"my-3 block w-full\">\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\tif (isLoaded) {\n\t\t\t\t\t\t\tsetIsLightboxOpen(true);\n\t\t\t\t\t\t}\n\t\t\t\t\t}}\n\t\t\t\t\tdisabled={!isLoaded}\n\t\t\t\t\taria-busy={!isLoaded}\n\t\t\t\t\tclassName=\"group relative mx-auto flex w-full items-center justify-center overflow-hidden rounded-xl bg-black/[0.03] px-3 py-3 text-left transition-colors hover:bg-black/[0.05] disabled:cursor-wait disabled:hover:bg-black/[0.03] dark:bg-white/[0.03] dark:hover:bg-white/[0.05] dark:disabled:hover:bg-white/[0.03]\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\t...imageFrameStyle,\n\t\t\t\t\t\t...(!isLoaded ? { minHeight: \"9rem\" } : {}),\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<img\n\t\t\t\t\t\tsrc={src}\n\t\t\t\t\t\talt={alt || \"\"}\n\t\t\t\t\t\tclassName={`relative z-[1] block h-auto max-h-[22rem] w-full max-w-full rounded-lg object-contain transition-opacity duration-200 ${\n\t\t\t\t\t\t\tisLoaded ? \"opacity-100\" : \"opacity-0\"\n\t\t\t\t\t\t}`}\n\t\t\t\t\t\tstyle={imageStyle}\n\t\t\t\t\t\tonLoad={() => {\n\t\t\t\t\t\t\tsetHasError(false);\n\t\t\t\t\t\t\tsetIsLoaded(true);\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonError={() => {\n\t\t\t\t\t\t\tsetIsLoaded(false);\n\t\t\t\t\t\t\tsetHasError(true);\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t</button>\n\t\t\t</span>\n\n\t\t\t{isLightboxOpen && isLoaded ? (\n\t\t\t\t<ImageLightbox\n\t\t\t\t\tsrc={src}\n\t\t\t\t\talt={alt}\n\t\t\t\t\tonClose={() => setIsLightboxOpen(false)}\n\t\t\t\t/>\n\t\t\t) : null}\n\t\t</>\n\t);\n}\n","import type { Components } from \"react-markdown\";\nimport { MarkdownImage } from \"./MarkdownImage\";\n\ntype CreateMarkdownComponentsOptions = {\n\tisResolvingImages?: boolean;\n};\n\nexport function createMarkdownComponents(\n\toptions: CreateMarkdownComponentsOptions = {},\n): Components {\n\treturn {\n\t\tp: ({ children }) => (\n\t\t\t<p className=\"mb-3 last:mb-0 text-sm leading-relaxed\">{children}</p>\n\t\t),\n\t\tcode: ({ className: codeClassName, children }) => {\n\t\t\tconst isInline = !codeClassName;\n\n\t\t\treturn isInline ? (\n\t\t\t\t<code className=\"payman-agent-code-inline rounded-md px-1.5 py-0.5 font-mono text-xs break-all\">\n\t\t\t\t\t{children}\n\t\t\t\t</code>\n\t\t\t) : (\n\t\t\t\t<code className=\"payman-agent-code-block my-2 block overflow-x-auto rounded-lg p-3 font-mono text-xs whitespace-pre\">\n\t\t\t\t\t{children}\n\t\t\t\t</code>\n\t\t\t);\n\t\t},\n\t\tpre: ({ children }) => (\n\t\t\t<pre className=\"my-2 max-w-full overflow-x-auto rounded-lg\">\n\t\t\t\t{children}\n\t\t\t</pre>\n\t\t),\n\t\tul: ({ children }) => (\n\t\t\t<ul className=\"mb-3 ml-4 list-disc space-y-1 text-sm\">{children}</ul>\n\t\t),\n\t\tol: ({ children }) => (\n\t\t\t<ol className=\"mb-3 ml-4 list-decimal space-y-1 text-sm\">{children}</ol>\n\t\t),\n\t\tli: ({ children }) => <li className=\"text-sm leading-relaxed\">{children}</li>,\n\t\th1: ({ children }) => (\n\t\t\t<h1 className=\"mt-4 mb-2 text-lg font-semibold first:mt-0\">{children}</h1>\n\t\t),\n\t\th2: ({ children }) => (\n\t\t\t<h2 className=\"mt-3 mb-2 text-base font-semibold first:mt-0\">\n\t\t\t\t{children}\n\t\t\t</h2>\n\t\t),\n\t\th3: ({ children }) => (\n\t\t\t<h3 className=\"mt-2 mb-1 text-sm font-semibold first:mt-0\">{children}</h3>\n\t\t),\n\t\tstrong: ({ children }) => <strong className=\"font-semibold\">{children}</strong>,\n\t\tem: ({ children }) => <em className=\"italic\">{children}</em>,\n\t\tblockquote: ({ children }) => (\n\t\t\t<blockquote className=\"payman-agent-blockquote my-2 pl-4 italic\">\n\t\t\t\t{children}\n\t\t\t</blockquote>\n\t\t),\n\t\thr: () => <hr className=\"payman-agent-hr my-4\" />,\n\t\ta: ({ href, children }) => (\n\t\t\t<a\n\t\t\t\thref={href}\n\t\t\t\ttarget=\"_blank\"\n\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\tclassName=\"payman-agent-link underline decoration-1 underline-offset-2\"\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</a>\n\t\t),\n\t\timg: ({ src, alt }) => (\n\t\t\t<MarkdownImage\n\t\t\t\tsrc={typeof src === \"string\" ? src : undefined}\n\t\t\t\talt={typeof alt === \"string\" ? alt : undefined}\n\t\t\t\tisResolving={options.isResolvingImages}\n\t\t\t/>\n\t\t),\n\t\ttable: ({ children }) => (\n\t\t\t<div className=\"relative my-4 -mx-1 w-full overflow-x-auto\">\n\t\t\t\t<table className=\"payman-agent-table min-w-full caption-bottom overflow-hidden rounded-lg text-sm\">\n\t\t\t\t\t{children}\n\t\t\t\t</table>\n\t\t\t</div>\n\t\t),\n\t\tthead: ({ children }) => (\n\t\t\t<thead className=\"payman-agent-thead [&_tr]:border-b\">{children}</thead>\n\t\t),\n\t\ttbody: ({ children }) => (\n\t\t\t<tbody className=\"[&_tr:last-child]:border-0\">{children}</tbody>\n\t\t),\n\t\ttr: ({ children }) => (\n\t\t\t<tr className=\"payman-agent-tr border-b transition-colors\">{children}</tr>\n\t\t),\n\t\tth: ({ children }) => (\n\t\t\t<th className=\"h-10 px-3 text-left align-middle text-xs font-medium whitespace-nowrap\">\n\t\t\t\t{children}\n\t\t\t</th>\n\t\t),\n\t\ttd: ({ children }) => (\n\t\t\t<td className=\"p-3 align-middle text-sm whitespace-nowrap\">{children}</td>\n\t\t),\n\t};\n}\n","import { AnimatePresence, motion } from \"framer-motion\";\nimport {\n\tBinoculars,\n\tCheck,\n\tChevronDown,\n\tChevronRight,\n\tClock,\n\tLoader2,\n\tSparkles,\n\tX,\n} from \"lucide-react\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport ReactMarkdown from \"react-markdown\";\nimport remarkGfm from \"remark-gfm\";\nimport type { AgentMessageProps, StreamingStep } from \"../../types\";\nimport { cn } from \"../../utils\";\nimport { createMarkdownComponents } from \"./markdownComponents\";\nimport {\n\tgetConflictErrorMessage,\n\tisFriendlyWorkflowError,\n} from \"../../utils/errorMessages\";\nimport { formatElapsedTime } from \"../../utils/formatDate\";\n\n/** Expandable block shown after streaming ends with all accumulated thinking. */\nfunction ThinkingBlock({ text }: { text: string }) {\n\tconst [isOpen, setIsOpen] = useState(false);\n\tconst hasContent = typeof text === \"string\" && text.trim().length > 0;\n\n\tif (!hasContent) return null;\n\n\treturn (\n\t\t<div className=\"mt-1.5 mb-1.5\">\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tonClick={() => setIsOpen((prev) => !prev)}\n\t\t\t\tclassName=\"inline-flex items-center gap-1 text-[10px] payman-agent-thinking-toggle transition-colors\"\n\t\t\t\taria-expanded={isOpen}\n\t\t\t\taria-label={\n\t\t\t\t\tisOpen ? \"Collapse thought process\" : \"Expand thought process\"\n\t\t\t\t}\n\t\t\t>\n\t\t\t\t<motion.div\n\t\t\t\t\tanimate={{ rotate: isOpen ? 180 : 0 }}\n\t\t\t\t\ttransition={{ duration: 0.15 }}\n\t\t\t\t\tclassName=\"shrink-0\"\n\t\t\t\t>\n\t\t\t\t\t<ChevronDown className=\"h-3 w-3\" />\n\t\t\t\t</motion.div>\n\t\t\t\t<span>Thought process</span>\n\t\t\t</button>\n\t\t\t<AnimatePresence initial={false}>\n\t\t\t\t{isOpen && (\n\t\t\t\t\t<motion.div\n\t\t\t\t\t\tinitial={{ height: 0, opacity: 0 }}\n\t\t\t\t\t\tanimate={{ height: \"auto\", opacity: 1 }}\n\t\t\t\t\t\texit={{ height: 0, opacity: 0 }}\n\t\t\t\t\t\ttransition={{ duration: 0.2, ease: \"easeInOut\" }}\n\t\t\t\t\t\tclassName=\"overflow-hidden\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<div className=\"mt-1 payman-agent-thinking-block rounded-md p-2 overflow-y-auto overflow-x-hidden\">\n\t\t\t\t\t\t\t<p className=\"m-0 text-xs payman-agent-thinking-block-text whitespace-pre-wrap leading-relaxed\">\n\t\t\t\t\t\t\t\t{text}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</motion.div>\n\t\t\t\t)}\n\t\t\t</AnimatePresence>\n\t\t</div>\n\t);\n}\nconst FRIENDLY_ERROR_MESSAGE = \"Oops, something went wrong. Please try again.\";\n\n/** Content that looks like a raw error (INTENT_ERROR message) rather than a user-facing workflow response */\nfunction looksLikeRawError(text: string): boolean {\n\tif (!text || text.length < 10) return false;\n\treturn text.includes(\"errorType=\") || /failed:\\s*\\{/.test(text);\n}\n\nexport function AgentMessage({\n\tmessage,\n\tanimated = false,\n\tshowAgentName = false,\n\tagentName = \"Assistant\",\n\tshowAvatar = false,\n\tlayout = \"full-width\",\n\tshowExecutionSteps = false,\n\tshowStreamingDot = false,\n\tstreamingStepsText,\n\tcompletedStepsText,\n\tonExecutionTraceClick,\n}: AgentMessageProps) {\n\tconst isStreaming = message.isStreaming ?? false;\n\tconst hasSteps = message.steps && message.steps.length > 0;\n\tconst hasTraceData =\n\t\t!!(message.tracingData || message.executionId) && !isStreaming;\n\tconst isCancelled = message.isCancelled ?? false;\n\tconst currentExecutingStepId = message.currentExecutingStepId;\n\n\tconst [isStepsExpanded, setIsStepsExpanded] = useState(false);\n\tconst wasStreamingRef = useRef(isStreaming);\n\n\tuseEffect(() => {\n\t\tif (isStreaming && hasSteps) {\n\t\t\tsetIsStepsExpanded(true);\n\t\t}\n\t\tif (wasStreamingRef.current && !isStreaming) {\n\t\t\tsetIsStepsExpanded(false);\n\t\t}\n\t\twasStreamingRef.current = isStreaming;\n\t}, [isStreaming, hasSteps]);\n\n\tconst totalElapsedMs = hasSteps\n\t\t? message.steps!.reduce((sum, step) => sum + (step.elapsedMs || 0), 0)\n\t\t: 0;\n\n\tconst currentMessage = message.currentMessage;\n\tconst rawContent = message.streamingContent || message.content || \"\";\n\tconst content = rawContent.replace(/\\\\n/g, \"\\n\");\n\t// When workflow completes with a response (e.g. after INTENT_ERROR), prefer that over error UI. Only show friendly error when there's no meaningful response or when content is raw error dump.\n\tconst hasMeaningfulContent =\n\t\tcontent.length > 0 && !looksLikeRawError(content);\n\t// Also show friendly error when workflow completed with no content (e.g. preflight failed, no workflowMsg)\n\tconst completedWithNoContent =\n\t\t!isStreaming &&\n\t\t!isCancelled &&\n\t\tcontent.length === 0 &&\n\t\t(message.streamProgress === \"completed\" || message.streamProgress === \"error\");\n\tconst conflictErrorMessage = getConflictErrorMessage(message.errorDetails);\n\tconst isError =\n\t\t!!conflictErrorMessage ||\n\t\t((isFriendlyWorkflowError(message.errorDetails) ||\n\t\t\tlooksLikeRawError(content)) &&\n\t\t\t!hasMeaningfulContent) ||\n\t\tcompletedWithNoContent;\n\tconst activeThinkingText = message.activeThinkingText;\n\tconst allThinkingText = message.allThinkingText;\n\tconst currentStep = useMemo(\n\t\t() =>\n\t\t\tmessage.steps?.find(\n\t\t\t\t(s) => s.id === currentExecutingStepId && s.status === \"in_progress\"\n\t\t\t),\n\t\t[message.steps, currentExecutingStepId]\n\t);\n\tconst markdownRenderers = useMemo(\n\t\t() =>\n\t\t\tcreateMarkdownComponents({\n\t\t\t\tisResolvingImages: message.isResolvingImages,\n\t\t\t}),\n\t\t[message.isResolvingImages],\n\t);\n\n\tconst getStepsLabel = (streaming: boolean) => {\n\t\tconst count = message.steps!.length;\n\t\tconst stepWord = count === 1 ? \"step\" : \"steps\";\n\t\tif (streaming) {\n\t\t\tif (streamingStepsText)\n\t\t\t\treturn streamingStepsText.replace(\"{count}\", count.toString());\n\t\t\treturn `${count} ${stepWord} in progress`;\n\t\t}\n\t\tif (completedStepsText) {\n\t\t\treturn completedStepsText\n\t\t\t\t.replace(\"{count}\", count.toString())\n\t\t\t\t.replace(\"{time}\", (totalElapsedMs / 1000).toFixed(1));\n\t\t}\n\t\treturn `${count} ${stepWord} completed`;\n\t};\n\n\t// All icons in a fixed 4x4 wrapper for alignment\n\tconst renderStepIcon = (\n\t\tstep: StreamingStep,\n\t\tisCurrentlyExecuting: boolean\n\t) => {\n\t\tconst wrapper = \"h-4 w-4 flex items-center justify-center shrink-0\";\n\t\tif (isCurrentlyExecuting)\n\t\t\treturn (\n\t\t\t\t<div className={wrapper}>\n\t\t\t\t\t<Loader2 className=\"h-3.5 w-3.5 payman-agent-step-icon--active animate-spin\" />\n\t\t\t\t</div>\n\t\t\t);\n\t\tif (step.status === \"pending\" && isCancelled)\n\t\t\treturn (\n\t\t\t\t<div className={wrapper}>\n\t\t\t\t\t<div className=\"h-1.5 w-1.5 rounded-full payman-agent-step-icon--pending\" />\n\t\t\t\t</div>\n\t\t\t);\n\t\tif (step.status === \"pending\" || step.status === \"in_progress\")\n\t\t\treturn (\n\t\t\t\t<div className={wrapper}>\n\t\t\t\t\t<Loader2 className=\"h-3.5 w-3.5 payman-agent-step-icon--in-progress-dim animate-spin\" />\n\t\t\t\t</div>\n\t\t\t);\n\t\tif (step.status === \"completed\")\n\t\t\treturn (\n\t\t\t\t<div className={wrapper}>\n\t\t\t\t\t<Check\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"h-3.5 w-3.5\",\n\t\t\t\t\t\t\tstep.eventType === \"USER_ACTION_SUCCESS\"\n\t\t\t\t\t\t\t\t? \"payman-agent-step-icon--success\"\n\t\t\t\t\t\t\t\t: \"payman-agent-step-icon--success-dim\"\n\t\t\t\t\t\t)}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t);\n\t\tif (step.status === \"error\")\n\t\t\treturn (\n\t\t\t\t<div className={wrapper}>\n\t\t\t\t\t<X className=\"h-3.5 w-3.5 payman-agent-step-icon--error\" />\n\t\t\t\t</div>\n\t\t\t);\n\t\treturn (\n\t\t\t<div className={wrapper}>\n\t\t\t\t<div className=\"h-1.5 w-1.5 rounded-full payman-agent-step-icon--pending-dim\" />\n\t\t\t</div>\n\t\t);\n\t};\n\n\tconst stepsListContent = hasSteps && (\n\t\t<AnimatePresence initial={false}>\n\t\t\t{isStepsExpanded && (\n\t\t\t\t<motion.div\n\t\t\t\t\tinitial={{ height: 0, opacity: 0 }}\n\t\t\t\t\tanimate={{ height: \"auto\", opacity: 1 }}\n\t\t\t\t\texit={{ height: 0, opacity: 0 }}\n\t\t\t\t\ttransition={{ duration: 0.2, ease: \"easeInOut\" }}\n\t\t\t\t\tclassName=\"overflow-hidden\"\n\t\t\t\t>\n\t\t\t\t\t{!isStreaming && allThinkingText?.trim() && (\n\t\t\t\t\t\t<ThinkingBlock text={allThinkingText} />\n\t\t\t\t\t)}\n\t\t\t\t\t<div className=\"pt-1.5\">\n\t\t\t\t\t\t{message.steps!.map((step) => {\n\t\t\t\t\t\t\tconst isCurrentlyExecuting =\n\t\t\t\t\t\t\t\tstep.id === currentExecutingStepId &&\n\t\t\t\t\t\t\t\tstep.status === \"in_progress\" &&\n\t\t\t\t\t\t\t\tisStreaming &&\n\t\t\t\t\t\t\t\t!isCancelled;\n\t\t\t\t\t\t\tconst hasTime = step.elapsedMs != null && step.elapsedMs > 0;\n\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<div key={step.id} className=\"mb-1.5\">\n\t\t\t\t\t\t\t\t\t{/* Step row: icon + message */}\n\t\t\t\t\t\t\t\t\t<div className=\"flex gap-1.5 items-start\">\n\t\t\t\t\t\t\t\t\t\t<div className=\"mt-px\">\n\t\t\t\t\t\t\t\t\t\t\t{renderStepIcon(step, isCurrentlyExecuting)}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\"text-xs leading-relaxed min-w-0 break-words\",\n\t\t\t\t\t\t\t\t\t\t\t\tisCurrentlyExecuting && \"shimmer-text font-medium\",\n\t\t\t\t\t\t\t\t\t\t\t\t!isCurrentlyExecuting &&\n\t\t\t\t\t\t\t\t\t\t\t\t\tstep.status === \"error\" &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"payman-agent-step-text--error\",\n\t\t\t\t\t\t\t\t\t\t\t\t!isCurrentlyExecuting &&\n\t\t\t\t\t\t\t\t\t\t\t\t\tstep.eventType === \"USER_ACTION_SUCCESS\" &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"payman-agent-step-text--success\",\n\t\t\t\t\t\t\t\t\t\t\t\t!isCurrentlyExecuting &&\n\t\t\t\t\t\t\t\t\t\t\t\t\tstep.status === \"completed\" &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"payman-agent-step-text--completed\",\n\t\t\t\t\t\t\t\t\t\t\t\t!isCurrentlyExecuting &&\n\t\t\t\t\t\t\t\t\t\t\t\t\tstep.status === \"pending\" &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"payman-agent-step-text--pending\",\n\t\t\t\t\t\t\t\t\t\t\t\t!isCurrentlyExecuting &&\n\t\t\t\t\t\t\t\t\t\t\t\t\tstep.status === \"in_progress\" &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"payman-agent-step-text--in-progress\"\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{step.message}\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t\t\t{/* Time badge — indented to align with step text (16px icon + 6px gap = 22px) */}\n\t\t\t\t\t\t\t\t\t{hasTime && (\n\t\t\t\t\t\t\t\t\t\t<div className=\"pl-[22px] mt-1\">\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"inline-flex items-center gap-1 px-1.5 py-0.5 rounded-md payman-agent-step-time leading-none\">\n\t\t\t\t\t\t\t\t\t\t\t\t<Clock className=\"h-2.5 w-2.5 shrink-0 payman-agent-step-time-icon\" />\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-[10px] font-mono payman-agent-step-time-text\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t{formatElapsedTime(step.elapsedMs!)}\n\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})}\n\t\t\t\t\t</div>\n\t\t\t\t</motion.div>\n\t\t\t)}\n\t\t</AnimatePresence>\n\t);\n\n\tconst stepsToggleRef = useRef<HTMLButtonElement>(null);\n\n\tconst handleStepsToggle = useCallback(() => {\n\t\tsetIsStepsExpanded((prev) => {\n\t\t\tconst next = !prev;\n\t\t\t// Dispatch event so MessageList can scroll to show expanded steps\n\t\t\tif (next) {\n\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\tstepsToggleRef.current\n\t\t\t\t\t\t?.closest(\".payman-scrollbar\")\n\t\t\t\t\t\t?.dispatchEvent(new CustomEvent(\"payman-steps-toggle\"));\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn next;\n\t\t});\n\t}, []);\n\n\tconst stepsToggle = (streaming: boolean) => (\n\t\t<button\n\t\t\tref={stepsToggleRef}\n\t\t\tonClick={handleStepsToggle}\n\t\t\tclassName=\"inline-flex items-center gap-1.5 text-xs payman-agent-step-toggle transition-colors\"\n\t\t>\n\t\t\t<motion.div\n\t\t\t\tanimate={{ rotate: isStepsExpanded ? 90 : 0 }}\n\t\t\t\ttransition={{ duration: 0.15 }}\n\t\t\t\tclassName=\"shrink-0\"\n\t\t\t>\n\t\t\t\t<ChevronRight className=\"h-3 w-3\" />\n\t\t\t</motion.div>\n\t\t\t<span>{getStepsLabel(streaming)}</span>\n\t\t</button>\n\t);\n\n\t// Below-bubble steps section: only after streaming (thinking lives in bubble during stream)\n\tconst showSteps = showExecutionSteps && hasSteps && !isStreaming && !isError;\n\n\tconst messageContent = (\n\t\t<div className=\"w-full\">\n\t\t\t{/* Row: avatar + bubble. Trace button used to live as a\n\t\t\t sibling of the bubble at top-right, but on long markdown\n\t\t\t tables the table extended to the right edge and was\n\t\t\t overlapped by the icon — making the rightmost data\n\t\t\t column unreadable. Now rendered below the bubble next\n\t\t\t to the consumer-supplied timestamp. */}\n\t\t\t<div className=\"flex gap-3 justify-start items-start w-full\">\n\t\t\t\t{/* Avatar */}\n\t\t\t\t{showAvatar && (\n\t\t\t\t\t<div className=\"shrink-0 mt-0.5\">\n\t\t\t\t\t\t{isStreaming && showStreamingDot ? (\n\t\t\t\t\t\t\t<div className=\"h-8 w-8 flex items-center justify-center\">\n\t\t\t\t\t\t\t\t<div className=\"relative\">\n\t\t\t\t\t\t\t\t\t<div className=\"h-2.5 w-2.5 rounded-full payman-agent-avatar-dot animate-pulse\" />\n\t\t\t\t\t\t\t\t\t<div className=\"absolute inset-0 h-2.5 w-2.5 rounded-full payman-agent-avatar-dot-ping animate-ping\" />\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<div className=\"h-8 w-8 rounded-full payman-agent-avatar flex items-center justify-center\">\n\t\t\t\t\t\t\t\t<Sparkles className=\"h-3.5 w-3.5 payman-agent-avatar-icon\" />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{/* Bubble — constrained width */}\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"min-w-0\",\n\t\t\t\t\t\tlayout === \"centered\"\n\t\t\t\t\t\t\t? \"max-w-[85%]\"\n\t\t\t\t\t\t\t: showAvatar\n\t\t\t\t\t\t\t? \"max-w-[85%]\"\n\t\t\t\t\t\t\t: \"max-w-[80%]\"\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{/* User Action Result Badge */}\n\t\t\t\t\t{message.userActionResult && (\n\t\t\t\t\t\t<div className=\"mb-2\">\n\t\t\t\t\t\t\t{message.userActionResult === \"approved\" ? (\n\t\t\t\t\t\t\t\t<span className=\"inline-flex items-center gap-1.5 px-4 py-1.5 text-xs font-semibold rounded-full payman-agent-approved shrink-0\">\n\t\t\t\t\t\t\t\t\t<Check className=\"w-3.5 h-3.5 shrink-0\" strokeWidth={2.5} />\n\t\t\t\t\t\t\t\t\tVerified\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<span className=\"inline-flex items-center gap-1.5 px-4 py-1.5 text-xs font-semibold rounded-full payman-agent-rejected shrink-0\">\n\t\t\t\t\t\t\t\t\t<X className=\"w-3.5 h-3.5 shrink-0\" strokeWidth={2.5} />\n\t\t\t\t\t\t\t\t\tRejected\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"overflow-hidden w-full min-w-0 px-4 py-3 rounded-2xl rounded-tl-md transition-all duration-200\",\n\t\t\t\t\t\t\tlayout === \"centered\"\n\t\t\t\t\t\t\t\t? cn(\n\t\t\t\t\t\t\t\t\t\t\"payman-agent-bubble payman-agent-bubble--centered\",\n\t\t\t\t\t\t\t\t\t\tisStreaming && \"streaming\",\n\t\t\t\t\t\t\t\t\t\tisError && \"error\"\n\t\t\t\t\t\t\t\t )\n\t\t\t\t\t\t\t\t: cn(\n\t\t\t\t\t\t\t\t\t\t\"payman-agent-bubble\",\n\t\t\t\t\t\t\t\t\t\tisError && \"payman-agent-bubble--error\"\n\t\t\t\t\t\t\t\t )\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{showAgentName && (\n\t\t\t\t\t\t\t<p\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\"text-sm font-semibold mb-1 leading-none payman-agent-name\",\n\t\t\t\t\t\t\t\t\tisStreaming && !content && \"animate-pulse\"\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{isStreaming && !content ? \"Thought Process\" : agentName}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"text-sm leading-relaxed min-w-0 w-full break-words overflow-wrap-anywhere\",\n\t\t\t\t\t\t\t\tshowAgentName && \"mt-1\"\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{isStreaming && !content ? (\n\t\t\t\t\t\t\t\t// Streaming without content — show thinking/step indicator\n\t\t\t\t\t\t\t\tactiveThinkingText ? (\n\t\t\t\t\t\t\t\t\t<div className=\"flex gap-2 items-start\">\n\t\t\t\t\t\t\t\t\t\t<Loader2 className=\"h-4 w-4 mt-0.5 payman-agent-thinking-spinner animate-spin shrink-0\" />\n\t\t\t\t\t\t\t\t\t\t<span className=\"text-sm leading-relaxed min-w-0 break-words payman-agent-thinking-text whitespace-pre-wrap flex-1\">\n\t\t\t\t\t\t\t\t\t\t\t{activeThinkingText}\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"inline-block w-0.5 h-3.5 payman-agent-thinking-cursor animate-pulse ml-0.5 align-text-bottom\" />\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t) : currentStep ? (\n\t\t\t\t\t\t\t\t\t<div className=\"flex gap-1.5 items-start\">\n\t\t\t\t\t\t\t\t\t\t<div className=\"mt-0.5 shrink-0\">\n\t\t\t\t\t\t\t\t\t\t\t{renderStepIcon(currentStep, true)}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t<span className=\"text-sm leading-relaxed min-w-0 break-words shimmer-text font-medium flex-1\">\n\t\t\t\t\t\t\t\t\t\t\t{currentStep.message}\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<div className=\"flex gap-2.5 items-start\">\n\t\t\t\t\t\t\t\t\t\t<Loader2 className=\"w-4 h-4 mt-0.5 payman-agent-thinking-spinner animate-spin shrink-0\" />\n\t\t\t\t\t\t\t\t\t\t<span className=\"text-sm payman-agent-thinking-text flex-1\">\n\t\t\t\t\t\t\t\t\t\t\t{currentMessage || \"Thinking...\"}\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t) : isCancelled && !content ? (\n\t\t\t\t\t\t\t\t<div className=\"flex gap-2.5 items-start\">\n\t\t\t\t\t\t\t\t\t<X className=\"w-4 h-4 mt-0.5 payman-agent-cancelled-icon shrink-0\" />\n\t\t\t\t\t\t\t\t\t<span className=\"text-sm payman-agent-cancelled-text italic flex-1\">\n\t\t\t\t\t\t\t\t\t\t{currentMessage || \"Request was stopped.\"}\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\"payman-markdown payman-agent-markdown prose prose-sm dark:prose-invert max-w-none min-w-0 w-full break-words overflow-wrap-anywhere\",\n\t\t\t\t\t\t\t\t\t\tisError && \"payman-agent-markdown--error\",\n\t\t\t\t\t\t\t\t\t\tisStreaming && content && \"streaming-cursor\"\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<ReactMarkdown\n\t\t\t\t\t\t\t\t\t\tremarkPlugins={[remarkGfm]}\n\t\t\t\t\t\t\t\t\t\tcomponents={markdownRenderers}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{isError\n\t\t\t\t\t\t\t\t\t\t\t? conflictErrorMessage ?? FRIENDLY_ERROR_MESSAGE\n\t\t\t\t\t\t\t\t\t\t\t: content ||\n\t\t\t\t\t\t\t\t\t\t\t (isStreaming\n\t\t\t\t\t\t\t\t\t\t\t\t\t? \"Thinking...\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t: isCancelled\n\t\t\t\t\t\t\t\t\t\t\t\t\t? \"Request was stopped.\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t: \"\")}\n\t\t\t\t\t\t\t\t\t</ReactMarkdown>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t</div>\n\n\t\t\t{/* Trace button — positioned below the bubble in the same\n\t\t\t column the consumer renders the timestamp in. Avoids\n\t\t\t overlapping wide markdown content (tables, code blocks)\n\t\t\t that previously got clipped by the top-right icon. */}\n\t\t\t{hasTraceData && onExecutionTraceClick && (\n\t\t\t\t<div className={cn(\"mt-1\", showAvatar ? \"ml-11\" : \"ml-0\")}>\n\t\t\t\t\t<button\n\t\t\t\t\t\tonClick={() =>\n\t\t\t\t\t\t\tonExecutionTraceClick({\n\t\t\t\t\t\t\t\tmessage,\n\t\t\t\t\t\t\t\ttracingData: message.tracingData,\n\t\t\t\t\t\t\t\texecutionId: message.executionId,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"p-1.5 rounded-md inline-flex items-center justify-center payman-agent-trace\",\n\t\t\t\t\t\t\t\"active:scale-95 transition-all duration-150\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t\ttitle=\"View execution trace\"\n\t\t\t\t\t\taria-label=\"View execution trace\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<Binoculars className=\"w-3.5 h-3.5 payman-agent-trace-icon\" />\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t{/* Steps — outside the flex row (only when not streaming) */}\n\t\t\t{showSteps && (\n\t\t\t\t<div className={cn(\"mt-1.5\", showAvatar ? \"ml-11\" : \"ml-0\")}>\n\t\t\t\t\t{showExecutionSteps &&\n\t\t\t\t\t\thasSteps &&\n\t\t\t\t\t\t!isStreaming &&\n\t\t\t\t\t\t!isError &&\n\t\t\t\t\t\tstepsToggle(false)}\n\t\t\t\t\t{stepsListContent}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n\n\tif (animated) {\n\t\treturn (\n\t\t\t<motion.div\n\t\t\t\tinitial={{ opacity: 0, y: 8, scale: 0.98 }}\n\t\t\t\tanimate={{ opacity: 1, y: 0, scale: 1 }}\n\t\t\t\ttransition={{ duration: 0.25, ease: [0.25, 0.46, 0.45, 0.94] }}\n\t\t\t>\n\t\t\t\t{messageContent}\n\t\t\t</motion.div>\n\t\t);\n\t}\n\n\treturn messageContent;\n}\n","import { motion } from \"framer-motion\";\nimport { User } from \"lucide-react\";\nimport type { UserMessageProps } from \"../../types\";\nimport { parseSlashCommand } from \"../../utils/slashCommands\";\nimport { cn, formatDate } from \"../../utils\";\n\nexport function UserMessage({\n\tmessage,\n\tanimated = false,\n\tshowAvatar = false,\n}: UserMessageProps) {\n\tconst parsedCommand = parseSlashCommand(message.content);\n\tconst content = (\n\t\t<div className=\"flex gap-3 justify-end w-full\">\n\t\t\t{/* Message Container */}\n\t\t\t<div className=\"max-w-[80%] min-w-0 flex flex-col items-end\">\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"rounded-2xl rounded-br-md px-4 py-3\",\n\t\t\t\t\t\t\"bg-primary text-primary-foreground\",\n\t\t\t\t\t\t\"shadow-sm\",\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{parsedCommand ? (\n\t\t\t\t\t\t<div className=\"space-y-2\">\n\t\t\t\t\t\t\t<span className=\"inline-flex rounded-md bg-black/15 px-2 py-0.5 font-mono text-xs\">\n\t\t\t\t\t\t\t\t{parsedCommand.command}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t{parsedCommand.body.trim() ? (\n\t\t\t\t\t\t\t\t<p className=\"text-sm leading-relaxed whitespace-pre-wrap break-words\">\n\t\t\t\t\t\t\t\t\t{parsedCommand.body}\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<p className=\"text-sm leading-relaxed whitespace-pre-wrap break-words\">\n\t\t\t\t\t\t\t{message.content}\n\t\t\t\t\t\t</p>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t\t<span className=\"text-[10px] mt-1.5 mr-1 text-muted-foreground/70 select-none\">\n\t\t\t\t\t{formatDate(message.timestamp)}\n\t\t\t\t</span>\n\t\t\t</div>\n\n\t\t\t{/* Avatar */}\n\t\t\t{showAvatar && (\n\t\t\t\t<div className=\"shrink-0 mt-0.5\">\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"h-8 w-8 rounded-full\",\n\t\t\t\t\t\t\t\"bg-primary/10 border border-primary/20\",\n\t\t\t\t\t\t\t\"flex items-center justify-center\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<User className=\"h-3.5 w-3.5 text-primary\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n\n\tif (animated) {\n\t\treturn (\n\t\t\t<motion.div\n\t\t\t\tinitial={{ opacity: 0, y: 8, scale: 0.98 }}\n\t\t\t\tanimate={{ opacity: 1, y: 0, scale: 1 }}\n\t\t\t\ttransition={{ duration: 0.25, ease: [0.25, 0.46, 0.45, 0.94] }}\n\t\t\t>\n\t\t\t\t{content}\n\t\t\t</motion.div>\n\t\t);\n\t}\n\n\treturn content;\n}\n","import type { MessageRowProps } from \"../../types\";\nimport { AgentMessage } from \"../AgentMessage\";\nimport { UserMessage } from \"../UserMessage\";\n\nexport function MessageRow({\n\tmessage,\n\tstage = \"DEVELOPMENT\",\n\tanimated = false,\n\tshowAgentName = false,\n\tagentName = \"Assistant\",\n\tshowAvatars = false,\n\tshowUserAvatar,\n\tshowAssistantAvatar,\n\tlayout = \"full-width\",\n\tshowTimestamps = false,\n\tshowExecutionSteps = false,\n\tshowStreamingDot = false,\n\tstreamingStepsText,\n\tcompletedStepsText,\n\tonExecutionTraceClick,\n}: MessageRowProps) {\n\tconst actualShowUserAvatar =\n\t\tshowUserAvatar !== undefined ? showUserAvatar : showAvatars;\n\tconst actualShowAssistantAvatar =\n\t\tshowAssistantAvatar !== undefined ? showAssistantAvatar : showAvatars;\n\n\tif (message.role === \"user\") {\n\t\treturn (\n\t\t\t<UserMessage\n\t\t\t\tmessage={message}\n\t\t\t\tanimated={animated}\n\t\t\t\tshowAvatar={actualShowUserAvatar}\n\t\t\t/>\n\t\t);\n\t}\n\n\treturn (\n\t\t<AgentMessage\n\t\t\tmessage={message}\n\t\t\tstage={stage}\n\t\t\tanimated={animated}\n\t\t\tshowAgentName={showAgentName}\n\t\t\tagentName={agentName}\n\t\t\tshowAvatar={actualShowAssistantAvatar}\n\t\t\tlayout={layout}\n\t\t\tshowTimestamp={showTimestamps}\n\t\t\tshowExecutionSteps={showExecutionSteps}\n\t\t\tshowStreamingDot={showStreamingDot}\n\t\t\tstreamingStepsText={streamingStepsText}\n\t\t\tcompletedStepsText={completedStepsText}\n\t\t\tonExecutionTraceClick={onExecutionTraceClick}\n\t\t/>\n\t);\n}\n","import { cn } from \"../../utils\";\n\ninterface MessageRowSkeletonProps {\n\tisRightAligned?: boolean;\n}\n\nexport function MessageRowSkeleton({\n\tisRightAligned = false,\n}: MessageRowSkeletonProps) {\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"flex w-full\",\n\t\t\t\tisRightAligned ? \"justify-end\" : \"justify-start\"\n\t\t\t)}\n\t\t>\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex flex-col gap-2 w-full\",\n\t\t\t\t\tisRightAligned ? \"items-end max-w-[70%]\" : \"items-start max-w-[80%]\"\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"rounded-2xl p-4 w-full\",\n\t\t\t\t\t\tisRightAligned\n\t\t\t\t\t\t\t? \"bg-primary/8 rounded-br-md\"\n\t\t\t\t\t\t\t: \"bg-muted/70 rounded-bl-md\"\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t<div className=\"space-y-2.5\">\n\t\t\t\t\t\t<div className=\"h-3 skeleton-pulse rounded-full bg-muted-foreground/10 w-[85%]\" />\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName=\"h-3 skeleton-pulse rounded-full bg-muted-foreground/10 w-full\"\n\t\t\t\t\t\t\tstyle={{ animationDelay: \"0.1s\" }}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t{!isRightAligned && (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclassName=\"h-3 skeleton-pulse rounded-full bg-muted-foreground/10 w-[60%]\"\n\t\t\t\t\t\t\t\tstyle={{ animationDelay: \"0.2s\" }}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"h-2 skeleton-pulse rounded-full bg-muted-foreground/8 w-12 mx-1\"\n\t\t\t\t\tstyle={{ animationDelay: \"0.3s\" }}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import { motion } from \"framer-motion\";\nimport { ArrowDown } from \"lucide-react\";\nimport { useCallback, useEffect, useLayoutEffect, useRef, useState } from \"react\";\nimport type { MessageListProps } from \"../../types\";\nimport { cn } from \"../../utils\";\nimport { MessageRow } from \"../MessageRow\";\nimport { MessageRowSkeleton } from \"../MessageRowSkeleton\";\n\nconst SCROLL_THRESHOLD = 150;\nconst LOAD_MORE_THRESHOLD = 80;\n\nexport function MessageList({\n\tmessages,\n\tisLoading = false,\n\temptyStateText = \"What can I help with?\",\n\tshowEmptyStateIcon: _showEmptyStateIcon = true,\n\temptyStateComponent,\n\tlayout = \"full-width\",\n\tshowTimestamps = false,\n\tstage = \"DEVELOPMENT\",\n\tanimated = false,\n\tshowAgentName = false,\n\tagentName = \"Assistant\",\n\tshowAvatars = false,\n\tshowUserAvatar,\n\tshowAssistantAvatar,\n\tshowExecutionSteps = false,\n\tshowStreamingDot = false,\n\tstreamingStepsText,\n\tcompletedStepsText,\n\tonExecutionTraceClick,\n\tclassName,\n\tonLoadMoreMessages,\n\tisLoadingMoreMessages = false,\n\thasMoreMessages = false,\n}: MessageListProps) {\n\tconst scrollRef = useRef<HTMLDivElement>(null);\n\tconst isNearBottomRef = useRef(true);\n\tconst [showScrollBtn, setShowScrollBtn] = useState(false);\n\tconst prevMessageCountRef = useRef(messages.length);\n\n\t// Track scroll height before prepend so we can restore position\n\tconst scrollHeightBeforePrependRef = useRef<number | null>(null);\n\tconst firstMessageIdRef = useRef<string | undefined>(messages[0]?.id);\n\n\tconst getDistanceFromBottom = useCallback(() => {\n\t\tconst el = scrollRef.current;\n\t\tif (!el) return 0;\n\t\treturn el.scrollHeight - el.scrollTop - el.clientHeight;\n\t}, []);\n\n\tconst scrollToBottom = useCallback((behavior: ScrollBehavior = \"smooth\") => {\n\t\tconst el = scrollRef.current;\n\t\tif (!el) return;\n\t\tel.scrollTo({ top: el.scrollHeight, behavior });\n\t}, []);\n\n\tconst handleScroll = useCallback(() => {\n\t\tconst el = scrollRef.current;\n\t\tif (!el) return;\n\n\t\tconst distance = getDistanceFromBottom();\n\t\tconst nearBottom = distance <= SCROLL_THRESHOLD;\n\t\tisNearBottomRef.current = nearBottom;\n\t\tsetShowScrollBtn(!nearBottom);\n\n\t\t// Trigger load-more when scrolled near the top\n\t\tif (\n\t\t\tel.scrollTop <= LOAD_MORE_THRESHOLD &&\n\t\t\thasMoreMessages &&\n\t\t\t!isLoadingMoreMessages &&\n\t\t\tonLoadMoreMessages\n\t\t) {\n\t\t\t// Snapshot scroll height before the state update so we can restore position\n\t\t\tscrollHeightBeforePrependRef.current = el.scrollHeight;\n\t\t\tonLoadMoreMessages();\n\t\t}\n\t}, [getDistanceFromBottom, hasMoreMessages, isLoadingMoreMessages, onLoadMoreMessages]);\n\n\t// After messages are prepended, restore scroll position so the view doesn't jump\n\tuseLayoutEffect(() => {\n\t\tconst el = scrollRef.current;\n\t\tconst prevHeight = scrollHeightBeforePrependRef.current;\n\t\tconst newFirstId = messages[0]?.id;\n\n\t\tif (el && prevHeight !== null && newFirstId !== firstMessageIdRef.current) {\n\t\t\tel.scrollTop = el.scrollHeight - prevHeight;\n\t\t\tscrollHeightBeforePrependRef.current = null;\n\t\t}\n\t\tfirstMessageIdRef.current = newFirstId;\n\t}, [messages]);\n\n\t// Auto-scroll when new messages arrive\n\tuseEffect(() => {\n\t\tconst prevCount = prevMessageCountRef.current;\n\t\tprevMessageCountRef.current = messages.length;\n\n\t\tif (messages.length > prevCount && isNearBottomRef.current) {\n\t\t\trequestAnimationFrame(() => scrollToBottom());\n\t\t}\n\t}, [messages.length, scrollToBottom]);\n\n\t// Auto-scroll during streaming\n\tuseEffect(() => {\n\t\tconst lastMsg = messages[messages.length - 1];\n\t\tif (!lastMsg?.isStreaming) return;\n\t\tif (!isNearBottomRef.current) return;\n\n\t\trequestAnimationFrame(() => scrollToBottom());\n\t});\n\n\t// Instant scroll on mount\n\tuseEffect(() => {\n\t\tif (messages.length > 0) {\n\t\t\tsetTimeout(() => scrollToBottom(\"instant\"), 50);\n\t\t}\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, []);\n\n\t// Listen for steps toggle events from AgentMessage\n\t// When steps expand, scroll down a bit so they're visible\n\tuseEffect(() => {\n\t\tconst handleStepsToggle = () => {\n\t\t\t// After steps expand/collapse, if we're near the bottom, scroll to show them\n\t\t\trequestAnimationFrame(() => {\n\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\tconst distance = getDistanceFromBottom();\n\t\t\t\t\tif (distance > 0 && distance < 600) {\n\t\t\t\t\t\tscrollToBottom();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t};\n\n\t\tconst el = scrollRef.current;\n\t\tif (el) {\n\t\t\tel.addEventListener(\"payman-steps-toggle\", handleStepsToggle);\n\t\t\treturn () =>\n\t\t\t\tel.removeEventListener(\"payman-steps-toggle\", handleStepsToggle);\n\t\t}\n\t}, [getDistanceFromBottom, scrollToBottom]);\n\n\tconst handleScrollToBottom = useCallback(() => {\n\t\tscrollToBottom();\n\t}, [scrollToBottom]);\n\n\t/* Loading */\n\tif (isLoading) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex-1 overflow-y-auto min-h-0 payman-scrollbar\",\n\t\t\t\t\tclassName\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"space-y-5\",\n\t\t\t\t\t\tlayout === \"centered\" ? \"max-w-2xl mx-auto px-4 py-6\" : \"p-4\"\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{Array.from({ length: 5 }).map((_, i) => (\n\t\t\t\t\t\t<MessageRowSkeleton\n\t\t\t\t\t\t\tkey={`skel-${i}`}\n\t\t\t\t\t\t\tisRightAligned={i % 3 === 0}\n\t\t\t\t\t\t/>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n\n\t/* Empty state */\n\tif (messages.length === 0) {\n\t\tconst lines = emptyStateText.split(\"\\n\").map((l) => l.trim()).filter(Boolean);\n\t\treturn (\n\t\t\t<div className={cn(\"payman-empty-root\", className)}>\n\t\t\t\t<motion.div\n\t\t\t\t\tinitial={{ opacity: 0, y: 20 }}\n\t\t\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\t\t\ttransition={{ duration: 0.5, ease: [0.25, 0.46, 0.45, 0.94] }}\n\t\t\t\t\tclassName=\"payman-empty-content\"\n\t\t\t\t>\n\t\t\t\t\t{/* Custom component (e.g. logo/illustration) from integrator */}\n\t\t\t\t\t{emptyStateComponent && (\n\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\tinitial={{ scale: 0.9, opacity: 0 }}\n\t\t\t\t\t\t\tanimate={{ scale: 1, opacity: 1 }}\n\t\t\t\t\t\t\ttransition={{ delay: 0.05, duration: 0.45, ease: [0.25, 0.46, 0.45, 0.94] }}\n\t\t\t\t\t\t\tclassName=\"payman-empty-custom-component\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{emptyStateComponent}\n\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t)}\n\t\t\t\t\t<div className=\"payman-empty-text-group\">\n\t\t\t\t\t\t{lines.map((line, i) => (\n\t\t\t\t\t\t\t<motion.p\n\t\t\t\t\t\t\t\tkey={i}\n\t\t\t\t\t\t\t\tinitial={{ opacity: 0, y: 6 }}\n\t\t\t\t\t\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\t\t\t\t\t\ttransition={{ delay: 0.12 + i * 0.06, duration: 0.4 }}\n\t\t\t\t\t\t\t\tclassName={i === 0 ? \"payman-empty-title\" : \"payman-empty-subtitle\"}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{line}\n\t\t\t\t\t\t\t</motion.p>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</div>\n\t\t\t\t</motion.div>\n\t\t\t</div>\n\t\t);\n\t}\n\n\t/* Messages */\n\treturn (\n\t\t<>\n\t\t\t{/* Scrollable message list — takes full flex space */}\n\t\t\t<div\n\t\t\t\tref={scrollRef}\n\t\t\t\tonScroll={handleScroll}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex-1 min-h-0 overflow-y-auto payman-scrollbar relative\",\n\t\t\t\t\tclassName\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"space-y-4\",\n\t\t\t\t\t\tlayout === \"centered\" ? \"max-w-2xl mx-auto px-4 py-6\" : \"p-4\"\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{/* Load-more spinner shown at top while fetching older messages */}\n\t\t\t\t\t{isLoadingMoreMessages && (\n\t\t\t\t\t\t<div className=\"flex justify-center py-2\">\n\t\t\t\t\t\t\t<div className=\"w-5 h-5 rounded-full border-2 border-muted-foreground/30 border-t-muted-foreground animate-spin\" />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t\t{messages.map((message) => (\n\t\t\t\t\t\t<MessageRow\n\t\t\t\t\t\t\tkey={message.id}\n\t\t\t\t\t\t\tmessage={message}\n\t\t\t\t\t\t\tstage={stage}\n\t\t\t\t\t\t\tanimated={animated}\n\t\t\t\t\t\t\tshowAgentName={showAgentName}\n\t\t\t\t\t\t\tagentName={agentName}\n\t\t\t\t\t\t\tshowAvatars={showAvatars}\n\t\t\t\t\t\t\tshowUserAvatar={showUserAvatar}\n\t\t\t\t\t\t\tshowAssistantAvatar={showAssistantAvatar}\n\t\t\t\t\t\t\tlayout={layout}\n\t\t\t\t\t\t\tshowTimestamps={showTimestamps}\n\t\t\t\t\t\t\tshowExecutionSteps={showExecutionSteps}\n\t\t\t\t\t\t\tshowStreamingDot={showStreamingDot}\n\t\t\t\t\t\t\tstreamingStepsText={streamingStepsText}\n\t\t\t\t\t\t\tcompletedStepsText={completedStepsText}\n\t\t\t\t\t\t\tonExecutionTraceClick={onExecutionTraceClick}\n\t\t\t\t\t\t/>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\n\t\t\t\t{/* Scroll-to-bottom button */}\n\t\t\t\t{showScrollBtn && (\n\t\t\t\t\t<div className=\"sticky bottom-0 z-20 flex justify-center pb-3 -mt-11\">\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tonClick={handleScrollToBottom}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"w-8 h-8 rounded-full\",\n\t\t\t\t\t\t\t\t\"bg-card border border-border shadow-lg\",\n\t\t\t\t\t\t\t\t\"flex items-center justify-center\",\n\t\t\t\t\t\t\t\t\"hover:bg-muted active:scale-95\",\n\t\t\t\t\t\t\t\t\"transition-all duration-150\",\n\t\t\t\t\t\t\t\t\"cursor-pointer\"\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\taria-label=\"Scroll to bottom\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<ArrowDown className=\"w-4 h-4 text-muted-foreground\" />\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</>\n\t);\n}\n","import { useCallback, useEffect } from \"react\";\nimport { AnimatePresence, motion } from \"framer-motion\";\n\nexport type ResetSessionConfirmModalProps = {\n\tisOpen: boolean;\n\tonClose: () => void;\n\tonConfirm: () => void;\n};\n\nexport function ResetSessionConfirmModal({\n\tisOpen,\n\tonClose,\n\tonConfirm,\n}: ResetSessionConfirmModalProps) {\n\tconst handleKeyDown = useCallback(\n\t\t(event: KeyboardEvent) => {\n\t\t\tif (event.key === \"Escape\") {\n\t\t\t\tonClose();\n\t\t\t}\n\t\t},\n\t\t[onClose],\n\t);\n\n\tuseEffect(() => {\n\t\tif (!isOpen || typeof document === \"undefined\") return;\n\n\t\tdocument.addEventListener(\"keydown\", handleKeyDown);\n\t\tconst previousOverflow = document.body.style.overflow;\n\t\tdocument.body.style.overflow = \"hidden\";\n\n\t\treturn () => {\n\t\t\tdocument.removeEventListener(\"keydown\", handleKeyDown);\n\t\t\tdocument.body.style.overflow = previousOverflow;\n\t\t};\n\t}, [handleKeyDown, isOpen]);\n\n\treturn (\n\t\t<AnimatePresence>\n\t\t\t{isOpen ? (\n\t\t\t\t<motion.div\n\t\t\t\t\tclassName=\"payman-reset-session-modal-backdrop\"\n\t\t\t\t\tinitial={{ opacity: 0 }}\n\t\t\t\t\tanimate={{ opacity: 1 }}\n\t\t\t\t\texit={{ opacity: 0 }}\n\t\t\t\t\ttransition={{ duration: 0.18 }}\n\t\t\t\t\tonClick={onClose}\n\t\t\t\t\trole=\"presentation\"\n\t\t\t\t>\n\t\t\t\t\t<div className=\"payman-reset-session-modal-overlay\" />\n\n\t\t\t\t\t<motion.div\n\t\t\t\t\t\tinitial={{ opacity: 0, y: 12, scale: 0.98 }}\n\t\t\t\t\t\tanimate={{ opacity: 1, y: 0, scale: 1 }}\n\t\t\t\t\t\texit={{ opacity: 0, y: 8, scale: 0.98 }}\n\t\t\t\t\t\ttransition={{ duration: 0.2, ease: [0.16, 1, 0.3, 1] }}\n\t\t\t\t\t\tclassName=\"payman-reset-session-modal-dialog\"\n\t\t\t\t\t\tonClick={(event) => event.stopPropagation()}\n\t\t\t\t\t\trole=\"dialog\"\n\t\t\t\t\t\taria-modal=\"true\"\n\t\t\t\t\t\taria-labelledby=\"payman-reset-session-title\"\n\t\t\t\t\t\taria-describedby=\"payman-reset-session-description\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<div className=\"payman-reset-session-modal-copy\">\n\t\t\t\t\t\t\t<p className=\"payman-reset-session-modal-eyebrow\">\n\t\t\t\t\t\t\t\tNew Session\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t<h2\n\t\t\t\t\t\t\t\tid=\"payman-reset-session-title\"\n\t\t\t\t\t\t\t\tclassName=\"payman-reset-session-modal-title\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tStart a new session?\n\t\t\t\t\t\t\t</h2>\n\t\t\t\t\t\t\t<p\n\t\t\t\t\t\t\t\tid=\"payman-reset-session-description\"\n\t\t\t\t\t\t\t\tclassName=\"payman-reset-session-modal-description\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tThis will clear the current conversation and start fresh.\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<div className=\"payman-reset-session-modal-actions\">\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tonClick={onClose}\n\t\t\t\t\t\t\t\tclassName=\"payman-reset-session-modal-btn payman-reset-session-modal-btn-secondary\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tCancel\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tonClick={onConfirm}\n\t\t\t\t\t\t\t\tclassName=\"payman-reset-session-modal-btn payman-reset-session-modal-btn-primary\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tNew Session\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</motion.div>\n\t\t\t\t</motion.div>\n\t\t\t) : null}\n\t\t</AnimatePresence>\n\t);\n}\n","import type { ReactNode } from \"react\";\n\ntype ActionTooltipV2Props = {\n\tlabel: string;\n\tchildren: ReactNode;\n};\n\nexport function ActionTooltipV2({ label, children }: ActionTooltipV2Props) {\n\treturn (\n\t\t<div className=\"payman-v2-tooltip\">\n\t\t\t{children}\n\t\t\t<div aria-hidden=\"true\" className=\"payman-v2-tooltip-content\">\n\t\t\t\t<div className=\"payman-v2-tooltip-text\">\n\t\t\t\t\t{label}\n\t\t\t\t\t<div className=\"payman-v2-tooltip-arrow\" />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import { createPortal } from \"react-dom\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport { useEffect, useRef, useState } from \"react\";\nimport {\n\tAlertCircle,\n\tCheck,\n\tCopy,\n\tPencil,\n\tRotateCcw,\n} from \"lucide-react\";\nimport { ActionTooltipV2 } from \"./ActionTooltipV2\";\nimport { cn } from \"../../utils/cn\";\nimport { getConflictErrorMessage } from \"../../utils/errorMessages\";\nimport { parseSlashCommand } from \"../../utils/slashCommands\";\nimport type { MessageDisplay, UserMessageActionsConfig } from \"../../types\";\n\nexport type UserMessageV2Props = {\n\tmessage: MessageDisplay;\n\tonEdit?: (messageId: string) => void;\n\tonRetry?: (messageId: string) => void;\n\tretryDisabled?: boolean;\n\tactions?: UserMessageActionsConfig;\n};\n\ntype ToastState = {\n\tlabel: string;\n\ttone: \"success\" | \"error\";\n} | null;\n\nfunction formatMessageTime(timestamp: string): string {\n\tconst value = new Date(timestamp);\n\tif (Number.isNaN(value.getTime())) return \"\";\n\treturn new Intl.DateTimeFormat(undefined, {\n\t\thour: \"numeric\",\n\t\tminute: \"2-digit\",\n\t}).format(value);\n}\n\nexport function UserMessageV2({\n\tmessage,\n\tonEdit,\n\tonRetry,\n\tretryDisabled = false,\n\tactions,\n}: UserMessageV2Props) {\n\tconst [copied, setCopied] = useState(false);\n\tconst [toast, setToast] = useState<ToastState>(null);\n\tconst copyResetTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\tconst toastTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\tconst showCopyAction = actions?.copy ?? true;\n\tconst showEditAction = actions?.edit ?? false;\n\tconst showRetryAction = actions?.retry ?? false;\n\n\tuseEffect(() => {\n\t\treturn () => {\n\t\t\tif (copyResetTimerRef.current) clearTimeout(copyResetTimerRef.current);\n\t\t\tif (toastTimerRef.current) clearTimeout(toastTimerRef.current);\n\t\t};\n\t}, []);\n\n\tconst showToast = (label: string, tone: \"success\" | \"error\") => {\n\t\tif (toastTimerRef.current) clearTimeout(toastTimerRef.current);\n\t\tsetToast({ label, tone });\n\t\ttoastTimerRef.current = setTimeout(() => setToast(null), 1800);\n\t};\n\n\tconst handleCopy = async () => {\n\t\ttry {\n\t\t\tif (!navigator.clipboard?.writeText) {\n\t\t\t\tthrow new Error(\"Clipboard unavailable\");\n\t\t\t}\n\t\t\tawait navigator.clipboard.writeText(message.content);\n\t\t\tif (copyResetTimerRef.current) clearTimeout(copyResetTimerRef.current);\n\t\t\tsetCopied(true);\n\t\t\tcopyResetTimerRef.current = setTimeout(() => setCopied(false), 1800);\n\t\t\tshowToast(\"Copied to clipboard\", \"success\");\n\t\t} catch {\n\t\t\tsetCopied(false);\n\t\t\tshowToast(\"Could not copy\", \"error\");\n\t\t}\n\t};\n\n\tconst timestamp = formatMessageTime(message.timestamp);\n\tconst parsedCommand = parseSlashCommand(message.content);\n\tconst hasVisibleActions =\n\t\tshowCopyAction || (showEditAction && !!onEdit) || (showRetryAction && !!onRetry);\n\n\tconst toastPortal =\n\t\ttypeof document !== \"undefined\"\n\t\t\t? createPortal(\n\t\t\t\t\t<AnimatePresence>\n\t\t\t\t\t\t{toast && (\n\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\tinitial={{ opacity: 0, y: -18, scale: 0.96 }}\n\t\t\t\t\t\t\t\tanimate={{ opacity: 1, y: 0, scale: 1 }}\n\t\t\t\t\t\t\t\texit={{ opacity: 0, y: -12, scale: 0.96 }}\n\t\t\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\t\t\ttype: \"spring\",\n\t\t\t\t\t\t\t\t\tstiffness: 360,\n\t\t\t\t\t\t\t\t\tdamping: 26,\n\t\t\t\t\t\t\t\t\tmass: 0.7,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tclassName=\"payman-v2-toast\"\n\t\t\t\t\t\t\t\trole=\"status\"\n\t\t\t\t\t\t\t\taria-live=\"polite\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\"payman-v2-toast-inner\",\n\t\t\t\t\t\t\t\t\t\ttoast.tone === \"success\"\n\t\t\t\t\t\t\t\t\t\t\t? \"payman-v2-toast-success\"\n\t\t\t\t\t\t\t\t\t\t\t: \"payman-v2-toast-error\",\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\tstyle={{ borderRadius: 9999 }}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{toast.tone === \"success\" ? (\n\t\t\t\t\t\t\t\t\t<Check className=\"h-3.5 w-3.5\" style={{ color: \"#059669\" }} />\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<AlertCircle\n\t\t\t\t\t\t\t\t\t\tclassName=\"h-3.5 w-3.5\"\n\t\t\t\t\t\t\t\t\t\tstyle={{ color: \"#ef4444\" }}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t<span>{toast.label}</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</AnimatePresence>,\n\t\t\t\t\tdocument.body,\n\t\t\t\t)\n\t\t\t: null;\n\n\treturn (\n\t\t<>\n\t\t\t{toastPortal}\n\n\t\t\t<div className=\"payman-v2-user-msg payman-v2-fade-in\">\n\t\t\t\t<div className=\"payman-v2-user-msg-group\">\n\t\t\t\t\t<div className=\"payman-v2-user-msg-bubble\">\n\t\t\t\t\t\t{parsedCommand ? (\n\t\t\t\t\t\t\t<div className=\"payman-v2-user-msg-command\">\n\t\t\t\t\t\t\t\t<span className=\"payman-v2-user-msg-command-chip\">\n\t\t\t\t\t\t\t\t\t{parsedCommand.command}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t{parsedCommand.body.trim() ? (\n\t\t\t\t\t\t\t\t\t<p className=\"payman-v2-user-msg-text\">\n\t\t\t\t\t\t\t\t\t\t{parsedCommand.body}\n\t\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<p className=\"payman-v2-user-msg-text\">{message.content}</p>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\n\t\t\t\t\t{message.isError && message.errorDetails && (() => {\n\t\t\t\t\t\tconst resolvedError =\n\t\t\t\t\t\t\tgetConflictErrorMessage(message.errorDetails) ??\n\t\t\t\t\t\t\tmessage.errorDetails;\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<div className=\"payman-v2-user-msg-error\">\n\t\t\t\t\t\t\t\t<AlertCircle\n\t\t\t\t\t\t\t\t\tclassName=\"h-3.5 w-3.5 shrink-0\"\n\t\t\t\t\t\t\t\t\tstyle={{ color: \"rgba(239, 68, 68, 0.7)\", marginTop: \"2px\" }}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<p className=\"payman-v2-user-msg-error-text\">\n\t\t\t\t\t\t\t\t\t{resolvedError}\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t);\n\t\t\t\t\t})()}\n\n\t\t\t\t\t{(timestamp || hasVisibleActions) && (\n\t\t\t\t\t\t<div className=\"payman-v2-user-msg-actions\">\n\t\t\t\t\t\t\t{timestamp ? (\n\t\t\t\t\t\t\t\t<span className=\"payman-v2-user-msg-timestamp\">{timestamp}</span>\n\t\t\t\t\t\t\t) : null}\n\n\t\t\t\t\t\t\t{showCopyAction && (\n\t\t\t\t\t\t\t\t<ActionTooltipV2 label=\"Copy\">\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tonClick={() => void handleCopy()}\n\t\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-user-msg-action-btn\"\n\t\t\t\t\t\t\t\t\t\taria-label=\"Copy message\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{copied ? (\n\t\t\t\t\t\t\t\t\t\t\t<Check\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"h-3.5 w-3.5\"\n\t\t\t\t\t\t\t\t\t\t\t\tstyle={{ color: \"#059669\" }}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t<Copy className=\"h-3.5 w-3.5\" />\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t</ActionTooltipV2>\n\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t{showEditAction && onEdit && (\n\t\t\t\t\t\t\t\t<ActionTooltipV2 label=\"Edit\">\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tonClick={() => onEdit(message.id)}\n\t\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-user-msg-action-btn\"\n\t\t\t\t\t\t\t\t\t\taria-label=\"Edit message\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<Pencil className=\"h-3.5 w-3.5\" />\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t</ActionTooltipV2>\n\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t{showRetryAction && onRetry && (\n\t\t\t\t\t\t\t\t<ActionTooltipV2 label=\"Retry\">\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tonClick={() => onRetry(message.id)}\n\t\t\t\t\t\t\t\t\t\tdisabled={retryDisabled}\n\t\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-user-msg-action-btn\"\n\t\t\t\t\t\t\t\t\t\taria-label=\"Retry message\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<RotateCcw className=\"h-3.5 w-3.5\" />\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t</ActionTooltipV2>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</>\n\t);\n}\n","import {\n\tuseEffect,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n\ttype CSSProperties,\n} from \"react\";\nimport { Loader2, ImageOff, Eye } from \"lucide-react\";\nimport { cn } from \"../../utils/cn\";\n\nconst RAG_IMAGE_PATH_REGEX =\n\t/^(?:https?:\\/\\/[^/\\s]+)?\\/api\\/rag\\/chunks\\/[^\"'\\s]+\\/image(?:[?#][^\"'\\s]*)?$/;\n\nfunction isUnresolvedRagImageSource(src: string) {\n\treturn RAG_IMAGE_PATH_REGEX.test(src);\n}\n\nexport type MarkdownImageV2Props = {\n\tsrc?: string;\n\talt?: string;\n\tisResolving?: boolean;\n\tonImageClick?: (src: string, alt: string) => void;\n};\n\nconst frameStyle: CSSProperties = {\n\twidth: \"min(100%, 32rem)\",\n\tmaxWidth: \"100%\",\n};\n\nconst imgStyle: CSSProperties = {\n\tdisplay: \"block\",\n\twidth: \"100%\",\n\theight: \"auto\",\n\tmaxWidth: \"100%\",\n\tmaxHeight: \"22rem\",\n\tobjectFit: \"contain\",\n};\n\nexport function MarkdownImageV2({\n\tsrc,\n\talt,\n\tisResolving = false,\n\tonImageClick,\n}: MarkdownImageV2Props) {\n\tconst [isVisible, setIsVisible] = useState(false);\n\tconst [isLoaded, setIsLoaded] = useState(false);\n\tconst [hasError, setHasError] = useState(false);\n\tconst [retryCount, setRetryCount] = useState(0);\n\tconst sentinelRef = useRef<HTMLSpanElement>(null);\n\n\tconst isUnresolvedRag = useMemo(\n\t\t() => (src ? isUnresolvedRagImageSource(src) : false),\n\t\t[src],\n\t);\n\tconst isResolvingRag = Boolean(isResolving && isUnresolvedRag);\n\n\tuseEffect(() => {\n\t\tsetIsLoaded(false);\n\t\tsetHasError(false);\n\t\tsetRetryCount(0);\n\t\t// Don't reset visibility — if the element is already in the viewport\n\t\t// (e.g. after RAG URL → resolved URL swap), keep loading immediately\n\t\t// instead of flashing the \"Image\" placeholder for a frame.\n\t}, [src]);\n\n\tuseEffect(() => {\n\t\tconst el = sentinelRef.current;\n\t\tif (!el || !src) return;\n\n\t\tconst observer = new IntersectionObserver(\n\t\t\t([entry]) => {\n\t\t\t\tif (entry.isIntersecting) {\n\t\t\t\t\tsetIsVisible(true);\n\t\t\t\t\tobserver.disconnect();\n\t\t\t\t}\n\t\t\t},\n\t\t\t{ rootMargin: \"200px\" },\n\t\t);\n\n\t\tobserver.observe(el);\n\t\treturn () => observer.disconnect();\n\t}, [src]);\n\n\tif (!src) return null;\n\n\tif (isResolvingRag) {\n\t\treturn (\n\t\t\t<span\n\t\t\t\tclassName={cn(\"payman-v2-md-image\", \"payman-v2-md-image-resolving\")}\n\t\t\t>\n\t\t\t\t<span className=\"payman-v2-md-image-resolving-inner\">\n\t\t\t\t\t<Loader2\n\t\t\t\t\t\tstyle={{ animation: \"payman-v2-spin 0.7s linear infinite\" }}\n\t\t\t\t\t\taria-hidden\n\t\t\t\t\t/>\n\t\t\t\t\t<span>Loading image</span>\n\t\t\t\t\t<span>Reference image</span>\n\t\t\t\t</span>\n\t\t\t</span>\n\t\t);\n\t}\n\n\tif (hasError) {\n\t\treturn (\n\t\t\t<span className={cn(\"payman-v2-md-image\", \"payman-v2-md-image-error\")}>\n\t\t\t\t<ImageOff aria-hidden />\n\t\t\t\t<span>Unable to load image</span>\n\t\t\t\t{alt ? <span>{alt}</span> : null}\n\t\t\t\t{retryCount < 3 ? (\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclassName=\"payman-v2-md-image-error-retry\"\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\tsetHasError(false);\n\t\t\t\t\t\t\tsetRetryCount((c) => c + 1);\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\tRetry\n\t\t\t\t\t</button>\n\t\t\t\t) : null}\n\t\t\t</span>\n\t\t);\n\t}\n\n\tconst imgSrc =\n\t\tretryCount > 0\n\t\t\t? `${src}${src.includes(\"?\") ? \"&\" : \"?\"}_r=${retryCount}`\n\t\t\t: src;\n\n\treturn (\n\t\t<span ref={sentinelRef} className=\"payman-v2-md-image\">\n\t\t\t{isVisible ? (\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclassName=\"payman-v2-md-image-button\"\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\tif (isLoaded && src) onImageClick?.(src, alt || \"Image\");\n\t\t\t\t\t}}\n\t\t\t\t\tdisabled={!isLoaded}\n\t\t\t\t\taria-busy={!isLoaded}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\t...frameStyle,\n\t\t\t\t\t\tminHeight: isLoaded ? 0 : \"10rem\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{!isLoaded && (\n\t\t\t\t\t\t<span className=\"payman-v2-md-image-loading\">\n\t\t\t\t\t\t\t<Loader2\n\t\t\t\t\t\t\t\tstyle={{ animation: \"payman-v2-spin 0.7s linear infinite\" }}\n\t\t\t\t\t\t\t\taria-hidden\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<span>Loading image…</span>\n\t\t\t\t\t\t</span>\n\t\t\t\t\t)}\n\n\t\t\t\t\t<img\n\t\t\t\t\t\tsrc={imgSrc}\n\t\t\t\t\t\talt={alt || \"\"}\n\t\t\t\t\t\tclassName=\"payman-v2-md-image-img\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t...imgStyle,\n\t\t\t\t\t\t\topacity: isLoaded ? 1 : 0,\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonLoad={() => {\n\t\t\t\t\t\t\tsetHasError(false);\n\t\t\t\t\t\t\tsetIsLoaded(true);\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonError={() => {\n\t\t\t\t\t\t\tsetIsLoaded(false);\n\t\t\t\t\t\t\tsetHasError(true);\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\n\t\t\t\t\t{isLoaded ? (\n\t\t\t\t\t\t<span className=\"payman-v2-md-image-overlay\" aria-hidden>\n\t\t\t\t\t\t\t<span className=\"payman-v2-md-image-overlay-icon\">\n\t\t\t\t\t\t\t\t<Eye />\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</span>\n\t\t\t\t\t) : null}\n\t\t\t\t</button>\n\t\t\t) : (\n\t\t\t\t<span\n\t\t\t\t\tclassName=\"payman-v2-md-image-placeholder\"\n\t\t\t\t\tstyle={{ ...frameStyle, minHeight: \"10rem\" }}\n\t\t\t\t>\n\t\t\t\t\t<span>Image</span>\n\t\t\t\t</span>\n\t\t\t)}\n\t\t</span>\n\t);\n}\n","import ReactMarkdown from \"react-markdown\";\nimport remarkGfm from \"remark-gfm\";\nimport remarkBreaks from \"remark-breaks\";\nimport type { Components } from \"react-markdown\";\nimport { useMemo } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { MarkdownImageV2 } from \"./MarkdownImageV2\";\n\nexport type MarkdownRendererV2Props = {\n\tcontent: string;\n\tisStreaming?: boolean;\n\tisResolvingImages?: boolean;\n\tonImageClick?: (src: string, alt: string) => void;\n};\n\nfunction buildComponents(\n\tonImageClick?: (src: string, alt: string) => void,\n\tisResolvingImages?: boolean,\n): Components {\n\treturn {\n\t\tp: ({ children }) => <p>{children}</p>,\n\t\tcode: ({ children }) => <code>{children}</code>,\n\t\tpre: ({ children }) => (\n\t\t\t<div className=\"payman-v2-markdown-pre\">\n\t\t\t\t<pre>{children}</pre>\n\t\t\t</div>\n\t\t),\n\t\tul: ({ children }) => <ul>{children}</ul>,\n\t\tol: ({ children }) => <ol>{children}</ol>,\n\t\tli: ({ children }) => <li>{children}</li>,\n\t\th1: ({ children }) => <h1>{children}</h1>,\n\t\th2: ({ children }) => <h2>{children}</h2>,\n\t\th3: ({ children }) => <h3>{children}</h3>,\n\t\tstrong: ({ children }) => <strong>{children}</strong>,\n\t\tem: ({ children }) => <em>{children}</em>,\n\t\tblockquote: ({ children }) => <blockquote>{children}</blockquote>,\n\t\thr: () => <hr />,\n\t\ta: ({ href, children }) => (\n\t\t\t<a href={href} target=\"_blank\" rel=\"noopener noreferrer\">\n\t\t\t\t{children}\n\t\t\t</a>\n\t\t),\n\t\timg: ({ src, alt }) => (\n\t\t\t<MarkdownImageV2\n\t\t\t\tsrc={typeof src === \"string\" ? src : undefined}\n\t\t\t\talt={typeof alt === \"string\" ? alt : undefined}\n\t\t\t\tisResolving={isResolvingImages}\n\t\t\t\tonImageClick={onImageClick}\n\t\t\t/>\n\t\t),\n\t\ttable: ({ children }) => (\n\t\t\t<div className=\"payman-v2-markdown-table-wrapper\">\n\t\t\t\t<table className=\"payman-v2-markdown-table\">{children}</table>\n\t\t\t</div>\n\t\t),\n\t\tthead: ({ children }) => (\n\t\t\t<thead className=\"payman-v2-markdown-thead\">{children}</thead>\n\t\t),\n\t\ttbody: ({ children }) => (\n\t\t\t<tbody className=\"payman-v2-markdown-tbody\">{children}</tbody>\n\t\t),\n\t\tth: ({ children }) => (\n\t\t\t<th className=\"payman-v2-markdown-th\">{children}</th>\n\t\t),\n\t\ttd: ({ children }) => (\n\t\t\t<td className=\"payman-v2-markdown-td\">{children}</td>\n\t\t),\n\t};\n}\n\nexport function MarkdownRendererV2({\n\tcontent,\n\tisStreaming,\n\tisResolvingImages,\n\tonImageClick,\n}: MarkdownRendererV2Props) {\n\tconst components = useMemo(\n\t\t() => buildComponents(onImageClick, isResolvingImages),\n\t\t[onImageClick, isResolvingImages],\n\t);\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"payman-v2-markdown\",\n\t\t\t\tisStreaming && \"payman-v2-streaming-cursor\",\n\t\t\t)}\n\t\t>\n\t\t\t{/*\n\t\t\t remark-breaks converts every single `\\n` in the source\n\t\t\t into a hard line break (<br>) in the output. Without it,\n\t\t\t standard markdown collapses single newlines — so an LLM\n\t\t\t that emits \"Item A\\nItem B\\nItem C\" (one item per line in\n\t\t\t the source) renders as one paragraph of run-on text. With\n\t\t\t remark-breaks the user sees exactly the line layout the\n\t\t\t LLM wrote.\n\t\t\t*/}\n\t\t\t<ReactMarkdown remarkPlugins={[remarkGfm, remarkBreaks]} components={components}>\n\t\t\t\t{content}\n\t\t\t</ReactMarkdown>\n\t\t</div>\n\t);\n}\n","import { AnimatePresence, motion } from \"framer-motion\";\n\n/**\n * Label shown when streaming is in progress but no real step has\n * been recorded yet — the ~50ms window before the first\n * STAGE_STARTED event arrives. Single honest label, no rotating\n * made-up text.\n */\nexport const PENDING_LABEL = \"Thinking\";\n\nexport type ThinkingBlockV2Props = {\n\t/**\n\t * True while the stream is still producing events. The parent\n\t * (`AssistantMessageV2`) unmounts this component entirely when\n\t * this flips to false, wrapped in an outer AnimatePresence for\n\t * the exit fade, so this prop is effectively always true at\n\t * render time today — kept as a prop for future flexibility.\n\t */\n\tisStreaming: boolean;\n\t/**\n\t * Optional sticky header line — the Analyzer's plan narrative\n\t * (\"I'll pull your Q1 transactions and compare them against\n\t * April…\"). Rendered ABOVE the flipping cursor and stays put\n\t * for the duration of the run, so the user can keep the\n\t * strategy in view while the tactical [currentStepLabel] ticks\n\t * by below. Null during the Analyzer's own window — two-line\n\t * layout collapses to one line until the plan lands.\n\t */\n\tstickyLabel?: string;\n\t/**\n\t * The currently-running stage's label — computed from the\n\t * `message.steps` array in the parent. Rendered as a single\n\t * flipping line: when the label changes (next stage starts),\n\t * the old label slides up and fades while the new one slides\n\t * in from below (\"digital-clock flip\" style). Parent owns the\n\t * \"which step is current\" logic, so this component stays\n\t * dumb and just renders whatever it's given.\n\t */\n\tcurrentStepLabel?: string;\n};\n\n/**\n * Live streaming indicator rendered above the assistant response\n * while a playground/chat run is in flight. Just the current\n * stage's friendly label on a single line — \"Checking your\n * request…\", \"Pulling those up for you now.\", \"Executing…\" — with\n * framer-motion flipping between labels as stages advance.\n *\n * The \"time is passing\" signal used to live here as a spinning\n * asterisk glyph next to the label. That was moved to a dedicated\n * `StreamingIndicatorV2` component rendered above the chat input\n * (Claude-style), so the text area stays clean and the motion\n * lands where the user's eye naturally rests between reads.\n *\n * After streaming ends, the parent unmounts this component entirely\n * (inside its own AnimatePresence), so there is no post-streaming\n * \"Thought\" label, no expand/collapse history view, no duration\n * pill. Users who need to review the steps that ran can click the\n * trace icon in the action row.\n */\nexport function ThinkingBlockV2({\n\tisStreaming: _isStreaming,\n\tstickyLabel,\n\tcurrentStepLabel,\n}: ThinkingBlockV2Props) {\n\tconst displayedCursorLabel = currentStepLabel || PENDING_LABEL;\n\n\treturn (\n\t\t<div className=\"payman-v2-thinking\">\n\t\t\t{/*\n\t\t\t Sticky plan header — the Analyzer's LLM-generated\n\t\t\t narrative of how the agent plans to handle the request.\n\t\t\t Rendered with a gentle fade-in when it first arrives\n\t\t\t (usually 2-3s into the run), then stays put. No\n\t\t\t flipping animation: the whole point is stability.\n\t\t\t*/}\n\t\t\t<AnimatePresence>\n\t\t\t\t{stickyLabel && (\n\t\t\t\t\t<motion.div\n\t\t\t\t\t\tkey=\"sticky\"\n\t\t\t\t\t\tclassName=\"payman-v2-thinking-sticky\"\n\t\t\t\t\t\tinitial={{ opacity: 0, y: 4 }}\n\t\t\t\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\t\t\t\texit={{ opacity: 0 }}\n\t\t\t\t\t\ttransition={{ duration: 0.4, ease: [0.2, 0, 0, 1] }}\n\t\t\t\t\t>\n\t\t\t\t\t\t{stickyLabel}\n\t\t\t\t\t</motion.div>\n\t\t\t\t)}\n\t\t\t</AnimatePresence>\n\t\t\t<div className=\"payman-v2-thinking-cursor\">\n\t\t\t\t<AnimatePresence mode=\"wait\">\n\t\t\t\t\t<motion.span\n\t\t\t\t\t\tkey={displayedCursorLabel}\n\t\t\t\t\t\tclassName=\"payman-v2-thinking-cursor-label payman-v2-thinking-shimmer\"\n\t\t\t\t\t\tinitial={{ opacity: 0, y: 6 }}\n\t\t\t\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\t\t\t\texit={{ opacity: 0, y: -6 }}\n\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\tduration: 0.34,\n\t\t\t\t\t\t\tease: [0.2, 0, 0, 1],\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{displayedCursorLabel}\n\t\t\t\t\t</motion.span>\n\t\t\t\t</AnimatePresence>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import { useCallback, useEffect, useState } from \"react\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport { Check, ChevronDown, X } from \"lucide-react\";\nimport {\n\tNEGATIVE_FEEDBACK_REASONS,\n\ttype NegativeFeedbackReason,\n} from \"../../utils/feedbackClient\";\n\nconst MAX_DETAILS_CHARS = 2000;\n\nexport type FeedbackReasonModalProps = {\n\topen: boolean;\n\tonClose: () => void;\n\t/**\n\t * Persist the chosen reason + optional details. Should reject if the save\n\t * fails — the modal stays open and surfaces the error instead of closing.\n\t */\n\tonSubmit: (reason: NegativeFeedbackReason, details?: string) => Promise<void>;\n};\n\n/**\n * Thumbs-down reason picker. A negative rating always carries one reason\n * (matching the backend's required category) plus optional free-text detail.\n */\nexport function FeedbackReasonModal({\n\topen,\n\tonClose,\n\tonSubmit,\n}: FeedbackReasonModalProps) {\n\tconst [reason, setReason] = useState<NegativeFeedbackReason>(\n\t\tNEGATIVE_FEEDBACK_REASONS[0].value,\n\t);\n\tconst [details, setDetails] = useState(\"\");\n\tconst [submitting, setSubmitting] = useState(false);\n\tconst [error, setError] = useState<string | null>(null);\n\tconst [reasonOpen, setReasonOpen] = useState(false);\n\n\tuseEffect(() => {\n\t\tif (open) {\n\t\t\tsetReason(NEGATIVE_FEEDBACK_REASONS[0].value);\n\t\t\tsetDetails(\"\");\n\t\t\tsetError(null);\n\t\t\tsetSubmitting(false);\n\t\t\tsetReasonOpen(false);\n\t\t}\n\t}, [open]);\n\n\tconst handleKeyDown = useCallback(\n\t\t(event: KeyboardEvent) => {\n\t\t\tif (event.key !== \"Escape\") return;\n\t\t\tif (reasonOpen) {\n\t\t\t\tsetReasonOpen(false);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tonClose();\n\t\t},\n\t\t[onClose, reasonOpen],\n\t);\n\n\tuseEffect(() => {\n\t\tif (!open || typeof document === \"undefined\") return;\n\t\tdocument.addEventListener(\"keydown\", handleKeyDown);\n\t\tconst previousOverflow = document.body.style.overflow;\n\t\tdocument.body.style.overflow = \"hidden\";\n\t\treturn () => {\n\t\t\tdocument.removeEventListener(\"keydown\", handleKeyDown);\n\t\t\tdocument.body.style.overflow = previousOverflow;\n\t\t};\n\t}, [handleKeyDown, open]);\n\n\tconst handleSubmit = async () => {\n\t\tsetSubmitting(true);\n\t\tsetError(null);\n\t\tsetReasonOpen(false);\n\t\ttry {\n\t\t\tawait onSubmit(reason, details.trim() ? details.trim() : undefined);\n\t\t\tonClose();\n\t\t} catch (e) {\n\t\t\tsetError(e instanceof Error ? e.message : \"Could not send feedback\");\n\t\t\tsetSubmitting(false);\n\t\t}\n\t};\n\n\tconst selectedReason =\n\t\tNEGATIVE_FEEDBACK_REASONS.find((item) => item.value === reason) ??\n\t\tNEGATIVE_FEEDBACK_REASONS[0];\n\n\treturn (\n\t\t<AnimatePresence>\n\t\t\t{open ? (\n\t\t\t\t<motion.div\n\t\t\t\t\tclassName=\"payman-v2-feedback-modal-backdrop\"\n\t\t\t\t\tinitial={{ opacity: 0 }}\n\t\t\t\t\tanimate={{ opacity: 1 }}\n\t\t\t\t\texit={{ opacity: 0 }}\n\t\t\t\t\ttransition={{ duration: 0.18 }}\n\t\t\t\t\tonClick={onClose}\n\t\t\t\t\trole=\"presentation\"\n\t\t\t\t>\n\t\t\t\t\t<motion.div\n\t\t\t\t\t\tinitial={{ opacity: 0, y: 12, scale: 0.98 }}\n\t\t\t\t\t\tanimate={{ opacity: 1, y: 0, scale: 1 }}\n\t\t\t\t\t\texit={{ opacity: 0, y: 8, scale: 0.98 }}\n\t\t\t\t\t\ttransition={{ duration: 0.2, ease: [0.16, 1, 0.3, 1] }}\n\t\t\t\t\t\tclassName=\"payman-v2-feedback-modal-dialog\"\n\t\t\t\t\t\tonClick={(event) => event.stopPropagation()}\n\t\t\t\t\t\trole=\"dialog\"\n\t\t\t\t\t\taria-modal=\"true\"\n\t\t\t\t\t\taria-labelledby=\"payman-v2-feedback-title\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tonClick={onClose}\n\t\t\t\t\t\t\tdisabled={submitting}\n\t\t\t\t\t\t\tclassName=\"payman-v2-feedback-modal-close\"\n\t\t\t\t\t\t\taria-label=\"Close feedback modal\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<X size={18} strokeWidth={2} />\n\t\t\t\t\t\t</button>\n\n\t\t\t\t\t\t<h2\n\t\t\t\t\t\t\tid=\"payman-v2-feedback-title\"\n\t\t\t\t\t\t\tclassName=\"payman-v2-feedback-modal-title\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tTell us what went wrong\n\t\t\t\t\t\t</h2>\n\n\t\t\t\t\t\t<label\n\t\t\t\t\t\t\tclassName=\"payman-v2-feedback-modal-label\"\n\t\t\t\t\t\t\thtmlFor=\"payman-v2-feedback-reason\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tWhat was the issue?\n\t\t\t\t\t\t</label>\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tid=\"payman-v2-feedback-reason\"\n\t\t\t\t\t\t\tclassName=\"payman-v2-feedback-modal-reason\"\n\t\t\t\t\t\t\tonBlur={(event) => {\n\t\t\t\t\t\t\t\tconst nextTarget = event.relatedTarget as Node | null;\n\t\t\t\t\t\t\t\tif (!nextTarget || !event.currentTarget.contains(nextTarget)) {\n\t\t\t\t\t\t\t\t\tsetReasonOpen(false);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tclassName=\"payman-v2-feedback-modal-reason-trigger\"\n\t\t\t\t\t\t\t\taria-haspopup=\"listbox\"\n\t\t\t\t\t\t\t\taria-expanded={reasonOpen}\n\t\t\t\t\t\t\t\taria-controls=\"payman-v2-feedback-reason-options\"\n\t\t\t\t\t\t\t\tdisabled={submitting}\n\t\t\t\t\t\t\t\tonClick={() => setReasonOpen((current) => !current)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<span>{selectedReason.label}</span>\n\t\t\t\t\t\t\t\t<ChevronDown\n\t\t\t\t\t\t\t\t\tsize={17}\n\t\t\t\t\t\t\t\t\tstrokeWidth={2}\n\t\t\t\t\t\t\t\t\tclassName={\n\t\t\t\t\t\t\t\t\t\treasonOpen\n\t\t\t\t\t\t\t\t\t\t\t? \"payman-v2-feedback-modal-reason-chevron payman-v2-feedback-modal-reason-chevron-open\"\n\t\t\t\t\t\t\t\t\t\t\t: \"payman-v2-feedback-modal-reason-chevron\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t{reasonOpen ? (\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tid=\"payman-v2-feedback-reason-options\"\n\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-feedback-modal-reason-menu\"\n\t\t\t\t\t\t\t\t\trole=\"listbox\"\n\t\t\t\t\t\t\t\t\taria-label=\"Feedback issue\"\n\t\t\t\t\t\t\t\t\ttabIndex={-1}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{NEGATIVE_FEEDBACK_REASONS.map((item) => {\n\t\t\t\t\t\t\t\t\t\tconst isSelected = item.value === reason;\n\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t\tkey={item.value}\n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\tclassName={\n\t\t\t\t\t\t\t\t\t\t\t\t\tisSelected\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? \"payman-v2-feedback-modal-reason-option payman-v2-feedback-modal-reason-option-selected\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: \"payman-v2-feedback-modal-reason-option\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\trole=\"option\"\n\t\t\t\t\t\t\t\t\t\t\t\taria-selected={isSelected}\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tsetReason(item.value);\n\t\t\t\t\t\t\t\t\t\t\t\t\tsetReasonOpen(false);\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<span>{item.label}</span>\n\t\t\t\t\t\t\t\t\t\t\t\t{isSelected ? <Check size={16} strokeWidth={2} /> : null}\n\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<textarea\n\t\t\t\t\t\t\tclassName=\"payman-v2-feedback-modal-textarea\"\n\t\t\t\t\t\t\tplaceholder=\"Add details (optional)\"\n\t\t\t\t\t\t\tvalue={details}\n\t\t\t\t\t\t\tmaxLength={MAX_DETAILS_CHARS}\n\t\t\t\t\t\t\tonChange={(e) => setDetails(e.target.value)}\n\t\t\t\t\t\t\tdisabled={submitting}\n\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t{error ? (\n\t\t\t\t\t\t\t<p className=\"payman-v2-feedback-modal-error\">{error}</p>\n\t\t\t\t\t\t) : null}\n\n\t\t\t\t\t\t<div className=\"payman-v2-feedback-modal-actions\">\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tonClick={onClose}\n\t\t\t\t\t\t\t\tdisabled={submitting}\n\t\t\t\t\t\t\t\tclassName=\"payman-v2-feedback-modal-btn payman-v2-feedback-modal-btn-secondary\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tCancel\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tonClick={handleSubmit}\n\t\t\t\t\t\t\t\tdisabled={submitting}\n\t\t\t\t\t\t\t\tclassName=\"payman-v2-feedback-modal-btn payman-v2-feedback-modal-btn-primary\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{submitting ? \"Sending…\" : \"Submit\"}\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</motion.div>\n\t\t\t\t</motion.div>\n\t\t\t) : null}\n\t\t</AnimatePresence>\n\t);\n}\n","import { useEffect, useRef, useState } from \"react\";\n\n/**\n * Progressively reveals `targetText` char-by-char, matching the demo's\n * typing-loop feel for both thinking content and the final response.\n *\n * - While `enabled` is true the hook keeps a \"displayed\" buffer and\n * advances it toward the current `targetText` one character at a time.\n * - If new text is appended to `targetText` mid-animation, the loop\n * picks up from where it left off.\n * - When `enabled` becomes false the remaining text is flushed instantly\n * (e.g. when thinking ends and we auto-collapse).\n *\n * ### Speed multiplier\n *\n * Each character's per-char delay is divided by `speedMultiplier` so\n * larger values mean faster typing:\n * 1 → default pace (unchanged)\n * 2 → twice as fast\n * 0.5 → half speed\n * 0 → instant reveal (skip the animation entirely)\n *\n * Non-zero values are clamped to a minimum of 0.1 to avoid divide-by-zero\n * or absurdly slow playback from accidental tiny values.\n */\n\ntype SpeedProfile = {\n\tnormal: [number, number];\n\tfast: number;\n\tpunctuation: [number, number];\n\tnewline: [number, number];\n\tidle: number;\n};\n\nexport const THINKING_SPEED: SpeedProfile = {\n\tnormal: [6, 8],\n\tfast: 1,\n\tpunctuation: [20, 30],\n\tnewline: [12, 18],\n\tidle: 30,\n};\n\nexport const RESPONSE_SPEED: SpeedProfile = {\n\tnormal: [2, 4],\n\tfast: 1,\n\tpunctuation: [8, 12],\n\tnewline: [4, 6],\n\tidle: 15,\n};\n\nfunction charDelay(char: string, speed: SpeedProfile, multiplier: number): number {\n\tconst raw = (() => {\n\t\tif (char === \"*\") return speed.fast;\n\t\tif (char === \"\\n\")\n\t\t\treturn speed.newline[0] + Math.random() * speed.newline[1];\n\t\tif (\".!?,;:\".includes(char))\n\t\t\treturn speed.punctuation[0] + Math.random() * speed.punctuation[1];\n\t\treturn speed.normal[0] + Math.random() * speed.normal[1];\n\t})();\n\treturn raw / multiplier;\n}\n\nexport function useTypingEffect(\n\ttargetText: string,\n\tenabled: boolean,\n\tspeed: SpeedProfile = RESPONSE_SPEED,\n\tinitialDisplayedText?: string,\n\tspeedMultiplier: number = 1,\n): { displayedText: string; isTyping: boolean } {\n\t// speedMultiplier === 0 is a hard kill-switch: render instantly, no animation.\n\t// Any non-zero value is clamped to a sensible minimum.\n\tconst instant = speedMultiplier === 0;\n\tconst multiplier = instant ? 1 : Math.max(speedMultiplier, 0.1);\n\n\tconst [displayedText, setDisplayedText] = useState(\"\");\n\tconst displayedRef = useRef(\"\");\n\tconst targetRef = useRef(targetText);\n\tconst enabledRef = useRef(enabled);\n\tconst initialDisplayedRef = useRef(initialDisplayedText);\n\tconst timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\tconst runningRef = useRef(false);\n\n\ttargetRef.current = targetText;\n\tenabledRef.current = enabled;\n\tinitialDisplayedRef.current = initialDisplayedText;\n\n\tuseEffect(() => {\n\t\tif (!enabled || instant) {\n\t\t\tif (timerRef.current) {\n\t\t\t\tclearTimeout(timerRef.current);\n\t\t\t\ttimerRef.current = null;\n\t\t\t}\n\t\t\trunningRef.current = false;\n\t\t\tdisplayedRef.current = targetText;\n\t\t\tsetDisplayedText(targetText);\n\t\t\treturn;\n\t\t}\n\n\t\tif (\n\t\t\tdisplayedRef.current.length === 0 &&\n\t\t\tinitialDisplayedRef.current &&\n\t\t\ttargetRef.current.startsWith(initialDisplayedRef.current)\n\t\t) {\n\t\t\tdisplayedRef.current = initialDisplayedRef.current;\n\t\t\tsetDisplayedText(initialDisplayedRef.current);\n\t\t}\n\n\t\tif (runningRef.current) return;\n\t\trunningRef.current = true;\n\n\t\tconst tick = () => {\n\t\t\tif (!enabledRef.current) {\n\t\t\t\trunningRef.current = false;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (displayedRef.current.length < targetRef.current.length) {\n\t\t\t\tconst nextChar = targetRef.current[displayedRef.current.length];\n\t\t\t\tdisplayedRef.current += nextChar;\n\t\t\t\tsetDisplayedText(displayedRef.current);\n\t\t\t\tconst delay = charDelay(nextChar, speed, multiplier);\n\t\t\t\ttimerRef.current = setTimeout(tick, delay);\n\t\t\t} else {\n\t\t\t\ttimerRef.current = setTimeout(tick, speed.idle / multiplier);\n\t\t\t}\n\t\t};\n\n\t\ttick();\n\n\t\treturn () => {\n\t\t\tif (timerRef.current) {\n\t\t\t\tclearTimeout(timerRef.current);\n\t\t\t\ttimerRef.current = null;\n\t\t\t}\n\t\t\trunningRef.current = false;\n\t\t};\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [enabled, instant]);\n\n\tconst isTyping =\n\t\tenabled && !instant && displayedRef.current.length < targetRef.current.length;\n\n\treturn {\n\t\tdisplayedText: enabled || instant ? displayedText : targetText,\n\t\tisTyping,\n\t};\n}\n","import { useEffect, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport {\n\tCopy,\n\tCheck,\n\tAlertCircle,\n\tWifiOff,\n\tBinoculars,\n\tThumbsUp,\n\tThumbsDown,\n} from \"lucide-react\";\nimport type {\n\tAssistantMessageActionsConfig,\n\tMessageDisplay,\n} from \"../../types\";\nimport { MarkdownRendererV2 } from \"./MarkdownRendererV2\";\nimport { ThinkingBlockV2 } from \"./ThinkingBlockV2\";\nimport { ActionTooltipV2 } from \"./ActionTooltipV2\";\nimport { FeedbackReasonModal } from \"./FeedbackReasonModal\";\nimport { cn } from \"../../utils/cn\";\nimport type { SubmitFeedbackHandler } from \"../../utils/feedbackClient\";\nimport { useTypingEffect, RESPONSE_SPEED } from \"./useTypingEffect\";\n\nexport type AssistantMessageV2Props = {\n\tmessage: MessageDisplay;\n\tonImageClick?: (src: string, alt: string) => void;\n\tonExecutionTraceClick?: (data: {\n\t\tmessage: MessageDisplay;\n\t\ttracingData?: unknown;\n\t\texecutionId?: string;\n\t}) => void;\n\t/**\n\t * Persist thumbs-up/down feedback. Resolves on a durable save and rejects\n\t * on failure so the optimistic UI can revert / the reason modal can show\n\t * an error.\n\t */\n\tonSubmitFeedback?: SubmitFeedbackHandler;\n\tactions?: AssistantMessageActionsConfig;\n\t/**\n\t * Typing-reveal speed multiplier. 1 = default, 2 = 2x faster,\n\t * 0.5 = half speed, 0 = instant reveal (animation disabled).\n\t */\n\ttypingSpeed?: number;\n};\n\ntype ToastState = {\n\tlabel: string;\n\ttone: \"success\" | \"error\";\n} | null;\n\n\nexport function AssistantMessageV2({\n\tmessage,\n\tonImageClick,\n\tonExecutionTraceClick,\n\tonSubmitFeedback,\n\tactions,\n\ttypingSpeed = 4,\n}: AssistantMessageV2Props) {\n\tconst [copied, setCopied] = useState(false);\n\tconst [activeFeedback, setActiveFeedback] = useState<\"up\" | \"down\" | null>(null);\n\tconst [reasonModalOpen, setReasonModalOpen] = useState(false);\n\tconst canSubmitFeedback = !!onSubmitFeedback && !!message.executionId;\n\n\tconst handlePositiveFeedback = () => {\n\t\tif (!canSubmitFeedback || activeFeedback === \"up\") return;\n\t\tconst previous = activeFeedback;\n\t\tsetActiveFeedback(\"up\");\n\t\tPromise.resolve(\n\t\t\tonSubmitFeedback?.({\n\t\t\t\tmessageId: message.id,\n\t\t\t\texecutionId: message.executionId,\n\t\t\t\tfeedback: \"POSITIVE\",\n\t\t\t}),\n\t\t).catch(() => setActiveFeedback(previous));\n\t};\n\tconst [toast, setToast] = useState<ToastState>(null);\n\tconst copyResetTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\tconst toastTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\tconst showCopyAction = actions?.copy ?? true;\n\tconst showTraceAction =\n\t\t(actions?.trace ?? true) && !!onExecutionTraceClick;\n\tconst showThumbsUp = actions?.thumbsUp ?? true;\n\tconst showThumbsDown = actions?.thumbsDown ?? true;\n\n\tconst hasEverStreamed = useRef(!!message.isStreaming);\n\tif (message.isStreaming) hasEverStreamed.current = true;\n\n\tuseEffect(() => {\n\t\treturn () => {\n\t\t\tif (copyResetTimerRef.current) clearTimeout(copyResetTimerRef.current);\n\t\t\tif (toastTimerRef.current) clearTimeout(toastTimerRef.current);\n\t\t};\n\t}, []);\n\n\tconst rawResponseContent = (() => {\n\t\tconst raw = message.isStreaming\n\t\t\t? (message.streamingContent || message.content)\n\t\t\t: message.content;\n\t\tif (!raw) return \"\";\n\t\treturn raw.replace(/\\\\n/g, \"\\n\");\n\t})();\n\n\tconst isThinkingStreaming =\n\t\t!!message.isStreaming &&\n\t\t!rawResponseContent &&\n\t\t!message.isError;\n\n\tconst responseTypingEnabled =\n\t\thasEverStreamed.current && Boolean(rawResponseContent) && !message.isError;\n\n\tconst { displayedText: displayContent, isTyping: isResponseTyping } =\n\t\tuseTypingEffect(\n\t\t\trawResponseContent,\n\t\t\tresponseTypingEnabled,\n\t\t\tRESPONSE_SPEED,\n\t\t\tundefined,\n\t\t\ttypingSpeed,\n\t\t);\n\n\t// Two-line live-progress model computed from `message.steps`:\n\t//\n\t// stickyLabel: the Analyzer's LLM-generated plan narrative — e.g.\n\t// \"I'll pull your Q1 transactions and compare them against\n\t// April to spot the biggest recurring charges.\" Rendered as a\n\t// sticky header that never changes for the duration of the\n\t// run, so the user can read the agent's strategy while the\n\t// tactics tick by below. Null until the Analyzer completes.\n\t//\n\t// currentStepLabel: live tactical label — the tool/stage\n\t// currently in flight. Flips between \"Pulling debit\n\t// transactions from Jan 1 to Mar 31\", \"Totaling recurring\n\t// amount by merchant and month\", etc. as events land.\n\t//\n\t// This split matters especially for AGENTIC runs (60-120s with\n\t// 20+ tool events). A single flipping label meant the user saw\n\t// either the strategy OR the current tool, never both — they\n\t// couldn't map the running tools back onto the intent. Two lines\n\t// keep both in view.\n\tconst stickyLabel = (() => {\n\t\tconst steps = message.steps;\n\t\tif (!steps || steps.length === 0) return undefined;\n\t\t// Walk back looking for the most recent completed analyzer\n\t\t// stage with a dynamic server-provided message. The Analyzer\n\t\t// is the only stage today that writes a user-facing plan\n\t\t// narrative; future stages that do the same would match here\n\t\t// too via `stage === \"analyzer\"` (or expand the check).\n\t\tfor (let i = steps.length - 1; i >= 0; i--) {\n\t\t\tconst s = steps[i];\n\t\t\tif (\n\t\t\t\ts.eventType === \"STAGE_STARTED\" &&\n\t\t\t\ts.stage === \"analyzer\" &&\n\t\t\t\ts.status === \"completed\" &&\n\t\t\t\ts.message\n\t\t\t) {\n\t\t\t\treturn s.message;\n\t\t\t}\n\t\t}\n\t\treturn undefined;\n\t})();\n\n\tconst currentStepLabel = (() => {\n\t\tconst steps = message.steps;\n\t\tif (!steps || steps.length === 0) return undefined;\n\t\tfor (let i = steps.length - 1; i >= 0; i--) {\n\t\t\tconst s = steps[i];\n\t\t\tif (s.status === \"in_progress\" && s.message) {\n\t\t\t\t// If the only in-progress step is the Analyzer itself\n\t\t\t\t// (we're still in the Analyzer's own window before it\n\t\t\t\t// publishes its plan), fall through to the default\n\t\t\t\t// start label — showing nothing would leave a blank\n\t\t\t\t// ticker.\n\t\t\t\tif (s.stage === \"analyzer\" && s.message === stickyLabel) continue;\n\t\t\t\t// Don't echo the sticky header in the ticker.\n\t\t\t\tif (s.message === stickyLabel) continue;\n\t\t\t\treturn s.message;\n\t\t\t}\n\t\t}\n\t\tfor (let i = steps.length - 1; i >= 0; i--) {\n\t\t\tconst s = steps[i];\n\t\t\tif (s.message && s.message !== stickyLabel) return s.message;\n\t\t}\n\t\treturn undefined;\n\t})();\n\n\tif (message.isError && !displayContent && !isThinkingStreaming) {\n\t\treturn (\n\t\t\t<div className=\"payman-v2-assistant-msg payman-v2-fade-in\">\n\t\t\t\t<div className=\"payman-v2-assistant-msg-error\">\n\t\t\t\t\t<AlertCircle\n\t\t\t\t\t\tclassName=\"payman-v2-assistant-msg-error-icon\"\n\t\t\t\t\t\tstyle={{ width: 16, height: 16 }}\n\t\t\t\t\t/>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p className=\"payman-v2-assistant-msg-error-text\">\n\t\t\t\t\t\t\t{message.errorDetails || \"Something went wrong. Please try again.\"}\n\t\t\t\t\t\t</p>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tconst showToast = (label: string, tone: \"success\" | \"error\") => {\n\t\tif (toastTimerRef.current) clearTimeout(toastTimerRef.current);\n\t\tsetToast({ label, tone });\n\t\ttoastTimerRef.current = setTimeout(() => setToast(null), 1800);\n\t};\n\n\tconst handleCopy = async () => {\n\t\ttry {\n\t\t\tif (!navigator.clipboard?.writeText) {\n\t\t\t\tthrow new Error(\"Clipboard unavailable\");\n\t\t\t}\n\t\t\tawait navigator.clipboard.writeText(displayContent);\n\t\t\tif (copyResetTimerRef.current) clearTimeout(copyResetTimerRef.current);\n\t\t\tsetCopied(true);\n\t\t\tcopyResetTimerRef.current = setTimeout(() => setCopied(false), 1800);\n\t\t\tshowToast(\"Copied to clipboard\", \"success\");\n\t\t} catch {\n\t\t\tsetCopied(false);\n\t\t\tshowToast(\"Could not copy\", \"error\");\n\t\t}\n\t};\n\n\tconst handleTrace = () => {\n\t\tonExecutionTraceClick?.({\n\t\t\tmessage,\n\t\t\ttracingData: message.tracingData,\n\t\t\texecutionId: message.executionId,\n\t\t});\n\t};\n\n\tconst hasPartialError = message.isError && displayContent;\n\tconst isDone =\n\t\t!message.isStreaming &&\n\t\tdisplayContent &&\n\t\t!hasPartialError &&\n\t\t!isResponseTyping;\n\tconst hasVisibleDoneActions =\n\t\tshowCopyAction ||\n\t\tshowTraceAction ||\n\t\tshowThumbsUp ||\n\t\tshowThumbsDown;\n\tconst isCancelled = message.isCancelled;\n\n\tconst toastPortal =\n\t\ttypeof document !== \"undefined\"\n\t\t\t? createPortal(\n\t\t\t\t\t<AnimatePresence>\n\t\t\t\t\t\t{toast && (\n\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\tinitial={{ opacity: 0, y: -18, scale: 0.96 }}\n\t\t\t\t\t\t\t\tanimate={{ opacity: 1, y: 0, scale: 1 }}\n\t\t\t\t\t\t\t\texit={{ opacity: 0, y: -12, scale: 0.96 }}\n\t\t\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\t\t\ttype: \"spring\",\n\t\t\t\t\t\t\t\t\tstiffness: 360,\n\t\t\t\t\t\t\t\t\tdamping: 26,\n\t\t\t\t\t\t\t\t\tmass: 0.7,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tclassName=\"payman-v2-toast\"\n\t\t\t\t\t\t\t\trole=\"status\"\n\t\t\t\t\t\t\t\taria-live=\"polite\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\"payman-v2-toast-inner\",\n\t\t\t\t\t\t\t\t\t\ttoast.tone === \"success\"\n\t\t\t\t\t\t\t\t\t\t\t? \"payman-v2-toast-success\"\n\t\t\t\t\t\t\t\t\t\t\t: \"payman-v2-toast-error\",\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{toast.tone === \"success\" ? (\n\t\t\t\t\t\t\t\t\t<Check\n\t\t\t\t\t\t\t\t\t\tclassName=\"h-3.5 w-3.5\"\n\t\t\t\t\t\t\t\t\t\tstyle={{ color: \"#059669\" }}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<AlertCircle\n\t\t\t\t\t\t\t\t\t\tclassName=\"h-3.5 w-3.5\"\n\t\t\t\t\t\t\t\t\t\tstyle={{ color: \"#ef4444\" }}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t<span>{toast.label}</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</AnimatePresence>,\n\t\t\t\t\tdocument.body,\n\t\t\t\t)\n\t\t\t: null;\n\n\treturn (\n\t\t<>\n\t\t\t{toastPortal}\n\n\t\t\t<div className=\"payman-v2-assistant-msg payman-v2-fade-in\">\n\t\t\t\t{/*\n\t\t\t\t Thinking block is live-progress only. Wrapped in\n\t\t\t\t AnimatePresence so that when streaming ends the\n\t\t\t\t block smoothly fades out and unmounts rather than\n\t\t\t\t popping off the page. No post-streaming \"Thought\"\n\t\t\t\t header — once the response is visible, the block's\n\t\t\t\t job is done and the user sees just the answer.\n\t\t\t\t Users who need to review what ran can click the\n\t\t\t\t trace icon in the action row.\n\t\t\t\t*/}\n\t\t\t\t<AnimatePresence>\n\t\t\t\t\t{isThinkingStreaming && (\n\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\tkey=\"thinking\"\n\t\t\t\t\t\t\tinitial={{ opacity: 0, height: 0 }}\n\t\t\t\t\t\t\tanimate={{ opacity: 1, height: \"auto\" }}\n\t\t\t\t\t\t\texit={{ opacity: 0, height: 0 }}\n\t\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\t\tduration: 0.32,\n\t\t\t\t\t\t\t\tease: [0.2, 0, 0, 1],\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tstyle={{ overflow: \"hidden\" }}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<ThinkingBlockV2\n\t\t\t\t\t\t\t\tisStreaming={isThinkingStreaming}\n\t\t\t\t\t\t\t\tstickyLabel={stickyLabel}\n\t\t\t\t\t\t\t\tcurrentStepLabel={currentStepLabel}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t)}\n\t\t\t\t</AnimatePresence>\n\n\t\t\t\t<div className=\"payman-v2-assistant-msg-content-area\">\n\t\t\t\t\t{displayContent ? (\n\t\t\t\t\t\t<MarkdownRendererV2\n\t\t\t\t\t\t\tcontent={displayContent}\n\t\t\t\t\t\t\tisStreaming={(message.isStreaming && !isCancelled) || isResponseTyping}\n\t\t\t\t\t\t\tisResolvingImages={message.isResolvingImages}\n\t\t\t\t\t\t\tonImageClick={onImageClick}\n\t\t\t\t\t\t/>\n\t\t\t\t\t) : !isThinkingStreaming ? (\n\t\t\t\t\t\t<span className=\"payman-v2-assistant-msg-placeholder\">...</span>\n\t\t\t\t\t) : null}\n\t\t\t\t</div>\n\n\t\t\t\t{isCancelled && message.isStreaming && (\n\t\t\t\t\t<div className=\"payman-v2-assistant-msg-paused\">\n\t\t\t\t\t\t<WifiOff\n\t\t\t\t\t\t\tstyle={{ width: 14, height: 14, color: \"rgba(217, 119, 6, 0.7)\", flexShrink: 0 }}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<p className=\"payman-v2-assistant-msg-paused-text\">\n\t\t\t\t\t\t\tConnection slow - resuming…\n\t\t\t\t\t\t</p>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{hasPartialError && (\n\t\t\t\t\t<div className=\"payman-v2-assistant-msg-partial-error\">\n\t\t\t\t\t\t<AlertCircle\n\t\t\t\t\t\t\tclassName=\"payman-v2-assistant-msg-error-icon\"\n\t\t\t\t\t\t\tstyle={{ width: 16, height: 16 }}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t<p className=\"payman-v2-assistant-msg-error-text\">\n\t\t\t\t\t\t\t\t{message.errorDetails || \"The response was interrupted.\"}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{isDone && hasVisibleDoneActions && (\n\t\t\t\t\t<div className=\"payman-v2-assistant-msg-actions\">\n\t\t\t\t\t\t{showCopyAction && (\n\t\t\t\t\t\t\t<ActionTooltipV2 label=\"Copy\">\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\tonClick={() => void handleCopy()}\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\"payman-v2-assistant-msg-action-btn\",\n\t\t\t\t\t\t\t\t\t\tcopied && \"payman-v2-assistant-msg-action-btn-active\",\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\taria-label=\"Copy\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{copied ? (\n\t\t\t\t\t\t\t\t\t\t<Check style={{ width: 16, height: 16 }} />\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t<Copy style={{ width: 16, height: 16 }} />\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t</ActionTooltipV2>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{showThumbsUp && canSubmitFeedback && (\n\t\t\t\t\t\t\t<ActionTooltipV2 label=\"Good response\">\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\tonClick={handlePositiveFeedback}\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\"payman-v2-assistant-msg-action-btn\",\n\t\t\t\t\t\t\t\t\t\tactiveFeedback === \"up\" && \"payman-v2-assistant-msg-action-btn-active\",\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\taria-label=\"Good response\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<ThumbsUp style={{ width: 15, height: 15 }} />\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t</ActionTooltipV2>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{showThumbsDown && canSubmitFeedback && (\n\t\t\t\t\t\t\t<ActionTooltipV2 label=\"Bad response\">\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\tonClick={() => setReasonModalOpen(true)}\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\"payman-v2-assistant-msg-action-btn\",\n\t\t\t\t\t\t\t\t\t\tactiveFeedback === \"down\" && \"payman-v2-assistant-msg-action-btn-active\",\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\taria-label=\"Bad response\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<ThumbsDown style={{ width: 15, height: 15 }} />\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t</ActionTooltipV2>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{showTraceAction && (\n\t\t\t\t\t\t\t<ActionTooltipV2 label=\"Trace\">\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\tonClick={handleTrace}\n\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-assistant-msg-action-btn\"\n\t\t\t\t\t\t\t\t\taria-label=\"Trace response\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<Binoculars style={{ width: 16, height: 16 }} />\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t</ActionTooltipV2>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\n\t\t\t<FeedbackReasonModal\n\t\t\t\topen={reasonModalOpen}\n\t\t\t\tonClose={() => setReasonModalOpen(false)}\n\t\t\t\tonSubmit={async (reason, details) => {\n\t\t\t\t\tawait onSubmitFeedback?.({\n\t\t\t\t\t\tmessageId: message.id,\n\t\t\t\t\t\texecutionId: message.executionId,\n\t\t\t\t\t\tfeedback: reason,\n\t\t\t\t\t\tdetails,\n\t\t\t\t\t});\n\t\t\t\t\tsetActiveFeedback(\"down\");\n\t\t\t\t}}\n\t\t\t/>\n\t\t</>\n\t);\n}\n","import { useEffect, useRef, type ClipboardEvent, type KeyboardEvent } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport type OtpInputV2Props = {\n\tvalue: string;\n\tonChange: (value: string) => void;\n\tmaxLength?: number;\n\tdisabled?: boolean;\n\terror?: boolean;\n};\n\nconst DEFAULT_MAX_LENGTH = 6;\nconst MAX_SUPPORTED_LENGTH = 12;\nconst AUTO_FOCUS_DELAY_MS = 250;\n\nexport function OtpInputV2({\n\tvalue,\n\tonChange,\n\tmaxLength,\n\tdisabled = false,\n\terror = false,\n}: OtpInputV2Props) {\n\tconst inputRefs = useRef<(HTMLInputElement | null)[]>([]);\n\tconst safeMaxLength =\n\t\tNumber.isInteger(maxLength) && (maxLength as number) > 0\n\t\t\t? Math.min(maxLength as number, MAX_SUPPORTED_LENGTH)\n\t\t\t: DEFAULT_MAX_LENGTH;\n\n\tconst digits = value\n\t\t.split(\"\")\n\t\t.concat(Array(safeMaxLength).fill(\"\"))\n\t\t.slice(0, safeMaxLength);\n\n\tuseEffect(() => {\n\t\tif (disabled) return;\n\t\tconst timer = window.setTimeout(() => {\n\t\t\tinputRefs.current[0]?.focus();\n\t\t}, AUTO_FOCUS_DELAY_MS);\n\t\treturn () => window.clearTimeout(timer);\n\t}, [disabled]);\n\n\tconst focusInput = (index: number) => {\n\t\tif (index >= 0 && index < safeMaxLength) {\n\t\t\tinputRefs.current[index]?.focus();\n\t\t}\n\t};\n\n\tconst updateValue = (newDigits: string[]) => {\n\t\tonChange(newDigits.join(\"\").slice(0, safeMaxLength));\n\t};\n\n\tconst handleChange = (index: number, char: string) => {\n\t\tif (char && !/^\\d$/.test(char)) return;\n\t\tconst newDigits = [...digits];\n\t\tnewDigits[index] = char;\n\t\tupdateValue(newDigits);\n\t\tif (char && index < safeMaxLength - 1) focusInput(index + 1);\n\t};\n\n\tconst handleKeyDown = (index: number, e: KeyboardEvent<HTMLInputElement>) => {\n\t\tif (e.key === \"Enter\") {\n\t\t\te.preventDefault();\n\t\t\treturn;\n\t\t}\n\t\tif (e.key === \"Backspace\") {\n\t\t\te.preventDefault();\n\t\t\tif (digits[index]) {\n\t\t\t\tconst newDigits = [...digits];\n\t\t\t\tnewDigits[index] = \"\";\n\t\t\t\tupdateValue(newDigits);\n\t\t\t} else if (index > 0) {\n\t\t\t\tconst newDigits = [...digits];\n\t\t\t\tnewDigits[index - 1] = \"\";\n\t\t\t\tupdateValue(newDigits);\n\t\t\t\tfocusInput(index - 1);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tif (e.key === \"ArrowLeft\") {\n\t\t\te.preventDefault();\n\t\t\tfocusInput(index - 1);\n\t\t} else if (e.key === \"ArrowRight\") {\n\t\t\te.preventDefault();\n\t\t\tfocusInput(index + 1);\n\t\t}\n\t};\n\n\tconst handlePaste = (e: ClipboardEvent<HTMLInputElement>) => {\n\t\te.preventDefault();\n\t\tconst pasted = e.clipboardData\n\t\t\t.getData(\"text\")\n\t\t\t.replace(/\\D/g, \"\")\n\t\t\t.slice(0, safeMaxLength);\n\t\tif (!pasted) return;\n\t\tconst newDigits = pasted\n\t\t\t.split(\"\")\n\t\t\t.concat(Array(safeMaxLength).fill(\"\"))\n\t\t\t.slice(0, safeMaxLength);\n\t\tupdateValue(newDigits);\n\t\tfocusInput(Math.min(pasted.length, safeMaxLength - 1));\n\t};\n\n\treturn (\n\t\t<div className={cn(\"payman-v2-otp\", error && \"payman-v2-shake\")}>\n\t\t\t{digits.map((digit, i) => (\n\t\t\t\t<input\n\t\t\t\t\tkey={i}\n\t\t\t\t\tref={(el) => {\n\t\t\t\t\t\tinputRefs.current[i] = el;\n\t\t\t\t\t}}\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tinputMode=\"numeric\"\n\t\t\t\t\tmaxLength={1}\n\t\t\t\t\tvalue={digit}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tonChange={(e) => handleChange(i, e.target.value.slice(-1))}\n\t\t\t\t\tonKeyDown={(e) => handleKeyDown(i, e)}\n\t\t\t\t\tonPaste={handlePaste}\n\t\t\t\t\tonFocus={(e) => e.target.select()}\n\t\t\t\t\taria-label={`Digit ${i + 1}`}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"payman-v2-otp-digit\",\n\t\t\t\t\t\tdigit && \"payman-v2-otp-digit-filled\",\n\t\t\t\t\t\terror && \"payman-v2-otp-digit-error\"\n\t\t\t\t\t)}\n\t\t\t\t/>\n\t\t\t))}\n\t\t</div>\n\t);\n}\n","import { motion } from \"framer-motion\";\nimport { ShieldCheck } from \"lucide-react\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { OtpInputV2 } from \"./OtpInputV2\";\n\nexport type VerificationActionV2 = {\n\ttype: string;\n\tmessage: string;\n\tamount?: string;\n\tpayeeName?: string;\n};\n\nexport type VerificationStatusV2 =\n\t| \"pending\"\n\t| \"verifying\"\n\t| \"approved\"\n\t| \"rejected\"\n\t| \"error\";\n\nexport type VerificationCardV2Props = {\n\tmessageId: string;\n\taction: VerificationActionV2;\n\tstatus: VerificationStatusV2;\n\tclearOtpTrigger?: number;\n\tonApprove: (messageId: string, otp: string) => Promise<void>;\n\tonReject: (messageId: string) => Promise<void>;\n\tonResend: (messageId: string) => Promise<void>;\n};\n\nconst RESEND_COOLDOWN_S = 30;\nconst OTP_LEN = 6;\n\nexport function VerificationCardV2({\n\tmessageId,\n\taction,\n\tstatus,\n\tclearOtpTrigger = 0,\n\tonApprove,\n\tonReject,\n\tonResend,\n}: VerificationCardV2Props) {\n\tconst [otp, setOtp] = useState(\"\");\n\tconst [otpErrored, setOtpErrored] = useState(false);\n\tconst [resendSec, setResendSec] = useState(0);\n\tconst [localPending, setLocalPending] = useState(false);\n\tconst lastSubmittedRef = useRef<string | null>(null);\n\tconst resendTimerRef = useRef<number | undefined>(undefined);\n\n\tuseEffect(() => {\n\t\tif (clearOtpTrigger <= 0) return;\n\t\tsetOtpErrored(true);\n\t\tconst t = window.setTimeout(() => {\n\t\t\tsetOtp(\"\");\n\t\t\tsetOtpErrored(false);\n\t\t\tsetLocalPending(false);\n\t\t\tlastSubmittedRef.current = null;\n\t\t}, 600);\n\t\treturn () => window.clearTimeout(t);\n\t}, [clearOtpTrigger]);\n\n\tuseEffect(() => {\n\t\tif (otp.length < OTP_LEN) {\n\t\t\tlastSubmittedRef.current = null;\n\t\t}\n\t}, [otp]);\n\n\tuseEffect(() => {\n\t\tif (status !== \"pending\") {\n\t\t\tsetLocalPending(false);\n\t\t}\n\t}, [status]);\n\n\tuseEffect(() => {\n\t\tif (\n\t\t\totp.length !== OTP_LEN ||\n\t\t\t!/^\\d+$/.test(otp) ||\n\t\t\tstatus !== \"pending\"\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t\tif (lastSubmittedRef.current === otp) return;\n\t\tlastSubmittedRef.current = otp;\n\t\tsetLocalPending(true);\n\t\tvoid onApprove(messageId, otp).catch(() => {\n\t\t\tlastSubmittedRef.current = null;\n\t\t\tsetLocalPending(false);\n\t\t});\n\t}, [messageId, onApprove, otp, status]);\n\n\tuseEffect(() => {\n\t\treturn () => {\n\t\t\tif (typeof resendTimerRef.current === \"number\") {\n\t\t\t\twindow.clearInterval(resendTimerRef.current);\n\t\t\t}\n\t\t};\n\t}, []);\n\n\tconst startResendCooldown = useCallback(() => {\n\t\tsetResendSec(RESEND_COOLDOWN_S);\n\t\tif (typeof resendTimerRef.current === \"number\") {\n\t\t\twindow.clearInterval(resendTimerRef.current);\n\t\t}\n\t\tresendTimerRef.current = window.setInterval(() => {\n\t\t\tsetResendSec((s) => {\n\t\t\t\tif (s <= 1) {\n\t\t\t\t\tif (typeof resendTimerRef.current === \"number\") {\n\t\t\t\t\t\twindow.clearInterval(resendTimerRef.current);\n\t\t\t\t\t\tresendTimerRef.current = undefined;\n\t\t\t\t\t}\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t\treturn s - 1;\n\t\t\t});\n\t\t}, 1000);\n\t}, []);\n\n\tconst handleResend = useCallback(async () => {\n\t\tif (resendSec > 0 || status === \"verifying\" || localPending) return;\n\t\tsetLocalPending(true);\n\t\ttry {\n\t\t\tawait onResend(messageId);\n\t\t\tstartResendCooldown();\n\t\t} finally {\n\t\t\tsetLocalPending(false);\n\t\t}\n\t}, [localPending, messageId, onResend, resendSec, startResendCooldown, status]);\n\n\tconst handleCancel = useCallback(async () => {\n\t\tif (status === \"verifying\" || localPending) return;\n\t\tsetLocalPending(true);\n\t\ttry {\n\t\t\tawait onReject(messageId);\n\t\t} finally {\n\t\t\tsetLocalPending(false);\n\t\t}\n\t}, [localPending, messageId, onReject, status]);\n\n\tconst busy = status === \"verifying\" || localPending;\n\n\tif (status === \"approved\" || status === \"rejected\") {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<motion.div\n\t\t\tclassName=\"payman-v2-verification\"\n\t\t\tinitial={{ opacity: 0, y: 10 }}\n\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\ttransition={{ type: \"spring\", stiffness: 320, damping: 28 }}\n\t\t>\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"payman-v2-verification-card\",\n\t\t\t\t\tbusy && \"payman-v2-verification-card-busy\",\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<div className=\"payman-v2-verification-header\">\n\t\t\t\t\t<div className=\"payman-v2-verification-header-row\">\n\t\t\t\t\t\t<ShieldCheck\n\t\t\t\t\t\t\tclassName=\"payman-v2-verification-icon\"\n\t\t\t\t\t\t\tsize={18}\n\t\t\t\t\t\t\tstrokeWidth={1.75}\n\t\t\t\t\t\t\taria-hidden\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<p className=\"payman-v2-verification-title\">Verify</p>\n\t\t\t\t\t\t{action.amount != null ? (\n\t\t\t\t\t\t\t<span className=\"payman-v2-verification-amount\">\n\t\t\t\t\t\t\t\t{action.amount}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t) : action.payeeName ? (\n\t\t\t\t\t\t\t<span className=\"payman-v2-verification-payee\">\n\t\t\t\t\t\t\t\t{action.payeeName}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t</div>\n\t\t\t\t\t<p className=\"payman-v2-verification-description\">\n\t\t\t\t\t\tEnter the 6-digit code sent to your phone\n\t\t\t\t\t</p>\n\t\t\t\t\t<OtpInputV2\n\t\t\t\t\t\tvalue={otp}\n\t\t\t\t\t\tonChange={setOtp}\n\t\t\t\t\t\tmaxLength={OTP_LEN}\n\t\t\t\t\t\tdisabled={busy}\n\t\t\t\t\t\terror={otpErrored}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t\t<div className=\"payman-v2-verification-actions\">\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclassName=\"payman-v2-verification-cancel-btn\"\n\t\t\t\t\t\tdisabled={busy}\n\t\t\t\t\t\tonClick={() => void handleCancel()}\n\t\t\t\t\t>\n\t\t\t\t\t\tCancel\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclassName=\"payman-v2-verification-resend-link\"\n\t\t\t\tdisabled={busy || resendSec > 0}\n\t\t\t\tonClick={() => void handleResend()}\n\t\t\t>\n\t\t\t\t{resendSec > 0 ? `Resend (${resendSec}s)` : \"Resend\"}\n\t\t\t</button>\n\t\t</motion.div>\n\t);\n}\n","import {\n\tforwardRef,\n\tuseCallback,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseRef,\n\tuseState,\n} from \"react\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport { ArrowDown } from \"lucide-react\";\nimport type { MessageListV2Props } from \"../../types\";\nimport { UserMessageV2 } from \"./UserMessageV2\";\nimport { AssistantMessageV2 } from \"./AssistantMessageV2\";\nimport { VerificationCardV2 } from \"./VerificationCardV2\";\n\nexport type { MessageListV2Props } from \"../../types\";\n\nconst SCROLL_THRESHOLD = 100;\n\n// Minimum upward delta (px) in scrollTop we treat as a deliberate user\n// scroll-up. Anything smaller is ignored — browsers occasionally emit\n// 1–2px scroll jitters on content growth that we don't want to\n// misinterpret as \"user wants to read history.\"\nconst USER_SCROLL_UP_EPSILON = 4;\n\nexport type MessageListV2Handle = {\n\tscrollToBottom: (behavior?: ScrollBehavior) => void;\n};\n\nexport const MessageListV2 = forwardRef<MessageListV2Handle, MessageListV2Props>(\n\tfunction MessageListV2(\n\t\t{\n\t\t\tmessages,\n\t\t\tisStreaming: _isStreaming = false,\n\t\t\tonEditUserMessage,\n\t\t\tonRetryUserMessage,\n\t\t\tonImageClick,\n\t\t\tonExecutionTraceClick,\n\t\t\tmessageActions,\n\t\t\tretryDisabled = false,\n\t\t\tuserAction,\n\t\t\tonApproveAction,\n\t\t\tonRejectAction,\n\t\t\tonResendAction,\n\t\t\tonSubmitFeedback,\n\t\t\ttypingSpeed = 4,\n\t\t},\n\t\tref,\n\t) {\n\t\tconst scrollRef = useRef<HTMLDivElement>(null);\n\t\tconst scrollInnerRef = useRef<HTMLDivElement>(null);\n\t\tconst isNearBottomRef = useRef(true);\n\t\tconst [showScrollBtn, setShowScrollBtn] = useState(false);\n\t\tconst prevCountRef = useRef(messages.length);\n\t\tconst pauseStickUntilUserMessageRef = useRef(false);\n\t\tconst followingBottomRef = useRef(true);\n\t\t// Timestamp of the most recent programmatic scroll (pin-to-bottom).\n\t\t// `handleScroll` uses this to distinguish its own scrolls from\n\t\t// genuine user gestures. Using a time window rather than a\n\t\t// boolean-and-rAF avoids the race where the scroll event fires\n\t\t// after the rAF has already cleared the flag.\n\t\tconst lastPinAtRef = useRef(0);\n\t\t// Previous scrollTop value — used to detect REAL upward user\n\t\t// scrolls. Content growth at the bottom never decreases\n\t\t// scrollTop, so if scrollTop goes down, the user scrolled up.\n\t\tconst prevScrollTopRef = useRef(0);\n\n\t\tconst getDistanceFromBottom = useCallback(() => {\n\t\t\tconst el = scrollRef.current;\n\t\t\tif (!el) return 0;\n\t\t\treturn el.scrollHeight - el.scrollTop - el.clientHeight;\n\t\t}, []);\n\n\t\tconst pinToBottom = useCallback((behavior: ScrollBehavior = \"instant\") => {\n\t\t\tconst el = scrollRef.current;\n\t\t\tif (!el) return;\n\t\t\tlastPinAtRef.current = performance.now();\n\t\t\tel.scrollTo({ top: el.scrollHeight, behavior });\n\t\t\tprevScrollTopRef.current = el.scrollHeight;\n\t\t}, []);\n\n\t\tconst scrollToBottom = useCallback(\n\t\t\t(behavior: ScrollBehavior = \"smooth\") => {\n\t\t\t\tconst el = scrollRef.current;\n\t\t\t\tif (!el) return;\n\t\t\t\tpauseStickUntilUserMessageRef.current = false;\n\t\t\t\tfollowingBottomRef.current = true;\n\t\t\t\tpinToBottom(behavior);\n\t\t\t},\n\t\t\t[pinToBottom],\n\t\t);\n\n\t\tuseImperativeHandle(\n\t\t\tref,\n\t\t\t() => ({\n\t\t\t\tscrollToBottom: (behavior: ScrollBehavior = \"smooth\") => {\n\t\t\t\t\tisNearBottomRef.current = true;\n\t\t\t\t\tpauseStickUntilUserMessageRef.current = false;\n\t\t\t\t\tfollowingBottomRef.current = true;\n\t\t\t\t\tsetShowScrollBtn(false);\n\t\t\t\t\tscrollToBottom(behavior);\n\t\t\t\t},\n\t\t\t}),\n\t\t\t[scrollToBottom],\n\t\t);\n\n\t\tconst handleScroll = useCallback(() => {\n\t\t\tconst el = scrollRef.current;\n\t\t\tif (!el) return;\n\n\t\t\tconst currentScrollTop = el.scrollTop;\n\t\t\tconst prevScrollTop = prevScrollTopRef.current;\n\t\t\tprevScrollTopRef.current = currentScrollTop;\n\n\t\t\tconst distance = getDistanceFromBottom();\n\t\t\tconst nearBottom = distance <= SCROLL_THRESHOLD;\n\t\t\tisNearBottomRef.current = nearBottom;\n\t\t\tsetShowScrollBtn(!nearBottom);\n\n\t\t\t// Ignore scroll events that our own pin-to-bottom call emitted.\n\t\t\t// 250ms covers smooth-scroll animations too; instant scrolls\n\t\t\t// dispatch the event nearly synchronously so this still works.\n\t\t\tconst sincePin = performance.now() - lastPinAtRef.current;\n\t\t\tif (sincePin < 250) return;\n\n\t\t\t// Only treat this as a user scroll-up if scrollTop actually\n\t\t\t// decreased (not just \"we're not at the bottom because content\n\t\t\t// grew underneath us\"). That used to flip followingBottom to\n\t\t\t// false during streaming and break autoscroll completely.\n\t\t\tconst scrolledUp = currentScrollTop < prevScrollTop - USER_SCROLL_UP_EPSILON;\n\t\t\tif (scrolledUp) {\n\t\t\t\tfollowingBottomRef.current = false;\n\t\t\t\tpauseStickUntilUserMessageRef.current = true;\n\t\t\t} else if (nearBottom) {\n\t\t\t\t// User scrolled back down to the bottom themselves —\n\t\t\t\t// resume following.\n\t\t\t\tfollowingBottomRef.current = true;\n\t\t\t\tpauseStickUntilUserMessageRef.current = false;\n\t\t\t}\n\t\t}, [getDistanceFromBottom]);\n\n\t\tuseEffect(() => {\n\t\t\tconst prevCount = prevCountRef.current;\n\t\t\tprevCountRef.current = messages.length;\n\t\t\tif (messages.length > prevCount) {\n\t\t\t\tconst last = messages[messages.length - 1];\n\t\t\t\tif (last?.role === \"user\") {\n\t\t\t\t\tpauseStickUntilUserMessageRef.current = false;\n\t\t\t\t\tfollowingBottomRef.current = true;\n\t\t\t\t\trequestAnimationFrame(() => scrollToBottom());\n\t\t\t\t} else if (\n\t\t\t\t\t!pauseStickUntilUserMessageRef.current &&\n\t\t\t\t\tfollowingBottomRef.current\n\t\t\t\t) {\n\t\t\t\t\trequestAnimationFrame(() => scrollToBottom(\"instant\"));\n\t\t\t\t}\n\t\t\t}\n\t\t}, [messages.length, scrollToBottom]);\n\n\t\t// Belt-and-suspenders: pin to bottom whenever the inner\n\t\t// container's layout *or* text content changes. ResizeObserver\n\t\t// alone is not enough — it only fires on size changes, but the\n\t\t// typing animation can update many characters without wrapping\n\t\t// a new line, and MutationObserver catches those text-node\n\t\t// mutations too. Both observers route through the same\n\t\t// `pinIfFollowing` so the behavior is unified.\n\t\tuseEffect(() => {\n\t\t\tconst inner = scrollInnerRef.current;\n\t\t\tif (!inner) return;\n\n\t\t\tconst pinIfFollowing = () => {\n\t\t\t\tif (pauseStickUntilUserMessageRef.current) return;\n\t\t\t\tif (!followingBottomRef.current) return;\n\t\t\t\tpinToBottom(\"instant\");\n\t\t\t};\n\n\t\t\tconst ro = new ResizeObserver(() => {\n\t\t\t\tpinIfFollowing();\n\t\t\t});\n\t\t\tro.observe(inner);\n\n\t\t\tconst mo = new MutationObserver(() => {\n\t\t\t\tpinIfFollowing();\n\t\t\t});\n\t\t\tmo.observe(inner, {\n\t\t\t\tchildList: true,\n\t\t\t\tsubtree: true,\n\t\t\t\tcharacterData: true,\n\t\t\t});\n\n\t\t\treturn () => {\n\t\t\t\tro.disconnect();\n\t\t\t\tmo.disconnect();\n\t\t\t};\n\t\t}, [pinToBottom]);\n\n\t\tuseEffect(() => {\n\t\t\tif (messages.length > 0) {\n\t\t\t\tsetTimeout(() => scrollToBottom(\"instant\"), 50);\n\t\t\t}\n\t\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t\t}, []);\n\n\t\treturn (\n\t\t\t<div className=\"payman-v2-message-list\">\n\t\t\t\t<div\n\t\t\t\t\tref={scrollRef}\n\t\t\t\t\tonScroll={handleScroll}\n\t\t\t\t\tclassName=\"payman-v2-message-scroll payman-v2-scrollbar\"\n\t\t\t\t>\n\t\t\t\t\t<div\n\t\t\t\t\t\tref={scrollInnerRef}\n\t\t\t\t\t\tclassName=\"payman-v2-message-scroll-inner\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{messages.map((message) => (\n\t\t\t\t\t\t\t<div key={message.id}>\n\t\t\t\t\t\t\t\t{message.role === \"user\" ? (\n\t\t\t\t\t\t\t\t\t<UserMessageV2\n\t\t\t\t\t\t\t\t\t\tmessage={message}\n\t\t\t\t\t\t\t\t\t\tonEdit={onEditUserMessage}\n\t\t\t\t\t\t\t\t\t\tonRetry={onRetryUserMessage}\n\t\t\t\t\t\t\t\t\t\tretryDisabled={retryDisabled}\n\t\t\t\t\t\t\t\t\t\tactions={messageActions?.userMessageActions}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<AssistantMessageV2\n\t\t\t\t\t\t\t\t\t\tmessage={message}\n\t\t\t\t\t\t\t\t\t\tonImageClick={onImageClick}\n\t\t\t\t\t\t\t\t\t\tonExecutionTraceClick={onExecutionTraceClick}\n\t\t\t\t\t\t\t\t\t\tonSubmitFeedback={onSubmitFeedback}\n\t\t\t\t\t\t\t\t\t\tactions={messageActions?.assistantMessageActions}\n\t\t\t\t\t\t\t\t\t\ttypingSpeed={typingSpeed}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t))}\n\n\t\t\t\t\t\t{userAction && userAction.status !== \"approved\" && userAction.status !== \"rejected\" && (\n\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t<VerificationCardV2\n\t\t\t\t\t\t\t\t\tmessageId={userAction.messageId}\n\t\t\t\t\t\t\t\t\taction={userAction.action}\n\t\t\t\t\t\t\t\t\tstatus={userAction.status}\n\t\t\t\t\t\t\t\t\tonApprove={onApproveAction ?? (async () => {})}\n\t\t\t\t\t\t\t\t\tonReject={onRejectAction ?? (async () => {})}\n\t\t\t\t\t\t\t\t\tonResend={onResendAction ?? (async () => {})}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<AnimatePresence>\n\t\t\t\t\t{showScrollBtn && (\n\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\tinitial={{ opacity: 0, y: 6 }}\n\t\t\t\t\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\t\t\t\t\texit={{ opacity: 0, y: 6 }}\n\t\t\t\t\t\t\ttransition={{ duration: 0.12 }}\n\t\t\t\t\t\t\tclassName=\"payman-v2-scroll-to-bottom\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\tscrollToBottom();\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tclassName=\"payman-v2-scroll-to-bottom-btn\"\n\t\t\t\t\t\t\t\taria-label=\"Scroll to bottom\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<ArrowDown style={{ width: 16, height: 16 }} />\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t)}\n\t\t\t\t</AnimatePresence>\n\t\t\t</div>\n\t\t);\n\t},\n);\n","import {\n\tforwardRef,\n\tuseCallback,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseRef,\n\tuseState,\n} from \"react\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport {\n\tArrowUp,\n\tMic,\n\tPlus,\n\tImagePlus,\n\tPaperclip,\n\tPencil,\n\tRotateCcw,\n\tTelescope,\n\tX,\n\tZap,\n} from \"lucide-react\";\nimport { cn } from \"../../utils/cn\";\nimport { getSlashCommandValidationHint } from \"../../utils/slashCommands\";\nimport type { SlashCommandConfig } from \"../../types\";\n\nexport type ChatInputV2Props = {\n\tonSend: (message: string) => void;\n\tonCancel?: () => void;\n\tdisabled?: boolean;\n\tisStreaming?: boolean;\n\tplaceholder?: string;\n\tenableVoice?: boolean;\n\tvoiceAvailable?: boolean;\n\tisRecording?: boolean;\n\tonVoicePress?: () => void;\n\tonCancelRecording?: () => void;\n\tonConfirmRecording?: () => void;\n\ttranscribedText?: string;\n\tshowResetSession?: boolean;\n\tonResetSession?: () => void;\n\tshowAttachmentButton?: boolean;\n\tshowUploadImageButton?: boolean;\n\tshowAttachFileButton?: boolean;\n\tonUploadImageClick?: () => void;\n\tonAttachFileClick?: () => void;\n\teditingMessageId?: string | null;\n\tonClearEditing?: () => void;\n\t/**\n\t * Latency-vs-precision toggle the user controls inline on the\n\t * input bar. \"fast\" (the widget's default) — server samples and\n\t * answers quickly. \"deep\" — server runs a full analytical pass.\n\t * When both [analysisMode] and [onAnalysisModeChange] are\n\t * provided, the toggle renders alongside the other left-hand\n\t * input controls. Omit either to hide the toggle entirely\n\t * (e.g. widgets whose host app already controls the mode, or\n\t * single-mode deployments).\n\t */\n\tanalysisMode?: \"fast\" | \"deep\";\n\tonAnalysisModeChange?: (next: \"fast\" | \"deep\") => void;\n\tslashCommands?: SlashCommandConfig[];\n};\n\nexport type ChatInputV2Handle = {\n\tsetDraft: (message: string) => void;\n};\n\nexport const ChatInputV2 = forwardRef<ChatInputV2Handle, ChatInputV2Props>(\n\tfunction ChatInputV2(\n\t\t{\n\t\t\tonSend,\n\t\t\tdisabled = false,\n\t\t\tisStreaming = false,\n\t\t\tplaceholder = \"Reply...\",\n\t\t\tenableVoice = false,\n\t\t\tvoiceAvailable = false,\n\t\t\tisRecording = false,\n\t\t\tonVoicePress,\n\t\t\ttranscribedText = \"\",\n\t\t\tshowResetSession = false,\n\t\t\tonResetSession,\n\t\t\tshowAttachmentButton = true,\n\t\t\tshowUploadImageButton = true,\n\t\t\tshowAttachFileButton = true,\n\t\t\tonUploadImageClick,\n\t\t\tonAttachFileClick,\n\t\t\teditingMessageId = null,\n\t\t\tonClearEditing,\n\t\t\tanalysisMode,\n\t\t\tonAnalysisModeChange,\n\t\t\tslashCommands = [],\n\t\t}: ChatInputV2Props,\n\t\tref,\n\t) {\n\t\tconst [value, setValue] = useState(\"\");\n\t\tconst [isFocused, setIsFocused] = useState(false);\n\t\tconst [showActions, setShowActions] = useState(false);\n\t\tconst [showVoiceTooltip, setShowVoiceTooltip] = useState(false);\n\t\tconst [selectedCommandIndex, setSelectedCommandIndex] = useState(0);\n\t\tconst [inlineHint, setInlineHint] = useState<string | null>(null);\n\t\tconst [commandMenuDismissed, setCommandMenuDismissed] = useState(false);\n\t\tconst textareaRef = useRef<HTMLTextAreaElement>(null);\n\t\tconst actionsRef = useRef<HTMLDivElement>(null);\n\t\tconst preRecordTextRef = useRef(\"\");\n\t\tconst voiceTooltipTimerRef = useRef<ReturnType<typeof setTimeout> | null>(\n\t\t\tnull,\n\t\t);\n\t\tconst voiceDraftSyncActiveRef = useRef(false);\n\n\t\tconst isInputLocked = disabled || isRecording;\n\t\tconst hasAttachmentOptions = showUploadImageButton || showAttachFileButton;\n\t\tconst showAttachmentMenuButton = showAttachmentButton && hasAttachmentOptions;\n\t\tconst showVoiceButton = enableVoice && onVoicePress != null;\n\t\tconst isVoiceButtonDisabled = disabled || !voiceAvailable;\n\t\tconst commandQuery =\n\t\t\tvalue.startsWith(\"/\") && !value.includes(\"\\n\") && !/\\s/.test(value)\n\t\t\t\t? value.toLowerCase()\n\t\t\t\t: null;\n\t\tconst commandSuggestions =\n\t\t\tcommandQuery == null\n\t\t\t\t? []\n\t\t\t\t: slashCommands.filter((command) =>\n\t\t\t\t\t\tcommand.name.toLowerCase().startsWith(commandQuery),\n\t\t\t\t\t);\n\t\tconst showCommandSuggestions =\n\t\t\t!commandMenuDismissed &&\n\t\t\t!isRecording &&\n\t\t\t!disabled &&\n\t\t\tcommandSuggestions.length > 0;\n\n\t\tuseEffect(() => {\n\t\t\tif (textareaRef.current) {\n\t\t\t\ttextareaRef.current.style.height = \"auto\";\n\t\t\t\tconst scrollHeight = textareaRef.current.scrollHeight;\n\t\t\t\ttextareaRef.current.style.height = `${Math.min(scrollHeight, 200)}px`;\n\t\t\t}\n\t\t}, [value]);\n\n\t\tuseEffect(() => {\n\t\t\tif (disabled) {\n\t\t\t\tsetIsFocused(false);\n\t\t\t\tsetShowActions(false);\n\t\t\t\ttextareaRef.current?.blur();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst frameId = requestAnimationFrame(() => textareaRef.current?.focus());\n\t\t\treturn () => cancelAnimationFrame(frameId);\n\t\t}, [disabled]);\n\n\t\tuseImperativeHandle(\n\t\t\tref,\n\t\t\t() => ({\n\t\t\t\tsetDraft: (message: string) => {\n\t\t\t\t\tsetShowActions(false);\n\t\t\t\t\tsetValue(message);\n\t\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\t\tconst textarea = textareaRef.current;\n\t\t\t\t\t\tif (!textarea || disabled) return;\n\t\t\t\t\t\ttextarea.focus();\n\t\t\t\t\t\tconst end = message.length;\n\t\t\t\t\t\ttextarea.setSelectionRange(end, end);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t}),\n\t\t\t[disabled],\n\t\t);\n\n\t\tuseEffect(() => {\n\t\t\tif (!showActions) return;\n\t\t\tconst handleClickOutside = (e: MouseEvent) => {\n\t\t\t\tif (\n\t\t\t\t\tactionsRef.current &&\n\t\t\t\t\t!actionsRef.current.contains(e.target as Node)\n\t\t\t\t) {\n\t\t\t\t\tsetShowActions(false);\n\t\t\t\t}\n\t\t\t};\n\t\t\tdocument.addEventListener(\"mousedown\", handleClickOutside);\n\t\t\treturn () => document.removeEventListener(\"mousedown\", handleClickOutside);\n\t\t}, [showActions]);\n\n\t\tuseEffect(() => {\n\t\t\tif (!showAttachmentMenuButton) {\n\t\t\t\tsetShowActions(false);\n\t\t\t}\n\t\t}, [showAttachmentMenuButton]);\n\n\t\tuseEffect(() => {\n\t\t\tsetSelectedCommandIndex(0);\n\t\t\tsetCommandMenuDismissed(false);\n\t\t}, [commandQuery]);\n\n\t\tuseEffect(() => {\n\t\t\treturn () => {\n\t\t\t\tif (voiceTooltipTimerRef.current) {\n\t\t\t\t\tclearTimeout(voiceTooltipTimerRef.current);\n\t\t\t\t}\n\t\t\t};\n\t\t}, []);\n\n\t\tuseEffect(() => {\n\t\t\tif (!voiceDraftSyncActiveRef.current) return;\n\t\t\tconst base = preRecordTextRef.current;\n\t\t\tconst separator = base && !base.endsWith(\" \") && transcribedText ? \" \" : \"\";\n\t\t\tsetValue(`${base}${separator}${transcribedText}`);\n\t\t}, [isRecording, transcribedText]);\n\n\t\tconst handleSend = useCallback(() => {\n\t\t\tif (!value.trim() || disabled) return;\n\t\t\tconst commandHint = getSlashCommandValidationHint(value);\n\t\t\tif (commandHint) {\n\t\t\t\tsetInlineHint(commandHint);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvoiceDraftSyncActiveRef.current = false;\n\t\t\tpreRecordTextRef.current = \"\";\n\t\t\tsetInlineHint(null);\n\t\t\tonClearEditing?.();\n\t\t\tonSend(value.trim());\n\t\t\tsetValue(\"\");\n\t\t\trequestAnimationFrame(() => {\n\t\t\t\tif (textareaRef.current) {\n\t\t\t\t\ttextareaRef.current.style.height = \"auto\";\n\t\t\t\t\ttextareaRef.current.focus();\n\t\t\t\t}\n\t\t\t});\n\t\t}, [value, disabled, onClearEditing, onSend]);\n\n\t\tconst selectCommand = useCallback(\n\t\t\t(command: SlashCommandConfig) => {\n\t\t\t\tconst insertText = command.insertText ?? `${command.name} `;\n\t\t\t\tsetValue(insertText);\n\t\t\t\tsetInlineHint(null);\n\t\t\t\tsetShowActions(false);\n\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\tconst textarea = textareaRef.current;\n\t\t\t\t\tif (!textarea) return;\n\t\t\t\t\ttextarea.focus();\n\t\t\t\t\ttextarea.setSelectionRange(insertText.length, insertText.length);\n\t\t\t\t});\n\t\t\t},\n\t\t\t[],\n\t\t);\n\n\t\tconst handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n\t\t\tif (showCommandSuggestions) {\n\t\t\t\tif (e.key === \"ArrowDown\") {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tsetSelectedCommandIndex((current) =>\n\t\t\t\t\t\tMath.min(current + 1, commandSuggestions.length - 1),\n\t\t\t\t\t);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (e.key === \"ArrowUp\") {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tsetSelectedCommandIndex((current) => Math.max(current - 1, 0));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (e.key === \"Enter\" || e.key === \"Tab\") {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tconst command = commandSuggestions[selectedCommandIndex];\n\t\t\t\t\tif (command) selectCommand(command);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (e.key === \"Escape\") {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tsetSelectedCommandIndex(0);\n\t\t\t\t\tsetCommandMenuDismissed(true);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (e.key === \"Enter\" && !e.shiftKey) {\n\t\t\t\te.preventDefault();\n\t\t\t\tif (isStreaming) return;\n\t\t\t\thandleSend();\n\t\t\t}\n\t\t};\n\n\t\tconst handleUploadImageClick = () => {\n\t\t\tonUploadImageClick?.();\n\t\t\tsetShowActions(false);\n\t\t};\n\n\t\tconst handleAttachFileClick = () => {\n\t\t\tonAttachFileClick?.();\n\t\t\tsetShowActions(false);\n\t\t};\n\n\t\tconst hideVoiceTooltip = useCallback(() => {\n\t\t\tif (voiceTooltipTimerRef.current) {\n\t\t\t\tclearTimeout(voiceTooltipTimerRef.current);\n\t\t\t\tvoiceTooltipTimerRef.current = null;\n\t\t\t}\n\t\t\tsetShowVoiceTooltip(false);\n\t\t}, []);\n\n\t\tconst startVoiceTooltipTimer = useCallback(() => {\n\t\t\tif (isVoiceButtonDisabled || isRecording) return;\n\t\t\tif (voiceTooltipTimerRef.current) {\n\t\t\t\tclearTimeout(voiceTooltipTimerRef.current);\n\t\t\t}\n\t\t\tvoiceTooltipTimerRef.current = setTimeout(() => {\n\t\t\t\tsetShowVoiceTooltip(true);\n\t\t\t\tvoiceTooltipTimerRef.current = null;\n\t\t\t}, 2000);\n\t\t}, [isRecording, isVoiceButtonDisabled]);\n\n\t\tconst handleVoiceToggle = () => {\n\t\t\thideVoiceTooltip();\n\t\t\tsetShowActions(false);\n\t\t\tif (!onVoicePress || isVoiceButtonDisabled) return;\n\t\t\tif (!isRecording) {\n\t\t\t\tpreRecordTextRef.current = value;\n\t\t\t\tvoiceDraftSyncActiveRef.current = true;\n\t\t\t}\n\t\t\tonVoicePress();\n\t\t};\n\n\t\tconst canSend = value.trim().length > 0 && !disabled;\n\t\tconst sendDisabled = !canSend || isStreaming;\n\n\t\treturn (\n\t\t\t<div className=\"payman-v2-input-container\">\n\t\t\t\t<AnimatePresence>\n\t\t\t\t\t{showCommandSuggestions && (\n\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\tinitial={{ opacity: 0, y: 6, scale: 0.98 }}\n\t\t\t\t\t\t\tanimate={{ opacity: 1, y: 0, scale: 1 }}\n\t\t\t\t\t\t\texit={{ opacity: 0, y: 6, scale: 0.98 }}\n\t\t\t\t\t\t\ttransition={{ duration: 0.12 }}\n\t\t\t\t\t\t\tclassName=\"payman-v2-command-menu\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{commandSuggestions.map((command, index) => (\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\tkey={command.name}\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tonMouseDown={(event) => {\n\t\t\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\t\t\tselectCommand(command);\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\"payman-v2-command-option\",\n\t\t\t\t\t\t\t\t\t\tindex === selectedCommandIndex &&\n\t\t\t\t\t\t\t\t\t\t\t\"payman-v2-command-option-active\",\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<span className=\"payman-v2-command-name\">\n\t\t\t\t\t\t\t\t\t\t{command.name}\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t<span className=\"payman-v2-command-description\">\n\t\t\t\t\t\t\t\t\t\t{command.description}\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t)}\n\t\t\t\t</AnimatePresence>\n\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"payman-v2-input-wrapper\",\n\t\t\t\t\t\t(isFocused || isRecording) && \"payman-v2-input-wrapper-focused\",\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t<div className=\"payman-v2-input-body\">\n\t\t\t\t\t\t<AnimatePresence initial={false}>\n\t\t\t\t\t\t\t{editingMessageId && (\n\t\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\t\tinitial={{ opacity: 0, y: -4 }}\n\t\t\t\t\t\t\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\t\t\t\t\t\t\texit={{ opacity: 0, y: -4 }}\n\t\t\t\t\t\t\t\t\ttransition={{ duration: 0.14, ease: \"easeOut\" }}\n\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-input-editing-banner\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<div className=\"payman-v2-input-editing-banner-info\">\n\t\t\t\t\t\t\t\t\t\t<span className=\"payman-v2-input-editing-icon-wrap\">\n\t\t\t\t\t\t\t\t\t\t\t<Pencil style={{ width: 12, height: 12 }} />\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t<p className=\"payman-v2-input-editing-label\">\n\t\t\t\t\t\t\t\t\t\t\tEditing message\n\t\t\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t\t\t{onClearEditing && (\n\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\tonClick={onClearEditing}\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-input-editing-close\"\n\t\t\t\t\t\t\t\t\t\t\taria-label=\"Stop editing message\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<X style={{ width: 14, height: 14 }} />\n\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</AnimatePresence>\n\n\t\t\t\t\t\t<textarea\n\t\t\t\t\t\t\tref={textareaRef}\n\t\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\t\tonChange={(e) => {\n\t\t\t\t\t\t\t\tif (isRecording) return;\n\t\t\t\t\t\t\t\tconst nextValue = e.target.value;\n\t\t\t\t\t\t\t\tvoiceDraftSyncActiveRef.current = false;\n\t\t\t\t\t\t\t\tsetInlineHint(null);\n\t\t\t\t\t\t\t\tsetCommandMenuDismissed(false);\n\t\t\t\t\t\t\t\tsetValue(nextValue);\n\t\t\t\t\t\t\t\tif (editingMessageId && nextValue.length === 0) {\n\t\t\t\t\t\t\t\t\tonClearEditing?.();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\t\t\t\tonFocus={() => {\n\t\t\t\t\t\t\t\tif (!disabled) setIsFocused(true);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tonBlur={() => setIsFocused(false)}\n\t\t\t\t\t\t\tonMouseDown={(e) => {\n\t\t\t\t\t\t\t\tif (disabled) e.preventDefault();\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\taria-disabled={disabled}\n\t\t\t\t\t\t\treadOnly={isInputLocked}\n\t\t\t\t\t\t\ttabIndex={disabled ? -1 : 0}\n\t\t\t\t\t\t\tplaceholder={isRecording ? \"Listening…\" : placeholder}\n\t\t\t\t\t\t\tclassName=\"payman-v2-input-textarea\"\n\t\t\t\t\t\t\tdata-disabled={disabled ? \"true\" : \"false\"}\n\t\t\t\t\t\t\trows={1}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div className=\"payman-v2-input-controls\">\n\t\t\t\t\t\t<div className=\"payman-v2-input-controls-left\">\n\t\t\t\t\t\t\t{showResetSession && onResetSession && (\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tonClick={onResetSession}\n\t\t\t\t\t\t\t\t\tdisabled={isStreaming || isRecording}\n\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-input-new-session-btn\"\n\t\t\t\t\t\t\t\t\taria-label=\"New Session\"\n\t\t\t\t\t\t\t\t\ttitle=\"New Session\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<RotateCcw\n\t\t\t\t\t\t\t\t\t\tstyle={{ width: 16, height: 16, strokeWidth: 2.25 }}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<span className=\"payman-v2-input-new-session-tooltip\">\n\t\t\t\t\t\t\t\t\t\tNew Session\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t{analysisMode && onAnalysisModeChange && (\n\t\t\t\t\t\t\t\t// Fast/Deep toggle — a single-click button that\n\t\t\t\t\t\t\t\t// flips between modes. \"Fast\" is cheap and quick\n\t\t\t\t\t\t\t\t// (sampled data, sub-30s answers); \"Deep\" opts\n\t\t\t\t\t\t\t\t// the user into the full analytical pass. Shown\n\t\t\t\t\t\t\t\t// as a compact pill so operators can flip it\n\t\t\t\t\t\t\t\t// per-message without leaving the input area.\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tonClick={() =>\n\t\t\t\t\t\t\t\t\t\tonAnalysisModeChange(\n\t\t\t\t\t\t\t\t\t\t\tanalysisMode === \"deep\" ? \"fast\" : \"deep\",\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdisabled={isStreaming || isRecording}\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\"payman-v2-input-new-session-btn\",\n\t\t\t\t\t\t\t\t\t\t\"payman-v2-input-mode-toggle\",\n\t\t\t\t\t\t\t\t\t\tanalysisMode === \"deep\" &&\n\t\t\t\t\t\t\t\t\t\t\t\"payman-v2-input-mode-toggle-deep\",\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\taria-label={\n\t\t\t\t\t\t\t\t\t\tanalysisMode === \"deep\"\n\t\t\t\t\t\t\t\t\t\t\t? \"Deep analysis (click to switch to Fast)\"\n\t\t\t\t\t\t\t\t\t\t\t: \"Fast analysis (click to switch to Deep)\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\ttitle={\n\t\t\t\t\t\t\t\t\t\tanalysisMode === \"deep\"\n\t\t\t\t\t\t\t\t\t\t\t? \"Deep — full analytical pass\"\n\t\t\t\t\t\t\t\t\t\t\t: \"Fast — sampled, quick answer\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdata-mode={analysisMode}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{analysisMode === \"deep\" ? (\n\t\t\t\t\t\t\t\t\t\t<Telescope\n\t\t\t\t\t\t\t\t\t\t\tstyle={{ width: 16, height: 16, strokeWidth: 2.25 }}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t<Zap\n\t\t\t\t\t\t\t\t\t\t\tstyle={{ width: 16, height: 16, strokeWidth: 2.25 }}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t<span className=\"payman-v2-input-new-session-tooltip\">\n\t\t\t\t\t\t\t\t\t\t{analysisMode === \"deep\" ? \"Deep\" : \"Fast\"}\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t{showAttachmentMenuButton && (\n\t\t\t\t\t\t\t\t<div style={{ position: \"relative\" }} ref={actionsRef}>\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tonClick={() => setShowActions((current) => !current)}\n\t\t\t\t\t\t\t\t\t\tdisabled={disabled || isRecording}\n\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\"payman-v2-input-attach-btn\",\n\t\t\t\t\t\t\t\t\t\t\tshowActions && \"payman-v2-input-attach-btn-active\",\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\taria-label=\"Attach\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<Plus\n\t\t\t\t\t\t\t\t\t\t\tstyle={{ width: 20, height: 20, strokeWidth: 2 }}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</button>\n\n\t\t\t\t\t\t\t\t\t<AnimatePresence>\n\t\t\t\t\t\t\t\t\t\t{showActions && (\n\t\t\t\t\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\t\t\t\t\tinitial={{ opacity: 0, y: 4, scale: 0.95 }}\n\t\t\t\t\t\t\t\t\t\t\t\tanimate={{ opacity: 1, y: 0, scale: 1 }}\n\t\t\t\t\t\t\t\t\t\t\t\texit={{ opacity: 0, y: 4, scale: 0.95 }}\n\t\t\t\t\t\t\t\t\t\t\t\ttransition={{ duration: 0.12 }}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-input-attach-menu\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{showUploadImageButton && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-input-attach-option\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={handleUploadImageClick}\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<ImagePlus\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstyle={{ width: 16, height: 16 }}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-input-attach-option-icon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tUpload image\n\t\t\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t{showAttachFileButton && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-input-attach-option\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={handleAttachFileClick}\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Paperclip\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstyle={{ width: 16, height: 16 }}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-input-attach-option-icon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tAttach file\n\t\t\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</AnimatePresence>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t{showVoiceButton && (\n\t\t\t\t\t\t\t\t<div style={{ position: \"relative\" }}>\n\t\t\t\t\t\t\t\t\t<AnimatePresence initial={false}>\n\t\t\t\t\t\t\t\t\t\t{showVoiceTooltip && (\n\t\t\t\t\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\t\t\t\t\tinitial={{ opacity: 0, y: 4, scale: 0.98 }}\n\t\t\t\t\t\t\t\t\t\t\t\tanimate={{ opacity: 1, y: 0, scale: 1 }}\n\t\t\t\t\t\t\t\t\t\t\t\texit={{ opacity: 0, y: 4, scale: 0.98 }}\n\t\t\t\t\t\t\t\t\t\t\t\ttransition={{ duration: 0.14, ease: \"easeOut\" }}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-input-voice-tooltip\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"payman-v2-input-voice-tooltip-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\tChat with your voice\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"payman-v2-input-voice-tooltip-arrow\" />\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</AnimatePresence>\n\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tonClick={handleVoiceToggle}\n\t\t\t\t\t\t\t\t\t\tonMouseEnter={startVoiceTooltipTimer}\n\t\t\t\t\t\t\t\t\t\tonMouseLeave={hideVoiceTooltip}\n\t\t\t\t\t\t\t\t\t\tonFocus={startVoiceTooltipTimer}\n\t\t\t\t\t\t\t\t\t\tonBlur={hideVoiceTooltip}\n\t\t\t\t\t\t\t\t\t\tdisabled={isVoiceButtonDisabled}\n\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\"payman-v2-input-mic-btn\",\n\t\t\t\t\t\t\t\t\t\t\tisRecording && \"payman-v2-input-mic-recording\",\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\taria-label={isRecording ? \"Stop recording\" : \"Voice input\"}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<Mic style={{ width: 18, height: 18 }} />\n\t\t\t\t\t\t\t\t\t\t{isRecording && (\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"payman-v2-input-mic-indicator\" />\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<div className=\"payman-v2-input-controls-right\">\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tonClick={handleSend}\n\t\t\t\t\t\t\t\tdisabled={sendDisabled}\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\"payman-v2-input-send-btn\",\n\t\t\t\t\t\t\t\t\tsendDisabled && \"payman-v2-input-send-btn-disabled\",\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\taria-label=\"Send message\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<ArrowUp\n\t\t\t\t\t\t\t\t\tstyle={{ width: 16, height: 16, strokeWidth: 2.5 }}\n\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-input-send-icon\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t{inlineHint && (\n\t\t\t\t\t<p className=\"payman-v2-input-inline-hint\">{inlineHint}</p>\n\t\t\t\t)}\n\n\t\t\t\t<p className=\"payman-v2-input-disclaimer\">\n\t\t\t\t\tAI can make mistakes. Please double-check responses.\n\t\t\t\t</p>\n\t\t\t</div>\n\t\t);\n\t},\n);\n","import { AnimatePresence, motion } from \"framer-motion\";\nimport { DotLottieReact } from \"@lottiefiles/dotlottie-react\";\nimport { useEffect, useRef, useState } from \"react\";\n// Bundled default loader. tsup's `dataurl` loader (see tsup.config.ts)\n// inlines the .lottie bundle as a base64 data URI at build time so\n// DotLottieReact can load it with zero network round-trip and no\n// dependency on any external CDN being reachable at runtime.\nimport thinkingAtomSrc from \"../../assets/thinking-atom.lottie\";\n\n/**\n * Bottom-of-chat streaming indicator — a small animated glyph shown\n * directly above the chat input while the agent is working, with a\n * live-ticking elapsed-seconds label next to it. Inspired by\n * Claude's spinning-asterisk indicator: the label-and-status lives\n * inside the assistant message bubble, but this tiny bottom indicator\n * signals \"something is happening, the client hasn't hung\" in a spot\n * the user's eye lands on between glances at the answer.\n *\n * The whole block mounts only while streaming is in flight — once\n * the run ends, it fades out entirely. An earlier iteration tried\n * to keep the Lottie on screen in a paused state via the\n * dotLottieRefCallback + .pause() API, but pause() didn't reliably\n * freeze the animation in practice. Unmounting is simpler and\n * predictable: the user sees motion only when there's actually\n * motion to indicate.\n */\n\nexport type StreamingIndicatorV2Props = {\n\t/**\n\t * Whether to show the indicator. Parent (`PaymanChat`) flips this\n\t * with `isWaitingForResponse`. When this flips false the whole\n\t * block unmounts — DotLottieReact with it — so no extra wiring is\n\t * needed to stop the Lottie animation on run end.\n\t */\n\tisStreaming: boolean;\n\t/**\n\t * Optional consumer-supplied Lottie override. Accepts any\n\t * `.lottie` or Lottie `.json` URL — see `ChatConfig.loadingAnimation`.\n\t * When unset the bundled default (`thinking-atom.lottie`) is used.\n\t */\n\tloadingAnimation?: {\n\t\tsrc: string;\n\t\tsize?: number;\n\t};\n};\n\nconst DEFAULT_SIZE = 36;\n\n/**\n * Tiny hook that returns the number of whole seconds since the\n * indicator's most recent `isStreaming=true` transition. Updates\n * every 100ms while running so the label feels live. Resets to 0\n * when streaming ends (the block unmounts anyway, so the stale\n * value never renders).\n *\n * Why 100ms, not 1000ms: at 1Hz the counter \"jumps\" — the user sees\n * a visible pause at each integer. At 10Hz the counter feels\n * smooth, and we still only update the DOM text when the rounded\n * value changes (React reconciles to a no-op).\n */\nfunction useElapsedSeconds(isStreaming: boolean): number {\n\tconst [elapsed, setElapsed] = useState(0);\n\tconst startRef = useRef<number | null>(null);\n\n\tuseEffect(() => {\n\t\tif (!isStreaming) {\n\t\t\tstartRef.current = null;\n\t\t\tsetElapsed(0);\n\t\t\treturn;\n\t\t}\n\t\tstartRef.current = performance.now();\n\t\tsetElapsed(0);\n\t\tconst id = setInterval(() => {\n\t\t\tif (startRef.current == null) return;\n\t\t\tconst secs = Math.floor((performance.now() - startRef.current) / 1000);\n\t\t\tsetElapsed(secs);\n\t\t}, 100);\n\t\treturn () => clearInterval(id);\n\t}, [isStreaming]);\n\n\treturn elapsed;\n}\n\nexport function StreamingIndicatorV2({\n\tisStreaming,\n\tloadingAnimation,\n}: StreamingIndicatorV2Props) {\n\tconst size = loadingAnimation?.size ?? DEFAULT_SIZE;\n\tconst elapsed = useElapsedSeconds(isStreaming);\n\n\treturn (\n\t\t<AnimatePresence>\n\t\t\t{isStreaming && (\n\t\t\t\t<motion.div\n\t\t\t\t\tkey=\"streaming-indicator\"\n\t\t\t\t\tclassName=\"payman-v2-streaming-indicator\"\n\t\t\t\t\tinitial={{ opacity: 0, y: 4 }}\n\t\t\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\t\t\texit={{ opacity: 0, y: 4 }}\n\t\t\t\t\ttransition={{ duration: 0.2 }}\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t>\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"payman-v2-streaming-indicator-glyph\"\n\t\t\t\t\t\tstyle={{ width: size, height: size }}\n\t\t\t\t\t>\n\t\t\t\t\t\t{/*\n\t\t\t\t\t\t One render path for both cases: DotLottieReact's\n\t\t\t\t\t\t `src` prop accepts both a regular URL (consumer\n\t\t\t\t\t\t override) and a base64 data URI (bundled default).\n\t\t\t\t\t\t The bundled asset is inlined by esbuild's dataurl\n\t\t\t\t\t\t loader — no network round-trip for the default\n\t\t\t\t\t\t case.\n\t\t\t\t\t\t*/}\n\t\t\t\t\t\t<DotLottieReact\n\t\t\t\t\t\t\tsrc={loadingAnimation?.src ?? thinkingAtomSrc}\n\t\t\t\t\t\t\tloop\n\t\t\t\t\t\t\tautoplay\n\t\t\t\t\t\t\tstyle={{ width: \"100%\", height: \"100%\" }}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t\t{/*\n\t\t\t\t\t Live-ticking elapsed time next to the glyph. Hidden\n\t\t\t\t\t for the first tick so sub-second responses don't\n\t\t\t\t\t flash \"0s\" before the whole block exits.\n\t\t\t\t\t*/}\n\t\t\t\t\t{elapsed > 0 && (\n\t\t\t\t\t\t<span className=\"payman-v2-streaming-indicator-elapsed\">\n\t\t\t\t\t\t\t{elapsed}s\n\t\t\t\t\t\t</span>\n\t\t\t\t\t)}\n\t\t\t\t</motion.div>\n\t\t\t)}\n\t\t</AnimatePresence>\n\t);\n}\n","import { useCallback, useEffect, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport { Download, Loader2, X } from \"lucide-react\";\n\nexport type ImageLightboxV2Props = {\n\tsrc: string | null;\n\talt: string;\n\tonClose: () => void;\n};\n\nexport function ImageLightboxV2({ src, alt, onClose }: ImageLightboxV2Props) {\n\tconst [isMounted, setIsMounted] = useState(false);\n\tconst [isImageLoaded, setIsImageLoaded] = useState(false);\n\n\tuseEffect(() => {\n\t\tsetIsMounted(true);\n\t\treturn () => setIsMounted(false);\n\t}, []);\n\n\tuseEffect(() => {\n\t\tsetIsImageLoaded(false);\n\t}, [src]);\n\n\tconst handleKeyDown = useCallback(\n\t\t(e: KeyboardEvent) => {\n\t\t\tif (e.key === \"Escape\") onClose();\n\t\t},\n\t\t[onClose]\n\t);\n\n\tuseEffect(() => {\n\t\tif (!src || typeof document === \"undefined\") return;\n\n\t\tdocument.addEventListener(\"keydown\", handleKeyDown);\n\t\tconst previousOverflow = document.body.style.overflow;\n\t\tdocument.body.style.overflow = \"hidden\";\n\n\t\treturn () => {\n\t\t\tdocument.removeEventListener(\"keydown\", handleKeyDown);\n\t\t\tdocument.body.style.overflow = previousOverflow;\n\t\t};\n\t}, [src, handleKeyDown]);\n\n\tconst handleDownload = () => {\n\t\tif (!src || typeof document === \"undefined\") return;\n\t\tconst a = document.createElement(\"a\");\n\t\ta.href = src;\n\t\ta.download = alt.trim() ? alt : \"image\";\n\t\tdocument.body.appendChild(a);\n\t\ta.click();\n\t\ta.remove();\n\t};\n\n\tif (!isMounted || typeof document === \"undefined\") {\n\t\treturn null;\n\t}\n\n\treturn createPortal(\n\t\t<AnimatePresence>\n\t\t\t{src ? (\n\t\t\t\t<motion.div\n\t\t\t\t\tkey={src}\n\t\t\t\t\tclassName=\"payman-v2-lightbox\"\n\t\t\t\t\tinitial={{ opacity: 0 }}\n\t\t\t\t\tanimate={{ opacity: 1 }}\n\t\t\t\t\texit={{ opacity: 0 }}\n\t\t\t\t\ttransition={{ duration: 0.18 }}\n\t\t\t\t\tonClick={onClose}\n\t\t\t\t\trole=\"presentation\"\n\t\t\t\t>\n\t\t\t\t\t<div className=\"payman-v2-lightbox-controls\">\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclassName=\"payman-v2-lightbox-btn\"\n\t\t\t\t\t\t\taria-label=\"Download\"\n\t\t\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\thandleDownload();\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Download size={20} strokeWidth={2} />\n\t\t\t\t\t\t</button>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclassName=\"payman-v2-lightbox-btn\"\n\t\t\t\t\t\t\taria-label=\"Close\"\n\t\t\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\tonClose();\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<X size={20} strokeWidth={2} />\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"payman-v2-lightbox-content\"\n\t\t\t\t\t\tonClick={(e) => e.stopPropagation()}\n\t\t\t\t\t\trole=\"dialog\"\n\t\t\t\t\t\taria-modal=\"true\"\n\t\t\t\t\t\taria-label={alt || \"Image preview\"}\n\t\t\t\t\t>\n\t\t\t\t\t\t{!isImageLoaded ? (\n\t\t\t\t\t\t\t<div className=\"payman-v2-lightbox-loading\">\n\t\t\t\t\t\t\t\t<Loader2\n\t\t\t\t\t\t\t\t\tsize={24}\n\t\t\t\t\t\t\t\t\tstrokeWidth={2}\n\t\t\t\t\t\t\t\t\taria-hidden={true}\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\tcolor: \"rgba(255, 255, 255, 0.8)\",\n\t\t\t\t\t\t\t\t\t\tanimation: \"payman-v2-spin 0.6s linear infinite\",\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<p className=\"payman-v2-lightbox-loading-text\">\n\t\t\t\t\t\t\t\t\tLoading image\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t) : null}\n\n\t\t\t\t\t\t<div className=\"payman-v2-lightbox-img-wrapper\">\n\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\tinitial={{ scale: 0.92, opacity: 0 }}\n\t\t\t\t\t\t\t\tanimate={{\n\t\t\t\t\t\t\t\t\tscale: isImageLoaded ? 1 : 0.92,\n\t\t\t\t\t\t\t\t\topacity: isImageLoaded ? 1 : 0,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\texit={{ scale: 0.92, opacity: 0 }}\n\t\t\t\t\t\t\t\ttransition={{ duration: 0.2 }}\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\t\t\t\theight: \"100%\",\n\t\t\t\t\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-lightbox-img\"\n\t\t\t\t\t\t\t\t\tsrc={src}\n\t\t\t\t\t\t\t\t\talt={alt}\n\t\t\t\t\t\t\t\t\tdraggable={false}\n\t\t\t\t\t\t\t\t\tonLoad={() => setIsImageLoaded(true)}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</motion.div>\n\t\t\t) : null}\n\t\t</AnimatePresence>,\n\t\tdocument.body\n\t);\n}\n","import { useEffect, useMemo, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport { X } from \"lucide-react\";\n\n/**\n * Diagnostic-mode latency timeline. Renders one horizontal bar per\n * pipeline step in proportion to its wall-clock duration so it's\n * obvious at a glance which phase ate the turn's budget.\n *\n * Bars are styled inline (no Tailwind, no chart lib) so the modal\n * looks the same regardless of how the consuming app has its CSS\n * configured.\n */\n\ntype PipelineStep = {\n\tstep: string;\n\tstatus: string;\n\tstartTime: number;\n\tendTime?: number | null;\n\tdurationMs?: number | null;\n\terror?: string | null;\n\tllmCall?: {\n\t\tmodel?: string;\n\t\tdurationMs?: number | null;\n\t\tinputTokens?: number | null;\n\t\toutputTokens?: number | null;\n\t} | null;\n};\n\ntype ExecutionTrace = {\n\texecutionId: string;\n\tpipelineSteps: PipelineStep[];\n\trunMetadata?: {\n\t\tstartTime?: number | null;\n\t\tendTime?: number | null;\n\t\ttotalTimeMs?: number | null;\n\t} | null;\n\tstatus?: string;\n};\n\nexport type TraceTimelineModalProps = {\n\topen: boolean;\n\tonClose: () => void;\n\texecutionId: string | null;\n\tapiBaseUrl: string;\n\tapiHeaders?: Record<string, string>;\n};\n\n// Categories: phases that happen before sanitizer = pre-pipeline (orange),\n// pipeline stages = blue, anything else = grey.\nconst PRE_PIPELINE_STEPS = new Set([\n\t\"record_execution\",\n\t\"resolve_provider\",\n\t\"resolve_mcp_servers\",\n\t\"build_pipeline\",\n\t\"load_skill_index\",\n]);\n\nfunction stepColor(step: PipelineStep): string {\n\tif (step.status === \"failed\") return \"#ef4444\";\n\tif (PRE_PIPELINE_STEPS.has(step.step)) return \"#f59e0b\";\n\treturn \"#3b82f6\";\n}\n\nfunction formatMs(ms: number | null | undefined): string {\n\tif (ms == null) return \"—\";\n\tif (ms < 1000) return `${ms} ms`;\n\treturn `${(ms / 1000).toFixed(2)} s`;\n}\n\nexport function TraceTimelineModal({\n\topen,\n\tonClose,\n\texecutionId,\n\tapiBaseUrl,\n\tapiHeaders,\n}: TraceTimelineModalProps) {\n\tconst [trace, setTrace] = useState<ExecutionTrace | null>(null);\n\tconst [loading, setLoading] = useState(false);\n\tconst [error, setError] = useState<string | null>(null);\n\n\tuseEffect(() => {\n\t\tif (!open || !executionId) return;\n\t\tconst ctrl = new AbortController();\n\t\tsetLoading(true);\n\t\tsetError(null);\n\t\tsetTrace(null);\n\t\tconst base = apiBaseUrl.replace(/\\/+$/, \"\");\n\t\tfetch(`${base}/api/ask/executions/${encodeURIComponent(executionId)}/trace`, {\n\t\t\tmethod: \"GET\",\n\t\t\theaders: { Accept: \"application/json\", ...apiHeaders },\n\t\t\tsignal: ctrl.signal,\n\t\t})\n\t\t\t.then(async (resp) => {\n\t\t\t\tif (!resp.ok) {\n\t\t\t\t\tthrow new Error(`Trace fetch failed: ${resp.status} ${resp.statusText}`);\n\t\t\t\t}\n\t\t\t\treturn resp.json() as Promise<ExecutionTrace>;\n\t\t\t})\n\t\t\t.then((data) => setTrace(data))\n\t\t\t.catch((e: unknown) => {\n\t\t\t\tif ((e as { name?: string }).name === \"AbortError\") return;\n\t\t\t\tsetError(e instanceof Error ? e.message : \"Trace fetch failed\");\n\t\t\t})\n\t\t\t.finally(() => setLoading(false));\n\t\treturn () => ctrl.abort();\n\t}, [open, executionId, apiBaseUrl, apiHeaders]);\n\n\tconst totalMs = useMemo<number>(() => {\n\t\tif (!trace) return 0;\n\t\tconst meta = trace.runMetadata?.totalTimeMs;\n\t\tif (typeof meta === \"number\" && meta > 0) return meta;\n\t\t// Fall back to span of step timestamps if runMetadata is absent.\n\t\tconst starts = trace.pipelineSteps.map((s) => s.startTime);\n\t\tconst ends = trace.pipelineSteps\n\t\t\t.map((s) => s.endTime ?? s.startTime)\n\t\t\t.filter((t): t is number => typeof t === \"number\");\n\t\tif (starts.length === 0 || ends.length === 0) return 0;\n\t\treturn Math.max(...ends) - Math.min(...starts);\n\t}, [trace]);\n\n\tconst accountedMs = useMemo<number>(\n\t\t() =>\n\t\t\t(trace?.pipelineSteps ?? []).reduce(\n\t\t\t\t(sum, s) => sum + (s.durationMs ?? 0),\n\t\t\t\t0,\n\t\t\t),\n\t\t[trace],\n\t);\n\n\tconst unaccountedMs = Math.max(totalMs - accountedMs, 0);\n\n\tif (typeof document === \"undefined\") return null;\n\n\treturn createPortal(\n\t\t<AnimatePresence>\n\t\t\t{open && (\n\t\t\t\t<motion.div\n\t\t\t\t\tinitial={{ opacity: 0 }}\n\t\t\t\t\tanimate={{ opacity: 1 }}\n\t\t\t\t\texit={{ opacity: 0 }}\n\t\t\t\t\ttransition={{ duration: 0.15 }}\n\t\t\t\t\tonClick={onClose}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tposition: \"fixed\",\n\t\t\t\t\t\tinset: 0,\n\t\t\t\t\t\tbackground: \"rgba(0,0,0,0.45)\",\n\t\t\t\t\t\tzIndex: 9999,\n\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\t\tjustifyContent: \"center\",\n\t\t\t\t\t\tpadding: 24,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<motion.div\n\t\t\t\t\t\tinitial={{ y: 12, opacity: 0 }}\n\t\t\t\t\t\tanimate={{ y: 0, opacity: 1 }}\n\t\t\t\t\t\texit={{ y: 12, opacity: 0 }}\n\t\t\t\t\t\ttransition={{ duration: 0.18 }}\n\t\t\t\t\t\tonClick={(e) => e.stopPropagation()}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tbackground: \"#0b1220\",\n\t\t\t\t\t\t\tcolor: \"#e5e7eb\",\n\t\t\t\t\t\t\tborderRadius: 12,\n\t\t\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\t\t\tmaxWidth: 760,\n\t\t\t\t\t\t\tmaxHeight: \"85vh\",\n\t\t\t\t\t\t\toverflow: \"auto\",\n\t\t\t\t\t\t\tboxShadow: \"0 20px 60px rgba(0,0,0,0.45)\",\n\t\t\t\t\t\t\tfontFamily:\n\t\t\t\t\t\t\t\t\"ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, sans-serif\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<header\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\t\t\t\tjustifyContent: \"space-between\",\n\t\t\t\t\t\t\t\tpadding: \"14px 18px\",\n\t\t\t\t\t\t\t\tborderBottom: \"1px solid rgba(255,255,255,0.08)\",\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t<div style={{ fontSize: 14, fontWeight: 600 }}>\n\t\t\t\t\t\t\t\t\tExecution trace\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\tfontSize: 11,\n\t\t\t\t\t\t\t\t\t\topacity: 0.6,\n\t\t\t\t\t\t\t\t\t\tmarginTop: 2,\n\t\t\t\t\t\t\t\t\t\tfontFamily: \"ui-monospace, SFMono-Regular, monospace\",\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{executionId ?? \"\"}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\tonClick={onClose}\n\t\t\t\t\t\t\t\taria-label=\"Close\"\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tbackground: \"transparent\",\n\t\t\t\t\t\t\t\t\tborder: 0,\n\t\t\t\t\t\t\t\t\tcolor: \"#e5e7eb\",\n\t\t\t\t\t\t\t\t\tcursor: \"pointer\",\n\t\t\t\t\t\t\t\t\tpadding: 6,\n\t\t\t\t\t\t\t\t\tborderRadius: 6,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<X style={{ width: 18, height: 18 }} />\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</header>\n\n\t\t\t\t\t\t<div style={{ padding: 18 }}>\n\t\t\t\t\t\t\t{loading && (\n\t\t\t\t\t\t\t\t<div style={{ opacity: 0.7, fontSize: 13 }}>\n\t\t\t\t\t\t\t\t\tLoading trace…\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{error && (\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\tcolor: \"#fca5a5\",\n\t\t\t\t\t\t\t\t\t\tfontSize: 13,\n\t\t\t\t\t\t\t\t\t\twhiteSpace: \"pre-wrap\",\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{error}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{trace && !loading && !error && (\n\t\t\t\t\t\t\t\t<TimelineBars\n\t\t\t\t\t\t\t\t\ttrace={trace}\n\t\t\t\t\t\t\t\t\ttotalMs={totalMs}\n\t\t\t\t\t\t\t\t\tunaccountedMs={unaccountedMs}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</motion.div>\n\t\t\t\t</motion.div>\n\t\t\t)}\n\t\t</AnimatePresence>,\n\t\tdocument.body,\n\t);\n}\n\nfunction TimelineBars({\n\ttrace,\n\ttotalMs,\n\tunaccountedMs,\n}: {\n\ttrace: ExecutionTrace;\n\ttotalMs: number;\n\tunaccountedMs: number;\n}) {\n\tconst bars = trace.pipelineSteps.map((step) => {\n\t\tconst duration = step.durationMs ?? 0;\n\t\tconst widthPct = totalMs > 0 ? (duration / totalMs) * 100 : 0;\n\t\tconst llmMs = step.llmCall?.durationMs ?? null;\n\t\treturn (\n\t\t\t<div key={`${step.step}-${step.startTime}`} style={{ marginBottom: 8 }}>\n\t\t\t\t<div\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\tjustifyContent: \"space-between\",\n\t\t\t\t\t\tfontSize: 12,\n\t\t\t\t\t\tmarginBottom: 4,\n\t\t\t\t\t\tfontFamily: \"ui-monospace, SFMono-Regular, monospace\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<span>\n\t\t\t\t\t\t{step.step}\n\t\t\t\t\t\t{step.status === \"failed\" && (\n\t\t\t\t\t\t\t<span style={{ color: \"#fca5a5\", marginLeft: 6 }}>\n\t\t\t\t\t\t\t\t(failed)\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</span>\n\t\t\t\t\t<span style={{ opacity: 0.75 }}>\n\t\t\t\t\t\t{formatMs(duration)}\n\t\t\t\t\t\t{llmMs != null && (\n\t\t\t\t\t\t\t<span style={{ marginLeft: 8, opacity: 0.6 }}>\n\t\t\t\t\t\t\t\t(LLM {formatMs(llmMs)})\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t\t<div\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\theight: 8,\n\t\t\t\t\t\tbackground: \"rgba(255,255,255,0.06)\",\n\t\t\t\t\t\tborderRadius: 4,\n\t\t\t\t\t\toverflow: \"hidden\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<div\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\theight: \"100%\",\n\t\t\t\t\t\t\twidth: `${Math.max(widthPct, 0.3)}%`,\n\t\t\t\t\t\t\tbackground: stepColor(step),\n\t\t\t\t\t\t\ttransition: \"width 0.2s ease\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t});\n\n\treturn (\n\t\t<div>\n\t\t\t{bars}\n\t\t\t{unaccountedMs > 0 && (\n\t\t\t\t<div style={{ marginBottom: 8 }}>\n\t\t\t\t\t<div\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\t\tjustifyContent: \"space-between\",\n\t\t\t\t\t\t\tfontSize: 12,\n\t\t\t\t\t\t\tmarginBottom: 4,\n\t\t\t\t\t\t\tfontFamily: \"ui-monospace, SFMono-Regular, monospace\",\n\t\t\t\t\t\t\topacity: 0.7,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<span>(unaccounted)</span>\n\t\t\t\t\t\t<span>{formatMs(unaccountedMs)}</span>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\theight: 8,\n\t\t\t\t\t\t\tbackground: \"rgba(255,255,255,0.06)\",\n\t\t\t\t\t\t\tborderRadius: 4,\n\t\t\t\t\t\t\toverflow: \"hidden\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\theight: \"100%\",\n\t\t\t\t\t\t\t\twidth: `${(unaccountedMs / Math.max(totalMs, 1)) * 100}%`,\n\t\t\t\t\t\t\t\tbackground:\n\t\t\t\t\t\t\t\t\t\"repeating-linear-gradient(45deg, rgba(255,255,255,0.18) 0 4px, transparent 4px 8px)\",\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t<div\n\t\t\t\tstyle={{\n\t\t\t\t\tmarginTop: 14,\n\t\t\t\t\tpaddingTop: 12,\n\t\t\t\t\tborderTop: \"1px solid rgba(255,255,255,0.08)\",\n\t\t\t\t\tfontSize: 12,\n\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\tjustifyContent: \"space-between\",\n\t\t\t\t\topacity: 0.85,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<span>\n\t\t\t\t\t{trace.pipelineSteps.length} step\n\t\t\t\t\t{trace.pipelineSteps.length === 1 ? \"\" : \"s\"}\n\t\t\t\t</span>\n\t\t\t\t<span style={{ fontFamily: \"ui-monospace, SFMono-Regular, monospace\" }}>\n\t\t\t\t\ttotal: {formatMs(totalMs)}\n\t\t\t\t</span>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import { useChatV2, useVoice } from \"@paymanai/payman-typescript-ask-sdk\";\nimport type { UseChatV2Return } from \"@paymanai/payman-typescript-ask-sdk\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport { forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from \"react\";\nimport { PaymanChatContext } from \"../../contexts\";\nimport type {\n\tChatCallbacks,\n\tChatConfig,\n\tMessageActionsConfig,\n\tMessageDisplay,\n\tPaymanChatProps,\n\tPaymanChatRef,\n\tUserActionState,\n} from \"../../types\";\nimport { cn } from \"../../utils\";\nimport {\n\tisFriendlyWorkflowError,\n\tgetConflictErrorMessage,\n} from \"../../utils/errorMessages\";\nimport {\n\tDEFAULT_SLASH_COMMANDS,\n\tfilterSlashCommands,\n} from \"../../utils/slashCommands\";\nimport { initSentryIfNeeded } from \"../../utils/sentry\";\nimport { submitFeedback } from \"../../utils/feedbackClient\";\nimport type { SubmitFeedbackHandler } from \"../../utils/feedbackClient\";\nimport {\n\tcaptureSentryError,\n\tsubscribeToCfRay,\n\ttype ChatSessionContext,\n} from \"../../utils/sentryContext\";\nimport { MessageList } from \"../MessageList\";\nimport { ResetSessionConfirmModal } from \"../ResetSessionConfirmModal\";\nimport { MessageListV2 } from \"../v2/MessageListV2\";\nimport type { MessageListV2Handle } from \"../v2/MessageListV2\";\nimport { ChatInputV2 } from \"../v2/ChatInputV2\";\nimport type { ChatInputV2Handle } from \"../v2/ChatInputV2\";\nimport { StreamingIndicatorV2 } from \"../v2/StreamingIndicatorV2\";\nimport { ImageLightboxV2 } from \"../v2/ImageLightboxV2\";\nimport { TraceTimelineModal } from \"../v2/TraceTimelineModal\";\nimport type { VerificationStatusV2 } from \"../v2/VerificationCardV2\";\n\nconst DEFAULT_USER_ACTION_STATE: UserActionState = {\n\trequest: null,\n\tresult: null,\n\tclearOtpTrigger: 0,\n};\n\nconst NOOP_ASYNC = async () => {};\n\nfunction useSentryChatCallbacks(\n\tcallbacks: ChatCallbacks | undefined,\n\tconfig: ChatConfig,\n): ChatCallbacks {\n\tconst sentryCtxRef = useRef<ChatSessionContext>({});\n\tconst callbacksRef = useRef(callbacks);\n\tcallbacksRef.current = callbacks;\n\n\tconst initialSessionId = config.initialSessionId;\n\tconst apiHeaders = config.api.headers;\n\n\tuseEffect(() => {\n\t\tsentryCtxRef.current.agentId = config.agentId;\n\t\tsentryCtxRef.current.sessionOwnerId = config.sessionParams?.id;\n\t\tif (initialSessionId) {\n\t\t\tsentryCtxRef.current.sessionId = initialSessionId;\n\t\t}\n\t\tif (apiHeaders) {\n\t\t\tsentryCtxRef.current.customerId =\n\t\t\t\tapiHeaders[\"x-paygent-wf-mcp-customer-id\"] ?? sentryCtxRef.current.customerId;\n\t\t\tsentryCtxRef.current.customerEmail =\n\t\t\t\tapiHeaders[\"x-paygent-wf-mcp-customer-email\"] ?? sentryCtxRef.current.customerEmail;\n\t\t}\n\t}, [\n\t\tconfig.agentId,\n\t\tconfig.sessionParams?.id,\n\t\tinitialSessionId,\n\t\tapiHeaders,\n\t]);\n\n\tuseEffect(() => {\n\t\tconst endpoint = config.api.streamEndpoint || \"/api/playground/ask/stream\";\n\t\treturn subscribeToCfRay(endpoint, (cfRay) => {\n\t\t\tsentryCtxRef.current.cfRay = cfRay;\n\t\t});\n\t}, [config.api.streamEndpoint]);\n\n\treturn useMemo<ChatCallbacks>(\n\t\t() => ({\n\t\t\tonMessageSent: (msg) => callbacksRef.current?.onMessageSent?.(msg),\n\t\t\tonStreamStart: () => callbacksRef.current?.onStreamStart?.(),\n\t\t\tonStreamComplete: (message: MessageDisplay) => {\n\t\t\t\tif (message.executionId) {\n\t\t\t\t\tsentryCtxRef.current.executionId = message.executionId;\n\t\t\t\t}\n\t\t\t\tif (message.sessionId) {\n\t\t\t\t\tsentryCtxRef.current.sessionId = message.sessionId;\n\t\t\t\t}\n\n\t\t\t\tconst content = message.content ?? \"\";\n\t\t\t\tconst looksLikeRawErr =\n\t\t\t\t\tcontent.length >= 10 &&\n\t\t\t\t\t(content.includes(\"errorType=\") || /failed:\\s*\\{/.test(content));\n\t\t\t\tconst completedEmpty =\n\t\t\t\t\t!message.isStreaming &&\n\t\t\t\t\t!message.isCancelled &&\n\t\t\t\t\tcontent.length === 0 &&\n\t\t\t\t\t(message.streamProgress === \"completed\" || message.streamProgress === \"error\");\n\t\t\t\tconst hasConflict = !!getConflictErrorMessage(message.errorDetails);\n\t\t\t\tconst hasFriendlyErr = isFriendlyWorkflowError(message.errorDetails);\n\n\t\t\t\tconst shouldCapture =\n\t\t\t\t\tmessage.isError ||\n\t\t\t\t\thasConflict ||\n\t\t\t\t\thasFriendlyErr ||\n\t\t\t\t\tlooksLikeRawErr ||\n\t\t\t\t\tcompletedEmpty;\n\n\t\t\t\tif (shouldCapture) {\n\t\t\t\t\tsentryCtxRef.current.route =\n\t\t\t\t\t\ttypeof window !== \"undefined\"\n\t\t\t\t\t\t\t? window.location.pathname\n\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\tcaptureSentryError(\n\t\t\t\t\t\t`Workflow error: ${message.errorDetails || content || \"Unknown error\"}`,\n\t\t\t\t\t\t{ ...sentryCtxRef.current },\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tcallbacksRef.current?.onStreamComplete?.(message);\n\t\t\t},\n\t\t\tonError: (error: Error) => {\n\t\t\t\tsentryCtxRef.current.route =\n\t\t\t\t\ttypeof window !== \"undefined\" ? window.location.pathname : undefined;\n\t\t\t\tcaptureSentryError(error, { ...sentryCtxRef.current });\n\t\t\t\tcallbacksRef.current?.onError?.(error);\n\t\t\t},\n\t\t\tonSessionIdChange: (sessionId: string) => {\n\t\t\t\tsentryCtxRef.current.sessionId = sessionId;\n\t\t\t\tcallbacksRef.current?.onSessionIdChange?.(sessionId);\n\t\t\t},\n\t\t\tonExecutionTraceClick: (data) =>\n\t\t\t\tcallbacksRef.current?.onExecutionTraceClick?.(data),\n\t\t\tonResetSession: () => callbacksRef.current?.onResetSession?.(),\n\t\tonUploadImageClick: () => callbacksRef.current?.onUploadImageClick?.(),\n\t\tonAttachFileClick: () => callbacksRef.current?.onAttachFileClick?.(),\n\t\tonMessageFeedback: (data: { messageId: string; feedback: \"up\" | \"down\" }) =>\n\t\t\tcallbacksRef.current?.onMessageFeedback?.(data),\n\t\t\tonUserActionRequired: (req) =>\n\t\t\t\tcallbacksRef.current?.onUserActionRequired?.(req),\n\t\t\tonUserActionEvent: (evType, msg) =>\n\t\t\t\tcallbacksRef.current?.onUserActionEvent?.(evType, msg),\n\t\t\tonStatusMessage: (msg) =>\n\t\t\t\tcallbacksRef.current?.onStatusMessage?.(msg),\n\t\t\tonStepsUpdate: (steps) =>\n\t\t\t\tcallbacksRef.current?.onStepsUpdate?.(steps),\n\t\t}),\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t\t[],\n\t);\n}\n\ntype PaymanChatInnerProps = PaymanChatProps & { chat: UseChatV2Return };\n\nconst PaymanChatInner = forwardRef<PaymanChatRef, PaymanChatInnerProps>(function PaymanChatInner({\n\tconfig,\n\tcallbacks = {},\n\tclassName,\n\tstyle,\n\tchildren,\n\tonLoadMoreMessages,\n\tisLoadingMoreMessages = false,\n\thasMoreMessages = false,\n\tchat,\n}, ref) {\n\tconst [inputValue, setInputValue] = useState(\"\");\n\tconst prevInputValueRef = useRef(inputValue);\n\tconst [hasEverSentMessage, setHasEverSentMessage] = useState(false);\n\tconst [lightboxSrc, setLightboxSrc] = useState<string | null>(null);\n\tconst [lightboxAlt, setLightboxAlt] = useState(\"\");\n\tconst [editingMessageId, setEditingMessageId] = useState<string | null>(null);\n\tconst [isResetSessionConfirmOpen, setIsResetSessionConfirmOpen] =\n\t\tuseState(false);\n\t// Latency/precision toggle the user flips on the input bar.\n\t// Fast = sampled, quick answer; Deep = full analytical pass.\n\t// Default \"fast\" — the server also defaults to fast when the\n\t// field is omitted, so leaving this unset on old SDK versions\n\t// yields the same behavior. Hosts can hide the toggle with\n\t// `enableDeepModeToggle={false}`; sends then stay pinned to fast.\n\tconst [analysisMode, setAnalysisMode] = useState<\"fast\" | \"deep\">(\"fast\");\n\tconst chatInputV2Ref = useRef<ChatInputV2Handle>(null);\n\tconst messageListV2Ref = useRef<MessageListV2Handle>(null);\n\tconst resetToEmptyStateRef = useRef(false);\n\n\tuseEffect(() => {\n\t\tif (config.sentryDsn) {\n\t\t\tinitSentryIfNeeded(config.sentryDsn);\n\t\t}\n\t}, [config.sentryDsn]);\n\n\tconst {\n\t\tmessages,\n\t\tsendMessage,\n\t\tisWaitingForResponse,\n\t\tresetSession,\n\t\tclearMessages,\n\t\tprependMessages,\n\t\tcancelStream,\n\t\tgetSessionId,\n\t\tgetMessages,\n\t} = chat;\n\n\t// Track when messages first appear (for animation)\n\tuseEffect(() => {\n\t\tif (resetToEmptyStateRef.current) {\n\t\t\tif (messages.length === 0) {\n\t\t\t\tsetHasEverSentMessage(false);\n\t\t\t\tresetToEmptyStateRef.current = false;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tif (messages.length > 0 && !hasEverSentMessage) {\n\t\t\tsetHasEverSentMessage(true);\n\t\t}\n\t}, [messages.length, hasEverSentMessage]);\n\n\tuseEffect(() => {\n\t\tif (!editingMessageId) return;\n\t\tconst editingMessageStillExists = messages.some(\n\t\t\t(message) => message.id === editingMessageId && message.role === \"user\"\n\t\t);\n\t\tif (!editingMessageStillExists) {\n\t\t\tsetEditingMessageId(null);\n\t\t}\n\t}, [editingMessageId, messages]);\n\n\t// Keep OTP features backward-safe if hook returns a non-OTP shape.\n\tconst userActionState = chat.userActionState ?? DEFAULT_USER_ACTION_STATE;\n\tconst approveUserAction = chat.approveUserAction ?? NOOP_ASYNC;\n\tconst rejectUserAction = chat.rejectUserAction ?? NOOP_ASYNC;\n\tconst resendOtp = chat.resendOtp ?? NOOP_ASYNC;\n\tconst isUserActionSupported =\n\t\ttypeof chat.approveUserAction === \"function\" &&\n\t\ttypeof chat.rejectUserAction === \"function\" &&\n\t\ttypeof chat.resendOtp === \"function\";\n\n\t// Voice support\n\tconst {\n\t\ttranscribedText,\n\t\tisAvailable: voiceAvailable,\n\t\tisRecording,\n\t\tstartRecording,\n\t\tstopRecording,\n\t\tclearTranscript,\n\t} = useVoice(\n\t\t{\n\t\t\tlang: config.voiceLang || \"en-US\",\n\t\t\tinterimResults: config.voiceInterimResults !== false,\n\t\t\tcontinuous: config.voiceContinuous !== false,\n\t\t},\n\t\t{\n\t\t\tonResult: () => {\n\t\t\t\t// V2 input element handles voice transcription internally\n\t\t\t\t// via the recording modal; the host component no longer\n\t\t\t\t// needs to sync the textarea value. (Previously guarded\n\t\t\t\t// by `if (!isV2)` — v1 is gone.)\n\t\t\t},\n\t\t\tonEnd: () => {},\n\t\t\tonError: (error) => {\n\t\t\t\tconsole.error(\"Voice error:\", error);\n\t\t\t},\n\t\t}\n\t);\n\n\t// Create context value with control methods\n\tconst contextValue = useMemo(\n\t\t() => ({\n\t\t\tresetSession,\n\t\t\tclearMessages,\n\t\t\tprependMessages,\n\t\t\tcancelStream,\n\t\t\tgetSessionId,\n\t\t\tgetMessages,\n\t\t\tisWaitingForResponse,\n\t\t}),\n\t\t[\n\t\t\tresetSession,\n\t\t\tclearMessages,\n\t\t\tprependMessages,\n\t\t\tcancelStream,\n\t\t\tgetSessionId,\n\t\t\tgetMessages,\n\t\t\tisWaitingForResponse,\n\t\t]\n\t);\n\n\t// Extract callbacks\n\tconst {\n\t\tonExecutionTraceClick: rawOnExecutionTraceClick,\n\t\tonResetSession,\n\t\tonUploadImageClick,\n\t\tonAttachFileClick,\n\t\tonMessageFeedback,\n\t} = callbacks;\n\n\t// Debug-mode trace viewer state. Holds the executionId currently\n\t// being inspected; null while the modal is closed.\n\tconst [debugTraceExecutionId, setDebugTraceExecutionId] = useState<\n\t\tstring | null\n\t>(null);\n\n\t// Persist thumbs-up/down to /api/ask/executions/{id}/feedback using the\n\t// same api key the chat already authenticates with. Resolves on a durable\n\t// save (so the message UI keeps its active state) and rejects on failure\n\t// (so it reverts / the reason modal shows an error). The consumer's\n\t// onMessageFeedback callback fires only after a successful save.\n\tconst handleSubmitFeedback = useCallback<SubmitFeedbackHandler>(\n\t\tasync ({ messageId, executionId, feedback, details }) => {\n\t\t\tif (!executionId) {\n\t\t\t\tthrow new Error(\"Cannot submit feedback before the response completes\");\n\t\t\t}\n\t\t\tawait submitFeedback({\n\t\t\t\tbaseUrl: config.api.baseUrl,\n\t\t\t\tstreamEndpoint: config.api.streamEndpoint,\n\t\t\t\theaders: config.api.headers,\n\t\t\t\tauthToken: config.api.authToken,\n\t\t\t\tstage: config.stage,\n\t\t\t\tstageQueryParam: config.stageQueryParam,\n\t\t\t\texecutionId,\n\t\t\t\tfeedback,\n\t\t\t\tdetails,\n\t\t\t});\n\t\t\tonMessageFeedback?.({\n\t\t\t\tmessageId,\n\t\t\t\tfeedback: feedback === \"POSITIVE\" ? \"up\" : \"down\",\n\t\t\t});\n\t\t},\n\t\t[\n\t\t\tconfig.api.baseUrl,\n\t\t\tconfig.api.streamEndpoint,\n\t\t\tconfig.api.headers,\n\t\t\tconfig.api.authToken,\n\t\t\tconfig.stage,\n\t\t\tconfig.stageQueryParam,\n\t\t\tonMessageFeedback,\n\t\t],\n\t);\n\n\t// In debug mode we intercept the trace click to open the built-in\n\t// latency timeline. Any consumer-provided handler still fires so\n\t// existing telemetry / overrides aren't silently disabled.\n\tconst onExecutionTraceClick = useMemo(() => {\n\t\tif (!config.debug) return rawOnExecutionTraceClick;\n\t\treturn (data: {\n\t\t\tmessage: MessageDisplay;\n\t\t\ttracingData?: unknown;\n\t\t\texecutionId?: string;\n\t\t}) => {\n\t\t\trawOnExecutionTraceClick?.(data);\n\t\t\tif (data.executionId) setDebugTraceExecutionId(data.executionId);\n\t\t};\n\t}, [config.debug, rawOnExecutionTraceClick]);\n\n\tconst performResetSession = useCallback(() => {\n\t\tresetToEmptyStateRef.current = true;\n\t\tsetEditingMessageId(null);\n\t\tsetIsResetSessionConfirmOpen(false);\n\t\tsetInputValue(\"\");\n\t\tsetLightboxSrc(null);\n\t\tsetLightboxAlt(\"\");\n\t\tchatInputV2Ref.current?.setDraft(\"\");\n\t\tclearTranscript();\n\t\tif (isRecording) {\n\t\t\tstopRecording();\n\t\t}\n\t\tresetSession();\n\t\tonResetSession?.();\n\t}, [\n\t\tclearTranscript,\n\t\tisRecording,\n\t\tonResetSession,\n\t\tresetSession,\n\t\tstopRecording,\n\t]);\n\n\tconst requestResetSession = useCallback(() => {\n\t\tsetIsResetSessionConfirmOpen(true);\n\t}, []);\n\n\tconst closeResetSessionConfirm = useCallback(() => {\n\t\tsetIsResetSessionConfirmOpen(false);\n\t}, []);\n\n\t// Expose control methods via ref\n\tuseImperativeHandle(ref, () => ({\n\t\tresetSession: performResetSession,\n\t\tclearMessages,\n\t\tcancelStream,\n\t\tgetSessionId,\n\t\tgetMessages,\n\t}), [performResetSession, clearMessages, cancelStream, getSessionId, getMessages]);\n\n\t// Extract config with hardcoded UI defaults\n\tconst {\n\t\tplaceholder = \"Type your message...\",\n\t\temptyStateText = \"What can I help with?\",\n\t\tsessionParams,\n\t\tdisableInput = false,\n\t\thasAskPermission = true,\n\t\tstreamingStepsText,\n\t\tcompletedStepsText,\n\t\tshowAvatars = false,\n\t\tshowUserAvatar,\n\t\tshowAssistantAvatar,\n\t\tshowAgentName = true,\n\t\tagentName = \"Assistant\",\n\t\tshowExecutionSteps = true,\n\t\tshowStreamingDot = true,\n\t\tlayout = \"full-width\",\n\t\tshowTimestamps = false,\n\t\tanimated = true,\n\t\tisChatDisabled = false,\n\t\tdisabledComponent,\n\t\tshowEmptyStateIcon = true,\n\t\temptyStateComponent,\n\t\tshowResetSession = false,\n\t\tenableDeepModeToggle = true,\n\t\tshowAttachmentButton = true,\n\t\tshowUploadImageButton = true,\n\t\tshowAttachFileButton = true,\n\t\tmessageActions: messageActionsConfig,\n\t\tenableSlashCommands = true,\n\t\tslashCommands: slashCommandsConfig,\n\t\tcommandPermissions,\n\t} = config;\n\n\tconst messageActions = useMemo<Required<MessageActionsConfig>>(\n\t\t() => ({\n\t\t\tuserMessageActions: {\n\t\t\t\tcopy: messageActionsConfig?.userMessageActions?.copy ?? true,\n\t\t\t\tedit: messageActionsConfig?.userMessageActions?.edit ?? false,\n\t\t\t\tretry: messageActionsConfig?.userMessageActions?.retry ?? false,\n\t\t\t},\n\t\tassistantMessageActions: {\n\t\t\tcopy: messageActionsConfig?.assistantMessageActions?.copy ?? true,\n\t\t\ttrace: messageActionsConfig?.assistantMessageActions?.trace ?? true,\n\t\t\tthumbsUp: messageActionsConfig?.assistantMessageActions?.thumbsUp ?? true,\n\t\t\tthumbsDown: messageActionsConfig?.assistantMessageActions?.thumbsDown ?? true,\n\t\t},\n\t\t}),\n\t\t[messageActionsConfig]\n\t);\n\tconst slashCommands = useMemo(\n\t\t() =>\n\t\t\tenableSlashCommands\n\t\t\t\t? filterSlashCommands(\n\t\t\t\t\t\tslashCommandsConfig ?? DEFAULT_SLASH_COMMANDS,\n\t\t\t\t\t\tcommandPermissions,\n\t\t\t\t\t)\n\t\t\t\t: [],\n\t\t[commandPermissions, enableSlashCommands, slashCommandsConfig],\n\t);\n\n\t// Check if session params are configured\n\tconst isSessionParamsConfigured = useMemo(() => {\n\t\tif (!sessionParams) return false;\n\t\treturn !!(sessionParams.id?.trim() && sessionParams.name?.trim());\n\t}, [sessionParams?.id, sessionParams?.name]);\n\n\t// Reset voice recognition only when user clears the input (not on initial empty state)\n\tuseEffect(() => {\n\t\tconst wasEmpty = prevInputValueRef.current.trim() === \"\";\n\t\tconst isEmpty = inputValue.trim() === \"\";\n\t\tprevInputValueRef.current = inputValue;\n\t\tif (!wasEmpty && isEmpty) {\n\t\t\tclearTranscript();\n\t\t\tif (isRecording) {\n\t\t\t\tstopRecording();\n\t\t\t}\n\t\t}\n\t}, [inputValue, clearTranscript, isRecording, stopRecording]);\n\n\tconst handleCancelRecording = () => {\n\t\tstopRecording();\n\t\tclearTranscript();\n\t\tsetInputValue(\"\");\n\t};\n\n\tconst handleConfirmRecording = () => {\n\t\tstopRecording();\n\t\t// Keep the transcribed text in the input for user to review/send\n\t};\n\n\tconst isV2InputDisabled = !isSessionParamsConfigured || disableInput;\n\tconst effectiveAnalysisMode = enableDeepModeToggle ? analysisMode : \"fast\";\n\n\tconst isEmpty = messages.length === 0;\n\n\t// If chat is disabled, show custom component or default disabled UI\n\tif (isChatDisabled) {\n\t\tif (disabledComponent) {\n\t\t\treturn (\n\t\t\t\t<PaymanChatContext.Provider value={contextValue}>\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"bg-background overflow-hidden flex flex-col flex-[4]\",\n\t\t\t\t\t\t\tclassName\n\t\t\t\t\t\t)}\n\t\t\t\t\t\tstyle={style}\n\t\t\t\t\t>\n\t\t\t\t\t\t{children}\n\t\t\t\t\t\t{disabledComponent}\n\t\t\t\t\t</div>\n\t\t\t\t</PaymanChatContext.Provider>\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<PaymanChatContext.Provider value={contextValue}>\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"bg-background overflow-hidden flex flex-col flex-[4]\",\n\t\t\t\t\t\tclassName\n\t\t\t\t\t)}\n\t\t\t\t\tstyle={style}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t\t<div className=\"flex-1 flex items-center justify-center p-4\">\n\t\t\t\t\t\t<div className=\"text-center\">\n\t\t\t\t\t\t\t<div className=\"text-muted-foreground text-sm\">\n\t\t\t\t\t\t\t\tChat is currently disabled\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</PaymanChatContext.Provider>\n\t\t);\n\t}\n\n\t// --- V2 helpers ---\n\tconst handleImageClick = (src: string, alt: string) => {\n\t\tsetLightboxSrc(src);\n\t\tsetLightboxAlt(alt);\n\t};\n\n\tconst v2UserAction = useMemo(() => {\n\t\tif (!isUserActionSupported || !userActionState.request) return null;\n\t\tconst req = userActionState.request;\n\t\tlet status: VerificationStatusV2 = \"pending\";\n\t\tif (userActionState.result === \"approved\") status = \"approved\";\n\t\telse if (userActionState.result === \"rejected\") status = \"rejected\";\n\t\treturn {\n\t\t\tmessageId: `ua-${req.userActionId || Date.now()}`,\n\t\t\taction: {\n\t\t\t\ttype: req.userActionType || \"generic\",\n\t\t\t\tmessage: req.message || \"Verify this action\",\n\t\t\t\tamount: req.metadata?.amount,\n\t\t\t\tpayeeName: req.metadata?.payeeName,\n\t\t\t},\n\t\t\tstatus,\n\t\t};\n\t}, [isUserActionSupported, userActionState.request, userActionState.result]);\n\n\tconst handleV2Send = (text: string) => {\n\t\tif (isRecording) stopRecording();\n\t\tif (text.trim() && !disableInput && isSessionParamsConfigured) {\n\t\t\tsetEditingMessageId(null);\n\t\t\t// Pass the current analysis mode so the server picks the\n\t\t\t// right latency/precision mode for THIS message. The\n\t\t\t// toggle is per-send, not per-session, so users can mix\n\t\t\t// quick lookups and deep dives in the same conversation.\n\t\t\t// When the toggle is hidden, mode is still explicit fast.\n\t\t\tvoid sendMessage(text.trim(), { analysisMode: effectiveAnalysisMode });\n\t\t}\n\t};\n\n\tconst handleVoicePress = useCallback(async () => {\n\t\tif (!voiceAvailable) return;\n\t\tif (isRecording) {\n\t\t\tstopRecording();\n\t\t\treturn;\n\t\t}\n\t\tclearTranscript();\n\t\tawait startRecording();\n\t}, [clearTranscript, isRecording, startRecording, stopRecording, voiceAvailable]);\n\n\tconst handleEditMessageDraft = useCallback((messageId: string) => {\n\t\tconst targetMessage = messages.find((message) => message.id === messageId);\n\t\tif (!targetMessage?.content.trim()) return;\n\t\tsetEditingMessageId(messageId);\n\t\tchatInputV2Ref.current?.setDraft(targetMessage.content);\n\t\trequestAnimationFrame(() => {\n\t\t\tmessageListV2Ref.current?.scrollToBottom(\"smooth\");\n\t\t});\n\t}, [messages]);\n\n\tconst handleRetryUserMessage = useCallback((messageId: string) => {\n\t\tif (isWaitingForResponse) return;\n\t\tconst targetMessage = messages.find(\n\t\t\t(message) => message.id === messageId && message.role === \"user\"\n\t\t);\n\t\tif (!targetMessage?.content.trim()) return;\n\t\t// Retry inherits the current mode — if the user flipped to\n\t\t// Deep after seeing an unsatisfying Fast answer, retrying\n\t\t// sends in Deep. Matches how users intuitively expect\n\t\t// \"retry with more depth\" to behave.\n\t\tvoid sendMessage(targetMessage.content.trim(), {\n\t\t\tanalysisMode: effectiveAnalysisMode,\n\t\t});\n\t\tconst bump = () => messageListV2Ref.current?.scrollToBottom(\"instant\");\n\t\trequestAnimationFrame(() => {\n\t\t\tbump();\n\t\t\tqueueMicrotask(() => {\n\t\t\t\twindow.setTimeout(bump, 120);\n\t\t\t});\n\t\t});\n\t}, [isWaitingForResponse, messages, sendMessage, effectiveAnalysisMode]);\n\n\tconst handleClearEditing = useCallback(() => {\n\t\tsetEditingMessageId(null);\n\t}, []);\n\n\treturn (\n\t\t<PaymanChatContext.Provider value={contextValue}>\n\t\t\t<div\n\t\t\t\tclassName={cn(\"payman-v2-root\", className)}\n\t\t\t\tstyle={style}\n\t\t\t>\n\t\t\t\t{children}\n\n\t\t\t\t\t{isChatDisabled ? (\n\t\t\t\t\t\tdisabledComponent || (\n\t\t\t\t\t\t\t<div style={{ flex: 1, display: \"flex\", alignItems: \"center\", justifyContent: \"center\", padding: \"1rem\" }}>\n\t\t\t\t\t\t\t\t<div style={{ textAlign: \"center\", color: \"var(--payman-v2-text-3)\", fontSize: \"0.875rem\" }}>\n\t\t\t\t\t\t\t\t\tChat is currently disabled\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<AnimatePresence mode=\"wait\">\n\t\t\t\t\t\t\t{isEmpty && !hasEverSentMessage ? (\n\t\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\t\tkey=\"v2-empty\"\n\t\t\t\t\t\t\t\t\tinitial={{ opacity: 1 }}\n\t\t\t\t\t\t\t\t\texit={{ opacity: 0 }}\n\t\t\t\t\t\t\t\t\ttransition={{ duration: 0.3 }}\n\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-chat-layout\"\n\t\t\t\t\t\t\t\t\tstyle={{ justifyContent: \"center\", alignItems: \"center\" }}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<div style={{ display: \"flex\", flexDirection: \"column\", alignItems: \"center\", justifyContent: \"center\", flex: 1, width: \"100%\" }}>\n\t\t\t\t\t\t\t\t\t\t<MessageList\n\t\t\t\t\t\t\t\t\t\t\tmessages={messages}\n\t\t\t\t\t\t\t\t\t\t\tisLoading={false}\n\t\t\t\t\t\t\t\t\t\t\temptyStateText={emptyStateText}\n\t\t\t\t\t\t\t\t\t\t\tshowEmptyStateIcon={showEmptyStateIcon}\n\t\t\t\t\t\t\t\t\t\t\temptyStateComponent={emptyStateComponent}\n\t\t\t\t\t\t\t\t\t\t\tlayout={layout}\n\t\t\t\t\t\t\t\t\t\t\tshowTimestamps={showTimestamps}\n\t\t\t\t\t\t\t\t\t\t\tstage={config.stage || \"DEVELOPMENT\"}\n\t\t\t\t\t\t\t\t\t\t\tanimated={animated}\n\t\t\t\t\t\t\t\t\t\t\tshowAgentName={showAgentName}\n\t\t\t\t\t\t\t\t\t\t\tagentName={agentName}\n\t\t\t\t\t\t\t\t\t\t\tshowAvatars={showAvatars}\n\t\t\t\t\t\t\t\t\t\t\tshowUserAvatar={showUserAvatar}\n\t\t\t\t\t\t\t\t\t\t\tshowAssistantAvatar={showAssistantAvatar}\n\t\t\t\t\t\t\t\t\t\t\tshowExecutionSteps={showExecutionSteps}\n\t\t\t\t\t\t\t\t\t\t\tshowStreamingDot={showStreamingDot}\n\t\t\t\t\t\t\t\t\t\t\tstreamingStepsText={streamingStepsText}\n\t\t\t\t\t\t\t\t\t\t\tcompletedStepsText={completedStepsText}\n\t\t\t\t\t\t\t\t\t\t\tonExecutionTraceClick={onExecutionTraceClick}\n\t\t\t\t\t\t\t\t\t\t\tonLoadMoreMessages={onLoadMoreMessages}\n\t\t\t\t\t\t\t\t\t\t\tisLoadingMoreMessages={isLoadingMoreMessages}\n\t\t\t\t\t\t\t\t\t\t\thasMoreMessages={hasMoreMessages}\n\t\t\t\t\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\t\t\t\tinitial={{ opacity: 0, y: 12 }}\n\t\t\t\t\t\t\t\t\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\t\t\t\t\t\t\t\t\ttransition={{ delay: 0.2, duration: 0.4, ease: [0.25, 0.46, 0.45, 0.94] }}\n\t\t\t\t\t\t\t\t\t\t\tstyle={{ width: \"100%\" }}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{hasAskPermission && (\n\t\t\t\t\t\t\t\t\t\t\t\t<ChatInputV2\n\t\t\t\t\t\t\t\t\t\t\t\t\tref={chatInputV2Ref}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonSend={handleV2Send}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonCancel={cancelStream}\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={isV2InputDisabled}\n\t\t\t\t\t\t\t\t\t\t\t\t\tisStreaming={isWaitingForResponse}\n\t\t\t\t\t\t\t\t\t\t\t\t\tplaceholder={isRecording ? \"Listening...\" : placeholder}\n\t\t\t\t\t\t\t\t\t\t\t\t\tenableVoice={config.enableVoice === true}\n\t\t\t\t\t\t\t\t\t\t\t\t\ttranscribedText={\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tconfig.enableVoice === true ? transcribedText : \"\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tvoiceAvailable={config.enableVoice === true && voiceAvailable}\n\t\t\t\t\t\t\t\t\t\t\t\t\tisRecording={isRecording}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonVoicePress={\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tconfig.enableVoice === true\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? handleVoicePress\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonCancelRecording={handleCancelRecording}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonConfirmRecording={handleConfirmRecording}\n\t\t\t\t\t\t\t\t\t\t\t\t\tshowResetSession={showResetSession}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonResetSession={requestResetSession}\n\t\t\t\t\t\t\t\t\t\t\t\t\tshowAttachmentButton={showAttachmentButton}\n\t\t\t\t\t\t\t\t\t\t\t\t\tshowUploadImageButton={showUploadImageButton}\n\t\t\t\t\t\t\t\t\t\t\t\t\tshowAttachFileButton={showAttachFileButton}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonUploadImageClick={onUploadImageClick}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonAttachFileClick={onAttachFileClick}\n\t\t\t\t\t\t\t\t\t\t\t\t\teditingMessageId={editingMessageId}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClearEditing={handleClearEditing}\n\t\t\t\t\t\t\t\t\t\t\t\t\tanalysisMode={\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tenableDeepModeToggle ? analysisMode : undefined\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonAnalysisModeChange={\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tenableDeepModeToggle ? setAnalysisMode : undefined\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tslashCommands={slashCommands}\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\t\tkey=\"v2-chat\"\n\t\t\t\t\t\t\t\t\tinitial={hasEverSentMessage ? { opacity: 0 } : false}\n\t\t\t\t\t\t\t\t\tanimate={{ opacity: 1 }}\n\t\t\t\t\t\t\t\t\ttransition={{ duration: 0.3 }}\n\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-chat-layout\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<MessageListV2\n\t\t\t\t\t\t\t\t\t\tref={messageListV2Ref}\n\t\t\t\t\t\t\t\t\t\tmessages={messages}\n\t\t\t\t\t\t\t\t\t\tisStreaming={isWaitingForResponse}\n\t\t\t\t\t\t\t\t\t\tonEditUserMessage={handleEditMessageDraft}\n\t\t\t\t\t\t\t\t\t\tonRetryUserMessage={handleRetryUserMessage}\n\t\t\t\t\t\t\t\t\t\tonImageClick={handleImageClick}\n\t\t\t\t\t\t\t\t\t\tonExecutionTraceClick={onExecutionTraceClick}\n\t\t\t\t\t\t\t\t\t\tmessageActions={messageActions}\n\t\t\t\t\t\t\t\t\t\tretryDisabled={isWaitingForResponse}\n\t\t\t\t\t\t\t\t\t\ttypingSpeed={config.typingSpeed ?? 4}\n\t\t\t\t\t\t\t\t\t\tuserAction={v2UserAction}\n\t\t\t\t\t\t\t\t\t\tonApproveAction={\n\t\t\t\t\t\t\t\t\t\t\tisUserActionSupported\n\t\t\t\t\t\t\t\t\t\t\t\t? async (_msgId: string, otp: string) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tawait approveUserAction(otp);\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tonRejectAction={\n\t\t\t\t\t\t\t\t\t\t\tisUserActionSupported\n\t\t\t\t\t\t\t\t\t\t\t\t? async () => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tawait rejectUserAction();\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tonResendAction={\n\t\t\t\t\t\t\t\t\t\t\tisUserActionSupported\n\t\t\t\t\t\t\t\t\t\t\t\t? async () => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tawait resendOtp();\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tonSubmitFeedback={handleSubmitFeedback}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<StreamingIndicatorV2\n\t\t\t\t\t\t\t\t\t\tisStreaming={isWaitingForResponse}\n\t\t\t\t\t\t\t\t\t\tloadingAnimation={config.loadingAnimation}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t{hasAskPermission && (\n\t\t\t\t\t\t\t\t\t\t<ChatInputV2\n\t\t\t\t\t\t\t\t\t\t\tref={chatInputV2Ref}\n\t\t\t\t\t\t\t\t\t\t\tonSend={handleV2Send}\n\t\t\t\t\t\t\t\t\t\t\tonCancel={cancelStream}\n\t\t\t\t\t\t\t\t\t\t\tdisabled={isV2InputDisabled}\n\t\t\t\t\t\t\t\t\t\t\tisStreaming={isWaitingForResponse}\n\t\t\t\t\t\t\t\t\t\t\tplaceholder={isRecording ? \"Listening...\" : placeholder}\n\t\t\t\t\t\t\t\t\t\t\tenableVoice={config.enableVoice === true}\n\t\t\t\t\t\t\t\t\t\t\ttranscribedText={\n\t\t\t\t\t\t\t\t\t\t\t\tconfig.enableVoice === true ? transcribedText : \"\"\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tvoiceAvailable={config.enableVoice === true && voiceAvailable}\n\t\t\t\t\t\t\t\t\t\t\tisRecording={isRecording}\n\t\t\t\t\t\t\t\t\t\t\tonVoicePress={\n\t\t\t\t\t\t\t\t\t\t\t\tconfig.enableVoice === true\n\t\t\t\t\t\t\t\t\t\t\t\t\t? handleVoicePress\n\t\t\t\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tonCancelRecording={handleCancelRecording}\n\t\t\t\t\t\t\t\t\t\t\tonConfirmRecording={handleConfirmRecording}\n\t\t\t\t\t\t\t\t\t\t\tshowResetSession={showResetSession}\n\t\t\t\t\t\t\t\t\t\t\tonResetSession={requestResetSession}\n\t\t\t\t\t\t\t\t\t\t\tshowAttachmentButton={showAttachmentButton}\n\t\t\t\t\t\t\t\t\t\t\tshowUploadImageButton={showUploadImageButton}\n\t\t\t\t\t\t\t\t\t\t\tshowAttachFileButton={showAttachFileButton}\n\t\t\t\t\t\t\t\t\t\t\tonUploadImageClick={onUploadImageClick}\n\t\t\t\t\t\t\t\t\t\t\tonAttachFileClick={onAttachFileClick}\n\t\t\t\t\t\t\t\t\t\t\teditingMessageId={editingMessageId}\n\t\t\t\t\t\t\t\t\t\t\tonClearEditing={handleClearEditing}\n\t\t\t\t\t\t\t\t\t\t\tanalysisMode={\n\t\t\t\t\t\t\t\t\t\t\t\tenableDeepModeToggle ? analysisMode : undefined\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tonAnalysisModeChange={\n\t\t\t\t\t\t\t\t\t\t\t\tenableDeepModeToggle ? setAnalysisMode : undefined\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tslashCommands={slashCommands}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</AnimatePresence>\n\t\t\t\t\t)}\n\n\t\t\t\t\t<ImageLightboxV2\n\t\t\t\t\t\tsrc={lightboxSrc}\n\t\t\t\t\t\talt={lightboxAlt}\n\t\t\t\t\t\tonClose={() => setLightboxSrc(null)}\n\t\t\t\t\t/>\n\t\t\t\t\t<ResetSessionConfirmModal\n\t\t\t\t\t\tisOpen={isResetSessionConfirmOpen}\n\t\t\t\t\t\tonClose={closeResetSessionConfirm}\n\t\t\t\t\t\tonConfirm={performResetSession}\n\t\t\t\t\t/>\n\t\t\t\t\t{config.debug && (\n\t\t\t\t\t\t<TraceTimelineModal\n\t\t\t\t\t\t\topen={debugTraceExecutionId !== null}\n\t\t\t\t\t\t\tonClose={() => setDebugTraceExecutionId(null)}\n\t\t\t\t\t\t\texecutionId={debugTraceExecutionId}\n\t\t\t\t\t\t\tapiBaseUrl={config.api.baseUrl}\n\t\t\t\t\t\t\tapiHeaders={config.api.headers}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</PaymanChatContext.Provider>\n\t\t);\n});\n\n/**\n * PaymanChat — the public component. Delegates to `PaymanChatInner`\n * with a chat hook instance from `useChatV2`. The `config.uiVersion`\n * prop used to gate an older V1 render path; the V1 code has been\n * removed since nothing in the SDK's current consumers (paygent-studio\n * etc.) opted into it. The `uiVersion` prop is still accepted on\n * `ChatConfig` for type compatibility but is now ignored at runtime.\n */\nexport const PaymanChat = forwardRef<PaymanChatRef, PaymanChatProps>(\n\tfunction PaymanChat(props, ref) {\n\t\tconst mergedCallbacks = useSentryChatCallbacks(props.callbacks, props.config);\n\t\tconst chat = useChatV2(props.config, mergedCallbacks);\n\t\treturn <PaymanChatInner {...props} chat={chat} ref={ref} />;\n\t},\n);\n"]}