@agent-native/core 0.12.25 → 0.12.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/dist/agent/engine/builder-engine.d.ts +1 -1
  2. package/dist/agent/engine/builder-engine.d.ts.map +1 -1
  3. package/dist/agent/model-config.d.ts +3 -3
  4. package/dist/agent/model-config.d.ts.map +1 -1
  5. package/dist/agent/model-config.js +5 -4
  6. package/dist/agent/model-config.js.map +1 -1
  7. package/dist/agent/production-agent.d.ts.map +1 -1
  8. package/dist/agent/production-agent.js +20 -2
  9. package/dist/agent/production-agent.js.map +1 -1
  10. package/dist/application-state/emitter.d.ts +3 -2
  11. package/dist/application-state/emitter.d.ts.map +1 -1
  12. package/dist/application-state/emitter.js +4 -2
  13. package/dist/application-state/emitter.js.map +1 -1
  14. package/dist/application-state/store.js +3 -3
  15. package/dist/application-state/store.js.map +1 -1
  16. package/dist/client/AgentPanel.d.ts.map +1 -1
  17. package/dist/client/AgentPanel.js +0 -1
  18. package/dist/client/AgentPanel.js.map +1 -1
  19. package/dist/client/AgentTaskCard.d.ts.map +1 -1
  20. package/dist/client/AgentTaskCard.js +16 -3
  21. package/dist/client/AgentTaskCard.js.map +1 -1
  22. package/dist/client/AssistantChat.d.ts.map +1 -1
  23. package/dist/client/AssistantChat.js +67 -19
  24. package/dist/client/AssistantChat.js.map +1 -1
  25. package/dist/client/IframeEmbed.d.ts.map +1 -1
  26. package/dist/client/IframeEmbed.js +2 -2
  27. package/dist/client/IframeEmbed.js.map +1 -1
  28. package/dist/client/MultiTabAssistantChat.js.map +1 -1
  29. package/dist/client/agent-chat-adapter.d.ts.map +1 -1
  30. package/dist/client/agent-chat-adapter.js +74 -14
  31. package/dist/client/agent-chat-adapter.js.map +1 -1
  32. package/dist/client/composer/ComposerPlusMenu.d.ts.map +1 -1
  33. package/dist/client/composer/ComposerPlusMenu.js +1 -1
  34. package/dist/client/composer/ComposerPlusMenu.js.map +1 -1
  35. package/dist/client/composer/PromptComposer.d.ts.map +1 -1
  36. package/dist/client/composer/PromptComposer.js +8 -7
  37. package/dist/client/composer/PromptComposer.js.map +1 -1
  38. package/dist/client/composer/attachment-accept.d.ts +7 -0
  39. package/dist/client/composer/attachment-accept.d.ts.map +1 -0
  40. package/dist/client/composer/attachment-accept.js +36 -0
  41. package/dist/client/composer/attachment-accept.js.map +1 -0
  42. package/dist/client/sse-event-processor.d.ts.map +1 -1
  43. package/dist/client/sse-event-processor.js +8 -0
  44. package/dist/client/sse-event-processor.js.map +1 -1
  45. package/dist/client/use-chat-models.js.map +1 -1
  46. package/dist/client/use-db-sync.d.ts +4 -0
  47. package/dist/client/use-db-sync.d.ts.map +1 -1
  48. package/dist/client/use-db-sync.js +38 -13
  49. package/dist/client/use-db-sync.js.map +1 -1
  50. package/dist/client/use-pausing-interval.d.ts.map +1 -1
  51. package/dist/client/use-pausing-interval.js +5 -2
  52. package/dist/client/use-pausing-interval.js.map +1 -1
  53. package/dist/collab/client.d.ts +2 -0
  54. package/dist/collab/client.d.ts.map +1 -1
  55. package/dist/collab/client.js +37 -4
  56. package/dist/collab/client.js.map +1 -1
  57. package/dist/db/client.d.ts +3 -0
  58. package/dist/db/client.d.ts.map +1 -1
  59. package/dist/db/client.js +70 -34
  60. package/dist/db/client.js.map +1 -1
  61. package/dist/db/create-get-db.d.ts.map +1 -1
  62. package/dist/db/create-get-db.js +30 -7
  63. package/dist/db/create-get-db.js.map +1 -1
  64. package/dist/deploy/build.js +64 -0
  65. package/dist/deploy/build.js.map +1 -1
  66. package/dist/scripts/db/exec.d.ts.map +1 -1
  67. package/dist/scripts/db/exec.js +3 -6
  68. package/dist/scripts/db/exec.js.map +1 -1
  69. package/dist/scripts/db/patch.d.ts.map +1 -1
  70. package/dist/scripts/db/patch.js +3 -6
  71. package/dist/scripts/db/patch.js.map +1 -1
  72. package/dist/scripts/db/query.d.ts.map +1 -1
  73. package/dist/scripts/db/query.js +3 -6
  74. package/dist/scripts/db/query.js.map +1 -1
  75. package/dist/scripts/db/schema.d.ts.map +1 -1
  76. package/dist/scripts/db/schema.js +3 -6
  77. package/dist/scripts/db/schema.js.map +1 -1
  78. package/dist/scripts/db/sqlite-client.d.ts +15 -0
  79. package/dist/scripts/db/sqlite-client.d.ts.map +1 -0
  80. package/dist/scripts/db/sqlite-client.js +51 -0
  81. package/dist/scripts/db/sqlite-client.js.map +1 -0
  82. package/dist/server/auth.d.ts.map +1 -1
  83. package/dist/server/auth.js +83 -2
  84. package/dist/server/auth.js.map +1 -1
  85. package/dist/server/better-auth-instance.js +4 -3
  86. package/dist/server/better-auth-instance.js.map +1 -1
  87. package/dist/server/google-auth-plugin.d.ts.map +1 -1
  88. package/dist/server/google-auth-plugin.js +50 -3
  89. package/dist/server/google-auth-plugin.js.map +1 -1
  90. package/dist/server/google-oauth.d.ts.map +1 -1
  91. package/dist/server/google-oauth.js +10 -4
  92. package/dist/server/google-oauth.js.map +1 -1
  93. package/dist/server/onboarding-html.d.ts.map +1 -1
  94. package/dist/server/onboarding-html.js +50 -3
  95. package/dist/server/onboarding-html.js.map +1 -1
  96. package/dist/server/poll.d.ts.map +1 -1
  97. package/dist/server/poll.js +15 -0
  98. package/dist/server/poll.js.map +1 -1
  99. package/dist/templates/default/app/hooks/use-navigation-state.ts +0 -1
  100. package/package.json +1 -1
  101. package/src/templates/default/app/hooks/use-navigation-state.ts +0 -1
@@ -1,7 +1,7 @@
1
1
  import { setActiveRun, updateActiveRunSeq, clearActiveRun, } from "./active-run-state.js";
2
2
  import { AgentAutoContinueSignal, readSSEStream, } from "./sse-event-processor.js";
3
3
  import { agentNativePath } from "./api-path.js";
4
- import { normalizeChatError } from "./error-format.js";
4
+ import { formatChatErrorText, normalizeChatError } from "./error-format.js";
5
5
  import { captureError } from "./analytics.js";
6
6
  import { unwrapAttachmentEnvelope } from "./composer/pasted-text.js";
