@agent-native/core 0.12.27 → 0.12.30

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.
Files changed (69) hide show
  1. package/dist/agent/engine/builder-engine.d.ts +1 -1
  2. package/dist/agent/engine/builder-engine.d.ts.map +1 -1
  3. package/dist/agent/index.d.ts +1 -1
  4. package/dist/agent/index.d.ts.map +1 -1
  5. package/dist/agent/index.js.map +1 -1
  6. package/dist/agent/model-config.d.ts +3 -3
  7. package/dist/agent/model-config.d.ts.map +1 -1
  8. package/dist/agent/model-config.js +5 -4
  9. package/dist/agent/model-config.js.map +1 -1
  10. package/dist/agent/production-agent.d.ts +25 -1
  11. package/dist/agent/production-agent.d.ts.map +1 -1
  12. package/dist/agent/production-agent.js +47 -7
  13. package/dist/agent/production-agent.js.map +1 -1
  14. package/dist/application-state/emitter.d.ts +3 -2
  15. package/dist/application-state/emitter.d.ts.map +1 -1
  16. package/dist/application-state/emitter.js +4 -2
  17. package/dist/application-state/emitter.js.map +1 -1
  18. package/dist/application-state/store.js +3 -3
  19. package/dist/application-state/store.js.map +1 -1
  20. package/dist/client/AgentPanel.d.ts.map +1 -1
  21. package/dist/client/AgentPanel.js +0 -1
  22. package/dist/client/AgentPanel.js.map +1 -1
  23. package/dist/client/AssistantChat.d.ts.map +1 -1
  24. package/dist/client/AssistantChat.js +45 -7
  25. package/dist/client/AssistantChat.js.map +1 -1
  26. package/dist/client/MultiTabAssistantChat.js.map +1 -1
  27. package/dist/client/agent-chat-adapter.d.ts.map +1 -1
  28. package/dist/client/agent-chat-adapter.js +12 -5
  29. package/dist/client/agent-chat-adapter.js.map +1 -1
  30. package/dist/client/use-chat-models.js.map +1 -1
  31. package/dist/client/use-db-sync.d.ts +4 -0
  32. package/dist/client/use-db-sync.d.ts.map +1 -1
  33. package/dist/client/use-db-sync.js +38 -13
  34. package/dist/client/use-db-sync.js.map +1 -1
  35. package/dist/client/use-pausing-interval.d.ts.map +1 -1
  36. package/dist/client/use-pausing-interval.js +5 -2
  37. package/dist/client/use-pausing-interval.js.map +1 -1
  38. package/dist/collab/client.d.ts +2 -0
  39. package/dist/collab/client.d.ts.map +1 -1
  40. package/dist/collab/client.js +37 -4
  41. package/dist/collab/client.js.map +1 -1
  42. package/dist/index.d.ts +1 -1
  43. package/dist/index.d.ts.map +1 -1
  44. package/dist/index.js.map +1 -1
  45. package/dist/server/agent-chat-plugin.d.ts +25 -1
  46. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  47. package/dist/server/agent-chat-plugin.js +3 -0
  48. package/dist/server/agent-chat-plugin.js.map +1 -1
  49. package/dist/server/auth.d.ts.map +1 -1
  50. package/dist/server/auth.js +83 -2
  51. package/dist/server/auth.js.map +1 -1
  52. package/dist/server/google-auth-plugin.d.ts.map +1 -1
  53. package/dist/server/google-auth-plugin.js +50 -3
  54. package/dist/server/google-auth-plugin.js.map +1 -1
  55. package/dist/server/google-oauth.d.ts.map +1 -1
  56. package/dist/server/google-oauth.js +10 -4
  57. package/dist/server/google-oauth.js.map +1 -1
  58. package/dist/server/index.d.ts +1 -1
  59. package/dist/server/index.d.ts.map +1 -1
  60. package/dist/server/index.js.map +1 -1
  61. package/dist/server/onboarding-html.d.ts.map +1 -1
  62. package/dist/server/onboarding-html.js +50 -3
  63. package/dist/server/onboarding-html.js.map +1 -1
  64. package/dist/server/poll.d.ts.map +1 -1
  65. package/dist/server/poll.js +15 -0
  66. package/dist/server/poll.js.map +1 -1
  67. package/dist/templates/default/app/hooks/use-navigation-state.ts +0 -1
  68. package/package.json +1 -1
  69. package/src/templates/default/app/hooks/use-navigation-state.ts +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"agent-chat-adapter.js","sourceRoot":"","sources":["../../src/client/agent-chat-adapter.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ChatModelAdapter, ChatModelRunResult } from \"@assistant-ui/react\";\nimport {\n setActiveRun,\n updateActiveRunSeq,\n clearActiveRun,\n} from \"./active-run-state.js\";\nimport {\n AgentAutoContinueSignal,\n type ContentPart,\n readSSEStream,\n} from \"./sse-event-processor.js\";\nimport { agentNativePath } from \"./api-path.js\";\nimport { formatChatErrorText, normalizeChatError } from \"./error-format.js\";\nimport { captureError } from \"./analytics.js\";\nimport { unwrapAttachmentEnvelope } from \"./composer/pasted-text.js\";\nimport type { ReasoningEffort } from \"../shared/reasoning-effort.js\";\nimport type {\n AgentChatStructuredContentPart,\n AgentChatStructuredMessage,\n} from \"../agent/types.js\";\n\ntype AdapterHistoryMessage = {\n role: \"user\" | \"assistant\";\n content: string;\n};\n\ntype AssistantUiAttachment = {\n name: string;\n contentType?: string;\n content: readonly Record<string, unknown>[];\n};\n\ntype AgentChatAdapterAttachment = {\n type: string;\n name: string;\n contentType?: string;\n data?: string;\n text?: string;\n};\n\nconst TEXT_ATTACHMENT_CONTENT_TYPES = new Set([\n \"application/json\",\n \"application/x-ndjson\",\n \"text/csv\",\n \"text/css\",\n \"text/html\",\n \"text/json\",\n \"text/markdown\",\n \"text/plain\",\n \"text/xml\",\n]);\n\nconst AUTO_CONTINUE_PROMPT =\n \"Continue from where you left off and finish the user's original request. Do not repeat completed work, do not mention internal reconnects, time limits, or step limits, and continue as if this is the same uninterrupted run.\";\nconst MAX_RECONNECT_ATTEMPTS = 5;\nconst MAX_STARTUP_RECOVERY_ATTEMPTS = 8;\nconst MAX_STALE_RUN_CONTINUATIONS = 3;\nconst MAX_STALLED_TRANSIENT_CONTINUATIONS = 8;\nconst MAX_TOTAL_TRANSIENT_CONTINUATIONS = 32;\nconst RETRY_BASE_DELAY_MS = 500;\nconst RETRY_MAX_DELAY_MS = 8_000;\nconst MAX_HISTORY_ATTACHMENT_CHARS = 60_000;\n\nfunction normalizeMentions(text: string): string {\n return text.replace(/@\\[([^\\]|]+)\\|[^\\]]+\\]/g, \"@$1\");\n}\n\nfunction truncateForContinuation(value: string, maxChars: number): string {\n if (value.length <= maxChars) return value;\n return `${value.slice(0, maxChars)}\\n\\n...[truncated ${value.length - maxChars} chars from prior partial output]`;\n}\n\nfunction contentToContinuationHistory(content: ContentPart[]): string {\n const chunks: string[] = [];\n for (const part of content) {\n if (part.type === \"text\") {\n if (part.text.trim()) chunks.push(part.text.trim());\n continue;\n }\n const toolSummary = [\n `Tool: ${part.toolName}`,\n part.argsText ? `Input: ${part.argsText}` : \"\",\n part.result\n ? `Result:\\n${truncateForContinuation(part.result, 8_000)}`\n : \"Result: interrupted before this tool returned a result\",\n ]\n .filter(Boolean)\n .join(\"\\n\");\n chunks.push(toolSummary);\n }\n return truncateForContinuation(chunks.join(\"\\n\\n\"), 40_000).trim();\n}\n\nfunction messageTextFromContent(\n content: readonly { type: string; text?: string }[],\n): string {\n return content\n .filter((p): p is { type: \"text\"; text: string } => p.type === \"text\")\n .map((p) => normalizeMentions(p.text))\n .join(\"\\n\");\n}\n\nfunction escapeAttachmentAttribute(value: string): string {\n return value\n .replace(/&/g, \"&amp;\")\n .replace(/\"/g, \"&quot;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\");\n}\n\nfunction isTextAttachmentContentType(value: string | undefined): boolean {\n if (!value) return false;\n const contentType = value.split(\";\")[0]?.trim().toLowerCase();\n return (\n !!contentType &&\n (contentType.startsWith(\"text/\") ||\n TEXT_ATTACHMENT_CONTENT_TYPES.has(contentType))\n );\n}\n\nfunction decodeTextDataUrl(dataUrl: string): string | null {\n const match = dataUrl.match(\n /^data:([^;,]+)(?:;charset=[^;,]+)?(;base64)?,(.*)$/i,\n );\n if (!match || !isTextAttachmentContentType(match[1])) return null;\n\n try {\n const payload = match[3] ?? \"\";\n if (match[2]) {\n if (typeof atob === \"function\") {\n return decodeURIComponent(\n Array.from(\n atob(payload),\n (char) => `%${char.charCodeAt(0).toString(16).padStart(2, \"0\")}`,\n ).join(\"\"),\n );\n }\n return null;\n }\n return decodeURIComponent(payload.replace(/\\+/g, \"%20\"));\n } catch {\n return null;\n }\n}\n\nfunction extractAttachmentsFromMessage(message: {\n attachments?: readonly AssistantUiAttachment[];\n}): AgentChatAdapterAttachment[] {\n const attachments: AgentChatAdapterAttachment[] = [];\n for (const att of message.attachments ?? []) {\n for (const part of att.content) {\n if (part.type === \"image\" && typeof part.image === \"string\") {\n attachments.push({\n type: \"image\",\n name: att.name,\n contentType: att.contentType,\n data: part.image,\n });\n } else if (part.type === \"file\" && typeof part.data === \"string\") {\n const contentType =\n att.contentType ??\n (typeof part.mimeType === \"string\" ? part.mimeType : undefined);\n const decodedText = part.data.startsWith(\"data:\")\n ? decodeTextDataUrl(part.data)\n : null;\n attachments.push({\n type: \"file\",\n name: att.name,\n contentType,\n ...(decodedText !== null\n ? { text: truncateOutboundAttachment(decodedText) }\n : part.data.startsWith(\"data:\")\n ? { data: part.data }\n : { text: truncateOutboundAttachment(part.data) }),\n });\n } else if (part.type === \"text\" && typeof part.text === \"string\") {\n attachments.push({\n type: \"file\",\n name: att.name,\n contentType: att.contentType,\n text: truncateOutboundAttachment(unwrapAttachmentEnvelope(part.text)),\n });\n }\n }\n }\n return attachments;\n}\n\nfunction truncateHistoryAttachment(text: string): string {\n if (text.length <= MAX_HISTORY_ATTACHMENT_CHARS) return text;\n const omitted = text.length - MAX_HISTORY_ATTACHMENT_CHARS;\n return `${text.slice(0, MAX_HISTORY_ATTACHMENT_CHARS)}\\n\\n[Attachment truncated after ${MAX_HISTORY_ATTACHMENT_CHARS.toLocaleString()} characters; ${omitted.toLocaleString()} characters omitted from prior chat history.]`;\n}\n\nfunction truncateOutboundAttachment(text: string): string {\n if (text.length <= MAX_HISTORY_ATTACHMENT_CHARS) return text;\n const omitted = text.length - MAX_HISTORY_ATTACHMENT_CHARS;\n return `${text.slice(0, MAX_HISTORY_ATTACHMENT_CHARS)}\\n\\n[Attachment truncated after ${MAX_HISTORY_ATTACHMENT_CHARS.toLocaleString()} characters; ${omitted.toLocaleString()} characters omitted from the submitted attachment.]`;\n}\n\nfunction attachmentHistoryText(\n attachment: AgentChatAdapterAttachment,\n): string | null {\n if (typeof attachment.text === \"string\" && attachment.text.length > 0) {\n const attrs = [\n `name=\"${escapeAttachmentAttribute(attachment.name || \"attachment\")}\"`,\n attachment.contentType\n ? `contentType=\"${escapeAttachmentAttribute(attachment.contentType)}\"`\n : null,\n attachment.type\n ? `type=\"${escapeAttachmentAttribute(attachment.type)}\"`\n : null,\n ].filter(Boolean);\n return `<attachment ${attrs.join(\" \")}>\\n${truncateHistoryAttachment(attachment.text)}\\n</attachment>`;\n }\n\n if (attachment.name) {\n return `[Attached ${attachment.type || \"file\"}: ${attachment.name}${attachment.contentType ? ` (${attachment.contentType})` : \"\"}]`;\n }\n return null;\n}\n\nfunction messageTextForHistory(message: {\n content: readonly { type: string; text?: string }[];\n attachments?: readonly AssistantUiAttachment[];\n}): string {\n const text = messageTextFromContent(message.content);\n const attachments = extractAttachmentsFromMessage(message)\n .map(attachmentHistoryText)\n .filter((part): part is string => !!part && part.trim().length > 0);\n return [text, ...attachments].filter((part) => part.trim()).join(\"\\n\\n\");\n}\n\nfunction isToolCallContentPart(\n part: unknown,\n): part is Extract<ContentPart, { type: \"tool-call\" }> {\n return Boolean(\n part && typeof part === \"object\" && (part as any).type === \"tool-call\",\n );\n}\n\nfunction toolResultContent(result: unknown): string {\n if (typeof result === \"string\") return result;\n try {\n return JSON.stringify(result);\n } catch {\n return String(result ?? \"\");\n }\n}\n\nfunction contentToStructuredMessages(\n content: readonly ContentPart[],\n nextToolCallId: () => string,\n): AgentChatStructuredMessage[] {\n const messages: AgentChatStructuredMessage[] = [];\n let assistantParts: AgentChatStructuredContentPart[] = [];\n let pendingToolResults: AgentChatStructuredContentPart[] = [];\n\n const flushToolTurn = () => {\n if (pendingToolResults.length === 0) return;\n if (assistantParts.length > 0) {\n messages.push({ role: \"assistant\", content: assistantParts });\n }\n messages.push({ role: \"user\", content: pendingToolResults });\n assistantParts = [];\n pendingToolResults = [];\n };\n\n for (const part of content) {\n if (part.type === \"text\") {\n if (pendingToolResults.length > 0) flushToolTurn();\n if (part.text.trim()) {\n assistantParts.push({ type: \"text\", text: part.text });\n }\n continue;\n }\n\n if (isToolCallContentPart(part)) {\n const toolCallId = nextToolCallId();\n assistantParts.push({\n type: \"tool-call\",\n toolCallId,\n toolName: part.toolName,\n args: part.args ?? {},\n });\n if (part.result !== undefined) {\n pendingToolResults.push({\n type: \"tool-result\",\n toolCallId,\n toolName: part.toolName,\n content: toolResultContent(part.result),\n });\n }\n }\n }\n\n flushToolTurn();\n if (assistantParts.length > 0) {\n messages.push({ role: \"assistant\", content: assistantParts });\n }\n return messages;\n}\n\nfunction assistantUiMessagesToStructuredHistory(\n messages: readonly {\n role: string;\n content: readonly any[];\n attachments?: readonly AssistantUiAttachment[];\n }[],\n): AgentChatStructuredMessage[] {\n let nextId = 0;\n const nextToolCallId = () => `history_tc_${++nextId}`;\n const structured: AgentChatStructuredMessage[] = [];\n\n for (const message of messages) {\n if (message.role === \"user\") {\n const text = messageTextForHistory(message);\n if (text.trim()) {\n structured.push({\n role: \"user\",\n content: [{ type: \"text\", text }],\n });\n }\n continue;\n }\n\n if (message.role !== \"assistant\") continue;\n const content: ContentPart[] = [];\n for (const part of message.content) {\n if (part?.type === \"text\" && typeof part.text === \"string\") {\n content.push({ type: \"text\", text: part.text });\n continue;\n }\n if (part?.type === \"tool-call\") {\n content.push({\n type: \"tool-call\",\n toolCallId:\n typeof part.toolCallId === \"string\" ? part.toolCallId : \"\",\n toolName:\n typeof part.toolName === \"string\"\n ? part.toolName\n : typeof part.toolName === \"undefined\"\n ? \"unknown\"\n : String(part.toolName),\n argsText:\n typeof part.argsText === \"string\"\n ? part.argsText\n : JSON.stringify(part.args ?? {}),\n args:\n part.args &&\n typeof part.args === \"object\" &&\n !Array.isArray(part.args)\n ? part.args\n : {},\n ...(part.result !== undefined\n ? { result: toolResultContent(part.result) }\n : {}),\n });\n }\n }\n structured.push(...contentToStructuredMessages(content, nextToolCallId));\n }\n\n return structured;\n}\n\nfunction combineContinuationHistory(fragments: string[]): string {\n return truncateForContinuation(\n fragments.filter(Boolean).join(\"\\n\\n\"),\n 40_000,\n ).trim();\n}\n\nfunction visibleTransientContinuationContent(\n content: ContentPart[],\n): ContentPart[] {\n return content.filter(\n (part) => part.type === \"tool-call\" && part.result !== undefined,\n );\n}\n\nfunction hasContinuationProgress(content: ContentPart[]): boolean {\n return content.some((part) =>\n part.type === \"text\"\n ? part.text.trim().length > 0\n : part.result !== undefined,\n );\n}\n\nfunction snapshotContent(content: ContentPart[]): ContentPart[] {\n return content.map((part) =>\n part.type === \"text\" ? { ...part } : { ...part, args: { ...part.args } },\n );\n}\n\nfunction autoContinueMessage(signal: AgentAutoContinueSignal): string {\n const reason =\n signal.reason === \"loop_limit\"\n ? \"The previous run reached an internal step budget.\"\n : signal.reason === \"stale_run\"\n ? \"The previous run stopped unexpectedly in the server runtime before it could finish.\"\n : signal.reason === \"no_progress\"\n ? \"The previous run stopped producing progress events while the connection stayed open.\"\n : signal.reason === \"stream_ended\"\n ? \"The previous stream ended before the agent sent a final completion signal.\"\n : \"The previous run reached an internal execution budget.\";\n return `${AUTO_CONTINUE_PROMPT}\\n\\nInternal note: ${reason}`;\n}\n\nfunction delay(ms: number, abortSignal: AbortSignal): Promise<void> {\n if (abortSignal.aborted) return Promise.resolve();\n return new Promise((resolve) => {\n const timer = setTimeout(resolve, ms);\n abortSignal.addEventListener(\n \"abort\",\n () => {\n clearTimeout(timer);\n resolve();\n },\n { once: true },\n );\n });\n}\n\nfunction retryDelay(attempt: number, abortSignal: AbortSignal): Promise<void> {\n const base = Math.min(\n RETRY_MAX_DELAY_MS,\n RETRY_BASE_DELAY_MS * Math.pow(2, attempt),\n );\n const jitter = base * 0.2;\n const ms = Math.max(0, base + (Math.random() * 2 - 1) * jitter);\n return delay(ms, abortSignal);\n}\n\nfunction isRetryableStartupError(message: string): boolean {\n const msg = message.toLowerCase();\n if (\n msg.includes(\"unauthorized\") ||\n msg.includes(\"not authenticated\") ||\n msg.includes(\"401\") ||\n msg.includes(\"403\") ||\n msg.includes(\"404\") ||\n msg.includes(\"405\") ||\n msg.includes(\"missing api key\") ||\n msg.includes(\"api key\") ||\n msg.includes(\"context_length\") ||\n msg.includes(\"input_too_long\") ||\n msg.includes(\"too many tokens\") ||\n msg.includes(\"prompt is too long\") ||\n msg.includes(\"credits-limit\") ||\n msg.includes(\"billing\") ||\n msg.includes(\"permission\")\n ) {\n return false;\n }\n return (\n msg.includes(\"failed to fetch\") ||\n msg.includes(\"network\") ||\n msg.includes(\"connection\") ||\n msg.includes(\"reset\") ||\n msg.includes(\"econnreset\") ||\n msg.includes(\"socket\") ||\n msg.includes(\"timeout\") ||\n msg.includes(\"gateway timeout\") ||\n msg.includes(\"inactivity timeout\") ||\n msg.includes(\"temporarily unavailable\") ||\n msg.includes(\"server error: 408\") ||\n msg.includes(\"server error: 429\") ||\n msg.includes(\"server error: 500\") ||\n msg.includes(\"server error: 502\") ||\n msg.includes(\"server error: 503\") ||\n msg.includes(\"server error: 504\") ||\n msg.includes(\"429\") ||\n msg.includes(\"500\") ||\n msg.includes(\"502\") ||\n msg.includes(\"503\") ||\n msg.includes(\"504\") ||\n msg.includes(\"529\")\n );\n}\n\nfunction isAuthErrorMessage(message: string): boolean {\n const msg = message.toLowerCase();\n return (\n msg.includes(\"authentication required\") ||\n msg.includes(\"unauthorized\") ||\n msg.includes(\"not authenticated\") ||\n msg.includes(\"forbidden\") ||\n msg.includes(\"invalid token\") ||\n msg.includes(\"invalid or expired token\") ||\n msg.includes(\"session expired\") ||\n msg.includes(\"http_401\") ||\n msg.includes(\"http_403\") ||\n msg.includes(\"401\") ||\n msg.includes(\"403\") ||\n msg.includes(\"405\")\n );\n}\n\nfunction authErrorReasonFromMessage(\n message: string,\n): \"auth-required\" | \"session-expired\" {\n const msg = message.toLowerCase();\n return msg.includes(\"session\") ||\n msg.includes(\"expired\") ||\n msg.includes(\"invalid token\") ||\n msg.includes(\"405\")\n ? \"session-expired\"\n : \"auth-required\";\n}\n\nfunction authErrorText(\n reason: \"auth-required\" | \"session-expired\",\n message?: string,\n): string {\n const fallback =\n reason === \"session-expired\"\n ? \"Your chat session expired. Refresh chat and sign in again to continue.\"\n : \"Authentication required. Sign in again to use chat.\";\n\n if (!message) return formatChatErrorText(fallback);\n\n try {\n const parsed = JSON.parse(message) as {\n error?: unknown;\n message?: unknown;\n };\n const raw =\n typeof parsed.error === \"string\"\n ? parsed.error\n : typeof parsed.message === \"string\"\n ? parsed.message\n : undefined;\n return formatChatErrorText(raw || fallback);\n } catch {\n return formatChatErrorText(message || fallback);\n }\n}\n\nfunction safeAgentNativePath(path: string): string {\n try {\n return agentNativePath(path);\n } catch {\n return path;\n }\n}\n\nfunction isMissingCredentialMessage(message: string): boolean {\n const msg = message.toLowerCase();\n return (\n msg.includes(\"apikey\") ||\n msg.includes(\"authtoken\") ||\n msg.includes(\"anthropic_api_key\") ||\n msg.includes(\"missing_api_key\") ||\n msg.includes(\"missing api key\") ||\n msg.includes(\"missing credentials\") ||\n msg.includes(\"no llm provider\") ||\n msg.includes(\"llm provider is connected\")\n );\n}\n\nfunction missingCredentialErrorText(message: string): string {\n try {\n const parsed = JSON.parse(message) as {\n error?: unknown;\n message?: unknown;\n upgradeUrl?: unknown;\n errorCode?: unknown;\n };\n const raw =\n typeof parsed.error === \"string\"\n ? parsed.error\n : typeof parsed.message === \"string\"\n ? parsed.message\n : message;\n return formatChatErrorText(\n raw,\n typeof parsed.upgradeUrl === \"string\" ? parsed.upgradeUrl : undefined,\n typeof parsed.errorCode === \"string\" ? parsed.errorCode : undefined,\n );\n } catch {\n return formatChatErrorText(message);\n }\n}\n\n/**\n * The composer's exec mode is sent as explicit request metadata. The server\n * owns the plan-mode prompt and read-only tool filtering so the chat history\n * stays clean and Plan mode is enforced outside the model's goodwill.\n */\n/**\n * Creates a ChatModelAdapter that connects to the agent-native\n * `/_agent-native/agent-chat` SSE endpoint. Supports reconnection via run-manager.\n */\nexport function createAgentChatAdapter(options?: {\n apiUrl?: string;\n tabId?: string;\n threadId?: string;\n modelRef?: { current: string | undefined };\n engineRef?: { current: string | undefined };\n effortRef?: { current: ReasoningEffort | undefined };\n execModeRef?: { current: \"build\" | \"plan\" | undefined };\n}): ChatModelAdapter {\n const apiUrl =\n options?.apiUrl ?? agentNativePath(\"/_agent-native/agent-chat\");\n const tabId = options?.tabId;\n const threadId = options?.threadId;\n const modelRef = options?.modelRef;\n const engineRef = options?.engineRef;\n const effortRef = options?.effortRef;\n const execModeRef = options?.execModeRef;\n\n return {\n async *run({ messages, abortSignal, runConfig }) {\n // Extract latest user message and build history from prior messages\n let lastUserMsg: (typeof messages)[number] | undefined;\n for (let i = messages.length - 1; i >= 0; i--) {\n if (messages[i].role === \"user\") {\n lastUserMsg = messages[i];\n break;\n }\n }\n const rawMessageText =\n lastUserMsg?.content\n .filter((p): p is { type: \"text\"; text: string } => p.type === \"text\")\n .map((p) => p.text)\n .join(\"\\n\") ?? \"\";\n const requestMode =\n execModeRef?.current === \"plan\"\n ? \"plan\"\n : execModeRef?.current === \"build\"\n ? \"act\"\n : undefined;\n\n // Extract attachments (images as base64, text as content).\n // assistant-ui puts user attachments on msg.attachments (not on content);\n // each attachment carries its own content parts from the adapter.\n const attachments = lastUserMsg\n ? extractAttachmentsFromMessage(lastUserMsg as any)\n : [];\n const userMessageText =\n rawMessageText.trim() || attachments.length === 0\n ? rawMessageText\n : \"Use the attached context.\";\n\n const priorMessages = messages.slice(0, -1); // exclude latest user message\n const history = priorMessages\n .filter((m) => m.role === \"user\" || m.role === \"assistant\")\n .map((m) => ({\n role: m.role as \"user\" | \"assistant\",\n content:\n m.role === \"user\"\n ? messageTextForHistory(m as any)\n : messageTextFromContent(m.content),\n }))\n .filter((m) => m.content.trim());\n const structuredHistory =\n assistantUiMessagesToStructuredHistory(priorMessages);\n\n // Signal that generation is starting\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new CustomEvent(\"agentNative.chatRunning\", {\n detail: { isRunning: true, tabId },\n }),\n );\n }\n\n const content: ContentPart[] = [];\n const toolCallCounter = { value: 0 };\n let runId: string | null = null;\n let lastSeq = -1;\n let currentMessageText = normalizeMentions(userMessageText);\n let currentHistory: AdapterHistoryMessage[] = history;\n let currentStructuredHistory: AgentChatStructuredMessage[] =\n structuredHistory;\n let includeAttachments = attachments.length > 0;\n let includeReferences = Boolean(runConfig?.custom?.references);\n let internalContinuationRequest = false;\n let startupRecoveryAttempts = 0;\n let staleRunContinuationAttempts = 0;\n let stalledTransientContinuationAttempts = 0;\n let totalTransientContinuationAttempts = 0;\n const continuationHistoryFragments: string[] = [];\n const structuredContinuationFragments: AgentChatStructuredMessage[] = [];\n let visibleContinuationPrefix: ContentPart[] = [];\n let lastAutoContinueReason: string | null = null;\n const attemptedRunIds: string[] = [];\n let authRecoveryAttempted = false;\n let continuationToolCallCounter = 0;\n const nextContinuationToolCallId = () =>\n `continuation_tc_${++continuationToolCallCounter}`;\n\n const connectionRecoveryDetails = (): string => {\n return [\n lastAutoContinueReason\n ? `last_auto_continue_reason: ${lastAutoContinueReason}`\n : \"\",\n `stale_run_continuations: ${staleRunContinuationAttempts}`,\n `stalled_transient_continuations: ${stalledTransientContinuationAttempts}`,\n `total_transient_continuations: ${totalTransientContinuationAttempts}`,\n attemptedRunIds.length > 0\n ? `attempted_runs: ${attemptedRunIds.join(\", \")}`\n : \"\",\n ]\n .filter(Boolean)\n .join(\"\\n\");\n };\n\n const dispatchAuthError = (\n reason: \"auth-required\" | \"session-expired\",\n ) => {\n if (typeof window === \"undefined\") return;\n window.dispatchEvent(\n new CustomEvent(\"agent-chat:auth-error\", {\n detail: {\n reason,\n ...(tabId ? { tabId } : {}),\n ...(threadId ? { threadId } : {}),\n },\n }),\n );\n };\n\n const tryRecoverAuthOnce = async (): Promise<boolean> => {\n if (authRecoveryAttempted || abortSignal.aborted) return false;\n authRecoveryAttempted = true;\n try {\n const sessionRes = await fetch(\n safeAgentNativePath(\"/_agent-native/auth/session\"),\n {\n method: \"GET\",\n headers: { Accept: \"application/json\" },\n cache: \"no-store\",\n credentials: \"same-origin\",\n signal: abortSignal,\n },\n );\n if (!sessionRes.ok) return false;\n const session = await sessionRes.json().catch(() => null);\n return Boolean(session && !session.error);\n } catch {\n return false;\n }\n };\n\n const captureChatClientError = (\n error: unknown,\n phase: string,\n extra: Record<string, unknown> = {},\n ) => {\n captureError(error, {\n tags: {\n source: \"agent-chat-client\",\n phase,\n hasThread: threadId ? \"true\" : \"false\",\n hasRun: runId ? \"true\" : \"false\",\n lastAutoContinueReason: lastAutoContinueReason ?? undefined,\n },\n extra: {\n apiUrl,\n tabId,\n threadId,\n runId,\n lastSeq,\n contentParts: content.length,\n attemptedRunIds: [...attemptedRunIds],\n startupRecoveryAttempts,\n staleRunContinuationAttempts,\n stalledTransientContinuationAttempts,\n totalTransientContinuationAttempts,\n ...extra,\n },\n contexts: {\n agentChat: {\n tabId,\n threadId,\n runId,\n lastSeq,\n contentParts: content.length,\n startupRecoveryAttempts,\n staleRunContinuationAttempts,\n stalledTransientContinuationAttempts,\n totalTransientContinuationAttempts,\n },\n },\n });\n };\n\n try {\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n };\n try {\n const tz = Intl.DateTimeFormat().resolvedOptions().timeZone;\n if (tz) headers[\"x-user-timezone\"] = tz;\n } catch {\n // Non-browser or Intl unavailable — tool calls will fall back to UTC.\n }\n\n const reconnectCurrentRun = async function* (): AsyncGenerator<\n ChatModelRunResult,\n boolean,\n unknown\n > {\n if (!runId) return false;\n let lastReconnectError: unknown = null;\n let reconnectErrorCaptured = false;\n for (let attempt = 0; attempt < MAX_RECONNECT_ATTEMPTS; attempt++) {\n try {\n const reconnectRes = await fetch(\n `${apiUrl}/runs/${encodeURIComponent(runId)}/events?after=${lastSeq + 1}`,\n { signal: abortSignal },\n );\n if (!reconnectRes.ok || !reconnectRes.body) {\n lastReconnectError = new Error(\n `Reconnect failed: ${reconnectRes.status}`,\n );\n captureChatClientError(\n lastReconnectError,\n \"reconnect-current-response\",\n {\n status: reconnectRes.status,\n hasBody: Boolean(reconnectRes.body),\n attempt,\n },\n );\n reconnectErrorCaptured = true;\n break;\n }\n\n yield* readSSEStream(\n reconnectRes.body,\n content,\n toolCallCounter,\n tabId,\n (seq) => {\n lastSeq = seq;\n if (threadId) updateActiveRunSeq(seq);\n },\n runId,\n );\n clearActiveRun();\n return true;\n } catch (reconnectErr: unknown) {\n if (\n reconnectErr instanceof Error &&\n reconnectErr.name === \"AbortError\"\n ) {\n clearActiveRun();\n return true;\n }\n if (reconnectErr instanceof AgentAutoContinueSignal) {\n if (reconnectErr.reason === \"no_progress\") {\n throw reconnectErr;\n }\n return false;\n }\n lastReconnectError = reconnectErr;\n await retryDelay(attempt, abortSignal);\n }\n }\n if (lastReconnectError && !reconnectErrorCaptured) {\n captureChatClientError(\n lastReconnectError,\n \"reconnect-current-failed\",\n );\n }\n return false;\n };\n\n const abortCurrentRun = async (): Promise<void> => {\n if (!runId) return;\n try {\n await fetch(`${apiUrl}/runs/${encodeURIComponent(runId)}/abort`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ reason: \"no_progress\" }),\n signal: abortSignal,\n });\n } catch {\n // Best effort. The follow-up POST will still reconnect or 409 if\n // the producer is alive and cannot be aborted cross-isolate.\n } finally {\n clearActiveRun();\n }\n };\n\n const reconnectActiveRunForThread = async function* (): AsyncGenerator<\n ChatModelRunResult,\n boolean,\n unknown\n > {\n if (!threadId) return false;\n let lastActiveRunError: unknown = null;\n for (let attempt = 0; attempt < MAX_RECONNECT_ATTEMPTS; attempt++) {\n try {\n const activeRes = await fetch(\n `${apiUrl}/runs/active?threadId=${encodeURIComponent(threadId)}`,\n { signal: abortSignal },\n );\n if (!activeRes.ok) {\n lastActiveRunError = new Error(\n `Active run lookup failed: ${activeRes.status}`,\n );\n captureChatClientError(\n lastActiveRunError,\n \"reconnect-active-response\",\n { status: activeRes.status, attempt },\n );\n return false;\n }\n const active = await activeRes.json();\n if (active?.active && active.runId) {\n const activeRunId = String(active.runId);\n runId = activeRunId;\n if (!attemptedRunIds.includes(activeRunId)) {\n attemptedRunIds.push(activeRunId);\n }\n lastSeq = -1;\n setActiveRun({ threadId, runId: activeRunId, lastSeq: -1 });\n const reconnected = yield* reconnectCurrentRun();\n if (reconnected) return true;\n }\n return false;\n } catch (activeErr: unknown) {\n if (\n activeErr instanceof Error &&\n activeErr.name === \"AbortError\"\n ) {\n clearActiveRun();\n return true;\n }\n lastActiveRunError = activeErr;\n await retryDelay(attempt, abortSignal);\n }\n }\n if (lastActiveRunError) {\n captureChatClientError(\n lastActiveRunError,\n \"reconnect-active-failed\",\n );\n }\n return false;\n };\n\n const visibleContentForContinuation = (): ContentPart[] => {\n if (\n visibleContinuationPrefix.length > 0 &&\n visibleContinuationPrefix.every(\n (part, index) => content[index] === part,\n )\n ) {\n return content.slice(visibleContinuationPrefix.length);\n }\n return content;\n };\n\n const prepareAutoContinuation = (\n signal: AgentAutoContinueSignal,\n ): { ok: boolean; resetVisibleContent: boolean } => {\n lastAutoContinueReason = signal.reason;\n const isTransient = signal.reason !== \"loop_limit\";\n const visibleContent = visibleContentForContinuation();\n const currentPartialHistory =\n contentToContinuationHistory(visibleContent);\n const madeProgress = hasContinuationProgress(visibleContent);\n\n if (signal.reason === \"loop_limit\") {\n stalledTransientContinuationAttempts = 0;\n } else {\n totalTransientContinuationAttempts += 1;\n if (signal.reason === \"stale_run\") {\n staleRunContinuationAttempts += 1;\n if (staleRunContinuationAttempts > MAX_STALE_RUN_CONTINUATIONS) {\n return { ok: false, resetVisibleContent: false };\n }\n }\n stalledTransientContinuationAttempts = madeProgress\n ? 0\n : stalledTransientContinuationAttempts + 1;\n if (\n stalledTransientContinuationAttempts >\n MAX_STALLED_TRANSIENT_CONTINUATIONS ||\n totalTransientContinuationAttempts >\n MAX_TOTAL_TRANSIENT_CONTINUATIONS\n ) {\n return { ok: false, resetVisibleContent: false };\n }\n }\n\n if (isTransient && currentPartialHistory) {\n continuationHistoryFragments.push(currentPartialHistory);\n }\n const partialHistory = combineContinuationHistory(\n isTransient\n ? continuationHistoryFragments\n : [...continuationHistoryFragments, currentPartialHistory],\n );\n const structuredPartialHistory = contentToStructuredMessages(\n visibleContent,\n nextContinuationToolCallId,\n );\n if (isTransient && structuredPartialHistory.length > 0) {\n structuredContinuationFragments.push(...structuredPartialHistory);\n }\n const structuredCombinedHistory = isTransient\n ? structuredContinuationFragments\n : [...structuredContinuationFragments, ...structuredPartialHistory];\n currentHistory = [\n ...history,\n { role: \"user\", content: normalizeMentions(userMessageText) },\n ...(partialHistory\n ? [{ role: \"assistant\" as const, content: partialHistory }]\n : []),\n ];\n currentStructuredHistory = [\n ...structuredHistory,\n {\n role: \"user\",\n content: [\n { type: \"text\", text: normalizeMentions(userMessageText) },\n ],\n },\n ...structuredCombinedHistory,\n ];\n currentMessageText = autoContinueMessage(signal);\n // Continuation requests are stateless new POSTs. If the interrupted\n // turn depended on uploaded context, re-send that context; otherwise\n // an attachment-only prompt degrades to \"Use the attached context.\"\n // with nothing attached after a stale run or reconnect recovery.\n includeAttachments = attachments.length > 0;\n includeReferences = Boolean(runConfig?.custom?.references);\n internalContinuationRequest = true;\n startupRecoveryAttempts = 0;\n clearActiveRun();\n if (!isTransient) {\n return { ok: true, resetVisibleContent: false };\n }\n\n const preservedContent = visibleTransientContinuationContent(content);\n content.splice(0, content.length, ...preservedContent);\n visibleContinuationPrefix = preservedContent;\n return { ok: true, resetVisibleContent: true };\n };\n\n while (true) {\n try {\n runId = null;\n lastSeq = -1;\n const res = await fetch(apiUrl, {\n method: \"POST\",\n headers,\n body: JSON.stringify({\n message: currentMessageText,\n displayMessage: userMessageText,\n history: currentHistory,\n structuredHistory: currentStructuredHistory,\n ...(threadId ? { threadId } : {}),\n ...(internalContinuationRequest\n ? { internalContinuation: true }\n : {}),\n ...(requestMode ? { mode: requestMode } : {}),\n ...(modelRef?.current ? { model: modelRef.current } : {}),\n ...(engineRef?.current ? { engine: engineRef.current } : {}),\n ...(effortRef?.current ? { effort: effortRef.current } : {}),\n ...(includeAttachments ? { attachments } : {}),\n ...(includeReferences && runConfig?.custom?.references\n ? { references: runConfig.custom.references }\n : {}),\n }),\n signal: abortSignal,\n });\n\n // Check for auth errors returned as 200 with JSON (common with middleware issues)\n const contentType = res.headers.get(\"content-type\") || \"\";\n if (\n res.ok &&\n contentType.includes(\"application/json\") &&\n !contentType.includes(\"text/event-stream\")\n ) {\n try {\n const body = await res.text();\n const parsed = JSON.parse(body);\n if (parsed.error) {\n throw new Error(parsed.error);\n }\n } catch (e) {\n if (\n e instanceof Error &&\n e.message !== \"Unexpected end of JSON input\"\n ) {\n throw e;\n }\n }\n }\n\n if (!res.ok) {\n if (res.status === 409) {\n let handledConflict = false;\n try {\n const body = await res.json();\n if (body?.activeRunId) {\n handledConflict = true;\n runId = String(body.activeRunId);\n if (!attemptedRunIds.includes(runId)) {\n attemptedRunIds.push(runId);\n }\n lastSeq = -1;\n if (threadId) {\n setActiveRun({ threadId, runId, lastSeq: -1 });\n }\n const reconnected = yield* reconnectCurrentRun();\n if (reconnected) return;\n }\n } catch {\n // Fall through to the generic response handling below.\n }\n if (handledConflict) {\n await delay(1000, abortSignal);\n if (abortSignal.aborted) return;\n continue;\n }\n }\n\n if (res.status === 401 || res.status === 403) {\n if (await tryRecoverAuthOnce()) {\n continue;\n }\n dispatchAuthError(\"auth-required\");\n content.push({\n type: \"text\",\n text: authErrorText(\"auth-required\"),\n });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n } as ChatModelRunResult;\n return;\n }\n\n // 405 Method Not Allowed usually means the session is broken/expired\n // (e.g. a redirect to a login page that only accepts GET).\n if (res.status === 405) {\n if (await tryRecoverAuthOnce()) {\n continue;\n }\n dispatchAuthError(\"session-expired\");\n content.push({\n type: \"text\",\n text: authErrorText(\"session-expired\"),\n });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n } as ChatModelRunResult;\n return;\n }\n\n let errorText = `Server error: ${res.status}`;\n try {\n const body = await res.text();\n if (isAuthErrorMessage(body)) {\n if (await tryRecoverAuthOnce()) {\n continue;\n }\n const reason = authErrorReasonFromMessage(body);\n dispatchAuthError(reason);\n content.push({\n type: \"text\",\n text: authErrorText(reason, body),\n });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n } as ChatModelRunResult;\n return;\n }\n if (isMissingCredentialMessage(body)) {\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new Event(\"agent-chat:missing-api-key\"),\n );\n }\n content.push({\n type: \"text\",\n text: missingCredentialErrorText(body),\n });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n } as ChatModelRunResult;\n return;\n } else if (body.includes(\"Cannot find any path\")) {\n errorText =\n \"Agent chat endpoint not found. Make sure the agent-chat plugin is loaded in server/plugins/.\";\n } else if (body) {\n errorText =\n body.length > 200 ? body.slice(0, 200) + \"...\" : body;\n }\n } catch {}\n throw new Error(errorText);\n }\n if (!res.body) {\n throw new Error(\"No response body\");\n }\n\n // Track the run ID for reconnection\n runId = res.headers.get(\"X-Run-Id\");\n if (runId && !attemptedRunIds.includes(runId)) {\n attemptedRunIds.push(runId);\n }\n if (runId && threadId) {\n setActiveRun({ threadId, runId, lastSeq: -1 });\n }\n\n yield* readSSEStream(\n res.body,\n content,\n toolCallCounter,\n tabId,\n (seq) => {\n lastSeq = seq;\n if (runId && threadId) {\n updateActiveRunSeq(seq);\n }\n },\n runId,\n );\n\n // Run completed normally — clear active run state\n clearActiveRun();\n return;\n } catch (err: unknown) {\n if (err instanceof Error && err.name === \"AbortError\") {\n // User-initiated abort (Stop button) — clear active run\n clearActiveRun();\n return;\n }\n\n if (err instanceof AgentAutoContinueSignal) {\n if (err.reason === \"no_progress\") {\n await abortCurrentRun();\n }\n if (err.reason === \"stream_ended\") {\n const reconnected = yield* reconnectCurrentRun();\n if (reconnected) return;\n const activeReconnected = yield* reconnectActiveRunForThread();\n if (activeReconnected) return;\n }\n const continuation = prepareAutoContinuation(err);\n if (!continuation.ok) {\n const message =\n \"The agent connection kept failing after several automatic recovery attempts.\";\n captureChatClientError(err, \"auto-continuation-exhausted\", {\n autoContinueReason: err.reason,\n });\n const runError = {\n message,\n details: connectionRecoveryDetails(),\n errorCode: \"connection_error\",\n recoverable: true,\n ...(runId ? { runId } : {}),\n };\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new CustomEvent(\"agent-chat:run-error\", {\n detail: { ...runError, tabId },\n }),\n );\n }\n content.push({\n type: \"text\",\n text: `Something went wrong: ${message}`,\n });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n metadata: {\n custom: { ...(runId ? { runId } : {}), runError },\n },\n };\n clearActiveRun();\n return;\n }\n if (continuation.resetVisibleContent) {\n yield {\n content: snapshotContent(content),\n } as ChatModelRunResult;\n }\n await delay(250, abortSignal);\n if (abortSignal.aborted) return;\n continue;\n }\n\n const errMsg =\n err instanceof Error ? err.message : \"Something went wrong.\";\n const isAuthError = isAuthErrorMessage(errMsg);\n\n // Don't try to reconnect for auth/client errors — show error directly\n if (isAuthError) {\n if (await tryRecoverAuthOnce()) {\n continue;\n }\n const reason = authErrorReasonFromMessage(errMsg);\n dispatchAuthError(reason);\n content.push({\n type: \"text\",\n text: authErrorText(reason, errMsg),\n });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n };\n clearActiveRun();\n return;\n }\n\n if (isMissingCredentialMessage(errMsg)) {\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(new Event(\"agent-chat:missing-api-key\"));\n }\n content.push({\n type: \"text\",\n text: missingCredentialErrorText(errMsg),\n });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n };\n clearActiveRun();\n return;\n }\n\n // Connection lost — try to reconnect to the run\n const reconnected = yield* reconnectCurrentRun();\n if (reconnected) return;\n const activeReconnected = yield* reconnectActiveRunForThread();\n if (activeReconnected) return;\n\n // Reconnect failed or not possible — keep going from the partial\n // streamed content instead of surfacing a transient transport error.\n if (content.length > 0) {\n const continuation = prepareAutoContinuation(\n new AgentAutoContinueSignal({ reason: \"stream_ended\" }),\n );\n if (!continuation.ok) {\n const message =\n \"The agent connection kept failing after several automatic recovery attempts.\";\n captureChatClientError(err, \"recovery-exhausted\");\n const runError = {\n message,\n details: connectionRecoveryDetails(),\n errorCode: \"connection_error\",\n recoverable: true,\n ...(runId ? { runId } : {}),\n };\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new CustomEvent(\"agent-chat:run-error\", {\n detail: { ...runError, tabId },\n }),\n );\n }\n content.push({\n type: \"text\",\n text: `Something went wrong: ${message}`,\n });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n metadata: {\n custom: { ...(runId ? { runId } : {}), runError },\n },\n };\n clearActiveRun();\n return;\n }\n if (continuation.resetVisibleContent) {\n yield {\n content: snapshotContent(content),\n } as ChatModelRunResult;\n }\n await delay(250, abortSignal);\n if (abortSignal.aborted) return;\n continue;\n }\n\n if (\n isRetryableStartupError(errMsg) &&\n startupRecoveryAttempts < MAX_STARTUP_RECOVERY_ATTEMPTS\n ) {\n await retryDelay(startupRecoveryAttempts++, abortSignal);\n if (abortSignal.aborted) return;\n continue;\n }\n\n // No partial work exists, so this is still a real startup failure.\n captureChatClientError(err, \"startup-failed\", {\n retryableStartupError: isRetryableStartupError(errMsg),\n });\n const normalized = normalizeChatError(errMsg);\n const runError = {\n message: normalized.message,\n ...(normalized.details ? { details: normalized.details } : {}),\n errorCode: \"connection_error\",\n recoverable: true,\n ...(runId ? { runId } : {}),\n };\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new CustomEvent(\"agent-chat:run-error\", {\n detail: { ...runError, tabId },\n }),\n );\n }\n content.push({\n type: \"text\",\n text: errMsg.startsWith(\"Server error:\")\n ? errMsg\n : `Something went wrong: ${normalized.message}`,\n });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n metadata: { custom: { ...(runId ? { runId } : {}), runError } },\n };\n return;\n }\n }\n } finally {\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new CustomEvent(\"agentNative.chatRunning\", {\n detail: { isRunning: false, tabId },\n }),\n );\n }\n }\n },\n };\n}\n"]}
