@agent-native/core 0.58.1 → 0.58.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +26 -12
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/agent/thread-data-builder.d.ts.map +1 -1
- package/dist/agent/thread-data-builder.js +10 -2
- package/dist/agent/thread-data-builder.js.map +1 -1
- package/dist/client/agent-chat-adapter.d.ts.map +1 -1
- package/dist/client/agent-chat-adapter.js +29 -5
- package/dist/client/agent-chat-adapter.js.map +1 -1
- package/dist/client/chat/attachment-adapters.d.ts.map +1 -1
- package/dist/client/chat/attachment-adapters.js +29 -4
- package/dist/client/chat/attachment-adapters.js.map +1 -1
- package/dist/client/composer/PromptComposer.d.ts.map +1 -1
- package/dist/client/composer/PromptComposer.js +5 -1
- package/dist/client/composer/PromptComposer.js.map +1 -1
- package/dist/client/composer/attachment-accept.d.ts +2 -0
- package/dist/client/composer/attachment-accept.d.ts.map +1 -1
- package/dist/client/composer/attachment-accept.js +30 -1
- package/dist/client/composer/attachment-accept.js.map +1 -1
- package/dist/data-widgets/index.d.ts +5 -5
- package/dist/file-upload/pre-upload-attachments.d.ts +2 -0
- package/dist/file-upload/pre-upload-attachments.d.ts.map +1 -1
- package/dist/file-upload/pre-upload-attachments.js +66 -9
- package/dist/file-upload/pre-upload-attachments.js.map +1 -1
- package/dist/server/agent-chat-plugin.d.ts +16 -0
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +67 -5
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/server/prompts/framework-core-compact.d.ts.map +1 -1
- package/dist/server/prompts/framework-core-compact.js +2 -1
- package/dist/server/prompts/framework-core-compact.js.map +1 -1
- package/dist/server/prompts/framework-core.d.ts.map +1 -1
- package/dist/server/prompts/framework-core.js +1 -0
- package/dist/server/prompts/framework-core.js.map +1 -1
- package/docs/content/native-chat-ui.md +12 -0
- package/package.json +1 -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 AgentActivityTrailEntry,\n type ContentPart,\n readSSEStream,\n settleInterruptedToolCalls,\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\";\nimport type { ChatThreadScope } from \"./use-chat-threads.js\";\n\nexport type AgentChatSurfaceKind =\n /**\n * Chat rendered by the app itself, including the normal AgentSidebar. This\n * surface must not receive code-editing dev tools because source edits can\n * reload the same React tree that is hosting the chat.\n */\n | \"app\"\n /** Chat rendered by the outer local dev frame, outside the app iframe. */\n | \"dev-frame\";\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 AUTO_CONTINUE_COMPLETION_GUARD =\n \"Before doing more work, inspect the prior partial assistant output in history. If it already gives a coherent answer, summary, artifact, coverage note, or next-step recommendation, finish with at most one short closing sentence and do not call tools, scan more data, or expand the search. Continue only genuinely unfinished work.\";\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;\n// How many consecutive continuations that produce NO progress (no streamed\n// text, no completed/in-flight tool) we tolerate before giving up. A complex\n// first turn can spend the whole soft-timeout window (~40s) \"thinking\" with no\n// visible output; giving up after a single such window made the agent feel like\n// it \"craps out / stops midway\" on heavier prompts (Analytics). Retrying a few\n// times lets a transient slow start recover, while the cap still terminates a\n// genuinely stuck turn with a clear message instead of looping forever.\nconst MAX_EMPTY_TRANSIENT_CONTINUATIONS = 3;\n// How many consecutive continuations that re-stream the SAME narration without\n// advancing (no in-flight tool, no completed tool) we tolerate before giving\n// up. A model that degenerates into repeating one phrase (\"I have the full\n// HTML. Creating the extension now!\") emits \"new\" text every continuation,\n// which keeps resetting the stalled/empty budgets — so without this guard the\n// stuck turn burns the entire MAX_TOTAL_TRANSIENT_CONTINUATIONS budget (each\n// round re-sending any large pasted payload) before bailing. Catching the\n// repeat ends it in a few rounds with a clear, actionable message instead.\nconst MAX_REPEATED_TRANSIENT_CONTINUATIONS = 3;\nconst RETRY_BASE_DELAY_MS = 500;\nconst RETRY_MAX_DELAY_MS = 8_000;\nconst MAX_HISTORY_ATTACHMENT_CHARS = 60_000;\n// The attachment submitted with the CURRENT turn gets a much larger cap than\n// prior-history embedding. The server threads this turn's attachments into each\n// action's ActionRunContext, and `create-extension`/`update-extension` host a\n// pasted file verbatim from it via `contentFromAttachment` — a feature whose\n// whole point is large pastes. Truncating the outbound payload to the 60K\n// history cap would silently cut a >60K HTML/Alpine file before the server ever\n// reads it, hosting a broken extension. Mirror the large-input tool-arg cap\n// (MAX_HISTORY_LARGE_TOOL_ARGS_CHARS) so realistic pasted files survive intact;\n// the trailing truncation notice still makes a pathological multi-MB paste\n// visibly (not silently) capped.\nconst MAX_OUTBOUND_ATTACHMENT_CHARS = 200_000;\nconst MAX_HISTORY_MESSAGES = 24;\nconst MAX_HISTORY_TOTAL_CHARS = 64_000;\nconst MAX_HISTORY_MESSAGE_CHARS = 12_000;\nconst MAX_HISTORY_TOOL_ARGS_CHARS = 8_000;\nconst MAX_HISTORY_TOOL_RESULT_CHARS = 12_000;\n// Tools whose entire input IS the artifact being built (extension HTML, etc.).\n// Lossy-truncating these to a `{ __agentNativeTruncated }` placeholder strands\n// the resumed agent — it can no longer refine the artifact because it sees a\n// fake input. Keep the real input for these on continuation, only collapsing\n// inputs that are far larger than any realistic extension payload.\nconst LARGE_INPUT_TOOL_NAMES = new Set([\n \"create-extension\",\n \"update-extension\",\n]);\nconst MAX_HISTORY_LARGE_TOOL_ARGS_CHARS = 200_000;\nconst STARTUP_RESPONSE_TIMEOUT_MS = 45_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 truncateForHistory(\n value: string,\n maxChars: number,\n label: string,\n): string {\n if (value.length <= maxChars) return value;\n const omitted = value.length - maxChars;\n return `${value.slice(0, maxChars)}\\n\\n[${label} truncated after ${maxChars.toLocaleString()} characters; ${omitted.toLocaleString()} characters omitted from prior chat history. Read the current app/resource state with tools if exact content is needed.]`;\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 if (part.activity === true) continue;\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 truncateForHistory(\n content\n .filter((p): p is { type: \"text\"; text: string } => p.type === \"text\")\n .map((p) => normalizeMentions(p.text))\n .join(\"\\n\"),\n MAX_HISTORY_MESSAGE_CHARS,\n \"Message\",\n );\n}\n\nfunction truncateToolArgsForHistory(\n args: unknown,\n toolName?: string,\n): Record<string, unknown> {\n if (!args || typeof args !== \"object\" || Array.isArray(args)) return {};\n // Large-input tools (e.g. create-extension/update-extension) carry the\n // artifact itself as their input. Preserve the real input on continuation so\n // the resumed agent can keep refining it; only collapse inputs that exceed a\n // far larger ceiling than any realistic payload.\n const cap =\n toolName && LARGE_INPUT_TOOL_NAMES.has(toolName)\n ? MAX_HISTORY_LARGE_TOOL_ARGS_CHARS\n : MAX_HISTORY_TOOL_ARGS_CHARS;\n try {\n const json = JSON.stringify(args);\n if (json.length <= cap) {\n return args as Record<string, unknown>;\n }\n return {\n __agentNativeTruncated: true,\n note: \"Tool input was too large to resend in chat history. Use the current app/resource state as the source of truth if exact content is needed.\",\n preview: truncateForHistory(json, cap, \"Tool input\"),\n };\n } catch {\n return {\n __agentNativeTruncated: true,\n note: \"Tool input could not be serialized for prior chat history.\",\n };\n }\n}\n\nfunction messageTextFromContentRaw(\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, \"&\")\n .replace(/\"/g, \""\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\");\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 content?: readonly { type: string; image?: string }[];\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 for (const part of message.content ?? []) {\n if (part.type === \"image\" && typeof part.image === \"string\") {\n attachments.push({\n type: \"image\",\n name: \"image\",\n contentType: /^data:([^;,]+)/.exec(part.image)?.[1],\n data: part.image,\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_OUTBOUND_ATTACHMENT_CHARS) return text;\n const omitted = text.length - MAX_OUTBOUND_ATTACHMENT_CHARS;\n return `${text.slice(0, MAX_OUTBOUND_ATTACHMENT_CHARS)}\\n\\n[Attachment truncated after ${MAX_OUTBOUND_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 = messageTextFromContentRaw(message.content);\n const attachments = extractAttachmentsFromMessage(message)\n .map(attachmentHistoryText)\n .filter((part): part is string => !!part && part.trim().length > 0);\n return truncateForHistory(\n [text, ...attachments].filter((part) => part.trim()).join(\"\\n\\n\"),\n MAX_HISTORY_MESSAGE_CHARS,\n \"Message\",\n );\n}\n\ntype AdapterMessage = {\n role: string;\n content: readonly { type: string; text?: string }[];\n attachments?: readonly AssistantUiAttachment[];\n metadata?: unknown;\n};\n\nconst RECOVERY_USER_MESSAGE_PREFIXES = [\n \"Continue from where you left off\",\n \"Continue from where you stopped\",\n \"Retry the previous request from a clean approach\",\n];\n\nfunction recoveryActionFromMessage(\n message: unknown,\n): \"continue\" | \"retry\" | null {\n const meta = (message as { metadata?: unknown })?.metadata as\n | { custom?: { agentNativeRecoveryAction?: unknown } }\n | undefined;\n const action = meta?.custom?.agentNativeRecoveryAction;\n return action === \"continue\" || action === \"retry\" ? action : null;\n}\n\nfunction isRecoveryUserMessage(message: AdapterMessage): boolean {\n if (recoveryActionFromMessage(message)) return true;\n const text = messageTextFromContentRaw(message.content).trim();\n return RECOVERY_USER_MESSAGE_PREFIXES.some((prefix) =>\n text.startsWith(prefix),\n );\n}\n\nfunction latestUserMessage(\n messages: readonly AdapterMessage[],\n options?: { skipRecovery?: boolean; beforeIndex?: number },\n): AdapterMessage | undefined {\n const start =\n typeof options?.beforeIndex === \"number\"\n ? Math.min(options.beforeIndex, messages.length)\n : messages.length;\n for (let i = start - 1; i >= 0; i--) {\n const message = messages[i];\n if (message.role !== \"user\") continue;\n if (options?.skipRecovery && isRecoveryUserMessage(message)) continue;\n return message;\n }\n return undefined;\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 isSuccessOnlyToolResult(value: Record<string, unknown>): boolean {\n const keys = Object.keys(value);\n if (keys.length === 0) return true;\n return keys.every((key) => {\n const item = value[key];\n if (key === \"ok\" || key === \"success\") return item === true;\n if (key === \"status\") {\n return item === \"ok\" || item === \"success\" || item === \"completed\";\n }\n return false;\n });\n}\n\nfunction toolResultContent(result: unknown, toolName?: string): string {\n if (typeof result === \"string\") return result;\n const completed = toolName?.trim()\n ? `${toolName.trim()} completed.`\n : \"Tool completed.\";\n if (result === true || result == null) return completed;\n if (result && typeof result === \"object\" && !Array.isArray(result)) {\n const record = result as Record<string, unknown>;\n const message = record.message ?? record.summary;\n if (typeof message === \"string\" && message.trim()) return message.trim();\n const title = record.title ?? record.name;\n if (typeof title === \"string\" && title.trim()) {\n return `${title.trim()} is ready.`;\n }\n const id = record.id ?? record.planId ?? record.commentId;\n if (typeof id === \"string\" && id.trim() && toolName?.trim()) {\n return `${toolName.trim()} completed for ${id.trim()}.`;\n }\n if (isSuccessOnlyToolResult(record)) return completed;\n }\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 options?: { truncateForHistory?: boolean },\n): AgentChatStructuredMessage[] {\n const messages: AgentChatStructuredMessage[] = [];\n let assistantParts: AgentChatStructuredContentPart[] = [];\n let pendingToolResults: AgentChatStructuredContentPart[] = [];\n const truncate = options?.truncateForHistory === true;\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({\n type: \"text\",\n text: truncate\n ? truncateForHistory(\n part.text,\n MAX_HISTORY_MESSAGE_CHARS,\n \"Assistant text\",\n )\n : part.text,\n });\n }\n continue;\n }\n\n if (isToolCallContentPart(part)) {\n if (part.activity === true) continue;\n const toolCallId = nextToolCallId();\n assistantParts.push({\n type: \"tool-call\",\n toolCallId,\n toolName: part.toolName,\n args: truncate\n ? truncateToolArgsForHistory(part.args ?? {}, part.toolName)\n : (part.args ?? {}),\n });\n if (part.result !== undefined) {\n pendingToolResults.push({\n type: \"tool-result\",\n toolCallId,\n toolName: part.toolName,\n toolInput: JSON.stringify(part.args ?? {}),\n content: truncate\n ? truncateForHistory(\n toolResultContent(part.result, part.toolName),\n MAX_HISTORY_TOOL_RESULT_CHARS,\n \"Tool result\",\n )\n : toolResultContent(part.result, part.toolName),\n });\n } else {\n pendingToolResults.push({\n type: \"tool-result\",\n toolCallId,\n toolName: part.toolName,\n toolInput: JSON.stringify(part.args ?? {}),\n content: \"Interrupted before this tool returned a 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 if ((part as { activity?: unknown }).activity === true) continue;\n const toolNameRaw =\n typeof part.toolName === \"string\"\n ? part.toolName\n : typeof (part as { name?: string }).name === \"string\"\n ? (part as { name?: string }).name\n : \"\";\n const toolName = toolNameRaw.trim();\n if (!toolName) continue;\n content.push({\n type: \"tool-call\",\n toolCallId:\n typeof part.toolCallId === \"string\" ? part.toolCallId : \"\",\n 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, toolName) }\n : {}),\n });\n }\n }\n structured.push(\n ...contentToStructuredMessages(content, nextToolCallId, {\n truncateForHistory: true,\n }),\n );\n }\n\n return structured;\n}\n\nfunction estimateHistoryMessageCost(message: {\n content: readonly { type: string; text?: string }[];\n attachments?: readonly AssistantUiAttachment[];\n}): number {\n return Math.max(1, messageTextForHistory(message).length);\n}\n\nfunction limitPriorMessagesForRequest<\n T extends {\n role: string;\n content: readonly { type: string; text?: string }[];\n attachments?: readonly AssistantUiAttachment[];\n },\n>(messages: readonly T[]): T[] {\n const recent = messages.slice(-MAX_HISTORY_MESSAGES);\n const kept: T[] = [];\n let totalChars = 0;\n\n for (let i = recent.length - 1; i >= 0; i--) {\n const message = recent[i];\n if (message.role !== \"user\" && message.role !== \"assistant\") continue;\n const cost = estimateHistoryMessageCost(message);\n if (kept.length > 0 && totalChars + cost > MAX_HISTORY_TOTAL_CHARS) {\n break;\n }\n kept.push(message);\n totalChars += cost;\n }\n\n kept.reverse();\n while (kept.length > 0 && kept[0].role !== \"user\") {\n kept.shift();\n }\n return kept;\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 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\n/**\n * Signature of the *unique* sentence-like segments in a continuation's newly\n * streamed text, used to detect a degenerate repetition loop. A stuck model\n * re-emits the same phrase (\"I have the full HTML. Creating the extension\n * now!\") an arbitrary number of times per run, so the set of unique segments\n * is small and stable across continuations regardless of how many times any\n * single run repeated it. An empty signature (no visible text) is never a\n * repeat — the stalled/empty budgets handle no-output stalls instead.\n */\nfunction continuationRepeatSignature(content: ContentPart[]): string {\n const text = content\n .map((part) => (part.type === \"text\" ? part.text : \"\"))\n .join(\" \")\n .toLowerCase();\n const segments = text\n // Split after sentence punctuation even when runs are concatenated without\n // a following space (\"...now!I have...\"), and on newlines.\n .split(/(?<=[.!?])|\\n+/)\n .map((segment) => segment.replace(/[^a-z0-9]+/g, \" \").trim())\n .filter((segment) => segment.length > 0);\n if (segments.length === 0) return \"\";\n return Array.from(new Set(segments)).sort().join(\"\u0000\");\n}\n\n/**\n * True when an action was streamed but never returned a result yet — i.e. a\n * `tool_start` with no matching `tool_done`. The server is still executing it,\n * so a run_timeout that fires in this window is NOT a stall: the agent was\n * actively working and `foldAssistantTurn` persisted the in-flight call. We\n * must not count this against the stalled/empty continuation budgets.\n */\nfunction hasInFlightToolCall(content: ContentPart[]): boolean {\n return content.some(\n (part) =>\n part.type === \"tool-call\" &&\n part.result === undefined &&\n part.activity !== true,\n );\n}\n\nfunction lastActivityTool(\n trail: readonly AgentActivityTrailEntry[],\n): string | undefined {\n for (let i = trail.length - 1; i >= 0; i--) {\n const tool = trail[i]?.tool?.trim();\n if (tool) return tool;\n }\n return undefined;\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 stableJson(value: unknown): string {\n try {\n return JSON.stringify(value);\n } catch {\n return String(value ?? \"\");\n }\n}\n\n// Bounded signature of an in-flight tool call's input, used by the stall guard\n// to tell a genuinely-stuck retry (same tool, same payload, connection keeps\n// dropping) apart from a legitimate retry with a CHANGED payload (e.g. the\n// `create-extension` cutoff nudge tells the model to re-send a smaller body).\n// A changed payload yields a different signature, so the guard resets that\n// tool's stall budget instead of aborting the new attempt as a repeat. Bounded\n// to length + head so we never retain a large pasted payload across rounds.\nfunction inFlightToolInputSignature(\n part: Extract<ContentPart, { type: \"tool-call\" }>,\n): string {\n const raw = part.argsText ?? stableJson(part.args);\n return `${raw.length}\u0000${raw.slice(0, 256)}`;\n}\n\nfunction toolContinuationKey(\n part: Extract<ContentPart, { type: \"tool-call\" }>,\n): string {\n return [\n part.toolCallId,\n part.toolName,\n part.argsText,\n stableJson(part.args),\n part.result === undefined ? \"pending\" : \"done\",\n part.result ?? \"\",\n part.activity === true ? \"activity\" : \"tool\",\n part.mcpApp ? \"mcp-app\" : \"\",\n ].join(\"\\u0000\");\n}\n\nfunction contentAfterContinuationPrefix(\n content: ContentPart[],\n prefix: ContentPart[],\n): ContentPart[] {\n if (prefix.length === 0) return content;\n\n const delta: ContentPart[] = [];\n let contentIndex = 0;\n\n for (const prefixPart of prefix) {\n const currentPart = content[contentIndex];\n if (!currentPart) return content.slice(contentIndex);\n\n if (prefixPart.type === \"text\" && currentPart.type === \"text\") {\n if (currentPart.text === prefixPart.text) {\n contentIndex += 1;\n continue;\n }\n\n if (currentPart.text.startsWith(prefixPart.text)) {\n const appendedText = currentPart.text.slice(prefixPart.text.length);\n if (appendedText) delta.push({ type: \"text\", text: appendedText });\n contentIndex += 1;\n continue;\n }\n\n return content.slice(contentIndex);\n }\n\n if (\n prefixPart.type === \"tool-call\" &&\n currentPart.type === \"tool-call\" &&\n toolContinuationKey(currentPart) === toolContinuationKey(prefixPart)\n ) {\n contentIndex += 1;\n continue;\n }\n\n return content.slice(contentIndex);\n }\n\n return [...delta, ...content.slice(contentIndex)];\n}\n\nfunction autoContinueMessage(signal: AgentAutoContinueSignal): string {\n const tool = lastActivityTool(signal.activityTrail);\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 // A run_timeout or a mid-stream cutoff while assembling one large action\n // payload (e.g. inlining a big pasted HTML file into `create-extension`) is\n // the classic trigger for the repetition/cutoff loop. Nudge the model toward\n // a compact first version it can actually finish in a single run.\n const cutoffPreparingAction =\n signal.reason === \"run_timeout\" || signal.reason === \"stream_ended\";\n const actionInputNote =\n cutoffPreparingAction && tool\n ? `\\n\\nThe previous run was cut off while preparing the \\`${tool}\\` action input before the action could finish. Avoid spending another whole run assembling one large tool payload. If this is \\`create-extension\\`, create a compact working v1 first, then use focused \\`update-extension\\` edits for refinements.`\n : \"\";\n return `${AUTO_CONTINUE_PROMPT}\\n\\n${AUTO_CONTINUE_COMPLETION_GUARD}\\n\\nInternal note: ${reason}${actionInputNote}`;\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\nclass AgentStartupTimeoutError extends Error {\n readonly timeoutMs: number;\n\n constructor(timeoutMs: number) {\n super(\n `Agent chat did not start streaming within ${Math.round(timeoutMs / 1000)}s.`,\n );\n this.name = \"AgentStartupTimeoutError\";\n this.timeoutMs = timeoutMs;\n }\n}\n\nasync function fetchWithStartupTimeout(\n input: RequestInfo | URL,\n init: RequestInit,\n timeoutMs: number,\n abortSignal: AbortSignal,\n): Promise<Response> {\n if (abortSignal.aborted) {\n throw new DOMException(\"The operation was aborted.\", \"AbortError\");\n }\n\n const controller = new AbortController();\n let timedOut = false;\n const timeout = setTimeout(() => {\n timedOut = true;\n controller.abort();\n }, timeoutMs);\n const abort = () => controller.abort();\n abortSignal.addEventListener(\"abort\", abort, { once: true });\n\n try {\n return await fetch(input, { ...init, signal: controller.signal });\n } catch (error) {\n if (timedOut) {\n throw new AgentStartupTimeoutError(timeoutMs);\n }\n throw error;\n } finally {\n clearTimeout(timeout);\n abortSignal.removeEventListener(\"abort\", abort);\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 generateTurnId(): string {\n if (\n typeof crypto !== \"undefined\" &&\n typeof crypto.randomUUID === \"function\"\n ) {\n return `turn-${crypto.randomUUID()}`;\n }\n return `turn-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;\n}\n\nfunction isRetryableStartupError(message: string): boolean {\n const msg = message.toLowerCase();\n if (\n msg.includes(\"cannot find any route matching\") &&\n msg.includes(\"/_agent-native/agent-chat\")\n ) {\n return true;\n }\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 missingCredentialFailure(message: string): {\n text: string;\n runError: { message: string; errorCode: string };\n} {\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 const errorCode =\n typeof parsed.errorCode === \"string\"\n ? parsed.errorCode\n : \"missing_credentials\";\n return {\n text: formatChatErrorText(\n raw,\n typeof parsed.upgradeUrl === \"string\" ? parsed.upgradeUrl : undefined,\n errorCode,\n ),\n runError: {\n message: normalizeChatError(raw).message,\n errorCode,\n },\n };\n } catch {\n return {\n text: formatChatErrorText(message, undefined, \"missing_credentials\"),\n runError: {\n message: normalizeChatError(message).message,\n errorCode: \"missing_credentials\",\n },\n };\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 interface CreateAgentChatAdapterOptions {\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 browserTabId?: string;\n scopeRef?: { current: ChatThreadScope | null | undefined };\n surface?: AgentChatSurfaceKind;\n}\n\nexport function createAgentChatAdapter(\n options?: CreateAgentChatAdapterOptions,\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 const browserTabId = options?.browserTabId;\n const scopeRef = options?.scopeRef;\n const surface = options?.surface ?? \"app\";\n\n return {\n async *run({ messages, abortSignal, runConfig }) {\n // Extract latest user message and build history from prior messages\n const adapterMessages = messages as readonly AdapterMessage[];\n const latestUserIndex = (() => {\n for (let i = adapterMessages.length - 1; i >= 0; i--) {\n if (adapterMessages[i].role === \"user\") return i;\n }\n return -1;\n })();\n const latestUserMsg =\n latestUserIndex >= 0 ? adapterMessages[latestUserIndex] : undefined;\n const latestUserIsRecovery = latestUserMsg\n ? isRecoveryUserMessage(latestUserMsg)\n : false;\n const lastUserMsg =\n latestUserIsRecovery && latestUserIndex >= 0\n ? (latestUserMessage(adapterMessages, {\n skipRecovery: true,\n beforeIndex: latestUserIndex,\n }) ?? latestUserMsg)\n : latestUserMsg;\n const recoveryMessageText =\n latestUserIsRecovery && latestUserMsg\n ? messageTextFromContentRaw(latestUserMsg.content)\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 trackInRunsTray =\n runConfig?.custom &&\n typeof runConfig.custom === \"object\" &&\n (runConfig.custom as { trackInRunsTray?: unknown }).trackInRunsTray ===\n true;\n // Human-in-the-loop approval keys (opt-in `needsApproval` actions). When\n // the user approves a paused tool call, the turn is re-issued with the\n // approval key so the server lets that specific call run.\n const approvedToolCalls = (() => {\n const raw =\n runConfig?.custom &&\n typeof runConfig.custom === \"object\" &&\n \"approvedToolCalls\" in runConfig.custom\n ? (runConfig.custom as { approvedToolCalls?: unknown })\n .approvedToolCalls\n : undefined;\n if (!Array.isArray(raw)) return undefined;\n const keys = raw.filter(\n (key): key is string => typeof key === \"string\" && key.length > 0,\n );\n return keys.length > 0 ? keys : undefined;\n })();\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 const withRequestModeMetadata = (\n result: ChatModelRunResult,\n ): ChatModelRunResult => {\n if (!requestMode) return result;\n const metadata = (result.metadata ?? {}) as Record<string, unknown>;\n const custom =\n metadata.custom && typeof metadata.custom === \"object\"\n ? (metadata.custom as Record<string, unknown>)\n : {};\n return {\n ...result,\n metadata: {\n ...metadata,\n custom: { ...custom, requestMode },\n },\n };\n };\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 = limitPriorMessagesForRequest(\n messages.slice(0, latestUserIndex >= 0 ? latestUserIndex : -1) as any,\n ); // exclude latest user/recovery message and cap resend size\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 const turnId = generateTurnId();\n let runId: string | null = null;\n let lastSeq = -1;\n let currentMessageText = normalizeMentions(\n recoveryMessageText.trim() || userMessageText,\n );\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 emptyTransientContinuationAttempts = 0;\n let totalTransientContinuationAttempts = 0;\n let repeatedTransientContinuationAttempts = 0;\n let lastContinuationRepeatSignature: string | null = null;\n let recoveryGaveUpOnRepetition = false;\n // Track when the same write tool is stuck in-flight across consecutive\n // continuations (connection keeps dropping mid-execution). This is\n // orthogonal to the text-repeat guard — in-flight tools reset\n // madeProgress=true so the stalled/empty budgets never fire, but the tool\n // never actually completes. After MAX_REPEATED_INFLIGHT_TOOL_STALLS\n // consecutive interruptions of the same tool, bail with a clear message.\n let lastInFlightToolName: string | undefined;\n // Signature of the stuck tool's input. A retry with a changed payload\n // (different signature) resets the stall count so the new attempt gets\n // its own budget rather than inheriting the prior payload's.\n let lastInFlightToolSignature: string | undefined;\n let repeatedInFlightToolCount = 0;\n const MAX_REPEATED_INFLIGHT_TOOL_STALLS = 3;\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 `empty_transient_continuations: ${emptyTransientContinuationAttempts}`,\n `repeated_transient_continuations: ${repeatedTransientContinuationAttempts}`,\n `repeated_inflight_tool_stalls: ${repeatedInFlightToolCount}`,\n lastInFlightToolName\n ? `last_inflight_tool: ${lastInFlightToolName}`\n : \"\",\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 exhaustedRecoveryMessage = (reason?: string): string => {\n if (recoveryGaveUpOnRepetition) {\n return \"The agent got stuck repeating the same response without finishing, so I stopped the automatic retries. This often happens when it tries to re-type a large pasted file into one action — starting a new chat, or asking for a smaller first step, usually gets it unstuck.\";\n }\n if (\n content.length === 0 &&\n (reason === \"run_timeout\" ||\n reason === \"no_progress\" ||\n reason === \"stream_ended\")\n ) {\n return \"The agent request started but did not produce any visible progress before timing out. I stopped the automatic retries so this chat would not stay stuck on Thinking.\";\n }\n return \"The agent connection kept failing after several automatic recovery attempts.\";\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 emptyTransientContinuationAttempts,\n repeatedTransientContinuationAttempts,\n repeatedInFlightToolCount,\n lastInFlightToolName,\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 emptyTransientContinuationAttempts,\n repeatedTransientContinuationAttempts,\n repeatedInFlightToolCount,\n lastInFlightToolName,\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 // Surface hint — the server uses this to keep code-editing dev tools\n // out of the app-rendered sidebar. The outer dev frame passes\n // \"dev-frame\" explicitly; the reusable in-product chat defaults to\n // \"app\" even when it is running in Desktop or inside a preview iframe.\n headers[\"x-agent-native-surface\"] = surface;\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 if (reconnectRes.status === 404) {\n clearActiveRun();\n return false;\n }\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 for await (const result of 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 yield withRequestModeMetadata(result);\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 if (activeRes.status === 404) {\n return false;\n }\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 activeStatus =\n typeof active.status === \"string\" ? active.status : \"\";\n const activeTurnId =\n typeof active.turnId === \"string\" ? active.turnId : \"\";\n if (activeStatus !== \"running\" && activeTurnId !== turnId) {\n return false;\n }\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 return contentAfterContinuationPrefix(\n content,\n visibleContinuationPrefix,\n );\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 // Real, content-weight progress: streamed text or a completed tool\n // result. Used to reset the stalled/empty counters so trivial\n // whitespace-only output cannot keep the run alive indefinitely.\n const madeContentProgress = hasContinuationProgress(visibleContent);\n // An action was streamed but has not returned yet (a tool_start with\n // no tool_done), or the activity trail shows the server was working\n // on a tool. A run_timeout that fires in this window means the agent\n // was actively making progress — the server's foldAssistantTurn\n // persisted the in-flight call — so it must NOT count against the\n // stalled/empty continuation budgets.\n const hasInFlightTool =\n hasInFlightToolCall(visibleContent) ||\n Boolean(lastActivityTool(signal.activityTrail));\n // Either real output or an actively-running tool counts as progress\n // for the stalled/empty caps.\n const madeProgress = madeContentProgress || hasInFlightTool;\n const madeDurableToolProgress = visibleContent.some(\n (part) => part.type === \"tool-call\" && part.result !== undefined,\n );\n // In-flight tool stall guard. When the same write tool is stuck\n // in-flight because the connection keeps dropping (stream_ended),\n // hasInFlightTool=true keeps madeProgress=true and completely\n // bypasses the stalled/empty budgets. Track the last in-flight tool\n // name; when the same tool is still unresolved after\n // MAX_REPEATED_INFLIGHT_TOOL_STALLS consecutive stream_ended events,\n // bail with a clear message.\n //\n // Only count stream_ended (connection drop / reconnect failed), NOT\n // run_timeout (server legitimately still executing a slow tool). A\n // run_timeout with an in-flight tool means the server is actively\n // working and reconnection may still recover the result; a repeated\n // stream_ended means the connection keeps breaking under that payload.\n const currentInFlightToolPart = visibleContent.find(\n (p): p is Extract<ContentPart, { type: \"tool-call\" }> =>\n p.type === \"tool-call\" &&\n p.result === undefined &&\n p.activity !== true,\n );\n const currentInFlightToolName = currentInFlightToolPart?.toolName;\n const currentInFlightToolSignature = currentInFlightToolPart\n ? inFlightToolInputSignature(currentInFlightToolPart)\n : undefined;\n const isConnectionDrop = signal.reason === \"stream_ended\";\n if (currentInFlightToolName && isConnectionDrop) {\n if (\n currentInFlightToolName === lastInFlightToolName &&\n currentInFlightToolSignature === lastInFlightToolSignature\n ) {\n repeatedInFlightToolCount += 1;\n } else {\n // New tool, or the same tool retried with a CHANGED (e.g.\n // smaller) payload — give the changed input a fresh stall budget\n // instead of aborting it as a repeat of the prior payload.\n repeatedInFlightToolCount = 0;\n lastInFlightToolName = currentInFlightToolName;\n lastInFlightToolSignature = currentInFlightToolSignature;\n }\n } else if (!currentInFlightToolName) {\n repeatedInFlightToolCount = 0;\n }\n\n // Degenerate repetition guard. When the model gets stuck re-streaming\n // the SAME narration every continuation without ever starting or\n // finishing a tool, each round is \"new\" text — so madeProgress stays\n // true and the stalled/empty budgets never trip. Compare this round's\n // unique-sentence signature to the previous round's; a match with no\n // tool progress is a non-advancing loop. Tracked by its own counter\n // so it bails after a few rounds instead of the full transient budget,\n // without perturbing the stalled/empty/stale accounting.\n const repeatSignature = continuationRepeatSignature(visibleContent);\n const isNonAdvancingRepeat =\n signal.reason !== \"loop_limit\" &&\n repeatSignature !== \"\" &&\n repeatSignature === lastContinuationRepeatSignature &&\n !hasInFlightTool &&\n !madeDurableToolProgress;\n\n if (signal.reason === \"loop_limit\") {\n stalledTransientContinuationAttempts = 0;\n emptyTransientContinuationAttempts = 0;\n } else {\n totalTransientContinuationAttempts += 1;\n // Bail when the same write tool is stuck in-flight across too many\n // consecutive continuations. Checked before the text-repeat guard\n // because hasInFlightTool=true would mask the repeat as progress.\n if (\n repeatedInFlightToolCount >= MAX_REPEATED_INFLIGHT_TOOL_STALLS\n ) {\n recoveryGaveUpOnRepetition = true;\n return { ok: false, resetVisibleContent: false };\n }\n // Bail fast on a non-advancing repetition loop, well before the\n // stalled/empty/total budgets would (each round otherwise re-sends\n // the whole pasted payload). Tracked separately so it never trips\n // on legitimately-progressing runs that happen to be slow.\n if (isNonAdvancingRepeat) {\n repeatedTransientContinuationAttempts += 1;\n if (\n repeatedTransientContinuationAttempts >\n MAX_REPEATED_TRANSIENT_CONTINUATIONS\n ) {\n recoveryGaveUpOnRepetition = true;\n return { ok: false, resetVisibleContent: false };\n }\n } else {\n repeatedTransientContinuationAttempts = 0;\n }\n if (repeatSignature) {\n lastContinuationRepeatSignature = repeatSignature;\n }\n // A run_timeout that produced nothing visible and no activity (the\n // model spent the whole soft-timeout window thinking before its\n // first output) is NOT an immediate give-up: a transient slow start\n // routinely recovers on the next continuation. Let it fall through\n // to the empty-continuation budget below so it retries a bounded\n // number of times before surfacing the \"no visible progress\" error.\n // Reset the empty-continuation counter on real progress — streamed\n // text/completed tool OR an in-flight tool the server is running —\n // not merely on a non-zero part count, which whitespace-only or\n // unresolved-only output would falsely satisfy.\n if (!madeProgress) {\n emptyTransientContinuationAttempts += 1;\n if (\n emptyTransientContinuationAttempts >\n MAX_EMPTY_TRANSIENT_CONTINUATIONS\n ) {\n return { ok: false, resetVisibleContent: false };\n }\n } else {\n emptyTransientContinuationAttempts = 0;\n }\n if (signal.reason === \"stale_run\") {\n staleRunContinuationAttempts = madeDurableToolProgress\n ? 0\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 // Keep everything visible during transient recovery. The continuation\n // prefix diff tracks what the next request has already seen, so\n // preserving text no longer causes duplicate continuation history.\n visibleContinuationPrefix = snapshotContent(content);\n return { ok: true, resetVisibleContent: false };\n };\n\n while (true) {\n try {\n runId = null;\n lastSeq = -1;\n const res = await fetchWithStartupTimeout(\n apiUrl,\n {\n method: \"POST\",\n headers,\n body: JSON.stringify({\n message: currentMessageText,\n displayMessage: userMessageText,\n history: currentHistory,\n structuredHistory: currentStructuredHistory,\n turnId,\n ...(trackInRunsTray ? { trackInRunsTray: true } : {}),\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 ...(browserTabId ? { browserTabId } : {}),\n ...(scopeRef?.current ? { scope: scopeRef.current } : {}),\n ...(includeAttachments ? { attachments } : {}),\n ...(includeReferences && runConfig?.custom?.references\n ? { references: runConfig.custom.references }\n : {}),\n ...(approvedToolCalls ? { approvedToolCalls } : {}),\n }),\n },\n STARTUP_RESPONSE_TIMEOUT_MS,\n 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 const failure = missingCredentialFailure(body);\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new Event(\"agent-chat:missing-api-key\"),\n );\n window.dispatchEvent(\n new CustomEvent(\"agent-chat:run-error\", {\n detail: { ...failure.runError, tabId },\n }),\n );\n }\n content.push({ type: \"text\", text: failure.text });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n metadata: { custom: { runError: failure.runError } },\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 for await (const result of 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 yield withRequestModeMetadata(result);\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 = exhaustedRecoveryMessage(err.reason);\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 settleInterruptedToolCalls(content);\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 // Signal to the UI that we are in the continuation window so it\n // can display \"Resuming…\" instead of \"Thinking\" during the gap.\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new CustomEvent(\"agent-chat:auto-continue\", {\n detail: { tabId },\n }),\n );\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 const failure = missingCredentialFailure(errMsg);\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(new Event(\"agent-chat:missing-api-key\"));\n window.dispatchEvent(\n new CustomEvent(\"agent-chat:run-error\", {\n detail: { ...failure.runError, tabId },\n }),\n );\n }\n content.push({ type: \"text\", text: failure.text });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n metadata: { custom: { runError: failure.runError } },\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 if (err instanceof AgentStartupTimeoutError) {\n const message =\n \"The agent chat endpoint accepted the request but did not start streaming in time. This usually means prompt setup, the LLM gateway, or the provider is stalled.\";\n captureChatClientError(err, \"startup-timeout\", {\n timeoutMs: err.timeoutMs,\n });\n const runError = {\n message,\n details: connectionRecoveryDetails(),\n errorCode: \"startup_timeout\",\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: { custom: { ...(runId ? { runId } : {}), runError } },\n };\n clearActiveRun();\n return;\n }\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 = exhaustedRecoveryMessage(\"stream_ended\");\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 settleInterruptedToolCalls(content);\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 // Signal to the UI that we are in the continuation window.\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new CustomEvent(\"agent-chat:auto-continue\", {\n detail: { tabId },\n }),\n );\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":"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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 AgentActivityTrailEntry,\n type ContentPart,\n readSSEStream,\n settleInterruptedToolCalls,\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\";\nimport type { ChatThreadScope } from \"./use-chat-threads.js\";\n\nexport type AgentChatSurfaceKind =\n /**\n * Chat rendered by the app itself, including the normal AgentSidebar. This\n * surface must not receive code-editing dev tools because source edits can\n * reload the same React tree that is hosting the chat.\n */\n | \"app\"\n /** Chat rendered by the outer local dev frame, outside the app iframe. */\n | \"dev-frame\";\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 \"image/svg+xml\",\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 AUTO_CONTINUE_COMPLETION_GUARD =\n \"Before doing more work, inspect the prior partial assistant output in history. If it already gives a coherent answer, summary, artifact, coverage note, or next-step recommendation, finish with at most one short closing sentence and do not call tools, scan more data, or expand the search. Continue only genuinely unfinished work.\";\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;\n// How many consecutive continuations that produce NO progress (no streamed\n// text, no completed/in-flight tool) we tolerate before giving up. A complex\n// first turn can spend the whole soft-timeout window (~40s) \"thinking\" with no\n// visible output; giving up after a single such window made the agent feel like\n// it \"craps out / stops midway\" on heavier prompts (Analytics). Retrying a few\n// times lets a transient slow start recover, while the cap still terminates a\n// genuinely stuck turn with a clear message instead of looping forever.\nconst MAX_EMPTY_TRANSIENT_CONTINUATIONS = 3;\n// How many consecutive continuations that re-stream the SAME narration without\n// advancing (no in-flight tool, no completed tool) we tolerate before giving\n// up. A model that degenerates into repeating one phrase (\"I have the full\n// HTML. Creating the extension now!\") emits \"new\" text every continuation,\n// which keeps resetting the stalled/empty budgets — so without this guard the\n// stuck turn burns the entire MAX_TOTAL_TRANSIENT_CONTINUATIONS budget (each\n// round re-sending any large pasted payload) before bailing. Catching the\n// repeat ends it in a few rounds with a clear, actionable message instead.\nconst MAX_REPEATED_TRANSIENT_CONTINUATIONS = 3;\nconst RETRY_BASE_DELAY_MS = 500;\nconst RETRY_MAX_DELAY_MS = 8_000;\nconst MAX_HISTORY_ATTACHMENT_CHARS = 60_000;\n// The attachment submitted with the CURRENT turn gets a much larger cap than\n// prior-history embedding. The server threads this turn's attachments into each\n// action's ActionRunContext, and `create-extension`/`update-extension` host a\n// pasted file verbatim from it via `contentFromAttachment` — a feature whose\n// whole point is large pastes. Truncating the outbound payload to the 60K\n// history cap would silently cut a >60K HTML/Alpine file before the server ever\n// reads it, hosting a broken extension. Mirror the large-input tool-arg cap\n// (MAX_HISTORY_LARGE_TOOL_ARGS_CHARS) so realistic pasted files survive intact;\n// the trailing truncation notice still makes a pathological multi-MB paste\n// visibly (not silently) capped.\nconst MAX_OUTBOUND_ATTACHMENT_CHARS = 200_000;\nconst MAX_HISTORY_MESSAGES = 24;\nconst MAX_HISTORY_TOTAL_CHARS = 64_000;\nconst MAX_HISTORY_MESSAGE_CHARS = 12_000;\nconst MAX_HISTORY_TOOL_ARGS_CHARS = 8_000;\nconst MAX_HISTORY_TOOL_RESULT_CHARS = 12_000;\n// Tools whose entire input IS the artifact being built (extension HTML, etc.).\n// Lossy-truncating these to a `{ __agentNativeTruncated }` placeholder strands\n// the resumed agent — it can no longer refine the artifact because it sees a\n// fake input. Keep the real input for these on continuation, only collapsing\n// inputs that are far larger than any realistic extension payload.\nconst LARGE_INPUT_TOOL_NAMES = new Set([\n \"create-extension\",\n \"update-extension\",\n]);\nconst MAX_HISTORY_LARGE_TOOL_ARGS_CHARS = 200_000;\nconst STARTUP_RESPONSE_TIMEOUT_MS = 45_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 truncateForHistory(\n value: string,\n maxChars: number,\n label: string,\n): string {\n if (value.length <= maxChars) return value;\n const omitted = value.length - maxChars;\n return `${value.slice(0, maxChars)}\\n\\n[${label} truncated after ${maxChars.toLocaleString()} characters; ${omitted.toLocaleString()} characters omitted from prior chat history. Read the current app/resource state with tools if exact content is needed.]`;\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 if (part.activity === true) continue;\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 truncateForHistory(\n content\n .filter((p): p is { type: \"text\"; text: string } => p.type === \"text\")\n .map((p) => normalizeMentions(p.text))\n .join(\"\\n\"),\n MAX_HISTORY_MESSAGE_CHARS,\n \"Message\",\n );\n}\n\nfunction truncateToolArgsForHistory(\n args: unknown,\n toolName?: string,\n): Record<string, unknown> {\n if (!args || typeof args !== \"object\" || Array.isArray(args)) return {};\n // Large-input tools (e.g. create-extension/update-extension) carry the\n // artifact itself as their input. Preserve the real input on continuation so\n // the resumed agent can keep refining it; only collapse inputs that exceed a\n // far larger ceiling than any realistic payload.\n const cap =\n toolName && LARGE_INPUT_TOOL_NAMES.has(toolName)\n ? MAX_HISTORY_LARGE_TOOL_ARGS_CHARS\n : MAX_HISTORY_TOOL_ARGS_CHARS;\n try {\n const json = JSON.stringify(args);\n if (json.length <= cap) {\n return args as Record<string, unknown>;\n }\n return {\n __agentNativeTruncated: true,\n note: \"Tool input was too large to resend in chat history. Use the current app/resource state as the source of truth if exact content is needed.\",\n preview: truncateForHistory(json, cap, \"Tool input\"),\n };\n } catch {\n return {\n __agentNativeTruncated: true,\n note: \"Tool input could not be serialized for prior chat history.\",\n };\n }\n}\n\nfunction messageTextFromContentRaw(\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, \"&\")\n .replace(/\"/g, \""\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\");\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 isSvgAttachment(args: {\n name?: string;\n contentType?: string;\n}): boolean {\n const contentType = args.contentType?.split(\";\")[0]?.trim().toLowerCase();\n return contentType === \"image/svg+xml\" || /\\.svg$/i.test(args.name ?? \"\");\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 content?: readonly { type: string; image?: string }[];\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 preserveDataUrl =\n part.data.startsWith(\"data:\") &&\n shouldPreserveFileDataUrl({ name: att.name, contentType });\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 ...(preserveDataUrl\n ? {\n data: part.data,\n ...(decodedText !== null\n ? { text: truncateOutboundAttachment(decodedText) }\n : {}),\n }\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 for (const part of message.content ?? []) {\n if (part.type === \"image\" && typeof part.image === \"string\") {\n attachments.push({\n type: \"image\",\n name: \"image\",\n contentType: /^data:([^;,]+)/.exec(part.image)?.[1],\n data: part.image,\n });\n }\n }\n return attachments;\n}\n\nfunction shouldPreserveFileDataUrl(args: {\n name?: string;\n contentType?: string;\n}): boolean {\n return isSvgAttachment(args);\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_OUTBOUND_ATTACHMENT_CHARS) return text;\n const omitted = text.length - MAX_OUTBOUND_ATTACHMENT_CHARS;\n return `${text.slice(0, MAX_OUTBOUND_ATTACHMENT_CHARS)}\\n\\n[Attachment truncated after ${MAX_OUTBOUND_ATTACHMENT_CHARS.toLocaleString()} characters; ${omitted.toLocaleString()} characters omitted from the submitted attachment.]`;\n}\n\nfunction attachmentHistoryText(\n attachment: AgentChatAdapterAttachment,\n): string | null {\n if (isSvgAttachment(attachment)) {\n const label = attachment.name || \"SVG attachment\";\n const contentType = attachment.contentType\n ? ` (${attachment.contentType})`\n : \"\";\n return `[Attached ${attachment.type || \"file\"}: ${label}${contentType}; SVG reference-only, raw markup omitted from prior chat history.]`;\n }\n\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 = messageTextFromContentRaw(message.content);\n const attachments = extractAttachmentsFromMessage(message)\n .map(attachmentHistoryText)\n .filter((part): part is string => !!part && part.trim().length > 0);\n return truncateForHistory(\n [text, ...attachments].filter((part) => part.trim()).join(\"\\n\\n\"),\n MAX_HISTORY_MESSAGE_CHARS,\n \"Message\",\n );\n}\n\ntype AdapterMessage = {\n role: string;\n content: readonly { type: string; text?: string }[];\n attachments?: readonly AssistantUiAttachment[];\n metadata?: unknown;\n};\n\nconst RECOVERY_USER_MESSAGE_PREFIXES = [\n \"Continue from where you left off\",\n \"Continue from where you stopped\",\n \"Retry the previous request from a clean approach\",\n];\n\nfunction recoveryActionFromMessage(\n message: unknown,\n): \"continue\" | \"retry\" | null {\n const meta = (message as { metadata?: unknown })?.metadata as\n | { custom?: { agentNativeRecoveryAction?: unknown } }\n | undefined;\n const action = meta?.custom?.agentNativeRecoveryAction;\n return action === \"continue\" || action === \"retry\" ? action : null;\n}\n\nfunction isRecoveryUserMessage(message: AdapterMessage): boolean {\n if (recoveryActionFromMessage(message)) return true;\n const text = messageTextFromContentRaw(message.content).trim();\n return RECOVERY_USER_MESSAGE_PREFIXES.some((prefix) =>\n text.startsWith(prefix),\n );\n}\n\nfunction latestUserMessage(\n messages: readonly AdapterMessage[],\n options?: { skipRecovery?: boolean; beforeIndex?: number },\n): AdapterMessage | undefined {\n const start =\n typeof options?.beforeIndex === \"number\"\n ? Math.min(options.beforeIndex, messages.length)\n : messages.length;\n for (let i = start - 1; i >= 0; i--) {\n const message = messages[i];\n if (message.role !== \"user\") continue;\n if (options?.skipRecovery && isRecoveryUserMessage(message)) continue;\n return message;\n }\n return undefined;\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 isSuccessOnlyToolResult(value: Record<string, unknown>): boolean {\n const keys = Object.keys(value);\n if (keys.length === 0) return true;\n return keys.every((key) => {\n const item = value[key];\n if (key === \"ok\" || key === \"success\") return item === true;\n if (key === \"status\") {\n return item === \"ok\" || item === \"success\" || item === \"completed\";\n }\n return false;\n });\n}\n\nfunction toolResultContent(result: unknown, toolName?: string): string {\n if (typeof result === \"string\") return result;\n const completed = toolName?.trim()\n ? `${toolName.trim()} completed.`\n : \"Tool completed.\";\n if (result === true || result == null) return completed;\n if (result && typeof result === \"object\" && !Array.isArray(result)) {\n const record = result as Record<string, unknown>;\n const message = record.message ?? record.summary;\n if (typeof message === \"string\" && message.trim()) return message.trim();\n const title = record.title ?? record.name;\n if (typeof title === \"string\" && title.trim()) {\n return `${title.trim()} is ready.`;\n }\n const id = record.id ?? record.planId ?? record.commentId;\n if (typeof id === \"string\" && id.trim() && toolName?.trim()) {\n return `${toolName.trim()} completed for ${id.trim()}.`;\n }\n if (isSuccessOnlyToolResult(record)) return completed;\n }\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 options?: { truncateForHistory?: boolean },\n): AgentChatStructuredMessage[] {\n const messages: AgentChatStructuredMessage[] = [];\n let assistantParts: AgentChatStructuredContentPart[] = [];\n let pendingToolResults: AgentChatStructuredContentPart[] = [];\n const truncate = options?.truncateForHistory === true;\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({\n type: \"text\",\n text: truncate\n ? truncateForHistory(\n part.text,\n MAX_HISTORY_MESSAGE_CHARS,\n \"Assistant text\",\n )\n : part.text,\n });\n }\n continue;\n }\n\n if (isToolCallContentPart(part)) {\n if (part.activity === true) continue;\n const toolCallId = nextToolCallId();\n assistantParts.push({\n type: \"tool-call\",\n toolCallId,\n toolName: part.toolName,\n args: truncate\n ? truncateToolArgsForHistory(part.args ?? {}, part.toolName)\n : (part.args ?? {}),\n });\n if (part.result !== undefined) {\n pendingToolResults.push({\n type: \"tool-result\",\n toolCallId,\n toolName: part.toolName,\n toolInput: JSON.stringify(part.args ?? {}),\n content: truncate\n ? truncateForHistory(\n toolResultContent(part.result, part.toolName),\n MAX_HISTORY_TOOL_RESULT_CHARS,\n \"Tool result\",\n )\n : toolResultContent(part.result, part.toolName),\n });\n } else {\n pendingToolResults.push({\n type: \"tool-result\",\n toolCallId,\n toolName: part.toolName,\n toolInput: JSON.stringify(part.args ?? {}),\n content: \"Interrupted before this tool returned a 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 if ((part as { activity?: unknown }).activity === true) continue;\n const toolNameRaw =\n typeof part.toolName === \"string\"\n ? part.toolName\n : typeof (part as { name?: string }).name === \"string\"\n ? (part as { name?: string }).name\n : \"\";\n const toolName = toolNameRaw.trim();\n if (!toolName) continue;\n content.push({\n type: \"tool-call\",\n toolCallId:\n typeof part.toolCallId === \"string\" ? part.toolCallId : \"\",\n 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, toolName) }\n : {}),\n });\n }\n }\n structured.push(\n ...contentToStructuredMessages(content, nextToolCallId, {\n truncateForHistory: true,\n }),\n );\n }\n\n return structured;\n}\n\nfunction estimateHistoryMessageCost(message: {\n content: readonly { type: string; text?: string }[];\n attachments?: readonly AssistantUiAttachment[];\n}): number {\n return Math.max(1, messageTextForHistory(message).length);\n}\n\nfunction limitPriorMessagesForRequest<\n T extends {\n role: string;\n content: readonly { type: string; text?: string }[];\n attachments?: readonly AssistantUiAttachment[];\n },\n>(messages: readonly T[]): T[] {\n const recent = messages.slice(-MAX_HISTORY_MESSAGES);\n const kept: T[] = [];\n let totalChars = 0;\n\n for (let i = recent.length - 1; i >= 0; i--) {\n const message = recent[i];\n if (message.role !== \"user\" && message.role !== \"assistant\") continue;\n const cost = estimateHistoryMessageCost(message);\n if (kept.length > 0 && totalChars + cost > MAX_HISTORY_TOTAL_CHARS) {\n break;\n }\n kept.push(message);\n totalChars += cost;\n }\n\n kept.reverse();\n while (kept.length > 0 && kept[0].role !== \"user\") {\n kept.shift();\n }\n return kept;\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 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\n/**\n * Signature of the *unique* sentence-like segments in a continuation's newly\n * streamed text, used to detect a degenerate repetition loop. A stuck model\n * re-emits the same phrase (\"I have the full HTML. Creating the extension\n * now!\") an arbitrary number of times per run, so the set of unique segments\n * is small and stable across continuations regardless of how many times any\n * single run repeated it. An empty signature (no visible text) is never a\n * repeat — the stalled/empty budgets handle no-output stalls instead.\n */\nfunction continuationRepeatSignature(content: ContentPart[]): string {\n const text = content\n .map((part) => (part.type === \"text\" ? part.text : \"\"))\n .join(\" \")\n .toLowerCase();\n const segments = text\n // Split after sentence punctuation even when runs are concatenated without\n // a following space (\"...now!I have...\"), and on newlines.\n .split(/(?<=[.!?])|\\n+/)\n .map((segment) => segment.replace(/[^a-z0-9]+/g, \" \").trim())\n .filter((segment) => segment.length > 0);\n if (segments.length === 0) return \"\";\n return Array.from(new Set(segments)).sort().join(\"\u0000\");\n}\n\n/**\n * True when an action was streamed but never returned a result yet — i.e. a\n * `tool_start` with no matching `tool_done`. The server is still executing it,\n * so a run_timeout that fires in this window is NOT a stall: the agent was\n * actively working and `foldAssistantTurn` persisted the in-flight call. We\n * must not count this against the stalled/empty continuation budgets.\n */\nfunction hasInFlightToolCall(content: ContentPart[]): boolean {\n return content.some(\n (part) =>\n part.type === \"tool-call\" &&\n part.result === undefined &&\n part.activity !== true,\n );\n}\n\nfunction lastActivityTool(\n trail: readonly AgentActivityTrailEntry[],\n): string | undefined {\n for (let i = trail.length - 1; i >= 0; i--) {\n const tool = trail[i]?.tool?.trim();\n if (tool) return tool;\n }\n return undefined;\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 stableJson(value: unknown): string {\n try {\n return JSON.stringify(value);\n } catch {\n return String(value ?? \"\");\n }\n}\n\n// Bounded signature of an in-flight tool call's input, used by the stall guard\n// to tell a genuinely-stuck retry (same tool, same payload, connection keeps\n// dropping) apart from a legitimate retry with a CHANGED payload (e.g. the\n// `create-extension` cutoff nudge tells the model to re-send a smaller body).\n// A changed payload yields a different signature, so the guard resets that\n// tool's stall budget instead of aborting the new attempt as a repeat. Bounded\n// to length + head so we never retain a large pasted payload across rounds.\nfunction inFlightToolInputSignature(\n part: Extract<ContentPart, { type: \"tool-call\" }>,\n): string {\n const raw = part.argsText ?? stableJson(part.args);\n return `${raw.length}\u0000${raw.slice(0, 256)}`;\n}\n\nfunction toolContinuationKey(\n part: Extract<ContentPart, { type: \"tool-call\" }>,\n): string {\n return [\n part.toolCallId,\n part.toolName,\n part.argsText,\n stableJson(part.args),\n part.result === undefined ? \"pending\" : \"done\",\n part.result ?? \"\",\n part.activity === true ? \"activity\" : \"tool\",\n part.mcpApp ? \"mcp-app\" : \"\",\n ].join(\"\\u0000\");\n}\n\nfunction contentAfterContinuationPrefix(\n content: ContentPart[],\n prefix: ContentPart[],\n): ContentPart[] {\n if (prefix.length === 0) return content;\n\n const delta: ContentPart[] = [];\n let contentIndex = 0;\n\n for (const prefixPart of prefix) {\n const currentPart = content[contentIndex];\n if (!currentPart) return content.slice(contentIndex);\n\n if (prefixPart.type === \"text\" && currentPart.type === \"text\") {\n if (currentPart.text === prefixPart.text) {\n contentIndex += 1;\n continue;\n }\n\n if (currentPart.text.startsWith(prefixPart.text)) {\n const appendedText = currentPart.text.slice(prefixPart.text.length);\n if (appendedText) delta.push({ type: \"text\", text: appendedText });\n contentIndex += 1;\n continue;\n }\n\n return content.slice(contentIndex);\n }\n\n if (\n prefixPart.type === \"tool-call\" &&\n currentPart.type === \"tool-call\" &&\n toolContinuationKey(currentPart) === toolContinuationKey(prefixPart)\n ) {\n contentIndex += 1;\n continue;\n }\n\n return content.slice(contentIndex);\n }\n\n return [...delta, ...content.slice(contentIndex)];\n}\n\nfunction autoContinueMessage(signal: AgentAutoContinueSignal): string {\n const tool = lastActivityTool(signal.activityTrail);\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 // A run_timeout or a mid-stream cutoff while assembling one large action\n // payload (e.g. inlining a big pasted HTML file into `create-extension`) is\n // the classic trigger for the repetition/cutoff loop. Nudge the model toward\n // a compact first version it can actually finish in a single run.\n const cutoffPreparingAction =\n signal.reason === \"run_timeout\" || signal.reason === \"stream_ended\";\n const actionInputNote =\n cutoffPreparingAction && tool\n ? `\\n\\nThe previous run was cut off while preparing the \\`${tool}\\` action input before the action could finish. Avoid spending another whole run assembling one large tool payload. If this is \\`create-extension\\`, create a compact working v1 first, then use focused \\`update-extension\\` edits for refinements.`\n : \"\";\n return `${AUTO_CONTINUE_PROMPT}\\n\\n${AUTO_CONTINUE_COMPLETION_GUARD}\\n\\nInternal note: ${reason}${actionInputNote}`;\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\nclass AgentStartupTimeoutError extends Error {\n readonly timeoutMs: number;\n\n constructor(timeoutMs: number) {\n super(\n `Agent chat did not start streaming within ${Math.round(timeoutMs / 1000)}s.`,\n );\n this.name = \"AgentStartupTimeoutError\";\n this.timeoutMs = timeoutMs;\n }\n}\n\nasync function fetchWithStartupTimeout(\n input: RequestInfo | URL,\n init: RequestInit,\n timeoutMs: number,\n abortSignal: AbortSignal,\n): Promise<Response> {\n if (abortSignal.aborted) {\n throw new DOMException(\"The operation was aborted.\", \"AbortError\");\n }\n\n const controller = new AbortController();\n let timedOut = false;\n const timeout = setTimeout(() => {\n timedOut = true;\n controller.abort();\n }, timeoutMs);\n const abort = () => controller.abort();\n abortSignal.addEventListener(\"abort\", abort, { once: true });\n\n try {\n return await fetch(input, { ...init, signal: controller.signal });\n } catch (error) {\n if (timedOut) {\n throw new AgentStartupTimeoutError(timeoutMs);\n }\n throw error;\n } finally {\n clearTimeout(timeout);\n abortSignal.removeEventListener(\"abort\", abort);\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 generateTurnId(): string {\n if (\n typeof crypto !== \"undefined\" &&\n typeof crypto.randomUUID === \"function\"\n ) {\n return `turn-${crypto.randomUUID()}`;\n }\n return `turn-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;\n}\n\nfunction isRetryableStartupError(message: string): boolean {\n const msg = message.toLowerCase();\n if (\n msg.includes(\"cannot find any route matching\") &&\n msg.includes(\"/_agent-native/agent-chat\")\n ) {\n return true;\n }\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 missingCredentialFailure(message: string): {\n text: string;\n runError: { message: string; errorCode: string };\n} {\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 const errorCode =\n typeof parsed.errorCode === \"string\"\n ? parsed.errorCode\n : \"missing_credentials\";\n return {\n text: formatChatErrorText(\n raw,\n typeof parsed.upgradeUrl === \"string\" ? parsed.upgradeUrl : undefined,\n errorCode,\n ),\n runError: {\n message: normalizeChatError(raw).message,\n errorCode,\n },\n };\n } catch {\n return {\n text: formatChatErrorText(message, undefined, \"missing_credentials\"),\n runError: {\n message: normalizeChatError(message).message,\n errorCode: \"missing_credentials\",\n },\n };\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 interface CreateAgentChatAdapterOptions {\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 browserTabId?: string;\n scopeRef?: { current: ChatThreadScope | null | undefined };\n surface?: AgentChatSurfaceKind;\n}\n\nexport function createAgentChatAdapter(\n options?: CreateAgentChatAdapterOptions,\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 const browserTabId = options?.browserTabId;\n const scopeRef = options?.scopeRef;\n const surface = options?.surface ?? \"app\";\n\n return {\n async *run({ messages, abortSignal, runConfig }) {\n // Extract latest user message and build history from prior messages\n const adapterMessages = messages as readonly AdapterMessage[];\n const latestUserIndex = (() => {\n for (let i = adapterMessages.length - 1; i >= 0; i--) {\n if (adapterMessages[i].role === \"user\") return i;\n }\n return -1;\n })();\n const latestUserMsg =\n latestUserIndex >= 0 ? adapterMessages[latestUserIndex] : undefined;\n const latestUserIsRecovery = latestUserMsg\n ? isRecoveryUserMessage(latestUserMsg)\n : false;\n const lastUserMsg =\n latestUserIsRecovery && latestUserIndex >= 0\n ? (latestUserMessage(adapterMessages, {\n skipRecovery: true,\n beforeIndex: latestUserIndex,\n }) ?? latestUserMsg)\n : latestUserMsg;\n const recoveryMessageText =\n latestUserIsRecovery && latestUserMsg\n ? messageTextFromContentRaw(latestUserMsg.content)\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 trackInRunsTray =\n runConfig?.custom &&\n typeof runConfig.custom === \"object\" &&\n (runConfig.custom as { trackInRunsTray?: unknown }).trackInRunsTray ===\n true;\n // Human-in-the-loop approval keys (opt-in `needsApproval` actions). When\n // the user approves a paused tool call, the turn is re-issued with the\n // approval key so the server lets that specific call run.\n const approvedToolCalls = (() => {\n const raw =\n runConfig?.custom &&\n typeof runConfig.custom === \"object\" &&\n \"approvedToolCalls\" in runConfig.custom\n ? (runConfig.custom as { approvedToolCalls?: unknown })\n .approvedToolCalls\n : undefined;\n if (!Array.isArray(raw)) return undefined;\n const keys = raw.filter(\n (key): key is string => typeof key === \"string\" && key.length > 0,\n );\n return keys.length > 0 ? keys : undefined;\n })();\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 const withRequestModeMetadata = (\n result: ChatModelRunResult,\n ): ChatModelRunResult => {\n if (!requestMode) return result;\n const metadata = (result.metadata ?? {}) as Record<string, unknown>;\n const custom =\n metadata.custom && typeof metadata.custom === \"object\"\n ? (metadata.custom as Record<string, unknown>)\n : {};\n return {\n ...result,\n metadata: {\n ...metadata,\n custom: { ...custom, requestMode },\n },\n };\n };\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 = limitPriorMessagesForRequest(\n messages.slice(0, latestUserIndex >= 0 ? latestUserIndex : -1) as any,\n ); // exclude latest user/recovery message and cap resend size\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 const turnId = generateTurnId();\n let runId: string | null = null;\n let lastSeq = -1;\n let currentMessageText = normalizeMentions(\n recoveryMessageText.trim() || userMessageText,\n );\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 emptyTransientContinuationAttempts = 0;\n let totalTransientContinuationAttempts = 0;\n let repeatedTransientContinuationAttempts = 0;\n let lastContinuationRepeatSignature: string | null = null;\n let recoveryGaveUpOnRepetition = false;\n // Track when the same write tool is stuck in-flight across consecutive\n // continuations (connection keeps dropping mid-execution). This is\n // orthogonal to the text-repeat guard — in-flight tools reset\n // madeProgress=true so the stalled/empty budgets never fire, but the tool\n // never actually completes. After MAX_REPEATED_INFLIGHT_TOOL_STALLS\n // consecutive interruptions of the same tool, bail with a clear message.\n let lastInFlightToolName: string | undefined;\n // Signature of the stuck tool's input. A retry with a changed payload\n // (different signature) resets the stall count so the new attempt gets\n // its own budget rather than inheriting the prior payload's.\n let lastInFlightToolSignature: string | undefined;\n let repeatedInFlightToolCount = 0;\n const MAX_REPEATED_INFLIGHT_TOOL_STALLS = 3;\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 `empty_transient_continuations: ${emptyTransientContinuationAttempts}`,\n `repeated_transient_continuations: ${repeatedTransientContinuationAttempts}`,\n `repeated_inflight_tool_stalls: ${repeatedInFlightToolCount}`,\n lastInFlightToolName\n ? `last_inflight_tool: ${lastInFlightToolName}`\n : \"\",\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 exhaustedRecoveryMessage = (reason?: string): string => {\n if (recoveryGaveUpOnRepetition) {\n return \"The agent got stuck repeating the same response without finishing, so I stopped the automatic retries. This often happens when it tries to re-type a large pasted file into one action — starting a new chat, or asking for a smaller first step, usually gets it unstuck.\";\n }\n if (\n content.length === 0 &&\n (reason === \"run_timeout\" ||\n reason === \"no_progress\" ||\n reason === \"stream_ended\")\n ) {\n return \"The agent request started but did not produce any visible progress before timing out. I stopped the automatic retries so this chat would not stay stuck on Thinking.\";\n }\n return \"The agent connection kept failing after several automatic recovery attempts.\";\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 emptyTransientContinuationAttempts,\n repeatedTransientContinuationAttempts,\n repeatedInFlightToolCount,\n lastInFlightToolName,\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 emptyTransientContinuationAttempts,\n repeatedTransientContinuationAttempts,\n repeatedInFlightToolCount,\n lastInFlightToolName,\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 // Surface hint — the server uses this to keep code-editing dev tools\n // out of the app-rendered sidebar. The outer dev frame passes\n // \"dev-frame\" explicitly; the reusable in-product chat defaults to\n // \"app\" even when it is running in Desktop or inside a preview iframe.\n headers[\"x-agent-native-surface\"] = surface;\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 if (reconnectRes.status === 404) {\n clearActiveRun();\n return false;\n }\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 for await (const result of 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 yield withRequestModeMetadata(result);\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 if (activeRes.status === 404) {\n return false;\n }\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 activeStatus =\n typeof active.status === \"string\" ? active.status : \"\";\n const activeTurnId =\n typeof active.turnId === \"string\" ? active.turnId : \"\";\n if (activeStatus !== \"running\" && activeTurnId !== turnId) {\n return false;\n }\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 return contentAfterContinuationPrefix(\n content,\n visibleContinuationPrefix,\n );\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 // Real, content-weight progress: streamed text or a completed tool\n // result. Used to reset the stalled/empty counters so trivial\n // whitespace-only output cannot keep the run alive indefinitely.\n const madeContentProgress = hasContinuationProgress(visibleContent);\n // An action was streamed but has not returned yet (a tool_start with\n // no tool_done), or the activity trail shows the server was working\n // on a tool. A run_timeout that fires in this window means the agent\n // was actively making progress — the server's foldAssistantTurn\n // persisted the in-flight call — so it must NOT count against the\n // stalled/empty continuation budgets.\n const hasInFlightTool =\n hasInFlightToolCall(visibleContent) ||\n Boolean(lastActivityTool(signal.activityTrail));\n // Either real output or an actively-running tool counts as progress\n // for the stalled/empty caps.\n const madeProgress = madeContentProgress || hasInFlightTool;\n const madeDurableToolProgress = visibleContent.some(\n (part) => part.type === \"tool-call\" && part.result !== undefined,\n );\n // In-flight tool stall guard. When the same write tool is stuck\n // in-flight because the connection keeps dropping (stream_ended),\n // hasInFlightTool=true keeps madeProgress=true and completely\n // bypasses the stalled/empty budgets. Track the last in-flight tool\n // name; when the same tool is still unresolved after\n // MAX_REPEATED_INFLIGHT_TOOL_STALLS consecutive stream_ended events,\n // bail with a clear message.\n //\n // Only count stream_ended (connection drop / reconnect failed), NOT\n // run_timeout (server legitimately still executing a slow tool). A\n // run_timeout with an in-flight tool means the server is actively\n // working and reconnection may still recover the result; a repeated\n // stream_ended means the connection keeps breaking under that payload.\n const currentInFlightToolPart = visibleContent.find(\n (p): p is Extract<ContentPart, { type: \"tool-call\" }> =>\n p.type === \"tool-call\" &&\n p.result === undefined &&\n p.activity !== true,\n );\n const currentInFlightToolName = currentInFlightToolPart?.toolName;\n const currentInFlightToolSignature = currentInFlightToolPart\n ? inFlightToolInputSignature(currentInFlightToolPart)\n : undefined;\n const isConnectionDrop = signal.reason === \"stream_ended\";\n if (currentInFlightToolName && isConnectionDrop) {\n if (\n currentInFlightToolName === lastInFlightToolName &&\n currentInFlightToolSignature === lastInFlightToolSignature\n ) {\n repeatedInFlightToolCount += 1;\n } else {\n // New tool, or the same tool retried with a CHANGED (e.g.\n // smaller) payload — give the changed input a fresh stall budget\n // instead of aborting it as a repeat of the prior payload.\n repeatedInFlightToolCount = 0;\n lastInFlightToolName = currentInFlightToolName;\n lastInFlightToolSignature = currentInFlightToolSignature;\n }\n } else if (!currentInFlightToolName) {\n repeatedInFlightToolCount = 0;\n }\n\n // Degenerate repetition guard. When the model gets stuck re-streaming\n // the SAME narration every continuation without ever starting or\n // finishing a tool, each round is \"new\" text — so madeProgress stays\n // true and the stalled/empty budgets never trip. Compare this round's\n // unique-sentence signature to the previous round's; a match with no\n // tool progress is a non-advancing loop. Tracked by its own counter\n // so it bails after a few rounds instead of the full transient budget,\n // without perturbing the stalled/empty/stale accounting.\n const repeatSignature = continuationRepeatSignature(visibleContent);\n const isNonAdvancingRepeat =\n signal.reason !== \"loop_limit\" &&\n repeatSignature !== \"\" &&\n repeatSignature === lastContinuationRepeatSignature &&\n !hasInFlightTool &&\n !madeDurableToolProgress;\n\n if (signal.reason === \"loop_limit\") {\n stalledTransientContinuationAttempts = 0;\n emptyTransientContinuationAttempts = 0;\n } else {\n totalTransientContinuationAttempts += 1;\n // Bail when the same write tool is stuck in-flight across too many\n // consecutive continuations. Checked before the text-repeat guard\n // because hasInFlightTool=true would mask the repeat as progress.\n if (\n repeatedInFlightToolCount >= MAX_REPEATED_INFLIGHT_TOOL_STALLS\n ) {\n recoveryGaveUpOnRepetition = true;\n return { ok: false, resetVisibleContent: false };\n }\n // Bail fast on a non-advancing repetition loop, well before the\n // stalled/empty/total budgets would (each round otherwise re-sends\n // the whole pasted payload). Tracked separately so it never trips\n // on legitimately-progressing runs that happen to be slow.\n if (isNonAdvancingRepeat) {\n repeatedTransientContinuationAttempts += 1;\n if (\n repeatedTransientContinuationAttempts >\n MAX_REPEATED_TRANSIENT_CONTINUATIONS\n ) {\n recoveryGaveUpOnRepetition = true;\n return { ok: false, resetVisibleContent: false };\n }\n } else {\n repeatedTransientContinuationAttempts = 0;\n }\n if (repeatSignature) {\n lastContinuationRepeatSignature = repeatSignature;\n }\n // A run_timeout that produced nothing visible and no activity (the\n // model spent the whole soft-timeout window thinking before its\n // first output) is NOT an immediate give-up: a transient slow start\n // routinely recovers on the next continuation. Let it fall through\n // to the empty-continuation budget below so it retries a bounded\n // number of times before surfacing the \"no visible progress\" error.\n // Reset the empty-continuation counter on real progress — streamed\n // text/completed tool OR an in-flight tool the server is running —\n // not merely on a non-zero part count, which whitespace-only or\n // unresolved-only output would falsely satisfy.\n if (!madeProgress) {\n emptyTransientContinuationAttempts += 1;\n if (\n emptyTransientContinuationAttempts >\n MAX_EMPTY_TRANSIENT_CONTINUATIONS\n ) {\n return { ok: false, resetVisibleContent: false };\n }\n } else {\n emptyTransientContinuationAttempts = 0;\n }\n if (signal.reason === \"stale_run\") {\n staleRunContinuationAttempts = madeDurableToolProgress\n ? 0\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 // Keep everything visible during transient recovery. The continuation\n // prefix diff tracks what the next request has already seen, so\n // preserving text no longer causes duplicate continuation history.\n visibleContinuationPrefix = snapshotContent(content);\n return { ok: true, resetVisibleContent: false };\n };\n\n while (true) {\n try {\n runId = null;\n lastSeq = -1;\n const res = await fetchWithStartupTimeout(\n apiUrl,\n {\n method: \"POST\",\n headers,\n body: JSON.stringify({\n message: currentMessageText,\n displayMessage: userMessageText,\n history: currentHistory,\n structuredHistory: currentStructuredHistory,\n turnId,\n ...(trackInRunsTray ? { trackInRunsTray: true } : {}),\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 ...(browserTabId ? { browserTabId } : {}),\n ...(scopeRef?.current ? { scope: scopeRef.current } : {}),\n ...(includeAttachments ? { attachments } : {}),\n ...(includeReferences && runConfig?.custom?.references\n ? { references: runConfig.custom.references }\n : {}),\n ...(approvedToolCalls ? { approvedToolCalls } : {}),\n }),\n },\n STARTUP_RESPONSE_TIMEOUT_MS,\n 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 const failure = missingCredentialFailure(body);\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new Event(\"agent-chat:missing-api-key\"),\n );\n window.dispatchEvent(\n new CustomEvent(\"agent-chat:run-error\", {\n detail: { ...failure.runError, tabId },\n }),\n );\n }\n content.push({ type: \"text\", text: failure.text });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n metadata: { custom: { runError: failure.runError } },\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 for await (const result of 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 yield withRequestModeMetadata(result);\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 = exhaustedRecoveryMessage(err.reason);\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 settleInterruptedToolCalls(content);\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 // Signal to the UI that we are in the continuation window so it\n // can display \"Resuming…\" instead of \"Thinking\" during the gap.\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new CustomEvent(\"agent-chat:auto-continue\", {\n detail: { tabId },\n }),\n );\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 const failure = missingCredentialFailure(errMsg);\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(new Event(\"agent-chat:missing-api-key\"));\n window.dispatchEvent(\n new CustomEvent(\"agent-chat:run-error\", {\n detail: { ...failure.runError, tabId },\n }),\n );\n }\n content.push({ type: \"text\", text: failure.text });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n metadata: { custom: { runError: failure.runError } },\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 if (err instanceof AgentStartupTimeoutError) {\n const message =\n \"The agent chat endpoint accepted the request but did not start streaming in time. This usually means prompt setup, the LLM gateway, or the provider is stalled.\";\n captureChatClientError(err, \"startup-timeout\", {\n timeoutMs: err.timeoutMs,\n });\n const runError = {\n message,\n details: connectionRecoveryDetails(),\n errorCode: \"startup_timeout\",\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: { custom: { ...(runId ? { runId } : {}), runError } },\n };\n clearActiveRun();\n return;\n }\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 = exhaustedRecoveryMessage(\"stream_ended\");\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 settleInterruptedToolCalls(content);\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 // Signal to the UI that we are in the continuation window.\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new CustomEvent(\"agent-chat:auto-continue\", {\n detail: { tabId },\n }),\n );\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"]}
|