@agent-native/core 0.12.23 → 0.12.24

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 (64) hide show
  1. package/dist/agent/thread-data-builder.d.ts +10 -0
  2. package/dist/agent/thread-data-builder.d.ts.map +1 -1
  3. package/dist/agent/thread-data-builder.js +80 -0
  4. package/dist/agent/thread-data-builder.js.map +1 -1
  5. package/dist/agent/types.d.ts +7 -0
  6. package/dist/agent/types.d.ts.map +1 -1
  7. package/dist/agent/types.js.map +1 -1
  8. package/dist/cli/create.d.ts.map +1 -1
  9. package/dist/cli/create.js +3 -3
  10. package/dist/cli/create.js.map +1 -1
  11. package/dist/client/AgentPanel.d.ts.map +1 -1
  12. package/dist/client/AgentPanel.js +9 -1
  13. package/dist/client/AgentPanel.js.map +1 -1
  14. package/dist/client/AssistantChat.d.ts.map +1 -1
  15. package/dist/client/AssistantChat.js +49 -10
  16. package/dist/client/AssistantChat.js.map +1 -1
  17. package/dist/client/ErrorBoundary.d.ts.map +1 -1
  18. package/dist/client/ErrorBoundary.js +3 -2
  19. package/dist/client/ErrorBoundary.js.map +1 -1
  20. package/dist/client/agent-chat-adapter.d.ts.map +1 -1
  21. package/dist/client/agent-chat-adapter.js +93 -45
  22. package/dist/client/agent-chat-adapter.js.map +1 -1
  23. package/dist/client/composer/PromptComposer.js +1 -1
  24. package/dist/client/composer/PromptComposer.js.map +1 -1
  25. package/dist/client/composer/TiptapComposer.d.ts +5 -0
  26. package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
  27. package/dist/client/composer/TiptapComposer.js +10 -1
  28. package/dist/client/composer/TiptapComposer.js.map +1 -1
  29. package/dist/client/onboarding/OnboardingPanel.js +2 -1
  30. package/dist/client/onboarding/OnboardingPanel.js.map +1 -1
  31. package/dist/client/progress/RunsTray.d.ts.map +1 -1
  32. package/dist/client/progress/RunsTray.js +18 -3
  33. package/dist/client/progress/RunsTray.js.map +1 -1
  34. package/dist/client/resources/ResourceTree.d.ts.map +1 -1
  35. package/dist/client/resources/ResourceTree.js +5 -4
  36. package/dist/client/resources/ResourceTree.js.map +1 -1
  37. package/dist/client/settings/useBuilderStatus.d.ts.map +1 -1
  38. package/dist/client/settings/useBuilderStatus.js +5 -3
  39. package/dist/client/settings/useBuilderStatus.js.map +1 -1
  40. package/dist/collab/client.d.ts +9 -0
  41. package/dist/collab/client.d.ts.map +1 -1
  42. package/dist/collab/client.js +36 -10
  43. package/dist/collab/client.js.map +1 -1
  44. package/dist/onboarding/default-steps.js +1 -1
  45. package/dist/onboarding/default-steps.js.map +1 -1
  46. package/dist/progress/store.d.ts.map +1 -1
  47. package/dist/progress/store.js +1 -1
  48. package/dist/progress/store.js.map +1 -1
  49. package/dist/server/action-routes.d.ts +2 -0
  50. package/dist/server/action-routes.d.ts.map +1 -1
  51. package/dist/server/action-routes.js +4 -1
  52. package/dist/server/action-routes.js.map +1 -1
  53. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  54. package/dist/server/agent-chat-plugin.js +27 -15
  55. package/dist/server/agent-chat-plugin.js.map +1 -1
  56. package/dist/server/index.d.ts +1 -1
  57. package/dist/server/index.d.ts.map +1 -1
  58. package/dist/server/index.js +1 -1
  59. package/dist/server/index.js.map +1 -1
  60. package/dist/server/request-context.d.ts +9 -0
  61. package/dist/server/request-context.d.ts.map +1 -1
  62. package/dist/server/request-context.js +13 -0
  63. package/dist/server/request-context.js.map +1 -1
  64. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"agent-chat-adapter.js","sourceRoot":"","sources":["../../src/client/agent-chat-adapter.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ChatModelAdapter, ChatModelRunResult } from \"@assistant-ui/react\";\nimport {\n setActiveRun,\n updateActiveRunSeq,\n clearActiveRun,\n} from \"./active-run-state.js\";\nimport {\n AgentAutoContinueSignal,\n type 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\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;\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 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 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 }[],\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 = messageTextFromContent(message.content);\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: {\n type: string;\n name: string;\n contentType?: string;\n data?: string;\n text?: string;\n }[] = [];\n if (lastUserMsg && \"attachments\" in lastUserMsg) {\n const msgAttachments = (\n lastUserMsg as {\n attachments?: readonly {\n name: string;\n contentType?: string;\n content: readonly Record<string, unknown>[];\n }[];\n }\n ).attachments;\n for (const att of msgAttachments ?? []) {\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: decodedText }\n : part.data.startsWith(\"data:\")\n ? { data: part.data }\n : { text: 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: unwrapAttachmentEnvelope(part.text),\n });\n }\n }\n }\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: 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 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 includeAttachments = false;\n includeReferences = false;\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 history: currentHistory,\n structuredHistory: currentStructuredHistory,\n ...(threadId ? { threadId } : {}),\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 { 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: decodedText }\n : part.data.startsWith(\"data:\")\n ? { data: part.data }\n : { text: 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: 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 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 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 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 history: currentHistory,\n structuredHistory: currentStructuredHistory,\n ...(threadId ? { threadId } : {}),\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"]}