1
+ {"version":3,"file":"agent-chat-adapter.js","sourceRoot":"","sources":["../../src/client/agent-chat-adapter.ts"],"names":[],"mappings":"AACA,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,cAAc,GACf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,uBAAuB,EAEvB,aAAa,GACd,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AA0BrE,MAAM,6BAA6B,GAAG,IAAI,GAAG,CAAC;IAC5C,kBAAkB;IAClB,sBAAsB;IACtB,UAAU;IACV,UAAU;IACV,WAAW;IACX,WAAW;IACX,eAAe;IACf,YAAY;IACZ,UAAU;CACX,CAAC,CAAC;AAEH,MAAM,oBAAoB,GACxB,gOAAgO,CAAC;AACnO,MAAM,sBAAsB,GAAG,CAAC,CAAC;AACjC,MAAM,6BAA6B,GAAG,CAAC,CAAC;AACxC,MAAM,2BAA2B,GAAG,CAAC,CAAC;AACtC,MAAM,mCAAmC,GAAG,CAAC,CAAC;AAC9C,MAAM,iCAAiC,GAAG,EAAE,CAAC;AAC7C,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAChC,MAAM,kBAAkB,GAAG,KAAK,CAAC;AACjC,MAAM,4BAA4B,GAAG,MAAM,CAAC;AAE5C,SAAS,iBAAiB,CAAC,IAAY;IACrC,OAAO,IAAI,CAAC,OAAO,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAa,EAAE,QAAgB;IAC9D,IAAI,KAAK,CAAC,MAAM,IAAI,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC3C,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,qBAAqB,KAAK,CAAC,MAAM,GAAG,QAAQ,mCAAmC,CAAC;AACpH,CAAC;AAED,SAAS,4BAA4B,CAAC,OAAsB;IAC1D,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;gBAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YACpD,SAAS;QACX,CAAC;QACD,MAAM,WAAW,GAAG;YAClB,SAAS,IAAI,CAAC,QAAQ,EAAE;YACxB,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE;YAC9C,IAAI,CAAC,MAAM;gBACT,CAAC,CAAC,YAAY,uBAAuB,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE;gBAC3D,CAAC,CAAC,wDAAwD;SAC7D;aACE,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC3B,CAAC;IACD,OAAO,uBAAuB,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;AACrE,CAAC;AAED,SAAS,sBAAsB,CAC7B,OAAmD;IAEnD,OAAO,OAAO;SACX,MAAM,CAAC,CAAC,CAAC,EAAuC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;SACrE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;SACrC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,SAAS,yBAAyB,CAAC,KAAa;IAC9C,OAAO,KAAK;SACT,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;SACvB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC3B,CAAC;AAED,SAAS,2BAA2B,CAAC,KAAyB;IAC5D,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC9D,OAAO,CACL,CAAC,CAAC,WAAW;QACb,CAAC,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC;YAC9B,6BAA6B,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAClD,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAe;IACxC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CACzB,qDAAqD,CACtD,CAAC;IACF,IAAI,CAAC,KAAK,IAAI,CAAC,2BAA2B,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAElE,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC/B,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YACb,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE,CAAC;gBAC/B,OAAO,kBAAkB,CACvB,KAAK,CAAC,IAAI,CACR,IAAI,CAAC,OAAO,CAAC,EACb,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CACjE,CAAC,IAAI,CAAC,EAAE,CAAC,CACX,CAAC;YACJ,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,kBAAkB,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,6BAA6B,CAAC,OAEtC;IACC,MAAM,WAAW,GAAiC,EAAE,CAAC;IACrD,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,WAAW,IAAI,EAAE,EAAE,CAAC;QAC5C,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YAC/B,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC5D,WAAW,CAAC,IAAI,CAAC;oBACf,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,WAAW,EAAE,GAAG,CAAC,WAAW;oBAC5B,IAAI,EAAE,IAAI,CAAC,KAAK;iBACjB,CAAC,CAAC;YACL,CAAC;iBAAM,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACjE,MAAM,WAAW,GACf,GAAG,CAAC,WAAW;oBACf,CAAC,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;gBAClE,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;oBAC/C,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;oBAC9B,CAAC,CAAC,IAAI,CAAC;gBACT,WAAW,CAAC,IAAI,CAAC;oBACf,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,WAAW;oBACX,GAAG,CAAC,WAAW,KAAK,IAAI;wBACtB,CAAC,CAAC,EAAE,IAAI,EAAE,0BAA0B,CAAC,WAAW,CAAC,EAAE;wBACnD,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;4BAC7B,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;4BACrB,CAAC,CAAC,EAAE,IAAI,EAAE,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;iBACvD,CAAC,CAAC;YACL,CAAC;iBAAM,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACjE,WAAW,CAAC,IAAI,CAAC;oBACf,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,WAAW,EAAE,GAAG,CAAC,WAAW;oBAC5B,IAAI,EAAE,0BAA0B,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBACtE,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,SAAS,yBAAyB,CAAC,IAAY;IAC7C,IAAI,IAAI,CAAC,MAAM,IAAI,4BAA4B;QAAE,OAAO,IAAI,CAAC;IAC7D,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,GAAG,4BAA4B,CAAC;IAC3D,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,4BAA4B,CAAC,mCAAmC,4BAA4B,CAAC,cAAc,EAAE,gBAAgB,OAAO,CAAC,cAAc,EAAE,+CAA+C,CAAC;AAC/N,CAAC;AAED,SAAS,0BAA0B,CAAC,IAAY;IAC9C,IAAI,IAAI,CAAC,MAAM,IAAI,4BAA4B;QAAE,OAAO,IAAI,CAAC;IAC7D,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,GAAG,4BAA4B,CAAC;IAC3D,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,4BAA4B,CAAC,mCAAmC,4BAA4B,CAAC,cAAc,EAAE,gBAAgB,OAAO,CAAC,cAAc,EAAE,qDAAqD,CAAC;AACrO,CAAC;AAED,SAAS,qBAAqB,CAC5B,UAAsC;IAEtC,IAAI,OAAO,UAAU,CAAC,IAAI,KAAK,QAAQ,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtE,MAAM,KAAK,GAAG;YACZ,SAAS,yBAAyB,CAAC,UAAU,CAAC,IAAI,IAAI,YAAY,CAAC,GAAG;YACtE,UAAU,CAAC,WAAW;gBACpB,CAAC,CAAC,gBAAgB,yBAAyB,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG;gBACtE,CAAC,CAAC,IAAI;YACR,UAAU,CAAC,IAAI;gBACb,CAAC,CAAC,SAAS,yBAAyB,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG;gBACxD,CAAC,CAAC,IAAI;SACT,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAClB,OAAO,eAAe,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,yBAAyB,CAAC,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC;IACzG,CAAC;IAED,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;QACpB,OAAO,aAAa,UAAU,CAAC,IAAI,IAAI,MAAM,KAAK,UAAU,CAAC,IAAI,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC;IACtI,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,qBAAqB,CAAC,OAG9B;IACC,MAAM,IAAI,GAAG,sBAAsB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACrD,MAAM,WAAW,GAAG,6BAA6B,CAAC,OAAO,CAAC;SACvD,GAAG,CAAC,qBAAqB,CAAC;SAC1B,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACtE,OAAO,CAAC,IAAI,EAAE,GAAG,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC3E,CAAC;AAED,SAAS,qBAAqB,CAC5B,IAAa;IAEb,OAAO,OAAO,CACZ,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAK,IAAY,CAAC,IAAI,KAAK,WAAW,CACvE,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAe;IACxC,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC;IAC9C,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC;AAED,SAAS,2BAA2B,CAClC,OAA+B,EAC/B,cAA4B;IAE5B,MAAM,QAAQ,GAAiC,EAAE,CAAC;IAClD,IAAI,cAAc,GAAqC,EAAE,CAAC;IAC1D,IAAI,kBAAkB,GAAqC,EAAE,CAAC;IAE9D,MAAM,aAAa,GAAG,GAAG,EAAE;QACzB,IAAI,kBAAkB,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAC5C,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC;QAChE,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,EAAE,CAAC,CAAC;QAC7D,cAAc,GAAG,EAAE,CAAC;QACpB,kBAAkB,GAAG,EAAE,CAAC;IAC1B,CAAC,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACzB,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC;gBAAE,aAAa,EAAE,CAAC;YACnD,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;gBACrB,cAAc,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YACzD,CAAC;YACD,SAAS;QACX,CAAC;QAED,IAAI,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,MAAM,UAAU,GAAG,cAAc,EAAE,CAAC;YACpC,cAAc,CAAC,IAAI,CAAC;gBAClB,IAAI,EAAE,WAAW;gBACjB,UAAU;gBACV,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE;aACtB,CAAC,CAAC;YACH,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC9B,kBAAkB,CAAC,IAAI,CAAC;oBACtB,IAAI,EAAE,aAAa;oBACnB,UAAU;oBACV,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,OAAO,EAAE,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC;iBACxC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,aAAa,EAAE,CAAC;IAChB,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,sCAAsC,CAC7C,QAIG;IAEH,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,MAAM,cAAc,GAAG,GAAG,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,CAAC;IACtD,MAAM,UAAU,GAAiC,EAAE,CAAC;IAEpD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;YAC5C,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;gBAChB,UAAU,CAAC,IAAI,CAAC;oBACd,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;iBAClC,CAAC,CAAC;YACL,CAAC;YACD,SAAS;QACX,CAAC;QAED,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW;YAAE,SAAS;QAC3C,MAAM,OAAO,GAAkB,EAAE,CAAC;QAClC,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACnC,IAAI,IAAI,EAAE,IAAI,KAAK,MAAM,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC3D,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;gBAChD,SAAS;YACX,CAAC;YACD,IAAI,IAAI,EAAE,IAAI,KAAK,WAAW,EAAE,CAAC;gBAC/B,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,WAAW;oBACjB,UAAU,EACR,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;oBAC5D,QAAQ,EACN,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ;wBAC/B,CAAC,CAAC,IAAI,CAAC,QAAQ;wBACf,CAAC,CAAC,OAAO,IAAI,CAAC,QAAQ,KAAK,WAAW;4BACpC,CAAC,CAAC,SAAS;4BACX,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;oBAC7B,QAAQ,EACN,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ;wBAC/B,CAAC,CAAC,IAAI,CAAC,QAAQ;wBACf,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;oBACrC,IAAI,EACF,IAAI,CAAC,IAAI;wBACT,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ;wBAC7B,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;wBACvB,CAAC,CAAC,IAAI,CAAC,IAAI;wBACX,CAAC,CAAC,EAAE;oBACR,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS;wBAC3B,CAAC,CAAC,EAAE,MAAM,EAAE,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;wBAC5C,CAAC,CAAC,EAAE,CAAC;iBACR,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,UAAU,CAAC,IAAI,CAAC,GAAG,2BAA2B,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC;IAC3E,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,0BAA0B,CAAC,SAAmB;IACrD,OAAO,uBAAuB,CAC5B,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EACtC,MAAM,CACP,CAAC,IAAI,EAAE,CAAC;AACX,CAAC;AAED,SAAS,mCAAmC,CAC1C,OAAsB;IAEtB,OAAO,OAAO,CAAC,MAAM,CACnB,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,CACjE,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB,CAAC,OAAsB;IACrD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAC3B,IAAI,CAAC,IAAI,KAAK,MAAM;QAClB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;QAC7B,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAC9B,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,OAAsB;IAC7C,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAC1B,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,CACzE,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,MAA+B;IAC1D,MAAM,MAAM,GACV,MAAM,CAAC,MAAM,KAAK,YAAY;QAC5B,CAAC,CAAC,mDAAmD;QACrD,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,WAAW;YAC7B,CAAC,CAAC,qFAAqF;YACvF,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,aAAa;gBAC/B,CAAC,CAAC,sFAAsF;gBACxF,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,cAAc;oBAChC,CAAC,CAAC,4EAA4E;oBAC9E,CAAC,CAAC,wDAAwD,CAAC;IACrE,OAAO,GAAG,oBAAoB,sBAAsB,MAAM,EAAE,CAAC;AAC/D,CAAC;AAED,SAAS,KAAK,CAAC,EAAU,EAAE,WAAwB;IACjD,IAAI,WAAW,CAAC,OAAO;QAAE,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAClD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACtC,WAAW,CAAC,gBAAgB,CAC1B,OAAO,EACP,GAAG,EAAE;YACH,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,OAAO,EAAE,CAAC;QACZ,CAAC,EACD,EAAE,IAAI,EAAE,IAAI,EAAE,CACf,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,UAAU,CAAC,OAAe,EAAE,WAAwB;IAC3D,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CACnB,kBAAkB,EAClB,mBAAmB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAC3C,CAAC;IACF,MAAM,MAAM,GAAG,IAAI,GAAG,GAAG,CAAC;IAC1B,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;IAChE,OAAO,KAAK,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,uBAAuB,CAAC,OAAe;IAC9C,MAAM,GAAG,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAClC,IACE,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC;QAC5B,GAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QACjC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;QACnB,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;QACnB,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;QACnB,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;QACnB,GAAG,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QAC/B,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC;QACvB,GAAG,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QAC9B,GAAG,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QAC9B,GAAG,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QAC/B,GAAG,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QAClC,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC;QAC7B,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC;QACvB,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,EAC1B,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,CACL,GAAG,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QAC/B,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC;QACvB,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC;QAC1B,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC;QACrB,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC;QAC1B,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACtB,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC;QACvB,GAAG,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QAC/B,GAAG,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QAClC,GAAG,CAAC,QAAQ,CAAC,yBAAyB,CAAC;QACvC,GAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QACjC,GAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QACjC,GAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QACjC,GAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QACjC,GAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QACjC,GAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QACjC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;QACnB,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;QACnB,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;QACnB,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;QACnB,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;QACnB,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CACpB,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAe;IACzC,MAAM,GAAG,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAClC,OAAO,CACL,GAAG,CAAC,QAAQ,CAAC,yBAAyB,CAAC;QACvC,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC;QAC5B,GAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QACjC,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC;QACzB,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC;QAC7B,GAAG,CAAC,QAAQ,CAAC,0BAA0B,CAAC;QACxC,GAAG,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QAC/B,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC;QACxB,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC;QACxB,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;QACnB,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;QACnB,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CACpB,CAAC;AACJ,CAAC;AAED,SAAS,0BAA0B,CACjC,OAAe;IAEf,MAAM,GAAG,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAClC,OAAO,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC;QAC5B,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC;QACvB,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC;QAC7B,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;QACnB,CAAC,CAAC,iBAAiB;QACnB,CAAC,CAAC,eAAe,CAAC;AACtB,CAAC;AAED,SAAS,aAAa,CACpB,MAA2C,EAC3C,OAAgB;IAEhB,MAAM,QAAQ,GACZ,MAAM,KAAK,iBAAiB;QAC1B,CAAC,CAAC,wEAAwE;QAC1E,CAAC,CAAC,qDAAqD,CAAC;IAE5D,IAAI,CAAC,OAAO;QAAE,OAAO,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAEnD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAGhC,CAAC;QACF,MAAM,GAAG,GACP,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ;YAC9B,CAAC,CAAC,MAAM,CAAC,KAAK;YACd,CAAC,CAAC,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ;gBAClC,CAAC,CAAC,MAAM,CAAC,OAAO;gBAChB,CAAC,CAAC,SAAS,CAAC;QAClB,OAAO,mBAAmB,CAAC,GAAG,IAAI,QAAQ,CAAC,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,mBAAmB,CAAC,OAAO,IAAI,QAAQ,CAAC,CAAC;IAClD,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAY;IACvC,IAAI,CAAC;QACH,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,0BAA0B,CAAC,OAAe;IACjD,MAAM,GAAG,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAClC,OAAO,CACL,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACtB,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC;QACzB,GAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QACjC,GAAG,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QAC/B,GAAG,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QAC/B,GAAG,CAAC,QAAQ,CAAC,qBAAqB,CAAC;QACnC,GAAG,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QAC/B,GAAG,CAAC,QAAQ,CAAC,2BAA2B,CAAC,CAC1C,CAAC;AACJ,CAAC;AAED,SAAS,0BAA0B,CAAC,OAAe;IACjD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAKhC,CAAC;QACF,MAAM,GAAG,GACP,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ;YAC9B,CAAC,CAAC,MAAM,CAAC,KAAK;YACd,CAAC,CAAC,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ;gBAClC,CAAC,CAAC,MAAM,CAAC,OAAO;gBAChB,CAAC,CAAC,OAAO,CAAC;QAChB,OAAO,mBAAmB,CACxB,GAAG,EACH,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,EACrE,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CACpE,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,mBAAmB,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAQtC;IACC,MAAM,MAAM,GACV,OAAO,EAAE,MAAM,IAAI,eAAe,CAAC,2BAA2B,CAAC,CAAC;IAClE,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,CAAC;IAC7B,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,CAAC;IACnC,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,CAAC;IACnC,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,CAAC;IACrC,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,CAAC;IACrC,MAAM,WAAW,GAAG,OAAO,EAAE,WAAW,CAAC;IAEzC,OAAO;QACL,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE;YAC7C,oEAAoE;YACpE,IAAI,WAAkD,CAAC;YACvD,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC9C,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;oBAChC,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;oBAC1B,MAAM;gBACR,CAAC;YACH,CAAC;YACD,MAAM,cAAc,GAClB,WAAW,EAAE,OAAO;iBACjB,MAAM,CAAC,CAAC,CAAC,EAAuC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;iBACrE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;iBAClB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACtB,MAAM,oBAAoB,GACxB,SAAS,EAAE,MAAM;gBACjB,OAAO,SAAS,CAAC,MAAM,KAAK,QAAQ;gBACpC,aAAa,IAAI,SAAS,CAAC,MAAM;gBAC/B,CAAC,CAAE,SAAS,CAAC,MAAoC,CAAC,WAAW;gBAC7D,CAAC,CAAC,SAAS,CAAC;YAChB,MAAM,WAAW,GACf,oBAAoB,KAAK,KAAK,IAAI,oBAAoB,KAAK,MAAM;gBAC/D,CAAC,CAAC,oBAAoB;gBACtB,CAAC,CAAC,WAAW,EAAE,OAAO,KAAK,MAAM;oBAC/B,CAAC,CAAC,MAAM;oBACR,CAAC,CAAC,WAAW,EAAE,OAAO,KAAK,OAAO;wBAChC,CAAC,CAAC,KAAK;wBACP,CAAC,CAAC,SAAS,CAAC;YAEpB,2DAA2D;YAC3D,0EAA0E;YAC1E,kEAAkE;YAClE,MAAM,WAAW,GAAG,WAAW;gBAC7B,CAAC,CAAC,6BAA6B,CAAC,WAAkB,CAAC;gBACnD,CAAC,CAAC,EAAE,CAAC;YACP,MAAM,eAAe,GACnB,cAAc,CAAC,IAAI,EAAE,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;gBAC/C,CAAC,CAAC,cAAc;gBAChB,CAAC,CAAC,2BAA2B,CAAC;YAElC,MAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,8BAA8B;YAC3E,MAAM,OAAO,GAAG,aAAa;iBAC1B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC;iBAC1D,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACX,IAAI,EAAE,CAAC,CAAC,IAA4B;gBACpC,OAAO,EACL,CAAC,CAAC,IAAI,KAAK,MAAM;oBACf,CAAC,CAAC,qBAAqB,CAAC,CAAQ,CAAC;oBACjC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,OAAO,CAAC;aACxC,CAAC,CAAC;iBACF,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YACnC,MAAM,iBAAiB,GACrB,sCAAsC,CAAC,aAAa,CAAC,CAAC;YAExD,qCAAqC;YACrC,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;gBAClC,MAAM,CAAC,aAAa,CAClB,IAAI,WAAW,CAAC,yBAAyB,EAAE;oBACzC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE;iBACnC,CAAC,CACH,CAAC;YACJ,CAAC;YAED,MAAM,OAAO,GAAkB,EAAE,CAAC;YAClC,MAAM,eAAe,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;YACrC,IAAI,KAAK,GAAkB,IAAI,CAAC;YAChC,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC;YACjB,IAAI,kBAAkB,GAAG,iBAAiB,CAAC,eAAe,CAAC,CAAC;YAC5D,IAAI,cAAc,GAA4B,OAAO,CAAC;YACtD,IAAI,wBAAwB,GAC1B,iBAAiB,CAAC;YACpB,IAAI,kBAAkB,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;YAChD,IAAI,iBAAiB,GAAG,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;YAC/D,IAAI,2BAA2B,GAAG,KAAK,CAAC;YACxC,IAAI,uBAAuB,GAAG,CAAC,CAAC;YAChC,IAAI,4BAA4B,GAAG,CAAC,CAAC;YACrC,IAAI,oCAAoC,GAAG,CAAC,CAAC;YAC7C,IAAI,kCAAkC,GAAG,CAAC,CAAC;YAC3C,MAAM,4BAA4B,GAAa,EAAE,CAAC;YAClD,MAAM,+BAA+B,GAAiC,EAAE,CAAC;YACzE,IAAI,yBAAyB,GAAkB,EAAE,CAAC;YAClD,IAAI,sBAAsB,GAAkB,IAAI,CAAC;YACjD,MAAM,eAAe,GAAa,EAAE,CAAC;YACrC,IAAI,qBAAqB,GAAG,KAAK,CAAC;YAClC,IAAI,2BAA2B,GAAG,CAAC,CAAC;YACpC,MAAM,0BAA0B,GAAG,GAAG,EAAE,CACtC,mBAAmB,EAAE,2BAA2B,EAAE,CAAC;YAErD,MAAM,yBAAyB,GAAG,GAAW,EAAE;gBAC7C,OAAO;oBACL,sBAAsB;wBACpB,CAAC,CAAC,8BAA8B,sBAAsB,EAAE;wBACxD,CAAC,CAAC,EAAE;oBACN,4BAA4B,4BAA4B,EAAE;oBAC1D,oCAAoC,oCAAoC,EAAE;oBAC1E,kCAAkC,kCAAkC,EAAE;oBACtE,eAAe,CAAC,MAAM,GAAG,CAAC;wBACxB,CAAC,CAAC,mBAAmB,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;wBACjD,CAAC,CAAC,EAAE;iBACP;qBACE,MAAM,CAAC,OAAO,CAAC;qBACf,IAAI,CAAC,IAAI,CAAC,CAAC;YAChB,CAAC,CAAC;YAEF,MAAM,iBAAiB,GAAG,CACxB,MAA2C,EAC3C,EAAE;gBACF,IAAI,OAAO,MAAM,KAAK,WAAW;oBAAE,OAAO;gBAC1C,MAAM,CAAC,aAAa,CAClB,IAAI,WAAW,CAAC,uBAAuB,EAAE;oBACvC,MAAM,EAAE;wBACN,MAAM;wBACN,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBAC3B,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBAClC;iBACF,CAAC,CACH,CAAC;YACJ,CAAC,CAAC;YAEF,MAAM,kBAAkB,GAAG,KAAK,IAAsB,EAAE;gBACtD,IAAI,qBAAqB,IAAI,WAAW,CAAC,OAAO;oBAAE,OAAO,KAAK,CAAC;gBAC/D,qBAAqB,GAAG,IAAI,CAAC;gBAC7B,IAAI,CAAC;oBACH,MAAM,UAAU,GAAG,MAAM,KAAK,CAC5B,mBAAmB,CAAC,6BAA6B,CAAC,EAClD;wBACE,MAAM,EAAE,KAAK;wBACb,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE;wBACvC,KAAK,EAAE,UAAU;wBACjB,WAAW,EAAE,aAAa;wBAC1B,MAAM,EAAE,WAAW;qBACpB,CACF,CAAC;oBACF,IAAI,CAAC,UAAU,CAAC,EAAE;wBAAE,OAAO,KAAK,CAAC;oBACjC,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;oBAC1D,OAAO,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBAC5C,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,KAAK,CAAC;gBACf,CAAC;YACH,CAAC,CAAC;YAEF,MAAM,sBAAsB,GAAG,CAC7B,KAAc,EACd,KAAa,EACb,QAAiC,EAAE,EACnC,EAAE;gBACF,YAAY,CAAC,KAAK,EAAE;oBAClB,IAAI,EAAE;wBACJ,MAAM,EAAE,mBAAmB;wBAC3B,KAAK;wBACL,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;wBACtC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;wBAChC,sBAAsB,EAAE,sBAAsB,IAAI,SAAS;qBAC5D;oBACD,KAAK,EAAE;wBACL,MAAM;wBACN,KAAK;wBACL,QAAQ;wBACR,KAAK;wBACL,OAAO;wBACP,YAAY,EAAE,OAAO,CAAC,MAAM;wBAC5B,eAAe,EAAE,CAAC,GAAG,eAAe,CAAC;wBACrC,uBAAuB;wBACvB,4BAA4B;wBAC5B,oCAAoC;wBACpC,kCAAkC;wBAClC,GAAG,KAAK;qBACT;oBACD,QAAQ,EAAE;wBACR,SAAS,EAAE;4BACT,KAAK;4BACL,QAAQ;4BACR,KAAK;4BACL,OAAO;4BACP,YAAY,EAAE,OAAO,CAAC,MAAM;4BAC5B,uBAAuB;4BACvB,4BAA4B;4BAC5B,oCAAoC;4BACpC,kCAAkC;yBACnC;qBACF;iBACF,CAAC,CAAC;YACL,CAAC,CAAC;YAEF,IAAI,CAAC;gBACH,MAAM,OAAO,GAA2B;oBACtC,cAAc,EAAE,kBAAkB;iBACnC,CAAC;gBACF,IAAI,CAAC;oBACH,MAAM,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,eAAe,EAAE,CAAC,QAAQ,CAAC;oBAC5D,IAAI,EAAE;wBAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,EAAE,CAAC;gBAC1C,CAAC;gBAAC,MAAM,CAAC;oBACP,sEAAsE;gBACxE,CAAC;gBAED,MAAM,mBAAmB,GAAG,KAAK,SAAS,CAAC;oBAKzC,IAAI,CAAC,KAAK;wBAAE,OAAO,KAAK,CAAC;oBACzB,IAAI,kBAAkB,GAAY,IAAI,CAAC;oBACvC,IAAI,sBAAsB,GAAG,KAAK,CAAC;oBACnC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,sBAAsB,EAAE,OAAO,EAAE,EAAE,CAAC;wBAClE,IAAI,CAAC;4BACH,MAAM,YAAY,GAAG,MAAM,KAAK,CAC9B,GAAG,MAAM,SAAS,kBAAkB,CAAC,KAAK,CAAC,iBAAiB,OAAO,GAAG,CAAC,EAAE,EACzE,EAAE,MAAM,EAAE,WAAW,EAAE,CACxB,CAAC;4BACF,IAAI,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;gCAC3C,kBAAkB,GAAG,IAAI,KAAK,CAC5B,qBAAqB,YAAY,CAAC,MAAM,EAAE,CAC3C,CAAC;gCACF,sBAAsB,CACpB,kBAAkB,EAClB,4BAA4B,EAC5B;oCACE,MAAM,EAAE,YAAY,CAAC,MAAM;oCAC3B,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC;oCACnC,OAAO;iCACR,CACF,CAAC;gCACF,sBAAsB,GAAG,IAAI,CAAC;gCAC9B,MAAM;4BACR,CAAC;4BAED,KAAK,CAAC,CAAC,aAAa,CAClB,YAAY,CAAC,IAAI,EACjB,OAAO,EACP,eAAe,EACf,KAAK,EACL,CAAC,GAAG,EAAE,EAAE;gCACN,OAAO,GAAG,GAAG,CAAC;gCACd,IAAI,QAAQ;oCAAE,kBAAkB,CAAC,GAAG,CAAC,CAAC;4BACxC,CAAC,EACD,KAAK,CACN,CAAC;4BACF,cAAc,EAAE,CAAC;4BACjB,OAAO,IAAI,CAAC;wBACd,CAAC;wBAAC,OAAO,YAAqB,EAAE,CAAC;4BAC/B,IACE,YAAY,YAAY,KAAK;gCAC7B,YAAY,CAAC,IAAI,KAAK,YAAY,EAClC,CAAC;gCACD,cAAc,EAAE,CAAC;gCACjB,OAAO,IAAI,CAAC;4BACd,CAAC;4BACD,IAAI,YAAY,YAAY,uBAAuB,EAAE,CAAC;gCACpD,IAAI,YAAY,CAAC,MAAM,KAAK,aAAa,EAAE,CAAC;oCAC1C,MAAM,YAAY,CAAC;gCACrB,CAAC;gCACD,OAAO,KAAK,CAAC;4BACf,CAAC;4BACD,kBAAkB,GAAG,YAAY,CAAC;4BAClC,MAAM,UAAU,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;wBACzC,CAAC;oBACH,CAAC;oBACD,IAAI,kBAAkB,IAAI,CAAC,sBAAsB,EAAE,CAAC;wBAClD,sBAAsB,CACpB,kBAAkB,EAClB,0BAA0B,CAC3B,CAAC;oBACJ,CAAC;oBACD,OAAO,KAAK,CAAC;gBACf,CAAC,CAAC;gBAEF,MAAM,eAAe,GAAG,KAAK,IAAmB,EAAE;oBAChD,IAAI,CAAC,KAAK;wBAAE,OAAO;oBACnB,IAAI,CAAC;wBACH,MAAM,KAAK,CAAC,GAAG,MAAM,SAAS,kBAAkB,CAAC,KAAK,CAAC,QAAQ,EAAE;4BAC/D,MAAM,EAAE,MAAM;4BACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;4BAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;4BAC/C,MAAM,EAAE,WAAW;yBACpB,CAAC,CAAC;oBACL,CAAC;oBAAC,MAAM,CAAC;wBACP,iEAAiE;wBACjE,6DAA6D;oBAC/D,CAAC;4BAAS,CAAC;wBACT,cAAc,EAAE,CAAC;oBACnB,CAAC;gBACH,CAAC,CAAC;gBAEF,MAAM,2BAA2B,GAAG,KAAK,SAAS,CAAC;oBAKjD,IAAI,CAAC,QAAQ;wBAAE,OAAO,KAAK,CAAC;oBAC5B,IAAI,kBAAkB,GAAY,IAAI,CAAC;oBACvC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,sBAAsB,EAAE,OAAO,EAAE,EAAE,CAAC;wBAClE,IAAI,CAAC;4BACH,MAAM,SAAS,GAAG,MAAM,KAAK,CAC3B,GAAG,MAAM,yBAAyB,kBAAkB,CAAC,QAAQ,CAAC,EAAE,EAChE,EAAE,MAAM,EAAE,WAAW,EAAE,CACxB,CAAC;4BACF,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC;gCAClB,kBAAkB,GAAG,IAAI,KAAK,CAC5B,6BAA6B,SAAS,CAAC,MAAM,EAAE,CAChD,CAAC;gCACF,sBAAsB,CACpB,kBAAkB,EAClB,2BAA2B,EAC3B,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,CACtC,CAAC;gCACF,OAAO,KAAK,CAAC;4BACf,CAAC;4BACD,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,IAAI,EAAE,CAAC;4BACtC,IAAI,MAAM,EAAE,MAAM,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gCACnC,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gCACzC,KAAK,GAAG,WAAW,CAAC;gCACpB,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;oCAC3C,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gCACpC,CAAC;gCACD,OAAO,GAAG,CAAC,CAAC,CAAC;gCACb,YAAY,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;gCAC5D,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,mBAAmB,EAAE,CAAC;gCACjD,IAAI,WAAW;oCAAE,OAAO,IAAI,CAAC;4BAC/B,CAAC;4BACD,OAAO,KAAK,CAAC;wBACf,CAAC;wBAAC,OAAO,SAAkB,EAAE,CAAC;4BAC5B,IACE,SAAS,YAAY,KAAK;gCAC1B,SAAS,CAAC,IAAI,KAAK,YAAY,EAC/B,CAAC;gCACD,cAAc,EAAE,CAAC;gCACjB,OAAO,IAAI,CAAC;4BACd,CAAC;4BACD,kBAAkB,GAAG,SAAS,CAAC;4BAC/B,MAAM,UAAU,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;wBACzC,CAAC;oBACH,CAAC;oBACD,IAAI,kBAAkB,EAAE,CAAC;wBACvB,sBAAsB,CACpB,kBAAkB,EAClB,yBAAyB,CAC1B,CAAC;oBACJ,CAAC;oBACD,OAAO,KAAK,CAAC;gBACf,CAAC,CAAC;gBAEF,MAAM,6BAA6B,GAAG,GAAkB,EAAE;oBACxD,IACE,yBAAyB,CAAC,MAAM,GAAG,CAAC;wBACpC,yBAAyB,CAAC,KAAK,CAC7B,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,CACzC,EACD,CAAC;wBACD,OAAO,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAC;oBACzD,CAAC;oBACD,OAAO,OAAO,CAAC;gBACjB,CAAC,CAAC;gBAEF,MAAM,uBAAuB,GAAG,CAC9B,MAA+B,EACgB,EAAE;oBACjD,sBAAsB,GAAG,MAAM,CAAC,MAAM,CAAC;oBACvC,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,KAAK,YAAY,CAAC;oBACnD,MAAM,cAAc,GAAG,6BAA6B,EAAE,CAAC;oBACvD,MAAM,qBAAqB,GACzB,4BAA4B,CAAC,cAAc,CAAC,CAAC;oBAC/C,MAAM,YAAY,GAAG,uBAAuB,CAAC,cAAc,CAAC,CAAC;oBAE7D,IAAI,MAAM,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;wBACnC,oCAAoC,GAAG,CAAC,CAAC;oBAC3C,CAAC;yBAAM,CAAC;wBACN,kCAAkC,IAAI,CAAC,CAAC;wBACxC,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;4BAClC,4BAA4B,IAAI,CAAC,CAAC;4BAClC,IAAI,4BAA4B,GAAG,2BAA2B,EAAE,CAAC;gCAC/D,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,CAAC;4BACnD,CAAC;wBACH,CAAC;wBACD,oCAAoC,GAAG,YAAY;4BACjD,CAAC,CAAC,CAAC;4BACH,CAAC,CAAC,oCAAoC,GAAG,CAAC,CAAC;wBAC7C,IACE,oCAAoC;4BAClC,mCAAmC;4BACrC,kCAAkC;gCAChC,iCAAiC,EACnC,CAAC;4BACD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,CAAC;wBACnD,CAAC;oBACH,CAAC;oBAED,IAAI,WAAW,IAAI,qBAAqB,EAAE,CAAC;wBACzC,4BAA4B,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;oBAC3D,CAAC;oBACD,MAAM,cAAc,GAAG,0BAA0B,CAC/C,WAAW;wBACT,CAAC,CAAC,4BAA4B;wBAC9B,CAAC,CAAC,CAAC,GAAG,4BAA4B,EAAE,qBAAqB,CAAC,CAC7D,CAAC;oBACF,MAAM,wBAAwB,GAAG,2BAA2B,CAC1D,cAAc,EACd,0BAA0B,CAC3B,CAAC;oBACF,IAAI,WAAW,IAAI,wBAAwB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACvD,+BAA+B,CAAC,IAAI,CAAC,GAAG,wBAAwB,CAAC,CAAC;oBACpE,CAAC;oBACD,MAAM,yBAAyB,GAAG,WAAW;wBAC3C,CAAC,CAAC,+BAA+B;wBACjC,CAAC,CAAC,CAAC,GAAG,+BAA+B,EAAE,GAAG,wBAAwB,CAAC,CAAC;oBACtE,cAAc,GAAG;wBACf,GAAG,OAAO;wBACV,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,CAAC,eAAe,CAAC,EAAE;wBAC7D,GAAG,CAAC,cAAc;4BAChB,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,WAAoB,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC;4BAC3D,CAAC,CAAC,EAAE,CAAC;qBACR,CAAC;oBACF,wBAAwB,GAAG;wBACzB,GAAG,iBAAiB;wBACpB;4BACE,IAAI,EAAE,MAAM;4BACZ,OAAO,EAAE;gCACP,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,CAAC,eAAe,CAAC,EAAE;6BAC3D;yBACF;wBACD,GAAG,yBAAyB;qBAC7B,CAAC;oBACF,kBAAkB,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;oBACjD,oEAAoE;oBACpE,qEAAqE;oBACrE,oEAAoE;oBACpE,iEAAiE;oBACjE,kBAAkB,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;oBAC5C,iBAAiB,GAAG,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;oBAC3D,2BAA2B,GAAG,IAAI,CAAC;oBACnC,uBAAuB,GAAG,CAAC,CAAC;oBAC5B,cAAc,EAAE,CAAC;oBACjB,IAAI,CAAC,WAAW,EAAE,CAAC;wBACjB,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,CAAC;oBAClD,CAAC;oBAED,MAAM,gBAAgB,GAAG,mCAAmC,CAAC,OAAO,CAAC,CAAC;oBACtE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,EAAE,GAAG,gBAAgB,CAAC,CAAC;oBACvD,yBAAyB,GAAG,gBAAgB,CAAC;oBAC7C,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC;gBACjD,CAAC,CAAC;gBAEF,OAAO,IAAI,EAAE,CAAC;oBACZ,IAAI,CAAC;wBACH,KAAK,GAAG,IAAI,CAAC;wBACb,OAAO,GAAG,CAAC,CAAC,CAAC;wBACb,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,MAAM,EAAE;4BAC9B,MAAM,EAAE,MAAM;4BACd,OAAO;4BACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gCACnB,OAAO,EAAE,kBAAkB;gCAC3B,cAAc,EAAE,eAAe;gCAC/B,OAAO,EAAE,cAAc;gCACvB,iBAAiB,EAAE,wBAAwB;gCAC3C,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gCACjC,GAAG,CAAC,2BAA2B;oCAC7B,CAAC,CAAC,EAAE,oBAAoB,EAAE,IAAI,EAAE;oCAChC,CAAC,CAAC,EAAE,CAAC;gCACP,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gCAC7C,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gCACzD,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gCAC5D,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gCAC5D,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gCAC9C,GAAG,CAAC,iBAAiB,IAAI,SAAS,EAAE,MAAM,EAAE,UAAU;oCACpD,CAAC,CAAC,EAAE,UAAU,EAAE,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE;oCAC7C,CAAC,CAAC,EAAE,CAAC;6BACR,CAAC;4BACF,MAAM,EAAE,WAAW;yBACpB,CAAC,CAAC;wBAEH,kFAAkF;wBAClF,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;wBAC1D,IACE,GAAG,CAAC,EAAE;4BACN,WAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC;4BACxC,CAAC,WAAW,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAC1C,CAAC;4BACD,IAAI,CAAC;gCACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;gCAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gCAChC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;oCACjB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gCAChC,CAAC;4BACH,CAAC;4BAAC,OAAO,CAAC,EAAE,CAAC;gCACX,IACE,CAAC,YAAY,KAAK;oCAClB,CAAC,CAAC,OAAO,KAAK,8BAA8B,EAC5C,CAAC;oCACD,MAAM,CAAC,CAAC;gCACV,CAAC;4BACH,CAAC;wBACH,CAAC;wBAED,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;4BACZ,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gCACvB,IAAI,eAAe,GAAG,KAAK,CAAC;gCAC5B,IAAI,CAAC;oCACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;oCAC9B,IAAI,IAAI,EAAE,WAAW,EAAE,CAAC;wCACtB,eAAe,GAAG,IAAI,CAAC;wCACvB,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;wCACjC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;4CACrC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;wCAC9B,CAAC;wCACD,OAAO,GAAG,CAAC,CAAC,CAAC;wCACb,IAAI,QAAQ,EAAE,CAAC;4CACb,YAAY,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;wCACjD,CAAC;wCACD,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,mBAAmB,EAAE,CAAC;wCACjD,IAAI,WAAW;4CAAE,OAAO;oCAC1B,CAAC;gCACH,CAAC;gCAAC,MAAM,CAAC;oCACP,uDAAuD;gCACzD,CAAC;gCACD,IAAI,eAAe,EAAE,CAAC;oCACpB,MAAM,KAAK,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;oCAC/B,IAAI,WAAW,CAAC,OAAO;wCAAE,OAAO;oCAChC,SAAS;gCACX,CAAC;4BACH,CAAC;4BAED,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gCAC7C,IAAI,MAAM,kBAAkB,EAAE,EAAE,CAAC;oCAC/B,SAAS;gCACX,CAAC;gCACD,iBAAiB,CAAC,eAAe,CAAC,CAAC;gCACnC,OAAO,CAAC,IAAI,CAAC;oCACX,IAAI,EAAE,MAAM;oCACZ,IAAI,EAAE,aAAa,CAAC,eAAe,CAAC;iCACrC,CAAC,CAAC;gCACH,MAAM;oCACJ,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC;oCACrB,MAAM,EAAE;wCACN,IAAI,EAAE,YAAqB;wCAC3B,MAAM,EAAE,OAAgB;qCACzB;iCACoB,CAAC;gCACxB,OAAO;4BACT,CAAC;4BAED,qEAAqE;4BACrE,2DAA2D;4BAC3D,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gCACvB,IAAI,MAAM,kBAAkB,EAAE,EAAE,CAAC;oCAC/B,SAAS;gCACX,CAAC;gCACD,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;gCACrC,OAAO,CAAC,IAAI,CAAC;oCACX,IAAI,EAAE,MAAM;oCACZ,IAAI,EAAE,aAAa,CAAC,iBAAiB,CAAC;iCACvC,CAAC,CAAC;gCACH,MAAM;oCACJ,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC;oCACrB,MAAM,EAAE;wCACN,IAAI,EAAE,YAAqB;wCAC3B,MAAM,EAAE,OAAgB;qCACzB;iCACoB,CAAC;gCACxB,OAAO;4BACT,CAAC;4BAED,IAAI,SAAS,GAAG,iBAAiB,GAAG,CAAC,MAAM,EAAE,CAAC;4BAC9C,IAAI,CAAC;gCACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;gCAC9B,IAAI,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;oCAC7B,IAAI,MAAM,kBAAkB,EAAE,EAAE,CAAC;wCAC/B,SAAS;oCACX,CAAC;oCACD,MAAM,MAAM,GAAG,0BAA0B,CAAC,IAAI,CAAC,CAAC;oCAChD,iBAAiB,CAAC,MAAM,CAAC,CAAC;oCAC1B,OAAO,CAAC,IAAI,CAAC;wCACX,IAAI,EAAE,MAAM;wCACZ,IAAI,EAAE,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC;qCAClC,CAAC,CAAC;oCACH,MAAM;wCACJ,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC;wCACrB,MAAM,EAAE;4CACN,IAAI,EAAE,YAAqB;4CAC3B,MAAM,EAAE,OAAgB;yCACzB;qCACoB,CAAC;oCACxB,OAAO;gCACT,CAAC;gCACD,IAAI,0BAA0B,CAAC,IAAI,CAAC,EAAE,CAAC;oCACrC,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;wCAClC,MAAM,CAAC,aAAa,CAClB,IAAI,KAAK,CAAC,4BAA4B,CAAC,CACxC,CAAC;oCACJ,CAAC;oCACD,OAAO,CAAC,IAAI,CAAC;wCACX,IAAI,EAAE,MAAM;wCACZ,IAAI,EAAE,0BAA0B,CAAC,IAAI,CAAC;qCACvC,CAAC,CAAC;oCACH,MAAM;wCACJ,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC;wCACrB,MAAM,EAAE;4CACN,IAAI,EAAE,YAAqB;4CAC3B,MAAM,EAAE,OAAgB;yCACzB;qCACoB,CAAC;oCACxB,OAAO;gCACT,CAAC;qCAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,CAAC;oCACjD,SAAS;wCACP,8FAA8F,CAAC;gCACnG,CAAC;qCAAM,IAAI,IAAI,EAAE,CAAC;oCAChB,SAAS;wCACP,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;gCAC1D,CAAC;4BACH,CAAC;4BAAC,MAAM,CAAC,CAAA,CAAC;4BACV,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC;wBAC7B,CAAC;wBACD,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;4BACd,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;wBACtC,CAAC;wBAED,oCAAoC;wBACpC,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;wBACpC,IAAI,KAAK,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;4BAC9C,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;wBAC9B,CAAC;wBACD,IAAI,KAAK,IAAI,QAAQ,EAAE,CAAC;4BACtB,YAAY,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;wBACjD,CAAC;wBAED,KAAK,CAAC,CAAC,aAAa,CAClB,GAAG,CAAC,IAAI,EACR,OAAO,EACP,eAAe,EACf,KAAK,EACL,CAAC,GAAG,EAAE,EAAE;4BACN,OAAO,GAAG,GAAG,CAAC;4BACd,IAAI,KAAK,IAAI,QAAQ,EAAE,CAAC;gCACtB,kBAAkB,CAAC,GAAG,CAAC,CAAC;4BAC1B,CAAC;wBACH,CAAC,EACD,KAAK,CACN,CAAC;wBAEF,kDAAkD;wBAClD,cAAc,EAAE,CAAC;wBACjB,OAAO;oBACT,CAAC;oBAAC,OAAO,GAAY,EAAE,CAAC;wBACtB,IAAI,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;4BACtD,wDAAwD;4BACxD,cAAc,EAAE,CAAC;4BACjB,OAAO;wBACT,CAAC;wBAED,IAAI,GAAG,YAAY,uBAAuB,EAAE,CAAC;4BAC3C,IAAI,GAAG,CAAC,MAAM,KAAK,aAAa,EAAE,CAAC;gCACjC,MAAM,eAAe,EAAE,CAAC;4BAC1B,CAAC;4BACD,IAAI,GAAG,CAAC,MAAM,KAAK,cAAc,EAAE,CAAC;gCAClC,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,mBAAmB,EAAE,CAAC;gCACjD,IAAI,WAAW;oCAAE,OAAO;gCACxB,MAAM,iBAAiB,GAAG,KAAK,CAAC,CAAC,2BAA2B,EAAE,CAAC;gCAC/D,IAAI,iBAAiB;oCAAE,OAAO;4BAChC,CAAC;4BACD,MAAM,YAAY,GAAG,uBAAuB,CAAC,GAAG,CAAC,CAAC;4BAClD,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC;gCACrB,MAAM,OAAO,GACX,8EAA8E,CAAC;gCACjF,sBAAsB,CAAC,GAAG,EAAE,6BAA6B,EAAE;oCACzD,kBAAkB,EAAE,GAAG,CAAC,MAAM;iCAC/B,CAAC,CAAC;gCACH,MAAM,QAAQ,GAAG;oCACf,OAAO;oCACP,OAAO,EAAE,yBAAyB,EAAE;oCACpC,SAAS,EAAE,kBAAkB;oCAC7B,WAAW,EAAE,IAAI;oCACjB,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iCAC5B,CAAC;gCACF,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;oCAClC,MAAM,CAAC,aAAa,CAClB,IAAI,WAAW,CAAC,sBAAsB,EAAE;wCACtC,MAAM,EAAE,EAAE,GAAG,QAAQ,EAAE,KAAK,EAAE;qCAC/B,CAAC,CACH,CAAC;gCACJ,CAAC;gCACD,OAAO,CAAC,IAAI,CAAC;oCACX,IAAI,EAAE,MAAM;oCACZ,IAAI,EAAE,yBAAyB,OAAO,EAAE;iCACzC,CAAC,CAAC;gCACH,MAAM;oCACJ,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC;oCACrB,MAAM,EAAE;wCACN,IAAI,EAAE,YAAqB;wCAC3B,MAAM,EAAE,OAAgB;qCACzB;oCACD,QAAQ,EAAE;wCACR,MAAM,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE;qCAClD;iCACF,CAAC;gCACF,cAAc,EAAE,CAAC;gCACjB,OAAO;4BACT,CAAC;4BACD,IAAI,YAAY,CAAC,mBAAmB,EAAE,CAAC;gCACrC,MAAM;oCACJ,OAAO,EAAE,eAAe,CAAC,OAAO,CAAC;iCACZ,CAAC;4BAC1B,CAAC;4BACD,MAAM,KAAK,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;4BAC9B,IAAI,WAAW,CAAC,OAAO;gCAAE,OAAO;4BAChC,SAAS;wBACX,CAAC;wBAED,MAAM,MAAM,GACV,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,uBAAuB,CAAC;wBAC/D,MAAM,WAAW,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;wBAE/C,sEAAsE;wBACtE,IAAI,WAAW,EAAE,CAAC;4BAChB,IAAI,MAAM,kBAAkB,EAAE,EAAE,CAAC;gCAC/B,SAAS;4BACX,CAAC;4BACD,MAAM,MAAM,GAAG,0BAA0B,CAAC,MAAM,CAAC,CAAC;4BAClD,iBAAiB,CAAC,MAAM,CAAC,CAAC;4BAC1B,OAAO,CAAC,IAAI,CAAC;gCACX,IAAI,EAAE,MAAM;gCACZ,IAAI,EAAE,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC;6BACpC,CAAC,CAAC;4BACH,MAAM;gCACJ,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC;gCACrB,MAAM,EAAE;oCACN,IAAI,EAAE,YAAqB;oCAC3B,MAAM,EAAE,OAAgB;iCACzB;6BACF,CAAC;4BACF,cAAc,EAAE,CAAC;4BACjB,OAAO;wBACT,CAAC;wBAED,IAAI,0BAA0B,CAAC,MAAM,CAAC,EAAE,CAAC;4BACvC,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;gCAClC,MAAM,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC,CAAC;4BAChE,CAAC;4BACD,OAAO,CAAC,IAAI,CAAC;gCACX,IAAI,EAAE,MAAM;gCACZ,IAAI,EAAE,0BAA0B,CAAC,MAAM,CAAC;6BACzC,CAAC,CAAC;4BACH,MAAM;gCACJ,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC;gCACrB,MAAM,EAAE;oCACN,IAAI,EAAE,YAAqB;oCAC3B,MAAM,EAAE,OAAgB;iCACzB;6BACF,CAAC;4BACF,cAAc,EAAE,CAAC;4BACjB,OAAO;wBACT,CAAC;wBAED,gDAAgD;wBAChD,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,mBAAmB,EAAE,CAAC;wBACjD,IAAI,WAAW;4BAAE,OAAO;wBACxB,MAAM,iBAAiB,GAAG,KAAK,CAAC,CAAC,2BAA2B,EAAE,CAAC;wBAC/D,IAAI,iBAAiB;4BAAE,OAAO;wBAE9B,iEAAiE;wBACjE,qEAAqE;wBACrE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;4BACvB,MAAM,YAAY,GAAG,uBAAuB,CAC1C,IAAI,uBAAuB,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CACxD,CAAC;4BACF,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC;gCACrB,MAAM,OAAO,GACX,8EAA8E,CAAC;gCACjF,sBAAsB,CAAC,GAAG,EAAE,oBAAoB,CAAC,CAAC;gCAClD,MAAM,QAAQ,GAAG;oCACf,OAAO;oCACP,OAAO,EAAE,yBAAyB,EAAE;oCACpC,SAAS,EAAE,kBAAkB;oCAC7B,WAAW,EAAE,IAAI;oCACjB,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iCAC5B,CAAC;gCACF,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;oCAClC,MAAM,CAAC,aAAa,CAClB,IAAI,WAAW,CAAC,sBAAsB,EAAE;wCACtC,MAAM,EAAE,EAAE,GAAG,QAAQ,EAAE,KAAK,EAAE;qCAC/B,CAAC,CACH,CAAC;gCACJ,CAAC;gCACD,OAAO,CAAC,IAAI,CAAC;oCACX,IAAI,EAAE,MAAM;oCACZ,IAAI,EAAE,yBAAyB,OAAO,EAAE;iCACzC,CAAC,CAAC;gCACH,MAAM;oCACJ,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC;oCACrB,MAAM,EAAE;wCACN,IAAI,EAAE,YAAqB;wCAC3B,MAAM,EAAE,OAAgB;qCACzB;oCACD,QAAQ,EAAE;wCACR,MAAM,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE;qCAClD;iCACF,CAAC;gCACF,cAAc,EAAE,CAAC;gCACjB,OAAO;4BACT,CAAC;4BACD,IAAI,YAAY,CAAC,mBAAmB,EAAE,CAAC;gCACrC,MAAM;oCACJ,OAAO,EAAE,eAAe,CAAC,OAAO,CAAC;iCACZ,CAAC;4BAC1B,CAAC;4BACD,MAAM,KAAK,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;4BAC9B,IAAI,WAAW,CAAC,OAAO;gCAAE,OAAO;4BAChC,SAAS;wBACX,CAAC;wBAED,IACE,uBAAuB,CAAC,MAAM,CAAC;4BAC/B,uBAAuB,GAAG,6BAA6B,EACvD,CAAC;4BACD,MAAM,UAAU,CAAC,uBAAuB,EAAE,EAAE,WAAW,CAAC,CAAC;4BACzD,IAAI,WAAW,CAAC,OAAO;gCAAE,OAAO;4BAChC,SAAS;wBACX,CAAC;wBAED,mEAAmE;wBACnE,sBAAsB,CAAC,GAAG,EAAE,gBAAgB,EAAE;4BAC5C,qBAAqB,EAAE,uBAAuB,CAAC,MAAM,CAAC;yBACvD,CAAC,CAAC;wBACH,MAAM,UAAU,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;wBAC9C,MAAM,QAAQ,GAAG;4BACf,OAAO,EAAE,UAAU,CAAC,OAAO;4BAC3B,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;4BAC9D,SAAS,EAAE,kBAAkB;4BAC7B,WAAW,EAAE,IAAI;4BACjB,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;yBAC5B,CAAC;wBACF,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;4BAClC,MAAM,CAAC,aAAa,CAClB,IAAI,WAAW,CAAC,sBAAsB,EAAE;gCACtC,MAAM,EAAE,EAAE,GAAG,QAAQ,EAAE,KAAK,EAAE;6BAC/B,CAAC,CACH,CAAC;wBACJ,CAAC;wBACD,OAAO,CAAC,IAAI,CAAC;4BACX,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,MAAM,CAAC,UAAU,CAAC,eAAe,CAAC;gCACtC,CAAC,CAAC,MAAM;gCACR,CAAC,CAAC,yBAAyB,UAAU,CAAC,OAAO,EAAE;yBAClD,CAAC,CAAC;wBACH,MAAM;4BACJ,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC;4BACrB,MAAM,EAAE;gCACN,IAAI,EAAE,YAAqB;gCAC3B,MAAM,EAAE,OAAgB;6BACzB;4BACD,QAAQ,EAAE,EAAE,MAAM,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE;yBAChE,CAAC;wBACF,OAAO;oBACT,CAAC;gBACH,CAAC;YACH,CAAC;oBAAS,CAAC;gBACT,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;oBAClC,MAAM,CAAC,aAAa,CAClB,IAAI,WAAW,CAAC,yBAAyB,EAAE;wBACzC,MAAM,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE;qBACpC,CAAC,CACH,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC","sourcesContent":["import type { ChatModelAdapter, ChatModelRunResult } from \"@assistant-ui/react\";\nimport {\n setActiveRun,\n updateActiveRunSeq,\n clearActiveRun,\n} from \"./active-run-state.js\";\nimport {\n AgentAutoContinueSignal,\n type ContentPart,\n readSSEStream,\n} from \"./sse-event-processor.js\";\nimport { agentNativePath } from \"./api-path.js\";\nimport { formatChatErrorText, normalizeChatError } from \"./error-format.js\";\nimport { captureError } from \"./analytics.js\";\nimport { unwrapAttachmentEnvelope } from \"./composer/pasted-text.js\";\nimport type { ReasoningEffort } from \"../shared/reasoning-effort.js\";\nimport type {\n AgentChatStructuredContentPart,\n AgentChatStructuredMessage,\n} from \"../agent/types.js\";\n\ntype AdapterHistoryMessage = {\n role: \"user\" | \"assistant\";\n content: string;\n};\n\ntype AssistantUiAttachment = {\n name: string;\n contentType?: string;\n content: readonly Record<string, unknown>[];\n};\n\ntype AgentChatAdapterAttachment = {\n type: string;\n name: string;\n contentType?: string;\n data?: string;\n text?: string;\n};\n\nconst TEXT_ATTACHMENT_CONTENT_TYPES = new Set([\n \"application/json\",\n \"application/x-ndjson\",\n \"text/csv\",\n \"text/css\",\n \"text/html\",\n \"text/json\",\n \"text/markdown\",\n \"text/plain\",\n \"text/xml\",\n]);\n\nconst AUTO_CONTINUE_PROMPT =\n \"Continue from where you left off and finish the user's original request. Do not repeat completed work, do not mention internal reconnects, time limits, or step limits, and continue as if this is the same uninterrupted run.\";\nconst MAX_RECONNECT_ATTEMPTS = 5;\nconst MAX_STARTUP_RECOVERY_ATTEMPTS = 8;\nconst MAX_STALE_RUN_CONTINUATIONS = 3;\nconst MAX_STALLED_TRANSIENT_CONTINUATIONS = 8;\nconst MAX_TOTAL_TRANSIENT_CONTINUATIONS = 32;\nconst RETRY_BASE_DELAY_MS = 500;\nconst RETRY_MAX_DELAY_MS = 8_000;\nconst MAX_HISTORY_ATTACHMENT_CHARS = 60_000;\n\nfunction normalizeMentions(text: string): string {\n return text.replace(/@\\[([^\\]|]+)\\|[^\\]]+\\]/g, \"@$1\");\n}\n\nfunction truncateForContinuation(value: string, maxChars: number): string {\n if (value.length <= maxChars) return value;\n return `${value.slice(0, maxChars)}\\n\\n...[truncated ${value.length - maxChars} chars from prior partial output]`;\n}\n\nfunction contentToContinuationHistory(content: ContentPart[]): string {\n const chunks: string[] = [];\n for (const part of content) {\n if (part.type === \"text\") {\n if (part.text.trim()) chunks.push(part.text.trim());\n continue;\n }\n const toolSummary = [\n `Tool: ${part.toolName}`,\n part.argsText ? `Input: ${part.argsText}` : \"\",\n part.result\n ? `Result:\\n${truncateForContinuation(part.result, 8_000)}`\n : \"Result: interrupted before this tool returned a result\",\n ]\n .filter(Boolean)\n .join(\"\\n\");\n chunks.push(toolSummary);\n }\n return truncateForContinuation(chunks.join(\"\\n\\n\"), 40_000).trim();\n}\n\nfunction messageTextFromContent(\n content: readonly { type: string; text?: string }[],\n): string {\n return content\n .filter((p): p is { type: \"text\"; text: string } => p.type === \"text\")\n .map((p) => normalizeMentions(p.text))\n .join(\"\\n\");\n}\n\nfunction escapeAttachmentAttribute(value: string): string {\n return value\n .replace(/&/g, \"&amp;\")\n .replace(/\"/g, \"&quot;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\");\n}\n\nfunction isTextAttachmentContentType(value: string | undefined): boolean {\n if (!value) return false;\n const contentType = value.split(\";\")[0]?.trim().toLowerCase();\n return (\n !!contentType &&\n (contentType.startsWith(\"text/\") ||\n TEXT_ATTACHMENT_CONTENT_TYPES.has(contentType))\n );\n}\n\nfunction decodeTextDataUrl(dataUrl: string): string | null {\n const match = dataUrl.match(\n /^data:([^;,]+)(?:;charset=[^;,]+)?(;base64)?,(.*)$/i,\n );\n if (!match || !isTextAttachmentContentType(match[1])) return null;\n\n try {\n const payload = match[3] ?? \"\";\n if (match[2]) {\n if (typeof atob === \"function\") {\n return decodeURIComponent(\n Array.from(\n atob(payload),\n (char) => `%${char.charCodeAt(0).toString(16).padStart(2, \"0\")}`,\n ).join(\"\"),\n );\n }\n return null;\n }\n return decodeURIComponent(payload.replace(/\\+/g, \"%20\"));\n } catch {\n return null;\n }\n}\n\nfunction extractAttachmentsFromMessage(message: {\n attachments?: readonly AssistantUiAttachment[];\n}): AgentChatAdapterAttachment[] {\n const attachments: AgentChatAdapterAttachment[] = [];\n for (const att of message.attachments ?? []) {\n for (const part of att.content) {\n if (part.type === \"image\" && typeof part.image === \"string\") {\n attachments.push({\n type: \"image\",\n name: att.name,\n contentType: att.contentType,\n data: part.image,\n });\n } else if (part.type === \"file\" && typeof part.data === \"string\") {\n const contentType =\n att.contentType ??\n (typeof part.mimeType === \"string\" ? part.mimeType : undefined);\n const decodedText = part.data.startsWith(\"data:\")\n ? decodeTextDataUrl(part.data)\n : null;\n attachments.push({\n type: \"file\",\n name: att.name,\n contentType,\n ...(decodedText !== null\n ? { text: truncateOutboundAttachment(decodedText) }\n : part.data.startsWith(\"data:\")\n ? { data: part.data }\n : { text: truncateOutboundAttachment(part.data) }),\n });\n } else if (part.type === \"text\" && typeof part.text === \"string\") {\n attachments.push({\n type: \"file\",\n name: att.name,\n contentType: att.contentType,\n text: truncateOutboundAttachment(unwrapAttachmentEnvelope(part.text)),\n });\n }\n }\n }\n return attachments;\n}\n\nfunction truncateHistoryAttachment(text: string): string {\n if (text.length <= MAX_HISTORY_ATTACHMENT_CHARS) return text;\n const omitted = text.length - MAX_HISTORY_ATTACHMENT_CHARS;\n return `${text.slice(0, MAX_HISTORY_ATTACHMENT_CHARS)}\\n\\n[Attachment truncated after ${MAX_HISTORY_ATTACHMENT_CHARS.toLocaleString()} characters; ${omitted.toLocaleString()} characters omitted from prior chat history.]`;\n}\n\nfunction truncateOutboundAttachment(text: string): string {\n if (text.length <= MAX_HISTORY_ATTACHMENT_CHARS) return text;\n const omitted = text.length - MAX_HISTORY_ATTACHMENT_CHARS;\n return `${text.slice(0, MAX_HISTORY_ATTACHMENT_CHARS)}\\n\\n[Attachment truncated after ${MAX_HISTORY_ATTACHMENT_CHARS.toLocaleString()} characters; ${omitted.toLocaleString()} characters omitted from the submitted attachment.]`;\n}\n\nfunction attachmentHistoryText(\n attachment: AgentChatAdapterAttachment,\n): string | null {\n if (typeof attachment.text === \"string\" && attachment.text.length > 0) {\n const attrs = [\n `name=\"${escapeAttachmentAttribute(attachment.name || \"attachment\")}\"`,\n attachment.contentType\n ? `contentType=\"${escapeAttachmentAttribute(attachment.contentType)}\"`\n : null,\n attachment.type\n ? `type=\"${escapeAttachmentAttribute(attachment.type)}\"`\n : null,\n ].filter(Boolean);\n return `<attachment ${attrs.join(\" \")}>\\n${truncateHistoryAttachment(attachment.text)}\\n</attachment>`;\n }\n\n if (attachment.name) {\n return `[Attached ${attachment.type || \"file\"}: ${attachment.name}${attachment.contentType ? ` (${attachment.contentType})` : \"\"}]`;\n }\n return null;\n}\n\nfunction messageTextForHistory(message: {\n content: readonly { type: string; text?: string }[];\n attachments?: readonly AssistantUiAttachment[];\n}): string {\n const text = messageTextFromContent(message.content);\n const attachments = extractAttachmentsFromMessage(message)\n .map(attachmentHistoryText)\n .filter((part): part is string => !!part && part.trim().length > 0);\n return [text, ...attachments].filter((part) => part.trim()).join(\"\\n\\n\");\n}\n\nfunction isToolCallContentPart(\n part: unknown,\n): part is Extract<ContentPart, { type: \"tool-call\" }> {\n return Boolean(\n part && typeof part === \"object\" && (part as any).type === \"tool-call\",\n );\n}\n\nfunction toolResultContent(result: unknown): string {\n if (typeof result === \"string\") return result;\n try {\n return JSON.stringify(result);\n } catch {\n return String(result ?? \"\");\n }\n}\n\nfunction contentToStructuredMessages(\n content: readonly ContentPart[],\n nextToolCallId: () => string,\n): AgentChatStructuredMessage[] {\n const messages: AgentChatStructuredMessage[] = [];\n let assistantParts: AgentChatStructuredContentPart[] = [];\n let pendingToolResults: AgentChatStructuredContentPart[] = [];\n\n const flushToolTurn = () => {\n if (pendingToolResults.length === 0) return;\n if (assistantParts.length > 0) {\n messages.push({ role: \"assistant\", content: assistantParts });\n }\n messages.push({ role: \"user\", content: pendingToolResults });\n assistantParts = [];\n pendingToolResults = [];\n };\n\n for (const part of content) {\n if (part.type === \"text\") {\n if (pendingToolResults.length > 0) flushToolTurn();\n if (part.text.trim()) {\n assistantParts.push({ type: \"text\", text: part.text });\n }\n continue;\n }\n\n if (isToolCallContentPart(part)) {\n const toolCallId = nextToolCallId();\n assistantParts.push({\n type: \"tool-call\",\n toolCallId,\n toolName: part.toolName,\n args: part.args ?? {},\n });\n if (part.result !== undefined) {\n pendingToolResults.push({\n type: \"tool-result\",\n toolCallId,\n toolName: part.toolName,\n content: toolResultContent(part.result),\n });\n }\n }\n }\n\n flushToolTurn();\n if (assistantParts.length > 0) {\n messages.push({ role: \"assistant\", content: assistantParts });\n }\n return messages;\n}\n\nfunction assistantUiMessagesToStructuredHistory(\n messages: readonly {\n role: string;\n content: readonly any[];\n attachments?: readonly AssistantUiAttachment[];\n }[],\n): AgentChatStructuredMessage[] {\n let nextId = 0;\n const nextToolCallId = () => `history_tc_${++nextId}`;\n const structured: AgentChatStructuredMessage[] = [];\n\n for (const message of messages) {\n if (message.role === \"user\") {\n const text = messageTextForHistory(message);\n if (text.trim()) {\n structured.push({\n role: \"user\",\n content: [{ type: \"text\", text }],\n });\n }\n continue;\n }\n\n if (message.role !== \"assistant\") continue;\n const content: ContentPart[] = [];\n for (const part of message.content) {\n if (part?.type === \"text\" && typeof part.text === \"string\") {\n content.push({ type: \"text\", text: part.text });\n continue;\n }\n if (part?.type === \"tool-call\") {\n content.push({\n type: \"tool-call\",\n toolCallId:\n typeof part.toolCallId === \"string\" ? part.toolCallId : \"\",\n toolName:\n typeof part.toolName === \"string\"\n ? part.toolName\n : typeof part.toolName === \"undefined\"\n ? \"unknown\"\n : String(part.toolName),\n argsText:\n typeof part.argsText === \"string\"\n ? part.argsText\n : JSON.stringify(part.args ?? {}),\n args:\n part.args &&\n typeof part.args === \"object\" &&\n !Array.isArray(part.args)\n ? part.args\n : {},\n ...(part.result !== undefined\n ? { result: toolResultContent(part.result) }\n : {}),\n });\n }\n }\n structured.push(...contentToStructuredMessages(content, nextToolCallId));\n }\n\n return structured;\n}\n\nfunction combineContinuationHistory(fragments: string[]): string {\n return truncateForContinuation(\n fragments.filter(Boolean).join(\"\\n\\n\"),\n 40_000,\n ).trim();\n}\n\nfunction visibleTransientContinuationContent(\n content: ContentPart[],\n): ContentPart[] {\n return content.filter(\n (part) => part.type === \"tool-call\" && part.result !== undefined,\n );\n}\n\nfunction hasContinuationProgress(content: ContentPart[]): boolean {\n return content.some((part) =>\n part.type === \"text\"\n ? part.text.trim().length > 0\n : part.result !== undefined,\n );\n}\n\nfunction snapshotContent(content: ContentPart[]): ContentPart[] {\n return content.map((part) =>\n part.type === \"text\" ? { ...part } : { ...part, args: { ...part.args } },\n );\n}\n\nfunction autoContinueMessage(signal: AgentAutoContinueSignal): string {\n const reason =\n signal.reason === \"loop_limit\"\n ? \"The previous run reached an internal step budget.\"\n : signal.reason === \"stale_run\"\n ? \"The previous run stopped unexpectedly in the server runtime before it could finish.\"\n : signal.reason === \"no_progress\"\n ? \"The previous run stopped producing progress events while the connection stayed open.\"\n : signal.reason === \"stream_ended\"\n ? \"The previous stream ended before the agent sent a final completion signal.\"\n : \"The previous run reached an internal execution budget.\";\n return `${AUTO_CONTINUE_PROMPT}\\n\\nInternal note: ${reason}`;\n}\n\nfunction delay(ms: number, abortSignal: AbortSignal): Promise<void> {\n if (abortSignal.aborted) return Promise.resolve();\n return new Promise((resolve) => {\n const timer = setTimeout(resolve, ms);\n abortSignal.addEventListener(\n \"abort\",\n () => {\n clearTimeout(timer);\n resolve();\n },\n { once: true },\n );\n });\n}\n\nfunction retryDelay(attempt: number, abortSignal: AbortSignal): Promise<void> {\n const base = Math.min(\n RETRY_MAX_DELAY_MS,\n RETRY_BASE_DELAY_MS * Math.pow(2, attempt),\n );\n const jitter = base * 0.2;\n const ms = Math.max(0, base + (Math.random() * 2 - 1) * jitter);\n return delay(ms, abortSignal);\n}\n\nfunction isRetryableStartupError(message: string): boolean {\n const msg = message.toLowerCase();\n if (\n msg.includes(\"unauthorized\") ||\n msg.includes(\"not authenticated\") ||\n msg.includes(\"401\") ||\n msg.includes(\"403\") ||\n msg.includes(\"404\") ||\n msg.includes(\"405\") ||\n msg.includes(\"missing api key\") ||\n msg.includes(\"api key\") ||\n msg.includes(\"context_length\") ||\n msg.includes(\"input_too_long\") ||\n msg.includes(\"too many tokens\") ||\n msg.includes(\"prompt is too long\") ||\n msg.includes(\"credits-limit\") ||\n msg.includes(\"billing\") ||\n msg.includes(\"permission\")\n ) {\n return false;\n }\n return (\n msg.includes(\"failed to fetch\") ||\n msg.includes(\"network\") ||\n msg.includes(\"connection\") ||\n msg.includes(\"reset\") ||\n msg.includes(\"econnreset\") ||\n msg.includes(\"socket\") ||\n msg.includes(\"timeout\") ||\n msg.includes(\"gateway timeout\") ||\n msg.includes(\"inactivity timeout\") ||\n msg.includes(\"temporarily unavailable\") ||\n msg.includes(\"server error: 408\") ||\n msg.includes(\"server error: 429\") ||\n msg.includes(\"server error: 500\") ||\n msg.includes(\"server error: 502\") ||\n msg.includes(\"server error: 503\") ||\n msg.includes(\"server error: 504\") ||\n msg.includes(\"429\") ||\n msg.includes(\"500\") ||\n msg.includes(\"502\") ||\n msg.includes(\"503\") ||\n msg.includes(\"504\") ||\n msg.includes(\"529\")\n );\n}\n\nfunction isAuthErrorMessage(message: string): boolean {\n const msg = message.toLowerCase();\n return (\n msg.includes(\"authentication required\") ||\n msg.includes(\"unauthorized\") ||\n msg.includes(\"not authenticated\") ||\n msg.includes(\"forbidden\") ||\n msg.includes(\"invalid token\") ||\n msg.includes(\"invalid or expired token\") ||\n msg.includes(\"session expired\") ||\n msg.includes(\"http_401\") ||\n msg.includes(\"http_403\") ||\n msg.includes(\"401\") ||\n msg.includes(\"403\") ||\n msg.includes(\"405\")\n );\n}\n\nfunction authErrorReasonFromMessage(\n message: string,\n): \"auth-required\" | \"session-expired\" {\n const msg = message.toLowerCase();\n return msg.includes(\"session\") ||\n msg.includes(\"expired\") ||\n msg.includes(\"invalid token\") ||\n msg.includes(\"405\")\n ? \"session-expired\"\n : \"auth-required\";\n}\n\nfunction authErrorText(\n reason: \"auth-required\" | \"session-expired\",\n message?: string,\n): string {\n const fallback =\n reason === \"session-expired\"\n ? \"Your chat session expired. Refresh chat and sign in again to continue.\"\n : \"Authentication required. Sign in again to use chat.\";\n\n if (!message) return formatChatErrorText(fallback);\n\n try {\n const parsed = JSON.parse(message) as {\n error?: unknown;\n message?: unknown;\n };\n const raw =\n typeof parsed.error === \"string\"\n ? parsed.error\n : typeof parsed.message === \"string\"\n ? parsed.message\n : undefined;\n return formatChatErrorText(raw || fallback);\n } catch {\n return formatChatErrorText(message || fallback);\n }\n}\n\nfunction safeAgentNativePath(path: string): string {\n try {\n return agentNativePath(path);\n } catch {\n return path;\n }\n}\n\nfunction isMissingCredentialMessage(message: string): boolean {\n const msg = message.toLowerCase();\n return (\n msg.includes(\"apikey\") ||\n msg.includes(\"authtoken\") ||\n msg.includes(\"anthropic_api_key\") ||\n msg.includes(\"missing_api_key\") ||\n msg.includes(\"missing api key\") ||\n msg.includes(\"missing credentials\") ||\n msg.includes(\"no llm provider\") ||\n msg.includes(\"llm provider is connected\")\n );\n}\n\nfunction missingCredentialErrorText(message: string): string {\n try {\n const parsed = JSON.parse(message) as {\n error?: unknown;\n message?: unknown;\n upgradeUrl?: unknown;\n errorCode?: unknown;\n };\n const raw =\n typeof parsed.error === \"string\"\n ? parsed.error\n : typeof parsed.message === \"string\"\n ? parsed.message\n : message;\n return formatChatErrorText(\n raw,\n typeof parsed.upgradeUrl === \"string\" ? parsed.upgradeUrl : undefined,\n typeof parsed.errorCode === \"string\" ? parsed.errorCode : undefined,\n );\n } catch {\n return formatChatErrorText(message);\n }\n}\n\n/**\n * The composer's exec mode is sent as explicit request metadata. The server\n * owns the plan-mode prompt and read-only tool filtering so the chat history\n * stays clean and Plan mode is enforced outside the model's goodwill.\n */\n/**\n * Creates a ChatModelAdapter that connects to the agent-native\n * `/_agent-native/agent-chat` SSE endpoint. Supports reconnection via run-manager.\n */\nexport function createAgentChatAdapter(options?: {\n apiUrl?: string;\n tabId?: string;\n threadId?: string;\n modelRef?: { current: string | undefined };\n engineRef?: { current: string | undefined };\n effortRef?: { current: ReasoningEffort | undefined };\n execModeRef?: { current: \"build\" | \"plan\" | undefined };\n}): ChatModelAdapter {\n const apiUrl =\n options?.apiUrl ?? agentNativePath(\"/_agent-native/agent-chat\");\n const tabId = options?.tabId;\n const threadId = options?.threadId;\n const modelRef = options?.modelRef;\n const engineRef = options?.engineRef;\n const effortRef = options?.effortRef;\n const execModeRef = options?.execModeRef;\n\n return {\n async *run({ messages, abortSignal, runConfig }) {\n // Extract latest user message and build history from prior messages\n let lastUserMsg: (typeof messages)[number] | undefined;\n for (let i = messages.length - 1; i >= 0; i--) {\n if (messages[i].role === \"user\") {\n lastUserMsg = messages[i];\n break;\n }\n }\n const rawMessageText =\n lastUserMsg?.content\n .filter((p): p is { type: \"text\"; text: string } => p.type === \"text\")\n .map((p) => p.text)\n .join(\"\\n\") ?? \"\";\n const runConfigRequestMode =\n runConfig?.custom &&\n typeof runConfig.custom === \"object\" &&\n \"requestMode\" in runConfig.custom\n ? (runConfig.custom as { requestMode?: unknown }).requestMode\n : undefined;\n const requestMode =\n runConfigRequestMode === \"act\" || runConfigRequestMode === \"plan\"\n ? runConfigRequestMode\n : execModeRef?.current === \"plan\"\n ? \"plan\"\n : execModeRef?.current === \"build\"\n ? \"act\"\n : undefined;\n\n // Extract attachments (images as base64, text as content).\n // assistant-ui puts user attachments on msg.attachments (not on content);\n // each attachment carries its own content parts from the adapter.\n const attachments = lastUserMsg\n ? extractAttachmentsFromMessage(lastUserMsg as any)\n : [];\n const userMessageText =\n rawMessageText.trim() || attachments.length === 0\n ? rawMessageText\n : \"Use the attached context.\";\n\n const priorMessages = messages.slice(0, -1); // exclude latest user message\n const history = priorMessages\n .filter((m) => m.role === \"user\" || m.role === \"assistant\")\n .map((m) => ({\n role: m.role as \"user\" | \"assistant\",\n content:\n m.role === \"user\"\n ? messageTextForHistory(m as any)\n : messageTextFromContent(m.content),\n }))\n .filter((m) => m.content.trim());\n const structuredHistory =\n assistantUiMessagesToStructuredHistory(priorMessages);\n\n // Signal that generation is starting\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new CustomEvent(\"agentNative.chatRunning\", {\n detail: { isRunning: true, tabId },\n }),\n );\n }\n\n const content: ContentPart[] = [];\n const toolCallCounter = { value: 0 };\n let runId: string | null = null;\n let lastSeq = -1;\n let currentMessageText = normalizeMentions(userMessageText);\n let currentHistory: AdapterHistoryMessage[] = history;\n let currentStructuredHistory: AgentChatStructuredMessage[] =\n structuredHistory;\n let includeAttachments = attachments.length > 0;\n let includeReferences = Boolean(runConfig?.custom?.references);\n let internalContinuationRequest = false;\n let startupRecoveryAttempts = 0;\n let staleRunContinuationAttempts = 0;\n let stalledTransientContinuationAttempts = 0;\n let totalTransientContinuationAttempts = 0;\n const continuationHistoryFragments: string[] = [];\n const structuredContinuationFragments: AgentChatStructuredMessage[] = [];\n let visibleContinuationPrefix: ContentPart[] = [];\n let lastAutoContinueReason: string | null = null;\n const attemptedRunIds: string[] = [];\n let authRecoveryAttempted = false;\n let continuationToolCallCounter = 0;\n const nextContinuationToolCallId = () =>\n `continuation_tc_${++continuationToolCallCounter}`;\n\n const connectionRecoveryDetails = (): string => {\n return [\n lastAutoContinueReason\n ? `last_auto_continue_reason: ${lastAutoContinueReason}`\n : \"\",\n `stale_run_continuations: ${staleRunContinuationAttempts}`,\n `stalled_transient_continuations: ${stalledTransientContinuationAttempts}`,\n `total_transient_continuations: ${totalTransientContinuationAttempts}`,\n attemptedRunIds.length > 0\n ? `attempted_runs: ${attemptedRunIds.join(\", \")}`\n : \"\",\n ]\n .filter(Boolean)\n .join(\"\\n\");\n };\n\n const dispatchAuthError = (\n reason: \"auth-required\" | \"session-expired\",\n ) => {\n if (typeof window === \"undefined\") return;\n window.dispatchEvent(\n new CustomEvent(\"agent-chat:auth-error\", {\n detail: {\n reason,\n ...(tabId ? { tabId } : {}),\n ...(threadId ? { threadId } : {}),\n },\n }),\n );\n };\n\n const tryRecoverAuthOnce = async (): Promise<boolean> => {\n if (authRecoveryAttempted || abortSignal.aborted) return false;\n authRecoveryAttempted = true;\n try {\n const sessionRes = await fetch(\n safeAgentNativePath(\"/_agent-native/auth/session\"),\n {\n method: \"GET\",\n headers: { Accept: \"application/json\" },\n cache: \"no-store\",\n credentials: \"same-origin\",\n signal: abortSignal,\n },\n );\n if (!sessionRes.ok) return false;\n const session = await sessionRes.json().catch(() => null);\n return Boolean(session && !session.error);\n } catch {\n return false;\n }\n };\n\n const captureChatClientError = (\n error: unknown,\n phase: string,\n extra: Record<string, unknown> = {},\n ) => {\n captureError(error, {\n tags: {\n source: \"agent-chat-client\",\n phase,\n hasThread: threadId ? \"true\" : \"false\",\n hasRun: runId ? \"true\" : \"false\",\n lastAutoContinueReason: lastAutoContinueReason ?? undefined,\n },\n extra: {\n apiUrl,\n tabId,\n threadId,\n runId,\n lastSeq,\n contentParts: content.length,\n attemptedRunIds: [...attemptedRunIds],\n startupRecoveryAttempts,\n staleRunContinuationAttempts,\n stalledTransientContinuationAttempts,\n totalTransientContinuationAttempts,\n ...extra,\n },\n contexts: {\n agentChat: {\n tabId,\n threadId,\n runId,\n lastSeq,\n contentParts: content.length,\n startupRecoveryAttempts,\n staleRunContinuationAttempts,\n stalledTransientContinuationAttempts,\n totalTransientContinuationAttempts,\n },\n },\n });\n };\n\n try {\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n };\n try {\n const tz = Intl.DateTimeFormat().resolvedOptions().timeZone;\n if (tz) headers[\"x-user-timezone\"] = tz;\n } catch {\n // Non-browser or Intl unavailable — tool calls will fall back to UTC.\n }\n\n const reconnectCurrentRun = async function* (): AsyncGenerator<\n ChatModelRunResult,\n boolean,\n unknown\n > {\n if (!runId) return false;\n let lastReconnectError: unknown = null;\n let reconnectErrorCaptured = false;\n for (let attempt = 0; attempt < MAX_RECONNECT_ATTEMPTS; attempt++) {\n try {\n const reconnectRes = await fetch(\n `${apiUrl}/runs/${encodeURIComponent(runId)}/events?after=${lastSeq + 1}`,\n { signal: abortSignal },\n );\n if (!reconnectRes.ok || !reconnectRes.body) {\n lastReconnectError = new Error(\n `Reconnect failed: ${reconnectRes.status}`,\n );\n captureChatClientError(\n lastReconnectError,\n \"reconnect-current-response\",\n {\n status: reconnectRes.status,\n hasBody: Boolean(reconnectRes.body),\n attempt,\n },\n );\n reconnectErrorCaptured = true;\n break;\n }\n\n yield* readSSEStream(\n reconnectRes.body,\n content,\n toolCallCounter,\n tabId,\n (seq) => {\n lastSeq = seq;\n if (threadId) updateActiveRunSeq(seq);\n },\n runId,\n );\n clearActiveRun();\n return true;\n } catch (reconnectErr: unknown) {\n if (\n reconnectErr instanceof Error &&\n reconnectErr.name === \"AbortError\"\n ) {\n clearActiveRun();\n return true;\n }\n if (reconnectErr instanceof AgentAutoContinueSignal) {\n if (reconnectErr.reason === \"no_progress\") {\n throw reconnectErr;\n }\n return false;\n }\n lastReconnectError = reconnectErr;\n await retryDelay(attempt, abortSignal);\n }\n }\n if (lastReconnectError && !reconnectErrorCaptured) {\n captureChatClientError(\n lastReconnectError,\n \"reconnect-current-failed\",\n );\n }\n return false;\n };\n\n const abortCurrentRun = async (): Promise<void> => {\n if (!runId) return;\n try {\n await fetch(`${apiUrl}/runs/${encodeURIComponent(runId)}/abort`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ reason: \"no_progress\" }),\n signal: abortSignal,\n });\n } catch {\n // Best effort. The follow-up POST will still reconnect or 409 if\n // the producer is alive and cannot be aborted cross-isolate.\n } finally {\n clearActiveRun();\n }\n };\n\n const reconnectActiveRunForThread = async function* (): AsyncGenerator<\n ChatModelRunResult,\n boolean,\n unknown\n > {\n if (!threadId) return false;\n let lastActiveRunError: unknown = null;\n for (let attempt = 0; attempt < MAX_RECONNECT_ATTEMPTS; attempt++) {\n try {\n const activeRes = await fetch(\n `${apiUrl}/runs/active?threadId=${encodeURIComponent(threadId)}`,\n { signal: abortSignal },\n );\n if (!activeRes.ok) {\n lastActiveRunError = new Error(\n `Active run lookup failed: ${activeRes.status}`,\n );\n captureChatClientError(\n lastActiveRunError,\n \"reconnect-active-response\",\n { status: activeRes.status, attempt },\n );\n return false;\n }\n const active = await activeRes.json();\n if (active?.active && active.runId) {\n const activeRunId = String(active.runId);\n runId = activeRunId;\n if (!attemptedRunIds.includes(activeRunId)) {\n attemptedRunIds.push(activeRunId);\n }\n lastSeq = -1;\n setActiveRun({ threadId, runId: activeRunId, lastSeq: -1 });\n const reconnected = yield* reconnectCurrentRun();\n if (reconnected) return true;\n }\n return false;\n } catch (activeErr: unknown) {\n if (\n activeErr instanceof Error &&\n activeErr.name === \"AbortError\"\n ) {\n clearActiveRun();\n return true;\n }\n lastActiveRunError = activeErr;\n await retryDelay(attempt, abortSignal);\n }\n }\n if (lastActiveRunError) {\n captureChatClientError(\n lastActiveRunError,\n \"reconnect-active-failed\",\n );\n }\n return false;\n };\n\n const visibleContentForContinuation = (): ContentPart[] => {\n if (\n visibleContinuationPrefix.length > 0 &&\n visibleContinuationPrefix.every(\n (part, index) => content[index] === part,\n )\n ) {\n return content.slice(visibleContinuationPrefix.length);\n }\n return content;\n };\n\n const prepareAutoContinuation = (\n signal: AgentAutoContinueSignal,\n ): { ok: boolean; resetVisibleContent: boolean } => {\n lastAutoContinueReason = signal.reason;\n const isTransient = signal.reason !== \"loop_limit\";\n const visibleContent = visibleContentForContinuation();\n const currentPartialHistory =\n contentToContinuationHistory(visibleContent);\n const madeProgress = hasContinuationProgress(visibleContent);\n\n if (signal.reason === \"loop_limit\") {\n stalledTransientContinuationAttempts = 0;\n } else {\n totalTransientContinuationAttempts += 1;\n if (signal.reason === \"stale_run\") {\n staleRunContinuationAttempts += 1;\n if (staleRunContinuationAttempts > MAX_STALE_RUN_CONTINUATIONS) {\n return { ok: false, resetVisibleContent: false };\n }\n }\n stalledTransientContinuationAttempts = madeProgress\n ? 0\n : stalledTransientContinuationAttempts + 1;\n if (\n stalledTransientContinuationAttempts >\n MAX_STALLED_TRANSIENT_CONTINUATIONS ||\n totalTransientContinuationAttempts >\n MAX_TOTAL_TRANSIENT_CONTINUATIONS\n ) {\n return { ok: false, resetVisibleContent: false };\n }\n }\n\n if (isTransient && currentPartialHistory) {\n continuationHistoryFragments.push(currentPartialHistory);\n }\n const partialHistory = combineContinuationHistory(\n isTransient\n ? continuationHistoryFragments\n : [...continuationHistoryFragments, currentPartialHistory],\n );\n const structuredPartialHistory = contentToStructuredMessages(\n visibleContent,\n nextContinuationToolCallId,\n );\n if (isTransient && structuredPartialHistory.length > 0) {\n structuredContinuationFragments.push(...structuredPartialHistory);\n }\n const structuredCombinedHistory = isTransient\n ? structuredContinuationFragments\n : [...structuredContinuationFragments, ...structuredPartialHistory];\n currentHistory = [\n ...history,\n { role: \"user\", content: normalizeMentions(userMessageText) },\n ...(partialHistory\n ? [{ role: \"assistant\" as const, content: partialHistory }]\n : []),\n ];\n currentStructuredHistory = [\n ...structuredHistory,\n {\n role: \"user\",\n content: [\n { type: \"text\", text: normalizeMentions(userMessageText) },\n ],\n },\n ...structuredCombinedHistory,\n ];\n currentMessageText = autoContinueMessage(signal);\n // Continuation requests are stateless new POSTs. If the interrupted\n // turn depended on uploaded context, re-send that context; otherwise\n // an attachment-only prompt degrades to \"Use the attached context.\"\n // with nothing attached after a stale run or reconnect recovery.\n includeAttachments = attachments.length > 0;\n includeReferences = Boolean(runConfig?.custom?.references);\n internalContinuationRequest = true;\n startupRecoveryAttempts = 0;\n clearActiveRun();\n if (!isTransient) {\n return { ok: true, resetVisibleContent: false };\n }\n\n const preservedContent = visibleTransientContinuationContent(content);\n content.splice(0, content.length, ...preservedContent);\n visibleContinuationPrefix = preservedContent;\n return { ok: true, resetVisibleContent: true };\n };\n\n while (true) {\n try {\n runId = null;\n lastSeq = -1;\n const res = await fetch(apiUrl, {\n method: \"POST\",\n headers,\n body: JSON.stringify({\n message: currentMessageText,\n displayMessage: userMessageText,\n history: currentHistory,\n structuredHistory: currentStructuredHistory,\n ...(threadId ? { threadId } : {}),\n ...(internalContinuationRequest\n ? { internalContinuation: true }\n : {}),\n ...(requestMode ? { mode: requestMode } : {}),\n ...(modelRef?.current ? { model: modelRef.current } : {}),\n ...(engineRef?.current ? { engine: engineRef.current } : {}),\n ...(effortRef?.current ? { effort: effortRef.current } : {}),\n ...(includeAttachments ? { attachments } : {}),\n ...(includeReferences && runConfig?.custom?.references\n ? { references: runConfig.custom.references }\n : {}),\n }),\n signal: abortSignal,\n });\n\n // Check for auth errors returned as 200 with JSON (common with middleware issues)\n const contentType = res.headers.get(\"content-type\") || \"\";\n if (\n res.ok &&\n contentType.includes(\"application/json\") &&\n !contentType.includes(\"text/event-stream\")\n ) {\n try {\n const body = await res.text();\n const parsed = JSON.parse(body);\n if (parsed.error) {\n throw new Error(parsed.error);\n }\n } catch (e) {\n if (\n e instanceof Error &&\n e.message !== \"Unexpected end of JSON input\"\n ) {\n throw e;\n }\n }\n }\n\n if (!res.ok) {\n if (res.status === 409) {\n let handledConflict = false;\n try {\n const body = await res.json();\n if (body?.activeRunId) {\n handledConflict = true;\n runId = String(body.activeRunId);\n if (!attemptedRunIds.includes(runId)) {\n attemptedRunIds.push(runId);\n }\n lastSeq = -1;\n if (threadId) {\n setActiveRun({ threadId, runId, lastSeq: -1 });\n }\n const reconnected = yield* reconnectCurrentRun();\n if (reconnected) return;\n }\n } catch {\n // Fall through to the generic response handling below.\n }\n if (handledConflict) {\n await delay(1000, abortSignal);\n if (abortSignal.aborted) return;\n continue;\n }\n }\n\n if (res.status === 401 || res.status === 403) {\n if (await tryRecoverAuthOnce()) {\n continue;\n }\n dispatchAuthError(\"auth-required\");\n content.push({\n type: \"text\",\n text: authErrorText(\"auth-required\"),\n });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n } as ChatModelRunResult;\n return;\n }\n\n // 405 Method Not Allowed usually means the session is broken/expired\n // (e.g. a redirect to a login page that only accepts GET).\n if (res.status === 405) {\n if (await tryRecoverAuthOnce()) {\n continue;\n }\n dispatchAuthError(\"session-expired\");\n content.push({\n type: \"text\",\n text: authErrorText(\"session-expired\"),\n });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n } as ChatModelRunResult;\n return;\n }\n\n let errorText = `Server error: ${res.status}`;\n try {\n const body = await res.text();\n if (isAuthErrorMessage(body)) {\n if (await tryRecoverAuthOnce()) {\n continue;\n }\n const reason = authErrorReasonFromMessage(body);\n dispatchAuthError(reason);\n content.push({\n type: \"text\",\n text: authErrorText(reason, body),\n });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n } as ChatModelRunResult;\n return;\n }\n if (isMissingCredentialMessage(body)) {\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new Event(\"agent-chat:missing-api-key\"),\n );\n }\n content.push({\n type: \"text\",\n text: missingCredentialErrorText(body),\n });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n } as ChatModelRunResult;\n return;\n } else if (body.includes(\"Cannot find any path\")) {\n errorText =\n \"Agent chat endpoint not found. Make sure the agent-chat plugin is loaded in server/plugins/.\";\n } else if (body) {\n errorText =\n body.length > 200 ? body.slice(0, 200) + \"...\" : body;\n }\n } catch {}\n throw new Error(errorText);\n }\n if (!res.body) {\n throw new Error(\"No response body\");\n }\n\n // Track the run ID for reconnection\n runId = res.headers.get(\"X-Run-Id\");\n if (runId && !attemptedRunIds.includes(runId)) {\n attemptedRunIds.push(runId);\n }\n if (runId && threadId) {\n setActiveRun({ threadId, runId, lastSeq: -1 });\n }\n\n yield* readSSEStream(\n res.body,\n content,\n toolCallCounter,\n tabId,\n (seq) => {\n lastSeq = seq;\n if (runId && threadId) {\n updateActiveRunSeq(seq);\n }\n },\n runId,\n );\n\n // Run completed normally — clear active run state\n clearActiveRun();\n return;\n } catch (err: unknown) {\n if (err instanceof Error && err.name === \"AbortError\") {\n // User-initiated abort (Stop button) — clear active run\n clearActiveRun();\n return;\n }\n\n if (err instanceof AgentAutoContinueSignal) {\n if (err.reason === \"no_progress\") {\n await abortCurrentRun();\n }\n if (err.reason === \"stream_ended\") {\n const reconnected = yield* reconnectCurrentRun();\n if (reconnected) return;\n const activeReconnected = yield* reconnectActiveRunForThread();\n if (activeReconnected) return;\n }\n const continuation = prepareAutoContinuation(err);\n if (!continuation.ok) {\n const message =\n \"The agent connection kept failing after several automatic recovery attempts.\";\n captureChatClientError(err, \"auto-continuation-exhausted\", {\n autoContinueReason: err.reason,\n });\n const runError = {\n message,\n details: connectionRecoveryDetails(),\n errorCode: \"connection_error\",\n recoverable: true,\n ...(runId ? { runId } : {}),\n };\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new CustomEvent(\"agent-chat:run-error\", {\n detail: { ...runError, tabId },\n }),\n );\n }\n content.push({\n type: \"text\",\n text: `Something went wrong: ${message}`,\n });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n metadata: {\n custom: { ...(runId ? { runId } : {}), runError },\n },\n };\n clearActiveRun();\n return;\n }\n if (continuation.resetVisibleContent) {\n yield {\n content: snapshotContent(content),\n } as ChatModelRunResult;\n }\n await delay(250, abortSignal);\n if (abortSignal.aborted) return;\n continue;\n }\n\n const errMsg =\n err instanceof Error ? err.message : \"Something went wrong.\";\n const isAuthError = isAuthErrorMessage(errMsg);\n\n // Don't try to reconnect for auth/client errors — show error directly\n if (isAuthError) {\n if (await tryRecoverAuthOnce()) {\n continue;\n }\n const reason = authErrorReasonFromMessage(errMsg);\n dispatchAuthError(reason);\n content.push({\n type: \"text\",\n text: authErrorText(reason, errMsg),\n });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n };\n clearActiveRun();\n return;\n }\n\n if (isMissingCredentialMessage(errMsg)) {\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(new Event(\"agent-chat:missing-api-key\"));\n }\n content.push({\n type: \"text\",\n text: missingCredentialErrorText(errMsg),\n });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n };\n clearActiveRun();\n return;\n }\n\n // Connection lost — try to reconnect to the run\n const reconnected = yield* reconnectCurrentRun();\n if (reconnected) return;\n const activeReconnected = yield* reconnectActiveRunForThread();\n if (activeReconnected) return;\n\n // Reconnect failed or not possible — keep going from the partial\n // streamed content instead of surfacing a transient transport error.\n if (content.length > 0) {\n const continuation = prepareAutoContinuation(\n new AgentAutoContinueSignal({ reason: \"stream_ended\" }),\n );\n if (!continuation.ok) {\n const message =\n \"The agent connection kept failing after several automatic recovery attempts.\";\n captureChatClientError(err, \"recovery-exhausted\");\n const runError = {\n message,\n details: connectionRecoveryDetails(),\n errorCode: \"connection_error\",\n recoverable: true,\n ...(runId ? { runId } : {}),\n };\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new CustomEvent(\"agent-chat:run-error\", {\n detail: { ...runError, tabId },\n }),\n );\n }\n content.push({\n type: \"text\",\n text: `Something went wrong: ${message}`,\n });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n metadata: {\n custom: { ...(runId ? { runId } : {}), runError },\n },\n };\n clearActiveRun();\n return;\n }\n if (continuation.resetVisibleContent) {\n yield {\n content: snapshotContent(content),\n } as ChatModelRunResult;\n }\n await delay(250, abortSignal);\n if (abortSignal.aborted) return;\n continue;\n }\n\n if (\n isRetryableStartupError(errMsg) &&\n startupRecoveryAttempts < MAX_STARTUP_RECOVERY_ATTEMPTS\n ) {\n await retryDelay(startupRecoveryAttempts++, abortSignal);\n if (abortSignal.aborted) return;\n continue;\n }\n\n // No partial work exists, so this is still a real startup failure.\n captureChatClientError(err, \"startup-failed\", {\n retryableStartupError: isRetryableStartupError(errMsg),\n });\n const normalized = normalizeChatError(errMsg);\n const runError = {\n message: normalized.message,\n ...(normalized.details ? { details: normalized.details } : {}),\n errorCode: \"connection_error\",\n recoverable: true,\n ...(runId ? { runId } : {}),\n };\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new CustomEvent(\"agent-chat:run-error\", {\n detail: { ...runError, tabId },\n }),\n );\n }\n content.push({\n type: \"text\",\n text: errMsg.startsWith(\"Server error:\")\n ? errMsg\n : `Something went wrong: ${normalized.message}`,\n });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n metadata: { custom: { ...(runId ? { runId } : {}), runError } },\n };\n return;\n }\n }\n } finally {\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new CustomEvent(\"agentNative.chatRunning\", {\n detail: { isRunning: false, tabId },\n }),\n );\n }\n }\n },\n };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"use-chat-models.js","sourceRoot":"","sources":["../../src/client/use-chat-models.ts"],"names":[],"mappings":"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","sourcesContent":["import { useCallback, useEffect, useRef, useState } from \"react\";\nimport { agentNativePath } from \"./api-path.js\";\nimport { DEFAULT_MODEL } from \"../agent/default-model.js\";\nimport {\n getReasoningEffortOptionsForModel,\n type ReasoningEffort,\n} from \"../shared/reasoning-effort.js\";\n\nexport interface EngineModelGroup {\n engine: string;\n label: string;\n models: string[];\n configured: boolean;\n}\n\nexport interface UseChatModelsResult {\n availableModels: EngineModelGroup[];\n defaultModel: string;\n selectedModel: string;\n selectedEngine: string;\n selectedEffort: ReasoningEffort;\n onModelChange: (model: string, engine: string) => void;\n onEffortChange: (effort: ReasoningEffort) => void;\n refreshEngines: () => void;\n}\n\ninterface Options {\n /**\n * localStorage key used to persist the user's model + effort selection across\n * page loads. Pass `null` to disable persistence.\n */\n storageKey?: string | null;\n}\n\nconst DEFAULT_STORAGE_KEY = \"agent-native:chat-models:selection\";\n\ninterface PersistedSelection {\n model?: string;\n engine?: string;\n effort?: ReasoningEffort;\n}\n\nfunction readPersisted(key: string | null): PersistedSelection {\n if (!key || typeof window === \"undefined\") return {};\n try {\n const raw = window.localStorage.getItem(key);\n return raw ? (JSON.parse(raw) as PersistedSelection) : {};\n } catch {\n return {};\n }\n}\n\nfunction writePersisted(key: string | null, value: PersistedSelection) {\n if (!key || typeof window === \"undefined\") return;\n try {\n window.localStorage.setItem(key, JSON.stringify(value));\n } catch {}\n}\n\n/**\n * Fetches available engines/models from the agent server and exposes the same\n * model picker state that `MultiTabAssistantChat` wires up — for surfaces like\n * the Dispatch homepage hero composer that need an identical model picker\n * without mounting the full tabbed chat.\n */\nexport function useChatModels({\n storageKey = DEFAULT_STORAGE_KEY,\n}: Options = {}): UseChatModelsResult {\n const [availableModels, setAvailableModels] = useState<EngineModelGroup[]>(\n [],\n );\n const [defaultModel, setDefaultModel] = useState(DEFAULT_MODEL);\n\n const initialPersisted = readPersisted(storageKey);\n const [selectedModel, setSelectedModel] = useState<string>(\n initialPersisted.model ?? DEFAULT_MODEL,\n );\n const [selectedEngine, setSelectedEngine] = useState<string>(\n initialPersisted.engine ?? \"\",\n );\n const [selectedEffort, setSelectedEffort] = useState<ReasoningEffort>(\n initialPersisted.effort ?? \"auto\",\n );\n const selectionRef = useRef({\n selectedModel,\n selectedEngine,\n selectedEffort,\n });\n\n useEffect(() => {\n selectionRef.current = {\n selectedModel,\n selectedEngine,\n selectedEffort,\n };\n }, [selectedEffort, selectedEngine, selectedModel]);\n\n const onModelChange = useCallback(\n (model: string, engine: string) => {\n const effortOptions = getReasoningEffortOptionsForModel(model);\n setSelectedModel(model);\n setSelectedEngine(engine);\n setSelectedEffort((prevEffort) => {\n const next =\n prevEffort === \"auto\" || effortOptions.includes(prevEffort)\n ? prevEffort\n : \"auto\";\n writePersisted(storageKey, { model, engine, effort: next });\n return next;\n });\n },\n [storageKey],\n );\n\n const onEffortChange = useCallback(\n (effort: ReasoningEffort) => {\n setSelectedEffort(effort);\n writePersisted(storageKey, {\n model: selectedModel,\n engine: selectedEngine,\n effort,\n });\n },\n [selectedEngine, selectedModel, storageKey],\n );\n\n const refreshEngines = useCallback(() => {\n Promise.all([\n fetch(agentNativePath(\"/_agent-native/actions/manage-agent-engine\"), {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ action: \"list\" }),\n }).then((r) => (r.ok ? r.json() : null)),\n fetch(agentNativePath(\"/_agent-native/env-status\"))\n .then((r) => (r.ok ? r.json() : []))\n .catch(() => []),\n fetch(agentNativePath(\"/_agent-native/builder/status\"))\n .then((r) => (r.ok ? r.json() : null))\n .catch(() => null),\n ])\n .then(([enginesData, envKeys, builderStatus]) => {\n if (!enginesData?.engines) return;\n const configuredKeys = new Set(\n (envKeys as Array<{ key: string; configured: boolean }>)\n .filter((k) => k.configured)\n .map((k) => k.key),\n );\n const builderConnected = builderStatus?.configured === true;\n const currentEngineName: string | undefined =\n enginesData.current?.engine;\n const currentModel: string | undefined = enginesData.current?.model;\n\n let groups: EngineModelGroup[];\n\n if (builderConnected) {\n const builderEngine = enginesData.engines.find(\n (e: any) => e.name === \"builder\",\n );\n const builderModels: string[] = builderEngine?.supportedModels ?? [];\n const claude = builderModels.filter((m: string) =>\n m.startsWith(\"claude-\"),\n );\n const openai = builderModels.filter((m: string) =>\n m.startsWith(\"gpt-\"),\n );\n const gemini = builderModels.filter((m: string) =>\n m.startsWith(\"gemini-\"),\n );\n const other = builderModels.filter(\n (m: string) =>\n !m.startsWith(\"claude-\") &&\n !m.startsWith(\"gpt-\") &&\n !m.startsWith(\"gemini-\"),\n );\n\n groups = [\n ...(claude.length\n ? [\n {\n engine: \"builder\",\n label: \"Claude\",\n models: claude,\n configured: true,\n },\n ]\n : []),\n ...(openai.length\n ? [\n {\n engine: \"builder\",\n label: \"OpenAI\",\n models: openai,\n configured: true,\n },\n ]\n : []),\n ...(gemini.length\n ? [\n {\n engine: \"builder\",\n label: \"Gemini\",\n models: gemini,\n configured: true,\n },\n ]\n : []),\n ...(other.length\n ? [\n {\n engine: \"builder\",\n label: \"More\",\n models: other,\n configured: true,\n },\n ]\n : []),\n ];\n\n if (currentModel && !builderModels.includes(currentModel)) {\n const firstGroup = groups[0];\n if (firstGroup) firstGroup.models.unshift(currentModel);\n }\n } else {\n const allowedEngines = new Set([\n \"anthropic\",\n \"ai-sdk:openai\",\n \"ai-sdk:google\",\n ]);\n groups = enginesData.engines\n .filter((e: any) => allowedEngines.has(e.name))\n .map((e: any) => {\n const models = [...e.supportedModels];\n if (\n e.name === currentEngineName &&\n currentModel &&\n !models.includes(currentModel)\n ) {\n models.unshift(currentModel);\n }\n return {\n engine: e.name,\n label: e.label,\n models,\n configured:\n e.requiredEnvVars.length === 0 ||\n e.requiredEnvVars.some((v: string) =>\n configuredKeys.has(v),\n ) ||\n e.name === currentEngineName,\n };\n });\n }\n const nextDefaultModel = currentModel ?? DEFAULT_MODEL;\n setAvailableModels(groups);\n setDefaultModel(nextDefaultModel);\n\n const selection = selectionRef.current;\n const selectedGroup = groups.find(\n (group) =>\n group.models.includes(selection.selectedModel) &&\n (!selection.selectedEngine ||\n group.engine === selection.selectedEngine),\n );\n if (!selectedGroup) {\n const defaultGroup =\n groups.find((group) => group.models.includes(nextDefaultModel)) ??\n groups[0];\n const nextModel =\n defaultGroup?.models.find((model) => model === nextDefaultModel) ??\n defaultGroup?.models[0] ??\n nextDefaultModel;\n const nextEngine = defaultGroup?.engine ?? \"\";\n const effortOptions = getReasoningEffortOptionsForModel(nextModel);\n const nextEffort =\n selection.selectedEffort === \"auto\" ||\n effortOptions.includes(selection.selectedEffort)\n ? selection.selectedEffort\n : \"auto\";\n setSelectedModel(nextModel);\n setSelectedEngine(nextEngine);\n setSelectedEffort(nextEffort);\n writePersisted(storageKey, {\n model: nextModel,\n engine: nextEngine,\n effort: nextEffort,\n });\n }\n })\n .catch(() => {});\n }, [storageKey]);\n\n useEffect(() => {\n refreshEngines();\n }, [refreshEngines]);\n\n return {\n availableModels,\n defaultModel,\n selectedModel,\n selectedEngine,\n selectedEffort,\n onModelChange,\n onEffortChange,\n refreshEngines,\n };\n}\n"]}
1
+ {"version":3,"file":"use-chat-models.js","sourceRoot":"","sources":["../../src/client/use-chat-models.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EACL,iCAAiC,GAElC,MAAM,+BAA+B,CAAC;AA4BvC,MAAM,mBAAmB,GAAG,oCAAoC,CAAC;AAQjE,SAAS,aAAa,CAAC,GAAkB;IACvC,IAAI,CAAC,GAAG,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO,EAAE,CAAC;IACrD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC7C,OAAO,GAAG,CAAC,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAwB,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,GAAkB,EAAE,KAAyB;IACnE,IAAI,CAAC,GAAG,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO;IAClD,IAAI,CAAC;QACH,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IAC1D,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;AACZ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,EAC5B,UAAU,GAAG,mBAAmB,MACrB,EAAE;IACb,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CACpD,EAAE,CACH,CAAC;IACF,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAS,aAAa,CAAC,CAAC;IAExE,MAAM,gBAAgB,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;IACnD,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAChD,gBAAgB,CAAC,KAAK,IAAI,aAAa,CACxC,CAAC;IACF,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAClD,gBAAgB,CAAC,MAAM,IAAI,EAAE,CAC9B,CAAC;IACF,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAClD,gBAAgB,CAAC,MAAM,IAAI,MAAM,CAClC,CAAC;IACF,MAAM,YAAY,GAAG,MAAM,CAAC;QAC1B,aAAa;QACb,cAAc;QACd,cAAc;KACf,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,YAAY,CAAC,OAAO,GAAG;YACrB,aAAa;YACb,cAAc;YACd,cAAc;SACf,CAAC;IACJ,CAAC,EAAE,CAAC,cAAc,EAAE,cAAc,EAAE,aAAa,CAAC,CAAC,CAAC;IAEpD,MAAM,aAAa,GAAG,WAAW,CAC/B,CAAC,KAAa,EAAE,MAAc,EAAE,EAAE;QAChC,MAAM,aAAa,GAAG,iCAAiC,CAAC,KAAK,CAAC,CAAC;QAC/D,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACxB,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC1B,iBAAiB,CAAC,CAAC,UAAU,EAAE,EAAE;YAC/B,MAAM,IAAI,GACR,UAAU,KAAK,MAAM,IAAI,aAAa,CAAC,QAAQ,CAAC,UAAU,CAAC;gBACzD,CAAC,CAAC,UAAU;gBACZ,CAAC,CAAC,MAAM,CAAC;YACb,cAAc,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5D,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC,EACD,CAAC,UAAU,CAAC,CACb,CAAC;IAEF,MAAM,cAAc,GAAG,WAAW,CAChC,CAAC,MAAuB,EAAE,EAAE;QAC1B,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC1B,cAAc,CAAC,UAAU,EAAE;YACzB,KAAK,EAAE,aAAa;YACpB,MAAM,EAAE,cAAc;YACtB,MAAM;SACP,CAAC,CAAC;IACL,CAAC,EACD,CAAC,cAAc,EAAE,aAAa,EAAE,UAAU,CAAC,CAC5C,CAAC;IAEF,MAAM,cAAc,GAAG,WAAW,CAAC,GAAG,EAAE;QACtC,OAAO,CAAC,GAAG,CAAC;YACV,KAAK,CAAC,eAAe,CAAC,4CAA4C,CAAC,EAAE;gBACnE,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;aACzC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACxC,KAAK,CAAC,eAAe,CAAC,2BAA2B,CAAC,CAAC;iBAChD,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;iBACnC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;YAClB,KAAK,CAAC,eAAe,CAAC,+BAA+B,CAAC,CAAC;iBACpD,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;iBACrC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;SACrB,CAAC;aACC,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,OAAO,EAAE,aAAa,CAAC,EAAE,EAAE;YAC9C,IAAI,CAAC,WAAW,EAAE,OAAO;gBAAE,OAAO;YAClC,MAAM,cAAc,GAAG,IAAI,GAAG,CAC3B,OAAuD;iBACrD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;iBAC3B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CACrB,CAAC;YACF,MAAM,gBAAgB,GAAG,aAAa,EAAE,UAAU,KAAK,IAAI,CAAC;YAC5D,MAAM,iBAAiB,GACrB,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC;YAC9B,MAAM,YAAY,GAAuB,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC;YAEpE,IAAI,MAA0B,CAAC;YAE/B,IAAI,gBAAgB,EAAE,CAAC;gBACrB,MAAM,aAAa,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAC5C,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CACjC,CAAC;gBACF,MAAM,aAAa,GAAa,aAAa,EAAE,eAAe,IAAI,EAAE,CAAC;gBACrE,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAS,EAAE,EAAE,CAChD,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CACxB,CAAC;gBACF,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAS,EAAE,EAAE,CAChD,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CACrB,CAAC;gBACF,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAS,EAAE,EAAE,CAChD,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CACxB,CAAC;gBACF,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,CAChC,CAAC,CAAS,EAAE,EAAE,CACZ,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC;oBACxB,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC;oBACrB,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAC3B,CAAC;gBAEF,MAAM,GAAG;oBACP,GAAG,CAAC,MAAM,CAAC,MAAM;wBACf,CAAC,CAAC;4BACE;gCACE,MAAM,EAAE,SAAS;gCACjB,KAAK,EAAE,QAAQ;gCACf,MAAM,EAAE,MAAM;gCACd,UAAU,EAAE,IAAI;6BACjB;yBACF;wBACH,CAAC,CAAC,EAAE,CAAC;oBACP,GAAG,CAAC,MAAM,CAAC,MAAM;wBACf,CAAC,CAAC;4BACE;gCACE,MAAM,EAAE,SAAS;gCACjB,KAAK,EAAE,QAAQ;gCACf,MAAM,EAAE,MAAM;gCACd,UAAU,EAAE,IAAI;6BACjB;yBACF;wBACH,CAAC,CAAC,EAAE,CAAC;oBACP,GAAG,CAAC,MAAM,CAAC,MAAM;wBACf,CAAC,CAAC;4BACE;gCACE,MAAM,EAAE,SAAS;gCACjB,KAAK,EAAE,QAAQ;gCACf,MAAM,EAAE,MAAM;gCACd,UAAU,EAAE,IAAI;6BACjB;yBACF;wBACH,CAAC,CAAC,EAAE,CAAC;oBACP,GAAG,CAAC,KAAK,CAAC,MAAM;wBACd,CAAC,CAAC;4BACE;gCACE,MAAM,EAAE,SAAS;gCACjB,KAAK,EAAE,MAAM;gCACb,MAAM,EAAE,KAAK;gCACb,UAAU,EAAE,IAAI;6BACjB;yBACF;wBACH,CAAC,CAAC,EAAE,CAAC;iBACR,CAAC;gBAEF,IAAI,YAAY,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;oBAC1D,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;oBAC7B,IAAI,UAAU;wBAAE,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;gBAC1D,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC;oBAC7B,WAAW;oBACX,eAAe;oBACf,eAAe;iBAChB,CAAC,CAAC;gBACH,MAAM,GAAG,WAAW,CAAC,OAAO;qBACzB,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;qBAC9C,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE;oBACd,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC;oBACtC,IACE,CAAC,CAAC,IAAI,KAAK,iBAAiB;wBAC5B,YAAY;wBACZ,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,EAC9B,CAAC;wBACD,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;oBAC/B,CAAC;oBACD,OAAO;wBACL,MAAM,EAAE,CAAC,CAAC,IAAI;wBACd,KAAK,EAAE,CAAC,CAAC,KAAK;wBACd,MAAM;wBACN,UAAU,EACR,CAAC,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC;4BAC9B,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAS,EAAE,EAAE,CACnC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CACtB;4BACD,CAAC,CAAC,IAAI,KAAK,iBAAiB;qBAC/B,CAAC;gBACJ,CAAC,CAAC,CAAC;YACP,CAAC;YACD,MAAM,gBAAgB,GAAG,YAAY,IAAI,aAAa,CAAC;YACvD,kBAAkB,CAAC,MAAM,CAAC,CAAC;YAC3B,eAAe,CAAC,gBAAgB,CAAC,CAAC;YAElC,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC;YACvC,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAC/B,CAAC,KAAK,EAAE,EAAE,CACR,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,aAAa,CAAC;gBAC9C,CAAC,CAAC,SAAS,CAAC,cAAc;oBACxB,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,cAAc,CAAC,CAC/C,CAAC;YACF,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,MAAM,YAAY,GAChB,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;oBAC/D,MAAM,CAAC,CAAC,CAAC,CAAC;gBACZ,MAAM,SAAS,GACb,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,gBAAgB,CAAC;oBAChE,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;oBACvB,gBAAgB,CAAC;gBACnB,MAAM,UAAU,GAAG,YAAY,EAAE,MAAM,IAAI,EAAE,CAAC;gBAC9C,MAAM,aAAa,GAAG,iCAAiC,CAAC,SAAS,CAAC,CAAC;gBACnE,MAAM,UAAU,GACd,SAAS,CAAC,cAAc,KAAK,MAAM;oBACnC,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,cAAc,CAAC;oBAC9C,CAAC,CAAC,SAAS,CAAC,cAAc;oBAC1B,CAAC,CAAC,MAAM,CAAC;gBACb,gBAAgB,CAAC,SAAS,CAAC,CAAC;gBAC5B,iBAAiB,CAAC,UAAU,CAAC,CAAC;gBAC9B,iBAAiB,CAAC,UAAU,CAAC,CAAC;gBAC9B,cAAc,CAAC,UAAU,EAAE;oBACzB,KAAK,EAAE,SAAS;oBAChB,MAAM,EAAE,UAAU;oBAClB,MAAM,EAAE,UAAU;iBACnB,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC;aACD,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACrB,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IAEjB,SAAS,CAAC,GAAG,EAAE;QACb,cAAc,EAAE,CAAC;IACnB,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;IAErB,OAAO;QACL,eAAe;QACf,YAAY;QACZ,aAAa;QACb,cAAc;QACd,cAAc;QACd,aAAa;QACb,cAAc;QACd,cAAc;KACf,CAAC;AACJ,CAAC","sourcesContent":["import { useCallback, useEffect, useRef, useState } from \"react\";\nimport { agentNativePath } from \"./api-path.js\";\nimport { DEFAULT_MODEL } from \"../agent/default-model.js\";\nimport {\n getReasoningEffortOptionsForModel,\n type ReasoningEffort,\n} from \"../shared/reasoning-effort.js\";\n\nexport interface EngineModelGroup {\n engine: string;\n label: string;\n models: string[];\n configured: boolean;\n}\n\nexport interface UseChatModelsResult {\n availableModels: EngineModelGroup[];\n defaultModel: string;\n selectedModel: string;\n selectedEngine: string;\n selectedEffort: ReasoningEffort;\n onModelChange: (model: string, engine: string) => void;\n onEffortChange: (effort: ReasoningEffort) => void;\n refreshEngines: () => void;\n}\n\ninterface Options {\n /**\n * localStorage key used to persist the user's model + effort selection across\n * page loads. Pass `null` to disable persistence.\n */\n storageKey?: string | null;\n}\n\nconst DEFAULT_STORAGE_KEY = \"agent-native:chat-models:selection\";\n\ninterface PersistedSelection {\n model?: string;\n engine?: string;\n effort?: ReasoningEffort;\n}\n\nfunction readPersisted(key: string | null): PersistedSelection {\n if (!key || typeof window === \"undefined\") return {};\n try {\n const raw = window.localStorage.getItem(key);\n return raw ? (JSON.parse(raw) as PersistedSelection) : {};\n } catch {\n return {};\n }\n}\n\nfunction writePersisted(key: string | null, value: PersistedSelection) {\n if (!key || typeof window === \"undefined\") return;\n try {\n window.localStorage.setItem(key, JSON.stringify(value));\n } catch {}\n}\n\n/**\n * Fetches available engines/models from the agent server and exposes the same\n * model picker state that `MultiTabAssistantChat` wires up — for surfaces like\n * the Dispatch homepage hero composer that need an identical model picker\n * without mounting the full tabbed chat.\n */\nexport function useChatModels({\n storageKey = DEFAULT_STORAGE_KEY,\n}: Options = {}): UseChatModelsResult {\n const [availableModels, setAvailableModels] = useState<EngineModelGroup[]>(\n [],\n );\n const [defaultModel, setDefaultModel] = useState<string>(DEFAULT_MODEL);\n\n const initialPersisted = readPersisted(storageKey);\n const [selectedModel, setSelectedModel] = useState<string>(\n initialPersisted.model ?? DEFAULT_MODEL,\n );\n const [selectedEngine, setSelectedEngine] = useState<string>(\n initialPersisted.engine ?? \"\",\n );\n const [selectedEffort, setSelectedEffort] = useState<ReasoningEffort>(\n initialPersisted.effort ?? \"auto\",\n );\n const selectionRef = useRef({\n selectedModel,\n selectedEngine,\n selectedEffort,\n });\n\n useEffect(() => {\n selectionRef.current = {\n selectedModel,\n selectedEngine,\n selectedEffort,\n };\n }, [selectedEffort, selectedEngine, selectedModel]);\n\n const onModelChange = useCallback(\n (model: string, engine: string) => {\n const effortOptions = getReasoningEffortOptionsForModel(model);\n setSelectedModel(model);\n setSelectedEngine(engine);\n setSelectedEffort((prevEffort) => {\n const next =\n prevEffort === \"auto\" || effortOptions.includes(prevEffort)\n ? prevEffort\n : \"auto\";\n writePersisted(storageKey, { model, engine, effort: next });\n return next;\n });\n },\n [storageKey],\n );\n\n const onEffortChange = useCallback(\n (effort: ReasoningEffort) => {\n setSelectedEffort(effort);\n writePersisted(storageKey, {\n model: selectedModel,\n engine: selectedEngine,\n effort,\n });\n },\n [selectedEngine, selectedModel, storageKey],\n );\n\n const refreshEngines = useCallback(() => {\n Promise.all([\n fetch(agentNativePath(\"/_agent-native/actions/manage-agent-engine\"), {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ action: \"list\" }),\n }).then((r) => (r.ok ? r.json() : null)),\n fetch(agentNativePath(\"/_agent-native/env-status\"))\n .then((r) => (r.ok ? r.json() : []))\n .catch(() => []),\n fetch(agentNativePath(\"/_agent-native/builder/status\"))\n .then((r) => (r.ok ? r.json() : null))\n .catch(() => null),\n ])\n .then(([enginesData, envKeys, builderStatus]) => {\n if (!enginesData?.engines) return;\n const configuredKeys = new Set(\n (envKeys as Array<{ key: string; configured: boolean }>)\n .filter((k) => k.configured)\n .map((k) => k.key),\n );\n const builderConnected = builderStatus?.configured === true;\n const currentEngineName: string | undefined =\n enginesData.current?.engine;\n const currentModel: string | undefined = enginesData.current?.model;\n\n let groups: EngineModelGroup[];\n\n if (builderConnected) {\n const builderEngine = enginesData.engines.find(\n (e: any) => e.name === \"builder\",\n );\n const builderModels: string[] = builderEngine?.supportedModels ?? [];\n const claude = builderModels.filter((m: string) =>\n m.startsWith(\"claude-\"),\n );\n const openai = builderModels.filter((m: string) =>\n m.startsWith(\"gpt-\"),\n );\n const gemini = builderModels.filter((m: string) =>\n m.startsWith(\"gemini-\"),\n );\n const other = builderModels.filter(\n (m: string) =>\n !m.startsWith(\"claude-\") &&\n !m.startsWith(\"gpt-\") &&\n !m.startsWith(\"gemini-\"),\n );\n\n groups = [\n ...(claude.length\n ? [\n {\n engine: \"builder\",\n label: \"Claude\",\n models: claude,\n configured: true,\n },\n ]\n : []),\n ...(openai.length\n ? [\n {\n engine: \"builder\",\n label: \"OpenAI\",\n models: openai,\n configured: true,\n },\n ]\n : []),\n ...(gemini.length\n ? [\n {\n engine: \"builder\",\n label: \"Gemini\",\n models: gemini,\n configured: true,\n },\n ]\n : []),\n ...(other.length\n ? [\n {\n engine: \"builder\",\n label: \"More\",\n models: other,\n configured: true,\n },\n ]\n : []),\n ];\n\n if (currentModel && !builderModels.includes(currentModel)) {\n const firstGroup = groups[0];\n if (firstGroup) firstGroup.models.unshift(currentModel);\n }\n } else {\n const allowedEngines = new Set([\n \"anthropic\",\n \"ai-sdk:openai\",\n \"ai-sdk:google\",\n ]);\n groups = enginesData.engines\n .filter((e: any) => allowedEngines.has(e.name))\n .map((e: any) => {\n const models = [...e.supportedModels];\n if (\n e.name === currentEngineName &&\n currentModel &&\n !models.includes(currentModel)\n ) {\n models.unshift(currentModel);\n }\n return {\n engine: e.name,\n label: e.label,\n models,\n configured:\n e.requiredEnvVars.length === 0 ||\n e.requiredEnvVars.some((v: string) =>\n configuredKeys.has(v),\n ) ||\n e.name === currentEngineName,\n };\n });\n }\n const nextDefaultModel = currentModel ?? DEFAULT_MODEL;\n setAvailableModels(groups);\n setDefaultModel(nextDefaultModel);\n\n const selection = selectionRef.current;\n const selectedGroup = groups.find(\n (group) =>\n group.models.includes(selection.selectedModel) &&\n (!selection.selectedEngine ||\n group.engine === selection.selectedEngine),\n );\n if (!selectedGroup) {\n const defaultGroup =\n groups.find((group) => group.models.includes(nextDefaultModel)) ??\n groups[0];\n const nextModel =\n defaultGroup?.models.find((model) => model === nextDefaultModel) ??\n defaultGroup?.models[0] ??\n nextDefaultModel;\n const nextEngine = defaultGroup?.engine ?? \"\";\n const effortOptions = getReasoningEffortOptionsForModel(nextModel);\n const nextEffort =\n selection.selectedEffort === \"auto\" ||\n effortOptions.includes(selection.selectedEffort)\n ? selection.selectedEffort\n : \"auto\";\n setSelectedModel(nextModel);\n setSelectedEngine(nextEngine);\n setSelectedEffort(nextEffort);\n writePersisted(storageKey, {\n model: nextModel,\n engine: nextEngine,\n effort: nextEffort,\n });\n }\n })\n .catch(() => {});\n }, [storageKey]);\n\n useEffect(() => {\n refreshEngines();\n }, [refreshEngines]);\n\n return {\n availableModels,\n defaultModel,\n selectedModel,\n selectedEngine,\n selectedEffort,\n onModelChange,\n onEffortChange,\n refreshEngines,\n };\n}\n"]}
@@ -15,6 +15,8 @@ interface QueryClient {
15
15
  * @param options.pollUrl - Poll endpoint URL. Default: "/_agent-native/poll"
16
16
  * @param options.onEvent - Optional callback for each change event
17
17
  * @param options.interval - Poll interval in ms. Default: 2000
18
+ * @param options.pauseWhenHidden - Pause polling while the tab is hidden.
19
+ * Default: true
18
20
  * @param options.ignoreSource - Skip events whose `requestSource` matches this
19
21
  * value. Use a per-tab ID so the UI ignores its own writes while still
20
22
  * picking up changes from other tabs, agents, and scripts.
@@ -27,6 +29,7 @@ export declare function useDbSync(options?: {
27
29
  eventsUrl?: string;
28
30
  onEvent?: (data: any) => void;
29
31
  interval?: number;
32
+ pauseWhenHidden?: boolean;
30
33
  ignoreSource?: string;
31
34
  }): void;
32
35
  /** @deprecated Use useDbSync instead */
@@ -53,6 +56,7 @@ export declare const useFileWatcher: typeof useDbSync;
53
56
  export declare function useScreenRefreshKey(options?: {
54
57
  pollUrl?: string;
55
58
  interval?: number;
59
+ pauseWhenHidden?: boolean;
56
60
  }): number;
57
61
  export {};
58
62
  //# sourceMappingURL=use-db-sync.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-db-sync.d.ts","sourceRoot":"","sources":["../../src/client/use-db-sync.ts"],"names":[],"mappings":"AAGA,UAAU,WAAW;IACnB,iBAAiB,CAAC,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,IAAI,CAAC;CACzD;AA+BD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,SAAS,CACvB,OAAO,GAAE;IACP,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sCAAsC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CAClB,GACL,IAAI,CA+HN;AAED,wCAAwC;AACxC,eAAO,MAAM,cAAc,kBAAY,CAAC;AAExC;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,GACpD,MAAM,CAyER"}
1
+ {"version":3,"file":"use-db-sync.d.ts","sourceRoot":"","sources":["../../src/client/use-db-sync.ts"],"names":[],"mappings":"AAGA,UAAU,WAAW;IACnB,iBAAiB,CAAC,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,IAAI,CAAC;CACzD;AAqCD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,SAAS,CACvB,OAAO,GAAE;IACP,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sCAAsC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;CAClB,GACL,IAAI,CAyIN;AAED,wCAAwC;AACxC,eAAO,MAAM,cAAc,kBAAY,CAAC;AAExC;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,GAAE;IACP,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,OAAO,CAAC;CACtB,GACL,MAAM,CA+ER"}