7
7
  const TEXT_ATTACHMENT_CONTENT_TYPES = new Set([
@@ -389,6 +389,25 @@ function authErrorReasonFromMessage(message) {
389
389
  ? "session-expired"
390
390
  : "auth-required";
391
391
  }
392
+ function authErrorText(reason, message) {
393
+ const fallback = reason === "session-expired"
394
+ ? "Your chat session expired. Refresh chat and sign in again to continue."
395
+ : "Authentication required. Sign in again to use chat.";
396
+ if (!message)
397
+ return formatChatErrorText(fallback);
398
+ try {
399
+ const parsed = JSON.parse(message);
400
+ const raw = typeof parsed.error === "string"
401
+ ? parsed.error
402
+ : typeof parsed.message === "string"
403
+ ? parsed.message
404
+ : undefined;
405
+ return formatChatErrorText(raw || fallback);
406
+ }
407
+ catch {
408
+ return formatChatErrorText(message || fallback);
409
+ }
410
+ }
392
411
  function safeAgentNativePath(path) {
393
412
  try {
394
413
  return agentNativePath(path);
@@ -408,6 +427,20 @@ function isMissingCredentialMessage(message) {
408
427
  msg.includes("no llm provider") ||
409
428
  msg.includes("llm provider is connected"));
410
429
  }
430
+ function missingCredentialErrorText(message) {
431
+ try {
432
+ const parsed = JSON.parse(message);
433
+ const raw = typeof parsed.error === "string"
434
+ ? parsed.error
435
+ : typeof parsed.message === "string"
436
+ ? parsed.message
437
+ : message;
438
+ return formatChatErrorText(raw, typeof parsed.upgradeUrl === "string" ? parsed.upgradeUrl : undefined, typeof parsed.errorCode === "string" ? parsed.errorCode : undefined);
439
+ }
440
+ catch {
441
+ return formatChatErrorText(message);
442
+ }
443
+ }
411
444
  /**
412
445
  * The composer's exec mode is sent as explicit request metadata. The server
413
446
  * owns the plan-mode prompt and read-only tool filtering so the chat history
@@ -439,11 +472,18 @@ export function createAgentChatAdapter(options) {
439
472
  .filter((p) => p.type === "text")
440
473
  .map((p) => p.text)
441
474
  .join("\n") ?? "";
442
- const requestMode = execModeRef?.current === "plan"
443
- ? "plan"
444
- : execModeRef?.current === "build"
445
- ? "act"
446
- : undefined;
475
+ const runConfigRequestMode = runConfig?.custom &&
476
+ typeof runConfig.custom === "object" &&
477
+ "requestMode" in runConfig.custom
478
+ ? runConfig.custom.requestMode
479
+ : undefined;
480
+ const requestMode = runConfigRequestMode === "act" || runConfigRequestMode === "plan"
481
+ ? runConfigRequestMode
482
+ : execModeRef?.current === "plan"
483
+ ? "plan"
484
+ : execModeRef?.current === "build"
485
+ ? "act"
486
+ : undefined;
447
487
  // Extract attachments (images as base64, text as content).
448
488
  // assistant-ui puts user attachments on msg.attachments (not on content);
449
489
  // each attachment carries its own content parts from the adapter.
@@ -860,7 +900,10 @@ export function createAgentChatAdapter(options) {
860
900
  continue;
861
901
  }
862
902
  dispatchAuthError("auth-required");
863
- content.push({ type: "text", text: "" });
903
+ content.push({
904
+ type: "text",
905
+ text: authErrorText("auth-required"),
906
+ });
864
907
  yield {
865
908
  content: [...content],
866
909
  status: {
@@ -877,7 +920,10 @@ export function createAgentChatAdapter(options) {
877
920
  continue;
878
921
  }
879
922
  dispatchAuthError("session-expired");
880
- content.push({ type: "text", text: "" });
923
+ content.push({
924
+ type: "text",
925
+ text: authErrorText("session-expired"),
926
+ });
881
927
  yield {
882
928
  content: [...content],
883
929
  status: {
@@ -894,8 +940,12 @@ export function createAgentChatAdapter(options) {
894
940
  if (await tryRecoverAuthOnce()) {
895
941
  continue;
896
942
  }
897
- dispatchAuthError(authErrorReasonFromMessage(body));
898
- content.push({ type: "text", text: "" });
943
+ const reason = authErrorReasonFromMessage(body);
944
+ dispatchAuthError(reason);
945
+ content.push({
946
+ type: "text",
947
+ text: authErrorText(reason, body),
948
+ });
899
949
  yield {
900
950
  content: [...content],
901
951
  status: {
@@ -909,7 +959,10 @@ export function createAgentChatAdapter(options) {
909
959
  if (typeof window !== "undefined") {
910
960
  window.dispatchEvent(new Event("agent-chat:missing-api-key"));
911
961
  }
912
- content.push({ type: "text", text: "" });
962
+ content.push({
963
+ type: "text",
964
+ text: missingCredentialErrorText(body),
965
+ });
913
966
  yield {
914
967
  content: [...content],
915
968
  status: {
@@ -1022,8 +1075,12 @@ export function createAgentChatAdapter(options) {
1022
1075
  if (await tryRecoverAuthOnce()) {
1023
1076
  continue;
1024
1077
  }
1025
- dispatchAuthError(authErrorReasonFromMessage(errMsg));
1026
- content.push({ type: "text", text: "" });
1078
+ const reason = authErrorReasonFromMessage(errMsg);
1079
+ dispatchAuthError(reason);
1080
+ content.push({
1081
+ type: "text",
1082
+ text: authErrorText(reason, errMsg),
1083
+ });
1027
1084
  yield {
1028
1085
  content: [...content],
1029
1086
  status: {
@@ -1038,7 +1095,10 @@ export function createAgentChatAdapter(options) {
1038
1095
  if (typeof window !== "undefined") {
1039
1096
  window.dispatchEvent(new Event("agent-chat:missing-api-key"));
1040
1097
  }
1041
- content.push({ type: "text", text: "" });
1098
+ content.push({
1099
+ type: "text",
1100
+ text: missingCredentialErrorText(errMsg),
1101
+ });
1042
1102
  yield {
1043
1103
  content: [...content],
1044
1104
  status: {
@@ -1 +1 @@
1
- {"version":3,"file":"agent-chat-adapter.js","sourceRoot":"","sources":["../../src/client/agent-chat-adapter.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ChatModelAdapter, ChatModelRunResult } from \"@assistant-ui/react\";\nimport {\n setActiveRun,\n updateActiveRunSeq,\n clearActiveRun,\n} from \"./active-run-state.js\";\nimport {\n AgentAutoContinueSignal,\n type ContentPart,\n readSSEStream,\n} from \"./sse-event-processor.js\";\nimport { agentNativePath } from \"./api-path.js\";\nimport { normalizeChatError } from \"./error-format.js\";\nimport { captureError } from \"./analytics.js\";\nimport { unwrapAttachmentEnvelope } from \"./composer/pasted-text.js\";\nimport type { ReasoningEffort } from \"../shared/reasoning-effort.js\";\nimport type {\n AgentChatStructuredContentPart,\n AgentChatStructuredMessage,\n} from \"../agent/types.js\";\n\ntype AdapterHistoryMessage = {\n role: \"user\" | \"assistant\";\n content: string;\n};\n\ntype AssistantUiAttachment = {\n name: string;\n contentType?: string;\n content: readonly Record<string, unknown>[];\n};\n\ntype AgentChatAdapterAttachment = {\n type: string;\n name: string;\n contentType?: string;\n data?: string;\n text?: string;\n};\n\nconst TEXT_ATTACHMENT_CONTENT_TYPES = new Set([\n \"application/json\",\n \"application/x-ndjson\",\n \"text/csv\",\n \"text/css\",\n \"text/html\",\n \"text/json\",\n \"text/markdown\",\n \"text/plain\",\n \"text/xml\",\n]);\n\nconst AUTO_CONTINUE_PROMPT =\n \"Continue from where you left off and finish the user's original request. Do not repeat completed work, do not mention internal reconnects, time limits, or step limits, and continue as if this is the same uninterrupted run.\";\nconst MAX_RECONNECT_ATTEMPTS = 5;\nconst MAX_STARTUP_RECOVERY_ATTEMPTS = 8;\nconst MAX_STALE_RUN_CONTINUATIONS = 3;\nconst MAX_STALLED_TRANSIENT_CONTINUATIONS = 8;\nconst MAX_TOTAL_TRANSIENT_CONTINUATIONS = 32;\nconst RETRY_BASE_DELAY_MS = 500;\nconst RETRY_MAX_DELAY_MS = 8_000;\nconst MAX_HISTORY_ATTACHMENT_CHARS = 60_000;\n\nfunction normalizeMentions(text: string): string {\n return text.replace(/@\\[([^\\]|]+)\\|[^\\]]+\\]/g, \"@$1\");\n}\n\nfunction truncateForContinuation(value: string, maxChars: number): string {\n if (value.length <= maxChars) return value;\n return `${value.slice(0, maxChars)}\\n\\n...[truncated ${value.length - maxChars} chars from prior partial output]`;\n}\n\nfunction contentToContinuationHistory(content: ContentPart[]): string {\n const chunks: string[] = [];\n for (const part of content) {\n if (part.type === \"text\") {\n if (part.text.trim()) chunks.push(part.text.trim());\n continue;\n }\n const toolSummary = [\n `Tool: ${part.toolName}`,\n part.argsText ? `Input: ${part.argsText}` : \"\",\n part.result\n ? `Result:\\n${truncateForContinuation(part.result, 8_000)}`\n : \"Result: interrupted before this tool returned a result\",\n ]\n .filter(Boolean)\n .join(\"\\n\");\n chunks.push(toolSummary);\n }\n return truncateForContinuation(chunks.join(\"\\n\\n\"), 40_000).trim();\n}\n\nfunction messageTextFromContent(\n content: readonly { type: string; text?: string }[],\n): string {\n return content\n .filter((p): p is { type: \"text\"; text: string } => p.type === \"text\")\n .map((p) => normalizeMentions(p.text))\n .join(\"\\n\");\n}\n\nfunction escapeAttachmentAttribute(value: string): string {\n return value\n .replace(/&/g, \"&amp;\")\n .replace(/\"/g, \"&quot;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\");\n}\n\nfunction isTextAttachmentContentType(value: string | undefined): boolean {\n if (!value) return false;\n const contentType = value.split(\";\")[0]?.trim().toLowerCase();\n return (\n !!contentType &&\n (contentType.startsWith(\"text/\") ||\n TEXT_ATTACHMENT_CONTENT_TYPES.has(contentType))\n );\n}\n\nfunction decodeTextDataUrl(dataUrl: string): string | null {\n const match = dataUrl.match(\n /^data:([^;,]+)(?:;charset=[^;,]+)?(;base64)?,(.*)$/i,\n );\n if (!match || !isTextAttachmentContentType(match[1])) return null;\n\n try {\n const payload = match[3] ?? \"\";\n if (match[2]) {\n if (typeof atob === \"function\") {\n return decodeURIComponent(\n Array.from(\n atob(payload),\n (char) => `%${char.charCodeAt(0).toString(16).padStart(2, \"0\")}`,\n ).join(\"\"),\n );\n }\n return null;\n }\n return decodeURIComponent(payload.replace(/\\+/g, \"%20\"));\n } catch {\n return null;\n }\n}\n\nfunction extractAttachmentsFromMessage(message: {\n attachments?: readonly AssistantUiAttachment[];\n}): AgentChatAdapterAttachment[] {\n const attachments: AgentChatAdapterAttachment[] = [];\n for (const att of message.attachments ?? []) {\n for (const part of att.content) {\n if (part.type === \"image\" && typeof part.image === \"string\") {\n attachments.push({\n type: \"image\",\n name: att.name,\n contentType: att.contentType,\n data: part.image,\n });\n } else if (part.type === \"file\" && typeof part.data === \"string\") {\n const contentType =\n att.contentType ??\n (typeof part.mimeType === \"string\" ? part.mimeType : undefined);\n const decodedText = part.data.startsWith(\"data:\")\n ? decodeTextDataUrl(part.data)\n : null;\n attachments.push({\n type: \"file\",\n name: att.name,\n contentType,\n ...(decodedText !== null\n ? { text: truncateOutboundAttachment(decodedText) }\n : part.data.startsWith(\"data:\")\n ? { data: part.data }\n : { text: truncateOutboundAttachment(part.data) }),\n });\n } else if (part.type === \"text\" && typeof part.text === \"string\") {\n attachments.push({\n type: \"file\",\n name: att.name,\n contentType: att.contentType,\n text: truncateOutboundAttachment(unwrapAttachmentEnvelope(part.text)),\n });\n }\n }\n }\n return attachments;\n}\n\nfunction truncateHistoryAttachment(text: string): string {\n if (text.length <= MAX_HISTORY_ATTACHMENT_CHARS) return text;\n const omitted = text.length - MAX_HISTORY_ATTACHMENT_CHARS;\n return `${text.slice(0, MAX_HISTORY_ATTACHMENT_CHARS)}\\n\\n[Attachment truncated after ${MAX_HISTORY_ATTACHMENT_CHARS.toLocaleString()} characters; ${omitted.toLocaleString()} characters omitted from prior chat history.]`;\n}\n\nfunction truncateOutboundAttachment(text: string): string {\n if (text.length <= MAX_HISTORY_ATTACHMENT_CHARS) return text;\n const omitted = text.length - MAX_HISTORY_ATTACHMENT_CHARS;\n return `${text.slice(0, MAX_HISTORY_ATTACHMENT_CHARS)}\\n\\n[Attachment truncated after ${MAX_HISTORY_ATTACHMENT_CHARS.toLocaleString()} characters; ${omitted.toLocaleString()} characters omitted from the submitted attachment.]`;\n}\n\nfunction attachmentHistoryText(\n attachment: AgentChatAdapterAttachment,\n): string | null {\n if (typeof attachment.text === \"string\" && attachment.text.length > 0) {\n const attrs = [\n `name=\"${escapeAttachmentAttribute(attachment.name || \"attachment\")}\"`,\n attachment.contentType\n ? `contentType=\"${escapeAttachmentAttribute(attachment.contentType)}\"`\n : null,\n attachment.type\n ? `type=\"${escapeAttachmentAttribute(attachment.type)}\"`\n : null,\n ].filter(Boolean);\n return `<attachment ${attrs.join(\" \")}>\\n${truncateHistoryAttachment(attachment.text)}\\n</attachment>`;\n }\n\n if (attachment.name) {\n return `[Attached ${attachment.type || \"file\"}: ${attachment.name}${attachment.contentType ? ` (${attachment.contentType})` : \"\"}]`;\n }\n return null;\n}\n\nfunction messageTextForHistory(message: {\n content: readonly { type: string; text?: string }[];\n attachments?: readonly AssistantUiAttachment[];\n}): string {\n const text = messageTextFromContent(message.content);\n const attachments = extractAttachmentsFromMessage(message)\n .map(attachmentHistoryText)\n .filter((part): part is string => !!part && part.trim().length > 0);\n return [text, ...attachments].filter((part) => part.trim()).join(\"\\n\\n\");\n}\n\nfunction isToolCallContentPart(\n part: unknown,\n): part is Extract<ContentPart, { type: \"tool-call\" }> {\n return Boolean(\n part && typeof part === \"object\" && (part as any).type === \"tool-call\",\n );\n}\n\nfunction toolResultContent(result: unknown): string {\n if (typeof result === \"string\") return result;\n try {\n return JSON.stringify(result);\n } catch {\n return String(result ?? \"\");\n }\n}\n\nfunction contentToStructuredMessages(\n content: readonly ContentPart[],\n nextToolCallId: () => string,\n): AgentChatStructuredMessage[] {\n const messages: AgentChatStructuredMessage[] = [];\n let assistantParts: AgentChatStructuredContentPart[] = [];\n let pendingToolResults: AgentChatStructuredContentPart[] = [];\n\n const flushToolTurn = () => {\n if (pendingToolResults.length === 0) return;\n if (assistantParts.length > 0) {\n messages.push({ role: \"assistant\", content: assistantParts });\n }\n messages.push({ role: \"user\", content: pendingToolResults });\n assistantParts = [];\n pendingToolResults = [];\n };\n\n for (const part of content) {\n if (part.type === \"text\") {\n if (pendingToolResults.length > 0) flushToolTurn();\n if (part.text.trim()) {\n assistantParts.push({ type: \"text\", text: part.text });\n }\n continue;\n }\n\n if (isToolCallContentPart(part)) {\n const toolCallId = nextToolCallId();\n assistantParts.push({\n type: \"tool-call\",\n toolCallId,\n toolName: part.toolName,\n args: part.args ?? {},\n });\n if (part.result !== undefined) {\n pendingToolResults.push({\n type: \"tool-result\",\n toolCallId,\n toolName: part.toolName,\n content: toolResultContent(part.result),\n });\n }\n }\n }\n\n flushToolTurn();\n if (assistantParts.length > 0) {\n messages.push({ role: \"assistant\", content: assistantParts });\n }\n return messages;\n}\n\nfunction assistantUiMessagesToStructuredHistory(\n messages: readonly {\n role: string;\n content: readonly any[];\n attachments?: readonly AssistantUiAttachment[];\n }[],\n): AgentChatStructuredMessage[] {\n let nextId = 0;\n const nextToolCallId = () => `history_tc_${++nextId}`;\n const structured: AgentChatStructuredMessage[] = [];\n\n for (const message of messages) {\n if (message.role === \"user\") {\n const text = messageTextForHistory(message);\n if (text.trim()) {\n structured.push({\n role: \"user\",\n content: [{ type: \"text\", text }],\n });\n }\n continue;\n }\n\n if (message.role !== \"assistant\") continue;\n const content: ContentPart[] = [];\n for (const part of message.content) {\n if (part?.type === \"text\" && typeof part.text === \"string\") {\n content.push({ type: \"text\", text: part.text });\n continue;\n }\n if (part?.type === \"tool-call\") {\n content.push({\n type: \"tool-call\",\n toolCallId:\n typeof part.toolCallId === \"string\" ? part.toolCallId : \"\",\n toolName:\n typeof part.toolName === \"string\"\n ? part.toolName\n : typeof part.toolName === \"undefined\"\n ? \"unknown\"\n : String(part.toolName),\n argsText:\n typeof part.argsText === \"string\"\n ? part.argsText\n : JSON.stringify(part.args ?? {}),\n args:\n part.args &&\n typeof part.args === \"object\" &&\n !Array.isArray(part.args)\n ? part.args\n : {},\n ...(part.result !== undefined\n ? { result: toolResultContent(part.result) }\n : {}),\n });\n }\n }\n structured.push(...contentToStructuredMessages(content, nextToolCallId));\n }\n\n return structured;\n}\n\nfunction combineContinuationHistory(fragments: string[]): string {\n return truncateForContinuation(\n fragments.filter(Boolean).join(\"\\n\\n\"),\n 40_000,\n ).trim();\n}\n\nfunction visibleTransientContinuationContent(\n content: ContentPart[],\n): ContentPart[] {\n return content.filter(\n (part) => part.type === \"tool-call\" && part.result !== undefined,\n );\n}\n\nfunction hasContinuationProgress(content: ContentPart[]): boolean {\n return content.some((part) =>\n part.type === \"text\"\n ? part.text.trim().length > 0\n : part.result !== undefined,\n );\n}\n\nfunction snapshotContent(content: ContentPart[]): ContentPart[] {\n return content.map((part) =>\n part.type === \"text\" ? { ...part } : { ...part, args: { ...part.args } },\n );\n}\n\nfunction autoContinueMessage(signal: AgentAutoContinueSignal): string {\n const reason =\n signal.reason === \"loop_limit\"\n ? \"The previous run reached an internal step budget.\"\n : signal.reason === \"stale_run\"\n ? \"The previous run stopped unexpectedly in the server runtime before it could finish.\"\n : signal.reason === \"no_progress\"\n ? \"The previous run stopped producing progress events while the connection stayed open.\"\n : signal.reason === \"stream_ended\"\n ? \"The previous stream ended before the agent sent a final completion signal.\"\n : \"The previous run reached an internal execution budget.\";\n return `${AUTO_CONTINUE_PROMPT}\\n\\nInternal note: ${reason}`;\n}\n\nfunction delay(ms: number, abortSignal: AbortSignal): Promise<void> {\n if (abortSignal.aborted) return Promise.resolve();\n return new Promise((resolve) => {\n const timer = setTimeout(resolve, ms);\n abortSignal.addEventListener(\n \"abort\",\n () => {\n clearTimeout(timer);\n resolve();\n },\n { once: true },\n );\n });\n}\n\nfunction retryDelay(attempt: number, abortSignal: AbortSignal): Promise<void> {\n const base = Math.min(\n RETRY_MAX_DELAY_MS,\n RETRY_BASE_DELAY_MS * Math.pow(2, attempt),\n );\n const jitter = base * 0.2;\n const ms = Math.max(0, base + (Math.random() * 2 - 1) * jitter);\n return delay(ms, abortSignal);\n}\n\nfunction isRetryableStartupError(message: string): boolean {\n const msg = message.toLowerCase();\n if (\n msg.includes(\"unauthorized\") ||\n msg.includes(\"not authenticated\") ||\n msg.includes(\"401\") ||\n msg.includes(\"403\") ||\n msg.includes(\"404\") ||\n msg.includes(\"405\") ||\n msg.includes(\"missing api key\") ||\n msg.includes(\"api key\") ||\n msg.includes(\"context_length\") ||\n msg.includes(\"input_too_long\") ||\n msg.includes(\"too many tokens\") ||\n msg.includes(\"prompt is too long\") ||\n msg.includes(\"credits-limit\") ||\n msg.includes(\"billing\") ||\n msg.includes(\"permission\")\n ) {\n return false;\n }\n return (\n msg.includes(\"failed to fetch\") ||\n msg.includes(\"network\") ||\n msg.includes(\"connection\") ||\n msg.includes(\"reset\") ||\n msg.includes(\"econnreset\") ||\n msg.includes(\"socket\") ||\n msg.includes(\"timeout\") ||\n msg.includes(\"gateway timeout\") ||\n msg.includes(\"inactivity timeout\") ||\n msg.includes(\"temporarily unavailable\") ||\n msg.includes(\"server error: 408\") ||\n msg.includes(\"server error: 429\") ||\n msg.includes(\"server error: 500\") ||\n msg.includes(\"server error: 502\") ||\n msg.includes(\"server error: 503\") ||\n msg.includes(\"server error: 504\") ||\n msg.includes(\"429\") ||\n msg.includes(\"500\") ||\n msg.includes(\"502\") ||\n msg.includes(\"503\") ||\n msg.includes(\"504\") ||\n msg.includes(\"529\")\n );\n}\n\nfunction isAuthErrorMessage(message: string): boolean {\n const msg = message.toLowerCase();\n return (\n msg.includes(\"authentication required\") ||\n msg.includes(\"unauthorized\") ||\n msg.includes(\"not authenticated\") ||\n msg.includes(\"forbidden\") ||\n msg.includes(\"invalid token\") ||\n msg.includes(\"invalid or expired token\") ||\n msg.includes(\"session expired\") ||\n msg.includes(\"http_401\") ||\n msg.includes(\"http_403\") ||\n msg.includes(\"401\") ||\n msg.includes(\"403\") ||\n msg.includes(\"405\")\n );\n}\n\nfunction authErrorReasonFromMessage(\n message: string,\n): \"auth-required\" | \"session-expired\" {\n const msg = message.toLowerCase();\n return msg.includes(\"session\") ||\n msg.includes(\"expired\") ||\n msg.includes(\"invalid token\") ||\n msg.includes(\"405\")\n ? \"session-expired\"\n : \"auth-required\";\n}\n\nfunction 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\n/**\n * The composer's exec mode is sent as explicit request metadata. The server\n * owns the plan-mode prompt and read-only tool filtering so the chat history\n * stays clean and Plan mode is enforced outside the model's goodwill.\n */\n/**\n * Creates a ChatModelAdapter that connects to the agent-native\n * `/_agent-native/agent-chat` SSE endpoint. Supports reconnection via run-manager.\n */\nexport function createAgentChatAdapter(options?: {\n apiUrl?: string;\n tabId?: string;\n threadId?: string;\n modelRef?: { current: string | undefined };\n engineRef?: { current: string | undefined };\n effortRef?: { current: ReasoningEffort | undefined };\n execModeRef?: { current: \"build\" | \"plan\" | undefined };\n}): ChatModelAdapter {\n const apiUrl =\n options?.apiUrl ?? agentNativePath(\"/_agent-native/agent-chat\");\n const tabId = options?.tabId;\n const threadId = options?.threadId;\n const modelRef = options?.modelRef;\n const engineRef = options?.engineRef;\n const effortRef = options?.effortRef;\n const execModeRef = options?.execModeRef;\n\n return {\n async *run({ messages, abortSignal, runConfig }) {\n // Extract latest user message and build history from prior messages\n let lastUserMsg: (typeof messages)[number] | undefined;\n for (let i = messages.length - 1; i >= 0; i--) {\n if (messages[i].role === \"user\") {\n lastUserMsg = messages[i];\n break;\n }\n }\n const rawMessageText =\n lastUserMsg?.content\n .filter((p): p is { type: \"text\"; text: string } => p.type === \"text\")\n .map((p) => p.text)\n .join(\"\\n\") ?? \"\";\n const requestMode =\n execModeRef?.current === \"plan\"\n ? \"plan\"\n : execModeRef?.current === \"build\"\n ? \"act\"\n : undefined;\n\n // Extract attachments (images as base64, text as content).\n // assistant-ui puts user attachments on msg.attachments (not on content);\n // each attachment carries its own content parts from the adapter.\n const attachments = lastUserMsg\n ? extractAttachmentsFromMessage(lastUserMsg as any)\n : [];\n const userMessageText =\n rawMessageText.trim() || attachments.length === 0\n ? rawMessageText\n : \"Use the attached context.\";\n\n const priorMessages = messages.slice(0, -1); // exclude latest user message\n const history = priorMessages\n .filter((m) => m.role === \"user\" || m.role === \"assistant\")\n .map((m) => ({\n role: m.role as \"user\" | \"assistant\",\n content:\n m.role === \"user\"\n ? messageTextForHistory(m as any)\n : messageTextFromContent(m.content),\n }))\n .filter((m) => m.content.trim());\n const structuredHistory =\n assistantUiMessagesToStructuredHistory(priorMessages);\n\n // Signal that generation is starting\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new CustomEvent(\"agentNative.chatRunning\", {\n detail: { isRunning: true, tabId },\n }),\n );\n }\n\n const content: ContentPart[] = [];\n const toolCallCounter = { value: 0 };\n let runId: string | null = null;\n let lastSeq = -1;\n let currentMessageText = normalizeMentions(userMessageText);\n let currentHistory: AdapterHistoryMessage[] = history;\n let currentStructuredHistory: AgentChatStructuredMessage[] =\n structuredHistory;\n let includeAttachments = attachments.length > 0;\n let includeReferences = Boolean(runConfig?.custom?.references);\n let internalContinuationRequest = false;\n let startupRecoveryAttempts = 0;\n let staleRunContinuationAttempts = 0;\n let stalledTransientContinuationAttempts = 0;\n let totalTransientContinuationAttempts = 0;\n const continuationHistoryFragments: string[] = [];\n const structuredContinuationFragments: AgentChatStructuredMessage[] = [];\n let visibleContinuationPrefix: ContentPart[] = [];\n let lastAutoContinueReason: string | null = null;\n const attemptedRunIds: string[] = [];\n let authRecoveryAttempted = false;\n let continuationToolCallCounter = 0;\n const nextContinuationToolCallId = () =>\n `continuation_tc_${++continuationToolCallCounter}`;\n\n const connectionRecoveryDetails = (): string => {\n return [\n lastAutoContinueReason\n ? `last_auto_continue_reason: ${lastAutoContinueReason}`\n : \"\",\n `stale_run_continuations: ${staleRunContinuationAttempts}`,\n `stalled_transient_continuations: ${stalledTransientContinuationAttempts}`,\n `total_transient_continuations: ${totalTransientContinuationAttempts}`,\n attemptedRunIds.length > 0\n ? `attempted_runs: ${attemptedRunIds.join(\", \")}`\n : \"\",\n ]\n .filter(Boolean)\n .join(\"\\n\");\n };\n\n const dispatchAuthError = (\n reason: \"auth-required\" | \"session-expired\",\n ) => {\n if (typeof window === \"undefined\") return;\n window.dispatchEvent(\n new CustomEvent(\"agent-chat:auth-error\", {\n detail: {\n reason,\n ...(tabId ? { tabId } : {}),\n ...(threadId ? { threadId } : {}),\n },\n }),\n );\n };\n\n const tryRecoverAuthOnce = async (): Promise<boolean> => {\n if (authRecoveryAttempted || abortSignal.aborted) return false;\n authRecoveryAttempted = true;\n try {\n const sessionRes = await fetch(\n safeAgentNativePath(\"/_agent-native/auth/session\"),\n {\n method: \"GET\",\n headers: { Accept: \"application/json\" },\n cache: \"no-store\",\n credentials: \"same-origin\",\n signal: abortSignal,\n },\n );\n if (!sessionRes.ok) return false;\n const session = await sessionRes.json().catch(() => null);\n return Boolean(session && !session.error);\n } catch {\n return false;\n }\n };\n\n const captureChatClientError = (\n error: unknown,\n phase: string,\n extra: Record<string, unknown> = {},\n ) => {\n captureError(error, {\n tags: {\n source: \"agent-chat-client\",\n phase,\n hasThread: threadId ? \"true\" : \"false\",\n hasRun: runId ? \"true\" : \"false\",\n lastAutoContinueReason: lastAutoContinueReason ?? undefined,\n },\n extra: {\n apiUrl,\n tabId,\n threadId,\n runId,\n lastSeq,\n contentParts: content.length,\n attemptedRunIds: [...attemptedRunIds],\n startupRecoveryAttempts,\n staleRunContinuationAttempts,\n stalledTransientContinuationAttempts,\n totalTransientContinuationAttempts,\n ...extra,\n },\n contexts: {\n agentChat: {\n tabId,\n threadId,\n runId,\n lastSeq,\n contentParts: content.length,\n startupRecoveryAttempts,\n staleRunContinuationAttempts,\n stalledTransientContinuationAttempts,\n totalTransientContinuationAttempts,\n },\n },\n });\n };\n\n try {\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n };\n try {\n const tz = Intl.DateTimeFormat().resolvedOptions().timeZone;\n if (tz) headers[\"x-user-timezone\"] = tz;\n } catch {\n // Non-browser or Intl unavailable — tool calls will fall back to UTC.\n }\n\n const reconnectCurrentRun = async function* (): AsyncGenerator<\n ChatModelRunResult,\n boolean,\n unknown\n > {\n if (!runId) return false;\n let lastReconnectError: unknown = null;\n let reconnectErrorCaptured = false;\n for (let attempt = 0; attempt < MAX_RECONNECT_ATTEMPTS; attempt++) {\n try {\n const reconnectRes = await fetch(\n `${apiUrl}/runs/${encodeURIComponent(runId)}/events?after=${lastSeq + 1}`,\n { signal: abortSignal },\n );\n if (!reconnectRes.ok || !reconnectRes.body) {\n lastReconnectError = new Error(\n `Reconnect failed: ${reconnectRes.status}`,\n );\n captureChatClientError(\n lastReconnectError,\n \"reconnect-current-response\",\n {\n status: reconnectRes.status,\n hasBody: Boolean(reconnectRes.body),\n attempt,\n },\n );\n reconnectErrorCaptured = true;\n break;\n }\n\n yield* readSSEStream(\n reconnectRes.body,\n content,\n toolCallCounter,\n tabId,\n (seq) => {\n lastSeq = seq;\n if (threadId) updateActiveRunSeq(seq);\n },\n runId,\n );\n clearActiveRun();\n return true;\n } catch (reconnectErr: unknown) {\n if (\n reconnectErr instanceof Error &&\n reconnectErr.name === \"AbortError\"\n ) {\n clearActiveRun();\n return true;\n }\n if (reconnectErr instanceof AgentAutoContinueSignal) {\n if (reconnectErr.reason === \"no_progress\") {\n throw reconnectErr;\n }\n return false;\n }\n lastReconnectError = reconnectErr;\n await retryDelay(attempt, abortSignal);\n }\n }\n if (lastReconnectError && !reconnectErrorCaptured) {\n captureChatClientError(\n lastReconnectError,\n \"reconnect-current-failed\",\n );\n }\n return false;\n };\n\n const abortCurrentRun = async (): Promise<void> => {\n if (!runId) return;\n try {\n await fetch(`${apiUrl}/runs/${encodeURIComponent(runId)}/abort`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ reason: \"no_progress\" }),\n signal: abortSignal,\n });\n } catch {\n // Best effort. The follow-up POST will still reconnect or 409 if\n // the producer is alive and cannot be aborted cross-isolate.\n } finally {\n clearActiveRun();\n }\n };\n\n const reconnectActiveRunForThread = async function* (): AsyncGenerator<\n ChatModelRunResult,\n boolean,\n unknown\n > {\n if (!threadId) return false;\n let lastActiveRunError: unknown = null;\n for (let attempt = 0; attempt < MAX_RECONNECT_ATTEMPTS; attempt++) {\n try {\n const activeRes = await fetch(\n `${apiUrl}/runs/active?threadId=${encodeURIComponent(threadId)}`,\n { signal: abortSignal },\n );\n if (!activeRes.ok) {\n lastActiveRunError = new Error(\n `Active run lookup failed: ${activeRes.status}`,\n );\n captureChatClientError(\n lastActiveRunError,\n \"reconnect-active-response\",\n { status: activeRes.status, attempt },\n );\n return false;\n }\n const active = await activeRes.json();\n if (active?.active && active.runId) {\n const activeRunId = String(active.runId);\n runId = activeRunId;\n if (!attemptedRunIds.includes(activeRunId)) {\n attemptedRunIds.push(activeRunId);\n }\n lastSeq = -1;\n setActiveRun({ threadId, runId: activeRunId, lastSeq: -1 });\n const reconnected = yield* reconnectCurrentRun();\n if (reconnected) return true;\n }\n return false;\n } catch (activeErr: unknown) {\n if (\n activeErr instanceof Error &&\n activeErr.name === \"AbortError\"\n ) {\n clearActiveRun();\n return true;\n }\n lastActiveRunError = activeErr;\n await retryDelay(attempt, abortSignal);\n }\n }\n if (lastActiveRunError) {\n captureChatClientError(\n lastActiveRunError,\n \"reconnect-active-failed\",\n );\n }\n return false;\n };\n\n const visibleContentForContinuation = (): ContentPart[] => {\n if (\n visibleContinuationPrefix.length > 0 &&\n visibleContinuationPrefix.every(\n (part, index) => content[index] === part,\n )\n ) {\n return content.slice(visibleContinuationPrefix.length);\n }\n return content;\n };\n\n const prepareAutoContinuation = (\n signal: AgentAutoContinueSignal,\n ): { ok: boolean; resetVisibleContent: boolean } => {\n lastAutoContinueReason = signal.reason;\n const isTransient = signal.reason !== \"loop_limit\";\n const visibleContent = visibleContentForContinuation();\n const currentPartialHistory =\n contentToContinuationHistory(visibleContent);\n const madeProgress = hasContinuationProgress(visibleContent);\n\n if (signal.reason === \"loop_limit\") {\n stalledTransientContinuationAttempts = 0;\n } else {\n totalTransientContinuationAttempts += 1;\n if (signal.reason === \"stale_run\") {\n staleRunContinuationAttempts += 1;\n if (staleRunContinuationAttempts > MAX_STALE_RUN_CONTINUATIONS) {\n return { ok: false, resetVisibleContent: false };\n }\n }\n stalledTransientContinuationAttempts = madeProgress\n ? 0\n : stalledTransientContinuationAttempts + 1;\n if (\n stalledTransientContinuationAttempts >\n MAX_STALLED_TRANSIENT_CONTINUATIONS ||\n totalTransientContinuationAttempts >\n MAX_TOTAL_TRANSIENT_CONTINUATIONS\n ) {\n return { ok: false, resetVisibleContent: false };\n }\n }\n\n if (isTransient && currentPartialHistory) {\n continuationHistoryFragments.push(currentPartialHistory);\n }\n const partialHistory = combineContinuationHistory(\n isTransient\n ? continuationHistoryFragments\n : [...continuationHistoryFragments, currentPartialHistory],\n );\n const structuredPartialHistory = contentToStructuredMessages(\n visibleContent,\n nextContinuationToolCallId,\n );\n if (isTransient && structuredPartialHistory.length > 0) {\n structuredContinuationFragments.push(...structuredPartialHistory);\n }\n const structuredCombinedHistory = isTransient\n ? structuredContinuationFragments\n : [...structuredContinuationFragments, ...structuredPartialHistory];\n currentHistory = [\n ...history,\n { role: \"user\", content: normalizeMentions(userMessageText) },\n ...(partialHistory\n ? [{ role: \"assistant\" as const, content: partialHistory }]\n : []),\n ];\n currentStructuredHistory = [\n ...structuredHistory,\n {\n role: \"user\",\n content: [\n { type: \"text\", text: normalizeMentions(userMessageText) },\n ],\n },\n ...structuredCombinedHistory,\n ];\n currentMessageText = autoContinueMessage(signal);\n // Continuation requests are stateless new POSTs. If the interrupted\n // turn depended on uploaded context, re-send that context; otherwise\n // an attachment-only prompt degrades to \"Use the attached context.\"\n // with nothing attached after a stale run or reconnect recovery.\n includeAttachments = attachments.length > 0;\n includeReferences = Boolean(runConfig?.custom?.references);\n internalContinuationRequest = true;\n startupRecoveryAttempts = 0;\n clearActiveRun();\n if (!isTransient) {\n return { ok: true, resetVisibleContent: false };\n }\n\n const preservedContent = visibleTransientContinuationContent(content);\n content.splice(0, content.length, ...preservedContent);\n visibleContinuationPrefix = preservedContent;\n return { ok: true, resetVisibleContent: true };\n };\n\n while (true) {\n try {\n runId = null;\n lastSeq = -1;\n const res = await fetch(apiUrl, {\n method: \"POST\",\n headers,\n body: JSON.stringify({\n message: currentMessageText,\n displayMessage: userMessageText,\n history: currentHistory,\n structuredHistory: currentStructuredHistory,\n ...(threadId ? { threadId } : {}),\n ...(internalContinuationRequest\n ? { internalContinuation: true }\n : {}),\n ...(requestMode ? { mode: requestMode } : {}),\n ...(modelRef?.current ? { model: modelRef.current } : {}),\n ...(engineRef?.current ? { engine: engineRef.current } : {}),\n ...(effortRef?.current ? { effort: effortRef.current } : {}),\n ...(includeAttachments ? { attachments } : {}),\n ...(includeReferences && runConfig?.custom?.references\n ? { references: runConfig.custom.references }\n : {}),\n }),\n signal: abortSignal,\n });\n\n // Check for auth errors returned as 200 with JSON (common with middleware issues)\n const contentType = res.headers.get(\"content-type\") || \"\";\n if (\n res.ok &&\n contentType.includes(\"application/json\") &&\n !contentType.includes(\"text/event-stream\")\n ) {\n try {\n const body = await res.text();\n const parsed = JSON.parse(body);\n if (parsed.error) {\n throw new Error(parsed.error);\n }\n } catch (e) {\n if (\n e instanceof Error &&\n e.message !== \"Unexpected end of JSON input\"\n ) {\n throw e;\n }\n }\n }\n\n if (!res.ok) {\n if (res.status === 409) {\n let handledConflict = false;\n try {\n const body = await res.json();\n if (body?.activeRunId) {\n handledConflict = true;\n runId = String(body.activeRunId);\n if (!attemptedRunIds.includes(runId)) {\n attemptedRunIds.push(runId);\n }\n lastSeq = -1;\n if (threadId) {\n setActiveRun({ threadId, runId, lastSeq: -1 });\n }\n const reconnected = yield* reconnectCurrentRun();\n if (reconnected) return;\n }\n } catch {\n // Fall through to the generic response handling below.\n }\n if (handledConflict) {\n await delay(1000, abortSignal);\n if (abortSignal.aborted) return;\n continue;\n }\n }\n\n if (res.status === 401 || res.status === 403) {\n if (await tryRecoverAuthOnce()) {\n continue;\n }\n dispatchAuthError(\"auth-required\");\n content.push({ type: \"text\", text: \"\" });\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({ type: \"text\", text: \"\" });\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 dispatchAuthError(authErrorReasonFromMessage(body));\n content.push({ type: \"text\", text: \"\" });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n } as ChatModelRunResult;\n return;\n }\n if (isMissingCredentialMessage(body)) {\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new Event(\"agent-chat:missing-api-key\"),\n );\n }\n content.push({ type: \"text\", text: \"\" });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n } as ChatModelRunResult;\n return;\n } else if (body.includes(\"Cannot find any path\")) {\n errorText =\n \"Agent chat endpoint not found. Make sure the agent-chat plugin is loaded in server/plugins/.\";\n } else if (body) {\n errorText =\n body.length > 200 ? body.slice(0, 200) + \"...\" : body;\n }\n } catch {}\n throw new Error(errorText);\n }\n if (!res.body) {\n throw new Error(\"No response body\");\n }\n\n // Track the run ID for reconnection\n runId = res.headers.get(\"X-Run-Id\");\n if (runId && !attemptedRunIds.includes(runId)) {\n attemptedRunIds.push(runId);\n }\n if (runId && threadId) {\n setActiveRun({ threadId, runId, lastSeq: -1 });\n }\n\n yield* readSSEStream(\n res.body,\n content,\n toolCallCounter,\n tabId,\n (seq) => {\n lastSeq = seq;\n if (runId && threadId) {\n updateActiveRunSeq(seq);\n }\n },\n runId,\n );\n\n // Run completed normally — clear active run state\n clearActiveRun();\n return;\n } catch (err: unknown) {\n if (err instanceof Error && err.name === \"AbortError\") {\n // User-initiated abort (Stop button) — clear active run\n clearActiveRun();\n return;\n }\n\n if (err instanceof AgentAutoContinueSignal) {\n if (err.reason === \"no_progress\") {\n await abortCurrentRun();\n }\n if (err.reason === \"stream_ended\") {\n const reconnected = yield* reconnectCurrentRun();\n if (reconnected) return;\n const activeReconnected = yield* reconnectActiveRunForThread();\n if (activeReconnected) return;\n }\n const continuation = prepareAutoContinuation(err);\n if (!continuation.ok) {\n const message =\n \"The agent connection kept failing after several automatic recovery attempts.\";\n captureChatClientError(err, \"auto-continuation-exhausted\", {\n autoContinueReason: err.reason,\n });\n const runError = {\n message,\n details: connectionRecoveryDetails(),\n errorCode: \"connection_error\",\n recoverable: true,\n ...(runId ? { runId } : {}),\n };\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new CustomEvent(\"agent-chat:run-error\", {\n detail: { ...runError, tabId },\n }),\n );\n }\n content.push({\n type: \"text\",\n text: `Something went wrong: ${message}`,\n });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n metadata: {\n custom: { ...(runId ? { runId } : {}), runError },\n },\n };\n clearActiveRun();\n return;\n }\n if (continuation.resetVisibleContent) {\n yield {\n content: snapshotContent(content),\n } as ChatModelRunResult;\n }\n await delay(250, abortSignal);\n if (abortSignal.aborted) return;\n continue;\n }\n\n const errMsg =\n err instanceof Error ? err.message : \"Something went wrong.\";\n const isAuthError = isAuthErrorMessage(errMsg);\n\n // Don't try to reconnect for auth/client errors — show error directly\n if (isAuthError) {\n if (await tryRecoverAuthOnce()) {\n continue;\n }\n dispatchAuthError(authErrorReasonFromMessage(errMsg));\n content.push({ type: \"text\", text: \"\" });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n };\n clearActiveRun();\n return;\n }\n\n if (isMissingCredentialMessage(errMsg)) {\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(new Event(\"agent-chat:missing-api-key\"));\n }\n content.push({ type: \"text\", text: \"\" });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n };\n clearActiveRun();\n return;\n }\n\n // Connection lost — try to reconnect to the run\n const reconnected = yield* reconnectCurrentRun();\n if (reconnected) return;\n const activeReconnected = yield* reconnectActiveRunForThread();\n if (activeReconnected) return;\n\n // Reconnect failed or not possible — keep going from the partial\n // streamed content instead of surfacing a transient transport error.\n if (content.length > 0) {\n const continuation = prepareAutoContinuation(\n new AgentAutoContinueSignal({ reason: \"stream_ended\" }),\n );\n if (!continuation.ok) {\n const message =\n \"The agent connection kept failing after several automatic recovery attempts.\";\n captureChatClientError(err, \"recovery-exhausted\");\n const runError = {\n message,\n details: connectionRecoveryDetails(),\n errorCode: \"connection_error\",\n recoverable: true,\n ...(runId ? { runId } : {}),\n };\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new CustomEvent(\"agent-chat:run-error\", {\n detail: { ...runError, tabId },\n }),\n );\n }\n content.push({\n type: \"text\",\n text: `Something went wrong: ${message}`,\n });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n metadata: {\n custom: { ...(runId ? { runId } : {}), runError },\n },\n };\n clearActiveRun();\n return;\n }\n if (continuation.resetVisibleContent) {\n yield {\n content: snapshotContent(content),\n } as ChatModelRunResult;\n }\n await delay(250, abortSignal);\n if (abortSignal.aborted) return;\n continue;\n }\n\n if (\n isRetryableStartupError(errMsg) &&\n startupRecoveryAttempts < MAX_STARTUP_RECOVERY_ATTEMPTS\n ) {\n await retryDelay(startupRecoveryAttempts++, abortSignal);\n if (abortSignal.aborted) return;\n continue;\n }\n\n // No partial work exists, so this is still a real startup failure.\n captureChatClientError(err, \"startup-failed\", {\n retryableStartupError: isRetryableStartupError(errMsg),\n });\n const normalized = normalizeChatError(errMsg);\n const runError = {\n message: normalized.message,\n ...(normalized.details ? { details: normalized.details } : {}),\n errorCode: \"connection_error\",\n recoverable: true,\n ...(runId ? { runId } : {}),\n };\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new CustomEvent(\"agent-chat:run-error\", {\n detail: { ...runError, tabId },\n }),\n );\n }\n content.push({\n type: \"text\",\n text: errMsg.startsWith(\"Server error:\")\n ? errMsg\n : `Something went wrong: ${normalized.message}`,\n });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n metadata: { custom: { ...(runId ? { runId } : {}), runError } },\n };\n return;\n }\n }\n } finally {\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new CustomEvent(\"agentNative.chatRunning\", {\n detail: { isRunning: false, tabId },\n }),\n );\n }\n }\n },\n };\n}\n"]}
1
+ {"version":3,"file":"agent-chat-adapter.js","sourceRoot":"","sources":["../../src/client/agent-chat-adapter.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ChatModelAdapter, ChatModelRunResult } from \"@assistant-ui/react\";\nimport {\n setActiveRun,\n updateActiveRunSeq,\n clearActiveRun,\n} from \"./active-run-state.js\";\nimport {\n AgentAutoContinueSignal,\n type ContentPart,\n readSSEStream,\n} from \"./sse-event-processor.js\";\nimport { agentNativePath } from \"./api-path.js\";\nimport { formatChatErrorText, normalizeChatError } from \"./error-format.js\";\nimport { captureError } from \"./analytics.js\";\nimport { unwrapAttachmentEnvelope } from \"./composer/pasted-text.js\";\nimport type { ReasoningEffort } from \"../shared/reasoning-effort.js\";\nimport type {\n AgentChatStructuredContentPart,\n AgentChatStructuredMessage,\n} from \"../agent/types.js\";\n\ntype AdapterHistoryMessage = {\n role: \"user\" | \"assistant\";\n content: string;\n};\n\ntype AssistantUiAttachment = {\n name: string;\n contentType?: string;\n content: readonly Record<string, unknown>[];\n};\n\ntype AgentChatAdapterAttachment = {\n type: string;\n name: string;\n contentType?: string;\n data?: string;\n text?: string;\n};\n\nconst TEXT_ATTACHMENT_CONTENT_TYPES = new Set([\n \"application/json\",\n \"application/x-ndjson\",\n \"text/csv\",\n \"text/css\",\n \"text/html\",\n \"text/json\",\n \"text/markdown\",\n \"text/plain\",\n \"text/xml\",\n]);\n\nconst AUTO_CONTINUE_PROMPT =\n \"Continue from where you left off and finish the user's original request. Do not repeat completed work, do not mention internal reconnects, time limits, or step limits, and continue as if this is the same uninterrupted run.\";\nconst MAX_RECONNECT_ATTEMPTS = 5;\nconst MAX_STARTUP_RECOVERY_ATTEMPTS = 8;\nconst MAX_STALE_RUN_CONTINUATIONS = 3;\nconst MAX_STALLED_TRANSIENT_CONTINUATIONS = 8;\nconst MAX_TOTAL_TRANSIENT_CONTINUATIONS = 32;\nconst RETRY_BASE_DELAY_MS = 500;\nconst RETRY_MAX_DELAY_MS = 8_000;\nconst MAX_HISTORY_ATTACHMENT_CHARS = 60_000;\n\nfunction normalizeMentions(text: string): string {\n return text.replace(/@\\[([^\\]|]+)\\|[^\\]]+\\]/g, \"@$1\");\n}\n\nfunction truncateForContinuation(value: string, maxChars: number): string {\n if (value.length <= maxChars) return value;\n return `${value.slice(0, maxChars)}\\n\\n...[truncated ${value.length - maxChars} chars from prior partial output]`;\n}\n\nfunction contentToContinuationHistory(content: ContentPart[]): string {\n const chunks: string[] = [];\n for (const part of content) {\n if (part.type === \"text\") {\n if (part.text.trim()) chunks.push(part.text.trim());\n continue;\n }\n const toolSummary = [\n `Tool: ${part.toolName}`,\n part.argsText ? `Input: ${part.argsText}` : \"\",\n part.result\n ? `Result:\\n${truncateForContinuation(part.result, 8_000)}`\n : \"Result: interrupted before this tool returned a result\",\n ]\n .filter(Boolean)\n .join(\"\\n\");\n chunks.push(toolSummary);\n }\n return truncateForContinuation(chunks.join(\"\\n\\n\"), 40_000).trim();\n}\n\nfunction messageTextFromContent(\n content: readonly { type: string; text?: string }[],\n): string {\n return content\n .filter((p): p is { type: \"text\"; text: string } => p.type === \"text\")\n .map((p) => normalizeMentions(p.text))\n .join(\"\\n\");\n}\n\nfunction escapeAttachmentAttribute(value: string): string {\n return value\n .replace(/&/g, \"&amp;\")\n .replace(/\"/g, \"&quot;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\");\n}\n\nfunction isTextAttachmentContentType(value: string | undefined): boolean {\n if (!value) return false;\n const contentType = value.split(\";\")[0]?.trim().toLowerCase();\n return (\n !!contentType &&\n (contentType.startsWith(\"text/\") ||\n TEXT_ATTACHMENT_CONTENT_TYPES.has(contentType))\n );\n}\n\nfunction decodeTextDataUrl(dataUrl: string): string | null {\n const match = dataUrl.match(\n /^data:([^;,]+)(?:;charset=[^;,]+)?(;base64)?,(.*)$/i,\n );\n if (!match || !isTextAttachmentContentType(match[1])) return null;\n\n try {\n const payload = match[3] ?? \"\";\n if (match[2]) {\n if (typeof atob === \"function\") {\n return decodeURIComponent(\n Array.from(\n atob(payload),\n (char) => `%${char.charCodeAt(0).toString(16).padStart(2, \"0\")}`,\n ).join(\"\"),\n );\n }\n return null;\n }\n return decodeURIComponent(payload.replace(/\\+/g, \"%20\"));\n } catch {\n return null;\n }\n}\n\nfunction extractAttachmentsFromMessage(message: {\n attachments?: readonly AssistantUiAttachment[];\n}): AgentChatAdapterAttachment[] {\n const attachments: AgentChatAdapterAttachment[] = [];\n for (const att of message.attachments ?? []) {\n for (const part of att.content) {\n if (part.type === \"image\" && typeof part.image === \"string\") {\n attachments.push({\n type: \"image\",\n name: att.name,\n contentType: att.contentType,\n data: part.image,\n });\n } else if (part.type === \"file\" && typeof part.data === \"string\") {\n const contentType =\n att.contentType ??\n (typeof part.mimeType === \"string\" ? part.mimeType : undefined);\n const decodedText = part.data.startsWith(\"data:\")\n ? decodeTextDataUrl(part.data)\n : null;\n attachments.push({\n type: \"file\",\n name: att.name,\n contentType,\n ...(decodedText !== null\n ? { text: truncateOutboundAttachment(decodedText) }\n : part.data.startsWith(\"data:\")\n ? { data: part.data }\n : { text: truncateOutboundAttachment(part.data) }),\n });\n } else if (part.type === \"text\" && typeof part.text === \"string\") {\n attachments.push({\n type: \"file\",\n name: att.name,\n contentType: att.contentType,\n text: truncateOutboundAttachment(unwrapAttachmentEnvelope(part.text)),\n });\n }\n }\n }\n return attachments;\n}\n\nfunction truncateHistoryAttachment(text: string): string {\n if (text.length <= MAX_HISTORY_ATTACHMENT_CHARS) return text;\n const omitted = text.length - MAX_HISTORY_ATTACHMENT_CHARS;\n return `${text.slice(0, MAX_HISTORY_ATTACHMENT_CHARS)}\\n\\n[Attachment truncated after ${MAX_HISTORY_ATTACHMENT_CHARS.toLocaleString()} characters; ${omitted.toLocaleString()} characters omitted from prior chat history.]`;\n}\n\nfunction truncateOutboundAttachment(text: string): string {\n if (text.length <= MAX_HISTORY_ATTACHMENT_CHARS) return text;\n const omitted = text.length - MAX_HISTORY_ATTACHMENT_CHARS;\n return `${text.slice(0, MAX_HISTORY_ATTACHMENT_CHARS)}\\n\\n[Attachment truncated after ${MAX_HISTORY_ATTACHMENT_CHARS.toLocaleString()} characters; ${omitted.toLocaleString()} characters omitted from the submitted attachment.]`;\n}\n\nfunction attachmentHistoryText(\n attachment: AgentChatAdapterAttachment,\n): string | null {\n if (typeof attachment.text === \"string\" && attachment.text.length > 0) {\n const attrs = [\n `name=\"${escapeAttachmentAttribute(attachment.name || \"attachment\")}\"`,\n attachment.contentType\n ? `contentType=\"${escapeAttachmentAttribute(attachment.contentType)}\"`\n : null,\n attachment.type\n ? `type=\"${escapeAttachmentAttribute(attachment.type)}\"`\n : null,\n ].filter(Boolean);\n return `<attachment ${attrs.join(\" \")}>\\n${truncateHistoryAttachment(attachment.text)}\\n</attachment>`;\n }\n\n if (attachment.name) {\n return `[Attached ${attachment.type || \"file\"}: ${attachment.name}${attachment.contentType ? ` (${attachment.contentType})` : \"\"}]`;\n }\n return null;\n}\n\nfunction messageTextForHistory(message: {\n content: readonly { type: string; text?: string }[];\n attachments?: readonly AssistantUiAttachment[];\n}): string {\n const text = messageTextFromContent(message.content);\n const attachments = extractAttachmentsFromMessage(message)\n .map(attachmentHistoryText)\n .filter((part): part is string => !!part && part.trim().length > 0);\n return [text, ...attachments].filter((part) => part.trim()).join(\"\\n\\n\");\n}\n\nfunction isToolCallContentPart(\n part: unknown,\n): part is Extract<ContentPart, { type: \"tool-call\" }> {\n return Boolean(\n part && typeof part === \"object\" && (part as any).type === \"tool-call\",\n );\n}\n\nfunction toolResultContent(result: unknown): string {\n if (typeof result === \"string\") return result;\n try {\n return JSON.stringify(result);\n } catch {\n return String(result ?? \"\");\n }\n}\n\nfunction contentToStructuredMessages(\n content: readonly ContentPart[],\n nextToolCallId: () => string,\n): AgentChatStructuredMessage[] {\n const messages: AgentChatStructuredMessage[] = [];\n let assistantParts: AgentChatStructuredContentPart[] = [];\n let pendingToolResults: AgentChatStructuredContentPart[] = [];\n\n const flushToolTurn = () => {\n if (pendingToolResults.length === 0) return;\n if (assistantParts.length > 0) {\n messages.push({ role: \"assistant\", content: assistantParts });\n }\n messages.push({ role: \"user\", content: pendingToolResults });\n assistantParts = [];\n pendingToolResults = [];\n };\n\n for (const part of content) {\n if (part.type === \"text\") {\n if (pendingToolResults.length > 0) flushToolTurn();\n if (part.text.trim()) {\n assistantParts.push({ type: \"text\", text: part.text });\n }\n continue;\n }\n\n if (isToolCallContentPart(part)) {\n const toolCallId = nextToolCallId();\n assistantParts.push({\n type: \"tool-call\",\n toolCallId,\n toolName: part.toolName,\n args: part.args ?? {},\n });\n if (part.result !== undefined) {\n pendingToolResults.push({\n type: \"tool-result\",\n toolCallId,\n toolName: part.toolName,\n content: toolResultContent(part.result),\n });\n }\n }\n }\n\n flushToolTurn();\n if (assistantParts.length > 0) {\n messages.push({ role: \"assistant\", content: assistantParts });\n }\n return messages;\n}\n\nfunction assistantUiMessagesToStructuredHistory(\n messages: readonly {\n role: string;\n content: readonly any[];\n attachments?: readonly AssistantUiAttachment[];\n }[],\n): AgentChatStructuredMessage[] {\n let nextId = 0;\n const nextToolCallId = () => `history_tc_${++nextId}`;\n const structured: AgentChatStructuredMessage[] = [];\n\n for (const message of messages) {\n if (message.role === \"user\") {\n const text = messageTextForHistory(message);\n if (text.trim()) {\n structured.push({\n role: \"user\",\n content: [{ type: \"text\", text }],\n });\n }\n continue;\n }\n\n if (message.role !== \"assistant\") continue;\n const content: ContentPart[] = [];\n for (const part of message.content) {\n if (part?.type === \"text\" && typeof part.text === \"string\") {\n content.push({ type: \"text\", text: part.text });\n continue;\n }\n if (part?.type === \"tool-call\") {\n content.push({\n type: \"tool-call\",\n toolCallId:\n typeof part.toolCallId === \"string\" ? part.toolCallId : \"\",\n toolName:\n typeof part.toolName === \"string\"\n ? part.toolName\n : typeof part.toolName === \"undefined\"\n ? \"unknown\"\n : String(part.toolName),\n argsText:\n typeof part.argsText === \"string\"\n ? part.argsText\n : JSON.stringify(part.args ?? {}),\n args:\n part.args &&\n typeof part.args === \"object\" &&\n !Array.isArray(part.args)\n ? part.args\n : {},\n ...(part.result !== undefined\n ? { result: toolResultContent(part.result) }\n : {}),\n });\n }\n }\n structured.push(...contentToStructuredMessages(content, nextToolCallId));\n }\n\n return structured;\n}\n\nfunction combineContinuationHistory(fragments: string[]): string {\n return truncateForContinuation(\n fragments.filter(Boolean).join(\"\\n\\n\"),\n 40_000,\n ).trim();\n}\n\nfunction visibleTransientContinuationContent(\n content: ContentPart[],\n): ContentPart[] {\n return content.filter(\n (part) => part.type === \"tool-call\" && part.result !== undefined,\n );\n}\n\nfunction hasContinuationProgress(content: ContentPart[]): boolean {\n return content.some((part) =>\n part.type === \"text\"\n ? part.text.trim().length > 0\n : part.result !== undefined,\n );\n}\n\nfunction snapshotContent(content: ContentPart[]): ContentPart[] {\n return content.map((part) =>\n part.type === \"text\" ? { ...part } : { ...part, args: { ...part.args } },\n );\n}\n\nfunction autoContinueMessage(signal: AgentAutoContinueSignal): string {\n const reason =\n signal.reason === \"loop_limit\"\n ? \"The previous run reached an internal step budget.\"\n : signal.reason === \"stale_run\"\n ? \"The previous run stopped unexpectedly in the server runtime before it could finish.\"\n : signal.reason === \"no_progress\"\n ? \"The previous run stopped producing progress events while the connection stayed open.\"\n : signal.reason === \"stream_ended\"\n ? \"The previous stream ended before the agent sent a final completion signal.\"\n : \"The previous run reached an internal execution budget.\";\n return `${AUTO_CONTINUE_PROMPT}\\n\\nInternal note: ${reason}`;\n}\n\nfunction delay(ms: number, abortSignal: AbortSignal): Promise<void> {\n if (abortSignal.aborted) return Promise.resolve();\n return new Promise((resolve) => {\n const timer = setTimeout(resolve, ms);\n abortSignal.addEventListener(\n \"abort\",\n () => {\n clearTimeout(timer);\n resolve();\n },\n { once: true },\n );\n });\n}\n\nfunction retryDelay(attempt: number, abortSignal: AbortSignal): Promise<void> {\n const base = Math.min(\n RETRY_MAX_DELAY_MS,\n RETRY_BASE_DELAY_MS * Math.pow(2, attempt),\n );\n const jitter = base * 0.2;\n const ms = Math.max(0, base + (Math.random() * 2 - 1) * jitter);\n return delay(ms, abortSignal);\n}\n\nfunction isRetryableStartupError(message: string): boolean {\n const msg = message.toLowerCase();\n if (\n msg.includes(\"unauthorized\") ||\n msg.includes(\"not authenticated\") ||\n msg.includes(\"401\") ||\n msg.includes(\"403\") ||\n msg.includes(\"404\") ||\n msg.includes(\"405\") ||\n msg.includes(\"missing api key\") ||\n msg.includes(\"api key\") ||\n msg.includes(\"context_length\") ||\n msg.includes(\"input_too_long\") ||\n msg.includes(\"too many tokens\") ||\n msg.includes(\"prompt is too long\") ||\n msg.includes(\"credits-limit\") ||\n msg.includes(\"billing\") ||\n msg.includes(\"permission\")\n ) {\n return false;\n }\n return (\n msg.includes(\"failed to fetch\") ||\n msg.includes(\"network\") ||\n msg.includes(\"connection\") ||\n msg.includes(\"reset\") ||\n msg.includes(\"econnreset\") ||\n msg.includes(\"socket\") ||\n msg.includes(\"timeout\") ||\n msg.includes(\"gateway timeout\") ||\n msg.includes(\"inactivity timeout\") ||\n msg.includes(\"temporarily unavailable\") ||\n msg.includes(\"server error: 408\") ||\n msg.includes(\"server error: 429\") ||\n msg.includes(\"server error: 500\") ||\n msg.includes(\"server error: 502\") ||\n msg.includes(\"server error: 503\") ||\n msg.includes(\"server error: 504\") ||\n msg.includes(\"429\") ||\n msg.includes(\"500\") ||\n msg.includes(\"502\") ||\n msg.includes(\"503\") ||\n msg.includes(\"504\") ||\n msg.includes(\"529\")\n );\n}\n\nfunction isAuthErrorMessage(message: string): boolean {\n const msg = message.toLowerCase();\n return (\n msg.includes(\"authentication required\") ||\n msg.includes(\"unauthorized\") ||\n msg.includes(\"not authenticated\") ||\n msg.includes(\"forbidden\") ||\n msg.includes(\"invalid token\") ||\n msg.includes(\"invalid or expired token\") ||\n msg.includes(\"session expired\") ||\n msg.includes(\"http_401\") ||\n msg.includes(\"http_403\") ||\n msg.includes(\"401\") ||\n msg.includes(\"403\") ||\n msg.includes(\"405\")\n );\n}\n\nfunction authErrorReasonFromMessage(\n message: string,\n): \"auth-required\" | \"session-expired\" {\n const msg = message.toLowerCase();\n return msg.includes(\"session\") ||\n msg.includes(\"expired\") ||\n msg.includes(\"invalid token\") ||\n msg.includes(\"405\")\n ? \"session-expired\"\n : \"auth-required\";\n}\n\nfunction authErrorText(\n reason: \"auth-required\" | \"session-expired\",\n message?: string,\n): string {\n const fallback =\n reason === \"session-expired\"\n ? \"Your chat session expired. Refresh chat and sign in again to continue.\"\n : \"Authentication required. Sign in again to use chat.\";\n\n if (!message) return formatChatErrorText(fallback);\n\n try {\n const parsed = JSON.parse(message) as {\n error?: unknown;\n message?: unknown;\n };\n const raw =\n typeof parsed.error === \"string\"\n ? parsed.error\n : typeof parsed.message === \"string\"\n ? parsed.message\n : undefined;\n return formatChatErrorText(raw || fallback);\n } catch {\n return formatChatErrorText(message || fallback);\n }\n}\n\nfunction safeAgentNativePath(path: string): string {\n try {\n return agentNativePath(path);\n } catch {\n return path;\n }\n}\n\nfunction isMissingCredentialMessage(message: string): boolean {\n const msg = message.toLowerCase();\n return (\n msg.includes(\"apikey\") ||\n msg.includes(\"authtoken\") ||\n msg.includes(\"anthropic_api_key\") ||\n msg.includes(\"missing_api_key\") ||\n msg.includes(\"missing api key\") ||\n msg.includes(\"missing credentials\") ||\n msg.includes(\"no llm provider\") ||\n msg.includes(\"llm provider is connected\")\n );\n}\n\nfunction missingCredentialErrorText(message: string): string {\n try {\n const parsed = JSON.parse(message) as {\n error?: unknown;\n message?: unknown;\n upgradeUrl?: unknown;\n errorCode?: unknown;\n };\n const raw =\n typeof parsed.error === \"string\"\n ? parsed.error\n : typeof parsed.message === \"string\"\n ? parsed.message\n : message;\n return formatChatErrorText(\n raw,\n typeof parsed.upgradeUrl === \"string\" ? parsed.upgradeUrl : undefined,\n typeof parsed.errorCode === \"string\" ? parsed.errorCode : undefined,\n );\n } catch {\n return formatChatErrorText(message);\n }\n}\n\n/**\n * The composer's exec mode is sent as explicit request metadata. The server\n * owns the plan-mode prompt and read-only tool filtering so the chat history\n * stays clean and Plan mode is enforced outside the model's goodwill.\n */\n/**\n * Creates a ChatModelAdapter that connects to the agent-native\n * `/_agent-native/agent-chat` SSE endpoint. Supports reconnection via run-manager.\n */\nexport function createAgentChatAdapter(options?: {\n apiUrl?: string;\n tabId?: string;\n threadId?: string;\n modelRef?: { current: string | undefined };\n engineRef?: { current: string | undefined };\n effortRef?: { current: ReasoningEffort | undefined };\n execModeRef?: { current: \"build\" | \"plan\" | undefined };\n}): ChatModelAdapter {\n const apiUrl =\n options?.apiUrl ?? agentNativePath(\"/_agent-native/agent-chat\");\n const tabId = options?.tabId;\n const threadId = options?.threadId;\n const modelRef = options?.modelRef;\n const engineRef = options?.engineRef;\n const effortRef = options?.effortRef;\n const execModeRef = options?.execModeRef;\n\n return {\n async *run({ messages, abortSignal, runConfig }) {\n // Extract latest user message and build history from prior messages\n let lastUserMsg: (typeof messages)[number] | undefined;\n for (let i = messages.length - 1; i >= 0; i--) {\n if (messages[i].role === \"user\") {\n lastUserMsg = messages[i];\n break;\n }\n }\n const rawMessageText =\n lastUserMsg?.content\n .filter((p): p is { type: \"text\"; text: string } => p.type === \"text\")\n .map((p) => p.text)\n .join(\"\\n\") ?? \"\";\n const runConfigRequestMode =\n runConfig?.custom &&\n typeof runConfig.custom === \"object\" &&\n \"requestMode\" in runConfig.custom\n ? (runConfig.custom as { requestMode?: unknown }).requestMode\n : undefined;\n const requestMode =\n runConfigRequestMode === \"act\" || runConfigRequestMode === \"plan\"\n ? runConfigRequestMode\n : execModeRef?.current === \"plan\"\n ? \"plan\"\n : execModeRef?.current === \"build\"\n ? \"act\"\n : undefined;\n\n // Extract attachments (images as base64, text as content).\n // assistant-ui puts user attachments on msg.attachments (not on content);\n // each attachment carries its own content parts from the adapter.\n const attachments = lastUserMsg\n ? extractAttachmentsFromMessage(lastUserMsg as any)\n : [];\n const userMessageText =\n rawMessageText.trim() || attachments.length === 0\n ? rawMessageText\n : \"Use the attached context.\";\n\n const priorMessages = messages.slice(0, -1); // exclude latest user message\n const history = priorMessages\n .filter((m) => m.role === \"user\" || m.role === \"assistant\")\n .map((m) => ({\n role: m.role as \"user\" | \"assistant\",\n content:\n m.role === \"user\"\n ? messageTextForHistory(m as any)\n : messageTextFromContent(m.content),\n }))\n .filter((m) => m.content.trim());\n const structuredHistory =\n assistantUiMessagesToStructuredHistory(priorMessages);\n\n // Signal that generation is starting\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new CustomEvent(\"agentNative.chatRunning\", {\n detail: { isRunning: true, tabId },\n }),\n );\n }\n\n const content: ContentPart[] = [];\n const toolCallCounter = { value: 0 };\n let runId: string | null = null;\n let lastSeq = -1;\n let currentMessageText = normalizeMentions(userMessageText);\n let currentHistory: AdapterHistoryMessage[] = history;\n let currentStructuredHistory: AgentChatStructuredMessage[] =\n structuredHistory;\n let includeAttachments = attachments.length > 0;\n let includeReferences = Boolean(runConfig?.custom?.references);\n let internalContinuationRequest = false;\n let startupRecoveryAttempts = 0;\n let staleRunContinuationAttempts = 0;\n let stalledTransientContinuationAttempts = 0;\n let totalTransientContinuationAttempts = 0;\n const continuationHistoryFragments: string[] = [];\n const structuredContinuationFragments: AgentChatStructuredMessage[] = [];\n let visibleContinuationPrefix: ContentPart[] = [];\n let lastAutoContinueReason: string | null = null;\n const attemptedRunIds: string[] = [];\n let authRecoveryAttempted = false;\n let continuationToolCallCounter = 0;\n const nextContinuationToolCallId = () =>\n `continuation_tc_${++continuationToolCallCounter}`;\n\n const connectionRecoveryDetails = (): string => {\n return [\n lastAutoContinueReason\n ? `last_auto_continue_reason: ${lastAutoContinueReason}`\n : \"\",\n `stale_run_continuations: ${staleRunContinuationAttempts}`,\n `stalled_transient_continuations: ${stalledTransientContinuationAttempts}`,\n `total_transient_continuations: ${totalTransientContinuationAttempts}`,\n attemptedRunIds.length > 0\n ? `attempted_runs: ${attemptedRunIds.join(\", \")}`\n : \"\",\n ]\n .filter(Boolean)\n .join(\"\\n\");\n };\n\n const dispatchAuthError = (\n reason: \"auth-required\" | \"session-expired\",\n ) => {\n if (typeof window === \"undefined\") return;\n window.dispatchEvent(\n new CustomEvent(\"agent-chat:auth-error\", {\n detail: {\n reason,\n ...(tabId ? { tabId } : {}),\n ...(threadId ? { threadId } : {}),\n },\n }),\n );\n };\n\n const tryRecoverAuthOnce = async (): Promise<boolean> => {\n if (authRecoveryAttempted || abortSignal.aborted) return false;\n authRecoveryAttempted = true;\n try {\n const sessionRes = await fetch(\n safeAgentNativePath(\"/_agent-native/auth/session\"),\n {\n method: \"GET\",\n headers: { Accept: \"application/json\" },\n cache: \"no-store\",\n credentials: \"same-origin\",\n signal: abortSignal,\n },\n );\n if (!sessionRes.ok) return false;\n const session = await sessionRes.json().catch(() => null);\n return Boolean(session && !session.error);\n } catch {\n return false;\n }\n };\n\n const captureChatClientError = (\n error: unknown,\n phase: string,\n extra: Record<string, unknown> = {},\n ) => {\n captureError(error, {\n tags: {\n source: \"agent-chat-client\",\n phase,\n hasThread: threadId ? \"true\" : \"false\",\n hasRun: runId ? \"true\" : \"false\",\n lastAutoContinueReason: lastAutoContinueReason ?? undefined,\n },\n extra: {\n apiUrl,\n tabId,\n threadId,\n runId,\n lastSeq,\n contentParts: content.length,\n attemptedRunIds: [...attemptedRunIds],\n startupRecoveryAttempts,\n staleRunContinuationAttempts,\n stalledTransientContinuationAttempts,\n totalTransientContinuationAttempts,\n ...extra,\n },\n contexts: {\n agentChat: {\n tabId,\n threadId,\n runId,\n lastSeq,\n contentParts: content.length,\n startupRecoveryAttempts,\n staleRunContinuationAttempts,\n stalledTransientContinuationAttempts,\n totalTransientContinuationAttempts,\n },\n },\n });\n };\n\n try {\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n };\n try {\n const tz = Intl.DateTimeFormat().resolvedOptions().timeZone;\n if (tz) headers[\"x-user-timezone\"] = tz;\n } catch {\n // Non-browser or Intl unavailable — tool calls will fall back to UTC.\n }\n\n const reconnectCurrentRun = async function* (): AsyncGenerator<\n ChatModelRunResult,\n boolean,\n unknown\n > {\n if (!runId) return false;\n let lastReconnectError: unknown = null;\n let reconnectErrorCaptured = false;\n for (let attempt = 0; attempt < MAX_RECONNECT_ATTEMPTS; attempt++) {\n try {\n const reconnectRes = await fetch(\n `${apiUrl}/runs/${encodeURIComponent(runId)}/events?after=${lastSeq + 1}`,\n { signal: abortSignal },\n );\n if (!reconnectRes.ok || !reconnectRes.body) {\n lastReconnectError = new Error(\n `Reconnect failed: ${reconnectRes.status}`,\n );\n captureChatClientError(\n lastReconnectError,\n \"reconnect-current-response\",\n {\n status: reconnectRes.status,\n hasBody: Boolean(reconnectRes.body),\n attempt,\n },\n );\n reconnectErrorCaptured = true;\n break;\n }\n\n yield* readSSEStream(\n reconnectRes.body,\n content,\n toolCallCounter,\n tabId,\n (seq) => {\n lastSeq = seq;\n if (threadId) updateActiveRunSeq(seq);\n },\n runId,\n );\n clearActiveRun();\n return true;\n } catch (reconnectErr: unknown) {\n if (\n reconnectErr instanceof Error &&\n reconnectErr.name === \"AbortError\"\n ) {\n clearActiveRun();\n return true;\n }\n if (reconnectErr instanceof AgentAutoContinueSignal) {\n if (reconnectErr.reason === \"no_progress\") {\n throw reconnectErr;\n }\n return false;\n }\n lastReconnectError = reconnectErr;\n await retryDelay(attempt, abortSignal);\n }\n }\n if (lastReconnectError && !reconnectErrorCaptured) {\n captureChatClientError(\n lastReconnectError,\n \"reconnect-current-failed\",\n );\n }\n return false;\n };\n\n const abortCurrentRun = async (): Promise<void> => {\n if (!runId) return;\n try {\n await fetch(`${apiUrl}/runs/${encodeURIComponent(runId)}/abort`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ reason: \"no_progress\" }),\n signal: abortSignal,\n });\n } catch {\n // Best effort. The follow-up POST will still reconnect or 409 if\n // the producer is alive and cannot be aborted cross-isolate.\n } finally {\n clearActiveRun();\n }\n };\n\n const reconnectActiveRunForThread = async function* (): AsyncGenerator<\n ChatModelRunResult,\n boolean,\n unknown\n > {\n if (!threadId) return false;\n let lastActiveRunError: unknown = null;\n for (let attempt = 0; attempt < MAX_RECONNECT_ATTEMPTS; attempt++) {\n try {\n const activeRes = await fetch(\n `${apiUrl}/runs/active?threadId=${encodeURIComponent(threadId)}`,\n { signal: abortSignal },\n );\n if (!activeRes.ok) {\n lastActiveRunError = new Error(\n `Active run lookup failed: ${activeRes.status}`,\n );\n captureChatClientError(\n lastActiveRunError,\n \"reconnect-active-response\",\n { status: activeRes.status, attempt },\n );\n return false;\n }\n const active = await activeRes.json();\n if (active?.active && active.runId) {\n const activeRunId = String(active.runId);\n runId = activeRunId;\n if (!attemptedRunIds.includes(activeRunId)) {\n attemptedRunIds.push(activeRunId);\n }\n lastSeq = -1;\n setActiveRun({ threadId, runId: activeRunId, lastSeq: -1 });\n const reconnected = yield* reconnectCurrentRun();\n if (reconnected) return true;\n }\n return false;\n } catch (activeErr: unknown) {\n if (\n activeErr instanceof Error &&\n activeErr.name === \"AbortError\"\n ) {\n clearActiveRun();\n return true;\n }\n lastActiveRunError = activeErr;\n await retryDelay(attempt, abortSignal);\n }\n }\n if (lastActiveRunError) {\n captureChatClientError(\n lastActiveRunError,\n \"reconnect-active-failed\",\n );\n }\n return false;\n };\n\n const visibleContentForContinuation = (): ContentPart[] => {\n if (\n visibleContinuationPrefix.length > 0 &&\n visibleContinuationPrefix.every(\n (part, index) => content[index] === part,\n )\n ) {\n return content.slice(visibleContinuationPrefix.length);\n }\n return content;\n };\n\n const prepareAutoContinuation = (\n signal: AgentAutoContinueSignal,\n ): { ok: boolean; resetVisibleContent: boolean } => {\n lastAutoContinueReason = signal.reason;\n const isTransient = signal.reason !== \"loop_limit\";\n const visibleContent = visibleContentForContinuation();\n const currentPartialHistory =\n contentToContinuationHistory(visibleContent);\n const madeProgress = hasContinuationProgress(visibleContent);\n\n if (signal.reason === \"loop_limit\") {\n stalledTransientContinuationAttempts = 0;\n } else {\n totalTransientContinuationAttempts += 1;\n if (signal.reason === \"stale_run\") {\n staleRunContinuationAttempts += 1;\n if (staleRunContinuationAttempts > MAX_STALE_RUN_CONTINUATIONS) {\n return { ok: false, resetVisibleContent: false };\n }\n }\n stalledTransientContinuationAttempts = madeProgress\n ? 0\n : stalledTransientContinuationAttempts + 1;\n if (\n stalledTransientContinuationAttempts >\n MAX_STALLED_TRANSIENT_CONTINUATIONS ||\n totalTransientContinuationAttempts >\n MAX_TOTAL_TRANSIENT_CONTINUATIONS\n ) {\n return { ok: false, resetVisibleContent: false };\n }\n }\n\n if (isTransient && currentPartialHistory) {\n continuationHistoryFragments.push(currentPartialHistory);\n }\n const partialHistory = combineContinuationHistory(\n isTransient\n ? continuationHistoryFragments\n : [...continuationHistoryFragments, currentPartialHistory],\n );\n const structuredPartialHistory = contentToStructuredMessages(\n visibleContent,\n nextContinuationToolCallId,\n );\n if (isTransient && structuredPartialHistory.length > 0) {\n structuredContinuationFragments.push(...structuredPartialHistory);\n }\n const structuredCombinedHistory = isTransient\n ? structuredContinuationFragments\n : [...structuredContinuationFragments, ...structuredPartialHistory];\n currentHistory = [\n ...history,\n { role: \"user\", content: normalizeMentions(userMessageText) },\n ...(partialHistory\n ? [{ role: \"assistant\" as const, content: partialHistory }]\n : []),\n ];\n currentStructuredHistory = [\n ...structuredHistory,\n {\n role: \"user\",\n content: [\n { type: \"text\", text: normalizeMentions(userMessageText) },\n ],\n },\n ...structuredCombinedHistory,\n ];\n currentMessageText = autoContinueMessage(signal);\n // Continuation requests are stateless new POSTs. If the interrupted\n // turn depended on uploaded context, re-send that context; otherwise\n // an attachment-only prompt degrades to \"Use the attached context.\"\n // with nothing attached after a stale run or reconnect recovery.\n includeAttachments = attachments.length > 0;\n includeReferences = Boolean(runConfig?.custom?.references);\n internalContinuationRequest = true;\n startupRecoveryAttempts = 0;\n clearActiveRun();\n if (!isTransient) {\n return { ok: true, resetVisibleContent: false };\n }\n\n const preservedContent = visibleTransientContinuationContent(content);\n content.splice(0, content.length, ...preservedContent);\n visibleContinuationPrefix = preservedContent;\n return { ok: true, resetVisibleContent: true };\n };\n\n while (true) {\n try {\n runId = null;\n lastSeq = -1;\n const res = await fetch(apiUrl, {\n method: \"POST\",\n headers,\n body: JSON.stringify({\n message: currentMessageText,\n displayMessage: userMessageText,\n history: currentHistory,\n structuredHistory: currentStructuredHistory,\n ...(threadId ? { threadId } : {}),\n ...(internalContinuationRequest\n ? { internalContinuation: true }\n : {}),\n ...(requestMode ? { mode: requestMode } : {}),\n ...(modelRef?.current ? { model: modelRef.current } : {}),\n ...(engineRef?.current ? { engine: engineRef.current } : {}),\n ...(effortRef?.current ? { effort: effortRef.current } : {}),\n ...(includeAttachments ? { attachments } : {}),\n ...(includeReferences && runConfig?.custom?.references\n ? { references: runConfig.custom.references }\n : {}),\n }),\n signal: abortSignal,\n });\n\n // Check for auth errors returned as 200 with JSON (common with middleware issues)\n const contentType = res.headers.get(\"content-type\") || \"\";\n if (\n res.ok &&\n contentType.includes(\"application/json\") &&\n !contentType.includes(\"text/event-stream\")\n ) {\n try {\n const body = await res.text();\n const parsed = JSON.parse(body);\n if (parsed.error) {\n throw new Error(parsed.error);\n }\n } catch (e) {\n if (\n e instanceof Error &&\n e.message !== \"Unexpected end of JSON input\"\n ) {\n throw e;\n }\n }\n }\n\n if (!res.ok) {\n if (res.status === 409) {\n let handledConflict = false;\n try {\n const body = await res.json();\n if (body?.activeRunId) {\n handledConflict = true;\n runId = String(body.activeRunId);\n if (!attemptedRunIds.includes(runId)) {\n attemptedRunIds.push(runId);\n }\n lastSeq = -1;\n if (threadId) {\n setActiveRun({ threadId, runId, lastSeq: -1 });\n }\n const reconnected = yield* reconnectCurrentRun();\n if (reconnected) return;\n }\n } catch {\n // Fall through to the generic response handling below.\n }\n if (handledConflict) {\n await delay(1000, abortSignal);\n if (abortSignal.aborted) return;\n continue;\n }\n }\n\n if (res.status === 401 || res.status === 403) {\n if (await tryRecoverAuthOnce()) {\n continue;\n }\n dispatchAuthError(\"auth-required\");\n content.push({\n type: \"text\",\n text: authErrorText(\"auth-required\"),\n });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n } as ChatModelRunResult;\n return;\n }\n\n // 405 Method Not Allowed usually means the session is broken/expired\n // (e.g. a redirect to a login page that only accepts GET).\n if (res.status === 405) {\n if (await tryRecoverAuthOnce()) {\n continue;\n }\n dispatchAuthError(\"session-expired\");\n content.push({\n type: \"text\",\n text: authErrorText(\"session-expired\"),\n });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n } as ChatModelRunResult;\n return;\n }\n\n let errorText = `Server error: ${res.status}`;\n try {\n const body = await res.text();\n if (isAuthErrorMessage(body)) {\n if (await tryRecoverAuthOnce()) {\n continue;\n }\n const reason = authErrorReasonFromMessage(body);\n dispatchAuthError(reason);\n content.push({\n type: \"text\",\n text: authErrorText(reason, body),\n });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n } as ChatModelRunResult;\n return;\n }\n if (isMissingCredentialMessage(body)) {\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new Event(\"agent-chat:missing-api-key\"),\n );\n }\n content.push({\n type: \"text\",\n text: missingCredentialErrorText(body),\n });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n } as ChatModelRunResult;\n return;\n } else if (body.includes(\"Cannot find any path\")) {\n errorText =\n \"Agent chat endpoint not found. Make sure the agent-chat plugin is loaded in server/plugins/.\";\n } else if (body) {\n errorText =\n body.length > 200 ? body.slice(0, 200) + \"...\" : body;\n }\n } catch {}\n throw new Error(errorText);\n }\n if (!res.body) {\n throw new Error(\"No response body\");\n }\n\n // Track the run ID for reconnection\n runId = res.headers.get(\"X-Run-Id\");\n if (runId && !attemptedRunIds.includes(runId)) {\n attemptedRunIds.push(runId);\n }\n if (runId && threadId) {\n setActiveRun({ threadId, runId, lastSeq: -1 });\n }\n\n yield* readSSEStream(\n res.body,\n content,\n toolCallCounter,\n tabId,\n (seq) => {\n lastSeq = seq;\n if (runId && threadId) {\n updateActiveRunSeq(seq);\n }\n },\n runId,\n );\n\n // Run completed normally — clear active run state\n clearActiveRun();\n return;\n } catch (err: unknown) {\n if (err instanceof Error && err.name === \"AbortError\") {\n // User-initiated abort (Stop button) — clear active run\n clearActiveRun();\n return;\n }\n\n if (err instanceof AgentAutoContinueSignal) {\n if (err.reason === \"no_progress\") {\n await abortCurrentRun();\n }\n if (err.reason === \"stream_ended\") {\n const reconnected = yield* reconnectCurrentRun();\n if (reconnected) return;\n const activeReconnected = yield* reconnectActiveRunForThread();\n if (activeReconnected) return;\n }\n const continuation = prepareAutoContinuation(err);\n if (!continuation.ok) {\n const message =\n \"The agent connection kept failing after several automatic recovery attempts.\";\n captureChatClientError(err, \"auto-continuation-exhausted\", {\n autoContinueReason: err.reason,\n });\n const runError = {\n message,\n details: connectionRecoveryDetails(),\n errorCode: \"connection_error\",\n recoverable: true,\n ...(runId ? { runId } : {}),\n };\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new CustomEvent(\"agent-chat:run-error\", {\n detail: { ...runError, tabId },\n }),\n );\n }\n content.push({\n type: \"text\",\n text: `Something went wrong: ${message}`,\n });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n metadata: {\n custom: { ...(runId ? { runId } : {}), runError },\n },\n };\n clearActiveRun();\n return;\n }\n if (continuation.resetVisibleContent) {\n yield {\n content: snapshotContent(content),\n } as ChatModelRunResult;\n }\n await delay(250, abortSignal);\n if (abortSignal.aborted) return;\n continue;\n }\n\n const errMsg =\n err instanceof Error ? err.message : \"Something went wrong.\";\n const isAuthError = isAuthErrorMessage(errMsg);\n\n // Don't try to reconnect for auth/client errors — show error directly\n if (isAuthError) {\n if (await tryRecoverAuthOnce()) {\n continue;\n }\n const reason = authErrorReasonFromMessage(errMsg);\n dispatchAuthError(reason);\n content.push({\n type: \"text\",\n text: authErrorText(reason, errMsg),\n });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n };\n clearActiveRun();\n return;\n }\n\n if (isMissingCredentialMessage(errMsg)) {\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(new Event(\"agent-chat:missing-api-key\"));\n }\n content.push({\n type: \"text\",\n text: missingCredentialErrorText(errMsg),\n });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n };\n clearActiveRun();\n return;\n }\n\n // Connection lost — try to reconnect to the run\n const reconnected = yield* reconnectCurrentRun();\n if (reconnected) return;\n const activeReconnected = yield* reconnectActiveRunForThread();\n if (activeReconnected) return;\n\n // Reconnect failed or not possible — keep going from the partial\n // streamed content instead of surfacing a transient transport error.\n if (content.length > 0) {\n const continuation = prepareAutoContinuation(\n new AgentAutoContinueSignal({ reason: \"stream_ended\" }),\n );\n if (!continuation.ok) {\n const message =\n \"The agent connection kept failing after several automatic recovery attempts.\";\n captureChatClientError(err, \"recovery-exhausted\");\n const runError = {\n message,\n details: connectionRecoveryDetails(),\n errorCode: \"connection_error\",\n recoverable: true,\n ...(runId ? { runId } : {}),\n };\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new CustomEvent(\"agent-chat:run-error\", {\n detail: { ...runError, tabId },\n }),\n );\n }\n content.push({\n type: \"text\",\n text: `Something went wrong: ${message}`,\n });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n metadata: {\n custom: { ...(runId ? { runId } : {}), runError },\n },\n };\n clearActiveRun();\n return;\n }\n if (continuation.resetVisibleContent) {\n yield {\n content: snapshotContent(content),\n } as ChatModelRunResult;\n }\n await delay(250, abortSignal);\n if (abortSignal.aborted) return;\n continue;\n }\n\n if (\n isRetryableStartupError(errMsg) &&\n startupRecoveryAttempts < MAX_STARTUP_RECOVERY_ATTEMPTS\n ) {\n await retryDelay(startupRecoveryAttempts++, abortSignal);\n if (abortSignal.aborted) return;\n continue;\n }\n\n // No partial work exists, so this is still a real startup failure.\n captureChatClientError(err, \"startup-failed\", {\n retryableStartupError: isRetryableStartupError(errMsg),\n });\n const normalized = normalizeChatError(errMsg);\n const runError = {\n message: normalized.message,\n ...(normalized.details ? { details: normalized.details } : {}),\n errorCode: \"connection_error\",\n recoverable: true,\n ...(runId ? { runId } : {}),\n };\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new CustomEvent(\"agent-chat:run-error\", {\n detail: { ...runError, tabId },\n }),\n );\n }\n content.push({\n type: \"text\",\n text: errMsg.startsWith(\"Server error:\")\n ? errMsg\n : `Something went wrong: ${normalized.message}`,\n });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n metadata: { custom: { ...(runId ? { runId } : {}), runError } },\n };\n return;\n }\n }\n } finally {\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new CustomEvent(\"agentNative.chatRunning\", {\n detail: { isRunning: false, tabId },\n }),\n );\n }\n }\n },\n };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ComposerPlusMenu.d.ts","sourceRoot":"","sources":["../../../src/client/composer/ComposerPlusMenu.tsx"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAO/C,UAAU,qBAAqB;IAC7B,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IAC5C;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,aAAa,CAAC;CAC/B;AAwCD,wBAAgB,gBAAgB,CAAC,EAC/B,YAAY,EACZ,IAAa,GACd,EAAE,qBAAqB,2CAKvB"}
1
+ {"version":3,"file":"ComposerPlusMenu.d.ts","sourceRoot":"","sources":["../../../src/client/composer/ComposerPlusMenu.tsx"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAO/C,UAAU,qBAAqB;IAC7B,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IAC5C;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,aAAa,CAAC;CAC/B;AAyCD,wBAAgB,gBAAgB,CAAC,EAC/B,YAAY,EACZ,IAAa,GACd,EAAE,qBAAqB,2CAKvB"}