@axiom-lattice/react-sdk 4.3.0 → 4.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{AgentDetailSideApp-TI7723CK.mjs → AgentDetailSideApp-RW6B3BGT.mjs} +7 -7
- package/dist/AgentGovernanceWorkbench-OXGHJNFL.mjs +19 -0
- package/dist/{MessageGraph-ES3P4VLY.mjs → MessageGraph-BVP2M3TM.mjs} +3 -3
- package/dist/{ReactChart-6AYFMCMD.mjs → ReactChart-3XHMWXL6.mjs} +3 -3
- package/dist/{TasksSideApp-7R42CIFG.mjs → TasksSideApp-MLG7XUQA.mjs} +4 -4
- package/dist/{TeamWorkspace-JQ762PEX.mjs → TeamWorkspace-IENL2T4X.mjs} +3 -3
- package/dist/{TopologyRuntimeView-OJ35YYVM.mjs → TopologyRuntimeView-B5TVUTAB.mjs} +4 -4
- package/dist/{WorkflowAutomationView-3AS77NKN.mjs → WorkflowAutomationView-ZKTUYMPU.mjs} +6 -6
- package/dist/{chunk-4FI66ZJ3.mjs → chunk-2NCNDHTI.mjs} +2 -2
- package/dist/{chunk-ENLK3ODS.mjs → chunk-3JNBTKKB.mjs} +2 -2
- package/dist/{chunk-2ZK7AUQW.mjs → chunk-ADZRYRP6.mjs} +9 -5
- package/dist/chunk-ADZRYRP6.mjs.map +1 -0
- package/dist/{chunk-4SVLWYLW.mjs → chunk-AJLGOGUB.mjs} +2 -2
- package/dist/{chunk-NSGSGYM7.mjs → chunk-HLVE2SB7.mjs} +48 -1
- package/dist/chunk-HLVE2SB7.mjs.map +1 -0
- package/dist/{chunk-YUV4WO25.mjs → chunk-N5VEHSQU.mjs} +160 -69
- package/dist/chunk-N5VEHSQU.mjs.map +1 -0
- package/dist/{chunk-3NR7UAPT.mjs → chunk-ORTSDZD4.mjs} +26 -44
- package/dist/chunk-ORTSDZD4.mjs.map +1 -0
- package/dist/{chunk-DBTFQUSQ.mjs → chunk-XE2ZIE2L.mjs} +4 -4
- package/dist/{embed-page-AgentDetailSideApp-PSRQVFNR.js → embed-page-AgentDetailSideApp-2BDEWFQ6.js} +1 -1
- package/dist/embed-page-AgentGovernanceWorkbench-WG7E3G5T.js +5 -0
- package/dist/{embed-page-MessageGraph-PDNQ67T4.js → embed-page-MessageGraph-5SWPEQ4V.js} +1 -1
- package/dist/{embed-page-ReactChart-25KAFLQ3.js → embed-page-ReactChart-ZYWRXIMC.js} +1 -1
- package/dist/{embed-page-TasksSideApp-DLH5LRMS.js → embed-page-TasksSideApp-X6255GEF.js} +1 -1
- package/dist/{embed-page-TeamWorkspace-2WJJWF25.js → embed-page-TeamWorkspace-XNZM7AV7.js} +1 -1
- package/dist/{embed-page-TopologyRuntimeView-WDQRHDMO.js → embed-page-TopologyRuntimeView-DGSHSTIU.js} +1 -1
- package/dist/{embed-page-WorkflowAutomationView-BAMJ2WVB.js → embed-page-WorkflowAutomationView-BHIRIWV3.js} +1 -1
- package/dist/embed-page-chunk-DEDTYRZE.js +245 -0
- package/dist/{embed-page-chunk-XVUA7UHE.js → embed-page-chunk-HEO7X7LH.js} +1 -1
- package/dist/{embed-page-chunk-TL2AYM76.js → embed-page-chunk-JMZ7OODN.js} +1 -1
- package/dist/{embed-page-chunk-OBM5EUWZ.js → embed-page-chunk-SPC4BYNU.js} +192 -192
- package/dist/{embed-page-chunk-LOXLXZNP.js → embed-page-chunk-XUXEGF3S.js} +1 -1
- package/dist/{embed-page-chunk-MQDYZS3S.js → embed-page-chunk-YCX5YZRP.js} +1 -1
- package/dist/embed-page.js +1 -1
- package/dist/index.d.mts +27 -1
- package/dist/index.d.ts +27 -1
- package/dist/index.js +2029 -1890
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +13 -8
- package/dist/index.mjs.map +1 -1
- package/dist/web-app.js +48 -3
- package/dist/web-app.js.map +1 -1
- package/dist/web-app.mjs +5 -4
- package/dist/web-app.mjs.map +1 -1
- package/package.json +3 -3
- package/dist/AgentGovernanceWorkbench-2MPAB6UF.mjs +0 -19
- package/dist/chunk-2ZK7AUQW.mjs.map +0 -1
- package/dist/chunk-3NR7UAPT.mjs.map +0 -1
- package/dist/chunk-NSGSGYM7.mjs.map +0 -1
- package/dist/chunk-YUV4WO25.mjs.map +0 -1
- package/dist/embed-page-AgentGovernanceWorkbench-UPQHJZD7.js +0 -5
- package/dist/embed-page-chunk-SSC7ANWV.js +0 -245
- /package/dist/{AgentDetailSideApp-TI7723CK.mjs.map → AgentDetailSideApp-RW6B3BGT.mjs.map} +0 -0
- /package/dist/{AgentGovernanceWorkbench-2MPAB6UF.mjs.map → AgentGovernanceWorkbench-OXGHJNFL.mjs.map} +0 -0
- /package/dist/{MessageGraph-ES3P4VLY.mjs.map → MessageGraph-BVP2M3TM.mjs.map} +0 -0
- /package/dist/{ReactChart-6AYFMCMD.mjs.map → ReactChart-3XHMWXL6.mjs.map} +0 -0
- /package/dist/{TasksSideApp-7R42CIFG.mjs.map → TasksSideApp-MLG7XUQA.mjs.map} +0 -0
- /package/dist/{TeamWorkspace-JQ762PEX.mjs.map → TeamWorkspace-IENL2T4X.mjs.map} +0 -0
- /package/dist/{TopologyRuntimeView-OJ35YYVM.mjs.map → TopologyRuntimeView-B5TVUTAB.mjs.map} +0 -0
- /package/dist/{WorkflowAutomationView-3AS77NKN.mjs.map → WorkflowAutomationView-ZKTUYMPU.mjs.map} +0 -0
- /package/dist/{chunk-4FI66ZJ3.mjs.map → chunk-2NCNDHTI.mjs.map} +0 -0
- /package/dist/{chunk-ENLK3ODS.mjs.map → chunk-3JNBTKKB.mjs.map} +0 -0
- /package/dist/{chunk-4SVLWYLW.mjs.map → chunk-AJLGOGUB.mjs.map} +0 -0
- /package/dist/{chunk-DBTFQUSQ.mjs.map → chunk-XE2ZIE2L.mjs.map} +0 -0
package/dist/web-app.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/integrations/web-app/index.ts","../src/integrations/web-app/AgentWebAppProvider.tsx","../src/integrations/web-app/AgentWebAppContext.ts","../src/integrations/web-app/error.ts","../src/integrations/web-app/sse-parser.ts","../src/integrations/web-app/client.ts","../src/integrations/web-app/state/agentWebAppReducer.ts","../src/integrations/web-app/hooks/useAgentWebApp.ts","../src/integrations/web-app/hooks/useWidgetAttachments.ts","../src/integrations/web-app/hooks/useWidgetChat.ts","../src/integrations/web-app/hooks/useWidgetInterrupts.ts","../src/integrations/web-app/hooks/useWidgetProject.ts","../src/integrations/web-app/hooks/useWidgetThreads.ts","../src/integrations/web-app/components/WidgetAttachments.tsx","../src/integrations/web-app/components/widget-utils.ts","../src/integrations/web-app/components/WidgetComposer.tsx","../src/components/shared/useReviewDecision.ts","../src/integrations/web-app/components/WidgetInterruptView.tsx","../src/integrations/web-app/components/WidgetInterrupt.tsx","../../../node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs","../../../node_modules/.pnpm/@ant-design+x-markdown@2.3.0_@types+react@18.3.24_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@ant-design/x-markdown/es/XMarkdown/index.js","../../../node_modules/.pnpm/@ant-design+x-markdown@2.3.0_@types+react@18.3.24_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@ant-design/x-markdown/es/XMarkdown/core/Parser.js","../../../node_modules/.pnpm/@ant-design+x-markdown@2.3.0_@types+react@18.3.24_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@ant-design/x-markdown/es/XMarkdown/core/Renderer.js","../../../node_modules/.pnpm/@ant-design+x-markdown@2.3.0_@types+react@18.3.24_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@ant-design/x-markdown/es/XMarkdown/AnimationText.js","../../../node_modules/.pnpm/@ant-design+x-markdown@2.3.0_@types+react@18.3.24_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@ant-design/x-markdown/es/XMarkdown/DebugPanel/DebugPanel.js","../../../node_modules/.pnpm/@ant-design+x-markdown@2.3.0_@types+react@18.3.24_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@ant-design/x-markdown/es/XMarkdown/hooks/useStreaming.js","../../../node_modules/.pnpm/@ant-design+x-markdown@2.3.0_@types+react@18.3.24_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@ant-design/x-markdown/es/XMarkdown/interface.js","../src/integrations/web-app/components/WidgetMarkdown.tsx","../src/integrations/web-app/components/WidgetGenUIRenderer.tsx","../src/integrations/web-app/components/WidgetMessageList.tsx","../src/integrations/web-app/components/WidgetModelSelector.tsx","../src/integrations/web-app/components/WidgetProjectSelector.tsx","../src/integrations/web-app/components/WidgetThreadList.tsx"],"sourcesContent":["// `.axiom-web-app` style namespace for the Widget* components; importing here\n// keeps it on the entry so `dist/web-app.css` still ships it.\nimport \"./components/agent-widget.css\";\nexport { AgentWebAppProvider } from \"./AgentWebAppProvider\";\nexport type { AgentWebAppIdentity, AgentWebAppProviderProps } from \"./AgentWebAppProvider\";\nexport { AgentWebAppRuntimeClientError } from \"./error\";\nexport { useAgentWebApp } from \"./hooks/useAgentWebApp\";\nexport { useWidgetAttachments } from \"./hooks/useWidgetAttachments\";\nexport { useWidgetChat } from \"./hooks/useWidgetChat\";\nexport { useWidgetInterrupts } from \"./hooks/useWidgetInterrupts\";\nexport { useWidgetProject } from \"./hooks/useWidgetProject\";\nexport { useWidgetThreads } from \"./hooks/useWidgetThreads\";\nexport { WidgetAttachments } from \"./components/WidgetAttachments\";\nexport type { WidgetAttachmentsProps } from \"./components/WidgetAttachments\";\nexport { WidgetComposer } from \"./components/WidgetComposer\";\nexport type { WidgetComposerProps } from \"./components/WidgetComposer\";\nexport { WidgetInterrupt } from \"./components/WidgetInterrupt\";\nexport type { WidgetInterruptProps } from \"./components/WidgetInterrupt\";\nexport { WidgetMarkdown } from \"./components/WidgetMarkdown\";\nexport type { WidgetMarkdownProps } from \"./components/WidgetMarkdown\";\nexport { WidgetMessageList } from \"./components/WidgetMessageList\";\nexport type { WidgetMessageListProps } from \"./components/WidgetMessageList\";\nexport { WidgetModelSelector } from \"./components/WidgetModelSelector\";\nexport type { WidgetModelSelectorProps } from \"./components/WidgetModelSelector\";\nexport { WidgetProjectSelector } from \"./components/WidgetProjectSelector\";\nexport type { WidgetProjectSelectorProps } from \"./components/WidgetProjectSelector\";\nexport { WidgetThreadList } from \"./components/WidgetThreadList\";\nexport type { WidgetThreadListProps } from \"./components/WidgetThreadList\";\nexport type {\n AgentWebAppAttachment,\n AgentWebAppBootstrap,\n AgentWebAppError,\n AgentWebAppErrorCode,\n AgentWebAppInterrupt,\n AgentWebAppInterruptResponse,\n AgentWebAppRuntimeMessage,\n AgentWebAppRuntimeThread,\n AgentWebAppStreamEvent,\n Message,\n} from \"./types\";\n","import React, { useCallback, useEffect, useReducer, useRef } from \"react\";\nimport { AgentWebAppContext, featureDisabled } from \"./AgentWebAppContext\";\nimport { AgentWebAppRuntimeClient } from \"./client\";\nimport { AgentWebAppRuntimeClientError } from \"./error\";\nimport { agentWebAppReducer, initialAgentWebAppState } from \"./state/agentWebAppReducer\";\nimport type {\n AgentWebAppBootstrap,\n AgentWebAppInterruptResponse,\n AgentWebAppRuntimeThread,\n AgentWebAppStreamEvent,\n} from \"./types\";\n\nexport type AgentWebAppIdentity =\n | { mode: \"unverified\"; userId: string; displayName?: string }\n | { mode: \"verified\"; tokenProvider: () => Promise<string> };\n\nexport interface AgentWebAppProviderProps {\n gatewayUrl: string;\n webAppId: string;\n identity: AgentWebAppIdentity;\n children: React.ReactNode;\n onError?: (error: AgentWebAppRuntimeClientError) => void;\n fetch?: typeof globalThis.fetch;\n}\n\nfunction validateProps(props: AgentWebAppProviderProps): void {\n if (!props.gatewayUrl.trim()) throw new Error(\"AgentWebAppProvider requires gatewayUrl\");\n try { new URL(props.gatewayUrl); } catch { throw new Error(\"AgentWebAppProvider gatewayUrl must be a valid URL\"); }\n if (props.identity.mode === \"unverified\") {\n if (!props.identity.userId.trim()) throw new Error(\"AgentWebAppProvider requires identity.userId\");\n } else if (typeof props.identity.tokenProvider !== \"function\") {\n throw new Error(\"AgentWebAppProvider requires identity.tokenProvider\");\n }\n if (!props.fetch && typeof globalThis.fetch !== \"function\") throw new Error(\"AgentWebAppProvider requires a fetch implementation\");\n}\n\nfunction runtimeError(error: unknown): AgentWebAppRuntimeClientError {\n if (error instanceof AgentWebAppRuntimeClientError) return error;\n return new AgentWebAppRuntimeClientError(\"INTERNAL_ERROR\", \"Request failed\", true);\n}\n\nfunction isAbortError(error: unknown): boolean {\n return typeof error === \"object\" && error !== null && \"name\" in error && error.name === \"AbortError\";\n}\n\nfunction newestThread(threads: AgentWebAppRuntimeThread[]): AgentWebAppRuntimeThread | null {\n return threads.reduce<AgentWebAppRuntimeThread | null>((latest, item) => !latest || item.updatedAt > latest.updatedAt ? item : latest, null);\n}\n\nfunction requestProjectId(bootstrap: AgentWebAppBootstrap | null, projectId: string | null | undefined): string | undefined {\n return bootstrap?.webApp.features.projectSelector ? projectId ?? undefined : undefined;\n}\n\nfunction requestModelKey(bootstrap: AgentWebAppBootstrap | null, modelKey: string | null | undefined): string | undefined {\n return bootstrap?.webApp.features.modelSelector ? modelKey ?? undefined : undefined;\n}\n\nexport function AgentWebAppProvider(props: AgentWebAppProviderProps): React.ReactElement {\n validateProps(props);\n const scopeKey = `${props.gatewayUrl}\\u0000${props.webAppId}\\u0000${props.identity.mode === \"unverified\" ? props.identity.userId : \"verified:token\"}`;\n return <ScopedAgentWebAppProvider key={scopeKey} {...props} />;\n}\n\nfunction ScopedAgentWebAppProvider({ gatewayUrl, webAppId, identity, children, onError, fetch: fetchImplementation }: AgentWebAppProviderProps): React.ReactElement {\n const [state, dispatch] = useReducer(agentWebAppReducer, initialAgentWebAppState);\n const stateRef = useRef(state);\n stateRef.current = state;\n const generationRef = useRef(0);\n const threadGenerationRef = useRef(0);\n const streamGenerationRef = useRef(0);\n const controllersRef = useRef(new Set<AbortController>());\n const threadControllersRef = useRef(new Set<AbortController>());\n const streamRef = useRef<{ controller: AbortController; threadId: string; projectId?: string } | null>(null);\n const errorNotifiedRef = useRef<AgentWebAppRuntimeClientError | null>(null);\n const identityRef = useRef(identity);\n identityRef.current = identity;\n const clientRef = useRef<AgentWebAppRuntimeClient>();\n if (!clientRef.current) {\n clientRef.current = new AgentWebAppRuntimeClient({\n gatewayUrl,\n webAppId,\n identityProvider: {\n getIdentity: async () => {\n const current = identityRef.current;\n if (current.mode !== \"verified\") return { externalUserId: current.userId };\n try {\n return { bearerToken: await current.tokenProvider() };\n } catch {\n throw new AgentWebAppRuntimeClientError(\"USER_ID_REQUIRED\", \"Identity token provider failed\", true);\n }\n },\n },\n ...(fetchImplementation ? { fetch: fetchImplementation } : {}),\n });\n }\n const client = clientRef.current;\n\n const controlled = useCallback(async <T,>(operation: (signal: AbortSignal) => Promise<T>): Promise<T> => {\n const controller = new AbortController();\n controllersRef.current.add(controller);\n try { return await operation(controller.signal); }\n finally { controllersRef.current.delete(controller); }\n }, []);\n\n const threadControlled = useCallback(async <T,>(operation: (signal: AbortSignal) => Promise<T>): Promise<T> => {\n const controller = new AbortController();\n threadControllersRef.current.add(controller);\n try { return await operation(controller.signal); }\n finally { threadControllersRef.current.delete(controller); }\n }, []);\n\n const invalidateThreadWork = useCallback((): number => {\n const generation = ++threadGenerationRef.current;\n for (const controller of threadControllersRef.current) controller.abort();\n threadControllersRef.current.clear();\n return generation;\n }, []);\n\n const report = useCallback((error: unknown): AgentWebAppRuntimeClientError => {\n const normalized = runtimeError(error);\n dispatch({ type: \"ERROR_SET\", error: normalized });\n return normalized;\n }, []);\n\n const stopActiveStream = useCallback(async ({ abortBackend }: { abortBackend: boolean }): Promise<void> => {\n const active = streamRef.current;\n if (!active) return;\n streamGenerationRef.current += 1;\n streamRef.current = null;\n active.controller.abort();\n dispatch({ type: \"STREAM_SET\", streaming: false, assistantMessageId: null });\n if (abortBackend) await client.abort(active.threadId, active.projectId ? { projectId: active.projectId } : {});\n }, [client]);\n\n const loadMessages = useCallback(async (thread: AgentWebAppRuntimeThread, generation = generationRef.current, threadGeneration = threadGenerationRef.current, bootstrap = stateRef.current.bootstrap): Promise<void> => {\n dispatch({ type: \"MESSAGES_LOADING\", loading: true });\n try {\n const projectId = requestProjectId(bootstrap, thread.projectId);\n const result = await threadControlled((signal) => client.getMessages(thread.id, projectId ? { projectId } : {}, signal));\n if (generation === generationRef.current && threadGeneration === threadGenerationRef.current) dispatch({ type: \"MESSAGES_SET\", messages: result.messages });\n } catch (error) {\n if (!isAbortError(error) && generation === generationRef.current && threadGeneration === threadGenerationRef.current) report(error);\n } finally {\n if (generation === generationRef.current && threadGeneration === threadGenerationRef.current) dispatch({ type: \"MESSAGES_LOADING\", loading: false });\n }\n }, [client, report, threadControlled]);\n\n const loadManagedThreads = useCallback(async (projectId: string, generation = generationRef.current, threadGeneration = threadGenerationRef.current, bootstrap = stateRef.current.bootstrap): Promise<void> => {\n dispatch({ type: \"THREADS_LOADING\", loading: true });\n try {\n const selectedProjectId = requestProjectId(bootstrap, projectId);\n const result = await threadControlled((signal) => client.listThreads(selectedProjectId ? { projectId: selectedProjectId } : {}, signal));\n if (generation !== generationRef.current || threadGeneration !== threadGenerationRef.current) return;\n const latest = newestThread(result.records);\n if (streamRef.current && latest?.id !== stateRef.current.activeThread?.id) await stopActiveStream({ abortBackend: true });\n if (generation !== generationRef.current || threadGeneration !== threadGenerationRef.current) return;\n dispatch({ type: \"THREADS_SET\", threads: result.records });\n const currentActive = stateRef.current.activeThread;\n if (latest && latest.id === currentActive?.id) {\n dispatch({ type: \"ACTIVE_THREAD_UPDATED\", thread: latest });\n } else {\n threadGeneration = invalidateThreadWork();\n dispatch({ type: \"ACTIVE_THREAD_SET\", thread: latest });\n if (latest) await loadMessages(latest, generation, threadGeneration, bootstrap);\n }\n } catch (error) {\n if (!isAbortError(error) && generation === generationRef.current && threadGeneration === threadGenerationRef.current) report(error);\n } finally {\n if (generation === generationRef.current && threadGeneration === threadGenerationRef.current) dispatch({ type: \"THREADS_LOADING\", loading: false });\n }\n }, [client, invalidateThreadWork, loadMessages, report, stopActiveStream, threadControlled]);\n\n const bootstrapRuntime = useCallback(async (): Promise<void> => {\n try { await stopActiveStream({ abortBackend: true }); }\n catch (error) { if (!isAbortError(error)) report(error); }\n const generation = ++generationRef.current;\n for (const controller of controllersRef.current) controller.abort();\n controllersRef.current.clear();\n invalidateThreadWork();\n dispatch({ type: \"BOOTSTRAP_LOADING\" });\n try {\n const result = await controlled((signal) => client.bootstrap({}, signal));\n if (generation !== generationRef.current) return;\n const projectId = result.webApp.defaultProjectId;\n const modelKey = result.webApp.defaultModelKey ?? result.models[0]?.key ?? null;\n dispatch({ type: \"BOOTSTRAP_READY\", bootstrap: result, projectId, modelKey });\n if (result.webApp.features.threadManagement) {\n await loadManagedThreads(projectId, generation, threadGenerationRef.current, result);\n } else {\n const implicit = result.thread ?? null;\n dispatch({ type: \"THREADS_SET\", threads: implicit ? [implicit] : [] });\n dispatch({ type: \"ACTIVE_THREAD_SET\", thread: implicit });\n if (implicit) await loadMessages(implicit, generation, threadGenerationRef.current, result);\n }\n } catch (error) {\n if (!isAbortError(error) && generation === generationRef.current) report(error);\n } finally {\n if (generation === generationRef.current) dispatch({ type: \"BOOTSTRAP_SETTLED\" });\n }\n }, [client, controlled, invalidateThreadWork, loadManagedThreads, loadMessages, report, stopActiveStream]);\n\n useEffect(() => {\n void bootstrapRuntime();\n return () => {\n generationRef.current += 1;\n for (const controller of controllersRef.current) controller.abort();\n controllersRef.current.clear();\n invalidateThreadWork();\n void stopActiveStream({ abortBackend: true }).catch(() => undefined);\n };\n }, [bootstrapRuntime, invalidateThreadWork, stopActiveStream]);\n\n useEffect(() => {\n const error = state.errors.current;\n if (error && error !== errorNotifiedRef.current) {\n errorNotifiedRef.current = error;\n onError?.(error);\n }\n }, [onError, state.errors.current]);\n\n const abort = useCallback(async (): Promise<void> => {\n try { await stopActiveStream({ abortBackend: true }); }\n catch (error) { if (!isAbortError(error)) throw report(error); }\n }, [report, stopActiveStream]);\n\n const selectProject = useCallback(async (projectId: string): Promise<void> => {\n const current = stateRef.current;\n const bootstrap = current.bootstrap;\n if (!bootstrap) throw report(new AgentWebAppRuntimeClientError(\"INVALID_REQUEST\", \"Web App is not ready\", true));\n if (!bootstrap.webApp.features.projectSelector) throw featureDisabled(\"Project selection is disabled\");\n if (!bootstrap.projects.some((project) => project.id === projectId)) throw report(new AgentWebAppRuntimeClientError(\"PROJECT_NOT_ALLOWED\", \"Project is not allowed\", false));\n if (projectId === current.projectId) return;\n try { await stopActiveStream({ abortBackend: true }); }\n catch (error) { if (!isAbortError(error)) throw report(error); }\n const generation = generationRef.current;\n const threadGeneration = invalidateThreadWork();\n dispatch({ type: \"PROJECT_SELECTED\", projectId });\n if (bootstrap.webApp.features.threadManagement) await loadManagedThreads(projectId, generation, threadGeneration, bootstrap);\n else {\n const selectedProjectId = requestProjectId(bootstrap, projectId);\n const selectedModelKey = requestModelKey(bootstrap, current.modelKey);\n const result = await threadControlled((signal) => client.bootstrap({ ...(selectedProjectId ? { projectId: selectedProjectId } : {}), ...(selectedModelKey ? { modelKey: selectedModelKey } : {}) }, signal));\n if (generation !== generationRef.current || threadGeneration !== threadGenerationRef.current) return;\n const implicit = result.thread ?? null;\n dispatch({ type: \"THREADS_SET\", threads: implicit ? [implicit] : [] });\n dispatch({ type: \"ACTIVE_THREAD_SET\", thread: implicit });\n if (implicit) await loadMessages(implicit, generation, threadGeneration, result);\n }\n }, [client, invalidateThreadWork, loadManagedThreads, loadMessages, report, stopActiveStream, threadControlled]);\n\n const selectModel = useCallback((modelKey: string): void => {\n const bootstrap = stateRef.current.bootstrap;\n if (!bootstrap) throw report(new AgentWebAppRuntimeClientError(\"INVALID_REQUEST\", \"Web App is not ready\", true));\n if (!bootstrap.webApp.features.modelSelector) throw featureDisabled(\"Model selection is disabled\");\n if (!bootstrap.models.some((model) => model.key === modelKey)) throw report(new AgentWebAppRuntimeClientError(\"MODEL_NOT_ALLOWED\", \"Model is not allowed\", false));\n dispatch({ type: \"MODEL_SELECTED\", modelKey });\n }, [report]);\n\n const requireThreadManagement = useCallback((): void => {\n if (!stateRef.current.bootstrap?.webApp.features.threadManagement) throw featureDisabled(\"Thread management is disabled\");\n }, []);\n\n const refreshThreads = useCallback(async (): Promise<void> => {\n requireThreadManagement();\n const projectId = stateRef.current.projectId;\n if (projectId) await loadManagedThreads(projectId, generationRef.current, threadGenerationRef.current, stateRef.current.bootstrap);\n }, [loadManagedThreads, requireThreadManagement]);\n\n const selectThread = useCallback(async (thread: AgentWebAppRuntimeThread): Promise<void> => {\n if (thread.projectId !== stateRef.current.projectId) throw report(new AgentWebAppRuntimeClientError(\"PROJECT_NOT_ALLOWED\", \"Thread belongs to another project\", false));\n try { await stopActiveStream({ abortBackend: true }); }\n catch (error) { if (!isAbortError(error)) throw report(error); }\n const generation = generationRef.current;\n const threadGeneration = invalidateThreadWork();\n dispatch({ type: \"ACTIVE_THREAD_SET\", thread });\n await loadMessages(thread, generation, threadGeneration, stateRef.current.bootstrap);\n }, [invalidateThreadWork, loadMessages, report, stopActiveStream]);\n\n const createThread = useCallback(async (label?: string): Promise<AgentWebAppRuntimeThread> => {\n requireThreadManagement();\n try { await stopActiveStream({ abortBackend: true }); }\n catch (error) { if (!isAbortError(error)) throw report(error); }\n const threadGeneration = invalidateThreadWork();\n const generation = generationRef.current;\n const projectId = stateRef.current.projectId;\n const selectedProjectId = requestProjectId(stateRef.current.bootstrap, projectId);\n const created = await threadControlled((signal) => client.createThread({ ...(selectedProjectId ? { projectId: selectedProjectId } : {}), ...(label ? { label } : {}) }, signal));\n if (generation !== generationRef.current || threadGeneration !== threadGenerationRef.current) return created;\n dispatch({ type: \"THREAD_UPSERT\", thread: created });\n dispatch({ type: \"ACTIVE_THREAD_SET\", thread: created });\n return created;\n }, [client, invalidateThreadWork, report, requireThreadManagement, stopActiveStream, threadControlled]);\n\n const renameThread = useCallback(async (threadId: string, label: string): Promise<AgentWebAppRuntimeThread> => {\n requireThreadManagement();\n try { await stopActiveStream({ abortBackend: true }); }\n catch (error) { if (!isAbortError(error)) throw report(error); }\n const generation = generationRef.current;\n const threadGeneration = threadGenerationRef.current;\n const existing = stateRef.current.threads.find((item) => item.id === threadId);\n if (!existing) throw report(new AgentWebAppRuntimeClientError(\"THREAD_NOT_FOUND\", \"Thread not found\", false));\n const projectId = requestProjectId(stateRef.current.bootstrap, existing.projectId);\n const updated = await threadControlled((signal) => client.updateThread(threadId, { ...(projectId ? { projectId } : {}), label }, signal));\n if (generation !== generationRef.current || threadGeneration !== threadGenerationRef.current) return updated;\n dispatch({ type: \"THREAD_UPSERT\", thread: updated });\n return updated;\n }, [client, report, requireThreadManagement, threadControlled]);\n\n const deleteThread = useCallback(async (threadId: string): Promise<void> => {\n requireThreadManagement();\n const existing = stateRef.current.threads.find((item) => item.id === threadId);\n if (!existing) throw report(new AgentWebAppRuntimeClientError(\"THREAD_NOT_FOUND\", \"Thread not found\", false));\n if (stateRef.current.activeThread?.id === threadId) {\n try { await stopActiveStream({ abortBackend: true }); }\n catch (error) { if (!isAbortError(error)) throw report(error); }\n invalidateThreadWork();\n }\n const generation = generationRef.current;\n const threadGeneration = threadGenerationRef.current;\n const projectId = requestProjectId(stateRef.current.bootstrap, existing.projectId);\n await threadControlled((signal) => client.deleteThread(threadId, projectId ? { projectId } : {}, signal));\n if (generation !== generationRef.current || threadGeneration !== threadGenerationRef.current) return;\n dispatch({ type: \"THREAD_DELETED\", threadId });\n const remaining = stateRef.current.threads.filter((item) => item.id !== threadId);\n const next = newestThread(remaining);\n if (stateRef.current.activeThread?.id === threadId && next) {\n dispatch({ type: \"ACTIVE_THREAD_SET\", thread: next });\n await loadMessages(next);\n }\n }, [client, invalidateThreadWork, loadMessages, report, requireThreadManagement, stopActiveStream, threadControlled]);\n\n const handleStreamEvent = useCallback((event: AgentWebAppStreamEvent, assistantId: string, generation: number, streamGeneration: number): void => {\n if (generation !== generationRef.current || streamGeneration !== streamGenerationRef.current) return;\n switch (event.type) {\n case \"message.delta\": dispatch({ type: \"ASSISTANT_DELTA\", id: assistantId, text: event.text }); break;\n case \"message.completed\": dispatch({ type: \"ASSISTANT_COMPLETED\", temporaryId: assistantId, messageId: event.messageId }); break;\n case \"tool.started\": dispatch({ type: \"TOOL_STARTED\", id: event.id, name: event.name }); break;\n case \"tool.completed\": dispatch({ type: \"TOOL_COMPLETED\", id: event.id }); break;\n case \"interrupt.created\": if (stateRef.current.bootstrap?.webApp.features.hitl) dispatch({ type: \"INTERRUPT_ADD\", interrupt: event.interrupt }); break;\n case \"genui.render\": if (stateRef.current.bootstrap?.webApp.features.genUI) dispatch({ type: \"ASSISTANT_GENUI\", id: assistantId, block: event.block }); break;\n case \"error\": break;\n case \"stream.completed\": break;\n }\n }, []);\n\n const consumePublicStream = useCallback(async (input: {\n threadId: string; projectId?: string; assistantId: string; generation: number; streamGeneration: number;\n run(onEvent: (event: AgentWebAppStreamEvent) => void, signal: AbortSignal): Promise<void>;\n }): Promise<string> => {\n const controller = new AbortController();\n let eventError: AgentWebAppRuntimeClientError | null = null;\n let currentAssistantId = input.assistantId;\n streamRef.current = { controller, threadId: input.threadId, ...(input.projectId ? { projectId: input.projectId } : {}) };\n dispatch({ type: \"STREAM_SET\", streaming: true, assistantMessageId: input.assistantId });\n try {\n await input.run((event) => {\n if (event.type === \"error\") {\n if (input.generation === generationRef.current && input.streamGeneration === streamGenerationRef.current) {\n eventError = new AgentWebAppRuntimeClientError(event.error.code, event.error.message, event.error.retryable);\n }\n return;\n }\n if (event.type === \"message.completed\") currentAssistantId = event.messageId;\n handleStreamEvent(event, input.assistantId, input.generation, input.streamGeneration);\n }, controller.signal);\n if (eventError) throw eventError;\n return currentAssistantId;\n } finally {\n if (streamRef.current?.controller === controller) streamRef.current = null;\n if (input.generation === generationRef.current && input.streamGeneration === streamGenerationRef.current) dispatch({ type: \"STREAM_SET\", streaming: false });\n }\n }, [handleStreamEvent]);\n\n const send = useCallback(async (content: string, attachmentRefs?: string[]): Promise<void> => {\n const current = stateRef.current;\n if (streamRef.current || current.stream.isStreaming) throw new AgentWebAppRuntimeClientError(\"STREAM_CONFLICT\", \"A message is already streaming\", false);\n if (!current.activeThread || !current.projectId) throw report(new AgentWebAppRuntimeClientError(\"THREAD_NOT_FOUND\", \"No active thread\", false));\n if (!content.trim()) throw report(new AgentWebAppRuntimeClientError(\"INVALID_REQUEST\", \"Message content is required\", false));\n const generation = generationRef.current;\n const streamGeneration = ++streamGenerationRef.current;\n const assistantId = `pending-assistant-${Date.now()}-${Math.random().toString(36).slice(2)}`;\n const userId = `pending-user-${Date.now()}-${Math.random().toString(36).slice(2)}`;\n const refs = attachmentRefs ?? current.attachments.map((attachment) => attachment.ref);\n const projectId = requestProjectId(current.bootstrap, current.projectId);\n const modelKey = requestModelKey(current.bootstrap, current.modelKey);\n let currentAssistantId = assistantId;\n dispatch({ type: \"MESSAGE_APPEND\", message: { id: userId, role: \"human\", content } });\n try {\n currentAssistantId = await consumePublicStream({\n threadId: current.activeThread.id, projectId, assistantId, generation, streamGeneration,\n run: (onEvent, signal) => client.streamMessage(current.activeThread!.id, {\n content,\n ...(projectId ? { projectId } : {}),\n ...(modelKey ? { modelKey } : {}),\n ...(refs.length ? { attachmentRefs: refs } : {}),\n }, onEvent, signal),\n });\n if (generation === generationRef.current && streamGeneration === streamGenerationRef.current) {\n dispatch({ type: \"ATTACHMENTS_REMOVE\", refs });\n dispatch({ type: \"FAILED_SEND_SET\", failedSend: null });\n }\n } catch (error) {\n if (generation === generationRef.current && streamGeneration === streamGenerationRef.current) {\n dispatch({ type: \"MESSAGES_REMOVE\", ids: [userId, assistantId, `${assistantId}-genui`, currentAssistantId, `${currentAssistantId}-genui`] });\n if (!isAbortError(error)) {\n dispatch({ type: \"FAILED_SEND_SET\", failedSend: { text: content, attachmentIds: refs } });\n throw report(error);\n }\n }\n }\n }, [client, consumePublicStream, report]);\n\n const sendMessage = useCallback(async (content: string): Promise<void> => send(content), [send]);\n\n const retryLastMessage = useCallback(async (): Promise<void> => {\n const failed = stateRef.current.lastFailedSend;\n if (!failed) throw report(new AgentWebAppRuntimeClientError(\"INVALID_REQUEST\", \"No failed message to retry\", false));\n await send(failed.text, failed.attachmentIds);\n }, [report, send]);\n\n const uploadAttachment = useCallback(async (file: Blob): Promise<void> => {\n const current = stateRef.current;\n const generation = generationRef.current;\n const threadGeneration = threadGenerationRef.current;\n if (!current.bootstrap?.webApp.features.attachments) throw featureDisabled(\"Attachments are disabled\");\n if (!current.activeThread) throw report(new AgentWebAppRuntimeClientError(\"THREAD_NOT_FOUND\", \"No active thread\", false));\n dispatch({ type: \"ATTACHMENTS_LOADING\", loading: true });\n try {\n const projectId = requestProjectId(current.bootstrap, current.activeThread.projectId);\n const attachment = await threadControlled((signal) => client.uploadAttachment(current.activeThread!.id, file, projectId ? { projectId } : {}, signal));\n if (generation === generationRef.current && threadGeneration === threadGenerationRef.current) dispatch({ type: \"ATTACHMENT_ADD\", attachment });\n } catch (error) {\n if (!isAbortError(error) && generation === generationRef.current && threadGeneration === threadGenerationRef.current) throw report(error);\n } finally { if (generation === generationRef.current && threadGeneration === threadGenerationRef.current) dispatch({ type: \"ATTACHMENTS_LOADING\", loading: false }); }\n }, [client, report, threadControlled]);\n\n const resumeInterrupt = useCallback(async (interruptId: string, response: AgentWebAppInterruptResponse, message: string): Promise<void> => {\n const current = stateRef.current;\n const generation = generationRef.current;\n const threadGeneration = threadGenerationRef.current;\n if (streamRef.current || current.stream.isStreaming) throw report(new AgentWebAppRuntimeClientError(\"STREAM_CONFLICT\", \"A message is already streaming\", false));\n if (!current.bootstrap?.webApp.features.hitl) throw featureDisabled(\"Human review is disabled\");\n if (!current.activeThread || !current.projectId) throw report(new AgentWebAppRuntimeClientError(\"THREAD_NOT_FOUND\", \"No active thread\", false));\n if (!current.interrupts.some((item) => item.id === interruptId)) throw report(new AgentWebAppRuntimeClientError(\"INVALID_REQUEST\", \"Interrupt not found\", false));\n const activeThread = current.activeThread;\n const projectId = requestProjectId(current.bootstrap, current.projectId);\n const modelKey = requestModelKey(current.bootstrap, current.modelKey);\n const streamGeneration = ++streamGenerationRef.current;\n const assistantId = `pending-assistant-${Date.now()}-${Math.random().toString(36).slice(2)}`;\n dispatch({ type: \"INTERRUPTS_LOADING\", loading: true });\n try {\n await consumePublicStream({\n threadId: activeThread.id, projectId, assistantId, generation, streamGeneration,\n run: (onEvent, signal) => client.resumeInterrupt(activeThread.id, interruptId, {\n ...(projectId ? { projectId } : {}),\n ...(modelKey ? { modelKey } : {}), message, response,\n }, onEvent, signal),\n });\n if (generation !== generationRef.current || threadGeneration !== threadGenerationRef.current) return;\n dispatch({ type: \"INTERRUPT_REMOVE\", interruptId });\n await loadMessages(activeThread, generation, threadGeneration);\n } catch (error) {\n if (generation === generationRef.current && threadGeneration === threadGenerationRef.current) {\n dispatch({ type: \"MESSAGES_REMOVE\", ids: [assistantId, `${assistantId}-genui`] });\n if (!isAbortError(error)) throw report(error);\n }\n } finally {\n if (generation === generationRef.current && threadGeneration === threadGenerationRef.current) dispatch({ type: \"INTERRUPTS_LOADING\", loading: false });\n }\n }, [client, consumePublicStream, loadMessages, report]);\n\n const value = {\n ...state,\n retry: bootstrapRuntime,\n selectProject,\n selectModel,\n refreshThreads,\n selectThread,\n createThread,\n renameThread,\n deleteThread,\n sendMessage,\n retryLastMessage,\n abort,\n uploadAttachment,\n removeAttachment: (ref: string) => dispatch({ type: \"ATTACHMENT_REMOVE\", ref }),\n clearAttachments: () => dispatch({ type: \"ATTACHMENTS_CLEAR\" }),\n resumeInterrupt,\n clearError: () => dispatch({ type: \"ERROR_SET\", error: null }),\n };\n return <AgentWebAppContext.Provider value={value}>{children}</AgentWebAppContext.Provider>;\n}\n","import { createContext } from \"react\";\nimport type { AgentWebAppInterruptResponse, AgentWebAppRuntimeThread } from \"./types\";\nimport { AgentWebAppRuntimeClientError } from \"./error\";\nimport type { AgentWebAppState } from \"./state/agentWebAppReducer\";\n\nexport interface AgentWebAppContextValue extends AgentWebAppState {\n retry(): Promise<void>;\n selectProject(projectId: string): Promise<void>;\n selectModel(modelKey: string): void;\n refreshThreads(): Promise<void>;\n selectThread(thread: AgentWebAppRuntimeThread): Promise<void>;\n createThread(label?: string): Promise<AgentWebAppRuntimeThread>;\n renameThread(threadId: string, label: string): Promise<AgentWebAppRuntimeThread>;\n deleteThread(threadId: string): Promise<void>;\n sendMessage(content: string): Promise<void>;\n retryLastMessage(): Promise<void>;\n abort(): Promise<void>;\n uploadAttachment(file: Blob): Promise<void>;\n removeAttachment(ref: string): void;\n clearAttachments(): void;\n resumeInterrupt(interruptId: string, response: AgentWebAppInterruptResponse, message: string): Promise<void>;\n clearError(): void;\n}\n\nexport const AgentWebAppContext = createContext<AgentWebAppContextValue | null>(null);\n\nexport function featureDisabled(message: string): AgentWebAppRuntimeClientError {\n return new AgentWebAppRuntimeClientError(\"FEATURE_DISABLED\", message, false, 403);\n}\n","import type { AgentWebAppErrorCode } from \"./types\";\n\nexport class AgentWebAppRuntimeClientError extends Error {\n readonly code: AgentWebAppErrorCode;\n readonly retryable: boolean;\n readonly status?: number;\n\n constructor(code: AgentWebAppErrorCode, message: string, retryable: boolean, status?: number) {\n super(message);\n this.name = \"AgentWebAppRuntimeClientError\";\n this.code = code;\n this.retryable = retryable;\n this.status = status;\n }\n}\n\nexport function streamFailed(): AgentWebAppRuntimeClientError {\n return new AgentWebAppRuntimeClientError(\"STREAM_FAILED\", \"Stream failed\", true);\n}\n","import { streamFailed } from \"./error\";\nimport {\n MessageChunkTypes,\n createAgentWebAppStreamProjectionContext,\n parseAgentWebAppGenUIBlock,\n projectAgentWebAppChunk,\n type AgentWebAppStreamProjectionContext,\n} from \"@axiom-lattice/protocols\";\nimport type {\n AgentWebAppError,\n AgentWebAppErrorCode,\n AgentWebAppInterrupt,\n AgentWebAppStreamEvent,\n AgentWebAppStreamEventHandler,\n} from \"./types\";\n\nconst errorCodes = new Set<AgentWebAppErrorCode>([\n \"WEB_APP_NOT_FOUND\", \"WEB_APP_DISABLED\", \"USER_ID_REQUIRED\", \"INVALID_USER_ID\",\n \"PROJECT_NOT_ALLOWED\", \"PROJECT_SELECTOR_DISABLED\", \"MODEL_NOT_ALLOWED\", \"FEATURE_DISABLED\",\n \"THREAD_NOT_FOUND\", \"STREAM_CONFLICT\", \"STREAM_FAILED\", \"INVALID_REQUEST\", \"INTERNAL_ERROR\",\n]);\n\nfunction record(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction exact(value: Record<string, unknown>, keys: string[]): boolean {\n const actual = Object.keys(value);\n return actual.length === keys.length && keys.every((key) => key in value);\n}\n\nfunction validError(value: unknown): value is AgentWebAppError {\n return record(value)\n && exact(value, [\"code\", \"message\", \"retryable\"])\n && typeof value.code === \"string\" && errorCodes.has(value.code as AgentWebAppErrorCode)\n && typeof value.message === \"string\" && typeof value.retryable === \"boolean\";\n}\n\nfunction validInterrupt(value: unknown): value is AgentWebAppInterrupt {\n if (!record(value)) return false;\n const keys = value.data === undefined ? [\"id\", \"type\", \"prompt\"] : [\"id\", \"type\", \"prompt\", \"data\"];\n return exact(value, keys) && typeof value.id === \"string\" && typeof value.type === \"string\"\n && typeof value.prompt === \"string\" && (value.data === undefined || record(value.data));\n}\n\nconst nativeChunkTypes = new Set<string>([\n MessageChunkTypes.HUMAN, MessageChunkTypes.AI, MessageChunkTypes.TOOL,\n MessageChunkTypes.INTERRUPT, MessageChunkTypes.MESSAGE_COMPLETED,\n MessageChunkTypes.MESSAGE_FAILED, MessageChunkTypes.THREAD_IDLE,\n]);\n\nfunction parseEvents(data: string, projection: AgentWebAppStreamProjectionContext): AgentWebAppStreamEvent[] {\n let value: unknown;\n try { value = JSON.parse(data); } catch { throw streamFailed(); }\n if (!record(value) || typeof value.type !== \"string\") throw streamFailed();\n // Native run-protocol chunk (the gateway's messages/stream since Phase 2).\n if (nativeChunkTypes.has(value.type) || (value.type === \"error\" && record(value.data) && !record(value.error))) {\n const projected = projectAgentWebAppChunk(value as never, projection);\n if (projected.length === 0) return [];\n return projected;\n }\n // Legacy projected public event (gateway /v1 path or an older gateway).\n switch (value.type) {\n case \"message.delta\":\n if (exact(value, [\"type\", \"text\"]) && typeof value.text === \"string\") return [value as unknown as AgentWebAppStreamEvent];\n break;\n case \"message.completed\":\n if (exact(value, [\"type\", \"messageId\"]) && typeof value.messageId === \"string\") return [value as unknown as AgentWebAppStreamEvent];\n break;\n case \"tool.started\":\n if (exact(value, [\"type\", \"id\", \"name\"]) && typeof value.id === \"string\" && typeof value.name === \"string\") return [value as unknown as AgentWebAppStreamEvent];\n break;\n case \"tool.completed\":\n if (exact(value, [\"type\", \"id\"]) && typeof value.id === \"string\") return [value as unknown as AgentWebAppStreamEvent];\n break;\n case \"interrupt.created\":\n if (exact(value, [\"type\", \"interrupt\"]) && validInterrupt(value.interrupt)) return [value as unknown as AgentWebAppStreamEvent];\n break;\n case \"genui.render\":\n if (exact(value, [\"type\", \"block\"]) && parseAgentWebAppGenUIBlock(value.block)) return [value as unknown as AgentWebAppStreamEvent];\n break;\n case \"error\":\n if (exact(value, [\"type\", \"error\"]) && validError(value.error)) return [value as unknown as AgentWebAppStreamEvent];\n break;\n case \"stream.completed\":\n if (exact(value, [\"type\"])) return [value as unknown as AgentWebAppStreamEvent];\n break;\n }\n throw streamFailed();\n}\n\nfunction isAbortError(error: unknown): boolean {\n return error instanceof Error && error.name === \"AbortError\";\n}\n\nexport async function parseAgentWebAppEventStream(\n body: ReadableStream<Uint8Array>,\n onEvent: AgentWebAppStreamEventHandler,\n): Promise<void> {\n const projection = createAgentWebAppStreamProjectionContext({ allowGenUI: true, allowInterrupts: true });\n const reader = body.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n let completed = false;\n let reachedEof = false;\n try {\n while (!completed) {\n let result: ReadableStreamReadResult<Uint8Array>;\n try { result = await reader.read(); }\n catch (error) {\n if (isAbortError(error)) return;\n throw streamFailed();\n }\n if (result.done) reachedEof = true;\n try { buffer += decoder.decode(result.value, { stream: !result.done }); }\n catch { throw streamFailed(); }\n const blocks = buffer.split(/\\r?\\n\\r?\\n/);\n buffer = result.done ? \"\" : blocks.pop() ?? \"\";\n for (const block of blocks) {\n const data = block.split(/\\r?\\n/)\n .filter((line) => line === \"data\" || line.startsWith(\"data:\"))\n .map((line) => line === \"data\" ? \"\" : line.slice(5).replace(/^ /, \"\"));\n if (data.length === 0) continue;\n for (const event of parseEvents(data.join(\"\\n\"), projection)) {\n await onEvent(event);\n completed = event.type === \"stream.completed\";\n if (completed) break;\n }\n if (completed) break;\n }\n if (result.done) break;\n }\n if (!completed) throw streamFailed();\n } finally {\n if (!reachedEof) {\n try { await reader.cancel(); } catch { /* Best-effort cleanup must not replace the primary outcome. */ }\n }\n reader.releaseLock();\n }\n}\n","import { AgentWebAppRuntimeClientError } from \"./error\";\nimport { parseAgentWebAppEventStream } from \"./sse-parser\";\nimport { parseAgentWebAppGenUIBlock } from \"@axiom-lattice/protocols\";\nimport type {\n AgentWebAppAttachment,\n AgentWebAppBootstrap,\n AgentWebAppCreateThreadInput,\n AgentWebAppError,\n AgentWebAppMessageList,\n AgentWebAppProjectSelection,\n AgentWebAppResumeInterruptInput,\n AgentWebAppRuntimeClientOptions,\n AgentWebAppRuntimeSelection,\n AgentWebAppRuntimeThread,\n AgentWebAppStreamEventHandler,\n AgentWebAppStreamMessageInput,\n AgentWebAppThreadList,\n AgentWebAppUpdateThreadInput,\n} from \"./types\";\n\ninterface ErrorEnvelope { success: false; error: AgentWebAppError }\n\nconst errorCodes = new Set<AgentWebAppError[\"code\"]>([\n \"WEB_APP_NOT_FOUND\", \"WEB_APP_DISABLED\", \"USER_ID_REQUIRED\", \"INVALID_USER_ID\",\n \"PROJECT_NOT_ALLOWED\", \"PROJECT_SELECTOR_DISABLED\", \"MODEL_NOT_ALLOWED\", \"FEATURE_DISABLED\",\n \"THREAD_NOT_FOUND\", \"STREAM_CONFLICT\", \"STREAM_FAILED\", \"INVALID_REQUEST\", \"INTERNAL_ERROR\",\n]);\n\nfunction record(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction exact(value: Record<string, unknown>, required: string[], optional: string[] = []): boolean {\n const keys = Object.keys(value);\n return required.every((key) => key in value) && keys.every((key) => required.includes(key) || optional.includes(key));\n}\n\nfunction string(value: unknown): value is string { return typeof value === \"string\"; }\n\nfunction parseThread(value: unknown): AgentWebAppRuntimeThread | undefined {\n if (!record(value) || !exact(value, [\"id\", \"projectId\", \"createdAt\", \"updatedAt\"], [\"label\"])) return undefined;\n if (!string(value.id) || !string(value.projectId) || (value.label !== undefined && !string(value.label))) return undefined;\n if (!string(value.createdAt) || !string(value.updatedAt)) return undefined;\n const createdAt = new Date(value.createdAt); const updatedAt = new Date(value.updatedAt);\n if (Number.isNaN(createdAt.getTime()) || Number.isNaN(updatedAt.getTime())) return undefined;\n return { id: value.id, projectId: value.projectId, ...(value.label === undefined ? {} : { label: value.label }), createdAt, updatedAt };\n}\n\nfunction isErrorEnvelope(value: unknown): value is ErrorEnvelope {\n if (!record(value) || value.success !== false || !record(value.error)) return false;\n const error = value.error;\n return exact(value, [\"success\", \"error\"])\n && exact(error, [\"code\", \"message\", \"retryable\"])\n && typeof error.code === \"string\" && errorCodes.has(error.code as AgentWebAppError[\"code\"])\n && typeof error.message === \"string\" && typeof error.retryable === \"boolean\";\n}\n\nfunction validFeatures(value: unknown): boolean {\n if (!record(value)) return false;\n const keys = [\"projectSelector\", \"modelSelector\", \"threadManagement\", \"attachments\", \"hitl\", \"genUI\"];\n return exact(value, keys, [\"files\"]) && keys.every((key) => typeof value[key] === \"boolean\")\n && (value.files === undefined || typeof value.files === \"boolean\");\n}\n\nfunction validQuickPrompts(value: unknown): boolean {\n return Array.isArray(value)\n && value.length <= 6\n && value.every((prompt) => record(prompt)\n && exact(prompt, [\"label\", \"text\"])\n && string(prompt.label) && prompt.label.length >= 1 && prompt.label.length <= 40\n && string(prompt.text) && prompt.text.length >= 1 && prompt.text.length <= 500);\n}\n\nfunction validAppearance(value: unknown): boolean {\n return record(value) && exact(value, [], [\"title\", \"welcomeMessage\", \"primaryColor\", \"quickPrompts\"])\n && (value.title === undefined || string(value.title))\n && (value.welcomeMessage === undefined || string(value.welcomeMessage))\n && (value.primaryColor === undefined || string(value.primaryColor))\n && (value.quickPrompts === undefined || validQuickPrompts(value.quickPrompts));\n}\n\nfunction parseBootstrap(value: unknown): AgentWebAppBootstrap | undefined {\n if (!record(value) || !exact(value, [\"webApp\", \"projects\", \"models\"], [\"thread\"]) || !record(value.webApp)) return undefined;\n const webApp = value.webApp;\n if (!exact(webApp, [\"id\", \"name\", \"assistant\", \"defaultProjectId\", \"features\", \"appearance\", \"identityAssurance\"], [\"description\", \"defaultModelKey\"])\n || !string(webApp.id) || !string(webApp.name) || !string(webApp.defaultProjectId)\n || (webApp.description !== undefined && !string(webApp.description)) || (webApp.defaultModelKey !== undefined && !string(webApp.defaultModelKey))\n || webApp.identityAssurance !== \"unverified\" || !record(webApp.assistant)\n || !exact(webApp.assistant, [\"id\", \"name\"], [\"description\"]) || !string(webApp.assistant.id) || !string(webApp.assistant.name)\n || (webApp.assistant.description !== undefined && !string(webApp.assistant.description))\n || !validFeatures(webApp.features) || !validAppearance(webApp.appearance)\n || !Array.isArray(value.projects) || !value.projects.every((item) => record(item) && exact(item, [\"id\", \"name\"]) && string(item.id) && string(item.name))\n || !Array.isArray(value.models) || !value.models.every((item) => record(item) && exact(item, [\"key\", \"label\"]) && string(item.key) && string(item.label))) return undefined;\n const thread = value.thread === undefined ? undefined : parseThread(value.thread);\n if (value.thread !== undefined && !thread) return undefined;\n return { ...value, ...(thread ? { thread } : {}) } as unknown as AgentWebAppBootstrap;\n}\n\nfunction parseThreadList(value: unknown): AgentWebAppThreadList | undefined {\n if (!record(value) || !exact(value, [\"records\", \"total\"]) || !Array.isArray(value.records) || typeof value.total !== \"number\") return undefined;\n const records = value.records.map(parseThread);\n return records.every((item): item is AgentWebAppRuntimeThread => item !== undefined) ? { records, total: value.total } : undefined;\n}\n\nfunction validMessage(value: unknown): boolean {\n return record(value) && string(value.id) && (value.role === \"human\" || value.role === \"ai\")\n && (value.content === undefined || string(value.content)\n || (Array.isArray(value.content) && value.content.every((block) => parseAgentWebAppGenUIBlock(block) !== undefined)));\n}\n\nfunction parseMessages(value: unknown): AgentWebAppMessageList | undefined {\n return record(value) && exact(value, [\"messages\"]) && Array.isArray(value.messages) && value.messages.every(validMessage)\n ? value as unknown as AgentWebAppMessageList : undefined;\n}\n\nfunction parseAttachment(value: unknown): AgentWebAppAttachment | undefined {\n return record(value) && exact(value, [\"ref\", \"name\", \"mimeType\", \"size\"])\n && string(value.ref) && string(value.name) && string(value.mimeType) && typeof value.size === \"number\"\n ? value as unknown as AgentWebAppAttachment : undefined;\n}\n\nfunction objectWith<T>(keys: string[], checks: (value: Record<string, unknown>) => boolean): (value: unknown) => T | undefined {\n return (value) => record(value) && exact(value, keys) && checks(value) ? value as unknown as T : undefined;\n}\n\nexport class AgentWebAppRuntimeClient {\n private readonly baseUrl: string;\n private readonly fetchImplementation: typeof globalThis.fetch;\n\n constructor(private readonly options: AgentWebAppRuntimeClientOptions) {\n this.baseUrl = `${options.gatewayUrl.replace(/\\/+$/, \"\")}/api/web-apps/${encodeURIComponent(options.webAppId)}/runtime`;\n this.fetchImplementation = options.fetch ?? globalThis.fetch.bind(globalThis);\n }\n\n async bootstrap(selection: AgentWebAppRuntimeSelection = {}, signal?: AbortSignal): Promise<AgentWebAppBootstrap> {\n return this.request(\"bootstrap\", parseBootstrap, { query: selection, signal });\n }\n\n async listThreads(selection: AgentWebAppProjectSelection = {}, signal?: AbortSignal): Promise<AgentWebAppThreadList> {\n return this.request(\"threads\", parseThreadList, { query: selection, signal });\n }\n\n async createThread(input: AgentWebAppCreateThreadInput = {}, signal?: AbortSignal): Promise<AgentWebAppRuntimeThread> {\n return this.request(\"threads\", parseThread, { method: \"POST\", body: input, signal });\n }\n\n async updateThread(threadId: string, input: AgentWebAppUpdateThreadInput, signal?: AbortSignal): Promise<AgentWebAppRuntimeThread> {\n return this.request(`threads/${encodeURIComponent(threadId)}`, parseThread, { method: \"PATCH\", body: input, signal });\n }\n\n async deleteThread(threadId: string, selection: AgentWebAppProjectSelection = {}, signal?: AbortSignal): Promise<void> {\n await this.request(`threads/${encodeURIComponent(threadId)}`, objectWith<{ id: string }>([\"id\"], (value) => string(value.id)), { method: \"DELETE\", query: selection, signal });\n }\n\n async getMessages(threadId: string, selection: AgentWebAppProjectSelection = {}, signal?: AbortSignal): Promise<AgentWebAppMessageList> {\n return this.request(`threads/${encodeURIComponent(threadId)}/messages`, parseMessages, { query: selection, signal });\n }\n\n async streamMessage(threadId: string, input: AgentWebAppStreamMessageInput, onEvent: AgentWebAppStreamEventHandler, signal?: AbortSignal): Promise<void> {\n return this.streamRequest(`threads/${encodeURIComponent(threadId)}/messages/stream`, input, onEvent, signal);\n }\n\n async resumeInterrupt(threadId: string, interruptId: string, input: AgentWebAppResumeInterruptInput, onEvent: AgentWebAppStreamEventHandler, signal?: AbortSignal): Promise<void> {\n return this.streamRequest(`threads/${encodeURIComponent(threadId)}/interrupts/${encodeURIComponent(interruptId)}/resume`, input, onEvent, signal);\n }\n\n private async streamRequest(path: string, body: object, onEvent: AgentWebAppStreamEventHandler, signal?: AbortSignal): Promise<void> {\n let response: Response;\n try {\n response = await this.fetchRequest(path, { method: \"POST\", body, signal });\n } catch (error) {\n if (isAbortError(error)) throw error;\n if (error instanceof AgentWebAppRuntimeClientError) throw error;\n throw new AgentWebAppRuntimeClientError(\"STREAM_FAILED\", \"Stream failed\", true);\n }\n if (!response.ok) await this.throwResponseError(response);\n if (!response.body || !response.headers.get(\"content-type\")?.toLowerCase().includes(\"text/event-stream\")) {\n if (response.body) try { await response.body.cancel(); } catch { /* Best effort. */ }\n throw new AgentWebAppRuntimeClientError(\"STREAM_FAILED\", \"Stream failed\", true, response.status);\n }\n await parseAgentWebAppEventStream(response.body, onEvent);\n }\n\n async abort(threadId: string, selection: AgentWebAppProjectSelection = {}, signal?: AbortSignal): Promise<void> {\n await this.request(`threads/${encodeURIComponent(threadId)}/abort`, objectWith<{ aborted: boolean }>([\"aborted\"], (value) => typeof value.aborted === \"boolean\"), { method: \"POST\", query: selection, signal });\n }\n\n async uploadAttachment(threadId: string, file: Blob, selection: AgentWebAppProjectSelection = {}, signal?: AbortSignal): Promise<AgentWebAppAttachment> {\n const form = new FormData();\n const filename = typeof File !== \"undefined\" && file instanceof File ? file.name : \"attachment\";\n form.append(\"file\", file, filename);\n return this.request(`threads/${encodeURIComponent(threadId)}/attachments`, parseAttachment, { method: \"POST\", query: selection, body: form, signal });\n }\n\n private async request<T>(path: string, parse: (value: unknown) => T | undefined, init: RequestOptions = {}): Promise<T> {\n let response: Response;\n try { response = await this.fetchRequest(path, init); }\n catch (error) {\n if (isAbortError(error)) throw error;\n if (error instanceof AgentWebAppRuntimeClientError) throw error;\n throw new AgentWebAppRuntimeClientError(\"INTERNAL_ERROR\", \"Request failed\", true);\n }\n let value: unknown;\n try { value = await response.json(); } catch { throw this.internalError(response.status); }\n if (isErrorEnvelope(value)) {\n throw new AgentWebAppRuntimeClientError(value.error.code, value.error.message, value.error.retryable, response.status);\n }\n if (!response.ok || !record(value) || !exact(value, [\"success\", \"data\"]) || value.success !== true) throw this.internalError(response.status);\n const data = parse(value.data);\n if (data === undefined) throw this.internalError(response.status);\n return data;\n }\n\n private async fetchRequest(path: string, options: RequestOptions): Promise<Response> {\n const identity = await this.options.identityProvider.getIdentity(options.signal);\n const url = new URL(`${this.baseUrl}/${path}`);\n for (const [key, value] of Object.entries(options.query ?? {})) if (value !== undefined) url.searchParams.set(key, value);\n const headers = new Headers();\n if (identity.bearerToken !== undefined) {\n headers.set(\"Authorization\", `Bearer ${identity.bearerToken}`);\n } else {\n headers.set(\"X-Axiom-External-User-Id\", identity.externalUserId ?? \"\");\n }\n let body: BodyInit | undefined;\n if (options.body instanceof FormData) body = options.body;\n else if (options.body !== undefined) { headers.set(\"Content-Type\", \"application/json\"); body = JSON.stringify(options.body); }\n return this.fetchImplementation(url, { method: options.method ?? \"GET\", headers, body, signal: options.signal, credentials: \"omit\" });\n }\n\n private async throwResponseError(response: Response): Promise<never> {\n let value: unknown;\n try { value = await response.json(); } catch { throw this.internalError(response.status); }\n if (isErrorEnvelope(value)) throw new AgentWebAppRuntimeClientError(value.error.code, value.error.message, value.error.retryable, response.status);\n throw this.internalError(response.status);\n }\n\n private internalError(status?: number): AgentWebAppRuntimeClientError {\n return new AgentWebAppRuntimeClientError(\"INTERNAL_ERROR\", \"Invalid server response\", false, status);\n }\n}\n\nfunction isAbortError(error: unknown): boolean {\n return typeof error === \"object\" && error !== null && \"name\" in error && error.name === \"AbortError\";\n}\n\ninterface RequestOptions {\n method?: \"GET\" | \"POST\" | \"PATCH\" | \"DELETE\";\n query?: { projectId?: string; modelKey?: string };\n body?: object | FormData;\n signal?: AbortSignal;\n}\n","import type {\n AgentWebAppAttachment,\n AgentWebAppBootstrap,\n AgentWebAppInterrupt,\n AgentWebAppGenUIBlock,\n AgentWebAppRuntimeMessage,\n AgentWebAppRuntimeThread,\n} from \"../types\";\nimport type { AgentWebAppRuntimeClientError } from \"../error\";\n\nexport interface AgentWebAppToolState {\n id: string;\n name?: string;\n status: \"running\" | \"completed\";\n}\n\nexport interface AgentWebAppFailedSend {\n text: string;\n attachmentIds: string[];\n}\n\nexport interface AgentWebAppState {\n bootstrap: AgentWebAppBootstrap | null;\n projectId: string | null;\n modelKey: string | null;\n threads: AgentWebAppRuntimeThread[];\n activeThread: AgentWebAppRuntimeThread | null;\n messages: AgentWebAppRuntimeMessage[];\n stream: { isStreaming: boolean; assistantMessageId: string | null; tools: AgentWebAppToolState[] };\n lastFailedSend: AgentWebAppFailedSend | null;\n attachments: AgentWebAppAttachment[];\n interrupts: AgentWebAppInterrupt[];\n errors: { current: AgentWebAppRuntimeClientError | null };\n loading: { bootstrap: boolean; threads: boolean; messages: boolean; attachments: boolean; interrupts: boolean };\n}\n\nexport const initialAgentWebAppState: AgentWebAppState = {\n bootstrap: null,\n projectId: null,\n modelKey: null,\n threads: [],\n activeThread: null,\n messages: [],\n stream: { isStreaming: false, assistantMessageId: null, tools: [] },\n lastFailedSend: null,\n attachments: [],\n interrupts: [],\n errors: { current: null },\n loading: { bootstrap: true, threads: false, messages: false, attachments: false, interrupts: false },\n};\n\nexport type AgentWebAppAction =\n | { type: \"BOOTSTRAP_LOADING\" }\n | { type: \"BOOTSTRAP_READY\"; bootstrap: AgentWebAppBootstrap; projectId: string; modelKey: string | null }\n | { type: \"BOOTSTRAP_SETTLED\" }\n | { type: \"PROJECT_SELECTED\"; projectId: string }\n | { type: \"MODEL_SELECTED\"; modelKey: string }\n | { type: \"THREADS_LOADING\"; loading: boolean }\n | { type: \"THREADS_SET\"; threads: AgentWebAppRuntimeThread[] }\n | { type: \"THREAD_UPSERT\"; thread: AgentWebAppRuntimeThread }\n | { type: \"THREAD_DELETED\"; threadId: string }\n | { type: \"ACTIVE_THREAD_SET\"; thread: AgentWebAppRuntimeThread | null }\n | { type: \"ACTIVE_THREAD_UPDATED\"; thread: AgentWebAppRuntimeThread }\n | { type: \"MESSAGES_LOADING\"; loading: boolean }\n | { type: \"MESSAGES_SET\"; messages: AgentWebAppRuntimeMessage[] }\n | { type: \"MESSAGE_APPEND\"; message: AgentWebAppRuntimeMessage }\n | { type: \"MESSAGES_REMOVE\"; ids: string[] }\n | { type: \"ASSISTANT_DELTA\"; id: string; text: string }\n | { type: \"ASSISTANT_GENUI\"; id: string; block: AgentWebAppGenUIBlock }\n | { type: \"ASSISTANT_COMPLETED\"; temporaryId: string; messageId: string }\n | { type: \"STREAM_SET\"; streaming: boolean; assistantMessageId?: string | null }\n | { type: \"TOOL_STARTED\"; id: string; name: string }\n | { type: \"TOOL_COMPLETED\"; id: string }\n | { type: \"ATTACHMENTS_LOADING\"; loading: boolean }\n | { type: \"ATTACHMENT_ADD\"; attachment: AgentWebAppAttachment }\n | { type: \"ATTACHMENT_REMOVE\"; ref: string }\n | { type: \"ATTACHMENTS_CLEAR\" }\n | { type: \"ATTACHMENTS_REMOVE\"; refs: string[] }\n | { type: \"INTERRUPT_ADD\"; interrupt: AgentWebAppInterrupt }\n | { type: \"INTERRUPT_REMOVE\"; interruptId: string }\n | { type: \"INTERRUPTS_LOADING\"; loading: boolean }\n | { type: \"ERROR_SET\"; error: AgentWebAppRuntimeClientError | null }\n | { type: \"FAILED_SEND_SET\"; failedSend: AgentWebAppFailedSend | null };\n\nexport function agentWebAppReducer(state: AgentWebAppState, action: AgentWebAppAction): AgentWebAppState {\n switch (action.type) {\n case \"BOOTSTRAP_LOADING\": return { ...initialAgentWebAppState, loading: { ...initialAgentWebAppState.loading, bootstrap: true } };\n case \"BOOTSTRAP_READY\": return { ...state, bootstrap: action.bootstrap, projectId: action.projectId, modelKey: action.modelKey, loading: { ...state.loading, bootstrap: false } };\n case \"BOOTSTRAP_SETTLED\": return { ...state, loading: { ...state.loading, bootstrap: false } };\n case \"PROJECT_SELECTED\": return { ...state, projectId: action.projectId, threads: [], activeThread: null, messages: [], attachments: [], interrupts: [], stream: initialAgentWebAppState.stream, lastFailedSend: null, loading: { ...state.loading, messages: false, attachments: false, interrupts: false } };\n case \"MODEL_SELECTED\": return { ...state, modelKey: action.modelKey };\n case \"THREADS_LOADING\": return { ...state, loading: { ...state.loading, threads: action.loading } };\n case \"THREADS_SET\": return { ...state, threads: action.threads, loading: { ...state.loading, threads: false } };\n case \"THREAD_UPSERT\": return { ...state, threads: [action.thread, ...state.threads.filter((item) => item.id !== action.thread.id)], activeThread: state.activeThread?.id === action.thread.id ? action.thread : state.activeThread };\n case \"THREAD_DELETED\": return { ...state, threads: state.threads.filter((item) => item.id !== action.threadId), activeThread: state.activeThread?.id === action.threadId ? null : state.activeThread, messages: state.activeThread?.id === action.threadId ? [] : state.messages, lastFailedSend: state.activeThread?.id === action.threadId ? null : state.lastFailedSend };\n case \"ACTIVE_THREAD_SET\": return { ...state, activeThread: action.thread, messages: [], attachments: [], interrupts: [], stream: initialAgentWebAppState.stream, lastFailedSend: null, loading: { ...state.loading, messages: false, attachments: false, interrupts: false } };\n case \"ACTIVE_THREAD_UPDATED\": return { ...state, activeThread: action.thread };\n case \"MESSAGES_LOADING\": return { ...state, loading: { ...state.loading, messages: action.loading } };\n case \"MESSAGES_SET\": return { ...state, messages: action.messages, loading: { ...state.loading, messages: false } };\n case \"MESSAGE_APPEND\": return { ...state, messages: [...state.messages, action.message] };\n case \"MESSAGES_REMOVE\": return { ...state, messages: state.messages.filter((message) => !action.ids.includes(message.id)) };\n case \"ASSISTANT_DELTA\": {\n const index = state.messages.findIndex((message) => message.id === action.id);\n if (index < 0) return { ...state, messages: [...state.messages, { id: action.id, role: \"ai\", content: action.text }] };\n return { ...state, messages: state.messages.map((message, itemIndex) => itemIndex === index ? { ...message, content: `${message.content ?? \"\"}${action.text}` } : message) };\n }\n case \"ASSISTANT_GENUI\": {\n const widgetMessageId = `${action.id}-genui`;\n const index = state.messages.findIndex((message) => message.id === widgetMessageId);\n if (index < 0) return { ...state, messages: [...state.messages, { id: widgetMessageId, role: \"ai\", content: [action.block] }] };\n return { ...state, messages: state.messages.map((message, itemIndex) => itemIndex === index\n ? { ...message, content: [...(Array.isArray(message.content) ? message.content : []), action.block] }\n : message) };\n }\n case \"ASSISTANT_COMPLETED\": return { ...state, messages: state.messages.map((message) => message.id === action.temporaryId\n ? { ...message, id: action.messageId }\n : message.id === `${action.temporaryId}-genui` ? { ...message, id: `${action.messageId}-genui` } : message), stream: { ...state.stream, assistantMessageId: action.messageId } };\n case \"STREAM_SET\": return { ...state, stream: { ...state.stream, isStreaming: action.streaming, assistantMessageId: action.assistantMessageId === undefined ? state.stream.assistantMessageId : action.assistantMessageId, ...(action.streaming ? { tools: [] } : {}) } };\n case \"TOOL_STARTED\": return { ...state, stream: { ...state.stream, tools: [...state.stream.tools.filter((tool) => tool.id !== action.id), { id: action.id, name: action.name, status: \"running\" }] } };\n case \"TOOL_COMPLETED\": return { ...state, stream: { ...state.stream, tools: state.stream.tools.map((tool) => tool.id === action.id ? { ...tool, status: \"completed\" } : tool) } };\n case \"ATTACHMENTS_LOADING\": return { ...state, loading: { ...state.loading, attachments: action.loading } };\n case \"ATTACHMENT_ADD\": return { ...state, attachments: [...state.attachments, action.attachment], loading: { ...state.loading, attachments: false } };\n case \"ATTACHMENT_REMOVE\": return { ...state, attachments: state.attachments.filter((item) => item.ref !== action.ref) };\n case \"ATTACHMENTS_CLEAR\": return { ...state, attachments: [] };\n case \"ATTACHMENTS_REMOVE\": return { ...state, attachments: state.attachments.filter((item) => !action.refs.includes(item.ref)) };\n case \"INTERRUPT_ADD\": return { ...state, interrupts: [...state.interrupts.filter((item) => item.id !== action.interrupt.id), action.interrupt] };\n case \"INTERRUPT_REMOVE\": return { ...state, interrupts: state.interrupts.filter((item) => item.id !== action.interruptId), loading: { ...state.loading, interrupts: false } };\n case \"INTERRUPTS_LOADING\": return { ...state, loading: { ...state.loading, interrupts: action.loading } };\n case \"ERROR_SET\": return { ...state, errors: { current: action.error }, loading: action.error && !state.bootstrap ? { ...state.loading, bootstrap: false } : state.loading };\n case \"FAILED_SEND_SET\": return { ...state, lastFailedSend: action.failedSend };\n }\n}\n","import { useContext } from \"react\";\nimport { AgentWebAppContext } from \"../AgentWebAppContext\";\n\nexport function useAgentWebApp() {\n const context = useContext(AgentWebAppContext);\n if (!context) throw new Error(\"useAgentWebApp must be used within AgentWebAppProvider\");\n return context;\n}\n","import { useContext } from \"react\";\nimport { AgentWebAppContext } from \"../AgentWebAppContext\";\n\nexport function useWidgetAttachments() {\n const context = useContext(AgentWebAppContext);\n if (!context) throw new Error(\"useWidgetAttachments must be used within AgentWebAppProvider\");\n return {\n attachments: context.attachments,\n isLoading: context.loading.attachments,\n error: context.errors.current,\n uploadAttachment: context.uploadAttachment,\n removeAttachment: context.removeAttachment,\n clearAttachments: context.clearAttachments,\n };\n}\n","import { useContext } from \"react\";\nimport { AgentWebAppContext } from \"../AgentWebAppContext\";\n\nexport function useWidgetChat() {\n const context = useContext(AgentWebAppContext);\n if (!context) throw new Error(\"useWidgetChat must be used within AgentWebAppProvider\");\n return {\n activeThread: context.activeThread,\n messages: context.messages,\n tools: context.stream.tools,\n isStreaming: context.stream.isStreaming,\n isLoading: context.loading.messages,\n lastFailedSend: context.lastFailedSend,\n error: context.errors.current,\n sendMessage: context.sendMessage,\n retry: context.retryLastMessage,\n abort: context.abort,\n };\n}\n","import { useContext } from \"react\";\nimport { AgentWebAppContext } from \"../AgentWebAppContext\";\n\nexport function useWidgetInterrupts() {\n const context = useContext(AgentWebAppContext);\n if (!context) throw new Error(\"useWidgetInterrupts must be used within AgentWebAppProvider\");\n return {\n interrupts: context.interrupts,\n isLoading: context.loading.interrupts,\n error: context.errors.current,\n resumeInterrupt: context.resumeInterrupt,\n };\n}\n","import { useContext } from \"react\";\nimport { AgentWebAppContext } from \"../AgentWebAppContext\";\n\nexport function useWidgetProject() {\n const context = useContext(AgentWebAppContext);\n if (!context) throw new Error(\"useWidgetProject must be used within AgentWebAppProvider\");\n return {\n bootstrap: context.bootstrap,\n projectId: context.projectId,\n modelKey: context.modelKey,\n selectProject: context.selectProject,\n selectModel: context.selectModel,\n isLoading: context.loading.bootstrap || context.loading.threads,\n error: context.errors.current,\n };\n}\n","import { useContext } from \"react\";\nimport { AgentWebAppContext } from \"../AgentWebAppContext\";\n\nexport function useWidgetThreads() {\n const context = useContext(AgentWebAppContext);\n if (!context) throw new Error(\"useWidgetThreads must be used within AgentWebAppProvider\");\n return {\n threads: context.threads,\n activeThread: context.activeThread,\n isLoading: context.loading.bootstrap || context.loading.threads,\n error: context.errors.current,\n refreshThreads: context.refreshThreads,\n selectThread: context.selectThread,\n createThread: context.createThread,\n renameThread: context.renameThread,\n deleteThread: context.deleteThread,\n };\n}\n","import React, { useRef, useState } from \"react\";\nimport { useWidgetAttachments } from \"../hooks/useWidgetAttachments\";\nimport { useWidgetChat } from \"../hooks/useWidgetChat\";\nimport { useWidgetProject } from \"../hooks/useWidgetProject\";\nimport { widgetErrorMessage } from \"./widget-utils\";\n\nexport interface WidgetAttachmentsProps { className?: string; attachLabel?: string; }\n\nexport function WidgetAttachments({ className, attachLabel = \"Attach files\" }: WidgetAttachmentsProps): React.ReactElement | null {\n const { bootstrap } = useWidgetProject();\n const { activeThread } = useWidgetChat();\n const { attachments, isLoading, uploadAttachment, removeAttachment } = useWidgetAttachments();\n const pendingRef = useRef(false);\n const [pending, setPending] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n if (!bootstrap?.webApp.features.attachments) return null;\n const upload = async (event: React.ChangeEvent<HTMLInputElement>): Promise<void> => {\n if (pendingRef.current) return;\n pendingRef.current = true;\n setPending(true);\n setError(null);\n try { for (const file of Array.from(event.target.files ?? [])) await uploadAttachment(file); }\n catch (uploadError) { setError(widgetErrorMessage(uploadError)); }\n finally { pendingRef.current = false; setPending(false); if (inputRef.current) inputRef.current.value = \"\"; }\n };\n return <div className={className}>{attachments.length > 0 && <div className=\"axiom-web-app__attachments\">{attachments.map((attachment) => <span className=\"axiom-web-app__attachment\" key={attachment.ref}>{attachment.name}<button type=\"button\" aria-label={`Remove ${attachment.name}`} onClick={() => removeAttachment(attachment.ref)}>Remove</button></span>)}</div>}{error && <p className=\"axiom-web-app__error\" role=\"alert\">{error}</p>}<label className=\"axiom-web-app__attach\"><span>{isLoading || pending ? \"Uploading...\" : attachLabel}</span><input ref={inputRef} type=\"file\" multiple aria-label={attachLabel} disabled={!activeThread || isLoading || pending} onChange={(event) => void upload(event)} /></label></div>;\n}\n","export function widgetErrorMessage(error: unknown): string {\n return error instanceof Error ? error.message : \"Request failed\";\n}\n","import React, { useRef, useState } from \"react\";\nimport { useWidgetChat } from \"../hooks/useWidgetChat\";\nimport { widgetErrorMessage } from \"./widget-utils\";\n\nexport interface WidgetComposerProps { className?: string; messageLabel?: string; placeholder?: string; sendLabel?: string; abortLabel?: string; leadingSlot?: React.ReactNode; }\n\nexport function WidgetComposer({ className, messageLabel = \"Message\", placeholder = \"Ask a question\", sendLabel = \"Send message\", abortLabel = \"Stop response\", leadingSlot }: WidgetComposerProps): React.ReactElement {\n const { activeThread, isStreaming, sendMessage, abort, retry, lastFailedSend } = useWidgetChat();\n const pendingRef = useRef(false);\n const draftRef = useRef(\"\");\n const [pending, setPending] = useState(false);\n const [text, setText] = useState(\"\");\n const [error, setError] = useState<string | null>(null);\n const run = async (operation: () => Promise<void>): Promise<void> => {\n if (pendingRef.current) return;\n pendingRef.current = true; setPending(true); setError(null);\n try { await operation(); }\n catch (operationError) { setError(widgetErrorMessage(operationError)); }\n finally { pendingRef.current = false; setPending(false); }\n };\n const submit = (event: React.FormEvent): void => {\n event.preventDefault();\n const content = text.trim();\n if (!content || isStreaming) return;\n draftRef.current = \"\";\n setText(\"\");\n void (async () => {\n if (pendingRef.current) return;\n pendingRef.current = true; setPending(true); setError(null);\n try { await sendMessage(content); }\n catch (sendError) {\n setError(widgetErrorMessage(sendError));\n if (draftRef.current === \"\") { draftRef.current = content; setText(content); }\n } finally { pendingRef.current = false; setPending(false); }\n })();\n };\n return <form className={`axiom-web-app__composer${className ? ` ${className}` : \"\"}`} onSubmit={submit}>{leadingSlot}{error && <p className=\"axiom-web-app__error\" role=\"alert\">{error}</p>}<label className=\"axiom-web-app__composer-input\"><span className=\"axiom-web-app__sr-only\">{messageLabel}</span><textarea aria-label={messageLabel} value={text} placeholder={placeholder} disabled={!activeThread} onChange={(event) => { draftRef.current = event.target.value; setText(event.target.value); }} /></label><div className=\"axiom-web-app__composer-actions\">{lastFailedSend && <button type=\"button\" onClick={() => void run(retry)} disabled={isStreaming || pending}>Retry failed message</button>}{isStreaming ? <button type=\"button\" disabled={pending} onClick={() => void run(abort)}>{abortLabel}</button> : <button type=\"submit\" disabled={!activeThread || !text.trim() || pending}>{sendLabel}</button>}</div></form>;\n}\n","import { useRef, useState } from \"react\";\n\nexport type ReviewDecision = \"approve\" | \"reject\";\n\nexport interface ReviewDecisionState {\n feedback: string;\n setFeedback(value: string): void;\n pending: ReviewDecision | null;\n submitted: boolean;\n error: unknown;\n submit(decision: ReviewDecision): Promise<boolean>;\n}\n\n/** Shared decision state for Console and WebApp review adapters. */\nexport function useReviewDecision(\n onSubmit: (decision: ReviewDecision, trimmedFeedback: string) => void | Promise<void>,\n): ReviewDecisionState {\n const submittingRef = useRef(false);\n const [feedback, setFeedback] = useState(\"\");\n const [pending, setPending] = useState<ReviewDecision | null>(null);\n const [submitted, setSubmitted] = useState(false);\n const [error, setError] = useState<unknown>(null);\n\n const submit = async (decision: ReviewDecision): Promise<boolean> => {\n if (submittingRef.current) return false;\n submittingRef.current = true;\n setPending(decision);\n setError(null);\n try {\n await Promise.resolve(onSubmit(decision, feedback.trim()));\n setSubmitted(true);\n return true;\n } catch (submitError) {\n setError(submitError);\n return false;\n } finally {\n submittingRef.current = false;\n setPending(null);\n }\n };\n\n return { feedback, setFeedback, pending, submitted, error, submit };\n}\n","import React from \"react\";\nimport type { AgentWebAppInterrupt, AgentWebAppInterruptResponse } from \"../types\";\nimport { useReviewDecision } from \"../../../components/shared/useReviewDecision\";\n\nexport interface WidgetInterruptViewProps {\n interrupt: AgentWebAppInterrupt;\n onSubmit(interruptId: string, response: AgentWebAppInterruptResponse, message: string): Promise<void>;\n className?: string;\n approveLabel?: string;\n rejectLabel?: string;\n feedbackLabel?: string;\n disabled?: boolean;\n}\n\nfunction errorMessage(error: unknown): string {\n return error instanceof Error ? error.message : \"Unable to submit review\";\n}\n\nexport function WidgetInterruptView({ interrupt, onSubmit, className, approveLabel = \"Approve\", rejectLabel = \"Reject\", feedbackLabel = \"Feedback\", disabled = false }: WidgetInterruptViewProps): React.ReactElement {\n const review = useReviewDecision(async (decision, feedback) => {\n const approved = decision === \"approve\";\n await onSubmit(interrupt.id, { approved, ...(feedback ? { feedback } : {}) }, feedback || (approved ? \"Approved\" : \"Changes requested\"));\n });\n\n const submit = async (approved: boolean): Promise<void> => {\n if (disabled) return;\n await review.submit(approved ? \"approve\" : \"reject\");\n };\n\n return (\n <section className={`axiom-web-app__interrupt${className ? ` ${className}` : \"\"}`} aria-label=\"Human review\">\n <strong>{interrupt.prompt}</strong>\n {interrupt.data && <p className=\"axiom-web-app__interrupt-fallback\">Additional review details are unavailable.</p>}\n <label className=\"axiom-web-app__feedback\">\n <span>{feedbackLabel}</span>\n <textarea value={review.feedback} disabled={disabled || review.pending !== null} onChange={(event) => review.setFeedback(event.target.value)} />\n </label>\n {review.error !== null && <p className=\"axiom-web-app__error\" role=\"alert\">{errorMessage(review.error)}</p>}\n <div className=\"axiom-web-app__interrupt-actions\">\n <button type=\"button\" disabled={disabled || review.pending !== null} onClick={() => void submit(false)}>{rejectLabel}</button>\n <button type=\"button\" disabled={disabled || review.pending !== null} onClick={() => void submit(true)}>{approveLabel}</button>\n </div>\n </section>\n );\n}\n","import React from \"react\";\nimport type { AgentWebAppInterrupt } from \"../types\";\nimport { useWidgetInterrupts } from \"../hooks/useWidgetInterrupts\";\nimport { useWidgetProject } from \"../hooks/useWidgetProject\";\nimport { WidgetInterruptView } from \"./WidgetInterruptView\";\n\nexport interface WidgetInterruptProps { interrupt: AgentWebAppInterrupt; className?: string; approveLabel?: string; rejectLabel?: string; feedbackLabel?: string; }\n\nexport function WidgetInterrupt(props: WidgetInterruptProps): React.ReactElement | null {\n const { bootstrap } = useWidgetProject();\n const { isLoading, resumeInterrupt } = useWidgetInterrupts();\n if (!bootstrap?.webApp.features.hitl) return null;\n return <WidgetInterruptView {...props} disabled={isLoading} onSubmit={resumeInterrupt} />;\n}\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","import { clsx } from 'clsx';\nimport React, { useMemo } from 'react';\nimport { Parser, Renderer } from \"./core\";\nimport DebugPanel from \"./DebugPanel\";\nimport { useStreaming } from \"./hooks\";\nimport \"./index.css\";\nconst XMarkdown = /*#__PURE__*/React.memo(props => {\n const {\n streaming,\n config,\n components,\n paragraphTag,\n content,\n children,\n rootClassName,\n className,\n style,\n openLinksInNewTab,\n dompurifyConfig,\n protectCustomTagNewlines,\n escapeRawHtml,\n debug\n } = props;\n\n // ============================ style ============================\n const mergedCls = clsx('x-markdown', rootClassName, className);\n\n // ============================ Streaming ============================\n const displayContent = useStreaming(content || children || '', {\n streaming,\n components\n });\n // ============================ Render ============================\n const parser = useMemo(() => new Parser({\n markedConfig: config,\n paragraphTag,\n openLinksInNewTab,\n components,\n protectCustomTagNewlines,\n escapeRawHtml\n }), [config, paragraphTag, openLinksInNewTab, components, protectCustomTagNewlines, escapeRawHtml]);\n const renderer = useMemo(() => new Renderer({\n components: components,\n dompurifyConfig,\n streaming\n }), [components, dompurifyConfig, streaming]);\n const htmlString = useMemo(() => {\n if (!displayContent) return '';\n return parser.parse(displayContent);\n }, [displayContent, parser]);\n if (!displayContent) return null;\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"div\", {\n className: mergedCls,\n style: style\n }, renderer.render(htmlString)), debug ? /*#__PURE__*/React.createElement(DebugPanel, null) : null);\n});\nif (process.env.NODE_ENV !== 'production') {\n XMarkdown.displayName = 'XMarkdown';\n}\nexport default XMarkdown;","import { Marked } from 'marked';\nexport const other = {\n escapeTestNoEncode: /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/,\n escapeTest: /[&<>\"'/]/,\n notSpaceStart: /^\\S*/,\n endingNewline: /\\n$/,\n escapeReplace: /[&<>\"'/]/g,\n escapeReplaceNoEncode: /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/g,\n completeFencedCode: /^ {0,3}(`{3,}|~{3,})([\\s\\S]*?)\\n {0,3}\\1[ \\n\\t]*$/\n};\nconst escapeReplacements = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '/': '/'\n};\nconst getEscapeReplacement = ch => escapeReplacements[ch];\nexport function escapeHtml(html, encode) {\n if (encode) {\n if (other.escapeTest.test(html)) {\n return html.replace(other.escapeReplace, getEscapeReplacement);\n }\n } else {\n if (other.escapeTestNoEncode.test(html)) {\n return html.replace(other.escapeReplaceNoEncode, getEscapeReplacement);\n }\n }\n return html;\n}\nclass Parser {\n options;\n markdownInstance;\n constructor(options = {}) {\n const {\n markedConfig = {}\n } = options;\n this.options = options;\n this.markdownInstance = new Marked();\n this.configureLinkRenderer();\n this.configureParagraphRenderer();\n this.configureCodeRenderer();\n this.configureHtmlEscapeRenderer();\n // user config at last\n this.markdownInstance.use(markedConfig);\n }\n configureHtmlEscapeRenderer() {\n if (!this.options.escapeRawHtml) return;\n const renderer = {\n html(token) {\n const {\n raw = '',\n text = ''\n } = token;\n return escapeHtml(raw || text, true);\n }\n };\n this.markdownInstance.use({\n renderer\n });\n }\n configureLinkRenderer() {\n if (!this.options.openLinksInNewTab) return;\n const renderer = {\n link({\n href,\n title,\n tokens\n }) {\n const text = this.parser.parseInline(tokens);\n const titleAttr = title ? ` title=\"${title}\"` : '';\n return `<a href=\"${href}\"${titleAttr} target=\"_blank\" rel=\"noopener noreferrer\">${text}</a>`;\n }\n };\n this.markdownInstance.use({\n renderer\n });\n }\n configureParagraphRenderer() {\n const {\n paragraphTag\n } = this.options;\n if (!paragraphTag) return;\n const renderer = {\n paragraph({\n tokens\n }) {\n return `<${paragraphTag}>${this.parser.parseInline(tokens)}</${paragraphTag}>\\n`;\n }\n };\n this.markdownInstance.use({\n renderer\n });\n }\n configureCodeRenderer() {\n const renderer = {\n code({\n text,\n raw,\n lang,\n escaped,\n codeBlockStyle\n }) {\n const infoString = (lang || '').trim();\n const langString = infoString.match(other.notSpaceStart)?.[0];\n const code = `${text.replace(other.endingNewline, '')}\\n`;\n const isIndentedCode = codeBlockStyle === 'indented';\n // if code is indented, it's done because it has no end tag\n const streamStatus = isIndentedCode || other.completeFencedCode.test(raw) ? 'done' : 'loading';\n const escapedCode = escaped ? code : escapeHtml(code, true);\n const classAttr = langString ? ` class=\"language-${escapeHtml(langString)}\"` : '';\n const dataAttrs = ` data-block=\"true\" data-state=\"${streamStatus}\"` + (infoString ? ` data-lang=\"${escapeHtml(infoString)}\"` : '');\n return `<pre><code${dataAttrs}${classAttr}>${escapedCode}</code></pre>\\n`;\n }\n };\n this.markdownInstance.use({\n renderer\n });\n }\n protectCustomTags(content) {\n const placeholders = new Map();\n const customTagNames = Object.keys(this.options.components || {});\n if (customTagNames.length === 0) {\n return {\n protected: content,\n placeholders\n };\n }\n let placeholderIndex = 0;\n const tagNamePattern = customTagNames.map(name => name.toLowerCase().replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')).join('|');\n const openTagRegex = new RegExp(`<(${tagNamePattern})(?:\\\\s[^>]*)?>`, 'gi');\n const closeTagRegex = new RegExp(`</(${tagNamePattern})>`, 'gi');\n const positions = [];\n let match;\n openTagRegex.lastIndex = 0;\n match = openTagRegex.exec(content);\n while (match !== null) {\n positions.push({\n index: match.index,\n type: 'open',\n tagName: match[1].toLowerCase(),\n match: match[0]\n });\n match = openTagRegex.exec(content);\n }\n closeTagRegex.lastIndex = 0;\n match = closeTagRegex.exec(content);\n while (match !== null) {\n positions.push({\n index: match.index,\n type: 'close',\n tagName: match[1].toLowerCase(),\n match: match[0]\n });\n match = closeTagRegex.exec(content);\n }\n positions.sort((a, b) => a.index - b.index);\n const stack = [];\n const result = [];\n let lastIndex = 0;\n positions.forEach(pos => {\n if (pos.type === 'open') {\n // Self-closing tags don't have inner content, so they shouldn't be pushed to the stack.\n if (!pos.match.endsWith('/>')) {\n stack.push({\n tagName: pos.tagName,\n start: pos.index,\n openTag: pos.match\n });\n }\n } else if (pos.type === 'close' && stack.length > 0 && stack[stack.length - 1].tagName === pos.tagName) {\n const open = stack.pop();\n if (stack.length === 0) {\n const startPos = open.start;\n const endPos = pos.index + pos.match.length;\n const openTag = open.openTag;\n const closeTag = pos.match;\n const innerContent = content.slice(startPos + openTag.length, pos.index);\n if (lastIndex < startPos) {\n result.push(content.slice(lastIndex, startPos));\n }\n if (innerContent.includes('\\n\\n')) {\n const protectedInner = innerContent.replace(/\\n\\n/g, () => {\n const ph = `__X_MD_PLACEHOLDER_${placeholderIndex++}__`;\n placeholders.set(ph, '\\n\\n');\n return ph;\n });\n result.push(openTag + protectedInner + closeTag);\n } else {\n result.push(openTag + innerContent + closeTag);\n }\n lastIndex = endPos;\n }\n }\n });\n if (lastIndex < content.length) {\n result.push(content.slice(lastIndex));\n }\n return {\n protected: result.join(''),\n placeholders\n };\n }\n restorePlaceholders(content, placeholders) {\n if (placeholders.size === 0) {\n return content;\n }\n return content.replace(/__X_MD_PLACEHOLDER_\\d+__/g, match => placeholders.get(match) ?? match);\n }\n parse(content) {\n if (this.options.protectCustomTagNewlines) {\n const {\n protected: protectedContent,\n placeholders\n } = this.protectCustomTags(content);\n const parsed = this.markdownInstance.parse(protectedContent);\n return this.restorePlaceholders(parsed, placeholders);\n }\n return this.markdownInstance.parse(content);\n }\n}\nexport default Parser;","import DOMPurify from 'dompurify';\nimport parseHtml, { domToReact } from 'html-react-parser';\nimport React from 'react';\nimport AnimationText from \"../AnimationText\";\nclass Renderer {\n options;\n static NON_WHITESPACE_REGEX = /[^\\r\\n\\s]+/;\n constructor(options) {\n this.options = options;\n }\n\n /**\n * Detect unclosed tags using regular expressions\n */\n detectUnclosedTags(htmlString) {\n const unclosedTags = new Set();\n const stack = [];\n const tagRegex = /<\\/?([a-zA-Z][a-zA-Z0-9-]*)(?:\\s[^>]*)?>/g;\n let match = tagRegex.exec(htmlString);\n while (match !== null) {\n const [fullMatch, tagName] = match;\n const isClosing = fullMatch.startsWith('</');\n const isSelfClosing = fullMatch.endsWith('/>');\n if (this.options.components?.[tagName.toLowerCase()]) {\n if (isClosing) {\n // Found closing tag, pop from stack\n const lastIndex = stack.lastIndexOf(tagName.toLowerCase());\n if (lastIndex !== -1) {\n stack.splice(lastIndex, 1);\n }\n } else if (!isSelfClosing) {\n // Found opening tag, push to stack\n stack.push(tagName.toLowerCase());\n }\n }\n match = tagRegex.exec(htmlString);\n }\n\n // Remaining tags in stack are unclosed\n stack.forEach(tag => {\n unclosedTags.add(tag);\n });\n return unclosedTags;\n }\n\n /**\n * Configure DOMPurify to preserve components and target attributes, filter everything else\n */\n configureDOMPurify() {\n const customComponents = Object.keys(this.options.components || {});\n const userConfig = this.options.dompurifyConfig || {};\n const allowedTags = Array.isArray(userConfig.ADD_TAGS) ? userConfig.ADD_TAGS : [];\n const addAttr = Array.isArray(userConfig.ADD_ATTR) ? userConfig.ADD_ATTR : [];\n return {\n ...userConfig,\n ADD_TAGS: Array.from(new Set([...customComponents, ...allowedTags])),\n ADD_ATTR: Array.from(new Set(['target', 'rel', ...addAttr]))\n };\n }\n createReplaceElement(unclosedTags, cidRef) {\n const {\n enableAnimation,\n animationConfig\n } = this.options.streaming || {};\n return domNode => {\n const key = `x-markdown-component-${cidRef.current++}`;\n\n // Check if it's a text node with data\n const isValidTextNode = domNode.type === 'text' && domNode.data && Renderer.NON_WHITESPACE_REGEX.test(domNode.data);\n // Skip animation for text nodes inside custom components to preserve their internal structure\n const parentTagName = domNode.parent?.name;\n const isParentCustomComponent = parentTagName && this.options.components?.[parentTagName];\n const shouldReplaceText = enableAnimation && isValidTextNode && !isParentCustomComponent;\n if (shouldReplaceText) {\n return /*#__PURE__*/React.createElement(AnimationText, {\n text: domNode.data,\n key,\n animationConfig\n });\n }\n if (!('name' in domNode)) return;\n const {\n name,\n attribs,\n children\n } = domNode;\n const renderElement = this.options.components?.[name];\n if (renderElement) {\n const streamStatus = unclosedTags?.has(name) ? 'loading' : 'done';\n const props = {\n domNode,\n streamStatus,\n key,\n ...attribs,\n ...(attribs.disabled !== undefined && {\n disabled: true\n }),\n ...(attribs.checked !== undefined && {\n checked: true\n })\n };\n\n // Handle class and className merging\n const classes = [props.className, props.classname, props.class].filter(Boolean).join(' ').trim();\n props.className = classes || '';\n if (name === 'code') {\n const {\n 'data-block': block = 'false',\n 'data-state': codeStreamStatus = 'done'\n } = attribs || {};\n props.block = block === 'true';\n props.streamStatus = codeStreamStatus === 'loading' ? 'loading' : 'done';\n const langFromData = attribs?.['data-lang'];\n const langFromClass = attribs?.class?.match(/(?:^|\\s)language-([^\\s]+)/)?.[1] ?? attribs?.class?.match(/(?:^|\\s)lang-([^\\s]+)/)?.[1];\n const lang = langFromData || langFromClass;\n if (lang) {\n props.lang = lang;\n }\n }\n if (children) {\n props.children = this.processChildren(children, unclosedTags, cidRef);\n }\n return /*#__PURE__*/React.createElement(renderElement, props);\n }\n };\n }\n processChildren(children, unclosedTags, cidRef) {\n return domToReact(children, {\n replace: this.createReplaceElement(unclosedTags, cidRef)\n });\n }\n processHtml(htmlString) {\n const unclosedTags = this.detectUnclosedTags(htmlString);\n const cidRef = {\n current: 0\n };\n\n // Use DOMPurify to clean HTML while preserving custom components and target attributes\n const purifyConfig = this.configureDOMPurify();\n const cleanHtml = DOMPurify.sanitize(htmlString, purifyConfig);\n return parseHtml(cleanHtml, {\n replace: this.createReplaceElement(unclosedTags, cidRef)\n });\n }\n render(html) {\n return this.processHtml(html);\n }\n}\nexport default Renderer;","import React, { useEffect, useMemo, useRef, useState } from 'react';\nconst AnimationText = /*#__PURE__*/React.memo(props => {\n const {\n text,\n animationConfig\n } = props;\n const {\n fadeDuration = 200,\n easing = 'ease-in-out'\n } = animationConfig || {};\n const [chunks, setChunks] = useState([]);\n const prevTextRef = useRef('');\n useEffect(() => {\n if (text === prevTextRef.current) return;\n if (!(prevTextRef.current && text.indexOf(prevTextRef.current) === 0)) {\n setChunks([text]);\n prevTextRef.current = text;\n return;\n }\n const newText = text.slice(prevTextRef.current.length);\n if (!newText) return;\n setChunks(prev => [...prev, newText]);\n prevTextRef.current = text;\n }, [text]);\n const animationStyle = useMemo(() => ({\n animation: `x-markdown-fade-in ${fadeDuration}ms ${easing} forwards`,\n color: 'inherit'\n }), [fadeDuration, easing]);\n return /*#__PURE__*/React.createElement(React.Fragment, null, chunks.map((text, index) => /*#__PURE__*/React.createElement(\"span\", {\n style: animationStyle,\n key: `animation-text-${index}`\n }, text)));\n});\nexport default AnimationText;","import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport \"./DebugPanel.css\";\nconst CONSTANTS = {\n FPS_THRESHOLD: {\n GOOD: 55,\n WARNING: 40\n },\n COLORS: {\n GOOD: '#52c41a',\n WARNING: '#faad14',\n DANGER: '#ff4d4f'\n },\n CHART: {\n WIDTH: 750,\n HEIGHT: 400,\n PADDING: 80\n }\n};\nconst getInitialPosition = () => {\n if (typeof window === 'undefined') {\n return {\n x: 12,\n y: 12\n };\n }\n return {\n x: window.innerWidth - 220,\n y: window.innerHeight / 2 - 100\n };\n};\nconst DebugPanel = () => {\n const [fps, setFps] = useState(0);\n const [memory, setMemory] = useState(0);\n const [isRecording, setIsRecording] = useState(false);\n const [showModal, setShowModal] = useState(false);\n const [records, setRecords] = useState([]);\n const [position, setPosition] = useState(getInitialPosition());\n const [isMounted, setIsMounted] = useState(false);\n const recordingRef = useRef([]);\n const frameTimesRef = useRef([]);\n const lastTimeRef = useRef(0);\n const frameCountRef = useRef(0);\n const animationRef = useRef(undefined);\n const dragRef = useRef({\n isDragging: false,\n startX: 0,\n startY: 0,\n initialX: 0,\n initialY: 0\n });\n useEffect(() => {\n // 仅在客户端运行\n if (typeof window === 'undefined') return;\n\n // 仅在客户端初始化\n if (!isMounted) {\n setIsMounted(true);\n lastTimeRef.current = performance.now();\n }\n const update = () => {\n const now = performance.now();\n const delta = now - lastTimeRef.current;\n frameTimesRef.current.push(delta);\n if (frameTimesRef.current.length > 60) frameTimesRef.current.shift();\n frameCountRef.current++;\n if (delta >= 1000) {\n const currentFps = Math.round(frameCountRef.current * 1000 / delta);\n const currentMemory = getMemoryUsage();\n setFps(currentFps);\n setMemory(currentMemory);\n if (isRecording) {\n recordingRef.current.push({\n timestamp: Date.now(),\n fps: currentFps,\n memory: currentMemory\n });\n }\n frameCountRef.current = 0;\n lastTimeRef.current = now;\n }\n animationRef.current = requestAnimationFrame(update);\n };\n animationRef.current = requestAnimationFrame(update);\n return () => {\n if (animationRef.current !== undefined) {\n cancelAnimationFrame(animationRef.current);\n }\n };\n }, [isRecording, isMounted]);\n const getMemoryUsage = () => {\n const perf = performance;\n return perf.memory ? Math.round(perf.memory.usedJSHeapSize / 1024 / 1024) : 0;\n };\n const formatMemory = mb => {\n if (mb < 1) return `${Math.round(mb * 1024)} KB`;\n if (mb >= 1024) return `${(mb / 1024).toFixed(2)} GB`;\n return `${mb.toFixed(2)} MB`;\n };\n const getFpsColor = value => {\n if (value >= CONSTANTS.FPS_THRESHOLD.GOOD) return CONSTANTS.COLORS.GOOD;\n if (value >= CONSTANTS.FPS_THRESHOLD.WARNING) return CONSTANTS.COLORS.WARNING;\n return CONSTANTS.COLORS.DANGER;\n };\n const toggleRecording = useCallback(() => {\n if (isRecording) {\n setIsRecording(false);\n setRecords([...recordingRef.current]);\n setShowModal(true);\n } else {\n recordingRef.current = [];\n setIsRecording(true);\n }\n }, [isRecording]);\n const handleMouseDown = useCallback(e => {\n if (e.target.closest('.x-markdown-debug-action')) return;\n dragRef.current = {\n isDragging: true,\n startX: e.clientX,\n startY: e.clientY,\n initialX: position.x,\n initialY: position.y\n };\n }, [position]);\n const handleMouseMove = useCallback(e => {\n if (!dragRef.current.isDragging) return;\n const dx = e.clientX - dragRef.current.startX;\n const dy = e.clientY - dragRef.current.startY;\n setPosition({\n x: dragRef.current.initialX + dx,\n y: dragRef.current.initialY + dy\n });\n }, []);\n const handleMouseUp = useCallback(() => {\n dragRef.current.isDragging = false;\n }, []);\n useEffect(() => {\n // 仅在客户端运行\n if (typeof window === 'undefined') return;\n document.addEventListener('mousemove', handleMouseMove);\n document.addEventListener('mouseup', handleMouseUp);\n return () => {\n document.removeEventListener('mousemove', handleMouseMove);\n document.removeEventListener('mouseup', handleMouseUp);\n };\n }, [handleMouseMove, handleMouseUp]);\n const PerformanceChart = () => {\n if (!records.length) return null;\n const {\n WIDTH,\n HEIGHT,\n PADDING\n } = CONSTANTS.CHART;\n const chartWidth = WIDTH - PADDING * 2;\n const chartHeight = HEIGHT - PADDING * 2;\n const startTime = records[0]?.timestamp ?? 0;\n const endTime = records[records.length - 1]?.timestamp ?? 0;\n const duration = endTime - startTime || 1;\n const maxFps = Math.max(...records.map(r => r.fps), 60);\n const maxMemory = Math.max(...records.map(r => r.memory), 0) * 1.1;\n const avgFps = records.length > 0 ? records.reduce((sum, r) => sum + r.fps, 0) / records.length : 0;\n const avgMemory = records.length > 0 ? records.reduce((sum, r) => sum + r.memory, 0) / records.length : 0;\n const minFps = records.length > 0 ? Math.min(...records.map(r => r.fps)) : 0;\n const maxFpsValue = records.length > 0 ? Math.max(...records.map(r => r.fps)) : 0;\n const createPoints = (key, max) => records.map(r => {\n const x = PADDING + (r.timestamp - startTime) / duration * chartWidth;\n const y = PADDING + chartHeight - r[key] / max * chartHeight;\n return `${x},${y}`;\n }).join(' ');\n return /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-modal-content\"\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-stats-summary\"\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-stat-item\"\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-stat-label\"\n }, \"Duration\"), /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-stat-value\"\n }, (duration / 1000).toFixed(2), \"s\")), /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-stat-item\"\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-stat-label\"\n }, \"FPS Avg\"), /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-stat-value\",\n style: {\n color: getFpsColor(avgFps)\n }\n }, avgFps.toFixed(1))), /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-stat-item\"\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-stat-label\"\n }, \"FPS Range\"), /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-stat-value\"\n }, minFps, \" - \", maxFpsValue)), /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-stat-item\"\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-stat-label\"\n }, \"Memory Avg\"), /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-stat-value\"\n }, formatMemory(avgMemory)))), /*#__PURE__*/React.createElement(\"svg\", {\n width: WIDTH,\n height: HEIGHT,\n className: \"x-markdown-debug-chart-full\",\n role: \"img\",\n \"aria-label\": \"Performance chart showing FPS and memory usage over time\"\n }, /*#__PURE__*/React.createElement(\"title\", null, \"Performance Chart\"), [0, 0.25, 0.5, 0.75, 1].map(ratio => /*#__PURE__*/React.createElement(\"g\", {\n key: ratio\n }, /*#__PURE__*/React.createElement(\"line\", {\n x1: PADDING,\n y1: PADDING + chartHeight * ratio,\n x2: WIDTH - PADDING,\n y2: PADDING + chartHeight * ratio,\n stroke: \"rgba(255,255,255,0.1)\",\n strokeWidth: \"1\"\n }), /*#__PURE__*/React.createElement(\"line\", {\n x1: PADDING + chartWidth * ratio,\n y1: PADDING,\n x2: PADDING + chartWidth * ratio,\n y2: HEIGHT - PADDING,\n stroke: \"rgba(255,255,255,0.1)\",\n strokeWidth: \"1\"\n }))), /*#__PURE__*/React.createElement(\"polyline\", {\n points: createPoints('fps', maxFps),\n fill: \"none\",\n stroke: CONSTANTS.COLORS.GOOD,\n strokeWidth: \"2\",\n className: \"fps-line\"\n }), /*#__PURE__*/React.createElement(\"polyline\", {\n points: createPoints('memory', maxMemory),\n fill: \"none\",\n stroke: \"#1890ff\",\n strokeWidth: \"2\",\n className: \"memory-line\"\n }), /*#__PURE__*/React.createElement(\"text\", {\n x: PADDING - 10,\n y: PADDING,\n fill: CONSTANTS.COLORS.GOOD,\n fontSize: \"12\",\n textAnchor: \"end\"\n }, maxFps.toFixed(0)), /*#__PURE__*/React.createElement(\"text\", {\n x: PADDING - 10,\n y: HEIGHT - PADDING,\n fill: CONSTANTS.COLORS.GOOD,\n fontSize: \"12\",\n textAnchor: \"end\"\n }, \"0\"), /*#__PURE__*/React.createElement(\"text\", {\n x: PADDING - 10,\n y: PADDING - 15,\n fill: CONSTANTS.COLORS.GOOD,\n fontSize: \"14\",\n fontWeight: \"bold\",\n textAnchor: \"end\"\n }, \"FPS\"), /*#__PURE__*/React.createElement(\"text\", {\n x: WIDTH - PADDING + 10,\n y: PADDING + 20,\n fill: \"#1890ff\",\n fontSize: \"12\",\n textAnchor: \"start\"\n }, formatMemory(maxMemory)), /*#__PURE__*/React.createElement(\"text\", {\n x: WIDTH - PADDING + 10,\n y: HEIGHT - PADDING,\n fill: \"#1890ff\",\n fontSize: \"12\",\n textAnchor: \"start\"\n }, formatMemory(0)), /*#__PURE__*/React.createElement(\"text\", {\n x: WIDTH - PADDING + 10,\n y: PADDING + 5,\n fill: \"#1890ff\",\n fontSize: \"14\",\n fontWeight: \"bold\",\n textAnchor: \"start\"\n }, \"Memory\"), /*#__PURE__*/React.createElement(\"text\", {\n x: PADDING,\n y: HEIGHT - PADDING + 20,\n fill: \"rgba(255,255,255,0.6)\",\n fontSize: \"12\",\n textAnchor: \"middle\"\n }, \"0s\"), /*#__PURE__*/React.createElement(\"text\", {\n x: WIDTH - PADDING,\n y: HEIGHT - PADDING + 20,\n fill: \"rgba(255,255,255,0.6)\",\n fontSize: \"12\",\n textAnchor: \"middle\"\n }, (duration / 1000).toFixed(1), \"s\")), /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-legend\"\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-legend-item\"\n }, /*#__PURE__*/React.createElement(\"span\", {\n className: \"x-markdown-debug-legend-color\",\n style: {\n backgroundColor: CONSTANTS.COLORS.GOOD\n }\n }), /*#__PURE__*/React.createElement(\"span\", null, \"FPS\")), /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-legend-item\"\n }, /*#__PURE__*/React.createElement(\"span\", {\n className: \"x-markdown-debug-legend-color\",\n style: {\n backgroundColor: '#1890ff'\n }\n }), /*#__PURE__*/React.createElement(\"span\", null, \"Memory\"))));\n };\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-panel\",\n style: {\n left: position.x,\n top: position.y,\n cursor: dragRef.current.isDragging ? 'grabbing' : 'grab'\n },\n onMouseDown: handleMouseDown\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-row\"\n }, /*#__PURE__*/React.createElement(\"span\", {\n className: \"x-markdown-debug-label\"\n }, \"FPS\"), /*#__PURE__*/React.createElement(\"span\", {\n className: \"x-markdown-debug-value\",\n style: {\n color: getFpsColor(fps)\n }\n }, fps)), /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-row\"\n }, /*#__PURE__*/React.createElement(\"span\", {\n className: \"x-markdown-debug-label\"\n }, \"Memory\"), /*#__PURE__*/React.createElement(\"span\", {\n className: \"x-markdown-debug-value\"\n }, formatMemory(memory))), /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-actions\"\n }, /*#__PURE__*/React.createElement(\"button\", {\n type: \"button\",\n className: `x-markdown-debug-action x-markdown-debug-record-btn ${isRecording ? 'recording' : ''}`,\n onClick: toggleRecording\n }, isRecording ? '⏹ Stop' : '⏺ Record'), records.length > 0 && !isRecording && /*#__PURE__*/React.createElement(\"button\", {\n type: \"button\",\n className: \"x-markdown-debug-action\",\n onClick: () => setShowModal(true)\n }, \"\\uD83D\\uDCCA View\"))), showModal && records.length > 0 ? /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-modal-overlay\",\n onClick: () => setShowModal(false)\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-modal\",\n onClick: e => e.stopPropagation()\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-modal-header\"\n }, /*#__PURE__*/React.createElement(\"span\", {\n style: {\n color: '#fff',\n fontSize: 18,\n fontWeight: '600'\n }\n }, \"Performance Recording\"), /*#__PURE__*/React.createElement(\"button\", {\n type: \"button\",\n className: \"x-markdown-debug-close-btn\",\n onClick: () => setShowModal(false)\n }, \"\\u2715\")), /*#__PURE__*/React.createElement(PerformanceChart, null))) : null);\n};\nexport default DebugPanel;","import { useCallback, useEffect, useRef, useState } from 'react';\nimport { StreamCacheTokenType } from \"../interface\";\n\n/* ------------ Type ------------ */\n\n/**\n * When a token is about to be committed, if a non-empty string is returned,\n * only that prefix is committed and the rest of the pending content is left\n * for subsequent recognition (used for handover scenarios like list followed by `).\n * Returns null to commit the entire pending content by default.\n */\n\n/* ------------ Constants ------------ */\n// Validates whether a token is still incomplete in the streaming context.\n// Returns true if the token is syntactically incomplete; false if it is complete or invalid.\nconst STREAM_INCOMPLETE_REGEX = {\n image: [/^!\\[[^\\]\\r\\n]{0,1000}$/, /^!\\[[^\\r\\n]{0,1000}\\]\\(*[^)\\r\\n]{0,1000}$/],\n link: [/^\\[[^\\]\\r\\n]{0,1000}$/, /^\\[[^\\r\\n]{0,1000}\\]\\(*[^)\\r\\n]{0,1000}$/],\n html: [/^<\\/$/, /^<\\/?[a-zA-Z][a-zA-Z0-9-]{0,100}[^>\\r\\n]{0,1000}$/],\n commonEmphasis: [/^(\\*{1,3}|_{1,3})(?!\\s)(?!.*\\1$)[^\\r\\n]{0,1000}$/],\n // regex2 matches cases like \"- **\" (list item with emphasis start).\n list: [/^[-+*]\\s{0,3}$/, /^[-+*]\\s{1,3}(\\*{1,3}|_{1,3})(?!\\s)(?!.*\\1$)[^\\r\\n]{0,1000}$/],\n 'inline-code': [/^`[^`\\r\\n]{0,300}$/]\n};\nconst isTableInComplete = markdown => {\n if (markdown.includes('\\n\\n')) return false;\n const lines = markdown.split('\\n');\n if (lines.length <= 1) return true;\n const [header, separator] = lines;\n const trimmedHeader = header.trim();\n if (!/^\\|.*\\|$/.test(trimmedHeader)) return false;\n const trimmedSeparator = separator.trim();\n const columns = trimmedSeparator.split('|').map(col => col.trim()).filter(Boolean);\n const separatorRegex = /^:?-+:?$/;\n return columns.every((col, index) => index === columns.length - 1 ? col === ':' || separatorRegex.test(col) : separatorRegex.test(col));\n};\nconst tokenRecognizerMap = {\n [StreamCacheTokenType.Link]: {\n tokenType: StreamCacheTokenType.Link,\n isStartOfToken: markdown => markdown.startsWith('['),\n isStreamingValid: markdown => STREAM_INCOMPLETE_REGEX.link.some(re => re.test(markdown))\n },\n [StreamCacheTokenType.Image]: {\n tokenType: StreamCacheTokenType.Image,\n isStartOfToken: markdown => markdown.startsWith('!'),\n isStreamingValid: markdown => STREAM_INCOMPLETE_REGEX.image.some(re => re.test(markdown))\n },\n [StreamCacheTokenType.Html]: {\n tokenType: StreamCacheTokenType.Html,\n isStartOfToken: markdown => markdown.startsWith('<'),\n isStreamingValid: markdown => STREAM_INCOMPLETE_REGEX.html.some(re => re.test(markdown))\n },\n [StreamCacheTokenType.Emphasis]: {\n tokenType: StreamCacheTokenType.Emphasis,\n isStartOfToken: markdown => markdown.startsWith('*') || markdown.startsWith('_'),\n isStreamingValid: markdown => STREAM_INCOMPLETE_REGEX.commonEmphasis.some(re => re.test(markdown))\n },\n [StreamCacheTokenType.List]: {\n tokenType: StreamCacheTokenType.List,\n isStartOfToken: markdown => /^[-+*]/.test(markdown),\n isStreamingValid: markdown => STREAM_INCOMPLETE_REGEX.list.some(re => re.test(markdown)),\n // On backtick after list, commit only the prefix; treat the rest as inline code.\n getCommitPrefix: pending => {\n const listPrefix = pending.match(/^([-+*]\\s{0,3})/)?.[1];\n const rest = listPrefix ? pending.slice(listPrefix.length) : '';\n return listPrefix && rest.startsWith('`') ? listPrefix : null;\n }\n },\n [StreamCacheTokenType.Table]: {\n tokenType: StreamCacheTokenType.Table,\n isStartOfToken: markdown => markdown.startsWith('|'),\n isStreamingValid: isTableInComplete\n },\n [StreamCacheTokenType.InlineCode]: {\n tokenType: StreamCacheTokenType.InlineCode,\n isStartOfToken: markdown => markdown.startsWith('`'),\n isStreamingValid: markdown => STREAM_INCOMPLETE_REGEX['inline-code'].some(re => re.test(markdown))\n }\n};\nconst recognize = (cache, tokenType) => {\n const recognizer = tokenRecognizerMap[tokenType];\n if (!recognizer) return;\n const {\n token,\n pending\n } = cache;\n if (token === StreamCacheTokenType.Text && recognizer.isStartOfToken(pending)) {\n cache.token = tokenType;\n return;\n }\n if (token === tokenType && !recognizer.isStreamingValid(pending)) {\n const prefix = recognizer.getCommitPrefix?.(pending);\n if (prefix) {\n cache.completeMarkdown += prefix;\n cache.pending = pending.slice(prefix.length);\n cache.token = StreamCacheTokenType.Text;\n return;\n }\n commitCache(cache);\n }\n};\nconst recognizeHandlers = Object.values(tokenRecognizerMap).map(rec => ({\n tokenType: rec.tokenType,\n recognize: cache => recognize(cache, rec.tokenType)\n}));\n\n/* ------------ Utils ------------ */\nconst getInitialCache = () => ({\n pending: '',\n token: StreamCacheTokenType.Text,\n processedLength: 0,\n completeMarkdown: ''\n});\nconst commitCache = cache => {\n if (cache.pending) {\n cache.completeMarkdown += cache.pending;\n cache.pending = '';\n }\n cache.token = StreamCacheTokenType.Text;\n};\nconst isInCodeBlock = (text, isFinalChunk = false) => {\n const lines = text.split('\\n');\n let inFenced = false;\n let fenceChar = '';\n let fenceLen = 0;\n for (let i = 0; i < lines.length; i++) {\n const rawLine = lines[i];\n const line = rawLine.endsWith('\\r') ? rawLine.slice(0, -1) : rawLine;\n const match = line.match(/^(`{3,}|~{3,})(.*)$/);\n if (match) {\n const fence = match[1];\n const after = match[2];\n const char = fence[0];\n const len = fence.length;\n if (!inFenced) {\n inFenced = true;\n fenceChar = char;\n fenceLen = len;\n } else {\n // Check if this is a valid closing fence\n const isValidEnd = char === fenceChar && len >= fenceLen && /^\\s*$/.test(after);\n if (isValidEnd) {\n // In streaming context, only close if this is the final chunk\n // or if there are more lines after this fence\n if (isFinalChunk || i < lines.length - 1) {\n inFenced = false;\n fenceChar = '';\n fenceLen = 0;\n }\n // Otherwise, keep the fence open for potential streaming continuation\n }\n }\n }\n }\n return inFenced;\n};\nconst sanitizeForURIComponent = input => {\n let result = '';\n for (let i = 0; i < input.length; i++) {\n const charCode = input.charCodeAt(i);\n\n // 处理代理对:保留合法,跳过孤立\n if (charCode >= 0xd800 && charCode <= 0xdbff) {\n // High surrogate\n // Check for a following low surrogate to form a valid pair\n if (i + 1 < input.length && input.charCodeAt(i + 1) >= 0xdc00 && input.charCodeAt(i + 1) <= 0xdfff) {\n result += input[i] + input[i + 1];\n i++; // Skip the low surrogate as it's already processed\n }\n // Lone high surrogates are otherwise skipped\n } else if (charCode < 0xdc00 || charCode > 0xdfff) {\n // Append characters that are not lone low surrogates\n result += input[i];\n }\n // Lone low surrogates are otherwise skipped\n }\n return result;\n};\nconst safeEncodeURIComponent = str => {\n try {\n return encodeURIComponent(str);\n } catch (e) {\n if (e instanceof URIError) {\n return encodeURIComponent(sanitizeForURIComponent(str));\n }\n return '';\n }\n};\n\n/* ------------ Main Hook ------------ */\nconst useStreaming = (input, config) => {\n const {\n streaming,\n components = {}\n } = config || {};\n const {\n hasNextChunk: enableCache = false,\n incompleteMarkdownComponentMap\n } = streaming || {};\n const [output, setOutput] = useState('');\n const cacheRef = useRef(getInitialCache());\n const handleIncompleteMarkdown = useCallback(cache => {\n const {\n token,\n pending\n } = cache;\n if (token === StreamCacheTokenType.Text) return;\n /**\n * An image tag starts with '!', if it's the only character, it's incomplete and should be stripped.\n * !\n * ^\n */\n if (token === StreamCacheTokenType.Image && pending === '!') return undefined;\n\n /**\n * If a table has more than two lines (header, separator, and at least one row),\n * it's considered complete enough to not be replaced by a placeholder.\n * | column1 | column2 |\\n| -- | --|\\n\n * ^\n */\n if (token === StreamCacheTokenType.Table && pending.split('\\n').length > 2) {\n return pending;\n }\n const componentMap = incompleteMarkdownComponentMap || {};\n const componentName = componentMap[token] || `incomplete-${token}`;\n const encodedPending = safeEncodeURIComponent(pending);\n return components?.[componentName] ? `<${componentName} data-raw=\"${encodedPending}\" />` : undefined;\n }, [incompleteMarkdownComponentMap, components]);\n const processStreaming = useCallback(text => {\n if (!text) {\n setOutput('');\n cacheRef.current = getInitialCache();\n return;\n }\n const expectedPrefix = cacheRef.current.completeMarkdown + cacheRef.current.pending;\n // Reset cache if input doesn't continue from previous state\n if (!text.startsWith(expectedPrefix)) {\n cacheRef.current = getInitialCache();\n }\n const cache = cacheRef.current;\n const chunk = text.slice(cache.processedLength);\n if (!chunk) return;\n cache.processedLength += chunk.length;\n for (const char of chunk) {\n cache.pending += char;\n const isContentInCodeBlock = isInCodeBlock(cache.completeMarkdown + cache.pending);\n if (isContentInCodeBlock) {\n commitCache(cache);\n continue;\n }\n if (cache.token === StreamCacheTokenType.Text) {\n for (const handler of recognizeHandlers) handler.recognize(cache);\n } else {\n const handler = recognizeHandlers.find(handler => handler.tokenType === cache.token);\n handler?.recognize(cache);\n // After commit (e.g. list → Text), re-run all recognizers so pending (e.g. \"`\") becomes the new token (e.g. inline-code)\n const tokenAfterRecognize = cache.token;\n if (tokenAfterRecognize === StreamCacheTokenType.Text) {\n for (const h of recognizeHandlers) h.recognize(cache);\n }\n }\n if (cache.token === StreamCacheTokenType.Text) {\n commitCache(cache);\n }\n }\n const incompletePlaceholder = handleIncompleteMarkdown(cache);\n setOutput(cache.completeMarkdown + (incompletePlaceholder || ''));\n }, [handleIncompleteMarkdown]);\n useEffect(() => {\n if (typeof input !== 'string') {\n console.error(`X-Markdown: input must be string, not ${typeof input}.`);\n setOutput('');\n return;\n }\n enableCache ? processStreaming(input) : setOutput(input);\n }, [input, enableCache, processStreaming]);\n return output;\n};\nexport default useStreaming;","export let StreamCacheTokenType = /*#__PURE__*/function (StreamCacheTokenType) {\n StreamCacheTokenType[\"Text\"] = \"text\";\n StreamCacheTokenType[\"Link\"] = \"link\";\n StreamCacheTokenType[\"Image\"] = \"image\";\n StreamCacheTokenType[\"Html\"] = \"html\";\n StreamCacheTokenType[\"Emphasis\"] = \"emphasis\";\n StreamCacheTokenType[\"List\"] = \"list\";\n StreamCacheTokenType[\"Table\"] = \"table\";\n StreamCacheTokenType[\"InlineCode\"] = \"inline-code\";\n return StreamCacheTokenType;\n}({});","import XMarkdown, { type ComponentProps, type XMarkdownProps } from \"@ant-design/x-markdown\";\nimport React from \"react\";\n\nexport interface WidgetMarkdownProps {\n content: unknown;\n className?: string;\n unsupportedLabel?: string;\n}\n\nfunction safeUrl(value: unknown): string | null {\n if (typeof value !== \"string\") return null;\n try {\n const url = new URL(value, \"https://axiom.invalid\");\n return url.protocol === \"http:\" || url.protocol === \"https:\" || url.protocol === \"mailto:\" ? value : null;\n } catch {\n return null;\n }\n}\n\nconst SafeLink: React.FC<ComponentProps<{ href?: string }>> = ({ href, children }) => {\n const safeHref = safeUrl(href);\n return safeHref ? <a href={safeHref} target=\"_blank\" rel=\"noopener noreferrer\">{children}</a> : <span>{children}</span>;\n};\n\nconst SafeImage: React.FC<ComponentProps<{ src?: string; alt?: string }>> = ({ src, alt }) => {\n const safeHref = safeUrl(src);\n const label = alt?.trim() || \"Image\";\n return safeHref ? <a href={safeHref} target=\"_blank\" rel=\"noopener noreferrer\">{label}</a> : <span>{label}</span>;\n};\n\nconst SafeCode: React.FC<ComponentProps> = ({ children }) => <code>{children}</code>;\n\nconst REVIEWED_MARKDOWN_COMPONENTS = Object.freeze<XMarkdownProps[\"components\"]>({\n a: SafeLink,\n code: SafeCode,\n img: SafeImage,\n});\n\nexport function WidgetMarkdown({ content, className, unsupportedLabel = \"Unsupported message content\" }: WidgetMarkdownProps): React.ReactElement {\n if (typeof content !== \"string\") return <span className={className}>{unsupportedLabel}</span>;\n return <XMarkdown className={className} content={content} components={REVIEWED_MARKDOWN_COMPONENTS} paragraphTag=\"div\" escapeRawHtml />;\n}\n","import React from \"react\";\nimport type { AgentWebAppGenUIBlock } from \"../types\";\n\nexport interface WidgetGenUIRendererProps { block: AgentWebAppGenUIBlock }\n\n/** Immutable semantic renderer for the reviewed V1 declarative widget allowlist. */\nexport function WidgetGenUIRenderer({ block }: WidgetGenUIRendererProps): React.ReactElement {\n const widget = block.widget;\n if (widget.kind === \"callout\") {\n return <aside className={`axiom-web-app__callout axiom-web-app__callout--${widget.tone ?? \"info\"}`} aria-label={widget.title ?? \"Callout\"}>\n {widget.title && <strong>{widget.title}</strong>}<p>{widget.text}</p>\n </aside>;\n }\n return <table className=\"axiom-web-app__data-table\" aria-label={widget.caption ?? \"Data table\"}>\n {widget.caption && <caption>{widget.caption}</caption>}\n <thead><tr>{widget.columns.map((column, index) => <th key={`${index}-${column}`} scope=\"col\">{column}</th>)}</tr></thead>\n <tbody>{widget.rows.map((row, rowIndex) => <tr key={rowIndex}>{row.map((cell, columnIndex) => <td key={columnIndex}>{cell}</td>)}</tr>)}</tbody>\n </table>;\n}\n","import React from \"react\";\nimport type { AgentWebAppRuntimeMessage } from \"../types\";\nimport { useWidgetChat } from \"../hooks/useWidgetChat\";\nimport { WidgetMarkdown } from \"./WidgetMarkdown\";\nimport { WidgetGenUIRenderer } from \"./WidgetGenUIRenderer\";\n\nexport interface WidgetMessageListProps { className?: string; listLabel?: string; emptyLabel?: string; toolActivityLabel?: string; emptySlot?: React.ReactNode; }\n\nfunction roleName(message: AgentWebAppRuntimeMessage): string {\n if (message.role === \"human\") return \"You\";\n if (message.role === \"ai\") return \"Assistant\";\n return message.role;\n}\n\nexport function WidgetMessageList({ className, listLabel = \"Messages\", emptyLabel = \"Start a conversation\", toolActivityLabel = \"Activity\", emptySlot }: WidgetMessageListProps): React.ReactElement {\n const { messages, tools, isLoading } = useWidgetChat();\n return <div className={`axiom-web-app__message-area${className ? ` ${className}` : \"\"}`}><div className=\"axiom-web-app__messages\" role=\"log\" aria-label={listLabel} aria-live=\"polite\">{!isLoading && messages.length === 0 && (emptySlot || <p className=\"axiom-web-app__empty\">{emptyLabel}</p>)}{messages.map((message) => <article className={`axiom-web-app__message axiom-web-app__message--${message.role}`} key={message.id}><span className=\"axiom-web-app__message-role\">{roleName(message)}</span><div className=\"axiom-web-app__message-content\">{Array.isArray(message.content) ? message.content.map((block, index) => <WidgetGenUIRenderer key={index} block={block} />) : <WidgetMarkdown content={message.content ?? \"\"} />}</div></article>)}</div>{tools.length > 0 && <section className=\"axiom-web-app__tools\" aria-label={toolActivityLabel}>{tools.map((tool) => <div className=\"axiom-web-app__tool\" key={tool.id}><span aria-hidden=\"true\">{tool.status === \"running\" ? \"...\" : \"OK\"}</span> {tool.name || \"Tool\"}</div>)}</section>}</div>;\n}\n","import React, { useState } from \"react\";\nimport { useWidgetProject } from \"../hooks/useWidgetProject\";\nimport { widgetErrorMessage } from \"./widget-utils\";\n\nexport interface WidgetModelSelectorProps { className?: string; label?: string; }\n\nexport function WidgetModelSelector({ className, label = \"Model\" }: WidgetModelSelectorProps): React.ReactElement | null {\n const { bootstrap, modelKey, selectModel, isLoading } = useWidgetProject();\n const [error, setError] = useState<string | null>(null);\n if (!bootstrap?.webApp.features.modelSelector) return null;\n const select = (key: string): void => {\n setError(null);\n try { selectModel(key); } catch (selectionError) { setError(widgetErrorMessage(selectionError)); }\n };\n return <div className={className}><label className=\"axiom-web-app__field\"><span>{label}</span><select aria-label={label} value={modelKey ?? \"\"} disabled={isLoading} onChange={(event) => select(event.target.value)}>{bootstrap.models.map((model) => <option key={model.key} value={model.key}>{model.label}</option>)}</select></label>{error && <p className=\"axiom-web-app__error\" role=\"alert\">{error}</p>}</div>;\n}\n","import React, { useRef, useState } from \"react\";\nimport { useWidgetProject } from \"../hooks/useWidgetProject\";\nimport { widgetErrorMessage } from \"./widget-utils\";\n\nexport interface WidgetProjectSelectorProps { className?: string; label?: string; }\n\nexport function WidgetProjectSelector({ className, label = \"Project\" }: WidgetProjectSelectorProps): React.ReactElement | null {\n const { bootstrap, projectId, selectProject, isLoading } = useWidgetProject();\n const pendingRef = useRef(false);\n const [pending, setPending] = useState(false);\n const [error, setError] = useState<string | null>(null);\n if (!bootstrap?.webApp.features.projectSelector) return null;\n const select = async (id: string): Promise<void> => {\n if (pendingRef.current) return;\n pendingRef.current = true; setPending(true); setError(null);\n try { await selectProject(id); }\n catch (selectionError) { setError(widgetErrorMessage(selectionError)); }\n finally { pendingRef.current = false; setPending(false); }\n };\n return <div className={className}><label className=\"axiom-web-app__field\"><span>{label}</span><select aria-label={label} value={projectId ?? \"\"} disabled={isLoading || pending} onChange={(event) => void select(event.target.value)}>{bootstrap.projects.map((project) => <option key={project.id} value={project.id}>{project.name}</option>)}</select></label>{error && <p className=\"axiom-web-app__error\" role=\"alert\">{error}</p>}</div>;\n}\n","import React, { useRef, useState } from \"react\";\nimport { Modal } from \"antd\";\nimport type { AgentWebAppRuntimeThread } from \"../types\";\nimport { useWidgetProject } from \"../hooks/useWidgetProject\";\nimport { useWidgetThreads } from \"../hooks/useWidgetThreads\";\nimport { widgetErrorMessage } from \"./widget-utils\";\n\nexport interface WidgetThreadListProps { className?: string; navigationLabel?: string; newThreadLabel?: string; emptyLabel?: string; }\nfunction threadName(thread: AgentWebAppRuntimeThread, index: number): string { return thread.label?.trim() || `Conversation ${index + 1}`; }\n\nexport function WidgetThreadList({ className, navigationLabel = \"Conversations\", newThreadLabel = \"New conversation\", emptyLabel = \"No conversations yet\" }: WidgetThreadListProps): React.ReactElement | null {\n const { bootstrap } = useWidgetProject();\n const { threads, activeThread, isLoading, selectThread, createThread, renameThread, deleteThread } = useWidgetThreads();\n const pendingRef = useRef(false);\n const [pending, setPending] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [renameTarget, setRenameTarget] = useState<AgentWebAppRuntimeThread | null>(null);\n const [renameValue, setRenameValue] = useState(\"\");\n const [deleteTarget, setDeleteTarget] = useState<AgentWebAppRuntimeThread | null>(null);\n if (!bootstrap?.webApp.features.threadManagement) return null;\n const run = async (operation: () => Promise<unknown>, complete?: () => void): Promise<void> => {\n if (pendingRef.current) return;\n pendingRef.current = true; setPending(true); setError(null);\n try { await operation(); complete?.(); }\n catch (operationError) { setError(widgetErrorMessage(operationError)); }\n finally { pendingRef.current = false; setPending(false); }\n };\n return <nav className={`axiom-web-app__sidebar${className ? ` ${className}` : \"\"}`} aria-label={navigationLabel}>{error && <p className=\"axiom-web-app__error\" role=\"alert\">{error}</p>}<button className=\"axiom-web-app__new-thread\" type=\"button\" disabled={isLoading || pending} onClick={() => void run(() => createThread())}>{newThreadLabel}</button><div className=\"axiom-web-app__thread-list\">{!isLoading && threads.length === 0 && <p className=\"axiom-web-app__empty\">{emptyLabel}</p>}{threads.map((thread, index) => { const name = threadName(thread, index); return <div className={`axiom-web-app__thread${activeThread?.id === thread.id ? \" axiom-web-app__thread--active\" : \"\"}`} key={thread.id}><button type=\"button\" disabled={pending} className=\"axiom-web-app__thread-select\" aria-label={`Open ${name}`} aria-current={activeThread?.id === thread.id ? \"page\" : undefined} onClick={() => void run(() => selectThread(thread))}><span className=\"axiom-web-app__thread-label\" title={name}>{name}</span></button><button type=\"button\" disabled={pending} className=\"axiom-web-app__thread-rename\" aria-label={`Rename ${name}`} onClick={() => { setRenameTarget(thread); setRenameValue(name); }}>Rename</button><button type=\"button\" disabled={pending} className=\"axiom-web-app__thread-delete\" aria-label={`Delete ${name}`} onClick={() => setDeleteTarget(thread)}>Delete</button></div>; })}</div><Modal title=\"Rename conversation\" open={renameTarget !== null} onCancel={() => { if (!pending) setRenameTarget(null); }} onOk={() => renameTarget && void run(() => renameThread(renameTarget.id, renameValue.trim()), () => setRenameTarget(null))} okText=\"Save\" cancelText=\"Cancel\" okButtonProps={{ loading: pending, disabled: !renameValue.trim() }} cancelButtonProps={{ disabled: pending }}><label className=\"axiom-web-app__modal-field\"><span>Conversation name</span><input aria-label=\"Conversation name\" value={renameValue} disabled={pending} onChange={(event) => setRenameValue(event.target.value)} /></label></Modal><Modal title=\"Delete conversation?\" open={deleteTarget !== null} onCancel={() => { if (!pending) setDeleteTarget(null); }} onOk={() => deleteTarget && void run(() => deleteThread(deleteTarget.id), () => setDeleteTarget(null))} okText=\"Delete\" cancelText=\"Cancel\" okButtonProps={{ danger: true, loading: pending }} cancelButtonProps={{ disabled: pending }}><p>This conversation and its messages will be permanently deleted.</p></Modal></nav>;\n}\n"],"mappings":"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","names":["import_react","import_protocols","errorCodes","record","exact","isAbortError","isAbortError","import_react","import_react","import_react","import_react","import_react","import_react","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_react","import_react","React","text","React","DOMPurify","parseHtml","import_react","r","React","import_react","StreamCacheTokenType","handler","React","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime"]}
|
|
1
|
+
{"version":3,"sources":["../src/integrations/web-app/index.ts","../src/integrations/web-app/AgentWebAppProvider.tsx","../src/integrations/web-app/AgentWebAppContext.ts","../src/integrations/web-app/error.ts","../src/integrations/web-app/sse-parser.ts","../src/integrations/web-app/client.ts","../src/utils/errorMessage.ts","../src/integrations/web-app/state/agentWebAppReducer.ts","../src/integrations/web-app/hooks/useAgentWebApp.ts","../src/integrations/web-app/hooks/useWidgetAttachments.ts","../src/integrations/web-app/hooks/useWidgetChat.ts","../src/integrations/web-app/hooks/useWidgetInterrupts.ts","../src/integrations/web-app/hooks/useWidgetProject.ts","../src/integrations/web-app/hooks/useWidgetThreads.ts","../src/integrations/web-app/components/WidgetAttachments.tsx","../src/integrations/web-app/components/widget-utils.ts","../src/integrations/web-app/components/WidgetComposer.tsx","../src/components/shared/useReviewDecision.ts","../src/integrations/web-app/components/WidgetInterruptView.tsx","../src/integrations/web-app/components/WidgetInterrupt.tsx","../../../node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs","../../../node_modules/.pnpm/@ant-design+x-markdown@2.3.0_@types+react@18.3.24_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@ant-design/x-markdown/es/XMarkdown/index.js","../../../node_modules/.pnpm/@ant-design+x-markdown@2.3.0_@types+react@18.3.24_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@ant-design/x-markdown/es/XMarkdown/core/Parser.js","../../../node_modules/.pnpm/@ant-design+x-markdown@2.3.0_@types+react@18.3.24_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@ant-design/x-markdown/es/XMarkdown/core/Renderer.js","../../../node_modules/.pnpm/@ant-design+x-markdown@2.3.0_@types+react@18.3.24_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@ant-design/x-markdown/es/XMarkdown/AnimationText.js","../../../node_modules/.pnpm/@ant-design+x-markdown@2.3.0_@types+react@18.3.24_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@ant-design/x-markdown/es/XMarkdown/DebugPanel/DebugPanel.js","../../../node_modules/.pnpm/@ant-design+x-markdown@2.3.0_@types+react@18.3.24_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@ant-design/x-markdown/es/XMarkdown/hooks/useStreaming.js","../../../node_modules/.pnpm/@ant-design+x-markdown@2.3.0_@types+react@18.3.24_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@ant-design/x-markdown/es/XMarkdown/interface.js","../src/integrations/web-app/components/WidgetMarkdown.tsx","../src/integrations/web-app/components/WidgetGenUIRenderer.tsx","../src/integrations/web-app/components/WidgetMessageList.tsx","../src/integrations/web-app/components/WidgetModelSelector.tsx","../src/integrations/web-app/components/WidgetProjectSelector.tsx","../src/integrations/web-app/components/WidgetThreadList.tsx"],"sourcesContent":["// `.axiom-web-app` style namespace for the Widget* components; importing here\n// keeps it on the entry so `dist/web-app.css` still ships it.\nimport \"./components/agent-widget.css\";\nexport { AgentWebAppProvider } from \"./AgentWebAppProvider\";\nexport type { AgentWebAppIdentity, AgentWebAppProviderProps } from \"./AgentWebAppProvider\";\nexport { AgentWebAppRuntimeClientError } from \"./error\";\nexport { useAgentWebApp } from \"./hooks/useAgentWebApp\";\nexport { useWidgetAttachments } from \"./hooks/useWidgetAttachments\";\nexport { useWidgetChat } from \"./hooks/useWidgetChat\";\nexport { useWidgetInterrupts } from \"./hooks/useWidgetInterrupts\";\nexport { useWidgetProject } from \"./hooks/useWidgetProject\";\nexport { useWidgetThreads } from \"./hooks/useWidgetThreads\";\nexport { WidgetAttachments } from \"./components/WidgetAttachments\";\nexport type { WidgetAttachmentsProps } from \"./components/WidgetAttachments\";\nexport { WidgetComposer } from \"./components/WidgetComposer\";\nexport type { WidgetComposerProps } from \"./components/WidgetComposer\";\nexport { WidgetInterrupt } from \"./components/WidgetInterrupt\";\nexport type { WidgetInterruptProps } from \"./components/WidgetInterrupt\";\nexport { WidgetMarkdown } from \"./components/WidgetMarkdown\";\nexport type { WidgetMarkdownProps } from \"./components/WidgetMarkdown\";\nexport { WidgetMessageList } from \"./components/WidgetMessageList\";\nexport type { WidgetMessageListProps } from \"./components/WidgetMessageList\";\nexport { WidgetModelSelector } from \"./components/WidgetModelSelector\";\nexport type { WidgetModelSelectorProps } from \"./components/WidgetModelSelector\";\nexport { WidgetProjectSelector } from \"./components/WidgetProjectSelector\";\nexport type { WidgetProjectSelectorProps } from \"./components/WidgetProjectSelector\";\nexport { WidgetThreadList } from \"./components/WidgetThreadList\";\nexport type { WidgetThreadListProps } from \"./components/WidgetThreadList\";\nexport type {\n AgentWebAppAttachment,\n AgentWebAppBootstrap,\n AgentWebAppError,\n AgentWebAppErrorCode,\n AgentWebAppInterrupt,\n AgentWebAppInterruptResponse,\n AgentWebAppRuntimeMessage,\n AgentWebAppRuntimeThread,\n AgentWebAppStreamEvent,\n Message,\n} from \"./types\";\n","import React, { useCallback, useEffect, useReducer, useRef } from \"react\";\nimport { AgentWebAppContext, featureDisabled } from \"./AgentWebAppContext\";\nimport { AgentWebAppRuntimeClient } from \"./client\";\nimport { AgentWebAppRuntimeClientError } from \"./error\";\nimport { formatErrorMessage } from \"../../utils/errorMessage\";\nimport { agentWebAppReducer, initialAgentWebAppState } from \"./state/agentWebAppReducer\";\nimport type {\n AgentWebAppBootstrap,\n AgentWebAppInterruptResponse,\n AgentWebAppRuntimeThread,\n AgentWebAppStreamEvent,\n} from \"./types\";\n\nexport type AgentWebAppIdentity =\n | { mode: \"unverified\"; userId: string; displayName?: string }\n | { mode: \"verified\"; tokenProvider: () => Promise<string> };\n\nexport interface AgentWebAppProviderProps {\n gatewayUrl: string;\n webAppId: string;\n identity: AgentWebAppIdentity;\n children: React.ReactNode;\n onError?: (error: AgentWebAppRuntimeClientError) => void;\n fetch?: typeof globalThis.fetch;\n}\n\nfunction validateProps(props: AgentWebAppProviderProps): void {\n if (!props.gatewayUrl.trim()) throw new Error(\"AgentWebAppProvider requires gatewayUrl\");\n try { new URL(props.gatewayUrl); } catch { throw new Error(\"AgentWebAppProvider gatewayUrl must be a valid URL\"); }\n if (props.identity.mode === \"unverified\") {\n if (!props.identity.userId.trim()) throw new Error(\"AgentWebAppProvider requires identity.userId\");\n } else if (typeof props.identity.tokenProvider !== \"function\") {\n throw new Error(\"AgentWebAppProvider requires identity.tokenProvider\");\n }\n if (!props.fetch && typeof globalThis.fetch !== \"function\") throw new Error(\"AgentWebAppProvider requires a fetch implementation\");\n}\n\nfunction runtimeError(error: unknown): AgentWebAppRuntimeClientError {\n if (error instanceof AgentWebAppRuntimeClientError) return error;\n return new AgentWebAppRuntimeClientError(\"INTERNAL_ERROR\", \"Request failed\", true);\n}\n\nfunction isAbortError(error: unknown): boolean {\n return typeof error === \"object\" && error !== null && \"name\" in error && error.name === \"AbortError\";\n}\n\nfunction newestThread(threads: AgentWebAppRuntimeThread[]): AgentWebAppRuntimeThread | null {\n return threads.reduce<AgentWebAppRuntimeThread | null>((latest, item) => !latest || item.updatedAt > latest.updatedAt ? item : latest, null);\n}\n\nfunction requestProjectId(bootstrap: AgentWebAppBootstrap | null, projectId: string | null | undefined): string | undefined {\n return bootstrap?.webApp.features.projectSelector ? projectId ?? undefined : undefined;\n}\n\nfunction requestModelKey(bootstrap: AgentWebAppBootstrap | null, modelKey: string | null | undefined): string | undefined {\n return bootstrap?.webApp.features.modelSelector ? modelKey ?? undefined : undefined;\n}\n\nexport function AgentWebAppProvider(props: AgentWebAppProviderProps): React.ReactElement {\n validateProps(props);\n const scopeKey = `${props.gatewayUrl}\\u0000${props.webAppId}\\u0000${props.identity.mode === \"unverified\" ? props.identity.userId : \"verified:token\"}`;\n return <ScopedAgentWebAppProvider key={scopeKey} {...props} />;\n}\n\nfunction ScopedAgentWebAppProvider({ gatewayUrl, webAppId, identity, children, onError, fetch: fetchImplementation }: AgentWebAppProviderProps): React.ReactElement {\n const [state, dispatch] = useReducer(agentWebAppReducer, initialAgentWebAppState);\n const stateRef = useRef(state);\n stateRef.current = state;\n const generationRef = useRef(0);\n const threadGenerationRef = useRef(0);\n const streamGenerationRef = useRef(0);\n const controllersRef = useRef(new Set<AbortController>());\n const threadControllersRef = useRef(new Set<AbortController>());\n const streamRef = useRef<{ controller: AbortController; threadId: string; projectId?: string } | null>(null);\n const errorNotifiedRef = useRef<AgentWebAppRuntimeClientError | null>(null);\n const identityRef = useRef(identity);\n identityRef.current = identity;\n const clientRef = useRef<AgentWebAppRuntimeClient>();\n if (!clientRef.current) {\n clientRef.current = new AgentWebAppRuntimeClient({\n gatewayUrl,\n webAppId,\n identityProvider: {\n getIdentity: async () => {\n const current = identityRef.current;\n if (current.mode !== \"verified\") return { externalUserId: current.userId };\n try {\n return { bearerToken: await current.tokenProvider() };\n } catch {\n throw new AgentWebAppRuntimeClientError(\"USER_ID_REQUIRED\", \"Identity token provider failed\", true);\n }\n },\n },\n ...(fetchImplementation ? { fetch: fetchImplementation } : {}),\n });\n }\n const client = clientRef.current;\n\n const controlled = useCallback(async <T,>(operation: (signal: AbortSignal) => Promise<T>): Promise<T> => {\n const controller = new AbortController();\n controllersRef.current.add(controller);\n try { return await operation(controller.signal); }\n finally { controllersRef.current.delete(controller); }\n }, []);\n\n const threadControlled = useCallback(async <T,>(operation: (signal: AbortSignal) => Promise<T>): Promise<T> => {\n const controller = new AbortController();\n threadControllersRef.current.add(controller);\n try { return await operation(controller.signal); }\n finally { threadControllersRef.current.delete(controller); }\n }, []);\n\n const invalidateThreadWork = useCallback((): number => {\n const generation = ++threadGenerationRef.current;\n for (const controller of threadControllersRef.current) controller.abort();\n threadControllersRef.current.clear();\n return generation;\n }, []);\n\n const report = useCallback((error: unknown): AgentWebAppRuntimeClientError => {\n const normalized = runtimeError(error);\n dispatch({ type: \"ERROR_SET\", error: normalized });\n return normalized;\n }, []);\n\n const stopActiveStream = useCallback(async ({ abortBackend }: { abortBackend: boolean }): Promise<void> => {\n const active = streamRef.current;\n if (!active) return;\n streamGenerationRef.current += 1;\n streamRef.current = null;\n active.controller.abort();\n dispatch({ type: \"STREAM_SET\", streaming: false, assistantMessageId: null });\n if (abortBackend) await client.abort(active.threadId, active.projectId ? { projectId: active.projectId } : {});\n }, [client]);\n\n const loadMessages = useCallback(async (thread: AgentWebAppRuntimeThread, generation = generationRef.current, threadGeneration = threadGenerationRef.current, bootstrap = stateRef.current.bootstrap): Promise<void> => {\n dispatch({ type: \"MESSAGES_LOADING\", loading: true });\n try {\n const projectId = requestProjectId(bootstrap, thread.projectId);\n const result = await threadControlled((signal) => client.getMessages(thread.id, projectId ? { projectId } : {}, signal));\n if (generation === generationRef.current && threadGeneration === threadGenerationRef.current) dispatch({ type: \"MESSAGES_SET\", messages: result.messages });\n } catch (error) {\n if (!isAbortError(error) && generation === generationRef.current && threadGeneration === threadGenerationRef.current) report(error);\n } finally {\n if (generation === generationRef.current && threadGeneration === threadGenerationRef.current) dispatch({ type: \"MESSAGES_LOADING\", loading: false });\n }\n }, [client, report, threadControlled]);\n\n const loadManagedThreads = useCallback(async (projectId: string, generation = generationRef.current, threadGeneration = threadGenerationRef.current, bootstrap = stateRef.current.bootstrap): Promise<void> => {\n dispatch({ type: \"THREADS_LOADING\", loading: true });\n try {\n const selectedProjectId = requestProjectId(bootstrap, projectId);\n const result = await threadControlled((signal) => client.listThreads(selectedProjectId ? { projectId: selectedProjectId } : {}, signal));\n if (generation !== generationRef.current || threadGeneration !== threadGenerationRef.current) return;\n const latest = newestThread(result.records);\n if (streamRef.current && latest?.id !== stateRef.current.activeThread?.id) await stopActiveStream({ abortBackend: true });\n if (generation !== generationRef.current || threadGeneration !== threadGenerationRef.current) return;\n dispatch({ type: \"THREADS_SET\", threads: result.records });\n const currentActive = stateRef.current.activeThread;\n if (latest && latest.id === currentActive?.id) {\n dispatch({ type: \"ACTIVE_THREAD_UPDATED\", thread: latest });\n } else {\n threadGeneration = invalidateThreadWork();\n dispatch({ type: \"ACTIVE_THREAD_SET\", thread: latest });\n if (latest) await loadMessages(latest, generation, threadGeneration, bootstrap);\n }\n } catch (error) {\n if (!isAbortError(error) && generation === generationRef.current && threadGeneration === threadGenerationRef.current) report(error);\n } finally {\n if (generation === generationRef.current && threadGeneration === threadGenerationRef.current) dispatch({ type: \"THREADS_LOADING\", loading: false });\n }\n }, [client, invalidateThreadWork, loadMessages, report, stopActiveStream, threadControlled]);\n\n const bootstrapRuntime = useCallback(async (): Promise<void> => {\n try { await stopActiveStream({ abortBackend: true }); }\n catch (error) { if (!isAbortError(error)) report(error); }\n const generation = ++generationRef.current;\n for (const controller of controllersRef.current) controller.abort();\n controllersRef.current.clear();\n invalidateThreadWork();\n dispatch({ type: \"BOOTSTRAP_LOADING\" });\n try {\n const result = await controlled((signal) => client.bootstrap({}, signal));\n if (generation !== generationRef.current) return;\n const projectId = result.webApp.defaultProjectId;\n const modelKey = result.webApp.defaultModelKey ?? result.models[0]?.key ?? null;\n dispatch({ type: \"BOOTSTRAP_READY\", bootstrap: result, projectId, modelKey });\n if (result.webApp.features.threadManagement) {\n await loadManagedThreads(projectId, generation, threadGenerationRef.current, result);\n } else {\n const implicit = result.thread ?? null;\n dispatch({ type: \"THREADS_SET\", threads: implicit ? [implicit] : [] });\n dispatch({ type: \"ACTIVE_THREAD_SET\", thread: implicit });\n if (implicit) await loadMessages(implicit, generation, threadGenerationRef.current, result);\n }\n } catch (error) {\n if (!isAbortError(error) && generation === generationRef.current) report(error);\n } finally {\n if (generation === generationRef.current) dispatch({ type: \"BOOTSTRAP_SETTLED\" });\n }\n }, [client, controlled, invalidateThreadWork, loadManagedThreads, loadMessages, report, stopActiveStream]);\n\n useEffect(() => {\n void bootstrapRuntime();\n return () => {\n generationRef.current += 1;\n for (const controller of controllersRef.current) controller.abort();\n controllersRef.current.clear();\n invalidateThreadWork();\n void stopActiveStream({ abortBackend: true }).catch(() => undefined);\n };\n }, [bootstrapRuntime, invalidateThreadWork, stopActiveStream]);\n\n useEffect(() => {\n const error = state.errors.current;\n if (error && error !== errorNotifiedRef.current) {\n errorNotifiedRef.current = error;\n onError?.(error);\n }\n }, [onError, state.errors.current]);\n\n const abort = useCallback(async (): Promise<void> => {\n try { await stopActiveStream({ abortBackend: true }); }\n catch (error) { if (!isAbortError(error)) throw report(error); }\n }, [report, stopActiveStream]);\n\n const selectProject = useCallback(async (projectId: string): Promise<void> => {\n const current = stateRef.current;\n const bootstrap = current.bootstrap;\n if (!bootstrap) throw report(new AgentWebAppRuntimeClientError(\"INVALID_REQUEST\", \"Web App is not ready\", true));\n if (!bootstrap.webApp.features.projectSelector) throw featureDisabled(\"Project selection is disabled\");\n if (!bootstrap.projects.some((project) => project.id === projectId)) throw report(new AgentWebAppRuntimeClientError(\"PROJECT_NOT_ALLOWED\", \"Project is not allowed\", false));\n if (projectId === current.projectId) return;\n try { await stopActiveStream({ abortBackend: true }); }\n catch (error) { if (!isAbortError(error)) throw report(error); }\n const generation = generationRef.current;\n const threadGeneration = invalidateThreadWork();\n dispatch({ type: \"PROJECT_SELECTED\", projectId });\n if (bootstrap.webApp.features.threadManagement) await loadManagedThreads(projectId, generation, threadGeneration, bootstrap);\n else {\n const selectedProjectId = requestProjectId(bootstrap, projectId);\n const selectedModelKey = requestModelKey(bootstrap, current.modelKey);\n const result = await threadControlled((signal) => client.bootstrap({ ...(selectedProjectId ? { projectId: selectedProjectId } : {}), ...(selectedModelKey ? { modelKey: selectedModelKey } : {}) }, signal));\n if (generation !== generationRef.current || threadGeneration !== threadGenerationRef.current) return;\n const implicit = result.thread ?? null;\n dispatch({ type: \"THREADS_SET\", threads: implicit ? [implicit] : [] });\n dispatch({ type: \"ACTIVE_THREAD_SET\", thread: implicit });\n if (implicit) await loadMessages(implicit, generation, threadGeneration, result);\n }\n }, [client, invalidateThreadWork, loadManagedThreads, loadMessages, report, stopActiveStream, threadControlled]);\n\n const selectModel = useCallback((modelKey: string): void => {\n const bootstrap = stateRef.current.bootstrap;\n if (!bootstrap) throw report(new AgentWebAppRuntimeClientError(\"INVALID_REQUEST\", \"Web App is not ready\", true));\n if (!bootstrap.webApp.features.modelSelector) throw featureDisabled(\"Model selection is disabled\");\n if (!bootstrap.models.some((model) => model.key === modelKey)) throw report(new AgentWebAppRuntimeClientError(\"MODEL_NOT_ALLOWED\", \"Model is not allowed\", false));\n dispatch({ type: \"MODEL_SELECTED\", modelKey });\n }, [report]);\n\n const requireThreadManagement = useCallback((): void => {\n if (!stateRef.current.bootstrap?.webApp.features.threadManagement) throw featureDisabled(\"Thread management is disabled\");\n }, []);\n\n const refreshThreads = useCallback(async (): Promise<void> => {\n requireThreadManagement();\n const projectId = stateRef.current.projectId;\n if (projectId) await loadManagedThreads(projectId, generationRef.current, threadGenerationRef.current, stateRef.current.bootstrap);\n }, [loadManagedThreads, requireThreadManagement]);\n\n const selectThread = useCallback(async (thread: AgentWebAppRuntimeThread): Promise<void> => {\n if (thread.projectId !== stateRef.current.projectId) throw report(new AgentWebAppRuntimeClientError(\"PROJECT_NOT_ALLOWED\", \"Thread belongs to another project\", false));\n try { await stopActiveStream({ abortBackend: true }); }\n catch (error) { if (!isAbortError(error)) throw report(error); }\n const generation = generationRef.current;\n const threadGeneration = invalidateThreadWork();\n dispatch({ type: \"ACTIVE_THREAD_SET\", thread });\n await loadMessages(thread, generation, threadGeneration, stateRef.current.bootstrap);\n }, [invalidateThreadWork, loadMessages, report, stopActiveStream]);\n\n const createThread = useCallback(async (label?: string): Promise<AgentWebAppRuntimeThread> => {\n requireThreadManagement();\n try { await stopActiveStream({ abortBackend: true }); }\n catch (error) { if (!isAbortError(error)) throw report(error); }\n const threadGeneration = invalidateThreadWork();\n const generation = generationRef.current;\n const projectId = stateRef.current.projectId;\n const selectedProjectId = requestProjectId(stateRef.current.bootstrap, projectId);\n const created = await threadControlled((signal) => client.createThread({ ...(selectedProjectId ? { projectId: selectedProjectId } : {}), ...(label ? { label } : {}) }, signal));\n if (generation !== generationRef.current || threadGeneration !== threadGenerationRef.current) return created;\n dispatch({ type: \"THREAD_UPSERT\", thread: created });\n dispatch({ type: \"ACTIVE_THREAD_SET\", thread: created });\n return created;\n }, [client, invalidateThreadWork, report, requireThreadManagement, stopActiveStream, threadControlled]);\n\n const renameThread = useCallback(async (threadId: string, label: string): Promise<AgentWebAppRuntimeThread> => {\n requireThreadManagement();\n try { await stopActiveStream({ abortBackend: true }); }\n catch (error) { if (!isAbortError(error)) throw report(error); }\n const generation = generationRef.current;\n const threadGeneration = threadGenerationRef.current;\n const existing = stateRef.current.threads.find((item) => item.id === threadId);\n if (!existing) throw report(new AgentWebAppRuntimeClientError(\"THREAD_NOT_FOUND\", \"Thread not found\", false));\n const projectId = requestProjectId(stateRef.current.bootstrap, existing.projectId);\n const updated = await threadControlled((signal) => client.updateThread(threadId, { ...(projectId ? { projectId } : {}), label }, signal));\n if (generation !== generationRef.current || threadGeneration !== threadGenerationRef.current) return updated;\n dispatch({ type: \"THREAD_UPSERT\", thread: updated });\n return updated;\n }, [client, report, requireThreadManagement, threadControlled]);\n\n const deleteThread = useCallback(async (threadId: string): Promise<void> => {\n requireThreadManagement();\n const existing = stateRef.current.threads.find((item) => item.id === threadId);\n if (!existing) throw report(new AgentWebAppRuntimeClientError(\"THREAD_NOT_FOUND\", \"Thread not found\", false));\n if (stateRef.current.activeThread?.id === threadId) {\n try { await stopActiveStream({ abortBackend: true }); }\n catch (error) { if (!isAbortError(error)) throw report(error); }\n invalidateThreadWork();\n }\n const generation = generationRef.current;\n const threadGeneration = threadGenerationRef.current;\n const projectId = requestProjectId(stateRef.current.bootstrap, existing.projectId);\n await threadControlled((signal) => client.deleteThread(threadId, projectId ? { projectId } : {}, signal));\n if (generation !== generationRef.current || threadGeneration !== threadGenerationRef.current) return;\n dispatch({ type: \"THREAD_DELETED\", threadId });\n const remaining = stateRef.current.threads.filter((item) => item.id !== threadId);\n const next = newestThread(remaining);\n if (stateRef.current.activeThread?.id === threadId && next) {\n dispatch({ type: \"ACTIVE_THREAD_SET\", thread: next });\n await loadMessages(next);\n }\n }, [client, invalidateThreadWork, loadMessages, report, requireThreadManagement, stopActiveStream, threadControlled]);\n\n const handleStreamEvent = useCallback((event: AgentWebAppStreamEvent, assistantId: string, generation: number, streamGeneration: number): void => {\n if (generation !== generationRef.current || streamGeneration !== streamGenerationRef.current) return;\n switch (event.type) {\n case \"message.delta\": dispatch({ type: \"ASSISTANT_DELTA\", id: assistantId, text: event.text }); break;\n case \"message.completed\": dispatch({ type: \"ASSISTANT_COMPLETED\", temporaryId: assistantId, messageId: event.messageId }); break;\n case \"tool.started\": dispatch({ type: \"TOOL_STARTED\", id: event.id, name: event.name }); break;\n case \"tool.completed\": dispatch({ type: \"TOOL_COMPLETED\", id: event.id }); break;\n case \"interrupt.created\": if (stateRef.current.bootstrap?.webApp.features.hitl) dispatch({ type: \"INTERRUPT_ADD\", interrupt: event.interrupt }); break;\n case \"genui.render\": if (stateRef.current.bootstrap?.webApp.features.genUI) dispatch({ type: \"ASSISTANT_GENUI\", id: assistantId, block: event.block }); break;\n case \"error\": break;\n case \"stream.completed\": break;\n }\n }, []);\n\n const consumePublicStream = useCallback(async (input: {\n threadId: string; projectId?: string; assistantId: string; generation: number; streamGeneration: number;\n run(onEvent: (event: AgentWebAppStreamEvent) => void, signal: AbortSignal): Promise<void>;\n }): Promise<string> => {\n const controller = new AbortController();\n let eventError: AgentWebAppRuntimeClientError | null = null;\n let currentAssistantId = input.assistantId;\n streamRef.current = { controller, threadId: input.threadId, ...(input.projectId ? { projectId: input.projectId } : {}) };\n dispatch({ type: \"STREAM_SET\", streaming: true, assistantMessageId: input.assistantId });\n try {\n await input.run((event) => {\n if (event.type === \"error\") {\n if (input.generation === generationRef.current && input.streamGeneration === streamGenerationRef.current) {\n eventError = new AgentWebAppRuntimeClientError(event.error.code, formatErrorMessage(event.error.message, \"Stream error\"), event.error.retryable);\n }\n return;\n }\n if (event.type === \"message.completed\") currentAssistantId = event.messageId;\n handleStreamEvent(event, input.assistantId, input.generation, input.streamGeneration);\n }, controller.signal);\n if (eventError) throw eventError;\n return currentAssistantId;\n } finally {\n if (streamRef.current?.controller === controller) streamRef.current = null;\n if (input.generation === generationRef.current && input.streamGeneration === streamGenerationRef.current) dispatch({ type: \"STREAM_SET\", streaming: false });\n }\n }, [handleStreamEvent]);\n\n const send = useCallback(async (content: string, attachmentRefs?: string[]): Promise<void> => {\n const current = stateRef.current;\n if (streamRef.current || current.stream.isStreaming) throw new AgentWebAppRuntimeClientError(\"STREAM_CONFLICT\", \"A message is already streaming\", false);\n if (!current.activeThread || !current.projectId) throw report(new AgentWebAppRuntimeClientError(\"THREAD_NOT_FOUND\", \"No active thread\", false));\n if (!content.trim()) throw report(new AgentWebAppRuntimeClientError(\"INVALID_REQUEST\", \"Message content is required\", false));\n const generation = generationRef.current;\n const streamGeneration = ++streamGenerationRef.current;\n const assistantId = `pending-assistant-${Date.now()}-${Math.random().toString(36).slice(2)}`;\n const userId = `pending-user-${Date.now()}-${Math.random().toString(36).slice(2)}`;\n const refs = attachmentRefs ?? current.attachments.map((attachment) => attachment.ref);\n const projectId = requestProjectId(current.bootstrap, current.projectId);\n const modelKey = requestModelKey(current.bootstrap, current.modelKey);\n let currentAssistantId = assistantId;\n dispatch({ type: \"MESSAGE_APPEND\", message: { id: userId, role: \"human\", content } });\n try {\n currentAssistantId = await consumePublicStream({\n threadId: current.activeThread.id, projectId, assistantId, generation, streamGeneration,\n run: (onEvent, signal) => client.streamMessage(current.activeThread!.id, {\n content,\n ...(projectId ? { projectId } : {}),\n ...(modelKey ? { modelKey } : {}),\n ...(refs.length ? { attachmentRefs: refs } : {}),\n }, onEvent, signal),\n });\n if (generation === generationRef.current && streamGeneration === streamGenerationRef.current) {\n dispatch({ type: \"ATTACHMENTS_REMOVE\", refs });\n dispatch({ type: \"FAILED_SEND_SET\", failedSend: null });\n }\n } catch (error) {\n if (generation === generationRef.current && streamGeneration === streamGenerationRef.current) {\n dispatch({ type: \"MESSAGES_REMOVE\", ids: [userId, assistantId, `${assistantId}-genui`, currentAssistantId, `${currentAssistantId}-genui`] });\n if (!isAbortError(error)) {\n dispatch({ type: \"FAILED_SEND_SET\", failedSend: { text: content, attachmentIds: refs } });\n throw report(error);\n }\n }\n }\n }, [client, consumePublicStream, report]);\n\n const sendMessage = useCallback(async (content: string): Promise<void> => send(content), [send]);\n\n const retryLastMessage = useCallback(async (): Promise<void> => {\n const failed = stateRef.current.lastFailedSend;\n if (!failed) throw report(new AgentWebAppRuntimeClientError(\"INVALID_REQUEST\", \"No failed message to retry\", false));\n await send(failed.text, failed.attachmentIds);\n }, [report, send]);\n\n const uploadAttachment = useCallback(async (file: Blob): Promise<void> => {\n const current = stateRef.current;\n const generation = generationRef.current;\n const threadGeneration = threadGenerationRef.current;\n if (!current.bootstrap?.webApp.features.attachments) throw featureDisabled(\"Attachments are disabled\");\n if (!current.activeThread) throw report(new AgentWebAppRuntimeClientError(\"THREAD_NOT_FOUND\", \"No active thread\", false));\n dispatch({ type: \"ATTACHMENTS_LOADING\", loading: true });\n try {\n const projectId = requestProjectId(current.bootstrap, current.activeThread.projectId);\n const attachment = await threadControlled((signal) => client.uploadAttachment(current.activeThread!.id, file, projectId ? { projectId } : {}, signal));\n if (generation === generationRef.current && threadGeneration === threadGenerationRef.current) dispatch({ type: \"ATTACHMENT_ADD\", attachment });\n } catch (error) {\n if (!isAbortError(error) && generation === generationRef.current && threadGeneration === threadGenerationRef.current) throw report(error);\n } finally { if (generation === generationRef.current && threadGeneration === threadGenerationRef.current) dispatch({ type: \"ATTACHMENTS_LOADING\", loading: false }); }\n }, [client, report, threadControlled]);\n\n const resumeInterrupt = useCallback(async (interruptId: string, response: AgentWebAppInterruptResponse, message: string): Promise<void> => {\n const current = stateRef.current;\n const generation = generationRef.current;\n const threadGeneration = threadGenerationRef.current;\n if (streamRef.current || current.stream.isStreaming) throw report(new AgentWebAppRuntimeClientError(\"STREAM_CONFLICT\", \"A message is already streaming\", false));\n if (!current.bootstrap?.webApp.features.hitl) throw featureDisabled(\"Human review is disabled\");\n if (!current.activeThread || !current.projectId) throw report(new AgentWebAppRuntimeClientError(\"THREAD_NOT_FOUND\", \"No active thread\", false));\n if (!current.interrupts.some((item) => item.id === interruptId)) throw report(new AgentWebAppRuntimeClientError(\"INVALID_REQUEST\", \"Interrupt not found\", false));\n const activeThread = current.activeThread;\n const projectId = requestProjectId(current.bootstrap, current.projectId);\n const modelKey = requestModelKey(current.bootstrap, current.modelKey);\n const streamGeneration = ++streamGenerationRef.current;\n const assistantId = `pending-assistant-${Date.now()}-${Math.random().toString(36).slice(2)}`;\n dispatch({ type: \"INTERRUPTS_LOADING\", loading: true });\n try {\n await consumePublicStream({\n threadId: activeThread.id, projectId, assistantId, generation, streamGeneration,\n run: (onEvent, signal) => client.resumeInterrupt(activeThread.id, interruptId, {\n ...(projectId ? { projectId } : {}),\n ...(modelKey ? { modelKey } : {}), message, response,\n }, onEvent, signal),\n });\n if (generation !== generationRef.current || threadGeneration !== threadGenerationRef.current) return;\n dispatch({ type: \"INTERRUPT_REMOVE\", interruptId });\n await loadMessages(activeThread, generation, threadGeneration);\n } catch (error) {\n if (generation === generationRef.current && threadGeneration === threadGenerationRef.current) {\n dispatch({ type: \"MESSAGES_REMOVE\", ids: [assistantId, `${assistantId}-genui`] });\n if (!isAbortError(error)) throw report(error);\n }\n } finally {\n if (generation === generationRef.current && threadGeneration === threadGenerationRef.current) dispatch({ type: \"INTERRUPTS_LOADING\", loading: false });\n }\n }, [client, consumePublicStream, loadMessages, report]);\n\n const value = {\n ...state,\n retry: bootstrapRuntime,\n selectProject,\n selectModel,\n refreshThreads,\n selectThread,\n createThread,\n renameThread,\n deleteThread,\n sendMessage,\n retryLastMessage,\n abort,\n uploadAttachment,\n removeAttachment: (ref: string) => dispatch({ type: \"ATTACHMENT_REMOVE\", ref }),\n clearAttachments: () => dispatch({ type: \"ATTACHMENTS_CLEAR\" }),\n resumeInterrupt,\n clearError: () => dispatch({ type: \"ERROR_SET\", error: null }),\n };\n return <AgentWebAppContext.Provider value={value}>{children}</AgentWebAppContext.Provider>;\n}\n","import { createContext } from \"react\";\nimport type { AgentWebAppInterruptResponse, AgentWebAppRuntimeThread } from \"./types\";\nimport { AgentWebAppRuntimeClientError } from \"./error\";\nimport type { AgentWebAppState } from \"./state/agentWebAppReducer\";\n\nexport interface AgentWebAppContextValue extends AgentWebAppState {\n retry(): Promise<void>;\n selectProject(projectId: string): Promise<void>;\n selectModel(modelKey: string): void;\n refreshThreads(): Promise<void>;\n selectThread(thread: AgentWebAppRuntimeThread): Promise<void>;\n createThread(label?: string): Promise<AgentWebAppRuntimeThread>;\n renameThread(threadId: string, label: string): Promise<AgentWebAppRuntimeThread>;\n deleteThread(threadId: string): Promise<void>;\n sendMessage(content: string): Promise<void>;\n retryLastMessage(): Promise<void>;\n abort(): Promise<void>;\n uploadAttachment(file: Blob): Promise<void>;\n removeAttachment(ref: string): void;\n clearAttachments(): void;\n resumeInterrupt(interruptId: string, response: AgentWebAppInterruptResponse, message: string): Promise<void>;\n clearError(): void;\n}\n\nexport const AgentWebAppContext = createContext<AgentWebAppContextValue | null>(null);\n\nexport function featureDisabled(message: string): AgentWebAppRuntimeClientError {\n return new AgentWebAppRuntimeClientError(\"FEATURE_DISABLED\", message, false, 403);\n}\n","import type { AgentWebAppErrorCode } from \"./types\";\n\nexport class AgentWebAppRuntimeClientError extends Error {\n readonly code: AgentWebAppErrorCode;\n readonly retryable: boolean;\n readonly status?: number;\n\n constructor(code: AgentWebAppErrorCode, message: string, retryable: boolean, status?: number) {\n super(message);\n this.name = \"AgentWebAppRuntimeClientError\";\n this.code = code;\n this.retryable = retryable;\n this.status = status;\n }\n}\n\nexport function streamFailed(): AgentWebAppRuntimeClientError {\n return new AgentWebAppRuntimeClientError(\"STREAM_FAILED\", \"Stream failed\", true);\n}\n","import { streamFailed } from \"./error\";\nimport {\n MessageChunkTypes,\n createAgentWebAppStreamProjectionContext,\n parseAgentWebAppGenUIBlock,\n projectAgentWebAppChunk,\n type AgentWebAppStreamProjectionContext,\n} from \"@axiom-lattice/protocols\";\nimport type {\n AgentWebAppError,\n AgentWebAppErrorCode,\n AgentWebAppInterrupt,\n AgentWebAppStreamEvent,\n AgentWebAppStreamEventHandler,\n} from \"./types\";\n\nconst errorCodes = new Set<AgentWebAppErrorCode>([\n \"WEB_APP_NOT_FOUND\", \"WEB_APP_DISABLED\", \"USER_ID_REQUIRED\", \"INVALID_USER_ID\",\n \"PROJECT_NOT_ALLOWED\", \"PROJECT_SELECTOR_DISABLED\", \"MODEL_NOT_ALLOWED\", \"FEATURE_DISABLED\",\n \"THREAD_NOT_FOUND\", \"STREAM_CONFLICT\", \"STREAM_FAILED\", \"INVALID_REQUEST\", \"INTERNAL_ERROR\",\n]);\n\nfunction record(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction exact(value: Record<string, unknown>, keys: string[]): boolean {\n const actual = Object.keys(value);\n return actual.length === keys.length && keys.every((key) => key in value);\n}\n\nfunction validError(value: unknown): value is AgentWebAppError {\n return record(value)\n && exact(value, [\"code\", \"message\", \"retryable\"])\n && typeof value.code === \"string\" && errorCodes.has(value.code as AgentWebAppErrorCode)\n && typeof value.message === \"string\" && typeof value.retryable === \"boolean\";\n}\n\nfunction validInterrupt(value: unknown): value is AgentWebAppInterrupt {\n if (!record(value)) return false;\n const keys = value.data === undefined ? [\"id\", \"type\", \"prompt\"] : [\"id\", \"type\", \"prompt\", \"data\"];\n return exact(value, keys) && typeof value.id === \"string\" && typeof value.type === \"string\"\n && typeof value.prompt === \"string\" && (value.data === undefined || record(value.data));\n}\n\nconst nativeChunkTypes = new Set<string>([\n MessageChunkTypes.HUMAN, MessageChunkTypes.AI, MessageChunkTypes.TOOL,\n MessageChunkTypes.INTERRUPT, MessageChunkTypes.MESSAGE_COMPLETED,\n MessageChunkTypes.MESSAGE_FAILED, MessageChunkTypes.THREAD_IDLE,\n]);\n\nfunction parseEvents(data: string, projection: AgentWebAppStreamProjectionContext): AgentWebAppStreamEvent[] {\n let value: unknown;\n try { value = JSON.parse(data); } catch { throw streamFailed(); }\n if (!record(value) || typeof value.type !== \"string\") throw streamFailed();\n // Native run-protocol chunk (the gateway's messages/stream since Phase 2).\n if (nativeChunkTypes.has(value.type) || (value.type === \"error\" && record(value.data) && !record(value.error))) {\n const projected = projectAgentWebAppChunk(value as never, projection);\n if (projected.length === 0) return [];\n return projected;\n }\n // Legacy projected public event (gateway /v1 path or an older gateway).\n switch (value.type) {\n case \"message.delta\":\n if (exact(value, [\"type\", \"text\"]) && typeof value.text === \"string\") return [value as unknown as AgentWebAppStreamEvent];\n break;\n case \"message.completed\":\n if (exact(value, [\"type\", \"messageId\"]) && typeof value.messageId === \"string\") return [value as unknown as AgentWebAppStreamEvent];\n break;\n case \"tool.started\":\n if (exact(value, [\"type\", \"id\", \"name\"]) && typeof value.id === \"string\" && typeof value.name === \"string\") return [value as unknown as AgentWebAppStreamEvent];\n break;\n case \"tool.completed\":\n if (exact(value, [\"type\", \"id\"]) && typeof value.id === \"string\") return [value as unknown as AgentWebAppStreamEvent];\n break;\n case \"interrupt.created\":\n if (exact(value, [\"type\", \"interrupt\"]) && validInterrupt(value.interrupt)) return [value as unknown as AgentWebAppStreamEvent];\n break;\n case \"genui.render\":\n if (exact(value, [\"type\", \"block\"]) && parseAgentWebAppGenUIBlock(value.block)) return [value as unknown as AgentWebAppStreamEvent];\n break;\n case \"error\":\n if (exact(value, [\"type\", \"error\"]) && validError(value.error)) return [value as unknown as AgentWebAppStreamEvent];\n break;\n case \"stream.completed\":\n if (exact(value, [\"type\"])) return [value as unknown as AgentWebAppStreamEvent];\n break;\n }\n throw streamFailed();\n}\n\nfunction isAbortError(error: unknown): boolean {\n return error instanceof Error && error.name === \"AbortError\";\n}\n\nexport async function parseAgentWebAppEventStream(\n body: ReadableStream<Uint8Array>,\n onEvent: AgentWebAppStreamEventHandler,\n): Promise<void> {\n const projection = createAgentWebAppStreamProjectionContext({ allowGenUI: true, allowInterrupts: true });\n const reader = body.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n let completed = false;\n let reachedEof = false;\n try {\n while (!completed) {\n let result: ReadableStreamReadResult<Uint8Array>;\n try { result = await reader.read(); }\n catch (error) {\n if (isAbortError(error)) return;\n throw streamFailed();\n }\n if (result.done) reachedEof = true;\n try { buffer += decoder.decode(result.value, { stream: !result.done }); }\n catch { throw streamFailed(); }\n const blocks = buffer.split(/\\r?\\n\\r?\\n/);\n buffer = result.done ? \"\" : blocks.pop() ?? \"\";\n for (const block of blocks) {\n const data = block.split(/\\r?\\n/)\n .filter((line) => line === \"data\" || line.startsWith(\"data:\"))\n .map((line) => line === \"data\" ? \"\" : line.slice(5).replace(/^ /, \"\"));\n if (data.length === 0) continue;\n for (const event of parseEvents(data.join(\"\\n\"), projection)) {\n await onEvent(event);\n completed = event.type === \"stream.completed\";\n if (completed) break;\n }\n if (completed) break;\n }\n if (result.done) break;\n }\n if (!completed) throw streamFailed();\n } finally {\n if (!reachedEof) {\n try { await reader.cancel(); } catch { /* Best-effort cleanup must not replace the primary outcome. */ }\n }\n reader.releaseLock();\n }\n}\n","import { AgentWebAppRuntimeClientError } from \"./error\";\nimport { parseAgentWebAppEventStream } from \"./sse-parser\";\nimport { parseAgentWebAppGenUIBlock } from \"@axiom-lattice/protocols\";\nimport type {\n AgentWebAppAttachment,\n AgentWebAppBootstrap,\n AgentWebAppCreateThreadInput,\n AgentWebAppError,\n AgentWebAppMessageList,\n AgentWebAppProjectSelection,\n AgentWebAppResumeInterruptInput,\n AgentWebAppRuntimeClientOptions,\n AgentWebAppRuntimeSelection,\n AgentWebAppRuntimeThread,\n AgentWebAppStreamEventHandler,\n AgentWebAppStreamMessageInput,\n AgentWebAppThreadList,\n AgentWebAppUpdateThreadInput,\n} from \"./types\";\n\ninterface ErrorEnvelope { success: false; error: AgentWebAppError }\n\nconst errorCodes = new Set<AgentWebAppError[\"code\"]>([\n \"WEB_APP_NOT_FOUND\", \"WEB_APP_DISABLED\", \"USER_ID_REQUIRED\", \"INVALID_USER_ID\",\n \"PROJECT_NOT_ALLOWED\", \"PROJECT_SELECTOR_DISABLED\", \"MODEL_NOT_ALLOWED\", \"FEATURE_DISABLED\",\n \"THREAD_NOT_FOUND\", \"STREAM_CONFLICT\", \"STREAM_FAILED\", \"INVALID_REQUEST\", \"INTERNAL_ERROR\",\n]);\n\nfunction record(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction exact(value: Record<string, unknown>, required: string[], optional: string[] = []): boolean {\n const keys = Object.keys(value);\n return required.every((key) => key in value) && keys.every((key) => required.includes(key) || optional.includes(key));\n}\n\nfunction string(value: unknown): value is string { return typeof value === \"string\"; }\n\nfunction parseThread(value: unknown): AgentWebAppRuntimeThread | undefined {\n if (!record(value) || !exact(value, [\"id\", \"projectId\", \"createdAt\", \"updatedAt\"], [\"label\"])) return undefined;\n if (!string(value.id) || !string(value.projectId) || (value.label !== undefined && !string(value.label))) return undefined;\n if (!string(value.createdAt) || !string(value.updatedAt)) return undefined;\n const createdAt = new Date(value.createdAt); const updatedAt = new Date(value.updatedAt);\n if (Number.isNaN(createdAt.getTime()) || Number.isNaN(updatedAt.getTime())) return undefined;\n return { id: value.id, projectId: value.projectId, ...(value.label === undefined ? {} : { label: value.label }), createdAt, updatedAt };\n}\n\nfunction isErrorEnvelope(value: unknown): value is ErrorEnvelope {\n if (!record(value) || value.success !== false || !record(value.error)) return false;\n const error = value.error;\n return exact(value, [\"success\", \"error\"])\n && exact(error, [\"code\", \"message\", \"retryable\"])\n && typeof error.code === \"string\" && errorCodes.has(error.code as AgentWebAppError[\"code\"])\n && typeof error.message === \"string\" && typeof error.retryable === \"boolean\";\n}\n\nfunction validFeatures(value: unknown): boolean {\n if (!record(value)) return false;\n const keys = [\"projectSelector\", \"modelSelector\", \"threadManagement\", \"attachments\", \"hitl\", \"genUI\"];\n return exact(value, keys, [\"files\"]) && keys.every((key) => typeof value[key] === \"boolean\")\n && (value.files === undefined || typeof value.files === \"boolean\");\n}\n\nfunction validQuickPrompts(value: unknown): boolean {\n return Array.isArray(value)\n && value.length <= 6\n && value.every((prompt) => record(prompt)\n && exact(prompt, [\"label\", \"text\"])\n && string(prompt.label) && prompt.label.length >= 1 && prompt.label.length <= 40\n && string(prompt.text) && prompt.text.length >= 1 && prompt.text.length <= 500);\n}\n\nfunction validAppearance(value: unknown): boolean {\n return record(value) && exact(value, [], [\"title\", \"welcomeMessage\", \"primaryColor\", \"quickPrompts\"])\n && (value.title === undefined || string(value.title))\n && (value.welcomeMessage === undefined || string(value.welcomeMessage))\n && (value.primaryColor === undefined || string(value.primaryColor))\n && (value.quickPrompts === undefined || validQuickPrompts(value.quickPrompts));\n}\n\nfunction parseBootstrap(value: unknown): AgentWebAppBootstrap | undefined {\n if (!record(value) || !exact(value, [\"webApp\", \"projects\", \"models\"], [\"thread\"]) || !record(value.webApp)) return undefined;\n const webApp = value.webApp;\n if (!exact(webApp, [\"id\", \"name\", \"assistant\", \"defaultProjectId\", \"features\", \"appearance\", \"identityAssurance\"], [\"description\", \"defaultModelKey\"])\n || !string(webApp.id) || !string(webApp.name) || !string(webApp.defaultProjectId)\n || (webApp.description !== undefined && !string(webApp.description)) || (webApp.defaultModelKey !== undefined && !string(webApp.defaultModelKey))\n || webApp.identityAssurance !== \"unverified\" || !record(webApp.assistant)\n || !exact(webApp.assistant, [\"id\", \"name\"], [\"description\"]) || !string(webApp.assistant.id) || !string(webApp.assistant.name)\n || (webApp.assistant.description !== undefined && !string(webApp.assistant.description))\n || !validFeatures(webApp.features) || !validAppearance(webApp.appearance)\n || !Array.isArray(value.projects) || !value.projects.every((item) => record(item) && exact(item, [\"id\", \"name\"]) && string(item.id) && string(item.name))\n || !Array.isArray(value.models) || !value.models.every((item) => record(item) && exact(item, [\"key\", \"label\"]) && string(item.key) && string(item.label))) return undefined;\n const thread = value.thread === undefined ? undefined : parseThread(value.thread);\n if (value.thread !== undefined && !thread) return undefined;\n return { ...value, ...(thread ? { thread } : {}) } as unknown as AgentWebAppBootstrap;\n}\n\nfunction parseThreadList(value: unknown): AgentWebAppThreadList | undefined {\n if (!record(value) || !exact(value, [\"records\", \"total\"]) || !Array.isArray(value.records) || typeof value.total !== \"number\") return undefined;\n const records = value.records.map(parseThread);\n return records.every((item): item is AgentWebAppRuntimeThread => item !== undefined) ? { records, total: value.total } : undefined;\n}\n\nfunction validMessage(value: unknown): boolean {\n return record(value) && string(value.id) && (value.role === \"human\" || value.role === \"ai\")\n && (value.content === undefined || string(value.content)\n || (Array.isArray(value.content) && value.content.every((block) => parseAgentWebAppGenUIBlock(block) !== undefined)));\n}\n\nfunction parseMessages(value: unknown): AgentWebAppMessageList | undefined {\n return record(value) && exact(value, [\"messages\"]) && Array.isArray(value.messages) && value.messages.every(validMessage)\n ? value as unknown as AgentWebAppMessageList : undefined;\n}\n\nfunction parseAttachment(value: unknown): AgentWebAppAttachment | undefined {\n return record(value) && exact(value, [\"ref\", \"name\", \"mimeType\", \"size\"])\n && string(value.ref) && string(value.name) && string(value.mimeType) && typeof value.size === \"number\"\n ? value as unknown as AgentWebAppAttachment : undefined;\n}\n\nfunction objectWith<T>(keys: string[], checks: (value: Record<string, unknown>) => boolean): (value: unknown) => T | undefined {\n return (value) => record(value) && exact(value, keys) && checks(value) ? value as unknown as T : undefined;\n}\n\nexport class AgentWebAppRuntimeClient {\n private readonly baseUrl: string;\n private readonly fetchImplementation: typeof globalThis.fetch;\n\n constructor(private readonly options: AgentWebAppRuntimeClientOptions) {\n this.baseUrl = `${options.gatewayUrl.replace(/\\/+$/, \"\")}/api/web-apps/${encodeURIComponent(options.webAppId)}/runtime`;\n this.fetchImplementation = options.fetch ?? globalThis.fetch.bind(globalThis);\n }\n\n async bootstrap(selection: AgentWebAppRuntimeSelection = {}, signal?: AbortSignal): Promise<AgentWebAppBootstrap> {\n return this.request(\"bootstrap\", parseBootstrap, { query: selection, signal });\n }\n\n async listThreads(selection: AgentWebAppProjectSelection = {}, signal?: AbortSignal): Promise<AgentWebAppThreadList> {\n return this.request(\"threads\", parseThreadList, { query: selection, signal });\n }\n\n async createThread(input: AgentWebAppCreateThreadInput = {}, signal?: AbortSignal): Promise<AgentWebAppRuntimeThread> {\n return this.request(\"threads\", parseThread, { method: \"POST\", body: input, signal });\n }\n\n async updateThread(threadId: string, input: AgentWebAppUpdateThreadInput, signal?: AbortSignal): Promise<AgentWebAppRuntimeThread> {\n return this.request(`threads/${encodeURIComponent(threadId)}`, parseThread, { method: \"PATCH\", body: input, signal });\n }\n\n async deleteThread(threadId: string, selection: AgentWebAppProjectSelection = {}, signal?: AbortSignal): Promise<void> {\n await this.request(`threads/${encodeURIComponent(threadId)}`, objectWith<{ id: string }>([\"id\"], (value) => string(value.id)), { method: \"DELETE\", query: selection, signal });\n }\n\n async getMessages(threadId: string, selection: AgentWebAppProjectSelection = {}, signal?: AbortSignal): Promise<AgentWebAppMessageList> {\n return this.request(`threads/${encodeURIComponent(threadId)}/messages`, parseMessages, { query: selection, signal });\n }\n\n async streamMessage(threadId: string, input: AgentWebAppStreamMessageInput, onEvent: AgentWebAppStreamEventHandler, signal?: AbortSignal): Promise<void> {\n return this.streamRequest(`threads/${encodeURIComponent(threadId)}/messages/stream`, input, onEvent, signal);\n }\n\n async resumeInterrupt(threadId: string, interruptId: string, input: AgentWebAppResumeInterruptInput, onEvent: AgentWebAppStreamEventHandler, signal?: AbortSignal): Promise<void> {\n return this.streamRequest(`threads/${encodeURIComponent(threadId)}/interrupts/${encodeURIComponent(interruptId)}/resume`, input, onEvent, signal);\n }\n\n private async streamRequest(path: string, body: object, onEvent: AgentWebAppStreamEventHandler, signal?: AbortSignal): Promise<void> {\n let response: Response;\n try {\n response = await this.fetchRequest(path, { method: \"POST\", body, signal });\n } catch (error) {\n if (isAbortError(error)) throw error;\n if (error instanceof AgentWebAppRuntimeClientError) throw error;\n throw new AgentWebAppRuntimeClientError(\"STREAM_FAILED\", \"Stream failed\", true);\n }\n if (!response.ok) await this.throwResponseError(response);\n if (!response.body || !response.headers.get(\"content-type\")?.toLowerCase().includes(\"text/event-stream\")) {\n if (response.body) try { await response.body.cancel(); } catch { /* Best effort. */ }\n throw new AgentWebAppRuntimeClientError(\"STREAM_FAILED\", \"Stream failed\", true, response.status);\n }\n await parseAgentWebAppEventStream(response.body, onEvent);\n }\n\n async abort(threadId: string, selection: AgentWebAppProjectSelection = {}, signal?: AbortSignal): Promise<void> {\n await this.request(`threads/${encodeURIComponent(threadId)}/abort`, objectWith<{ aborted: boolean }>([\"aborted\"], (value) => typeof value.aborted === \"boolean\"), { method: \"POST\", query: selection, signal });\n }\n\n async uploadAttachment(threadId: string, file: Blob, selection: AgentWebAppProjectSelection = {}, signal?: AbortSignal): Promise<AgentWebAppAttachment> {\n const form = new FormData();\n const filename = typeof File !== \"undefined\" && file instanceof File ? file.name : \"attachment\";\n form.append(\"file\", file, filename);\n return this.request(`threads/${encodeURIComponent(threadId)}/attachments`, parseAttachment, { method: \"POST\", query: selection, body: form, signal });\n }\n\n private async request<T>(path: string, parse: (value: unknown) => T | undefined, init: RequestOptions = {}): Promise<T> {\n let response: Response;\n try { response = await this.fetchRequest(path, init); }\n catch (error) {\n if (isAbortError(error)) throw error;\n if (error instanceof AgentWebAppRuntimeClientError) throw error;\n throw new AgentWebAppRuntimeClientError(\"INTERNAL_ERROR\", \"Request failed\", true);\n }\n let value: unknown;\n try { value = await response.json(); } catch { throw this.internalError(response.status); }\n if (isErrorEnvelope(value)) {\n throw new AgentWebAppRuntimeClientError(value.error.code, value.error.message, value.error.retryable, response.status);\n }\n if (!response.ok || !record(value) || !exact(value, [\"success\", \"data\"]) || value.success !== true) throw this.internalError(response.status);\n const data = parse(value.data);\n if (data === undefined) throw this.internalError(response.status);\n return data;\n }\n\n private async fetchRequest(path: string, options: RequestOptions): Promise<Response> {\n const identity = await this.options.identityProvider.getIdentity(options.signal);\n const url = new URL(`${this.baseUrl}/${path}`);\n for (const [key, value] of Object.entries(options.query ?? {})) if (value !== undefined) url.searchParams.set(key, value);\n const headers = new Headers();\n if (identity.bearerToken !== undefined) {\n headers.set(\"Authorization\", `Bearer ${identity.bearerToken}`);\n } else {\n headers.set(\"X-Axiom-External-User-Id\", identity.externalUserId ?? \"\");\n }\n let body: BodyInit | undefined;\n if (options.body instanceof FormData) body = options.body;\n else if (options.body !== undefined) { headers.set(\"Content-Type\", \"application/json\"); body = JSON.stringify(options.body); }\n return this.fetchImplementation(url, { method: options.method ?? \"GET\", headers, body, signal: options.signal, credentials: \"omit\" });\n }\n\n private async throwResponseError(response: Response): Promise<never> {\n let value: unknown;\n try { value = await response.json(); } catch { throw this.internalError(response.status); }\n if (isErrorEnvelope(value)) throw new AgentWebAppRuntimeClientError(value.error.code, value.error.message, value.error.retryable, response.status);\n throw this.internalError(response.status);\n }\n\n private internalError(status?: number): AgentWebAppRuntimeClientError {\n return new AgentWebAppRuntimeClientError(\"INTERNAL_ERROR\", \"Invalid server response\", false, status);\n }\n}\n\nfunction isAbortError(error: unknown): boolean {\n return typeof error === \"object\" && error !== null && \"name\" in error && error.name === \"AbortError\";\n}\n\ninterface RequestOptions {\n method?: \"GET\" | \"POST\" | \"PATCH\" | \"DELETE\";\n query?: { projectId?: string; modelKey?: string };\n body?: object | FormData;\n signal?: AbortSignal;\n}\n","const WRAPPER_PREFIXES: RegExp[] = [\n /^Error in middleware\\s+(?:\"[^\"]*\"|'[^']*'|[^:]+)\\s*:\\s*/,\n /^Caused by:\\s*/i,\n /^Error:\\s*/i,\n];\n\nfunction isMessageCarrier(value: unknown): value is { message: string } {\n return (\n typeof value === \"object\" &&\n value !== null &&\n typeof (value as { message?: unknown }).message === \"string\"\n );\n}\n\n/**\n * Unwrap a nested error chain to its root cause.\n *\n * LangChain's `wrapToolCall` prepends `Error in middleware \"<name>\": ` to\n * `error.message` at every middleware layer, so an upstream provider failure\n * arrives as a long chain such as\n * `Error in middleware \"A\": Error in middleware \"B\": 402 Insufficient Balance`.\n * For display we want only the innermost message.\n */\nexport function rootErrorMessage(message: string): string {\n if (typeof message !== \"string\" || message.length === 0) {\n return message;\n }\n\n const trimmed = message.trim();\n let current = trimmed;\n let stripped = true;\n while (stripped) {\n stripped = false;\n for (const prefix of WRAPPER_PREFIXES) {\n const next = current.replace(prefix, \"\");\n if (next !== current) {\n current = next.trim();\n stripped = true;\n break;\n }\n }\n }\n\n return current.length > 0 ? current : trimmed;\n}\n\n/**\n * Normalize any thrown value into a single display-ready root-cause string.\n */\nexport function formatErrorMessage(error: unknown, fallback = \"\"): string {\n let raw: string;\n if (error instanceof Error) {\n raw = error.message;\n } else if (typeof error === \"string\") {\n raw = error;\n } else if (isMessageCarrier(error)) {\n raw = error.message;\n } else if (error === null || error === undefined) {\n raw = \"\";\n } else {\n raw = String(error);\n }\n\n return rootErrorMessage(raw) || fallback;\n}\n","import type {\n AgentWebAppAttachment,\n AgentWebAppBootstrap,\n AgentWebAppInterrupt,\n AgentWebAppGenUIBlock,\n AgentWebAppRuntimeMessage,\n AgentWebAppRuntimeThread,\n} from \"../types\";\nimport type { AgentWebAppRuntimeClientError } from \"../error\";\n\nexport interface AgentWebAppToolState {\n id: string;\n name?: string;\n status: \"running\" | \"completed\";\n}\n\nexport interface AgentWebAppFailedSend {\n text: string;\n attachmentIds: string[];\n}\n\nexport interface AgentWebAppState {\n bootstrap: AgentWebAppBootstrap | null;\n projectId: string | null;\n modelKey: string | null;\n threads: AgentWebAppRuntimeThread[];\n activeThread: AgentWebAppRuntimeThread | null;\n messages: AgentWebAppRuntimeMessage[];\n stream: { isStreaming: boolean; assistantMessageId: string | null; tools: AgentWebAppToolState[] };\n lastFailedSend: AgentWebAppFailedSend | null;\n attachments: AgentWebAppAttachment[];\n interrupts: AgentWebAppInterrupt[];\n errors: { current: AgentWebAppRuntimeClientError | null };\n loading: { bootstrap: boolean; threads: boolean; messages: boolean; attachments: boolean; interrupts: boolean };\n}\n\nexport const initialAgentWebAppState: AgentWebAppState = {\n bootstrap: null,\n projectId: null,\n modelKey: null,\n threads: [],\n activeThread: null,\n messages: [],\n stream: { isStreaming: false, assistantMessageId: null, tools: [] },\n lastFailedSend: null,\n attachments: [],\n interrupts: [],\n errors: { current: null },\n loading: { bootstrap: true, threads: false, messages: false, attachments: false, interrupts: false },\n};\n\nexport type AgentWebAppAction =\n | { type: \"BOOTSTRAP_LOADING\" }\n | { type: \"BOOTSTRAP_READY\"; bootstrap: AgentWebAppBootstrap; projectId: string; modelKey: string | null }\n | { type: \"BOOTSTRAP_SETTLED\" }\n | { type: \"PROJECT_SELECTED\"; projectId: string }\n | { type: \"MODEL_SELECTED\"; modelKey: string }\n | { type: \"THREADS_LOADING\"; loading: boolean }\n | { type: \"THREADS_SET\"; threads: AgentWebAppRuntimeThread[] }\n | { type: \"THREAD_UPSERT\"; thread: AgentWebAppRuntimeThread }\n | { type: \"THREAD_DELETED\"; threadId: string }\n | { type: \"ACTIVE_THREAD_SET\"; thread: AgentWebAppRuntimeThread | null }\n | { type: \"ACTIVE_THREAD_UPDATED\"; thread: AgentWebAppRuntimeThread }\n | { type: \"MESSAGES_LOADING\"; loading: boolean }\n | { type: \"MESSAGES_SET\"; messages: AgentWebAppRuntimeMessage[] }\n | { type: \"MESSAGE_APPEND\"; message: AgentWebAppRuntimeMessage }\n | { type: \"MESSAGES_REMOVE\"; ids: string[] }\n | { type: \"ASSISTANT_DELTA\"; id: string; text: string }\n | { type: \"ASSISTANT_GENUI\"; id: string; block: AgentWebAppGenUIBlock }\n | { type: \"ASSISTANT_COMPLETED\"; temporaryId: string; messageId: string }\n | { type: \"STREAM_SET\"; streaming: boolean; assistantMessageId?: string | null }\n | { type: \"TOOL_STARTED\"; id: string; name: string }\n | { type: \"TOOL_COMPLETED\"; id: string }\n | { type: \"ATTACHMENTS_LOADING\"; loading: boolean }\n | { type: \"ATTACHMENT_ADD\"; attachment: AgentWebAppAttachment }\n | { type: \"ATTACHMENT_REMOVE\"; ref: string }\n | { type: \"ATTACHMENTS_CLEAR\" }\n | { type: \"ATTACHMENTS_REMOVE\"; refs: string[] }\n | { type: \"INTERRUPT_ADD\"; interrupt: AgentWebAppInterrupt }\n | { type: \"INTERRUPT_REMOVE\"; interruptId: string }\n | { type: \"INTERRUPTS_LOADING\"; loading: boolean }\n | { type: \"ERROR_SET\"; error: AgentWebAppRuntimeClientError | null }\n | { type: \"FAILED_SEND_SET\"; failedSend: AgentWebAppFailedSend | null };\n\nexport function agentWebAppReducer(state: AgentWebAppState, action: AgentWebAppAction): AgentWebAppState {\n switch (action.type) {\n case \"BOOTSTRAP_LOADING\": return { ...initialAgentWebAppState, loading: { ...initialAgentWebAppState.loading, bootstrap: true } };\n case \"BOOTSTRAP_READY\": return { ...state, bootstrap: action.bootstrap, projectId: action.projectId, modelKey: action.modelKey, loading: { ...state.loading, bootstrap: false } };\n case \"BOOTSTRAP_SETTLED\": return { ...state, loading: { ...state.loading, bootstrap: false } };\n case \"PROJECT_SELECTED\": return { ...state, projectId: action.projectId, threads: [], activeThread: null, messages: [], attachments: [], interrupts: [], stream: initialAgentWebAppState.stream, lastFailedSend: null, loading: { ...state.loading, messages: false, attachments: false, interrupts: false } };\n case \"MODEL_SELECTED\": return { ...state, modelKey: action.modelKey };\n case \"THREADS_LOADING\": return { ...state, loading: { ...state.loading, threads: action.loading } };\n case \"THREADS_SET\": return { ...state, threads: action.threads, loading: { ...state.loading, threads: false } };\n case \"THREAD_UPSERT\": return { ...state, threads: [action.thread, ...state.threads.filter((item) => item.id !== action.thread.id)], activeThread: state.activeThread?.id === action.thread.id ? action.thread : state.activeThread };\n case \"THREAD_DELETED\": return { ...state, threads: state.threads.filter((item) => item.id !== action.threadId), activeThread: state.activeThread?.id === action.threadId ? null : state.activeThread, messages: state.activeThread?.id === action.threadId ? [] : state.messages, lastFailedSend: state.activeThread?.id === action.threadId ? null : state.lastFailedSend };\n case \"ACTIVE_THREAD_SET\": return { ...state, activeThread: action.thread, messages: [], attachments: [], interrupts: [], stream: initialAgentWebAppState.stream, lastFailedSend: null, loading: { ...state.loading, messages: false, attachments: false, interrupts: false } };\n case \"ACTIVE_THREAD_UPDATED\": return { ...state, activeThread: action.thread };\n case \"MESSAGES_LOADING\": return { ...state, loading: { ...state.loading, messages: action.loading } };\n case \"MESSAGES_SET\": return { ...state, messages: action.messages, loading: { ...state.loading, messages: false } };\n case \"MESSAGE_APPEND\": return { ...state, messages: [...state.messages, action.message] };\n case \"MESSAGES_REMOVE\": return { ...state, messages: state.messages.filter((message) => !action.ids.includes(message.id)) };\n case \"ASSISTANT_DELTA\": {\n const index = state.messages.findIndex((message) => message.id === action.id);\n if (index < 0) return { ...state, messages: [...state.messages, { id: action.id, role: \"ai\", content: action.text }] };\n return { ...state, messages: state.messages.map((message, itemIndex) => itemIndex === index ? { ...message, content: `${message.content ?? \"\"}${action.text}` } : message) };\n }\n case \"ASSISTANT_GENUI\": {\n const widgetMessageId = `${action.id}-genui`;\n const index = state.messages.findIndex((message) => message.id === widgetMessageId);\n if (index < 0) return { ...state, messages: [...state.messages, { id: widgetMessageId, role: \"ai\", content: [action.block] }] };\n return { ...state, messages: state.messages.map((message, itemIndex) => itemIndex === index\n ? { ...message, content: [...(Array.isArray(message.content) ? message.content : []), action.block] }\n : message) };\n }\n case \"ASSISTANT_COMPLETED\": return { ...state, messages: state.messages.map((message) => message.id === action.temporaryId\n ? { ...message, id: action.messageId }\n : message.id === `${action.temporaryId}-genui` ? { ...message, id: `${action.messageId}-genui` } : message), stream: { ...state.stream, assistantMessageId: action.messageId } };\n case \"STREAM_SET\": return { ...state, stream: { ...state.stream, isStreaming: action.streaming, assistantMessageId: action.assistantMessageId === undefined ? state.stream.assistantMessageId : action.assistantMessageId, ...(action.streaming ? { tools: [] } : {}) } };\n case \"TOOL_STARTED\": return { ...state, stream: { ...state.stream, tools: [...state.stream.tools.filter((tool) => tool.id !== action.id), { id: action.id, name: action.name, status: \"running\" }] } };\n case \"TOOL_COMPLETED\": return { ...state, stream: { ...state.stream, tools: state.stream.tools.map((tool) => tool.id === action.id ? { ...tool, status: \"completed\" } : tool) } };\n case \"ATTACHMENTS_LOADING\": return { ...state, loading: { ...state.loading, attachments: action.loading } };\n case \"ATTACHMENT_ADD\": return { ...state, attachments: [...state.attachments, action.attachment], loading: { ...state.loading, attachments: false } };\n case \"ATTACHMENT_REMOVE\": return { ...state, attachments: state.attachments.filter((item) => item.ref !== action.ref) };\n case \"ATTACHMENTS_CLEAR\": return { ...state, attachments: [] };\n case \"ATTACHMENTS_REMOVE\": return { ...state, attachments: state.attachments.filter((item) => !action.refs.includes(item.ref)) };\n case \"INTERRUPT_ADD\": return { ...state, interrupts: [...state.interrupts.filter((item) => item.id !== action.interrupt.id), action.interrupt] };\n case \"INTERRUPT_REMOVE\": return { ...state, interrupts: state.interrupts.filter((item) => item.id !== action.interruptId), loading: { ...state.loading, interrupts: false } };\n case \"INTERRUPTS_LOADING\": return { ...state, loading: { ...state.loading, interrupts: action.loading } };\n case \"ERROR_SET\": return { ...state, errors: { current: action.error }, loading: action.error && !state.bootstrap ? { ...state.loading, bootstrap: false } : state.loading };\n case \"FAILED_SEND_SET\": return { ...state, lastFailedSend: action.failedSend };\n }\n}\n","import { useContext } from \"react\";\nimport { AgentWebAppContext } from \"../AgentWebAppContext\";\n\nexport function useAgentWebApp() {\n const context = useContext(AgentWebAppContext);\n if (!context) throw new Error(\"useAgentWebApp must be used within AgentWebAppProvider\");\n return context;\n}\n","import { useContext } from \"react\";\nimport { AgentWebAppContext } from \"../AgentWebAppContext\";\n\nexport function useWidgetAttachments() {\n const context = useContext(AgentWebAppContext);\n if (!context) throw new Error(\"useWidgetAttachments must be used within AgentWebAppProvider\");\n return {\n attachments: context.attachments,\n isLoading: context.loading.attachments,\n error: context.errors.current,\n uploadAttachment: context.uploadAttachment,\n removeAttachment: context.removeAttachment,\n clearAttachments: context.clearAttachments,\n };\n}\n","import { useContext } from \"react\";\nimport { AgentWebAppContext } from \"../AgentWebAppContext\";\n\nexport function useWidgetChat() {\n const context = useContext(AgentWebAppContext);\n if (!context) throw new Error(\"useWidgetChat must be used within AgentWebAppProvider\");\n return {\n activeThread: context.activeThread,\n messages: context.messages,\n tools: context.stream.tools,\n isStreaming: context.stream.isStreaming,\n isLoading: context.loading.messages,\n lastFailedSend: context.lastFailedSend,\n error: context.errors.current,\n sendMessage: context.sendMessage,\n retry: context.retryLastMessage,\n abort: context.abort,\n };\n}\n","import { useContext } from \"react\";\nimport { AgentWebAppContext } from \"../AgentWebAppContext\";\n\nexport function useWidgetInterrupts() {\n const context = useContext(AgentWebAppContext);\n if (!context) throw new Error(\"useWidgetInterrupts must be used within AgentWebAppProvider\");\n return {\n interrupts: context.interrupts,\n isLoading: context.loading.interrupts,\n error: context.errors.current,\n resumeInterrupt: context.resumeInterrupt,\n };\n}\n","import { useContext } from \"react\";\nimport { AgentWebAppContext } from \"../AgentWebAppContext\";\n\nexport function useWidgetProject() {\n const context = useContext(AgentWebAppContext);\n if (!context) throw new Error(\"useWidgetProject must be used within AgentWebAppProvider\");\n return {\n bootstrap: context.bootstrap,\n projectId: context.projectId,\n modelKey: context.modelKey,\n selectProject: context.selectProject,\n selectModel: context.selectModel,\n isLoading: context.loading.bootstrap || context.loading.threads,\n error: context.errors.current,\n };\n}\n","import { useContext } from \"react\";\nimport { AgentWebAppContext } from \"../AgentWebAppContext\";\n\nexport function useWidgetThreads() {\n const context = useContext(AgentWebAppContext);\n if (!context) throw new Error(\"useWidgetThreads must be used within AgentWebAppProvider\");\n return {\n threads: context.threads,\n activeThread: context.activeThread,\n isLoading: context.loading.bootstrap || context.loading.threads,\n error: context.errors.current,\n refreshThreads: context.refreshThreads,\n selectThread: context.selectThread,\n createThread: context.createThread,\n renameThread: context.renameThread,\n deleteThread: context.deleteThread,\n };\n}\n","import React, { useRef, useState } from \"react\";\nimport { useWidgetAttachments } from \"../hooks/useWidgetAttachments\";\nimport { useWidgetChat } from \"../hooks/useWidgetChat\";\nimport { useWidgetProject } from \"../hooks/useWidgetProject\";\nimport { widgetErrorMessage } from \"./widget-utils\";\n\nexport interface WidgetAttachmentsProps { className?: string; attachLabel?: string; }\n\nexport function WidgetAttachments({ className, attachLabel = \"Attach files\" }: WidgetAttachmentsProps): React.ReactElement | null {\n const { bootstrap } = useWidgetProject();\n const { activeThread } = useWidgetChat();\n const { attachments, isLoading, uploadAttachment, removeAttachment } = useWidgetAttachments();\n const pendingRef = useRef(false);\n const [pending, setPending] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n if (!bootstrap?.webApp.features.attachments) return null;\n const upload = async (event: React.ChangeEvent<HTMLInputElement>): Promise<void> => {\n if (pendingRef.current) return;\n pendingRef.current = true;\n setPending(true);\n setError(null);\n try { for (const file of Array.from(event.target.files ?? [])) await uploadAttachment(file); }\n catch (uploadError) { setError(widgetErrorMessage(uploadError)); }\n finally { pendingRef.current = false; setPending(false); if (inputRef.current) inputRef.current.value = \"\"; }\n };\n return <div className={className}>{attachments.length > 0 && <div className=\"axiom-web-app__attachments\">{attachments.map((attachment) => <span className=\"axiom-web-app__attachment\" key={attachment.ref}>{attachment.name}<button type=\"button\" aria-label={`Remove ${attachment.name}`} onClick={() => removeAttachment(attachment.ref)}>Remove</button></span>)}</div>}{error && <p className=\"axiom-web-app__error\" role=\"alert\">{error}</p>}<label className=\"axiom-web-app__attach\"><span>{isLoading || pending ? \"Uploading...\" : attachLabel}</span><input ref={inputRef} type=\"file\" multiple aria-label={attachLabel} disabled={!activeThread || isLoading || pending} onChange={(event) => void upload(event)} /></label></div>;\n}\n","import { formatErrorMessage } from \"../../../utils/errorMessage\";\n\nexport function widgetErrorMessage(error: unknown): string {\n return formatErrorMessage(error, \"Request failed\");\n}\n","import React, { useRef, useState } from \"react\";\nimport { useWidgetChat } from \"../hooks/useWidgetChat\";\nimport { widgetErrorMessage } from \"./widget-utils\";\n\nexport interface WidgetComposerProps { className?: string; messageLabel?: string; placeholder?: string; sendLabel?: string; abortLabel?: string; leadingSlot?: React.ReactNode; }\n\nexport function WidgetComposer({ className, messageLabel = \"Message\", placeholder = \"Ask a question\", sendLabel = \"Send message\", abortLabel = \"Stop response\", leadingSlot }: WidgetComposerProps): React.ReactElement {\n const { activeThread, isStreaming, sendMessage, abort, retry, lastFailedSend } = useWidgetChat();\n const pendingRef = useRef(false);\n const draftRef = useRef(\"\");\n const [pending, setPending] = useState(false);\n const [text, setText] = useState(\"\");\n const [error, setError] = useState<string | null>(null);\n const run = async (operation: () => Promise<void>): Promise<void> => {\n if (pendingRef.current) return;\n pendingRef.current = true; setPending(true); setError(null);\n try { await operation(); }\n catch (operationError) { setError(widgetErrorMessage(operationError)); }\n finally { pendingRef.current = false; setPending(false); }\n };\n const submit = (event: React.FormEvent): void => {\n event.preventDefault();\n const content = text.trim();\n if (!content || isStreaming) return;\n draftRef.current = \"\";\n setText(\"\");\n void (async () => {\n if (pendingRef.current) return;\n pendingRef.current = true; setPending(true); setError(null);\n try { await sendMessage(content); }\n catch (sendError) {\n setError(widgetErrorMessage(sendError));\n if (draftRef.current === \"\") { draftRef.current = content; setText(content); }\n } finally { pendingRef.current = false; setPending(false); }\n })();\n };\n return <form className={`axiom-web-app__composer${className ? ` ${className}` : \"\"}`} onSubmit={submit}>{leadingSlot}{error && <p className=\"axiom-web-app__error\" role=\"alert\">{error}</p>}<label className=\"axiom-web-app__composer-input\"><span className=\"axiom-web-app__sr-only\">{messageLabel}</span><textarea aria-label={messageLabel} value={text} placeholder={placeholder} disabled={!activeThread} onChange={(event) => { draftRef.current = event.target.value; setText(event.target.value); }} /></label><div className=\"axiom-web-app__composer-actions\">{lastFailedSend && <button type=\"button\" onClick={() => void run(retry)} disabled={isStreaming || pending}>Retry failed message</button>}{isStreaming ? <button type=\"button\" disabled={pending} onClick={() => void run(abort)}>{abortLabel}</button> : <button type=\"submit\" disabled={!activeThread || !text.trim() || pending}>{sendLabel}</button>}</div></form>;\n}\n","import { useRef, useState } from \"react\";\n\nexport type ReviewDecision = \"approve\" | \"reject\";\n\nexport interface ReviewDecisionState {\n feedback: string;\n setFeedback(value: string): void;\n pending: ReviewDecision | null;\n submitted: boolean;\n error: unknown;\n submit(decision: ReviewDecision): Promise<boolean>;\n}\n\n/** Shared decision state for Console and WebApp review adapters. */\nexport function useReviewDecision(\n onSubmit: (decision: ReviewDecision, trimmedFeedback: string) => void | Promise<void>,\n): ReviewDecisionState {\n const submittingRef = useRef(false);\n const [feedback, setFeedback] = useState(\"\");\n const [pending, setPending] = useState<ReviewDecision | null>(null);\n const [submitted, setSubmitted] = useState(false);\n const [error, setError] = useState<unknown>(null);\n\n const submit = async (decision: ReviewDecision): Promise<boolean> => {\n if (submittingRef.current) return false;\n submittingRef.current = true;\n setPending(decision);\n setError(null);\n try {\n await Promise.resolve(onSubmit(decision, feedback.trim()));\n setSubmitted(true);\n return true;\n } catch (submitError) {\n setError(submitError);\n return false;\n } finally {\n submittingRef.current = false;\n setPending(null);\n }\n };\n\n return { feedback, setFeedback, pending, submitted, error, submit };\n}\n","import React from \"react\";\nimport type { AgentWebAppInterrupt, AgentWebAppInterruptResponse } from \"../types\";\nimport { useReviewDecision } from \"../../../components/shared/useReviewDecision\";\nimport { formatErrorMessage } from \"../../../utils/errorMessage\";\n\nexport interface WidgetInterruptViewProps {\n interrupt: AgentWebAppInterrupt;\n onSubmit(interruptId: string, response: AgentWebAppInterruptResponse, message: string): Promise<void>;\n className?: string;\n approveLabel?: string;\n rejectLabel?: string;\n feedbackLabel?: string;\n disabled?: boolean;\n}\n\nfunction errorMessage(error: unknown): string {\n return formatErrorMessage(error, \"Unable to submit review\");\n}\n\nexport function WidgetInterruptView({ interrupt, onSubmit, className, approveLabel = \"Approve\", rejectLabel = \"Reject\", feedbackLabel = \"Feedback\", disabled = false }: WidgetInterruptViewProps): React.ReactElement {\n const review = useReviewDecision(async (decision, feedback) => {\n const approved = decision === \"approve\";\n await onSubmit(interrupt.id, { approved, ...(feedback ? { feedback } : {}) }, feedback || (approved ? \"Approved\" : \"Changes requested\"));\n });\n\n const submit = async (approved: boolean): Promise<void> => {\n if (disabled) return;\n await review.submit(approved ? \"approve\" : \"reject\");\n };\n\n return (\n <section className={`axiom-web-app__interrupt${className ? ` ${className}` : \"\"}`} aria-label=\"Human review\">\n <strong>{interrupt.prompt}</strong>\n {interrupt.data && <p className=\"axiom-web-app__interrupt-fallback\">Additional review details are unavailable.</p>}\n <label className=\"axiom-web-app__feedback\">\n <span>{feedbackLabel}</span>\n <textarea value={review.feedback} disabled={disabled || review.pending !== null} onChange={(event) => review.setFeedback(event.target.value)} />\n </label>\n {review.error !== null && <p className=\"axiom-web-app__error\" role=\"alert\">{errorMessage(review.error)}</p>}\n <div className=\"axiom-web-app__interrupt-actions\">\n <button type=\"button\" disabled={disabled || review.pending !== null} onClick={() => void submit(false)}>{rejectLabel}</button>\n <button type=\"button\" disabled={disabled || review.pending !== null} onClick={() => void submit(true)}>{approveLabel}</button>\n </div>\n </section>\n );\n}\n","import React from \"react\";\nimport type { AgentWebAppInterrupt } from \"../types\";\nimport { useWidgetInterrupts } from \"../hooks/useWidgetInterrupts\";\nimport { useWidgetProject } from \"../hooks/useWidgetProject\";\nimport { WidgetInterruptView } from \"./WidgetInterruptView\";\n\nexport interface WidgetInterruptProps { interrupt: AgentWebAppInterrupt; className?: string; approveLabel?: string; rejectLabel?: string; feedbackLabel?: string; }\n\nexport function WidgetInterrupt(props: WidgetInterruptProps): React.ReactElement | null {\n const { bootstrap } = useWidgetProject();\n const { isLoading, resumeInterrupt } = useWidgetInterrupts();\n if (!bootstrap?.webApp.features.hitl) return null;\n return <WidgetInterruptView {...props} disabled={isLoading} onSubmit={resumeInterrupt} />;\n}\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","import { clsx } from 'clsx';\nimport React, { useMemo } from 'react';\nimport { Parser, Renderer } from \"./core\";\nimport DebugPanel from \"./DebugPanel\";\nimport { useStreaming } from \"./hooks\";\nimport \"./index.css\";\nconst XMarkdown = /*#__PURE__*/React.memo(props => {\n const {\n streaming,\n config,\n components,\n paragraphTag,\n content,\n children,\n rootClassName,\n className,\n style,\n openLinksInNewTab,\n dompurifyConfig,\n protectCustomTagNewlines,\n escapeRawHtml,\n debug\n } = props;\n\n // ============================ style ============================\n const mergedCls = clsx('x-markdown', rootClassName, className);\n\n // ============================ Streaming ============================\n const displayContent = useStreaming(content || children || '', {\n streaming,\n components\n });\n // ============================ Render ============================\n const parser = useMemo(() => new Parser({\n markedConfig: config,\n paragraphTag,\n openLinksInNewTab,\n components,\n protectCustomTagNewlines,\n escapeRawHtml\n }), [config, paragraphTag, openLinksInNewTab, components, protectCustomTagNewlines, escapeRawHtml]);\n const renderer = useMemo(() => new Renderer({\n components: components,\n dompurifyConfig,\n streaming\n }), [components, dompurifyConfig, streaming]);\n const htmlString = useMemo(() => {\n if (!displayContent) return '';\n return parser.parse(displayContent);\n }, [displayContent, parser]);\n if (!displayContent) return null;\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"div\", {\n className: mergedCls,\n style: style\n }, renderer.render(htmlString)), debug ? /*#__PURE__*/React.createElement(DebugPanel, null) : null);\n});\nif (process.env.NODE_ENV !== 'production') {\n XMarkdown.displayName = 'XMarkdown';\n}\nexport default XMarkdown;","import { Marked } from 'marked';\nexport const other = {\n escapeTestNoEncode: /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/,\n escapeTest: /[&<>\"'/]/,\n notSpaceStart: /^\\S*/,\n endingNewline: /\\n$/,\n escapeReplace: /[&<>\"'/]/g,\n escapeReplaceNoEncode: /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/g,\n completeFencedCode: /^ {0,3}(`{3,}|~{3,})([\\s\\S]*?)\\n {0,3}\\1[ \\n\\t]*$/\n};\nconst escapeReplacements = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '/': '/'\n};\nconst getEscapeReplacement = ch => escapeReplacements[ch];\nexport function escapeHtml(html, encode) {\n if (encode) {\n if (other.escapeTest.test(html)) {\n return html.replace(other.escapeReplace, getEscapeReplacement);\n }\n } else {\n if (other.escapeTestNoEncode.test(html)) {\n return html.replace(other.escapeReplaceNoEncode, getEscapeReplacement);\n }\n }\n return html;\n}\nclass Parser {\n options;\n markdownInstance;\n constructor(options = {}) {\n const {\n markedConfig = {}\n } = options;\n this.options = options;\n this.markdownInstance = new Marked();\n this.configureLinkRenderer();\n this.configureParagraphRenderer();\n this.configureCodeRenderer();\n this.configureHtmlEscapeRenderer();\n // user config at last\n this.markdownInstance.use(markedConfig);\n }\n configureHtmlEscapeRenderer() {\n if (!this.options.escapeRawHtml) return;\n const renderer = {\n html(token) {\n const {\n raw = '',\n text = ''\n } = token;\n return escapeHtml(raw || text, true);\n }\n };\n this.markdownInstance.use({\n renderer\n });\n }\n configureLinkRenderer() {\n if (!this.options.openLinksInNewTab) return;\n const renderer = {\n link({\n href,\n title,\n tokens\n }) {\n const text = this.parser.parseInline(tokens);\n const titleAttr = title ? ` title=\"${title}\"` : '';\n return `<a href=\"${href}\"${titleAttr} target=\"_blank\" rel=\"noopener noreferrer\">${text}</a>`;\n }\n };\n this.markdownInstance.use({\n renderer\n });\n }\n configureParagraphRenderer() {\n const {\n paragraphTag\n } = this.options;\n if (!paragraphTag) return;\n const renderer = {\n paragraph({\n tokens\n }) {\n return `<${paragraphTag}>${this.parser.parseInline(tokens)}</${paragraphTag}>\\n`;\n }\n };\n this.markdownInstance.use({\n renderer\n });\n }\n configureCodeRenderer() {\n const renderer = {\n code({\n text,\n raw,\n lang,\n escaped,\n codeBlockStyle\n }) {\n const infoString = (lang || '').trim();\n const langString = infoString.match(other.notSpaceStart)?.[0];\n const code = `${text.replace(other.endingNewline, '')}\\n`;\n const isIndentedCode = codeBlockStyle === 'indented';\n // if code is indented, it's done because it has no end tag\n const streamStatus = isIndentedCode || other.completeFencedCode.test(raw) ? 'done' : 'loading';\n const escapedCode = escaped ? code : escapeHtml(code, true);\n const classAttr = langString ? ` class=\"language-${escapeHtml(langString)}\"` : '';\n const dataAttrs = ` data-block=\"true\" data-state=\"${streamStatus}\"` + (infoString ? ` data-lang=\"${escapeHtml(infoString)}\"` : '');\n return `<pre><code${dataAttrs}${classAttr}>${escapedCode}</code></pre>\\n`;\n }\n };\n this.markdownInstance.use({\n renderer\n });\n }\n protectCustomTags(content) {\n const placeholders = new Map();\n const customTagNames = Object.keys(this.options.components || {});\n if (customTagNames.length === 0) {\n return {\n protected: content,\n placeholders\n };\n }\n let placeholderIndex = 0;\n const tagNamePattern = customTagNames.map(name => name.toLowerCase().replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')).join('|');\n const openTagRegex = new RegExp(`<(${tagNamePattern})(?:\\\\s[^>]*)?>`, 'gi');\n const closeTagRegex = new RegExp(`</(${tagNamePattern})>`, 'gi');\n const positions = [];\n let match;\n openTagRegex.lastIndex = 0;\n match = openTagRegex.exec(content);\n while (match !== null) {\n positions.push({\n index: match.index,\n type: 'open',\n tagName: match[1].toLowerCase(),\n match: match[0]\n });\n match = openTagRegex.exec(content);\n }\n closeTagRegex.lastIndex = 0;\n match = closeTagRegex.exec(content);\n while (match !== null) {\n positions.push({\n index: match.index,\n type: 'close',\n tagName: match[1].toLowerCase(),\n match: match[0]\n });\n match = closeTagRegex.exec(content);\n }\n positions.sort((a, b) => a.index - b.index);\n const stack = [];\n const result = [];\n let lastIndex = 0;\n positions.forEach(pos => {\n if (pos.type === 'open') {\n // Self-closing tags don't have inner content, so they shouldn't be pushed to the stack.\n if (!pos.match.endsWith('/>')) {\n stack.push({\n tagName: pos.tagName,\n start: pos.index,\n openTag: pos.match\n });\n }\n } else if (pos.type === 'close' && stack.length > 0 && stack[stack.length - 1].tagName === pos.tagName) {\n const open = stack.pop();\n if (stack.length === 0) {\n const startPos = open.start;\n const endPos = pos.index + pos.match.length;\n const openTag = open.openTag;\n const closeTag = pos.match;\n const innerContent = content.slice(startPos + openTag.length, pos.index);\n if (lastIndex < startPos) {\n result.push(content.slice(lastIndex, startPos));\n }\n if (innerContent.includes('\\n\\n')) {\n const protectedInner = innerContent.replace(/\\n\\n/g, () => {\n const ph = `__X_MD_PLACEHOLDER_${placeholderIndex++}__`;\n placeholders.set(ph, '\\n\\n');\n return ph;\n });\n result.push(openTag + protectedInner + closeTag);\n } else {\n result.push(openTag + innerContent + closeTag);\n }\n lastIndex = endPos;\n }\n }\n });\n if (lastIndex < content.length) {\n result.push(content.slice(lastIndex));\n }\n return {\n protected: result.join(''),\n placeholders\n };\n }\n restorePlaceholders(content, placeholders) {\n if (placeholders.size === 0) {\n return content;\n }\n return content.replace(/__X_MD_PLACEHOLDER_\\d+__/g, match => placeholders.get(match) ?? match);\n }\n parse(content) {\n if (this.options.protectCustomTagNewlines) {\n const {\n protected: protectedContent,\n placeholders\n } = this.protectCustomTags(content);\n const parsed = this.markdownInstance.parse(protectedContent);\n return this.restorePlaceholders(parsed, placeholders);\n }\n return this.markdownInstance.parse(content);\n }\n}\nexport default Parser;","import DOMPurify from 'dompurify';\nimport parseHtml, { domToReact } from 'html-react-parser';\nimport React from 'react';\nimport AnimationText from \"../AnimationText\";\nclass Renderer {\n options;\n static NON_WHITESPACE_REGEX = /[^\\r\\n\\s]+/;\n constructor(options) {\n this.options = options;\n }\n\n /**\n * Detect unclosed tags using regular expressions\n */\n detectUnclosedTags(htmlString) {\n const unclosedTags = new Set();\n const stack = [];\n const tagRegex = /<\\/?([a-zA-Z][a-zA-Z0-9-]*)(?:\\s[^>]*)?>/g;\n let match = tagRegex.exec(htmlString);\n while (match !== null) {\n const [fullMatch, tagName] = match;\n const isClosing = fullMatch.startsWith('</');\n const isSelfClosing = fullMatch.endsWith('/>');\n if (this.options.components?.[tagName.toLowerCase()]) {\n if (isClosing) {\n // Found closing tag, pop from stack\n const lastIndex = stack.lastIndexOf(tagName.toLowerCase());\n if (lastIndex !== -1) {\n stack.splice(lastIndex, 1);\n }\n } else if (!isSelfClosing) {\n // Found opening tag, push to stack\n stack.push(tagName.toLowerCase());\n }\n }\n match = tagRegex.exec(htmlString);\n }\n\n // Remaining tags in stack are unclosed\n stack.forEach(tag => {\n unclosedTags.add(tag);\n });\n return unclosedTags;\n }\n\n /**\n * Configure DOMPurify to preserve components and target attributes, filter everything else\n */\n configureDOMPurify() {\n const customComponents = Object.keys(this.options.components || {});\n const userConfig = this.options.dompurifyConfig || {};\n const allowedTags = Array.isArray(userConfig.ADD_TAGS) ? userConfig.ADD_TAGS : [];\n const addAttr = Array.isArray(userConfig.ADD_ATTR) ? userConfig.ADD_ATTR : [];\n return {\n ...userConfig,\n ADD_TAGS: Array.from(new Set([...customComponents, ...allowedTags])),\n ADD_ATTR: Array.from(new Set(['target', 'rel', ...addAttr]))\n };\n }\n createReplaceElement(unclosedTags, cidRef) {\n const {\n enableAnimation,\n animationConfig\n } = this.options.streaming || {};\n return domNode => {\n const key = `x-markdown-component-${cidRef.current++}`;\n\n // Check if it's a text node with data\n const isValidTextNode = domNode.type === 'text' && domNode.data && Renderer.NON_WHITESPACE_REGEX.test(domNode.data);\n // Skip animation for text nodes inside custom components to preserve their internal structure\n const parentTagName = domNode.parent?.name;\n const isParentCustomComponent = parentTagName && this.options.components?.[parentTagName];\n const shouldReplaceText = enableAnimation && isValidTextNode && !isParentCustomComponent;\n if (shouldReplaceText) {\n return /*#__PURE__*/React.createElement(AnimationText, {\n text: domNode.data,\n key,\n animationConfig\n });\n }\n if (!('name' in domNode)) return;\n const {\n name,\n attribs,\n children\n } = domNode;\n const renderElement = this.options.components?.[name];\n if (renderElement) {\n const streamStatus = unclosedTags?.has(name) ? 'loading' : 'done';\n const props = {\n domNode,\n streamStatus,\n key,\n ...attribs,\n ...(attribs.disabled !== undefined && {\n disabled: true\n }),\n ...(attribs.checked !== undefined && {\n checked: true\n })\n };\n\n // Handle class and className merging\n const classes = [props.className, props.classname, props.class].filter(Boolean).join(' ').trim();\n props.className = classes || '';\n if (name === 'code') {\n const {\n 'data-block': block = 'false',\n 'data-state': codeStreamStatus = 'done'\n } = attribs || {};\n props.block = block === 'true';\n props.streamStatus = codeStreamStatus === 'loading' ? 'loading' : 'done';\n const langFromData = attribs?.['data-lang'];\n const langFromClass = attribs?.class?.match(/(?:^|\\s)language-([^\\s]+)/)?.[1] ?? attribs?.class?.match(/(?:^|\\s)lang-([^\\s]+)/)?.[1];\n const lang = langFromData || langFromClass;\n if (lang) {\n props.lang = lang;\n }\n }\n if (children) {\n props.children = this.processChildren(children, unclosedTags, cidRef);\n }\n return /*#__PURE__*/React.createElement(renderElement, props);\n }\n };\n }\n processChildren(children, unclosedTags, cidRef) {\n return domToReact(children, {\n replace: this.createReplaceElement(unclosedTags, cidRef)\n });\n }\n processHtml(htmlString) {\n const unclosedTags = this.detectUnclosedTags(htmlString);\n const cidRef = {\n current: 0\n };\n\n // Use DOMPurify to clean HTML while preserving custom components and target attributes\n const purifyConfig = this.configureDOMPurify();\n const cleanHtml = DOMPurify.sanitize(htmlString, purifyConfig);\n return parseHtml(cleanHtml, {\n replace: this.createReplaceElement(unclosedTags, cidRef)\n });\n }\n render(html) {\n return this.processHtml(html);\n }\n}\nexport default Renderer;","import React, { useEffect, useMemo, useRef, useState } from 'react';\nconst AnimationText = /*#__PURE__*/React.memo(props => {\n const {\n text,\n animationConfig\n } = props;\n const {\n fadeDuration = 200,\n easing = 'ease-in-out'\n } = animationConfig || {};\n const [chunks, setChunks] = useState([]);\n const prevTextRef = useRef('');\n useEffect(() => {\n if (text === prevTextRef.current) return;\n if (!(prevTextRef.current && text.indexOf(prevTextRef.current) === 0)) {\n setChunks([text]);\n prevTextRef.current = text;\n return;\n }\n const newText = text.slice(prevTextRef.current.length);\n if (!newText) return;\n setChunks(prev => [...prev, newText]);\n prevTextRef.current = text;\n }, [text]);\n const animationStyle = useMemo(() => ({\n animation: `x-markdown-fade-in ${fadeDuration}ms ${easing} forwards`,\n color: 'inherit'\n }), [fadeDuration, easing]);\n return /*#__PURE__*/React.createElement(React.Fragment, null, chunks.map((text, index) => /*#__PURE__*/React.createElement(\"span\", {\n style: animationStyle,\n key: `animation-text-${index}`\n }, text)));\n});\nexport default AnimationText;","import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport \"./DebugPanel.css\";\nconst CONSTANTS = {\n FPS_THRESHOLD: {\n GOOD: 55,\n WARNING: 40\n },\n COLORS: {\n GOOD: '#52c41a',\n WARNING: '#faad14',\n DANGER: '#ff4d4f'\n },\n CHART: {\n WIDTH: 750,\n HEIGHT: 400,\n PADDING: 80\n }\n};\nconst getInitialPosition = () => {\n if (typeof window === 'undefined') {\n return {\n x: 12,\n y: 12\n };\n }\n return {\n x: window.innerWidth - 220,\n y: window.innerHeight / 2 - 100\n };\n};\nconst DebugPanel = () => {\n const [fps, setFps] = useState(0);\n const [memory, setMemory] = useState(0);\n const [isRecording, setIsRecording] = useState(false);\n const [showModal, setShowModal] = useState(false);\n const [records, setRecords] = useState([]);\n const [position, setPosition] = useState(getInitialPosition());\n const [isMounted, setIsMounted] = useState(false);\n const recordingRef = useRef([]);\n const frameTimesRef = useRef([]);\n const lastTimeRef = useRef(0);\n const frameCountRef = useRef(0);\n const animationRef = useRef(undefined);\n const dragRef = useRef({\n isDragging: false,\n startX: 0,\n startY: 0,\n initialX: 0,\n initialY: 0\n });\n useEffect(() => {\n // 仅在客户端运行\n if (typeof window === 'undefined') return;\n\n // 仅在客户端初始化\n if (!isMounted) {\n setIsMounted(true);\n lastTimeRef.current = performance.now();\n }\n const update = () => {\n const now = performance.now();\n const delta = now - lastTimeRef.current;\n frameTimesRef.current.push(delta);\n if (frameTimesRef.current.length > 60) frameTimesRef.current.shift();\n frameCountRef.current++;\n if (delta >= 1000) {\n const currentFps = Math.round(frameCountRef.current * 1000 / delta);\n const currentMemory = getMemoryUsage();\n setFps(currentFps);\n setMemory(currentMemory);\n if (isRecording) {\n recordingRef.current.push({\n timestamp: Date.now(),\n fps: currentFps,\n memory: currentMemory\n });\n }\n frameCountRef.current = 0;\n lastTimeRef.current = now;\n }\n animationRef.current = requestAnimationFrame(update);\n };\n animationRef.current = requestAnimationFrame(update);\n return () => {\n if (animationRef.current !== undefined) {\n cancelAnimationFrame(animationRef.current);\n }\n };\n }, [isRecording, isMounted]);\n const getMemoryUsage = () => {\n const perf = performance;\n return perf.memory ? Math.round(perf.memory.usedJSHeapSize / 1024 / 1024) : 0;\n };\n const formatMemory = mb => {\n if (mb < 1) return `${Math.round(mb * 1024)} KB`;\n if (mb >= 1024) return `${(mb / 1024).toFixed(2)} GB`;\n return `${mb.toFixed(2)} MB`;\n };\n const getFpsColor = value => {\n if (value >= CONSTANTS.FPS_THRESHOLD.GOOD) return CONSTANTS.COLORS.GOOD;\n if (value >= CONSTANTS.FPS_THRESHOLD.WARNING) return CONSTANTS.COLORS.WARNING;\n return CONSTANTS.COLORS.DANGER;\n };\n const toggleRecording = useCallback(() => {\n if (isRecording) {\n setIsRecording(false);\n setRecords([...recordingRef.current]);\n setShowModal(true);\n } else {\n recordingRef.current = [];\n setIsRecording(true);\n }\n }, [isRecording]);\n const handleMouseDown = useCallback(e => {\n if (e.target.closest('.x-markdown-debug-action')) return;\n dragRef.current = {\n isDragging: true,\n startX: e.clientX,\n startY: e.clientY,\n initialX: position.x,\n initialY: position.y\n };\n }, [position]);\n const handleMouseMove = useCallback(e => {\n if (!dragRef.current.isDragging) return;\n const dx = e.clientX - dragRef.current.startX;\n const dy = e.clientY - dragRef.current.startY;\n setPosition({\n x: dragRef.current.initialX + dx,\n y: dragRef.current.initialY + dy\n });\n }, []);\n const handleMouseUp = useCallback(() => {\n dragRef.current.isDragging = false;\n }, []);\n useEffect(() => {\n // 仅在客户端运行\n if (typeof window === 'undefined') return;\n document.addEventListener('mousemove', handleMouseMove);\n document.addEventListener('mouseup', handleMouseUp);\n return () => {\n document.removeEventListener('mousemove', handleMouseMove);\n document.removeEventListener('mouseup', handleMouseUp);\n };\n }, [handleMouseMove, handleMouseUp]);\n const PerformanceChart = () => {\n if (!records.length) return null;\n const {\n WIDTH,\n HEIGHT,\n PADDING\n } = CONSTANTS.CHART;\n const chartWidth = WIDTH - PADDING * 2;\n const chartHeight = HEIGHT - PADDING * 2;\n const startTime = records[0]?.timestamp ?? 0;\n const endTime = records[records.length - 1]?.timestamp ?? 0;\n const duration = endTime - startTime || 1;\n const maxFps = Math.max(...records.map(r => r.fps), 60);\n const maxMemory = Math.max(...records.map(r => r.memory), 0) * 1.1;\n const avgFps = records.length > 0 ? records.reduce((sum, r) => sum + r.fps, 0) / records.length : 0;\n const avgMemory = records.length > 0 ? records.reduce((sum, r) => sum + r.memory, 0) / records.length : 0;\n const minFps = records.length > 0 ? Math.min(...records.map(r => r.fps)) : 0;\n const maxFpsValue = records.length > 0 ? Math.max(...records.map(r => r.fps)) : 0;\n const createPoints = (key, max) => records.map(r => {\n const x = PADDING + (r.timestamp - startTime) / duration * chartWidth;\n const y = PADDING + chartHeight - r[key] / max * chartHeight;\n return `${x},${y}`;\n }).join(' ');\n return /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-modal-content\"\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-stats-summary\"\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-stat-item\"\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-stat-label\"\n }, \"Duration\"), /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-stat-value\"\n }, (duration / 1000).toFixed(2), \"s\")), /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-stat-item\"\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-stat-label\"\n }, \"FPS Avg\"), /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-stat-value\",\n style: {\n color: getFpsColor(avgFps)\n }\n }, avgFps.toFixed(1))), /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-stat-item\"\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-stat-label\"\n }, \"FPS Range\"), /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-stat-value\"\n }, minFps, \" - \", maxFpsValue)), /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-stat-item\"\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-stat-label\"\n }, \"Memory Avg\"), /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-stat-value\"\n }, formatMemory(avgMemory)))), /*#__PURE__*/React.createElement(\"svg\", {\n width: WIDTH,\n height: HEIGHT,\n className: \"x-markdown-debug-chart-full\",\n role: \"img\",\n \"aria-label\": \"Performance chart showing FPS and memory usage over time\"\n }, /*#__PURE__*/React.createElement(\"title\", null, \"Performance Chart\"), [0, 0.25, 0.5, 0.75, 1].map(ratio => /*#__PURE__*/React.createElement(\"g\", {\n key: ratio\n }, /*#__PURE__*/React.createElement(\"line\", {\n x1: PADDING,\n y1: PADDING + chartHeight * ratio,\n x2: WIDTH - PADDING,\n y2: PADDING + chartHeight * ratio,\n stroke: \"rgba(255,255,255,0.1)\",\n strokeWidth: \"1\"\n }), /*#__PURE__*/React.createElement(\"line\", {\n x1: PADDING + chartWidth * ratio,\n y1: PADDING,\n x2: PADDING + chartWidth * ratio,\n y2: HEIGHT - PADDING,\n stroke: \"rgba(255,255,255,0.1)\",\n strokeWidth: \"1\"\n }))), /*#__PURE__*/React.createElement(\"polyline\", {\n points: createPoints('fps', maxFps),\n fill: \"none\",\n stroke: CONSTANTS.COLORS.GOOD,\n strokeWidth: \"2\",\n className: \"fps-line\"\n }), /*#__PURE__*/React.createElement(\"polyline\", {\n points: createPoints('memory', maxMemory),\n fill: \"none\",\n stroke: \"#1890ff\",\n strokeWidth: \"2\",\n className: \"memory-line\"\n }), /*#__PURE__*/React.createElement(\"text\", {\n x: PADDING - 10,\n y: PADDING,\n fill: CONSTANTS.COLORS.GOOD,\n fontSize: \"12\",\n textAnchor: \"end\"\n }, maxFps.toFixed(0)), /*#__PURE__*/React.createElement(\"text\", {\n x: PADDING - 10,\n y: HEIGHT - PADDING,\n fill: CONSTANTS.COLORS.GOOD,\n fontSize: \"12\",\n textAnchor: \"end\"\n }, \"0\"), /*#__PURE__*/React.createElement(\"text\", {\n x: PADDING - 10,\n y: PADDING - 15,\n fill: CONSTANTS.COLORS.GOOD,\n fontSize: \"14\",\n fontWeight: \"bold\",\n textAnchor: \"end\"\n }, \"FPS\"), /*#__PURE__*/React.createElement(\"text\", {\n x: WIDTH - PADDING + 10,\n y: PADDING + 20,\n fill: \"#1890ff\",\n fontSize: \"12\",\n textAnchor: \"start\"\n }, formatMemory(maxMemory)), /*#__PURE__*/React.createElement(\"text\", {\n x: WIDTH - PADDING + 10,\n y: HEIGHT - PADDING,\n fill: \"#1890ff\",\n fontSize: \"12\",\n textAnchor: \"start\"\n }, formatMemory(0)), /*#__PURE__*/React.createElement(\"text\", {\n x: WIDTH - PADDING + 10,\n y: PADDING + 5,\n fill: \"#1890ff\",\n fontSize: \"14\",\n fontWeight: \"bold\",\n textAnchor: \"start\"\n }, \"Memory\"), /*#__PURE__*/React.createElement(\"text\", {\n x: PADDING,\n y: HEIGHT - PADDING + 20,\n fill: \"rgba(255,255,255,0.6)\",\n fontSize: \"12\",\n textAnchor: \"middle\"\n }, \"0s\"), /*#__PURE__*/React.createElement(\"text\", {\n x: WIDTH - PADDING,\n y: HEIGHT - PADDING + 20,\n fill: \"rgba(255,255,255,0.6)\",\n fontSize: \"12\",\n textAnchor: \"middle\"\n }, (duration / 1000).toFixed(1), \"s\")), /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-legend\"\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-legend-item\"\n }, /*#__PURE__*/React.createElement(\"span\", {\n className: \"x-markdown-debug-legend-color\",\n style: {\n backgroundColor: CONSTANTS.COLORS.GOOD\n }\n }), /*#__PURE__*/React.createElement(\"span\", null, \"FPS\")), /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-legend-item\"\n }, /*#__PURE__*/React.createElement(\"span\", {\n className: \"x-markdown-debug-legend-color\",\n style: {\n backgroundColor: '#1890ff'\n }\n }), /*#__PURE__*/React.createElement(\"span\", null, \"Memory\"))));\n };\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-panel\",\n style: {\n left: position.x,\n top: position.y,\n cursor: dragRef.current.isDragging ? 'grabbing' : 'grab'\n },\n onMouseDown: handleMouseDown\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-row\"\n }, /*#__PURE__*/React.createElement(\"span\", {\n className: \"x-markdown-debug-label\"\n }, \"FPS\"), /*#__PURE__*/React.createElement(\"span\", {\n className: \"x-markdown-debug-value\",\n style: {\n color: getFpsColor(fps)\n }\n }, fps)), /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-row\"\n }, /*#__PURE__*/React.createElement(\"span\", {\n className: \"x-markdown-debug-label\"\n }, \"Memory\"), /*#__PURE__*/React.createElement(\"span\", {\n className: \"x-markdown-debug-value\"\n }, formatMemory(memory))), /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-actions\"\n }, /*#__PURE__*/React.createElement(\"button\", {\n type: \"button\",\n className: `x-markdown-debug-action x-markdown-debug-record-btn ${isRecording ? 'recording' : ''}`,\n onClick: toggleRecording\n }, isRecording ? '⏹ Stop' : '⏺ Record'), records.length > 0 && !isRecording && /*#__PURE__*/React.createElement(\"button\", {\n type: \"button\",\n className: \"x-markdown-debug-action\",\n onClick: () => setShowModal(true)\n }, \"\\uD83D\\uDCCA View\"))), showModal && records.length > 0 ? /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-modal-overlay\",\n onClick: () => setShowModal(false)\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-modal\",\n onClick: e => e.stopPropagation()\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-modal-header\"\n }, /*#__PURE__*/React.createElement(\"span\", {\n style: {\n color: '#fff',\n fontSize: 18,\n fontWeight: '600'\n }\n }, \"Performance Recording\"), /*#__PURE__*/React.createElement(\"button\", {\n type: \"button\",\n className: \"x-markdown-debug-close-btn\",\n onClick: () => setShowModal(false)\n }, \"\\u2715\")), /*#__PURE__*/React.createElement(PerformanceChart, null))) : null);\n};\nexport default DebugPanel;","import { useCallback, useEffect, useRef, useState } from 'react';\nimport { StreamCacheTokenType } from \"../interface\";\n\n/* ------------ Type ------------ */\n\n/**\n * When a token is about to be committed, if a non-empty string is returned,\n * only that prefix is committed and the rest of the pending content is left\n * for subsequent recognition (used for handover scenarios like list followed by `).\n * Returns null to commit the entire pending content by default.\n */\n\n/* ------------ Constants ------------ */\n// Validates whether a token is still incomplete in the streaming context.\n// Returns true if the token is syntactically incomplete; false if it is complete or invalid.\nconst STREAM_INCOMPLETE_REGEX = {\n image: [/^!\\[[^\\]\\r\\n]{0,1000}$/, /^!\\[[^\\r\\n]{0,1000}\\]\\(*[^)\\r\\n]{0,1000}$/],\n link: [/^\\[[^\\]\\r\\n]{0,1000}$/, /^\\[[^\\r\\n]{0,1000}\\]\\(*[^)\\r\\n]{0,1000}$/],\n html: [/^<\\/$/, /^<\\/?[a-zA-Z][a-zA-Z0-9-]{0,100}[^>\\r\\n]{0,1000}$/],\n commonEmphasis: [/^(\\*{1,3}|_{1,3})(?!\\s)(?!.*\\1$)[^\\r\\n]{0,1000}$/],\n // regex2 matches cases like \"- **\" (list item with emphasis start).\n list: [/^[-+*]\\s{0,3}$/, /^[-+*]\\s{1,3}(\\*{1,3}|_{1,3})(?!\\s)(?!.*\\1$)[^\\r\\n]{0,1000}$/],\n 'inline-code': [/^`[^`\\r\\n]{0,300}$/]\n};\nconst isTableInComplete = markdown => {\n if (markdown.includes('\\n\\n')) return false;\n const lines = markdown.split('\\n');\n if (lines.length <= 1) return true;\n const [header, separator] = lines;\n const trimmedHeader = header.trim();\n if (!/^\\|.*\\|$/.test(trimmedHeader)) return false;\n const trimmedSeparator = separator.trim();\n const columns = trimmedSeparator.split('|').map(col => col.trim()).filter(Boolean);\n const separatorRegex = /^:?-+:?$/;\n return columns.every((col, index) => index === columns.length - 1 ? col === ':' || separatorRegex.test(col) : separatorRegex.test(col));\n};\nconst tokenRecognizerMap = {\n [StreamCacheTokenType.Link]: {\n tokenType: StreamCacheTokenType.Link,\n isStartOfToken: markdown => markdown.startsWith('['),\n isStreamingValid: markdown => STREAM_INCOMPLETE_REGEX.link.some(re => re.test(markdown))\n },\n [StreamCacheTokenType.Image]: {\n tokenType: StreamCacheTokenType.Image,\n isStartOfToken: markdown => markdown.startsWith('!'),\n isStreamingValid: markdown => STREAM_INCOMPLETE_REGEX.image.some(re => re.test(markdown))\n },\n [StreamCacheTokenType.Html]: {\n tokenType: StreamCacheTokenType.Html,\n isStartOfToken: markdown => markdown.startsWith('<'),\n isStreamingValid: markdown => STREAM_INCOMPLETE_REGEX.html.some(re => re.test(markdown))\n },\n [StreamCacheTokenType.Emphasis]: {\n tokenType: StreamCacheTokenType.Emphasis,\n isStartOfToken: markdown => markdown.startsWith('*') || markdown.startsWith('_'),\n isStreamingValid: markdown => STREAM_INCOMPLETE_REGEX.commonEmphasis.some(re => re.test(markdown))\n },\n [StreamCacheTokenType.List]: {\n tokenType: StreamCacheTokenType.List,\n isStartOfToken: markdown => /^[-+*]/.test(markdown),\n isStreamingValid: markdown => STREAM_INCOMPLETE_REGEX.list.some(re => re.test(markdown)),\n // On backtick after list, commit only the prefix; treat the rest as inline code.\n getCommitPrefix: pending => {\n const listPrefix = pending.match(/^([-+*]\\s{0,3})/)?.[1];\n const rest = listPrefix ? pending.slice(listPrefix.length) : '';\n return listPrefix && rest.startsWith('`') ? listPrefix : null;\n }\n },\n [StreamCacheTokenType.Table]: {\n tokenType: StreamCacheTokenType.Table,\n isStartOfToken: markdown => markdown.startsWith('|'),\n isStreamingValid: isTableInComplete\n },\n [StreamCacheTokenType.InlineCode]: {\n tokenType: StreamCacheTokenType.InlineCode,\n isStartOfToken: markdown => markdown.startsWith('`'),\n isStreamingValid: markdown => STREAM_INCOMPLETE_REGEX['inline-code'].some(re => re.test(markdown))\n }\n};\nconst recognize = (cache, tokenType) => {\n const recognizer = tokenRecognizerMap[tokenType];\n if (!recognizer) return;\n const {\n token,\n pending\n } = cache;\n if (token === StreamCacheTokenType.Text && recognizer.isStartOfToken(pending)) {\n cache.token = tokenType;\n return;\n }\n if (token === tokenType && !recognizer.isStreamingValid(pending)) {\n const prefix = recognizer.getCommitPrefix?.(pending);\n if (prefix) {\n cache.completeMarkdown += prefix;\n cache.pending = pending.slice(prefix.length);\n cache.token = StreamCacheTokenType.Text;\n return;\n }\n commitCache(cache);\n }\n};\nconst recognizeHandlers = Object.values(tokenRecognizerMap).map(rec => ({\n tokenType: rec.tokenType,\n recognize: cache => recognize(cache, rec.tokenType)\n}));\n\n/* ------------ Utils ------------ */\nconst getInitialCache = () => ({\n pending: '',\n token: StreamCacheTokenType.Text,\n processedLength: 0,\n completeMarkdown: ''\n});\nconst commitCache = cache => {\n if (cache.pending) {\n cache.completeMarkdown += cache.pending;\n cache.pending = '';\n }\n cache.token = StreamCacheTokenType.Text;\n};\nconst isInCodeBlock = (text, isFinalChunk = false) => {\n const lines = text.split('\\n');\n let inFenced = false;\n let fenceChar = '';\n let fenceLen = 0;\n for (let i = 0; i < lines.length; i++) {\n const rawLine = lines[i];\n const line = rawLine.endsWith('\\r') ? rawLine.slice(0, -1) : rawLine;\n const match = line.match(/^(`{3,}|~{3,})(.*)$/);\n if (match) {\n const fence = match[1];\n const after = match[2];\n const char = fence[0];\n const len = fence.length;\n if (!inFenced) {\n inFenced = true;\n fenceChar = char;\n fenceLen = len;\n } else {\n // Check if this is a valid closing fence\n const isValidEnd = char === fenceChar && len >= fenceLen && /^\\s*$/.test(after);\n if (isValidEnd) {\n // In streaming context, only close if this is the final chunk\n // or if there are more lines after this fence\n if (isFinalChunk || i < lines.length - 1) {\n inFenced = false;\n fenceChar = '';\n fenceLen = 0;\n }\n // Otherwise, keep the fence open for potential streaming continuation\n }\n }\n }\n }\n return inFenced;\n};\nconst sanitizeForURIComponent = input => {\n let result = '';\n for (let i = 0; i < input.length; i++) {\n const charCode = input.charCodeAt(i);\n\n // 处理代理对:保留合法,跳过孤立\n if (charCode >= 0xd800 && charCode <= 0xdbff) {\n // High surrogate\n // Check for a following low surrogate to form a valid pair\n if (i + 1 < input.length && input.charCodeAt(i + 1) >= 0xdc00 && input.charCodeAt(i + 1) <= 0xdfff) {\n result += input[i] + input[i + 1];\n i++; // Skip the low surrogate as it's already processed\n }\n // Lone high surrogates are otherwise skipped\n } else if (charCode < 0xdc00 || charCode > 0xdfff) {\n // Append characters that are not lone low surrogates\n result += input[i];\n }\n // Lone low surrogates are otherwise skipped\n }\n return result;\n};\nconst safeEncodeURIComponent = str => {\n try {\n return encodeURIComponent(str);\n } catch (e) {\n if (e instanceof URIError) {\n return encodeURIComponent(sanitizeForURIComponent(str));\n }\n return '';\n }\n};\n\n/* ------------ Main Hook ------------ */\nconst useStreaming = (input, config) => {\n const {\n streaming,\n components = {}\n } = config || {};\n const {\n hasNextChunk: enableCache = false,\n incompleteMarkdownComponentMap\n } = streaming || {};\n const [output, setOutput] = useState('');\n const cacheRef = useRef(getInitialCache());\n const handleIncompleteMarkdown = useCallback(cache => {\n const {\n token,\n pending\n } = cache;\n if (token === StreamCacheTokenType.Text) return;\n /**\n * An image tag starts with '!', if it's the only character, it's incomplete and should be stripped.\n * !\n * ^\n */\n if (token === StreamCacheTokenType.Image && pending === '!') return undefined;\n\n /**\n * If a table has more than two lines (header, separator, and at least one row),\n * it's considered complete enough to not be replaced by a placeholder.\n * | column1 | column2 |\\n| -- | --|\\n\n * ^\n */\n if (token === StreamCacheTokenType.Table && pending.split('\\n').length > 2) {\n return pending;\n }\n const componentMap = incompleteMarkdownComponentMap || {};\n const componentName = componentMap[token] || `incomplete-${token}`;\n const encodedPending = safeEncodeURIComponent(pending);\n return components?.[componentName] ? `<${componentName} data-raw=\"${encodedPending}\" />` : undefined;\n }, [incompleteMarkdownComponentMap, components]);\n const processStreaming = useCallback(text => {\n if (!text) {\n setOutput('');\n cacheRef.current = getInitialCache();\n return;\n }\n const expectedPrefix = cacheRef.current.completeMarkdown + cacheRef.current.pending;\n // Reset cache if input doesn't continue from previous state\n if (!text.startsWith(expectedPrefix)) {\n cacheRef.current = getInitialCache();\n }\n const cache = cacheRef.current;\n const chunk = text.slice(cache.processedLength);\n if (!chunk) return;\n cache.processedLength += chunk.length;\n for (const char of chunk) {\n cache.pending += char;\n const isContentInCodeBlock = isInCodeBlock(cache.completeMarkdown + cache.pending);\n if (isContentInCodeBlock) {\n commitCache(cache);\n continue;\n }\n if (cache.token === StreamCacheTokenType.Text) {\n for (const handler of recognizeHandlers) handler.recognize(cache);\n } else {\n const handler = recognizeHandlers.find(handler => handler.tokenType === cache.token);\n handler?.recognize(cache);\n // After commit (e.g. list → Text), re-run all recognizers so pending (e.g. \"`\") becomes the new token (e.g. inline-code)\n const tokenAfterRecognize = cache.token;\n if (tokenAfterRecognize === StreamCacheTokenType.Text) {\n for (const h of recognizeHandlers) h.recognize(cache);\n }\n }\n if (cache.token === StreamCacheTokenType.Text) {\n commitCache(cache);\n }\n }\n const incompletePlaceholder = handleIncompleteMarkdown(cache);\n setOutput(cache.completeMarkdown + (incompletePlaceholder || ''));\n }, [handleIncompleteMarkdown]);\n useEffect(() => {\n if (typeof input !== 'string') {\n console.error(`X-Markdown: input must be string, not ${typeof input}.`);\n setOutput('');\n return;\n }\n enableCache ? processStreaming(input) : setOutput(input);\n }, [input, enableCache, processStreaming]);\n return output;\n};\nexport default useStreaming;","export let StreamCacheTokenType = /*#__PURE__*/function (StreamCacheTokenType) {\n StreamCacheTokenType[\"Text\"] = \"text\";\n StreamCacheTokenType[\"Link\"] = \"link\";\n StreamCacheTokenType[\"Image\"] = \"image\";\n StreamCacheTokenType[\"Html\"] = \"html\";\n StreamCacheTokenType[\"Emphasis\"] = \"emphasis\";\n StreamCacheTokenType[\"List\"] = \"list\";\n StreamCacheTokenType[\"Table\"] = \"table\";\n StreamCacheTokenType[\"InlineCode\"] = \"inline-code\";\n return StreamCacheTokenType;\n}({});","import XMarkdown, { type ComponentProps, type XMarkdownProps } from \"@ant-design/x-markdown\";\nimport React from \"react\";\n\nexport interface WidgetMarkdownProps {\n content: unknown;\n className?: string;\n unsupportedLabel?: string;\n}\n\nfunction safeUrl(value: unknown): string | null {\n if (typeof value !== \"string\") return null;\n try {\n const url = new URL(value, \"https://axiom.invalid\");\n return url.protocol === \"http:\" || url.protocol === \"https:\" || url.protocol === \"mailto:\" ? value : null;\n } catch {\n return null;\n }\n}\n\nconst SafeLink: React.FC<ComponentProps<{ href?: string }>> = ({ href, children }) => {\n const safeHref = safeUrl(href);\n return safeHref ? <a href={safeHref} target=\"_blank\" rel=\"noopener noreferrer\">{children}</a> : <span>{children}</span>;\n};\n\nconst SafeImage: React.FC<ComponentProps<{ src?: string; alt?: string }>> = ({ src, alt }) => {\n const safeHref = safeUrl(src);\n const label = alt?.trim() || \"Image\";\n return safeHref ? <a href={safeHref} target=\"_blank\" rel=\"noopener noreferrer\">{label}</a> : <span>{label}</span>;\n};\n\nconst SafeCode: React.FC<ComponentProps> = ({ children }) => <code>{children}</code>;\n\nconst REVIEWED_MARKDOWN_COMPONENTS = Object.freeze<XMarkdownProps[\"components\"]>({\n a: SafeLink,\n code: SafeCode,\n img: SafeImage,\n});\n\nexport function WidgetMarkdown({ content, className, unsupportedLabel = \"Unsupported message content\" }: WidgetMarkdownProps): React.ReactElement {\n if (typeof content !== \"string\") return <span className={className}>{unsupportedLabel}</span>;\n return <XMarkdown className={className} content={content} components={REVIEWED_MARKDOWN_COMPONENTS} paragraphTag=\"div\" escapeRawHtml />;\n}\n","import React from \"react\";\nimport type { AgentWebAppGenUIBlock } from \"../types\";\n\nexport interface WidgetGenUIRendererProps { block: AgentWebAppGenUIBlock }\n\n/** Immutable semantic renderer for the reviewed V1 declarative widget allowlist. */\nexport function WidgetGenUIRenderer({ block }: WidgetGenUIRendererProps): React.ReactElement {\n const widget = block.widget;\n if (widget.kind === \"callout\") {\n return <aside className={`axiom-web-app__callout axiom-web-app__callout--${widget.tone ?? \"info\"}`} aria-label={widget.title ?? \"Callout\"}>\n {widget.title && <strong>{widget.title}</strong>}<p>{widget.text}</p>\n </aside>;\n }\n return <table className=\"axiom-web-app__data-table\" aria-label={widget.caption ?? \"Data table\"}>\n {widget.caption && <caption>{widget.caption}</caption>}\n <thead><tr>{widget.columns.map((column, index) => <th key={`${index}-${column}`} scope=\"col\">{column}</th>)}</tr></thead>\n <tbody>{widget.rows.map((row, rowIndex) => <tr key={rowIndex}>{row.map((cell, columnIndex) => <td key={columnIndex}>{cell}</td>)}</tr>)}</tbody>\n </table>;\n}\n","import React from \"react\";\nimport type { AgentWebAppRuntimeMessage } from \"../types\";\nimport { useWidgetChat } from \"../hooks/useWidgetChat\";\nimport { WidgetMarkdown } from \"./WidgetMarkdown\";\nimport { WidgetGenUIRenderer } from \"./WidgetGenUIRenderer\";\n\nexport interface WidgetMessageListProps { className?: string; listLabel?: string; emptyLabel?: string; toolActivityLabel?: string; emptySlot?: React.ReactNode; }\n\nfunction roleName(message: AgentWebAppRuntimeMessage): string {\n if (message.role === \"human\") return \"You\";\n if (message.role === \"ai\") return \"Assistant\";\n return message.role;\n}\n\nexport function WidgetMessageList({ className, listLabel = \"Messages\", emptyLabel = \"Start a conversation\", toolActivityLabel = \"Activity\", emptySlot }: WidgetMessageListProps): React.ReactElement {\n const { messages, tools, isLoading } = useWidgetChat();\n return <div className={`axiom-web-app__message-area${className ? ` ${className}` : \"\"}`}><div className=\"axiom-web-app__messages\" role=\"log\" aria-label={listLabel} aria-live=\"polite\">{!isLoading && messages.length === 0 && (emptySlot || <p className=\"axiom-web-app__empty\">{emptyLabel}</p>)}{messages.map((message) => <article className={`axiom-web-app__message axiom-web-app__message--${message.role}`} key={message.id}><span className=\"axiom-web-app__message-role\">{roleName(message)}</span><div className=\"axiom-web-app__message-content\">{Array.isArray(message.content) ? message.content.map((block, index) => <WidgetGenUIRenderer key={index} block={block} />) : <WidgetMarkdown content={message.content ?? \"\"} />}</div></article>)}</div>{tools.length > 0 && <section className=\"axiom-web-app__tools\" aria-label={toolActivityLabel}>{tools.map((tool) => <div className=\"axiom-web-app__tool\" key={tool.id}><span aria-hidden=\"true\">{tool.status === \"running\" ? \"...\" : \"OK\"}</span> {tool.name || \"Tool\"}</div>)}</section>}</div>;\n}\n","import React, { useState } from \"react\";\nimport { useWidgetProject } from \"../hooks/useWidgetProject\";\nimport { widgetErrorMessage } from \"./widget-utils\";\n\nexport interface WidgetModelSelectorProps { className?: string; label?: string; }\n\nexport function WidgetModelSelector({ className, label = \"Model\" }: WidgetModelSelectorProps): React.ReactElement | null {\n const { bootstrap, modelKey, selectModel, isLoading } = useWidgetProject();\n const [error, setError] = useState<string | null>(null);\n if (!bootstrap?.webApp.features.modelSelector) return null;\n const select = (key: string): void => {\n setError(null);\n try { selectModel(key); } catch (selectionError) { setError(widgetErrorMessage(selectionError)); }\n };\n return <div className={className}><label className=\"axiom-web-app__field\"><span>{label}</span><select aria-label={label} value={modelKey ?? \"\"} disabled={isLoading} onChange={(event) => select(event.target.value)}>{bootstrap.models.map((model) => <option key={model.key} value={model.key}>{model.label}</option>)}</select></label>{error && <p className=\"axiom-web-app__error\" role=\"alert\">{error}</p>}</div>;\n}\n","import React, { useRef, useState } from \"react\";\nimport { useWidgetProject } from \"../hooks/useWidgetProject\";\nimport { widgetErrorMessage } from \"./widget-utils\";\n\nexport interface WidgetProjectSelectorProps { className?: string; label?: string; }\n\nexport function WidgetProjectSelector({ className, label = \"Project\" }: WidgetProjectSelectorProps): React.ReactElement | null {\n const { bootstrap, projectId, selectProject, isLoading } = useWidgetProject();\n const pendingRef = useRef(false);\n const [pending, setPending] = useState(false);\n const [error, setError] = useState<string | null>(null);\n if (!bootstrap?.webApp.features.projectSelector) return null;\n const select = async (id: string): Promise<void> => {\n if (pendingRef.current) return;\n pendingRef.current = true; setPending(true); setError(null);\n try { await selectProject(id); }\n catch (selectionError) { setError(widgetErrorMessage(selectionError)); }\n finally { pendingRef.current = false; setPending(false); }\n };\n return <div className={className}><label className=\"axiom-web-app__field\"><span>{label}</span><select aria-label={label} value={projectId ?? \"\"} disabled={isLoading || pending} onChange={(event) => void select(event.target.value)}>{bootstrap.projects.map((project) => <option key={project.id} value={project.id}>{project.name}</option>)}</select></label>{error && <p className=\"axiom-web-app__error\" role=\"alert\">{error}</p>}</div>;\n}\n","import React, { useRef, useState } from \"react\";\nimport { Modal } from \"antd\";\nimport type { AgentWebAppRuntimeThread } from \"../types\";\nimport { useWidgetProject } from \"../hooks/useWidgetProject\";\nimport { useWidgetThreads } from \"../hooks/useWidgetThreads\";\nimport { widgetErrorMessage } from \"./widget-utils\";\n\nexport interface WidgetThreadListProps { className?: string; navigationLabel?: string; newThreadLabel?: string; emptyLabel?: string; }\nfunction threadName(thread: AgentWebAppRuntimeThread, index: number): string { return thread.label?.trim() || `Conversation ${index + 1}`; }\n\nexport function WidgetThreadList({ className, navigationLabel = \"Conversations\", newThreadLabel = \"New conversation\", emptyLabel = \"No conversations yet\" }: WidgetThreadListProps): React.ReactElement | null {\n const { bootstrap } = useWidgetProject();\n const { threads, activeThread, isLoading, selectThread, createThread, renameThread, deleteThread } = useWidgetThreads();\n const pendingRef = useRef(false);\n const [pending, setPending] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [renameTarget, setRenameTarget] = useState<AgentWebAppRuntimeThread | null>(null);\n const [renameValue, setRenameValue] = useState(\"\");\n const [deleteTarget, setDeleteTarget] = useState<AgentWebAppRuntimeThread | null>(null);\n if (!bootstrap?.webApp.features.threadManagement) return null;\n const run = async (operation: () => Promise<unknown>, complete?: () => void): Promise<void> => {\n if (pendingRef.current) return;\n pendingRef.current = true; setPending(true); setError(null);\n try { await operation(); complete?.(); }\n catch (operationError) { setError(widgetErrorMessage(operationError)); }\n finally { pendingRef.current = false; setPending(false); }\n };\n return <nav className={`axiom-web-app__sidebar${className ? ` ${className}` : \"\"}`} aria-label={navigationLabel}>{error && <p className=\"axiom-web-app__error\" role=\"alert\">{error}</p>}<button className=\"axiom-web-app__new-thread\" type=\"button\" disabled={isLoading || pending} onClick={() => void run(() => createThread())}>{newThreadLabel}</button><div className=\"axiom-web-app__thread-list\">{!isLoading && threads.length === 0 && <p className=\"axiom-web-app__empty\">{emptyLabel}</p>}{threads.map((thread, index) => { const name = threadName(thread, index); return <div className={`axiom-web-app__thread${activeThread?.id === thread.id ? \" axiom-web-app__thread--active\" : \"\"}`} key={thread.id}><button type=\"button\" disabled={pending} className=\"axiom-web-app__thread-select\" aria-label={`Open ${name}`} aria-current={activeThread?.id === thread.id ? \"page\" : undefined} onClick={() => void run(() => selectThread(thread))}><span className=\"axiom-web-app__thread-label\" title={name}>{name}</span></button><button type=\"button\" disabled={pending} className=\"axiom-web-app__thread-rename\" aria-label={`Rename ${name}`} onClick={() => { setRenameTarget(thread); setRenameValue(name); }}>Rename</button><button type=\"button\" disabled={pending} className=\"axiom-web-app__thread-delete\" aria-label={`Delete ${name}`} onClick={() => setDeleteTarget(thread)}>Delete</button></div>; })}</div><Modal title=\"Rename conversation\" open={renameTarget !== null} onCancel={() => { if (!pending) setRenameTarget(null); }} onOk={() => renameTarget && void run(() => renameThread(renameTarget.id, renameValue.trim()), () => setRenameTarget(null))} okText=\"Save\" cancelText=\"Cancel\" okButtonProps={{ loading: pending, disabled: !renameValue.trim() }} cancelButtonProps={{ disabled: pending }}><label className=\"axiom-web-app__modal-field\"><span>Conversation name</span><input aria-label=\"Conversation name\" value={renameValue} disabled={pending} onChange={(event) => setRenameValue(event.target.value)} /></label></Modal><Modal title=\"Delete conversation?\" open={deleteTarget !== null} onCancel={() => { if (!pending) setDeleteTarget(null); }} onOk={() => deleteTarget && void run(() => deleteThread(deleteTarget.id), () => setDeleteTarget(null))} okText=\"Delete\" cancelText=\"Cancel\" okButtonProps={{ danger: true, loading: pending }} cancelButtonProps={{ disabled: pending }}><p>This conversation and its messages will be permanently deleted.</p></Modal></nav>;\n}\n"],"mappings":"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","names":["import_react","import_protocols","errorCodes","record","exact","isAbortError","isAbortError","import_react","import_react","import_react","import_react","import_react","import_react","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_react","import_react","React","text","React","DOMPurify","parseHtml","import_react","r","React","import_react","StreamCacheTokenType","handler","React","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime"]}
|