@@ -85,7 +85,7 @@ function AttachmentChip({ attachment, onRemove, }) {
85
85
  return _jsx(PastedTextChip, { attachment: attachment, onRemove: onRemove });
86
86
  }
87
87
  if (src) {
88
- return (_jsxs("div", { className: "group relative h-16 w-16 overflow-hidden rounded-lg border border-border/70 bg-muted/50", children: [_jsx("img", { src: src, alt: attachment.name, className: "h-full w-full object-cover" }), _jsx("button", { type: "button", onClick: () => onRemove(attachment.id), "aria-label": `Remove ${attachment.name}`, className: "absolute right-1 top-1 flex h-5 w-5 cursor-pointer items-center justify-center rounded-full border border-border/60 bg-background/90 text-muted-foreground hover:text-foreground", children: _jsx(IconX, { className: "h-3 w-3" }) })] }));
88
+ return (_jsxs("div", { className: "group relative flex h-16 min-w-16 max-w-28 items-center justify-center overflow-hidden rounded-lg border border-border/70 bg-muted/50", children: [_jsx("img", { src: src, alt: attachment.name, className: "max-h-full max-w-full object-contain p-1" }), _jsx("button", { type: "button", onClick: () => onRemove(attachment.id), "aria-label": `Remove ${attachment.name}`, className: "absolute right-1 top-1 flex h-5 w-5 cursor-pointer items-center justify-center rounded-full border border-border/60 bg-background/90 text-muted-foreground hover:text-foreground", children: _jsx(IconX, { className: "h-3 w-3" }) })] }));
89
89
  }
90
90
  return (_jsxs("div", { className: "group relative inline-flex max-w-[200px] items-center gap-2 rounded-md border border-border/70 bg-muted/50 px-2 py-1.5 text-xs", children: [_jsx("div", { className: "flex h-6 w-6 shrink-0 items-center justify-center rounded bg-background text-[9px] font-semibold uppercase text-muted-foreground", children: attachment.name.split(".").pop() || "file" }), _jsx("span", { className: "min-w-0 truncate font-medium", children: attachment.name }), _jsx("button", { type: "button", onClick: () => onRemove(attachment.id), "aria-label": `Remove ${attachment.name}`, className: "flex h-5 w-5 shrink-0 cursor-pointer items-center justify-center rounded text-muted-foreground hover:text-foreground", children: _jsx(IconX, { className: "h-3 w-3" }) })] }));
91
91
  }
@@ -1 +1 @@
1
- {"version":3,"file":"PromptComposer.js","sourceRoot":"","sources":["../../../src/client/composer/PromptComposer.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useCallback, useEffect, useMemo, useRef, type Ref } from \"react\";\nimport {\n AssistantRuntimeProvider,\n ComposerPrimitive,\n ThreadPrimitive,\n useAui,\n useComposer,\n useLocalRuntime,\n} from \"@assistant-ui/react\";\nimport type {\n Attachment,\n AttachmentAdapter,\n ChatModelAdapter,\n CompleteAttachment,\n PendingAttachment,\n} from \"@assistant-ui/react\";\nimport {\n CompositeAttachmentAdapter,\n SimpleImageAttachmentAdapter,\n SimpleTextAttachmentAdapter,\n} from \"@assistant-ui/react\";\nimport { IconX } from \"@tabler/icons-react\";\nimport { cn } from \"../utils.js\";\nimport { TiptapComposer, type TiptapComposerHandle } from \"./TiptapComposer.js\";\nimport type { Reference } from \"./types.js\";\nimport { useChatModels } from \"../use-chat-models.js\";\nimport type { ReasoningEffort } from \"../../shared/reasoning-effort.js\";\nimport { isPastedTextAttachmentName } from \"./pasted-text.js\";\nimport { PastedTextChip } from \"./PastedTextChip.js\";\n\nconst MAX_INLINE_TEXT_FILE_CHARS = 60_000;\n\n/**\n * Files the user attached via the \"+\" button in PromptComposer. The host owns\n * what to do with them — typically POST to a per-app upload endpoint and pass\n * the resulting URLs/paths into the prompt that gets sent to the agent.\n */\nexport type PromptComposerFile = File;\n\nexport interface PromptComposerSubmitOptions {\n model?: string;\n engine?: string;\n effort?: ReasoningEffort;\n}\n\nexport interface PromptComposerProps {\n /** Called when the user submits the composer. */\n onSubmit: (\n text: string,\n files: PromptComposerFile[],\n references: Reference[],\n options: PromptComposerSubmitOptions,\n ) => void;\n placeholder?: string;\n disabled?: boolean;\n autoFocus?: boolean;\n className?: string;\n /** Forwarded to TiptapComposer for draft persistence. */\n draftScope?: string;\n /** Keep the submitted prompt in the editor. Default: false. */\n preserveDraftOnSubmit?: boolean;\n /** Show the model selector (default: true). */\n showModelSelector?: boolean;\n /** Show the voice dictation button (default: true). */\n voiceEnabled?: boolean;\n /** Show file upload controls and pass submitted files to onSubmit (default: true). */\n attachmentsEnabled?: boolean;\n /** Called whenever the plain editor text changes. */\n onTextChange?: (text: string) => void;\n /** Imperative handle for focusing the composer. */\n composerRef?: Ref<TiptapComposerHandle>;\n}\n\n// Minimal pass-through adapter. PromptComposer always submits through\n// onSubmitOverride, so the runtime never actually calls this — but\n// `useLocalRuntime` needs *something* shaped like a ChatModelAdapter.\nconst NOOP_ADAPTER: ChatModelAdapter = {\n async *run() {\n return;\n },\n};\n\n/**\n * Local clone of AssistantChat's BinaryDocumentAttachmentAdapter so PDFs and\n * PPTX files can be attached without dragging the whole assistant chat module\n * into bundles that just want a prompt popover.\n */\nclass BinaryDocumentAttachmentAdapter implements AttachmentAdapter {\n public accept =\n \"application/pdf,application/vnd.openxmlformats-officedocument.presentationml.presentation,.pdf,.pptx\";\n\n public async add(state: { file: File }): Promise<PendingAttachment> {\n return {\n id: state.file.name,\n type: \"document\",\n name: state.file.name,\n contentType: state.file.type || \"application/octet-stream\",\n file: state.file,\n status: { type: \"requires-action\", reason: \"composer-send\" },\n };\n }\n\n public async send(\n attachment: PendingAttachment,\n ): Promise<CompleteAttachment> {\n return {\n ...attachment,\n status: { type: \"complete\" },\n content: [],\n };\n }\n\n public async remove() {\n /* noop */\n }\n}\n\nfunction isInlineableTextFile(file: File): boolean {\n if (file.type.startsWith(\"text/\")) return true;\n if (file.type === \"application/json\") return true;\n return /\\.(txt|md|markdown|csv|json|yaml|yml)$/i.test(file.name);\n}\n\nfunction formatInlineTextFile(name: string, text: string): string {\n const truncated = text.length > MAX_INLINE_TEXT_FILE_CHARS;\n const body = truncated ? text.slice(0, MAX_INLINE_TEXT_FILE_CHARS) : text;\n return [\n `<uploaded-text-file name=\"${name}\">`,\n body,\n truncated\n ? `[Truncated after ${MAX_INLINE_TEXT_FILE_CHARS} characters.]`\n : \"\",\n \"</uploaded-text-file>\",\n ]\n .filter(Boolean)\n .join(\"\\n\");\n}\n\nfunction getImageSrc(attachment: Attachment): string | null {\n if (attachment.type !== \"image\") return null;\n if (\"file\" in attachment && attachment.file) {\n return URL.createObjectURL(attachment.file);\n }\n const imagePart = attachment.content?.find((part) => part.type === \"image\");\n return imagePart && \"image\" in imagePart ? imagePart.image : null;\n}\n\nfunction AttachmentChip({\n attachment,\n onRemove,\n}: {\n attachment: Attachment;\n onRemove: (id: string) => void;\n}) {\n const src = useMemo(() => getImageSrc(attachment), [attachment]);\n useEffect(\n () => () => {\n if (src?.startsWith(\"blob:\")) URL.revokeObjectURL(src);\n },\n [src],\n );\n\n if (isPastedTextAttachmentName(attachment.name)) {\n return <PastedTextChip attachment={attachment} onRemove={onRemove} />;\n }\n\n if (src) {\n return (\n <div className=\"group relative h-16 w-16 overflow-hidden rounded-lg border border-border/70 bg-muted/50\">\n <img\n src={src}\n alt={attachment.name}\n className=\"h-full w-full object-cover\"\n />\n <button\n type=\"button\"\n onClick={() => onRemove(attachment.id)}\n aria-label={`Remove ${attachment.name}`}\n className=\"absolute right-1 top-1 flex h-5 w-5 cursor-pointer items-center justify-center rounded-full border border-border/60 bg-background/90 text-muted-foreground hover:text-foreground\"\n >\n <IconX className=\"h-3 w-3\" />\n </button>\n </div>\n );\n }\n\n return (\n <div className=\"group relative inline-flex max-w-[200px] items-center gap-2 rounded-md border border-border/70 bg-muted/50 px-2 py-1.5 text-xs\">\n <div className=\"flex h-6 w-6 shrink-0 items-center justify-center rounded bg-background text-[9px] font-semibold uppercase text-muted-foreground\">\n {attachment.name.split(\".\").pop() || \"file\"}\n </div>\n <span className=\"min-w-0 truncate font-medium\">{attachment.name}</span>\n <button\n type=\"button\"\n onClick={() => onRemove(attachment.id)}\n aria-label={`Remove ${attachment.name}`}\n className=\"flex h-5 w-5 shrink-0 cursor-pointer items-center justify-center rounded text-muted-foreground hover:text-foreground\"\n >\n <IconX className=\"h-3 w-3\" />\n </button>\n </div>\n );\n}\n\nfunction PromptAttachmentStrip() {\n const attachments = useComposer((state) => state.attachments);\n const aui = useAui();\n\n const handleRemove = useCallback(\n (id: string) => {\n void aui.composer().attachment({ id }).remove();\n },\n [aui],\n );\n\n if (attachments.length === 0) return null;\n return (\n <div className=\"flex flex-wrap gap-2 px-2 pt-2\">\n {attachments.map((attachment) => (\n <AttachmentChip\n key={attachment.id}\n attachment={attachment}\n onRemove={handleRemove}\n />\n ))}\n </div>\n );\n}\n\nfunction PromptComposerInner({\n onSubmit,\n placeholder,\n disabled,\n autoFocus,\n className,\n draftScope,\n preserveDraftOnSubmit = false,\n showModelSelector = true,\n voiceEnabled = true,\n attachmentsEnabled = true,\n onTextChange,\n composerRef,\n}: PromptComposerProps) {\n const localRef = useRef<TiptapComposerHandle>(null);\n const handleRef = composerRef ?? localRef;\n const models = useChatModels();\n\n useEffect(() => {\n if (!autoFocus) return;\n const id = window.setTimeout(() => {\n const target =\n typeof handleRef === \"object\" && handleRef && \"current\" in handleRef\n ? handleRef.current\n : null;\n target?.focus();\n }, 50);\n return () => window.clearTimeout(id);\n }, [autoFocus, handleRef]);\n\n const handleSubmit = useCallback(\n async (\n text: string,\n references: Reference[],\n attachments?: ReadonlyArray<unknown>,\n ) => {\n // PromptComposer hosts (NewWorkspaceAppFlow, create-extension, create-deck,\n // …) submit a single string prompt — they don't run the assistant-ui\n // attachment send pipeline. TiptapComposer auto-converts large pastes\n // into a \"Pasted text\" chip, which would otherwise disappear into an\n // unprocessed File. Inline the chip body back into the prompt text so\n // newlines and full content survive the round-trip.\n const files: File[] = [];\n const pastedTextBlocks: string[] = [];\n for (const att of attachments ?? []) {\n const a = att as Attachment;\n if (\"file\" in a && a.file instanceof File) {\n const file = a.file;\n if (isPastedTextAttachmentName(file.name)) {\n try {\n pastedTextBlocks.push(await file.text());\n } catch {\n // If we can't read it, fall back to surfacing it as a regular\n // attachment file rather than silently losing it.\n files.push(file);\n }\n } else {\n if (isInlineableTextFile(file)) {\n try {\n pastedTextBlocks.push(\n formatInlineTextFile(file.name, await file.text()),\n );\n } catch {\n // Keep the upload path fallback below.\n }\n }\n files.push(file);\n }\n }\n }\n const finalText = pastedTextBlocks.length\n ? [text.trim(), ...pastedTextBlocks].filter(Boolean).join(\"\\n\\n\")\n : text;\n onSubmit(finalText, files, references, {\n model: showModelSelector ? models.selectedModel : undefined,\n engine: showModelSelector ? models.selectedEngine : undefined,\n effort: showModelSelector ? models.selectedEffort : undefined,\n });\n },\n [\n models.selectedEffort,\n models.selectedEngine,\n models.selectedModel,\n onSubmit,\n showModelSelector,\n ],\n );\n\n return (\n <div\n className={cn(\n \"agent-composer-area flex flex-col rounded-lg border border-input bg-background focus-within:ring-1 focus-within:ring-ring\",\n className,\n )}\n >\n <ComposerPrimitive.Root className=\"flex flex-col\">\n <PromptAttachmentStrip />\n <TiptapComposer\n focusRef={handleRef}\n disabled={disabled}\n placeholder={placeholder}\n onSubmit={handleSubmit}\n clearOnSubmit={!preserveDraftOnSubmit}\n plusMenuMode={attachmentsEnabled ? \"upload-only\" : \"hidden\"}\n voiceEnabled={voiceEnabled}\n onTextChange={onTextChange}\n draftScope={draftScope}\n selectedModel={showModelSelector ? models.selectedModel : undefined}\n selectedEffort={showModelSelector ? models.selectedEffort : undefined}\n availableModels={\n showModelSelector ? models.availableModels : undefined\n }\n onModelChange={showModelSelector ? models.onModelChange : undefined}\n onEffortChange={showModelSelector ? models.onEffortChange : undefined}\n />\n </ComposerPrimitive.Root>\n </div>\n );\n}\n\n/**\n * Standalone composer that mirrors the agent sidebar's input experience —\n * voice dictation, file upload, model selector, submit-on-Enter — for use in\n * popovers and inline prompt forms (create tool, create deck, create dashboard,\n * the Dispatch new-app flow, etc.).\n *\n * The host owns submission: when the user presses Enter or clicks submit,\n * `onSubmit(text, files, references, options)` is called. PromptComposer runs\n * its own minimal assistant-ui runtime so it can be dropped into any subtree\n * without needing the outer chat to be mounted.\n */\nexport function PromptComposer(props: PromptComposerProps) {\n const attachmentAdapter = useMemo(\n () =>\n new CompositeAttachmentAdapter([\n new SimpleImageAttachmentAdapter(),\n new BinaryDocumentAttachmentAdapter(),\n new SimpleTextAttachmentAdapter(),\n ]),\n [],\n );\n const runtime = useLocalRuntime(NOOP_ADAPTER, {\n adapters: { attachments: attachmentAdapter },\n });\n\n return (\n <AssistantRuntimeProvider runtime={runtime}>\n <ThreadPrimitive.Root className=\"contents\">\n <PromptComposerInner {...props} />\n </ThreadPrimitive.Root>\n </AssistantRuntimeProvider>\n );\n}\n"]}
1
+ {"version":3,"file":"PromptComposer.js","sourceRoot":"","sources":["../../../src/client/composer/PromptComposer.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useCallback, useEffect, useMemo, useRef, type Ref } from \"react\";\nimport {\n AssistantRuntimeProvider,\n ComposerPrimitive,\n ThreadPrimitive,\n useAui,\n useComposer,\n useLocalRuntime,\n} from \"@assistant-ui/react\";\nimport type {\n Attachment,\n AttachmentAdapter,\n ChatModelAdapter,\n CompleteAttachment,\n PendingAttachment,\n} from \"@assistant-ui/react\";\nimport {\n CompositeAttachmentAdapter,\n SimpleImageAttachmentAdapter,\n SimpleTextAttachmentAdapter,\n} from \"@assistant-ui/react\";\nimport { IconX } from \"@tabler/icons-react\";\nimport { cn } from \"../utils.js\";\nimport { TiptapComposer, type TiptapComposerHandle } from \"./TiptapComposer.js\";\nimport type { Reference } from \"./types.js\";\nimport { useChatModels } from \"../use-chat-models.js\";\nimport type { ReasoningEffort } from \"../../shared/reasoning-effort.js\";\nimport { isPastedTextAttachmentName } from \"./pasted-text.js\";\nimport { PastedTextChip } from \"./PastedTextChip.js\";\n\nconst MAX_INLINE_TEXT_FILE_CHARS = 60_000;\n\n/**\n * Files the user attached via the \"+\" button in PromptComposer. The host owns\n * what to do with them — typically POST to a per-app upload endpoint and pass\n * the resulting URLs/paths into the prompt that gets sent to the agent.\n */\nexport type PromptComposerFile = File;\n\nexport interface PromptComposerSubmitOptions {\n model?: string;\n engine?: string;\n effort?: ReasoningEffort;\n}\n\nexport interface PromptComposerProps {\n /** Called when the user submits the composer. */\n onSubmit: (\n text: string,\n files: PromptComposerFile[],\n references: Reference[],\n options: PromptComposerSubmitOptions,\n ) => void;\n placeholder?: string;\n disabled?: boolean;\n autoFocus?: boolean;\n className?: string;\n /** Forwarded to TiptapComposer for draft persistence. */\n draftScope?: string;\n /** Keep the submitted prompt in the editor. Default: false. */\n preserveDraftOnSubmit?: boolean;\n /** Show the model selector (default: true). */\n showModelSelector?: boolean;\n /** Show the voice dictation button (default: true). */\n voiceEnabled?: boolean;\n /** Show file upload controls and pass submitted files to onSubmit (default: true). */\n attachmentsEnabled?: boolean;\n /** Called whenever the plain editor text changes. */\n onTextChange?: (text: string) => void;\n /** Imperative handle for focusing the composer. */\n composerRef?: Ref<TiptapComposerHandle>;\n}\n\n// Minimal pass-through adapter. PromptComposer always submits through\n// onSubmitOverride, so the runtime never actually calls this — but\n// `useLocalRuntime` needs *something* shaped like a ChatModelAdapter.\nconst NOOP_ADAPTER: ChatModelAdapter = {\n async *run() {\n return;\n },\n};\n\n/**\n * Local clone of AssistantChat's BinaryDocumentAttachmentAdapter so PDFs and\n * PPTX files can be attached without dragging the whole assistant chat module\n * into bundles that just want a prompt popover.\n */\nclass BinaryDocumentAttachmentAdapter implements AttachmentAdapter {\n public accept =\n \"application/pdf,application/vnd.openxmlformats-officedocument.presentationml.presentation,.pdf,.pptx\";\n\n public async add(state: { file: File }): Promise<PendingAttachment> {\n return {\n id: state.file.name,\n type: \"document\",\n name: state.file.name,\n contentType: state.file.type || \"application/octet-stream\",\n file: state.file,\n status: { type: \"requires-action\", reason: \"composer-send\" },\n };\n }\n\n public async send(\n attachment: PendingAttachment,\n ): Promise<CompleteAttachment> {\n return {\n ...attachment,\n status: { type: \"complete\" },\n content: [],\n };\n }\n\n public async remove() {\n /* noop */\n }\n}\n\nfunction isInlineableTextFile(file: File): boolean {\n if (file.type.startsWith(\"text/\")) return true;\n if (file.type === \"application/json\") return true;\n return /\\.(txt|md|markdown|csv|json|yaml|yml)$/i.test(file.name);\n}\n\nfunction formatInlineTextFile(name: string, text: string): string {\n const truncated = text.length > MAX_INLINE_TEXT_FILE_CHARS;\n const body = truncated ? text.slice(0, MAX_INLINE_TEXT_FILE_CHARS) : text;\n return [\n `<uploaded-text-file name=\"${name}\">`,\n body,\n truncated\n ? `[Truncated after ${MAX_INLINE_TEXT_FILE_CHARS} characters.]`\n : \"\",\n \"</uploaded-text-file>\",\n ]\n .filter(Boolean)\n .join(\"\\n\");\n}\n\nfunction getImageSrc(attachment: Attachment): string | null {\n if (attachment.type !== \"image\") return null;\n if (\"file\" in attachment && attachment.file) {\n return URL.createObjectURL(attachment.file);\n }\n const imagePart = attachment.content?.find((part) => part.type === \"image\");\n return imagePart && \"image\" in imagePart ? imagePart.image : null;\n}\n\nfunction AttachmentChip({\n attachment,\n onRemove,\n}: {\n attachment: Attachment;\n onRemove: (id: string) => void;\n}) {\n const src = useMemo(() => getImageSrc(attachment), [attachment]);\n useEffect(\n () => () => {\n if (src?.startsWith(\"blob:\")) URL.revokeObjectURL(src);\n },\n [src],\n );\n\n if (isPastedTextAttachmentName(attachment.name)) {\n return <PastedTextChip attachment={attachment} onRemove={onRemove} />;\n }\n\n if (src) {\n return (\n <div className=\"group relative flex h-16 min-w-16 max-w-28 items-center justify-center overflow-hidden rounded-lg border border-border/70 bg-muted/50\">\n <img\n src={src}\n alt={attachment.name}\n className=\"max-h-full max-w-full object-contain p-1\"\n />\n <button\n type=\"button\"\n onClick={() => onRemove(attachment.id)}\n aria-label={`Remove ${attachment.name}`}\n className=\"absolute right-1 top-1 flex h-5 w-5 cursor-pointer items-center justify-center rounded-full border border-border/60 bg-background/90 text-muted-foreground hover:text-foreground\"\n >\n <IconX className=\"h-3 w-3\" />\n </button>\n </div>\n );\n }\n\n return (\n <div className=\"group relative inline-flex max-w-[200px] items-center gap-2 rounded-md border border-border/70 bg-muted/50 px-2 py-1.5 text-xs\">\n <div className=\"flex h-6 w-6 shrink-0 items-center justify-center rounded bg-background text-[9px] font-semibold uppercase text-muted-foreground\">\n {attachment.name.split(\".\").pop() || \"file\"}\n </div>\n <span className=\"min-w-0 truncate font-medium\">{attachment.name}</span>\n <button\n type=\"button\"\n onClick={() => onRemove(attachment.id)}\n aria-label={`Remove ${attachment.name}`}\n className=\"flex h-5 w-5 shrink-0 cursor-pointer items-center justify-center rounded text-muted-foreground hover:text-foreground\"\n >\n <IconX className=\"h-3 w-3\" />\n </button>\n </div>\n );\n}\n\nfunction PromptAttachmentStrip() {\n const attachments = useComposer((state) => state.attachments);\n const aui = useAui();\n\n const handleRemove = useCallback(\n (id: string) => {\n void aui.composer().attachment({ id }).remove();\n },\n [aui],\n );\n\n if (attachments.length === 0) return null;\n return (\n <div className=\"flex flex-wrap gap-2 px-2 pt-2\">\n {attachments.map((attachment) => (\n <AttachmentChip\n key={attachment.id}\n attachment={attachment}\n onRemove={handleRemove}\n />\n ))}\n </div>\n );\n}\n\nfunction PromptComposerInner({\n onSubmit,\n placeholder,\n disabled,\n autoFocus,\n className,\n draftScope,\n preserveDraftOnSubmit = false,\n showModelSelector = true,\n voiceEnabled = true,\n attachmentsEnabled = true,\n onTextChange,\n composerRef,\n}: PromptComposerProps) {\n const localRef = useRef<TiptapComposerHandle>(null);\n const handleRef = composerRef ?? localRef;\n const models = useChatModels();\n\n useEffect(() => {\n if (!autoFocus) return;\n const id = window.setTimeout(() => {\n const target =\n typeof handleRef === \"object\" && handleRef && \"current\" in handleRef\n ? handleRef.current\n : null;\n target?.focus();\n }, 50);\n return () => window.clearTimeout(id);\n }, [autoFocus, handleRef]);\n\n const handleSubmit = useCallback(\n async (\n text: string,\n references: Reference[],\n attachments?: ReadonlyArray<unknown>,\n ) => {\n // PromptComposer hosts (NewWorkspaceAppFlow, create-extension, create-deck,\n // …) submit a single string prompt — they don't run the assistant-ui\n // attachment send pipeline. TiptapComposer auto-converts large pastes\n // into a \"Pasted text\" chip, which would otherwise disappear into an\n // unprocessed File. Inline the chip body back into the prompt text so\n // newlines and full content survive the round-trip.\n const files: File[] = [];\n const pastedTextBlocks: string[] = [];\n for (const att of attachments ?? []) {\n const a = att as Attachment;\n if (\"file\" in a && a.file instanceof File) {\n const file = a.file;\n if (isPastedTextAttachmentName(file.name)) {\n try {\n pastedTextBlocks.push(await file.text());\n } catch {\n // If we can't read it, fall back to surfacing it as a regular\n // attachment file rather than silently losing it.\n files.push(file);\n }\n } else {\n if (isInlineableTextFile(file)) {\n try {\n pastedTextBlocks.push(\n formatInlineTextFile(file.name, await file.text()),\n );\n } catch {\n // Keep the upload path fallback below.\n }\n }\n files.push(file);\n }\n }\n }\n const finalText = pastedTextBlocks.length\n ? [text.trim(), ...pastedTextBlocks].filter(Boolean).join(\"\\n\\n\")\n : text;\n onSubmit(finalText, files, references, {\n model: showModelSelector ? models.selectedModel : undefined,\n engine: showModelSelector ? models.selectedEngine : undefined,\n effort: showModelSelector ? models.selectedEffort : undefined,\n });\n },\n [\n models.selectedEffort,\n models.selectedEngine,\n models.selectedModel,\n onSubmit,\n showModelSelector,\n ],\n );\n\n return (\n <div\n className={cn(\n \"agent-composer-area flex flex-col rounded-lg border border-input bg-background focus-within:ring-1 focus-within:ring-ring\",\n className,\n )}\n >\n <ComposerPrimitive.Root className=\"flex flex-col\">\n <PromptAttachmentStrip />\n <TiptapComposer\n focusRef={handleRef}\n disabled={disabled}\n placeholder={placeholder}\n onSubmit={handleSubmit}\n clearOnSubmit={!preserveDraftOnSubmit}\n plusMenuMode={attachmentsEnabled ? \"upload-only\" : \"hidden\"}\n voiceEnabled={voiceEnabled}\n onTextChange={onTextChange}\n draftScope={draftScope}\n selectedModel={showModelSelector ? models.selectedModel : undefined}\n selectedEffort={showModelSelector ? models.selectedEffort : undefined}\n availableModels={\n showModelSelector ? models.availableModels : undefined\n }\n onModelChange={showModelSelector ? models.onModelChange : undefined}\n onEffortChange={showModelSelector ? models.onEffortChange : undefined}\n />\n </ComposerPrimitive.Root>\n </div>\n );\n}\n\n/**\n * Standalone composer that mirrors the agent sidebar's input experience —\n * voice dictation, file upload, model selector, submit-on-Enter — for use in\n * popovers and inline prompt forms (create tool, create deck, create dashboard,\n * the Dispatch new-app flow, etc.).\n *\n * The host owns submission: when the user presses Enter or clicks submit,\n * `onSubmit(text, files, references, options)` is called. PromptComposer runs\n * its own minimal assistant-ui runtime so it can be dropped into any subtree\n * without needing the outer chat to be mounted.\n */\nexport function PromptComposer(props: PromptComposerProps) {\n const attachmentAdapter = useMemo(\n () =>\n new CompositeAttachmentAdapter([\n new SimpleImageAttachmentAdapter(),\n new BinaryDocumentAttachmentAdapter(),\n new SimpleTextAttachmentAdapter(),\n ]),\n [],\n );\n const runtime = useLocalRuntime(NOOP_ADAPTER, {\n adapters: { attachments: attachmentAdapter },\n });\n\n return (\n <AssistantRuntimeProvider runtime={runtime}>\n <ThreadPrimitive.Root className=\"contents\">\n <PromptComposerInner {...props} />\n </ThreadPrimitive.Root>\n </AssistantRuntimeProvider>\n );\n}\n"]}
@@ -4,6 +4,11 @@ import { type ReasoningEffort } from "../../shared/reasoning-effort.js";
4
4
  export interface TiptapComposerHandle {
5
5
  focus(): void;
6
6
  }
7
+ export declare function canSubmitComposerContent(options: {
8
+ hasEditorContent: boolean;
9
+ attachmentCount: number;
10
+ disabled?: boolean;
11
+ }): boolean;
7
12
  type ExecMode = "build" | "plan";
8
13
  interface TiptapComposerProps {
9
14
  placeholder?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"TiptapComposer.d.ts","sourceRoot":"","sources":["../../../src/client/composer/TiptapComposer.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TiptapComposer.d.ts","sourceRoot":"","sources":["../../../src/client/composer/TiptapComposer.tsx"],"names":[],"mappings":"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"}
@@ -22,6 +22,10 @@ import { getComposerDraftKey } from "./draft-key.js";
22
22
  import { createPastedTextFile, shouldConvertPasteToAttachment, } from "./pasted-text.js";
23
23
  import { getReasoningEffortOptionsForModel, reasoningEffortLabel, } from "../../shared/reasoning-effort.js";
24
24
  import { Tooltip, TooltipContent, TooltipTrigger, } from "../components/ui/tooltip.js";
25
+ export function canSubmitComposerContent(options) {
26
+ return (!options.disabled &&
27
+ (options.hasEditorContent || options.attachmentCount > 0));
28
+ }
25
29
  const BUILT_IN_COMMANDS = [
26
30
  { name: "clear", description: "Start a new chat", icon: "clear" },
27
31
  { name: "new", description: "Start a new chat", icon: "new" },
@@ -311,7 +315,12 @@ export function TiptapComposer({ placeholder = "Message agent...", disabled = fa
311
315
  const composerRuntime = useComposerRuntime();
312
316
  const [editorHasText, setEditorHasText] = useState(false);
313
317
  const composerText = useComposer((state) => state.text);
314
- const canSend = editorHasText && !disabled;
318
+ const composerAttachments = useComposer((state) => state.attachments);
319
+ const canSend = canSubmitComposerContent({
320
+ hasEditorContent: editorHasText,
321
+ attachmentCount: composerAttachments.length,
322
+ disabled,
323
+ });
315
324
  const [composerMode, setComposerMode] = useState(null);
316
325
  const composerModeRef = useRef(null);
317
326
  const isMac = typeof navigator !== "undefined" &&