@amaster.ai/copilot-client 1.1.0-beta.72 → 1.1.0-beta.74
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/README.md +4 -2
- package/dist/index.cjs +2 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +94 -4
- package/dist/index.d.ts +94 -4
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/controller/utils.ts","../src/controller/message-handlers.ts","../src/conversation-controller.ts","../src/runtime/platform.ts","../src/runtime/context.ts","../src/runtime/message-content.ts","../src/runtime/session-runtime.ts","../src/runtime/copilot-runtime.ts","../src/runtime/stream/shared.ts","../src/runtime/stream/browser.ts","../src/runtime/stream/douyin.ts","../src/runtime/stream/mini-program.ts","../src/runtime/stream/index.ts","../src/copilot-client.ts"],"names":["SimpleAbortController","_event","listener","createAbortController","nowIso","generateId","cloneMessage","message","cloneConversation","conversation","createSnapshot","state","id","handlers","conv","part","role","status","existing","newText","newChunk","_id","partData","tool","name","request","toolStatus","errorMsg","spec","getKind","metadata","createConversationController","copilot","options","isSingleTurnMode","shouldLoadHistoryOnInit","shouldResumeOnInit","resolveContextId","listeners","activeAbortController","currentStreamingTaskId","lastMessageType","lastMessageId","initPromise","destroyed","currentContextId","sessionRuntime","emit","snapshot","removeTaskFromOrder","taskId","pushTaskToOrder","append","clearRuntimeMessageState","resetState","refreshContextId","abortActiveSession","handleEnd","addConversation","clearConversation","addLoadingPlaceholder","removeLoadingPlaceholder","fillData","kind","handler","isHistory","historyId","messageId","prevConversation","nextConversation","onSendError","processLiveData","data","result","final","firstPart","processHistoryData","text","json","runSession","messages","chatOptions","showLoadingPlaceholder","recoveryAttempt","abortController","hasResponse","streamFailed","streamAborted","finalReceived","lastTaskId","runPromise","responseTaskId","responseFinal","error","recoveryError","userContent","wasAborted","targetTaskId","greeting","limit","next","lastRole","taskIds","input","content","partial","response","messageIndex","oldMessage","updatedMessage","nextMessages","resolveMiniProgramGlobals","fallbackGlobal","getMiniProgramRequest","miniProgramRequest","runtime","createDefaultHttpClient","createHttpClient","supportsChunkedRequest","supportsDouyinEventSource","generateUUID","cryptoObj","char","random","getAppIdFromHostname","hostname","wwwMatch","domainMatch","extractAppIdFromUrl","url","pathMatch","cachedAppId","cachedAnonymousUid","getAppId","urlAppId","createContextIdFactory","resolvedMiniProgramRequest","getUserUid","mode","appId","userUid","baseContextId","convertToA2AParts","extractTextFromContent","createSessionRuntimeFactory","args","contextId","createCopilotRuntimeFactory","createContextId","postRpc","sendMessageStream","signal","onOpen","onMessage","onClose","systemMsg","nonSystemMsgs","lastUserMsg","parts","systemPrompt","cursor","normalizeStreamError","payload","normalized","createAbortError","createSSEConsumer","createParser","event","bindAbortSignal","onAbort","startBrowserStream","authHeader","headers","reader","decoder","parser","done","value","startDouyinEventSourceStream","resolve","reject","settled","eventSourceTask","receivedMessage","isBenignClosedError","errMsg","errNo","errorCode","finish","closeStream","decodeMiniProgramArrayBuffer","textDecoder","buffer","startMiniProgramStream","chunkBuffer","MiniProgramTextDecoder","sawChunk","opened","emitOpen","feedText","chunkListener","merged","decodeOffset","remaining","decoded","lastGoodIndex","goodPart","encodedGood","headersListener","miniReq","requestTask","wholeResponse","finalText","startStream","getAccessToken","token","isDouyin","createCopilotClient","http","baseUrl","normalizedMiniProgramRequest","resolvedHttp","envBaseUrl"],"mappings":"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","file":"index.cjs","sourcesContent":["import type {\n Conversation,\n ConversationControllerSnapshot,\n HistoryState,\n MessagesItem,\n} from \"../types\";\n\nexport type InternalState = {\n byId: Record<string, Conversation>;\n order: string[];\n starting: boolean;\n isLoading: boolean;\n isLoadingHistory: boolean;\n historyState: HistoryState;\n};\n\nexport class SimpleAbortController {\n aborted = false;\n private listeners: Array<() => void> = [];\n\n signal = {\n aborted: false,\n addEventListener: (_event: \"abort\", listener: () => void) => {\n this.listeners.push(listener);\n },\n };\n\n abort() {\n if (this.aborted) return;\n this.aborted = true;\n this.signal.aborted = true;\n this.listeners.forEach((listener) => listener());\n }\n}\n\nexport function createAbortController(): AbortController | SimpleAbortController {\n if (typeof AbortController !== \"undefined\") {\n return new AbortController();\n }\n return new SimpleAbortController();\n}\n\nexport function nowIso() {\n return new Date().toISOString();\n}\n\nexport function generateId() {\n return `msg-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;\n}\n\nexport function cloneMessage<T extends MessagesItem>(message: T): T {\n return { ...message } as T;\n}\n\nexport function cloneConversation(conversation: Conversation): Conversation {\n return {\n ...conversation,\n system: conversation.system ? { ...conversation.system } : undefined,\n messages: conversation.messages.map((message) => cloneMessage(message)),\n };\n}\n\nexport function createSnapshot(state: InternalState): ConversationControllerSnapshot {\n return {\n starting: state.starting,\n isLoading: state.isLoading,\n isLoadingHistory: state.isLoadingHistory,\n historyState: { ...state.historyState },\n conversations: state.order\n .map((id) => state.byId[id])\n .filter((conversation): conversation is Conversation => Boolean(conversation))\n .map((conversation) => cloneConversation(conversation)),\n };\n}\n","import type { Conversation, ErrorMessage, MessagesItem, Role, TextMessage, ThoughtMessage, ToolMessage, UIRenderMessage } from \"../types\";\nimport { nowIso } from \"./utils\";\n\nexport type MessageHandler = (\n conv: Conversation,\n part: any,\n id: string,\n role: Role,\n status?: any\n) => Conversation;\n\nexport const handlers: Record<string, MessageHandler> = {\n \"text-content\": (conv, part, id, role, status) => {\n if (!id) return conv;\n const existing = conv.messages.find((message) => message.messageId === id);\n const newText = part.text || \"\";\n\n if (existing && \"content\" in existing) {\n return {\n ...conv,\n messages: conv.messages.map((message) =>\n message.messageId === id\n ? ({ ...message, content: (message as TextMessage).content + newText } as MessagesItem)\n : message\n ),\n lastUpdated: nowIso(),\n };\n }\n\n return {\n ...conv,\n messages: [\n ...conv.messages,\n {\n messageId: id,\n role,\n kind: \"text-content\",\n content: newText,\n timestamp: status?.timestamp || nowIso(),\n } as TextMessage,\n ],\n lastUpdated: nowIso(),\n };\n },\n\n thought: (conv, part, id, role, status) => {\n if (!id) return conv;\n const newChunk = part?.data?.description || \"\";\n const existing = conv.messages.find((message) => message.messageId === id);\n\n if (existing && \"thought\" in existing) {\n return {\n ...conv,\n messages: conv.messages.map((message) =>\n message.messageId === id\n ? ({ ...message, thought: (message as ThoughtMessage).thought + newChunk } as MessagesItem)\n : message\n ),\n lastUpdated: nowIso(),\n };\n }\n\n return {\n ...conv,\n messages: [\n ...conv.messages,\n {\n messageId: id,\n role,\n kind: \"thought\",\n thought: newChunk,\n timestamp: status?.timestamp || nowIso(),\n } as ThoughtMessage,\n ],\n lastUpdated: nowIso(),\n };\n },\n\n tool: (conv, part, _id, role, status) => {\n const partData = part?.data || {};\n const tool = partData?.tool;\n const name = tool?.displayName || tool?.name || \"\";\n const request = partData?.request;\n const id = request?.callId;\n if (!id || !name) return conv;\n\n const toolStatus = partData?.status;\n const existing = conv.messages.find((message) => message.messageId === id);\n\n if (existing && \"toolStatus\" in existing) {\n return {\n ...conv,\n messages: conv.messages.map((message) =>\n message.messageId === id\n ? ({\n ...message,\n toolStatus: toolStatus || (message as ToolMessage).toolStatus,\n } as MessagesItem)\n : message\n ),\n lastUpdated: nowIso(),\n };\n }\n\n return {\n ...conv,\n messages: [\n ...conv.messages,\n {\n messageId: id,\n role,\n kind: \"tool\",\n toolName: name,\n toolDescription: request?.args?.query || \"\",\n toolStatus: toolStatus || \"pending\",\n timestamp: status?.timestamp || nowIso(),\n } as ToolMessage,\n ],\n lastUpdated: nowIso(),\n };\n },\n\n error: (conv, part, id, role) => {\n const errorMsg = part?.text || part?.data?.error || \"发生错误\";\n return {\n ...conv,\n messages: [\n ...conv.messages,\n {\n messageId: id || `error-${Date.now()}`,\n role,\n kind: \"error\",\n content: errorMsg,\n timestamp: nowIso(),\n } as ErrorMessage,\n ],\n status: \"error\",\n lastUpdated: nowIso(),\n };\n },\n\n \"ui-render\": (conv, part, id, role, status) => {\n if (!id) return conv;\n const existing = conv.messages.find((message) => message.messageId === id);\n const partData = part?.data || {};\n const spec = partData.spec || { root: \"\", elements: {} };\n\n if (existing && existing.kind === \"ui-render\") {\n return {\n ...conv,\n messages: conv.messages.map((message) =>\n message.messageId === id ? ({ ...(message as UIRenderMessage), spec } as MessagesItem) : message\n ),\n lastUpdated: nowIso(),\n };\n }\n\n return {\n ...conv,\n messages: [\n ...conv.messages,\n {\n messageId: id,\n role,\n kind: \"ui-render\",\n spec,\n timestamp: status?.timestamp || nowIso(),\n } as UIRenderMessage,\n ],\n lastUpdated: nowIso(),\n };\n },\n};\n\nexport function getKind(part: any, metadata?: any) {\n if (part?.data?.tool) return \"tool\";\n if (part?.data?.type === \"ui\") return \"ui-render\";\n if (part?.kind === \"text\") return \"text-content\";\n if (part?.data?.type === \"though\" || metadata?.coderAgent?.kind === \"thought\") return \"thought\";\n if (metadata?.error) return \"error\";\n return \"unknown\";\n}\n","import type {\n Message1,\n SendStreamingMessageResponse,\n SendStreamingMessageSuccessResponse,\n TextPart,\n} from \"@a2a-js/sdk\";\nimport { handlers, type MessageHandler, getKind } from \"./controller/message-handlers\";\nimport {\n cloneConversation,\n createAbortController,\n createSnapshot,\n generateId,\n nowIso,\n type InternalState,\n type SimpleAbortController,\n} from \"./controller/utils\";\nimport type {\n Conversation,\n ConversationController,\n ConversationControllerOptions,\n ConversationRuntimeFactory,\n ErrorMessage,\n MessagesItem,\n TextMessage,\n ThoughtMessage,\n ToolMessage,\n} from \"./types\";\n\nexport type {\n Role,\n TextMessage,\n ErrorMessage,\n ThoughtMessage,\n ToolMessage,\n UIRenderMessage,\n MessagesItem,\n Conversation,\n HistoryState,\n UpdateMessageInput,\n ConversationControllerSnapshot,\n ConversationStrings,\n ConversationControllerOptions,\n ConversationController,\n} from \"./types\";\n\nexport function createConversationController(\n copilot: ConversationRuntimeFactory,\n options: ConversationControllerOptions\n): ConversationController {\n const mode = options.mode || \"conversation\";\n const isSingleTurnMode = mode === \"single-turn\";\n const shouldLoadHistoryOnInit = isSingleTurnMode ? false : options.loadHistoryOnInit;\n const shouldResumeOnInit = isSingleTurnMode ? false : options.resumeOnInit;\n const resolveContextId = () =>\n options.getContextId?.() ?? copilot.createContextId(isSingleTurnMode ? \"single-turn\" : \"conversation\");\n\n const state: InternalState = {\n byId: {},\n order: [],\n starting: true,\n isLoading: false,\n isLoadingHistory: false,\n historyState: {\n next: null,\n hasMore: false,\n },\n };\n\n const listeners = new Set<(snapshot: ReturnType<typeof createSnapshot>) => void>();\n let activeAbortController: AbortController | SimpleAbortController | null = null;\n let activeRunPromise: Promise<void> | null = null;\n let currentStreamingTaskId: string | null = null;\n let lastMessageType = \"unknown\";\n let lastMessageId = \"\";\n let initPromise: Promise<void> | null = null;\n let destroyed = false;\n let currentContextId = resolveContextId();\n let sessionRuntime = copilot.createScopedRuntime(currentContextId);\n\n const emit = () => {\n if (destroyed) return;\n const snapshot = createSnapshot(state);\n listeners.forEach((listener) => listener(snapshot));\n };\n\n const removeTaskFromOrder = (taskId: string) => {\n state.order = state.order.filter((id) => id !== taskId);\n };\n\n const pushTaskToOrder = (taskId: string, append = true) => {\n removeTaskFromOrder(taskId);\n state.order = append ? [...state.order, taskId] : [taskId, ...state.order];\n };\n\n const clearRuntimeMessageState = () => {\n lastMessageType = \"unknown\";\n lastMessageId = \"\";\n };\n\n const resetState = () => {\n state.byId = {};\n state.order = [];\n state.historyState = {\n next: null,\n hasMore: false,\n };\n };\n\n const refreshContextId = () => {\n currentContextId = resolveContextId();\n sessionRuntime = copilot.createScopedRuntime(currentContextId);\n return currentContextId;\n };\n\n const abortActiveSession = () => {\n activeAbortController?.abort();\n activeAbortController = null;\n activeRunPromise = null;\n state.isLoading = false;\n emit();\n };\n\n const handleEnd = () => {\n clearRuntimeMessageState();\n currentStreamingTaskId = null;\n activeAbortController = null;\n activeRunPromise = null;\n state.isLoading = false;\n emit();\n };\n\n const addConversation = (conversation: Conversation) => {\n state.byId[conversation.taskId] = conversation;\n pushTaskToOrder(conversation.taskId, true);\n emit();\n };\n\n const clearConversation = (taskId: string) => {\n if (!state.byId[taskId]) return;\n delete state.byId[taskId];\n removeTaskFromOrder(taskId);\n emit();\n };\n\n const addLoadingPlaceholder = () => {\n addConversation({\n taskId: \"loading-placeholder\",\n status: \"working\",\n messages: [\n {\n messageId: \"loading-placeholder\",\n role: \"assistant\",\n kind: \"text-content\",\n content: options.strings.thinking,\n timestamp: nowIso(),\n } as TextMessage,\n ],\n lastUpdated: nowIso(),\n });\n };\n\n const removeLoadingPlaceholder = () => {\n clearConversation(\"loading-placeholder\");\n };\n\n const fillData = ({\n kind,\n taskId,\n part,\n status,\n handler,\n isHistory,\n historyId,\n messageId,\n }: {\n kind: string;\n taskId: string;\n part: any;\n status: any;\n handler: MessageHandler;\n isHistory?: boolean;\n historyId?: string;\n messageId?: string;\n }) => {\n let id = messageId || lastMessageId;\n const role = status?.message?.role === \"agent\" ? \"assistant\" : \"user\";\n\n if (!messageId && (kind === \"ui-render\" || (kind !== \"unknown\" && kind !== lastMessageType))) {\n lastMessageType = kind;\n id = generateId();\n lastMessageId = id;\n }\n\n const prevConversation =\n state.byId[taskId] ??\n ({\n taskId,\n status: isHistory ? \"completed\" : \"submitted\",\n messages: [],\n role,\n historyId,\n lastUpdated: nowIso(),\n } as Conversation);\n\n const nextConversation = handler(prevConversation, part, id, role, status);\n state.byId[taskId] = {\n ...nextConversation,\n status: status?.state || prevConversation.status,\n lastUpdated: nowIso(),\n };\n\n if (!isHistory) {\n pushTaskToOrder(taskId, true);\n }\n\n emit();\n };\n\n const onSendError = () => {\n addConversation({\n taskId: generateId(),\n status: \"error\",\n messages: [\n {\n messageId: `error-${Date.now()}`,\n role: \"assistant\",\n kind: \"error\",\n content: options.strings.errorMessage,\n timestamp: nowIso(),\n } as ErrorMessage,\n ],\n lastUpdated: nowIso(),\n });\n state.isLoading = false;\n emit();\n };\n\n const processLiveData = (data: SendStreamingMessageResponse) => {\n if (!(data as any)?.result) return;\n const result = (data as SendStreamingMessageSuccessResponse).result as any;\n const { taskId, status, metadata, final } = result;\n\n if (final) {\n handleEnd();\n return;\n }\n\n if (!taskId) return;\n\n currentStreamingTaskId = taskId;\n const firstPart = status?.message?.parts?.[0];\n const kind = getKind(firstPart, metadata);\n const handler = handlers[kind];\n if (!handler) return;\n\n removeLoadingPlaceholder();\n fillData({\n kind,\n taskId,\n part: firstPart,\n status,\n handler,\n });\n };\n\n const processHistoryData = (data: Message1, taskId: string) => {\n const { messageId, historyId } = (data || {}) as any;\n if (!messageId) return;\n\n const firstPart = data.parts?.[0];\n const kind = getKind(firstPart);\n\n if (kind === \"text-content\") {\n let text = (firstPart as TextPart).text || \"\";\n text = text.trim();\n if (text.startsWith(\"<ui>\")) {\n const json = text.slice(4).trim();\n try {\n const partData = JSON.parse(json);\n if (partData.root && partData.elements) {\n fillData({\n kind: \"ui-render\",\n taskId,\n part: { kind: \"data\", data: { type: \"ui\", spec: partData } },\n handler: handlers[\"ui-render\"]!,\n isHistory: true,\n historyId,\n messageId,\n status: { message: data },\n });\n }\n } catch {\n // ignore invalid history ui payload\n }\n return;\n }\n }\n\n const handler = handlers[kind];\n if (!handler) return;\n\n fillData({\n kind,\n taskId,\n part: firstPart,\n handler,\n isHistory: true,\n historyId,\n messageId,\n status: { message: data },\n });\n };\n\n const runSession = async (\n messages: Array<{ role: \"system\" | \"user\" | \"assistant\"; content: string }>,\n chatOptions?: { taskId?: string },\n showLoadingPlaceholder = false,\n recoveryAttempt = 0\n ) => {\n abortActiveSession();\n clearRuntimeMessageState();\n\n const abortController = createAbortController() as AbortController | SimpleAbortController;\n activeAbortController = abortController;\n\n if (showLoadingPlaceholder) {\n addLoadingPlaceholder();\n state.isLoading = true;\n emit();\n }\n\n let hasResponse = false;\n let streamFailed = false;\n let streamAborted = false;\n let finalReceived = false;\n let lastTaskId = chatOptions?.taskId || null;\n\n const runPromise = sessionRuntime.sendMessage(messages, {\n taskId: chatOptions?.taskId,\n signal: abortController.signal,\n onMessage: (message) => {\n const responseTaskId = (message as any)?.result?.taskId;\n const responseFinal = Boolean((message as any)?.result?.final);\n if (responseTaskId) {\n lastTaskId = responseTaskId;\n }\n if (responseFinal) {\n finalReceived = true;\n }\n hasResponse = true;\n processLiveData(message);\n },\n onClose: () => {\n },\n });\n activeRunPromise = runPromise;\n\n try {\n await runPromise;\n } catch (error) {\n if ((error as Error)?.name === \"AbortError\" || abortController.signal.aborted) {\n streamAborted = true;\n } else {\n streamFailed = true;\n console.error(\"[ConversationController] Stream error:\", error);\n }\n } finally {\n if (activeRunPromise === runPromise) {\n activeRunPromise = null;\n }\n if (activeAbortController === abortController) {\n activeAbortController = null;\n }\n\n const canRecover = !streamAborted && !finalReceived && recoveryAttempt < 2;\n if (canRecover) {\n try {\n const status = await sessionRuntime.getChatStatus(lastTaskId || undefined);\n\n if (status.working && status.taskId) {\n currentStreamingTaskId = status.taskId;\n await runSession([], { taskId: status.taskId }, false, recoveryAttempt + 1);\n return;\n }\n\n if (!hasResponse && !lastTaskId && !status.taskId && recoveryAttempt < 1) {\n await runSession(messages, chatOptions, false, recoveryAttempt + 1);\n return;\n }\n } catch (recoveryError) {\n console.error(\"[ConversationController] recovery failed:\", recoveryError);\n }\n }\n\n if (streamFailed) {\n onSendError();\n } else if (!hasResponse && showLoadingPlaceholder && !streamAborted) {\n onSendError();\n } else if (streamAborted) {\n state.isLoading = false;\n removeLoadingPlaceholder();\n emit();\n } else if (finalReceived && state.isLoading) {\n handleEnd();\n } else if (!finalReceived && state.isLoading) {\n onSendError();\n }\n }\n };\n\n return {\n getSnapshot() {\n return createSnapshot(state);\n },\n\n subscribe(listener) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n\n async init() {\n if (destroyed) return;\n if (initPromise) return initPromise;\n\n state.starting = true;\n emit();\n\n initPromise = (async () => {\n try {\n if (shouldLoadHistoryOnInit) {\n await this.loadHistory();\n }\n\n if (shouldResumeOnInit) {\n const result = await sessionRuntime.getChatStatus();\n if (result.taskId && result.working) {\n currentStreamingTaskId = result.taskId;\n await runSession([], { taskId: result.taskId }, false);\n }\n }\n } catch (error) {\n console.error(\"[ConversationController] init failed:\", error);\n } finally {\n state.starting = false;\n emit();\n initPromise = null;\n }\n })();\n\n return initPromise;\n },\n\n destroy() {\n destroyed = true;\n abortActiveSession();\n listeners.clear();\n },\n\n async sendMessage(userContent: string) {\n if (state.isLoading || !userContent.trim()) return;\n\n if (isSingleTurnMode) {\n this.abort();\n resetState();\n clearRuntimeMessageState();\n currentStreamingTaskId = null;\n refreshContextId();\n }\n\n addConversation({\n taskId: generateId(),\n status: \"submitted\",\n messages: [\n {\n messageId: generateId(),\n role: \"user\",\n kind: \"text-content\",\n content: userContent,\n timestamp: nowIso(),\n } as TextMessage,\n ],\n lastUpdated: nowIso(),\n });\n\n try {\n await runSession([{ role: \"user\", content: userContent }], undefined, true);\n } catch (error) {\n if ((error as Error).name === \"AbortError\") return;\n onSendError();\n }\n },\n\n abort() {\n const wasAborted = activeAbortController?.signal.aborted;\n abortActiveSession();\n clearRuntimeMessageState();\n currentStreamingTaskId = null;\n removeLoadingPlaceholder();\n if (!wasAborted) {\n void Promise.resolve();\n }\n },\n\n async cancelChat(taskId?: string) {\n const targetTaskId = taskId || currentStreamingTaskId;\n this.abort();\n\n addConversation({\n taskId: generateId(),\n status: \"error\",\n messages: [\n {\n messageId: `cancel-${Date.now()}`,\n role: \"assistant\",\n kind: \"text-content\",\n content: options.strings.cancelled,\n timestamp: nowIso(),\n } as TextMessage,\n ],\n lastUpdated: nowIso(),\n });\n\n if (!targetTaskId) return;\n\n try {\n await sessionRuntime.cancelChat(targetTaskId);\n currentStreamingTaskId = null;\n } catch (error) {\n console.error(\"[ConversationController] cancel failed:\", error);\n }\n },\n\n resetConversation(greeting?: string) {\n this.abort();\n resetState();\n currentStreamingTaskId = null;\n clearRuntimeMessageState();\n if (isSingleTurnMode) {\n refreshContextId();\n }\n\n if (greeting) {\n const taskId = `conv-${Date.now()}`;\n state.byId[taskId] = {\n taskId,\n status: \"submitted\",\n messages: [\n {\n messageId: `greeting-${Date.now()}`,\n role: \"assistant\",\n kind: \"text-content\",\n content: greeting,\n timestamp: nowIso(),\n } as TextMessage,\n ],\n lastUpdated: nowIso(),\n };\n state.order = [taskId];\n }\n\n emit();\n },\n\n async startNewConversation() {\n addConversation({\n taskId: generateId(),\n status: \"submitted\",\n messages: [],\n lastUpdated: nowIso(),\n system: { level: \"newConversation\" },\n });\n\n try {\n await sessionRuntime.newConversation();\n } catch (error) {\n console.error(\"[ConversationController] newConversation failed:\", error);\n }\n },\n\n async loadHistory(limit = 20, next?: string) {\n state.isLoadingHistory = true;\n emit();\n\n try {\n const result = await sessionRuntime.getHistory(limit, next);\n const messages = result?.messages || [];\n\n let taskId = \"\";\n let lastRole = \"\";\n const taskIds: string[] = [];\n\n messages.forEach((message: any) => {\n const role = message.role === \"agent\" ? \"assistant\" : \"user\";\n if (role !== lastRole) {\n taskId = `history-conv-${generateId()}`;\n taskIds.push(taskId);\n lastRole = role;\n }\n processHistoryData(message, taskId);\n });\n\n state.order = [...taskIds, ...state.order.filter((id) => !taskIds.includes(id))];\n state.historyState = {\n next: result?.next || null,\n hasMore: result?.hasMore || false,\n };\n } catch (error) {\n console.error(\"[ConversationController] loadHistory failed:\", error);\n } finally {\n state.isLoadingHistory = false;\n emit();\n }\n },\n\n async loadMoreHistory() {\n if (!state.historyState.hasMore || state.isLoadingHistory || !state.historyState.next) return;\n await this.loadHistory(20, state.historyState.next);\n },\n\n getConversation(taskId: string) {\n const conversation = state.byId[taskId];\n return conversation ? cloneConversation(conversation) : undefined;\n },\n\n clearConversation(taskId: string) {\n clearConversation(taskId);\n },\n\n removeMessage(taskId: string, messageId: string) {\n const conversation = state.byId[taskId];\n if (!conversation) return;\n\n state.byId[taskId] = {\n ...conversation,\n messages: conversation.messages.filter((message) => message.messageId !== messageId),\n lastUpdated: nowIso(),\n };\n pushTaskToOrder(taskId, true);\n emit();\n },\n\n updateMessage(input) {\n const { taskId, messageId, content, partial = false, status, response, metadata = {} } = input;\n const conversation = state.byId[taskId];\n if (!conversation) return;\n\n const messageIndex = conversation.messages.findIndex((message) => message.messageId === messageId);\n if (messageIndex === -1) return;\n\n const oldMessage = conversation.messages[messageIndex];\n if (!oldMessage) return;\n\n const updatedMessage: MessagesItem = { ...oldMessage, ...metadata } as MessagesItem;\n\n if (content !== undefined) {\n if (\"content\" in updatedMessage) {\n updatedMessage.content = partial\n ? `${(updatedMessage as TextMessage).content || \"\"}${content}`\n : content;\n } else if (\"thought\" in updatedMessage) {\n updatedMessage.thought = partial\n ? `${(updatedMessage as ThoughtMessage).thought || \"\"}${content}`\n : content;\n } else if (oldMessage.kind === \"text-content\") {\n (updatedMessage as TextMessage).content = partial\n ? `${(oldMessage as TextMessage).content || \"\"}${content}`\n : content;\n }\n }\n\n if (\"toolStatus\" in updatedMessage || status) {\n (updatedMessage as ToolMessage).toolStatus =\n status || (updatedMessage as ToolMessage).toolStatus;\n }\n if (response !== undefined) {\n (updatedMessage as ToolMessage).response = response;\n }\n\n const nextMessages = [...conversation.messages];\n nextMessages[messageIndex] = updatedMessage;\n\n state.byId[taskId] = {\n ...conversation,\n messages: nextMessages,\n lastUpdated: nowIso(),\n };\n pushTaskToOrder(taskId, true);\n emit();\n },\n };\n}\n","/* eslint-disable no-undef */\nimport { createHttpClient, type HttpClient, type MiniProgramRequest } from \"@amaster.ai/http-client\";\n\ndeclare const wx: any;\ndeclare const tt: any;\ndeclare const my: any;\ndeclare const swan: any;\ndeclare const qq: any;\ndeclare const jd: any;\n\nexport function resolveMiniProgramGlobals() {\n const fallbackGlobal =\n typeof globalThis !== \"undefined\"\n ? (globalThis as any)\n : typeof global !== \"undefined\"\n ? (global as any)\n : typeof window !== \"undefined\"\n ? (window as any)\n : {};\n\n return {\n Taro: fallbackGlobal?.Taro,\n wx: typeof wx !== \"undefined\" ? wx : fallbackGlobal?.wx,\n tt: typeof tt !== \"undefined\" ? tt : fallbackGlobal?.tt,\n my: typeof my !== \"undefined\" ? my : fallbackGlobal?.my,\n swan: typeof swan !== \"undefined\" ? swan : fallbackGlobal?.swan,\n qq: typeof qq !== \"undefined\" ? qq : fallbackGlobal?.qq,\n jd: typeof jd !== \"undefined\" ? jd : fallbackGlobal?.jd,\n } as any;\n}\n\nexport function getMiniProgramRequest(\n miniProgramRequest?: MiniProgramRequest\n): ((_opts: any) => any) | null {\n const runtime = resolveMiniProgramGlobals();\n\n if (typeof miniProgramRequest === \"function\") {\n return miniProgramRequest;\n }\n if (typeof runtime?.Taro?.request === \"function\") return runtime.Taro.request.bind(runtime.Taro);\n if (typeof runtime?.wx?.request === \"function\") return runtime.wx.request.bind(runtime.wx);\n if (typeof runtime?.tt?.request === \"function\") return runtime.tt.request.bind(runtime.tt);\n if (typeof runtime?.my?.request === \"function\") return runtime.my.request.bind(runtime.my);\n if (typeof runtime?.swan?.request === \"function\") return runtime.swan.request.bind(runtime.swan);\n if (typeof runtime?.qq?.request === \"function\") return runtime.qq.request.bind(runtime.qq);\n if (typeof runtime?.jd?.request === \"function\") return runtime.jd.request.bind(runtime.jd);\n return null;\n}\n\nexport function createDefaultHttpClient(miniProgramRequest?: MiniProgramRequest): HttpClient {\n return createHttpClient({\n adapter: getMiniProgramRequest(miniProgramRequest) ? \"taro\" : \"axios\",\n miniProgramRequest,\n });\n}\n\nexport function supportsChunkedRequest(): boolean {\n const runtime = resolveMiniProgramGlobals();\n return typeof runtime?.wx?.request === \"function\" || typeof runtime?.qq?.request === \"function\";\n}\n\nexport function supportsDouyinEventSource(): boolean {\n const runtime = resolveMiniProgramGlobals();\n return typeof runtime?.tt?.createEventSource === \"function\";\n}\n","import { resolveMiniProgramGlobals } from \"./platform\";\n\nexport type ContextIdMode = \"conversation\" | \"single-turn\";\n\nfunction generateUUID(): string {\n const cryptoObj = typeof globalThis !== \"undefined\" ? globalThis.crypto : undefined;\n\n if (cryptoObj && typeof cryptoObj.randomUUID === \"function\") {\n return cryptoObj.randomUUID();\n }\n\n if (cryptoObj && typeof cryptoObj.getRandomValues === \"function\") {\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, (char) => {\n const randomValues = cryptoObj.getRandomValues(new Uint8Array(1));\n const random = (randomValues[0] ?? 0) % 16;\n const value = char === \"x\" ? random : (random & 0x3) | 0x8;\n return value.toString(16);\n });\n }\n\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, (char) => {\n const random = (Math.random() * 16) | 0;\n const value = char === \"x\" ? random : (random & 0x3) | 0x8;\n return value.toString(16);\n });\n}\n\nfunction getAppIdFromHostname(hostname: string): string | null {\n const wwwMatch = /^www\\.([\\da-z-]+)(?:-[^.]+)?\\.[\\w-]+\\.(?:local|ai|cn)$/.exec(hostname);\n if (wwwMatch?.[1]) return wwwMatch[1];\n\n const domainMatch = /^([\\da-z-]+)(?:-[^.]+)?\\.[\\w-]+\\.(?:local|ai|cn)$/.exec(hostname);\n if (domainMatch?.[1]) return domainMatch[1];\n\n return null;\n}\n\nfunction extractAppIdFromUrl(): string | null {\n if (typeof window === \"undefined\") return null;\n\n try {\n const url = window.location.href;\n const pathMatch = /\\/app\\/([\\da-z-]+)(?:\\/|$)/.exec(url);\n if (pathMatch?.[1]) return pathMatch[1];\n return getAppIdFromHostname(window.location.hostname);\n } catch {\n return null;\n }\n}\n\nlet cachedAppId: string | null = null;\nlet cachedAnonymousUid: string | null = null;\n\nfunction getAppId(hostname?: string): string {\n const urlAppId = hostname ? getAppIdFromHostname(hostname) : extractAppIdFromUrl();\n if (urlAppId) return urlAppId;\n if (!cachedAppId) cachedAppId = generateUUID();\n return cachedAppId;\n}\n\nexport function createContextIdResolver(\n url: string,\n resolvedMiniProgramRequest: unknown,\n getUserUid?: () => string | null\n) {\n const createContextId = createContextIdFactory(url, resolvedMiniProgramRequest, getUserUid);\n return () => {\n return createContextId(\"conversation\");\n };\n}\n\nexport function createContextIdFactory(\n url: string,\n resolvedMiniProgramRequest: unknown,\n getUserUid?: () => string | null\n) {\n return (mode: ContextIdMode = \"conversation\") => {\n const runtime = resolveMiniProgramGlobals();\n let appId = getAppId();\n\n if (resolvedMiniProgramRequest && typeof runtime?.wx?.request === \"function\") {\n const hostname = url ? url.replace(/^https?:\\/\\//, \"\").split(\"/\")[0] : \"\";\n appId = getAppId(hostname);\n }\n\n const userUid = getUserUid?.() ?? (cachedAnonymousUid ??= `anonymous-${generateUUID()}`);\n const baseContextId = `${appId}:${userUid}`;\n\n if (mode === \"single-turn\") {\n return `${baseContextId}:${generateUUID()}`;\n }\n\n return baseContextId;\n };\n}\n\nexport { generateUUID };\n","import type { Part } from \"@a2a-js/sdk\";\nimport type { MessageContent, TextContent } from \"../types\";\n\nexport function convertToA2AParts(content: string | MessageContent[]): Part[] {\n if (typeof content === \"string\") {\n return [{ kind: \"text\", text: content }];\n }\n\n return content\n .map((part): Part | null => {\n switch (part.type) {\n case \"text\":\n return { kind: \"text\", text: part.text };\n case \"image\":\n if (part.data) {\n return {\n kind: \"file\",\n file: {\n bytes: part.data,\n mimeType: part.mimeType || \"image/png\",\n },\n };\n }\n if (part.url) {\n return {\n kind: \"file\",\n file: { uri: part.url, mimeType: part.mimeType || \"image/png\" },\n };\n }\n return null;\n case \"file\":\n if (part.data) {\n return {\n kind: \"file\",\n file: {\n bytes: part.data,\n ...(part.mimeType && { mimeType: part.mimeType }),\n ...(part.name && { name: part.name }),\n },\n };\n }\n if (part.url) {\n return {\n kind: \"file\",\n file: {\n uri: part.url,\n ...(part.mimeType && { mimeType: part.mimeType }),\n ...(part.name && { name: part.name }),\n },\n };\n }\n return null;\n default:\n return null;\n }\n })\n .filter((part): part is Part => part !== null);\n}\n\nexport function extractTextFromContent(content: string | MessageContent[]): string {\n if (typeof content === \"string\") {\n return content;\n }\n return content\n .filter((part): part is TextContent => part.type === \"text\")\n .map((part) => part.text)\n .join(\"\\n\");\n}\n","import type { ContextIdMode } from \"./context\";\nimport type { ConversationRuntime, ConversationRuntimeFactory } from \"../types\";\n\nexport function createSessionRuntimeFactory(args: {\n createContextId: (mode?: ContextIdMode) => string;\n createRuntime: (contextId: string) => ConversationRuntime;\n}): ConversationRuntimeFactory {\n return {\n createContextId(mode) {\n return args.createContextId(mode);\n },\n createScopedRuntime(contextId: string) {\n return args.createRuntime(contextId);\n },\n };\n}\n","import type {\n CancelTaskRequest,\n CancelTaskResponse,\n SendStreamingMessageRequest,\n} from \"@a2a-js/sdk\";\nimport type { ConversationRuntime, ConversationRuntimeFactory } from \"../types\";\nimport { generateUUID, type ContextIdMode } from \"./context\";\nimport { convertToA2AParts, extractTextFromContent } from \"./message-content\";\nimport { createSessionRuntimeFactory } from \"./session-runtime\";\nimport type { StreamHandlers } from \"./stream\";\n\ninterface CreateCopilotRuntimeFactoryArgs {\n createContextId: (mode?: ContextIdMode) => string;\n postRpc: (data: unknown) => Promise<unknown>;\n sendMessageStream: (\n request: SendStreamingMessageRequest,\n handlers: StreamHandlers,\n signal?: ConversationRuntimeSendSignal,\n ) => Promise<void>;\n}\n\ntype ConversationRuntimeSendSignal = Parameters<ConversationRuntime[\"sendMessage\"]>[1][\"signal\"];\n\nexport function createCopilotRuntimeFactory({\n createContextId,\n postRpc,\n sendMessageStream,\n}: CreateCopilotRuntimeFactoryArgs): ConversationRuntimeFactory {\n return createSessionRuntimeFactory({\n createContextId,\n createRuntime(contextId: string): ConversationRuntime {\n return {\n async sendMessage(messages, options) {\n const { taskId, signal, onOpen, onMessage, onClose } = options;\n const systemMsg = messages.find((message) => message.role === \"system\");\n const nonSystemMsgs = messages.filter((message) => message.role !== \"system\");\n const lastUserMsg = nonSystemMsgs[nonSystemMsgs.length - 1];\n\n const parts = lastUserMsg\n ? convertToA2AParts(lastUserMsg.content)\n : [{ kind: \"text\" as const, text: \"\" }];\n\n const systemPrompt = systemMsg ? extractTextFromContent(systemMsg.content) : undefined;\n\n const request: SendStreamingMessageRequest = {\n jsonrpc: \"2.0\",\n id: generateUUID(),\n method: \"message/stream\",\n params: {\n message: {\n contextId,\n kind: \"message\",\n messageId: generateUUID(),\n role: \"user\",\n parts,\n ...(taskId ? { taskId } : {}),\n ...(systemPrompt ? { metadata: { systemPrompt } } : {}),\n },\n },\n };\n\n await sendMessageStream(request, { onOpen, onMessage, onClose }, signal);\n },\n\n cancelChat(taskId) {\n const request: CancelTaskRequest = {\n jsonrpc: \"2.0\",\n id: generateUUID(),\n method: \"tasks/cancel\",\n params: { id: taskId },\n };\n return postRpc(request) as Promise<CancelTaskResponse>;\n },\n\n async getHistory(limit = 50, next?: string) {\n try {\n const response: any = await postRpc({\n jsonrpc: \"2.0\",\n method: \"messages/list\",\n id: generateUUID(),\n params: {\n filter: { contextId },\n limit,\n ...(next ? { next } : {}),\n },\n });\n const result = response?.data?.result || {};\n const messages = result?.messages || [];\n const cursor = result?.next || \"\";\n\n return {\n messages,\n next: cursor,\n hasMore: !!cursor,\n };\n } catch {\n return undefined;\n }\n },\n\n async newConversation() {\n try {\n await postRpc({\n jsonrpc: \"2.0\",\n method: \"messages/clear\",\n id: generateUUID(),\n params: { contextId },\n });\n } catch {\n // noop\n }\n },\n\n async getChatStatus(taskId) {\n try {\n const request = {\n jsonrpc: \"2.0\",\n id: generateUUID(),\n method: \"tasks/get\",\n params: taskId ? { id: taskId } : { contextId },\n };\n const result: any = await postRpc(request);\n const data = result?.data?.result;\n return {\n working: data?.status?.state === \"working\",\n taskId: data?.id,\n error: data?.error?.message || \"\",\n };\n } catch (error) {\n return {\n working: false,\n error: (error as any)?.message || \"\",\n };\n }\n },\n };\n },\n });\n}\n","import { createParser } from \"eventsource-parser\";\nimport type { SendStreamingMessageResponse } from \"@a2a-js/sdk\";\nimport type { AbortSignalLike } from \"../../types\";\n\nexport interface StreamHandlers {\n onOpen?: () => void;\n onMessage: (message: SendStreamingMessageResponse) => void;\n onClose?: () => void;\n}\n\nexport function normalizeStreamError(error: unknown): Error {\n if (error instanceof Error) {\n return error;\n }\n\n if (error && typeof error === \"object\") {\n const payload = error as Record<string, unknown>;\n const message =\n (typeof payload.errMsg === \"string\" && payload.errMsg) ||\n (typeof payload.message === \"string\" && payload.message) ||\n JSON.stringify(payload);\n const normalized = new Error(message);\n if (typeof payload.errorCode === \"number\" || typeof payload.errorCode === \"string\") {\n (normalized as any).errorCode = payload.errorCode;\n }\n if (typeof payload.errNo === \"number\" || typeof payload.errNo === \"string\") {\n (normalized as any).errNo = payload.errNo;\n }\n (normalized as any).raw = error;\n return normalized;\n }\n\n return new Error(String(error));\n}\n\nexport function createAbortError(): Error {\n if (typeof DOMException !== \"undefined\") {\n return new DOMException(\"Aborted\", \"AbortError\");\n }\n const error = new Error(\"Aborted\");\n error.name = \"AbortError\";\n return error;\n}\n\nexport function createSSEConsumer(handlers: StreamHandlers) {\n return createParser({\n onEvent: (event) => {\n try {\n handlers.onMessage(JSON.parse(event.data));\n } catch (error) {\n console.error(\"[copilot stream] failed to parse SSE event:\", error, event.data);\n }\n },\n });\n}\n\nexport function bindAbortSignal(signal: AbortSignalLike | undefined, onAbort: () => void) {\n if (!signal) return;\n if (signal.aborted) {\n onAbort();\n return;\n }\n signal.addEventListener(\"abort\", onAbort);\n}\n","import type { AbortSignalLike } from \"../../types\";\nimport { createAbortError, createSSEConsumer, type StreamHandlers } from \"./shared\";\n\nexport async function startBrowserStream(\n url: string,\n data: unknown,\n authHeader: Record<string, string>,\n handlers: StreamHandlers,\n signal?: AbortSignalLike,\n): Promise<void> {\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n ...authHeader,\n };\n\n const response = await fetch(url, {\n method: \"POST\",\n headers,\n credentials: \"include\",\n body: JSON.stringify(data),\n signal: signal as AbortSignal | undefined,\n });\n\n if (!response.ok) {\n throw new Error(`Stream request failed: ${response.statusText || response.status}`);\n }\n\n handlers.onOpen?.();\n\n if (!response.body) {\n handlers.onClose?.();\n return;\n }\n\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n const parser = createSSEConsumer(handlers);\n\n try {\n while (true) {\n if (signal?.aborted) {\n throw createAbortError();\n }\n const { done, value } = await reader.read();\n if (done) {\n break;\n }\n parser.feed(decoder.decode(value, { stream: true }));\n }\n } finally {\n handlers.onClose?.();\n }\n}\n","import type { AbortSignalLike } from \"../../types\";\nimport { resolveMiniProgramGlobals } from \"../platform\";\nimport { bindAbortSignal, createAbortError, normalizeStreamError, type StreamHandlers } from \"./shared\";\n\nexport async function startDouyinEventSourceStream(\n url: string,\n data: unknown,\n authHeader: Record<string, string> = {},\n handlers: StreamHandlers,\n signal?: AbortSignalLike,\n): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n const runtime = resolveMiniProgramGlobals();\n let settled = false;\n let eventSourceTask: any;\n let receivedMessage = false;\n\n const isBenignClosedError = (error: any) => {\n const errMsg = String(error?.errMsg || error?.message || \"\");\n const errNo = error?.errNo;\n const errorCode = error?.errorCode;\n\n return (\n receivedMessage &&\n /stream closed/i.test(errMsg) &&\n (errNo === 21104 || errorCode === 30)\n );\n };\n\n const finish = (error?: unknown) => {\n if (settled) return;\n settled = true;\n if (error) {\n reject(normalizeStreamError(error));\n return;\n }\n handlers.onClose?.();\n resolve();\n };\n\n try {\n eventSourceTask = runtime.tt.createEventSource({\n url,\n method: \"POST\",\n header: {\n ...authHeader,\n },\n data: data as any,\n });\n } catch (error) {\n finish(error);\n return;\n }\n\n const closeStream = (error?: unknown) => {\n if (error && isBenignClosedError(error)) {\n eventSourceTask.close?.();\n finish();\n return;\n }\n\n eventSourceTask.close?.();\n finish(error);\n };\n\n eventSourceTask.onOpen?.(() => {\n handlers.onOpen?.();\n });\n\n eventSourceTask.onMessage?.((response: any) => {\n receivedMessage = true;\n try {\n handlers.onMessage(\n typeof response?.data === \"string\"\n ? JSON.parse(response.data)\n : response?.data,\n );\n } catch (error) {\n console.error(\"[douyin eventsource] failed to parse message:\", error, response);\n }\n });\n\n eventSourceTask.onError?.((error: any) => {\n closeStream(error);\n });\n\n eventSourceTask.onClose?.(() => {\n finish();\n });\n\n bindAbortSignal(signal, () => {\n closeStream(createAbortError());\n });\n });\n}\n","import MiniProgramTextDecoder from \"miniprogram-text-decoder\";\nimport type { MiniProgramRequest } from \"@amaster.ai/http-client\";\nimport type { AbortSignalLike } from \"../../types\";\nimport { getMiniProgramRequest, supportsChunkedRequest } from \"../platform\";\nimport { bindAbortSignal, createAbortError, createSSEConsumer, normalizeStreamError, type StreamHandlers } from \"./shared\";\n\nfunction decodeMiniProgramArrayBuffer(\n value: ArrayBuffer | Uint8Array | undefined,\n textDecoder: MiniProgramTextDecoder\n): string {\n if (!value) return \"\";\n const buffer = value instanceof Uint8Array ? value : new Uint8Array(value);\n if (buffer.length === 0) return \"\";\n return textDecoder.decode(buffer, { stream: false });\n}\n\nexport async function startMiniProgramStream(\n url: string,\n data: unknown,\n authHeader: Record<string, string> = {},\n handlers: StreamHandlers,\n signal?: AbortSignalLike,\n miniProgramRequest?: MiniProgramRequest,\n): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n let chunkBuffer = new Uint8Array(0);\n const textDecoder = new MiniProgramTextDecoder(\"utf-8\", { fatal: false });\n let sawChunk = false;\n let settled = false;\n let opened = false;\n const parser = createSSEConsumer(handlers);\n\n const finish = (error?: unknown) => {\n if (settled) return;\n settled = true;\n if (error) {\n reject(normalizeStreamError(error));\n return;\n }\n handlers.onClose?.();\n resolve();\n };\n\n const emitOpen = () => {\n if (opened) return;\n opened = true;\n handlers.onOpen?.();\n };\n\n const feedText = (text: string) => {\n if (!text) return;\n emitOpen();\n parser.feed(text);\n };\n\n const chunkListener = (response: any) => {\n if (settled || !response.data) return;\n\n try {\n sawChunk = true;\n const newChunk = new Uint8Array(response.data as ArrayBuffer);\n const merged = new Uint8Array(chunkBuffer.length + newChunk.length);\n merged.set(chunkBuffer);\n merged.set(newChunk, chunkBuffer.length);\n chunkBuffer = merged;\n\n let decodeOffset = 0;\n while (decodeOffset < chunkBuffer.length) {\n const remaining = chunkBuffer.subarray(decodeOffset);\n const decoded = textDecoder.decode(remaining, { stream: false });\n\n if (decoded.length === 0) {\n break;\n }\n\n if (decoded.includes(\"�\")) {\n const lastGoodIndex = decoded.lastIndexOf(\"�\") === 0 ? 0 : decoded.indexOf(\"�\");\n if (lastGoodIndex <= 0) {\n break;\n }\n\n const goodPart = decoded.slice(0, lastGoodIndex);\n if (goodPart) {\n feedText(goodPart);\n }\n\n const encodedGood = new TextEncoder().encode(goodPart);\n decodeOffset += encodedGood.length;\n break;\n }\n\n feedText(decoded);\n decodeOffset += remaining.length;\n }\n\n chunkBuffer = chunkBuffer.subarray(decodeOffset);\n } catch (error) {\n console.error(\"[mini stream] chunk process error:\", error);\n }\n };\n\n const headersListener = (response: any) => {\n emitOpen();\n if (response.header?.[\"content-type\"]?.includes(\"text/event-stream\") === false) {\n console.warn(\"Warning: server did not return event-stream\");\n }\n };\n\n const miniReq = getMiniProgramRequest(miniProgramRequest);\n if (!miniReq) {\n reject(new Error(\"Mini-program request API not found\"));\n return;\n }\n\n try {\n const requestTask = miniReq({\n url,\n method: \"POST\",\n header: {\n \"Content-Type\": \"application/json\",\n Accept: \"text/event-stream\",\n ...authHeader,\n },\n data: typeof data === \"string\" ? data : JSON.stringify(data),\n responseType: \"arraybuffer\",\n enableChunked: supportsChunkedRequest(),\n timeout: 300000,\n success: (response: any) => {\n if (!sawChunk && response?.data) {\n const wholeResponse = decodeMiniProgramArrayBuffer(response.data, textDecoder);\n feedText(wholeResponse);\n }\n if (chunkBuffer.length > 0) {\n const finalText = textDecoder.decode(chunkBuffer, { stream: true });\n feedText(finalText);\n }\n finish();\n },\n fail: (error: any) => {\n finish(error);\n },\n });\n\n bindAbortSignal(signal, () => {\n requestTask.abort?.();\n finish(createAbortError());\n });\n\n requestTask.onChunkReceived?.(chunkListener);\n requestTask.onHeadersReceived?.(headersListener);\n } catch (error) {\n finish(error);\n }\n });\n}\n","import type { MiniProgramRequest } from \"@amaster.ai/http-client\";\nimport type { AbortSignalLike } from \"../../types\";\nimport { getMiniProgramRequest, supportsDouyinEventSource } from \"../platform\";\nimport { startBrowserStream } from \"./browser\";\nimport { startDouyinEventSourceStream } from \"./douyin\";\nimport { startMiniProgramStream } from \"./mini-program\";\nimport type { StreamHandlers } from \"./shared\";\n\nexport async function startStream(\n url: string,\n data: unknown,\n getAccessToken: (() => string | null) | undefined,\n handlers: StreamHandlers,\n signal?: AbortSignalLike,\n miniProgramRequest?: MiniProgramRequest,\n): Promise<void> {\n const token = getAccessToken?.();\n const authHeader: Record<string, string> = token ? { Authorization: `Bearer ${token}` } : {};\n const isDouyin = supportsDouyinEventSource();\n const miniReq = getMiniProgramRequest(miniProgramRequest);\n\n if (isDouyin) {\n await startDouyinEventSourceStream(url, data, authHeader, handlers, signal);\n return;\n }\n\n if (miniReq) {\n await startMiniProgramStream(url, data, authHeader, handlers, signal, miniProgramRequest);\n return;\n }\n\n await startBrowserStream(url, data, authHeader, handlers, signal);\n}\n\nexport type { StreamHandlers } from \"./shared\";\n","/* eslint-disable no-unused-vars */\nimport type { SendStreamingMessageRequest } from \"@a2a-js/sdk\";\nimport type { HttpClient } from \"@amaster.ai/http-client\";\nimport { createConversationController } from \"./conversation-controller\";\nimport { createContextIdFactory } from \"./runtime/context\";\nimport { createCopilotRuntimeFactory } from \"./runtime/copilot-runtime\";\nimport { createDefaultHttpClient, getMiniProgramRequest } from \"./runtime/platform\";\nimport { startStream, type StreamHandlers } from \"./runtime/stream\";\nimport type {\n AbortSignalLike,\n ConversationController,\n ConversationControllerOptions,\n ConversationRuntimeFactory,\n} from \"./types\";\n\nexport type { TextContent, ImageContent, FileContent, MessageContent } from \"./types\";\n\nexport type CopilotClient = {\n createConversationController(options: ConversationControllerOptions): ConversationController;\n};\n\nexport function createCopilotClient(\n http?: HttpClient,\n baseUrl?: string,\n getAccessToken?: () => string | null,\n getUserUid?: () => string | null\n): CopilotClient {\n const resolvedMiniProgramRequest = getMiniProgramRequest(http?.miniProgramRequest);\n const normalizedMiniProgramRequest = resolvedMiniProgramRequest || undefined;\n const resolvedHttp = http ?? createDefaultHttpClient(normalizedMiniProgramRequest);\n\n let envBaseUrl = \"\";\n try {\n envBaseUrl =\n process.env.TARO_APP_API_BASE_URL ||\n process.env.VITE_API_BASE_URL ||\n process.env.API_BASE_URL ||\n \"\";\n } catch {\n // process is not defined -> ignore\n }\n\n envBaseUrl = String(envBaseUrl || \"\").trim();\n const url = `${baseUrl || envBaseUrl}/api/proxy/builtin/platform/copilot`;\n\n const postRpc = <T>(data: unknown) =>\n resolvedHttp.request<T>({\n url,\n method: \"POST\",\n data,\n });\n\n const createContextId = createContextIdFactory(url, resolvedMiniProgramRequest, getUserUid);\n\n async function sendMessageStream(\n request: SendStreamingMessageRequest,\n handlers: StreamHandlers,\n signal?: AbortSignalLike,\n ): Promise<void> {\n try {\n await startStream(\n url,\n request,\n getAccessToken,\n handlers,\n signal,\n normalizedMiniProgramRequest\n );\n } catch (error) {\n if (signal?.aborted) {\n return;\n }\n throw error;\n }\n }\n\n const runtime: ConversationRuntimeFactory = createCopilotRuntimeFactory({\n createContextId,\n postRpc,\n sendMessageStream,\n });\n\n return {\n createConversationController(options) {\n return createConversationController(runtime, options);\n },\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/controller/utils.ts","../src/controller/message-handlers.ts","../src/runtime/platform.ts","../src/conversation-controller.ts","../src/runtime/context.ts","../src/runtime/message-content.ts","../src/runtime/session-runtime.ts","../src/runtime/copilot-runtime.ts","../src/runtime/stream/shared.ts","../src/runtime/stream/browser.ts","../src/runtime/stream/mini-program.ts","../src/runtime/stream/index.ts","../src/copilot-client.ts","../src/auto-voice-reply.ts"],"names":["SimpleAbortController","_event","listener","createAbortController","nowIso","generateId","cloneMessage","message","cloneConversation","conversation","createSnapshot","state","id","handlers","conv","part","role","status","existing","newText","newChunk","_id","partData","tool","name","request","toolStatus","errorMsg","spec","getKind","metadata","isKnownMiniProgramEnv","env","envType","normalizedEnv","isMiniProgramRuntime","runtime","resolveMiniProgramGlobals","supportsChunkedRequest","supportsDouyinEventSource","createConversationController","copilot","options","isSingleTurnMode","shouldLoadHistoryOnInit","shouldResumeOnInit","resolveContextId","listeners","activeAbortController","currentStreamingTaskId","lastMessageType","lastMessageId","initPromise","destroyed","currentContextId","sessionRuntime","activeRequestConversationId","emit","snapshot","removeTaskFromOrder","taskId","pushTaskToOrder","append","clearRuntimeMessageState","isNetworkError","error","payload","errorCode","errNo","createRuntimeError","source","updateConversationRequestMeta","input","clearConversationRuntimeState","resetState","setLoading","removeLoadingPlaceholder","refreshContextId","abortActiveSession","handleEnd","addConversation","clearConversation","addLoadingPlaceholder","fillData","kind","handler","isHistory","historyId","messageId","prevConversation","nextConversation","onSendError","requestConversationId","processLiveData","data","result","final","firstPart","processHistoryData","text","json","runSession","messages","chatOptions","showLoadingPlaceholder","recoveryAttempt","preferMiniProgramRequest","abortController","hasResponse","streamFailed","streamAborted","finalReceived","lastTaskId","runPromise","responseTaskId","responseFinal","recovery","getMiniProgramRequest","recoveryError","streamError","recovered","userContent","localTaskId","wasAborted","targetTaskId","greeting","limit","next","lastRole","taskIds","content","partial","response","messageIndex","oldMessage","updatedMessage","nextMessages","generateUUID","cryptoObj","char","random","getAppIdFromHostname","hostname","wwwMatch","domainMatch","extractAppIdFromUrl","url","pathMatch","cachedAppId","cachedAnonymousUid","getAppId","urlAppId","createContextIdFactory","getUserUid","mode","isMiniProgram","appId","userUid","baseContextId","convertToA2AParts","extractTextFromContent","createSessionRuntimeFactory","args","contextId","createCopilotRuntimeFactory","createContextId","postRpc","sendMessageStream","signal","onOpen","onMessage","onClose","systemMsg","nonSystemMsgs","lastUserMsg","parts","systemPrompt","cursor","normalizeStreamError","normalized","createAbortError","createSSEConsumer","createParser","event","bindAbortSignal","onAbort","startBrowserStream","authHeader","headers","reader","decoder","parser","done","value","decodeMiniProgramArrayBuffer","textDecoder","buffer","startMiniProgramStream","resolve","reject","chunkBuffer","MiniProgramTextDecoder","sawChunk","settled","opened","finish","emitOpen","feedText","chunkListener","merged","decodeOffset","remaining","decoded","lastGoodIndex","goodPart","encodedGood","headersListener","miniReq","requestTask","wholeResponse","finalText","startStream","getAccessToken","token","canUseMiniProgramStream","createCopilotClient","http","baseUrl","envBaseUrl","STREAM_BREAK_PATTERN","STREAM_SOFT_BREAK_PATTERN","getLatestAssistantTextMessageFromConversation","getLatestUserMessageIdFromConversation","getLatestAssistantTextMessageAfterUser","userMessageId","userIndex","getActiveConversation","conversations","index","getConversationByTaskId","takeCommittedSegments","trimmedBuffer","segments","lastIndex","segment","remainder","createAutoVoiceReplyController","speech","storage","enabledStorageKey","defaultVoice","audioFormat","sampleRate","preprocessText","enabled","lastLoading","activeTaskId","activeUserMessageId","suppressedTaskId","streamStarted","activeMessageId","observedText","pendingText","queuedOperations","voice","syncSnapshot","speechSnapshot","nextSnapshot","changed","persistEnabled","resetStreamingState","clearActiveRoundContext","stopStreaming","preserveRoundContext","enqueueOperation","operation","dispatchSegments","nextText","processLatestMessage","fullText","previousText","delta","handleSourceChange","activeConversation","wasLoading","latestMessage","finishedConversation","sourceUnsubscribe","speechUnsubscribe","nextVoice","controller","nextEnabled"],"mappings":"wQAgBO,IAAMA,EAAAA,CAAN,KAA4B,CAA5B,WAAA,EAAA,CACL,aAAU,KAAA,CACV,IAAA,CAAQ,UAA+B,EAAC,CAExC,YAAS,CACP,OAAA,CAAS,MACT,gBAAA,CAAkB,CAACC,EAAiBC,CAAAA,GAAyB,CAC3D,KAAK,SAAA,CAAU,IAAA,CAAKA,CAAQ,EAC9B,CACF,GAEA,KAAA,EAAQ,CACF,KAAK,OAAA,GACT,IAAA,CAAK,QAAU,IAAA,CACf,IAAA,CAAK,OAAO,OAAA,CAAU,IAAA,CACtB,KAAK,SAAA,CAAU,OAAA,CAASA,GAAaA,CAAAA,EAAU,GACjD,CACF,CAAA,CAEO,SAASC,EAAAA,EAAiE,CAC/E,OAAI,OAAO,eAAA,CAAoB,IACtB,IAAI,eAAA,CAEN,IAAIH,EACb,CAEO,SAASI,CAAAA,EAAS,CACvB,OAAO,IAAI,IAAA,GAAO,WAAA,EACpB,CAEO,SAASC,CAAAA,EAAa,CAC3B,OAAO,CAAA,IAAA,EAAO,KAAK,GAAA,EAAK,IAAI,IAAA,CAAK,MAAA,GAAS,QAAA,CAAS,EAAE,EAAE,KAAA,CAAM,CAAA,CAAG,EAAE,CAAC,CAAA,CACrE,CAEO,SAASC,EAAAA,CAAqCC,EAAe,CAClE,OAAO,CAAE,GAAGA,CAAQ,CACtB,CAEO,SAASC,GAAkBC,CAAAA,CAA0C,CAC1E,OAAO,CACL,GAAGA,EACH,MAAA,CAAQA,CAAAA,CAAa,OAAS,CAAE,GAAGA,EAAa,MAAO,CAAA,CAAI,OAC3D,YAAA,CAAcA,CAAAA,CAAa,aAAe,CAAE,GAAGA,EAAa,YAAa,CAAA,CAAI,OAC7E,QAAA,CAAUA,CAAAA,CAAa,SAAS,GAAA,CAAKF,CAAAA,EAAYD,GAAaC,CAAO,CAAC,CACxE,CACF,CAEO,SAASG,EAAAA,CAAeC,CAAAA,CAAsD,CACnF,OAAO,CACL,SAAUA,CAAAA,CAAM,QAAA,CAChB,UAAWA,CAAAA,CAAM,SAAA,CACjB,iBAAkBA,CAAAA,CAAM,gBAAA,CACxB,aAAc,CAAE,GAAGA,EAAM,YAAa,CAAA,CACtC,cAAeA,CAAAA,CAAM,KAAA,CAClB,IAAKC,CAAAA,EAAOD,CAAAA,CAAM,KAAKC,CAAE,CAAC,EAC1B,MAAA,CAAQH,CAAAA,EAA+C,EAAQA,CAAa,CAAA,CAC5E,IAAKA,CAAAA,EAAiBD,EAAAA,CAAkBC,CAAY,CAAC,CAC1D,CACF,CC/DO,IAAMI,GAA2C,CACtD,cAAA,CAAgB,CAACC,CAAAA,CAAMC,CAAAA,CAAMH,EAAII,CAAAA,CAAMC,CAAAA,GAAW,CAChD,GAAI,CAACL,EAAI,OAAOE,CAAAA,CAChB,IAAMI,CAAAA,CAAWJ,CAAAA,CAAK,SAAS,IAAA,CAAMP,CAAAA,EAAYA,EAAQ,SAAA,GAAcK,CAAE,EACnEO,CAAAA,CAAUJ,CAAAA,CAAK,MAAQ,EAAA,CAE7B,OAAIG,GAAY,SAAA,GAAaA,CAAAA,CACpB,CACL,GAAGJ,CAAAA,CACH,SAAUA,CAAAA,CAAK,QAAA,CAAS,IAAKP,CAAAA,EAC3BA,CAAAA,CAAQ,YAAcK,CAAAA,CACjB,CAAE,GAAGL,CAAAA,CAAS,OAAA,CAAUA,EAAwB,OAAA,CAAUY,CAAQ,EACnEZ,CACN,CAAA,CACA,YAAaH,CAAAA,EACf,EAGK,CACL,GAAGU,EACH,QAAA,CAAU,CACR,GAAGA,CAAAA,CAAK,QAAA,CACR,CACE,SAAA,CAAWF,CAAAA,CACX,KAAAI,CAAAA,CACA,IAAA,CAAM,eACN,OAAA,CAASG,CAAAA,CACT,UAAWF,CAAAA,EAAQ,SAAA,EAAab,GAClC,CACF,EACA,WAAA,CAAaA,CAAAA,EACf,CACF,CAAA,CAEA,QAAS,CAACU,CAAAA,CAAMC,EAAMH,CAAAA,CAAII,CAAAA,CAAMC,IAAW,CACzC,GAAI,CAACL,CAAAA,CAAI,OAAOE,EAChB,IAAMM,CAAAA,CAAWL,GAAM,IAAA,EAAM,WAAA,EAAe,GACtCG,CAAAA,CAAWJ,CAAAA,CAAK,SAAS,IAAA,CAAMP,CAAAA,EAAYA,EAAQ,SAAA,GAAcK,CAAE,EAEzE,OAAIM,CAAAA,EAAY,YAAaA,CAAAA,CACpB,CACL,GAAGJ,CAAAA,CACH,QAAA,CAAUA,EAAK,QAAA,CAAS,GAAA,CAAKP,GAC3BA,CAAAA,CAAQ,SAAA,GAAcK,EACjB,CAAE,GAAGL,EAAS,OAAA,CAAUA,CAAAA,CAA2B,QAAUa,CAAS,CAAA,CACvEb,CACN,CAAA,CACA,WAAA,CAAaH,GACf,CAAA,CAGK,CACL,GAAGU,CAAAA,CACH,SAAU,CACR,GAAGA,EAAK,QAAA,CACR,CACE,UAAWF,CAAAA,CACX,IAAA,CAAAI,EACA,IAAA,CAAM,SAAA,CACN,QAASI,CAAAA,CACT,SAAA,CAAWH,GAAQ,SAAA,EAAab,CAAAA,EAClC,CACF,CAAA,CACA,YAAaA,CAAAA,EACf,CACF,CAAA,CAEA,IAAA,CAAM,CAACU,CAAAA,CAAMC,CAAAA,CAAMM,EAAKL,CAAAA,CAAMC,CAAAA,GAAW,CACvC,IAAMK,CAAAA,CAAWP,GAAM,IAAA,EAAQ,GACzBQ,CAAAA,CAAOD,CAAAA,EAAU,KACjBE,CAAAA,CAAOD,CAAAA,EAAM,aAAeA,CAAAA,EAAM,IAAA,EAAQ,GAC1CE,CAAAA,CAAUH,CAAAA,EAAU,QACpBV,CAAAA,CAAKa,CAAAA,EAAS,OACpB,GAAI,CAACb,GAAM,CAACY,CAAAA,CAAM,OAAOV,CAAAA,CAEzB,IAAMY,EAAaJ,CAAAA,EAAU,MAAA,CACvBJ,EAAWJ,CAAAA,CAAK,QAAA,CAAS,KAAMP,CAAAA,EAAYA,CAAAA,CAAQ,YAAcK,CAAE,CAAA,CAEzE,OAAIM,CAAAA,EAAY,YAAA,GAAgBA,EACvB,CACL,GAAGJ,EACH,QAAA,CAAUA,CAAAA,CAAK,SAAS,GAAA,CAAKP,CAAAA,EAC3BA,EAAQ,SAAA,GAAcK,CAAAA,CACjB,CACC,GAAGL,CAAAA,CACH,WAAYmB,CAAAA,EAAenB,CAAAA,CAAwB,UACrD,CAAA,CACAA,CACN,EACA,WAAA,CAAaH,CAAAA,EACf,CAAA,CAGK,CACL,GAAGU,CAAAA,CACH,QAAA,CAAU,CACR,GAAGA,CAAAA,CAAK,SACR,CACE,SAAA,CAAWF,EACX,IAAA,CAAAI,CAAAA,CACA,KAAM,MAAA,CACN,QAAA,CAAUQ,EACV,eAAA,CAAiBC,CAAAA,EAAS,MAAM,KAAA,EAAS,EAAA,CACzC,WAAYC,CAAAA,EAAc,SAAA,CAC1B,UAAWT,CAAAA,EAAQ,SAAA,EAAab,GAClC,CACF,EACA,WAAA,CAAaA,CAAAA,EACf,CACF,CAAA,CAEA,MAAO,CAACU,CAAAA,CAAMC,EAAMH,CAAAA,CAAII,CAAAA,GAAS,CAC/B,IAAMW,CAAAA,CAAWZ,GAAM,IAAA,EAAQA,CAAAA,EAAM,MAAM,KAAA,EAAS,0BAAA,CACpD,OAAO,CACL,GAAGD,EACH,QAAA,CAAU,CACR,GAAGA,CAAAA,CAAK,QAAA,CACR,CACE,SAAA,CAAWF,CAAAA,EAAM,SAAS,IAAA,CAAK,GAAA,EAAK,CAAA,CAAA,CACpC,IAAA,CAAAI,EACA,IAAA,CAAM,OAAA,CACN,QAASW,CAAAA,CACT,SAAA,CAAWvB,GACb,CACF,EACA,MAAA,CAAQ,OAAA,CACR,YAAaA,CAAAA,EACf,CACF,CAAA,CAEA,WAAA,CAAa,CAACU,CAAAA,CAAMC,CAAAA,CAAMH,EAAII,CAAAA,CAAMC,CAAAA,GAAW,CAC7C,GAAI,CAACL,EAAI,OAAOE,CAAAA,CAChB,IAAMI,CAAAA,CAAWJ,CAAAA,CAAK,SAAS,IAAA,CAAMP,CAAAA,EAAYA,EAAQ,SAAA,GAAcK,CAAE,EAEnEgB,CAAAA,CAAAA,CADWb,CAAAA,EAAM,MAAQ,EAAC,EACV,MAAQ,CAAE,IAAA,CAAM,GAAI,QAAA,CAAU,EAAG,CAAA,CAEvD,OAAIG,GAAYA,CAAAA,CAAS,IAAA,GAAS,YACzB,CACL,GAAGJ,EACH,QAAA,CAAUA,CAAAA,CAAK,SAAS,GAAA,CAAKP,CAAAA,EAC3BA,EAAQ,SAAA,GAAcK,CAAAA,CAAM,CAAE,GAAIL,CAAAA,CAA6B,KAAAqB,CAAK,CAAA,CAAqBrB,CAC3F,CAAA,CACA,WAAA,CAAaH,GACf,CAAA,CAGK,CACL,GAAGU,CAAAA,CACH,SAAU,CACR,GAAGA,EAAK,QAAA,CACR,CACE,UAAWF,CAAAA,CACX,IAAA,CAAAI,EACA,IAAA,CAAM,WAAA,CACN,KAAAY,CAAAA,CACA,SAAA,CAAWX,GAAQ,SAAA,EAAab,CAAAA,EAClC,CACF,CAAA,CACA,YAAaA,CAAAA,EACf,CACF,CACF,CAAA,CAEO,SAASyB,EAAAA,CAAQd,CAAAA,CAAWe,EAAgB,CACjD,OAAIf,GAAM,IAAA,EAAM,IAAA,CAAa,OACzBA,CAAAA,EAAM,IAAA,EAAM,OAAS,IAAA,CAAa,WAAA,CAClCA,GAAM,IAAA,GAAS,MAAA,CAAe,eAC9BA,CAAAA,EAAM,IAAA,EAAM,OAAS,QAAA,EAAYe,CAAAA,EAAU,YAAY,IAAA,GAAS,SAAA,CAAkB,UAClFA,CAAAA,EAAU,KAAA,CAAc,QACrB,SACT,CClLA,SAASC,EAAAA,CAAsBC,EAAcC,CAAAA,CAA4C,CACvF,GAAI,OAAOD,CAAAA,EAAQ,SAAU,CAC3B,IAAME,EAAgBF,CAAAA,CAAI,IAAA,GAAO,WAAA,EAAY,CAC7C,GACEE,CAAAA,GAAkB,IAAA,EAClBA,IAAkB,QAAA,EAClBA,CAAAA,GAAkB,SAClBA,CAAAA,GAAkB,QAAA,CAElB,OAAO,KAEX,CAEA,OAAKD,CAAAA,CAKF,OAAOA,EAAQ,EAAA,CAAO,GAAA,EAAeD,IAAQC,CAAAA,CAAQ,EAAA,EACrD,OAAOA,CAAAA,CAAQ,KAAA,CAAU,KAAeD,CAAAA,GAAQC,CAAAA,CAAQ,MALlD,KAOX,CAEO,SAASE,EAAAA,EAAgC,CAC9C,IAAMC,CAAAA,CAAUC,oCAAAA,GAChB,OAAIN,EAAAA,CAAsBK,GAAS,IAAA,EAAM,MAAA,KAAYA,CAAAA,EAAS,IAAA,EAAM,QAAQ,CAAA,CACnE,IAAA,CAIP,OAAOA,CAAAA,EAAS,EAAA,EAAI,SAAY,UAAA,EAChC,OAAOA,GAAS,EAAA,EAAI,OAAA,EAAY,YAChC,OAAOA,CAAAA,EAAS,IAAI,OAAA,EAAY,UAAA,EAChC,OAAOA,CAAAA,EAAS,IAAA,EAAM,SAAY,UAAA,EAClC,OAAOA,GAAS,EAAA,EAAI,OAAA,EAAY,YAChC,OAAOA,CAAAA,EAAS,IAAI,OAAA,EAAY,UAEpC,CAEO,SAASE,EAAAA,EAAkC,CAChD,IAAMF,CAAAA,CAAUC,sCAA0B,CAC1C,OAAI,SAAOD,CAAAA,EAAS,EAAA,EAAI,SAAY,UAAA,EAAc,OAAOA,GAAS,EAAA,EAAI,iBAAA,EAAsB,WAK9F,CAEO,SAASG,IAAqC,CAEnD,OAAO,OADSF,oCAAAA,EAA0B,EACnB,IAAI,iBAAA,EAAsB,UACnD,CCNO,SAASG,EAAAA,CACdC,EACAC,CAAAA,CACwB,KAElBC,CAAAA,CAAAA,CADOD,CAAAA,CAAQ,MAAQ,cAAA,IACK,aAAA,CAC5BE,EAA0B,CAACD,CAAAA,CAC3BE,EAAqB,CAACF,CAAAA,CACtBG,EAAmB,IACvBJ,CAAAA,CAAQ,gBAAe,EACvBD,CAAAA,CAAQ,gBAAgBE,CAAAA,CAAmB,aAAA,CAAgB,cAAc,CAAA,CAErEhC,CAAAA,CAAuB,CAC3B,IAAA,CAAM,GACN,KAAA,CAAO,GACP,QAAA,CAAU,IAAA,CACV,UAAW,KAAA,CACX,gBAAA,CAAkB,MAClB,YAAA,CAAc,CACZ,KAAM,IAAA,CACN,OAAA,CAAS,KACX,CACF,CAAA,CAEMoC,EAAY,IAAI,GAAA,CAClBC,EAAwE,IAAA,CAExEC,CAAAA,CAAwC,IAAA,CACxCC,EAAkB,SAAA,CAClBC,CAAAA,CAAgB,GAChBC,CAAAA,CAAoC,IAAA,CACpCC,EAAY,KAAA,CACZC,CAAAA,CAAmBR,GAAiB,CACpCS,CAAAA,CAAiBd,EAAQ,mBAAA,CAAoBa,CAAgB,EAC7DE,CAAAA,CAA6C,IAAA,CAE3CC,EAAO,IAAM,CACjB,GAAIJ,CAAAA,CAAW,OACf,IAAMK,CAAAA,CAAWhD,EAAAA,CAAeC,CAAK,CAAA,CACrCoC,CAAAA,CAAU,QAAS7C,CAAAA,EAAaA,CAAAA,CAASwD,CAAQ,CAAC,EACpD,EAEMC,CAAAA,CAAuBC,CAAAA,EAAmB,CAC9CjD,CAAAA,CAAM,KAAA,CAAQA,EAAM,KAAA,CAAM,MAAA,CAAQC,GAAOA,CAAAA,GAAOgD,CAAM,EACxD,CAAA,CAEMC,CAAAA,CAAkB,CAACD,CAAAA,CAAgBE,CAAAA,CAAS,OAAS,CACzDH,CAAAA,CAAoBC,CAAM,CAAA,CAC1BjD,CAAAA,CAAM,MAAQmD,CAAAA,CAAS,CAAC,GAAGnD,CAAAA,CAAM,KAAA,CAAOiD,CAAM,CAAA,CAAI,CAACA,EAAQ,GAAGjD,CAAAA,CAAM,KAAK,EAC3E,CAAA,CAEMoD,EAA2B,IAAM,CACrCb,EAAkB,SAAA,CAClBC,CAAAA,CAAgB,GAClB,CAAA,CAEMa,CAAAA,CAAkBC,GAAmB,CACzC,IAAMC,EAAWD,CAAAA,EAAS,OAAOA,GAAU,QAAA,CAAWA,CAAAA,CAAQ,EAAC,CACzD1D,CAAAA,CAAU,OAAO2D,CAAAA,CAAQ,OAAA,EAAWA,EAAQ,MAAA,EAAU,EAAE,EAAE,WAAA,EAAY,CACtEC,EAAY,MAAA,CAAOD,CAAAA,CAAQ,WAAa,EAAE,CAAA,CAC1CE,EAAQ,MAAA,CAAOF,CAAAA,CAAQ,OAAS,EAAE,CAAA,CAExC,OACEA,CAAAA,CAAQ,IAAA,GAAS,aACjB,gEAAA,CAAiE,IAAA,CAAK3D,CAAO,CAAA,EAC7E,CAAC,SAAU,OAAA,CAAS,OAAA,CAAS,OAAO,CAAA,CAAE,QAAA,CAAS4D,CAAS,CAAA,EACxD,CAAC,SAAU,OAAA,CAAS,OAAA,CAAS,OAAO,CAAA,CAAE,QAAA,CAASC,CAAK,CAExD,CAAA,CAEMC,EAAqB,CACzBJ,CAAAA,CACAK,EAAyC,QAAA,GACZ,CAC7B,IAAMJ,CAAAA,CAAWD,CAAAA,EAAS,OAAOA,CAAAA,EAAU,QAAA,CAAWA,EAAQ,EAAC,CACzD1D,EAAU,MAAA,CAAO2D,CAAAA,CAAQ,SAAWA,CAAAA,CAAQ,MAAA,EAAU,EAAE,CAAA,CAAE,WAAA,GAChE,OAAO,CACL,KAAMF,CAAAA,CAAeC,CAAK,EAAI,SAAA,CAAY,SAAA,CAC1C,QAAA1D,CAAAA,CACA,SAAA,CAAW,KACX,MAAA,CAAA+D,CAAAA,CACA,UAAWlE,CAAAA,EACb,CACF,CAAA,CAEMmE,CAAAA,CAAgC,CACpCX,CAAAA,CACAY,CAAAA,GAKG,CACH,GAAI,CAACZ,EAAQ,OACb,IAAMnD,EAAeE,CAAAA,CAAM,IAAA,CAAKiD,CAAM,CAAA,CACjCnD,CAAAA,GAELE,EAAM,IAAA,CAAKiD,CAAM,EAAI,CACnB,GAAGnD,EACH,YAAA,CAAc+D,CAAAA,CAAM,cAAgB/D,CAAAA,CAAa,YAAA,CACjD,aACE+D,CAAAA,CAAM,YAAA,GAAiB,OAAY/D,CAAAA,CAAa,YAAA,CAAe+D,EAAM,YAAA,CACvE,MAAA,CAAQA,EAAM,MAAA,EAAU/D,CAAAA,CAAa,OACrC,WAAA,CAAaL,CAAAA,EACf,CAAA,EACF,CAAA,CAEMqE,EAAiCb,CAAAA,EAAsC,CAC3EW,EAA8BX,CAAAA,CAAQ,CACpC,aAAc,MAAA,CACd,YAAA,CAAc,IAChB,CAAC,EACH,EAEMc,CAAAA,CAAa,IAAM,CACvB/D,CAAAA,CAAM,IAAA,CAAO,EAAC,CACdA,CAAAA,CAAM,MAAQ,EAAC,CACfA,EAAM,YAAA,CAAe,CACnB,KAAM,IAAA,CACN,OAAA,CAAS,KACX,EACF,CAAA,CAEMgE,EAAc1D,CAAAA,EAAoB,CACtCN,EAAM,SAAA,CAAYM,CAAAA,CAClB,CAACA,CAAAA,EAAU2D,EAAAA,GACb,CAAA,CAEMC,CAAAA,CAAmB,KACvBvB,CAAAA,CAAmBR,CAAAA,GACnBS,CAAAA,CAAiBd,CAAAA,CAAQ,oBAAoBa,CAAgB,CAAA,CACtDA,GAGHwB,CAAAA,CAAqB,IAAM,CAC/B9B,CAAAA,EAAuB,KAAA,GACvBA,CAAAA,CAAwB,IAAA,CAExByB,CAAAA,CAA8BjB,CAA2B,CAAA,CACzDmB,CAAAA,CAAW,KAAK,CAAA,CAChBlB,CAAAA,GACF,CAAA,CAEMsB,EAAAA,CAAY,IAAM,CACtBhB,CAAAA,GACAU,CAAAA,CAA8BjB,CAA2B,EACrDA,CAAAA,EACFe,CAAAA,CAA8Bf,EAA6B,CACzD,MAAA,CAAQ,WACV,CAAC,CAAA,CAEHA,EAA8B,IAAA,CAC9BP,CAAAA,CAAyB,KACzBD,CAAAA,CAAwB,IAAA,CAExB2B,CAAAA,CAAW,KAAK,CAAA,CAChBlB,CAAAA,GACF,CAAA,CAEMuB,CAAAA,CAAmBvE,GAA+B,CACtDE,CAAAA,CAAM,KAAKF,CAAAA,CAAa,MAAM,EAAIA,CAAAA,CAClCoD,CAAAA,CAAgBpD,EAAa,MAAA,CAAQ,IAAI,EACzCgD,CAAAA,GACF,EAEMwB,EAAAA,CAAqBrB,CAAAA,EAAmB,CACvCjD,CAAAA,CAAM,IAAA,CAAKiD,CAAM,CAAA,GACtB,OAAOjD,EAAM,IAAA,CAAKiD,CAAM,EACxBD,CAAAA,CAAoBC,CAAM,EAC1BH,CAAAA,EAAK,EACP,EAEMyB,EAAAA,CAAwB,IAAM,CAClCF,CAAAA,CAAgB,CACd,OAAQ,qBAAA,CACR,MAAA,CAAQ,UACR,QAAA,CAAU,CACR,CACE,SAAA,CAAW,qBAAA,CACX,KAAM,WAAA,CACN,IAAA,CAAM,eACN,OAAA,CAAStC,CAAAA,CAAQ,QAAQ,QAAA,CACzB,SAAA,CAAWtC,GACb,CACF,EACA,WAAA,CAAaA,CAAAA,EACf,CAAC,EACH,EAEMwE,EAAAA,CAA2B,IAAM,CACrCK,EAAAA,CAAkB,qBAAqB,EACzC,CAAA,CAEME,CAAAA,CAAW,CAAC,CAChB,IAAA,CAAAC,EACA,MAAA,CAAAxB,CAAAA,CACA,KAAA7C,CAAAA,CACA,MAAA,CAAAE,EACA,OAAA,CAAAoE,CAAAA,CACA,UAAAC,CAAAA,CACA,SAAA,CAAAC,EACA,SAAA,CAAAC,CACF,IASM,CACJ,IAAI5E,EAAK4E,CAAAA,EAAarC,CAAAA,CAChBnC,EAAOC,CAAAA,EAAQ,OAAA,EAAS,OAAS,OAAA,CAAU,WAAA,CAAc,OAE3D,CAACuE,CAAAA,GAAcJ,IAAS,WAAA,EAAgBA,CAAAA,GAAS,WAAaA,CAAAA,GAASlC,CAAAA,CAAAA,GACzEA,EAAkBkC,CAAAA,CAClBxE,CAAAA,CAAKP,GAAW,CAChB8C,CAAAA,CAAgBvC,GAGlB,IAAM6E,CAAAA,CACJ9E,EAAM,IAAA,CAAKiD,CAAM,GAChB,CACC,MAAA,CAAAA,EACA,MAAA,CAAQ0B,CAAAA,CAAY,YAAc,WAAA,CAClC,QAAA,CAAU,EAAC,CACX,IAAA,CAAAtE,EACA,SAAA,CAAAuE,CAAAA,CACA,YAAanF,CAAAA,EACf,EAEIsF,CAAAA,CAAmBL,CAAAA,CAAQI,EAAkB1E,CAAAA,CAAMH,CAAAA,CAAII,EAAMC,CAAM,CAAA,CACzEN,EAAM,IAAA,CAAKiD,CAAM,EAAI,CACnB,GAAG8B,EACH,MAAA,CAAQzE,CAAAA,EAAQ,OAASwE,CAAAA,CAAiB,MAAA,CAC1C,YAAarF,CAAAA,EACf,EAEKkF,CAAAA,EACHzB,CAAAA,CAAgBD,EAAQ,IAAI,CAAA,CAG9BH,IACF,CAAA,CAEMkC,EAAc,CAClB1B,CAAAA,CACAK,EAAyC,QAAA,CACzCsB,CAAAA,CAAmDpC,IAChD,CACHe,CAAAA,CAA8BqB,EAAuB,CACnD,YAAA,CAAc,QACd,YAAA,CAAcvB,CAAAA,CAAmBJ,EAAOK,CAAM,CAAA,CAC9C,OAAQ,OACV,CAAC,EACGsB,CAAAA,EAAyBpC,CAAAA,GAAgCoC,IAC3DpC,CAAAA,CAA8B,IAAA,CAAA,CAEhCmB,EAAW,KAAK,CAAA,CAChBlB,IACF,CAAA,CAEMoC,EAAmBC,CAAAA,EAAuC,CAC9D,GAAI,CAAEA,CAAAA,EAAc,OAAQ,OAC5B,IAAMC,EAAUD,CAAAA,CAA6C,MAAA,CACvD,CAAE,MAAA,CAAAlC,CAAAA,CAAQ,OAAA3C,CAAAA,CAAQ,QAAA,CAAAa,EAAU,KAAA,CAAAkE,CAAM,EAAID,CAAAA,CAE5C,GAAIC,EAAO,CACTjB,EAAAA,GACA,MACF,CAEA,GAAI,CAACnB,CAAAA,CAAQ,OAEbX,CAAAA,CAAyBW,CAAAA,CACzB,IAAMqC,CAAAA,CAAYhF,CAAAA,EAAQ,SAAS,KAAA,GAAQ,CAAC,EACtCmE,CAAAA,CAAOvD,EAAAA,CAAQoE,EAAWnE,CAAQ,CAAA,CAClCuD,EAAUxE,EAAAA,CAASuE,CAAI,EACxBC,CAAAA,GAELT,EAAAA,GACAO,CAAAA,CAAS,CACP,KAAAC,CAAAA,CACA,MAAA,CAAAxB,EACA,IAAA,CAAMqC,CAAAA,CACN,OAAAhF,CAAAA,CACA,OAAA,CAAAoE,CACF,CAAC,CAAA,EACH,EAEMa,CAAAA,CAAqB,CAACJ,EAAgBlC,CAAAA,GAAmB,CAC7D,GAAM,CAAE,SAAA,CAAA4B,EAAW,SAAA,CAAAD,CAAU,EAAKO,CAAAA,EAAQ,GAC1C,GAAI,CAACN,EAAW,OAEhB,IAAMS,EAAYH,CAAAA,CAAK,KAAA,GAAQ,CAAC,CAAA,CAC1BV,CAAAA,CAAOvD,GAAQoE,CAAS,CAAA,CAE9B,GAAIb,CAAAA,GAAS,cAAA,CAAgB,CAC3B,IAAIe,CAAAA,CAAQF,EAAuB,IAAA,EAAQ,EAAA,CAE3C,GADAE,CAAAA,CAAOA,CAAAA,CAAK,MAAK,CACbA,CAAAA,CAAK,WAAW,MAAM,CAAA,CAAG,CAC3B,IAAMC,CAAAA,CAAOD,EAAK,KAAA,CAAM,CAAC,EAAE,IAAA,EAAK,CAChC,GAAI,CACF,IAAM7E,EAAW,IAAA,CAAK,KAAA,CAAM8E,CAAI,CAAA,CAC5B9E,CAAAA,CAAS,MAAQA,CAAAA,CAAS,QAAA,EAC5B6D,EAAS,CACP,IAAA,CAAM,YACN,MAAA,CAAAvB,CAAAA,CACA,KAAM,CAAE,IAAA,CAAM,OAAQ,IAAA,CAAM,CAAE,KAAM,IAAA,CAAM,IAAA,CAAMtC,CAAS,CAAE,CAAA,CAC3D,QAAST,EAAAA,CAAS,WAAW,EAC7B,SAAA,CAAW,CAAA,CAAA,CACX,UAAA0E,CAAAA,CACA,SAAA,CAAAC,EACA,MAAA,CAAQ,CAAE,QAASM,CAAK,CAC1B,CAAC,EAEL,CAAA,KAAQ,CAER,CACA,MACF,CACF,CAEA,IAAMT,EAAUxE,EAAAA,CAASuE,CAAI,EACxBC,CAAAA,EAELF,CAAAA,CAAS,CACP,IAAA,CAAAC,CAAAA,CACA,OAAAxB,CAAAA,CACA,IAAA,CAAMqC,EACN,OAAA,CAAAZ,CAAAA,CACA,UAAW,IAAA,CACX,SAAA,CAAAE,EACA,SAAA,CAAAC,CAAAA,CACA,OAAQ,CAAE,OAAA,CAASM,CAAK,CAC1B,CAAC,EACH,CAAA,CAEMO,CAAAA,CAAa,MACjBC,CAAAA,CACAC,CAAAA,CACAC,EAAyB,KAAA,CACzBC,CAAAA,CAAkB,EAClBC,CAAAA,CAA2B,KAAA,CAC3Bd,EAAuCpC,CAAAA,GACpC,CACHA,EAA8BoC,CAAAA,CAC9Bd,CAAAA,GACAf,CAAAA,EAAyB,CACzBQ,EAA8BqB,CAAAA,CAAuB,CACnD,aAAc,YAAA,CACd,YAAA,CAAc,KACd,MAAA,CAAQ,WACV,CAAC,CAAA,CAED,IAAMe,EAAkBxG,EAAAA,EAAsB,CAC9C6C,EAAwB2D,CAAAA,CAEpBH,CAAAA,GACFtB,IAAsB,CACtBP,CAAAA,CAAW,IAAI,CAAA,CACflB,CAAAA,IAGF,IAAImD,CAAAA,CAAc,MACdC,CAAAA,CAAe,KAAA,CACfC,EAAgB,KAAA,CAChBC,CAAAA,CAAgB,MAChBC,CAAAA,CAAaT,CAAAA,EAAa,QAAU,IAAA,CAElCU,EAAAA,CAAa1D,EAAe,WAAA,CAAY+C,CAAAA,CAAU,CACtD,MAAA,CAAQC,CAAAA,EAAa,OACrB,MAAA,CAAQI,CAAAA,CAAgB,OACxB,wBAAA,CAAAD,CAAAA,CACA,UAAYnG,CAAAA,EAAY,CACtB,IAAM2G,EAAAA,CAAkB3G,CAAAA,EAAiB,QAAQ,MAAA,CAC3C4G,CAAAA,CAAgB,EAAS5G,CAAAA,EAAiB,MAAA,EAAQ,MACpD2G,EAAAA,GACFF,CAAAA,CAAaE,IAEXC,CAAAA,GACFJ,CAAAA,CAAgB,MAElBH,CAAAA,CAAc,IAAA,CACdrC,EAA8BqB,CAAAA,CAAuB,CACnD,aAAcuB,CAAAA,CAAgB,MAAA,CAAS,YACvC,YAAA,CAAc,IAAA,CACd,OAAQA,CAAAA,CAAgB,WAAA,CAAc,SACxC,CAAC,CAAA,CACDtB,EAAgBtF,CAAO,EACzB,EACA,OAAA,CAAS,IAAM,CAAC,CAClB,CAAC,EAGD,IAAM6G,EAAAA,CAAW,SAAY,CAI3B,GAH4B7E,EAAAA,IAA+B,CAAC,CAAC8E,kCAAsB,EAE1D,CAACP,GAAiB,CAACC,CAAAA,EAAiBN,EAAkB,CAAA,CAC/D,CACd,QAAQ,GAAA,CAAI,cAAc,EAC1BlC,CAAAA,CAA8BqB,CAAAA,CAAuB,CACnD,YAAA,CAAc,YAAA,CACd,aAAc,IAAA,CACd,MAAA,CAAQ,SACV,CAAC,CAAA,CACDnC,GAAK,CACL,GAAI,CACF,IAAMxC,CAAAA,CAAS,MAAMsC,CAAAA,CAAe,aAAA,CAAcyD,GAAc,KAAA,CAAS,CAAA,CAEzE,GAAI/F,CAAAA,CAAO,OAAA,EAAWA,EAAO,MAAA,CAC3B,OAAAgC,EAAyBhC,CAAAA,CAAO,MAAA,CAChC,MAAMoF,CAAAA,CACJ,GACA,CAAE,MAAA,CAAQpF,EAAO,MAAO,CAAA,CACxB,GACAwF,CAAAA,CAAkB,CAAA,CAClB,GACAb,CACF,CAAA,CACO,GAGT,GAAI,CAACgB,GAAe,CAACI,CAAAA,EAAc,CAAC/F,CAAAA,CAAO,MAAA,EAAUwF,EAAkB,CAAA,CACrE,OAAA,MAAMJ,EACJC,CAAAA,CACAC,CAAAA,CACA,GACAE,CAAAA,CAAkB,CAAA,CAClB,GACAb,CACF,CAAA,CACO,EAEX,CAAA,MAAS0B,CAAAA,CAAe,CACtB,OAAA,OAAA,CAAQ,KAAA,CAAM,4CAA6CA,CAAa,CAAA,CACxE3B,EAAY2B,CAAAA,CAAe,UAAA,CAAY1B,CAAqB,CAAA,CACrD,IACT,CACF,CAEA,OAAO,MACT,CAAA,CAEI2B,EAAAA,CACAC,GAAY,KAAA,CAChB,GAAI,CACF,MAAMP,GACR,OAAShD,CAAAA,CAAO,CACTA,GAAiB,IAAA,GAAS,YAAA,EAAgB0C,EAAgB,MAAA,CAAO,OAAA,CACpEG,EAAgB,IAAA,EAEhBD,CAAAA,CAAe,KACfU,EAAAA,CAActD,CAAAA,CACd,QAAQ,KAAA,CAAM,wCAAA,CAA0CA,CAAK,CAAA,EAEjE,CAAA,OAAE,CAIIjB,CAAAA,GAA0B2D,IAC5B3D,CAAAA,CAAwB,IAAA,CAAA,CAG1BwE,GAAY,MAAMJ,EAAAA,GACpB,CAEII,EAAAA,GAIAX,EACFlB,CAAAA,CAAY4B,EAAAA,CAAa,SAAU3B,CAAqB,CAAA,CAC/C,CAACgB,CAAAA,EAAeJ,CAAAA,EAA0B,CAACM,CAAAA,CACpDnB,CAAAA,CAAY4B,GAAa,MAAA,CAAQ3B,CAAqB,EAC7CkB,CAAAA,EACTrC,CAAAA,CAA8BmB,CAAqB,CAAA,CAC/CA,CAAAA,EAAyBpC,IAAgCoC,CAAAA,GAC3DpC,CAAAA,CAA8B,MAEhCmB,CAAAA,CAAW,KAAK,EAChBlB,CAAAA,EAAK,EACIsD,GAAiBpG,CAAAA,CAAM,SAAA,CAChCoE,IAAU,CACD,CAACgC,GAAiBpG,CAAAA,CAAM,SAAA,EACjCgF,EAAY,MAAA,CAAW,QAAA,CAAUC,CAAqB,CAAA,EAE1D,EAEA,OAAO,CACL,WAAA,EAAc,CACZ,OAAOlF,EAAAA,CAAeC,CAAK,CAC7B,CAAA,CAEA,UAAUT,CAAAA,CAAU,CAClB,OAAA6C,CAAAA,CAAU,GAAA,CAAI7C,CAAQ,CAAA,CACf,IAAM,CACX6C,CAAAA,CAAU,MAAA,CAAO7C,CAAQ,EAC3B,CACF,EAEA,MAAM,IAAA,EAAO,CACX,GAAI,CAAAmD,EACJ,OAAID,CAAAA,GAEJzC,EAAM,QAAA,CAAW,IAAA,CACjB8C,GAAK,CAELL,CAAAA,CAAAA,CAAe,SAAY,CACzB,GAAI,CAIF,GAHIR,CAAAA,EACF,MAAM,IAAA,CAAK,WAAA,GAETC,CAAAA,CAAoB,CACtB,IAAMkD,CAAAA,CAAS,MAAMxC,EAAe,aAAA,EAAc,CAC9CwC,EAAO,MAAA,EAAUA,CAAAA,CAAO,UAC1B9C,CAAAA,CAAyB8C,CAAAA,CAAO,OAChC,MAAMM,CAAAA,CAAW,EAAC,CAAG,CAAE,OAAQN,CAAAA,CAAO,MAAO,EAAG,CAAA,CAAK,CAAA,EAEzD,CACF,CAAA,MAAS9B,CAAAA,CAAO,CACd,OAAA,CAAQ,KAAA,CAAM,wCAAyCA,CAAK,EAC9D,QAAE,CACAtD,CAAAA,CAAM,SAAW,KAAA,CACjB8C,CAAAA,GACAL,CAAAA,CAAc,KAChB,CACF,CAAA,GAAG,CAEIA,EACT,CAAA,CAEA,OAAA,EAAU,CACRC,CAAAA,CAAY,IAAA,CACZyB,GAAmB,CACnB/B,CAAAA,CAAU,QACZ,CAAA,CAEA,MAAM,WAAA,CAAY0E,CAAAA,CAAqB,CACrC,GAAI9G,CAAAA,CAAM,WAAa,CAAC8G,CAAAA,CAAY,MAAK,CAAG,OAExC9E,IACF,IAAA,CAAK,KAAA,GACL+B,CAAAA,EAAW,CACXX,GAAyB,CACzBd,CAAAA,CAAyB,KACzB4B,CAAAA,EAAiB,CAAA,CAGnB,IAAM6C,CAAAA,CAAcrH,CAAAA,GACpBmD,CAAAA,CAA8BkE,CAAAA,CAE9B1C,EAAgB,CACd,MAAA,CAAQ0C,EACR,MAAA,CAAQ,WAAA,CACR,aAAc,YAAA,CACd,YAAA,CAAc,KACd,QAAA,CAAU,CACR,CACE,SAAA,CAAWrH,CAAAA,GACX,IAAA,CAAM,MAAA,CACN,KAAM,cAAA,CACN,OAAA,CAASoH,EACT,SAAA,CAAWrH,CAAAA,EACb,CACF,CAAA,CACA,YAAaA,CAAAA,EACf,CAAC,CAAA,CAED,GAAI,CACF,MAAMiG,CAAAA,CACJ,CAAC,CAAE,IAAA,CAAM,OAAQ,OAAA,CAASoB,CAAY,CAAC,CAAA,CACvC,KAAA,CAAA,CACA,GACA,CAAA,CACA,CAAA,CAAA,CACAC,CACF,EACF,CAAA,MAASzD,EAAO,CACd,GAAKA,EAAgB,IAAA,GAAS,YAAA,CAAc,OAC5C0B,CAAAA,CAAY1B,CAAAA,CAAO,OAAQyD,CAAW,EACxC,CACF,CAAA,CAEA,KAAA,EAAQ,CACN,IAAMC,CAAAA,CAAa3E,GAAuB,MAAA,CAAO,OAAA,CACjD8B,GAAmB,CACnBf,CAAAA,GACAU,CAAAA,CAA8BjB,CAA2B,EACzDA,CAAAA,CAA8B,IAAA,CAC9BP,EAAyB,IAAA,CACzB2B,EAAAA,GACK+C,CAAAA,EACE,OAAA,CAAQ,UAEjB,CAAA,CAEA,MAAM,UAAA,CAAW/D,CAAAA,CAAiB,CAChC,IAAMgE,CAAAA,CAAehE,GAAUX,CAAAA,CAkB/B,GAjBA,KAAK,KAAA,EAAM,CAEX+B,EAAgB,CACd,MAAA,CAAQ3E,GAAW,CACnB,MAAA,CAAQ,QACR,QAAA,CAAU,CACR,CACE,SAAA,CAAW,CAAA,OAAA,EAAU,KAAK,GAAA,EAAK,GAC/B,IAAA,CAAM,WAAA,CACN,KAAM,cAAA,CACN,OAAA,CAASqC,EAAQ,OAAA,CAAQ,SAAA,CACzB,UAAWtC,CAAAA,EACb,CACF,CAAA,CACA,WAAA,CAAaA,GACf,CAAC,EAEG,CAAA,CAACwH,CAAAA,CAEL,GAAI,CACF,MAAMrE,EAAe,UAAA,CAAWqE,CAAY,EAC5C3E,CAAAA,CAAyB,KAC3B,OAASgB,CAAAA,CAAO,CACd,QAAQ,KAAA,CAAM,yCAAA,CAA2CA,CAAK,EAChE,CACF,EAEA,iBAAA,CAAkB4D,CAAAA,CAAmB,CAUnC,GATA,IAAA,CAAK,OAAM,CACXnD,CAAAA,GACAlB,CAAAA,CAA8B,IAAA,CAC9BP,EAAyB,IAAA,CACzBc,CAAAA,GACIpB,CAAAA,EACFkC,CAAAA,GAGEgD,CAAAA,CAAU,CACZ,IAAMjE,CAAAA,CAAS,CAAA,KAAA,EAAQ,KAAK,GAAA,EAAK,GACjCjD,CAAAA,CAAM,IAAA,CAAKiD,CAAM,CAAA,CAAI,CACnB,OAAAA,CAAAA,CACA,MAAA,CAAQ,YACR,QAAA,CAAU,CACR,CACE,SAAA,CAAW,CAAA,SAAA,EAAY,KAAK,GAAA,EAAK,GACjC,IAAA,CAAM,WAAA,CACN,KAAM,cAAA,CACN,OAAA,CAASiE,EACT,SAAA,CAAWzH,CAAAA,EACb,CACF,CAAA,CACA,YAAaA,CAAAA,EACf,EACAO,CAAAA,CAAM,KAAA,CAAQ,CAACiD,CAAM,EACvB,CAEAH,CAAAA,GACF,EAEA,MAAM,oBAAA,EAAuB,CAC3BuB,CAAAA,CAAgB,CACd,OAAQ3E,CAAAA,EAAW,CACnB,OAAQ,WAAA,CACR,QAAA,CAAU,EAAC,CACX,WAAA,CAAaD,GAAO,CACpB,MAAA,CAAQ,CAAE,KAAA,CAAO,iBAAkB,CACrC,CAAC,CAAA,CAED,GAAI,CACF,MAAMmD,EAAe,eAAA,GACvB,OAASU,CAAAA,CAAO,CACd,QAAQ,KAAA,CAAM,kDAAA,CAAoDA,CAAK,EACzE,CACF,EAEA,MAAM,WAAA,CAAY6D,EAAQ,EAAA,CAAIC,CAAAA,CAAe,CAC3CpH,CAAAA,CAAM,gBAAA,CAAmB,KACzB8C,CAAAA,EAAK,CAEL,GAAI,CACF,IAAMsC,EAAS,MAAMxC,CAAAA,CAAe,WAAWuE,CAAAA,CAAOC,CAAI,EACpDzB,CAAAA,CAAWP,CAAAA,EAAQ,UAAY,EAAC,CAElCnC,EAAS,EAAA,CACToE,CAAAA,CAAW,GACTC,CAAAA,CAAoB,GAE1B3B,CAAAA,CAAS,OAAA,CAAS/F,GAAiB,CACjC,IAAMS,EAAOT,CAAAA,CAAQ,IAAA,GAAS,QAAU,WAAA,CAAc,MAAA,CAClDS,IAASgH,CAAAA,GACXpE,CAAAA,CAAS,gBAAgBvD,CAAAA,EAAY,GACrC4H,CAAAA,CAAQ,IAAA,CAAKrE,CAAM,CAAA,CACnBoE,CAAAA,CAAWhH,GAEbkF,CAAAA,CAAmB3F,CAAAA,CAASqD,CAAM,EACpC,CAAC,EAEDjD,CAAAA,CAAM,KAAA,CAAQ,CAAC,GAAGsH,CAAAA,CAAS,GAAGtH,CAAAA,CAAM,KAAA,CAAM,OAAQC,CAAAA,EAAO,CAACqH,EAAQ,QAAA,CAASrH,CAAE,CAAC,CAAC,CAAA,CAC/ED,EAAM,YAAA,CAAe,CACnB,KAAMoF,CAAAA,EAAQ,IAAA,EAAQ,KACtB,OAAA,CAASA,CAAAA,EAAQ,SAAW,CAAA,CAC9B,EACF,OAAS9B,CAAAA,CAAO,CACd,QAAQ,KAAA,CAAM,8CAAA,CAAgDA,CAAK,EACrE,CAAA,OAAE,CACAtD,CAAAA,CAAM,gBAAA,CAAmB,MACzB8C,CAAAA,GACF,CACF,CAAA,CAEA,MAAM,iBAAkB,CAClB,CAAC9C,EAAM,YAAA,CAAa,OAAA,EAAWA,EAAM,gBAAA,EAAoB,CAACA,EAAM,YAAA,CAAa,IAAA,EACjF,MAAM,IAAA,CAAK,WAAA,CAAY,GAAIA,CAAAA,CAAM,YAAA,CAAa,IAAI,EACpD,CAAA,CAEA,gBAAgBiD,CAAAA,CAAgB,CAC9B,IAAMnD,CAAAA,CAAeE,CAAAA,CAAM,KAAKiD,CAAM,CAAA,CACtC,OAAOnD,CAAAA,CAAeD,EAAAA,CAAkBC,CAAY,CAAA,CAAI,MAC1D,EAEA,iBAAA,CAAkBmD,CAAAA,CAAgB,CAChCqB,EAAAA,CAAkBrB,CAAM,EAC1B,CAAA,CAEA,aAAA,CAAcA,EAAgB4B,CAAAA,CAAmB,CAC/C,IAAM/E,CAAAA,CAAeE,CAAAA,CAAM,KAAKiD,CAAM,CAAA,CACjCnD,IAELE,CAAAA,CAAM,IAAA,CAAKiD,CAAM,CAAA,CAAI,CACnB,GAAGnD,CAAAA,CACH,QAAA,CAAUA,EAAa,QAAA,CAAS,MAAA,CAAQF,GAAYA,CAAAA,CAAQ,SAAA,GAAciF,CAAS,CAAA,CACnF,WAAA,CAAapF,GACf,CAAA,CACAyD,EAAgBD,CAAAA,CAAQ,IAAI,EAC5BH,CAAAA,EAAK,EACP,EAEA,aAAA,CAAce,CAAAA,CAAO,CACnB,GAAM,CACJ,OAAAZ,CAAAA,CACA,SAAA,CAAA4B,EACA,OAAA,CAAA0C,CAAAA,CACA,QAAAC,CAAAA,CAAU,KAAA,CACV,OAAAlH,CAAAA,CACA,QAAA,CAAAmH,EACA,QAAA,CAAAtG,CAAAA,CAAW,EACb,CAAA,CAAI0C,EACE/D,CAAAA,CAAeE,CAAAA,CAAM,KAAKiD,CAAM,CAAA,CACtC,GAAI,CAACnD,CAAAA,CAAc,OAEnB,IAAM4H,CAAAA,CAAe5H,EAAa,QAAA,CAAS,SAAA,CACxCF,IAAYA,EAAAA,CAAQ,SAAA,GAAciF,CACrC,CAAA,CACA,GAAI6C,IAAiB,EAAA,CAAI,OAEzB,IAAMC,CAAAA,CAAa7H,CAAAA,CAAa,SAAS4H,CAAY,CAAA,CACrD,GAAI,CAACC,CAAAA,CAAY,OAEjB,IAAMC,CAAAA,CAA+B,CAAE,GAAGD,CAAAA,CAAY,GAAGxG,CAAS,CAAA,CAE9DoG,IAAY,MAAA,GACV,SAAA,GAAaK,EACfA,CAAAA,CAAe,OAAA,CAAUJ,EACrB,CAAA,EAAII,CAAAA,CAA+B,SAAW,EAAE,CAAA,EAAGL,CAAO,CAAA,CAAA,CAC1DA,CAAAA,CACK,YAAaK,CAAAA,CACtBA,CAAAA,CAAe,QAAUJ,CAAAA,CACrB,CAAA,EAAII,EAAkC,OAAA,EAAW,EAAE,GAAGL,CAAO,CAAA,CAAA,CAC7DA,EACKI,CAAAA,CAAW,IAAA,GAAS,iBAC5BC,CAAAA,CAA+B,OAAA,CAAUJ,EACtC,CAAA,EAAIG,CAAAA,CAA2B,SAAW,EAAE,CAAA,EAAGJ,CAAO,CAAA,CAAA,CACtDA,CAAAA,CAAAA,CAAAA,CAAAA,CAIJ,eAAgBK,CAAAA,EAAkBtH,CAAAA,IACnCsH,EAA+B,UAAA,CAC9BtH,CAAAA,EAAWsH,EAA+B,UAAA,CAAA,CAE1CH,CAAAA,GAAa,SACdG,CAAAA,CAA+B,QAAA,CAAWH,GAG7C,IAAMI,EAAAA,CAAe,CAAC,GAAG/H,CAAAA,CAAa,QAAQ,CAAA,CAC9C+H,EAAAA,CAAaH,CAAY,CAAA,CAAIE,CAAAA,CAE7B5H,EAAM,IAAA,CAAKiD,CAAM,EAAI,CACnB,GAAGnD,EACH,QAAA,CAAU+H,EAAAA,CACV,YAAapI,CAAAA,EACf,EACAyD,CAAAA,CAAgBD,CAAAA,CAAQ,IAAI,CAAA,CAC5BH,CAAAA,GACF,CACF,CACF,CCx0BA,SAASgF,CAAAA,EAAuB,CAC9B,IAAMC,CAAAA,CAAY,OAAO,UAAA,CAAe,GAAA,CAAc,WAAW,MAAA,CAAS,MAAA,CAE1E,OAAIA,CAAAA,EAAa,OAAOA,EAAU,UAAA,EAAe,UAAA,CACxCA,EAAU,UAAA,EAAW,CAG1BA,GAAa,OAAOA,CAAAA,CAAU,iBAAoB,UAAA,CAC7C,sCAAA,CAAuC,QAAQ,OAAA,CAAUC,CAAAA,EAAS,CAEvE,IAAMC,CAAAA,CAAAA,CADeF,EAAU,eAAA,CAAgB,IAAI,WAAW,CAAC,CAAC,EACnC,CAAC,CAAA,EAAK,GAAK,EAAA,CAExC,OAAA,CADcC,IAAS,GAAA,CAAMC,CAAAA,CAAUA,EAAS,CAAA,CAAO,CAAA,EAC1C,SAAS,EAAE,CAC1B,CAAC,CAAA,CAGI,sCAAA,CAAuC,QAAQ,OAAA,CAAUD,CAAAA,EAAS,CACvE,IAAMC,CAAAA,CAAU,KAAK,MAAA,EAAO,CAAI,GAAM,CAAA,CAEtC,OAAA,CADcD,IAAS,GAAA,CAAMC,CAAAA,CAAUA,EAAS,CAAA,CAAO,CAAA,EAC1C,SAAS,EAAE,CAC1B,CAAC,CACH,CAEA,SAASC,EAAAA,CAAqBC,CAAAA,CAAiC,CAC7D,IAAMC,CAAAA,CAAW,yDAAyD,IAAA,CAAKD,CAAQ,EACvF,GAAIC,CAAAA,GAAW,CAAC,CAAA,CAAG,OAAOA,EAAS,CAAC,CAAA,CAEpC,IAAMC,CAAAA,CAAc,mDAAA,CAAoD,KAAKF,CAAQ,CAAA,CACrF,OAAIE,CAAAA,GAAc,CAAC,EAAUA,CAAAA,CAAY,CAAC,EAEnC,IACT,CAEA,SAASC,EAAAA,EAAqC,CAC5C,GAAI,OAAO,MAAA,CAAW,IAAa,OAAO,IAAA,CAE1C,GAAI,CACF,IAAMC,EAAM,MAAA,CAAO,QAAA,CAAS,KACtBC,CAAAA,CAAY,4BAAA,CAA6B,KAAKD,CAAG,CAAA,CACvD,OAAIC,CAAAA,GAAY,CAAC,EAAUA,CAAAA,CAAU,CAAC,EAC/BN,EAAAA,CAAqB,MAAA,CAAO,SAAS,QAAQ,CACtD,MAAQ,CACN,OAAO,IACT,CACF,CAEA,IAAIO,EAAAA,CAA6B,IAAA,CAC7BC,GAAoC,IAAA,CAExC,SAASC,GAASR,CAAAA,CAA2B,CAC3C,IAAMS,CAAAA,CAAWT,CAAAA,CAAWD,GAAqBC,CAAQ,CAAA,CAAIG,IAAoB,CACjF,OAAIM,IACCH,EAAAA,GAAaA,EAAAA,CAAcX,GAAa,CAAA,CACtCW,EAAAA,CACT,CASO,SAASI,EAAAA,CAAuBN,EAAaO,CAAAA,CAAkC,CACpF,OAAO,CAACC,CAAAA,CAAsB,iBAAmB,CAC/C,IAAMC,EAAgBxH,EAAAA,EAAqB,CACvCyH,EAAQN,EAAAA,EAAS,CAErB,GAAIK,CAAAA,CAAe,CACjB,IAAMb,CAAAA,CAAWI,CAAAA,CAAMA,EAAI,OAAA,CAAQ,cAAA,CAAgB,EAAE,CAAA,CAAE,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,EAAI,EAAA,CACvEU,CAAAA,CAAQN,GAASR,CAAQ,EAC3B,CAEA,IAAMe,CAAAA,CAAUJ,KAAa,EAAMJ,EAAAA,GAAAA,EAAAA,CAAuB,aAAaZ,CAAAA,EAAc,IAC/EqB,CAAAA,CAAgB,CAAA,EAAGF,CAAK,CAAA,CAAA,EAAIC,CAAO,GAEzC,OAAIH,CAAAA,GAAS,cACJ,CAAA,EAAGI,CAAa,IAAIrB,CAAAA,EAAc,GAGpCqB,CACT,CACF,CCnFO,SAASC,EAAAA,CAAkB7B,EAA4C,CAC5E,OAAI,OAAOA,CAAAA,EAAY,QAAA,CACd,CAAC,CAAE,IAAA,CAAM,OAAQ,IAAA,CAAMA,CAAQ,CAAC,CAAA,CAGlCA,CAAAA,CACJ,IAAKnH,CAAAA,EAAsB,CAC1B,OAAQA,CAAAA,CAAK,IAAA,EACX,KAAK,MAAA,CACH,OAAO,CAAE,IAAA,CAAM,OAAQ,IAAA,CAAMA,CAAAA,CAAK,IAAK,CAAA,CACzC,KAAK,QACH,OAAIA,CAAAA,CAAK,KACA,CACL,IAAA,CAAM,OACN,IAAA,CAAM,CACJ,MAAOA,CAAAA,CAAK,IAAA,CACZ,SAAUA,CAAAA,CAAK,QAAA,EAAY,WAC7B,CACF,CAAA,CAEEA,EAAK,GAAA,CACA,CACL,KAAM,MAAA,CACN,IAAA,CAAM,CAAE,GAAA,CAAKA,CAAAA,CAAK,IAAK,QAAA,CAAUA,CAAAA,CAAK,UAAY,WAAY,CAChE,EAEK,IAAA,CACT,KAAK,OACH,OAAIA,CAAAA,CAAK,KACA,CACL,IAAA,CAAM,OACN,IAAA,CAAM,CACJ,MAAOA,CAAAA,CAAK,IAAA,CACZ,GAAIA,CAAAA,CAAK,QAAA,EAAY,CAAE,QAAA,CAAUA,CAAAA,CAAK,QAAS,CAAA,CAC/C,GAAIA,EAAK,IAAA,EAAQ,CAAE,KAAMA,CAAAA,CAAK,IAAK,CACrC,CACF,CAAA,CAEEA,EAAK,GAAA,CACA,CACL,KAAM,MAAA,CACN,IAAA,CAAM,CACJ,GAAA,CAAKA,CAAAA,CAAK,IACV,GAAIA,CAAAA,CAAK,UAAY,CAAE,QAAA,CAAUA,EAAK,QAAS,CAAA,CAC/C,GAAIA,CAAAA,CAAK,IAAA,EAAQ,CAAE,IAAA,CAAMA,CAAAA,CAAK,IAAK,CACrC,CACF,EAEK,IAAA,CACT,QACE,OAAO,IACX,CACF,CAAC,CAAA,CACA,MAAA,CAAQA,GAAuBA,CAAAA,GAAS,IAAI,CACjD,CAEO,SAASiJ,GAAuB9B,CAAAA,CAA4C,CACjF,OAAI,OAAOA,CAAAA,EAAY,SACdA,CAAAA,CAEFA,CAAAA,CACJ,OAAQnH,CAAAA,EAA8BA,CAAAA,CAAK,OAAS,MAAM,CAAA,CAC1D,IAAKA,CAAAA,EAASA,CAAAA,CAAK,IAAI,CAAA,CACvB,IAAA,CAAK;AAAA,CAAI,CACd,CChEO,SAASkJ,EAAAA,CAA4BC,CAAAA,CAGb,CAC7B,OAAO,CACL,eAAA,CAAgBR,CAAAA,CAAM,CACpB,OAAOQ,EAAK,eAAA,CAAgBR,CAAI,CAClC,CAAA,CACA,mBAAA,CAAoBS,CAAAA,CAAmB,CACrC,OAAOD,EAAK,aAAA,CAAcC,CAAS,CACrC,CACF,CACF,CCSO,SAASC,EAAAA,CAA4B,CAC1C,eAAA,CAAAC,CAAAA,CACA,OAAA,CAAAC,CAAAA,CACA,iBAAA,CAAAC,CACF,CAAA,CAAgE,CAC9D,OAAON,EAAAA,CAA4B,CACjC,eAAA,CAAAI,CAAAA,CACA,aAAA,CAAcF,CAAAA,CAAwC,CACpD,OAAO,CACL,MAAM,WAAA,CAAY7D,CAAAA,CAAU5D,CAAAA,CAAS,CACnC,GAAM,CAAE,OAAAkB,CAAAA,CAAQ,MAAA,CAAA4G,CAAAA,CAAQ,MAAA,CAAAC,CAAAA,CAAQ,SAAA,CAAAC,CAAAA,CAAW,OAAA,CAAAC,EAAS,wBAAA,CAAAjE,CAAyB,CAAA,CAAIhE,CAAAA,CAC3EkI,CAAAA,CAAYtE,CAAAA,CAAS,IAAA,CAAM/F,CAAAA,EAAYA,CAAAA,CAAQ,IAAA,GAAS,QAAQ,CAAA,CAChEsK,CAAAA,CAAgBvE,CAAAA,CAAS,MAAA,CAAQ/F,CAAAA,EAAYA,EAAQ,IAAA,GAAS,QAAQ,CAAA,CACtEuK,CAAAA,CAAcD,CAAAA,CAAcA,CAAAA,CAAc,MAAA,CAAS,CAAC,EAEpDE,CAAAA,CAAQD,CAAAA,CACVf,EAAAA,CAAkBe,CAAAA,CAAY,OAAO,CAAA,CACrC,CAAC,CAAE,KAAM,MAAA,CAAiB,IAAA,CAAM,EAAG,CAAC,CAAA,CAElCE,CAAAA,CAAeJ,CAAAA,CAAYZ,EAAAA,CAAuBY,EAAU,OAAO,CAAA,CAAI,MAAA,CAEvEnJ,CAAAA,CAAuC,CAC3C,OAAA,CAAS,KAAA,CACT,EAAA,CAAIgH,GAAa,CACjB,MAAA,CAAQ,gBAAA,CACR,MAAA,CAAQ,CACN,OAAA,CAAS,CACP,SAAA,CAAA0B,EACA,IAAA,CAAM,SAAA,CACN,SAAA,CAAW1B,CAAAA,EAAa,CACxB,IAAA,CAAM,MAAA,CACN,KAAA,CAAAsC,EACA,GAAInH,CAAAA,CAAS,CAAE,MAAA,CAAAA,CAAO,CAAA,CAAI,EAAC,CAC3B,GAAIoH,CAAAA,CAAe,CAAE,QAAA,CAAU,CAAE,YAAA,CAAAA,CAAa,CAAE,EAAI,EACtD,CACF,CACF,CAAA,CAEA,MAAMT,CAAAA,CACJ9I,CAAAA,CACA,CAAE,MAAA,CAAAgJ,CAAAA,CAAQ,SAAA,CAAAC,CAAAA,CAAW,OAAA,CAAAC,CAAQ,CAAA,CAC7BH,CAAAA,CACA9D,CACF,EACF,CAAA,CAEA,UAAA,CAAW9C,CAAAA,CAAQ,CACjB,IAAMnC,CAAAA,CAA6B,CACjC,OAAA,CAAS,KAAA,CACT,EAAA,CAAIgH,CAAAA,EAAa,CACjB,MAAA,CAAQ,cAAA,CACR,MAAA,CAAQ,CAAE,EAAA,CAAI7E,CAAO,CACvB,CAAA,CACA,OAAO0G,CAAAA,CAAQ7I,CAAO,CACxB,EAEA,MAAM,UAAA,CAAWqG,CAAAA,CAAQ,EAAA,CAAIC,CAAAA,CAAe,CAC1C,GAAI,CAWF,IAAMhC,CAAAA,CAAAA,CAVgB,MAAMuE,CAAAA,CAAQ,CAClC,OAAA,CAAS,KAAA,CACT,MAAA,CAAQ,eAAA,CACR,EAAA,CAAI7B,CAAAA,EAAa,CACjB,MAAA,CAAQ,CACN,MAAA,CAAQ,CAAE,SAAA,CAAA0B,CAAU,CAAA,CACpB,KAAA,CAAArC,CAAAA,CACA,GAAIC,CAAAA,CAAO,CAAE,IAAA,CAAAA,CAAK,EAAI,EACxB,CACF,CAAC,CAAA,GACwB,IAAA,EAAM,MAAA,EAAU,GACnCzB,CAAAA,CAAWP,CAAAA,EAAQ,QAAA,EAAY,EAAC,CAChCkF,CAAAA,CAASlF,CAAAA,EAAQ,IAAA,EAAQ,GAE/B,OAAO,CACL,QAAA,CAAAO,CAAAA,CACA,IAAA,CAAM2E,CAAAA,CACN,OAAA,CAAS,CAAC,CAACA,CACb,CACF,CAAA,KAAQ,CACN,MACF,CACF,CAAA,CAEA,MAAM,iBAAkB,CACtB,GAAI,CACF,MAAMX,CAAAA,CAAQ,CACZ,OAAA,CAAS,KAAA,CACT,OAAQ,gBAAA,CACR,EAAA,CAAI7B,CAAAA,EAAa,CACjB,MAAA,CAAQ,CAAE,SAAA,CAAA0B,CAAU,CACtB,CAAC,EACH,CAAA,KAAQ,CAER,CACF,CAAA,CAEA,MAAM,cAAcvG,CAAAA,CAAQ,CAC1B,GAAI,CACF,IAAMnC,CAAAA,CAAU,CACd,OAAA,CAAS,MACT,EAAA,CAAIgH,CAAAA,EAAa,CACjB,MAAA,CAAQ,WAAA,CACR,MAAA,CAAQ7E,CAAAA,CAAS,CAAE,GAAIA,CAAO,CAAA,CAAI,CAAE,SAAA,CAAAuG,CAAU,CAChD,CAAA,CAEMrE,CAAAA,CAAAA,CADc,MAAMwE,CAAAA,CAAQ7I,CAAO,CAAA,GACpB,IAAA,EAAM,MAAA,CAC3B,OAAO,CACL,QAASqE,CAAAA,EAAM,MAAA,EAAQ,KAAA,GAAU,SAAA,CACjC,MAAA,CAAQA,CAAAA,EAAM,EAAA,CACd,KAAA,CAAOA,GAAM,KAAA,EAAO,OAAA,EAAW,EACjC,CACF,CAAA,MAAS7B,CAAAA,CAAO,CACd,OAAO,CACL,OAAA,CAAS,KAAA,CACT,KAAA,CAAQA,CAAAA,EAAe,OAAA,EAAW,EACpC,CACF,CACF,CACF,CACF,CACF,CAAC,CACH,CCtIO,SAASiH,EAAAA,CAAqBjH,CAAAA,CAAuB,CAC1D,GAAIA,CAAAA,YAAiB,KAAA,CACnB,OAAOA,CAAAA,CAGT,GAAIA,CAAAA,EAAS,OAAOA,CAAAA,EAAU,QAAA,CAAU,CACtC,IAAMC,EAAUD,CAAAA,CACV1D,CAAAA,CACH,OAAO2D,CAAAA,CAAQ,MAAA,EAAW,QAAA,EAAYA,CAAAA,CAAQ,MAAA,EAC9C,OAAOA,CAAAA,CAAQ,OAAA,EAAY,QAAA,EAAYA,CAAAA,CAAQ,OAAA,EAChD,IAAA,CAAK,SAAA,CAAUA,CAAO,EAClBiH,CAAAA,CAAa,IAAI,KAAA,CAAM5K,CAAO,CAAA,CACpC,OAAA,CAAI,OAAO2D,CAAAA,CAAQ,WAAc,QAAA,EAAY,OAAOA,CAAAA,CAAQ,SAAA,EAAc,QAAA,IACvEiH,CAAAA,CAAmB,SAAA,CAAYjH,CAAAA,CAAQ,YAEtC,OAAOA,CAAAA,CAAQ,KAAA,EAAU,QAAA,EAAY,OAAOA,CAAAA,CAAQ,KAAA,EAAU,QAAA,IAC/DiH,CAAAA,CAAmB,KAAA,CAAQjH,CAAAA,CAAQ,KAAA,CAAA,CAErCiH,CAAAA,CAAmB,GAAA,CAAMlH,CAAAA,CACnBkH,CACT,CAEA,OAAO,IAAI,KAAA,CAAM,MAAA,CAAOlH,CAAK,CAAC,CAChC,CAEO,SAASmH,EAAAA,EAA0B,CACxC,GAAI,OAAO,YAAA,CAAiB,GAAA,CAC1B,OAAO,IAAI,aAAa,SAAA,CAAW,YAAY,CAAA,CAEjD,IAAMnH,CAAAA,CAAQ,IAAI,KAAA,CAAM,SAAS,CAAA,CACjC,OAAAA,CAAAA,CAAM,IAAA,CAAO,YAAA,CACNA,CACT,CAEO,SAASoH,GAAkBxK,CAAAA,CAA0B,CAC1D,OAAOyK,8BAAAA,CAAa,CAClB,OAAA,CAAUC,CAAAA,EAAU,CAClB,GAAI,CACF1K,CAAAA,CAAS,SAAA,CAAU,IAAA,CAAK,KAAA,CAAM0K,CAAAA,CAAM,IAAI,CAAC,EAC3C,CAAA,MAAStH,CAAAA,CAAO,CACd,OAAA,CAAQ,KAAA,CAAM,6CAAA,CAA+CA,CAAAA,CAAOsH,CAAAA,CAAM,IAAI,EAChF,CACF,CACF,CAAC,CACH,CAEO,SAASC,GAAgBhB,CAAAA,CAAqCiB,CAAAA,CAAqB,CACxF,GAAKjB,CAAAA,CACL,CAAA,GAAIA,CAAAA,CAAO,OAAA,CAAS,CAClBiB,CAAAA,EAAQ,CACR,MACF,CACAjB,CAAAA,CAAO,gBAAA,CAAiB,OAAA,CAASiB,CAAO,GAC1C,CC5DA,eAAsBC,EAAAA,CACpBxC,CAAAA,CACApD,CAAAA,CACA6F,CAAAA,CACA9K,CAAAA,CACA2J,CAAAA,CACe,CACf,IAAMoB,CAAAA,CAAkC,CACtC,cAAA,CAAgB,kBAAA,CAChB,GAAGD,CACL,CAAA,CAEMvD,EAAW,MAAM,KAAA,CAAMc,CAAAA,CAAK,CAChC,MAAA,CAAQ,MAAA,CACR,OAAA,CAAA0C,CAAAA,CACA,YAAa,SAAA,CACb,IAAA,CAAM,IAAA,CAAK,SAAA,CAAU9F,CAAI,CAAA,CACzB,MAAA,CAAQ0E,CACV,CAAC,CAAA,CAED,GAAI,CAACpC,CAAAA,CAAS,EAAA,CACZ,MAAM,IAAI,KAAA,CAAM,CAAA,uBAAA,EAA0BA,CAAAA,CAAS,UAAA,EAAcA,CAAAA,CAAS,MAAM,CAAA,CAAE,CAAA,CAKpF,GAFAvH,EAAS,MAAA,IAAS,CAEd,CAACuH,CAAAA,CAAS,IAAA,CAAM,CAClBvH,CAAAA,CAAS,OAAA,KACT,MACF,CAEA,IAAMgL,CAAAA,CAASzD,CAAAA,CAAS,IAAA,CAAK,SAAA,EAAU,CACjC0D,EAAU,IAAI,WAAA,CACdC,CAAAA,CAASV,EAAAA,CAAkBxK,CAAQ,CAAA,CAEzC,GAAI,CACF,OAAa,CACX,GAAI2J,CAAAA,EAAQ,OAAA,CACV,MAAMY,EAAAA,EAAiB,CAEzB,GAAM,CAAE,IAAA,CAAAY,CAAAA,CAAM,KAAA,CAAAC,CAAM,CAAA,CAAI,MAAMJ,CAAAA,CAAO,MAAK,CAC1C,GAAIG,CAAAA,CACF,MAEFD,CAAAA,CAAO,IAAA,CAAKD,CAAAA,CAAQ,MAAA,CAAOG,EAAO,CAAE,MAAA,CAAQ,CAAA,CAAK,CAAC,CAAC,EACrD,CACF,CAAA,OAAE,CACApL,CAAAA,CAAS,OAAA,KACX,CACF,CC/CA,SAASqL,EAAAA,CACPD,CAAAA,CACAE,CAAAA,CACQ,CACR,GAAI,CAACF,CAAAA,CAAO,OAAO,EAAA,CACnB,IAAMG,CAAAA,CAASH,CAAAA,YAAiB,UAAA,CAAaA,CAAAA,CAAQ,IAAI,UAAA,CAAWA,CAAK,CAAA,CACzE,OAAIG,CAAAA,CAAO,MAAA,GAAW,CAAA,CAAU,EAAA,CACzBD,CAAAA,CAAY,MAAA,CAAOC,EAAQ,CAAE,MAAA,CAAQ,KAAM,CAAC,CACrD,CAEA,eAAsBC,EAAAA,CACpBnD,EACApD,CAAAA,CACA6F,CAAAA,CAAqC,EAAC,CACtC9K,CAAAA,CACA2J,CAAAA,CACe,CACf,OAAO,IAAI,OAAA,CAAc,CAAC8B,CAAAA,CAASC,CAAAA,GAAW,CAC5C,IAAIC,CAAAA,CAAc,IAAI,WAAW,CAAC,CAAA,CAC5BL,CAAAA,CAAc,IAAIM,mBAAAA,CAAuB,OAAA,CAAS,CAAE,KAAA,CAAO,KAAM,CAAC,CAAA,CACpEC,CAAAA,CAAW,KAAA,CACXC,CAAAA,CAAU,KAAA,CACVC,CAAAA,CAAS,MACPb,CAAAA,CAASV,EAAAA,CAAkBxK,CAAQ,CAAA,CAEnCgM,CAAAA,CAAU5I,CAAAA,EAAoB,CAClC,GAAI,CAAA0I,CAAAA,CAEJ,CAAA,GADAA,CAAAA,CAAU,IAAA,CACN1I,CAAAA,CAAO,CACTsI,CAAAA,CAAOrB,EAAAA,CAAqBjH,CAAK,CAAC,CAAA,CAClC,MACF,CACApD,CAAAA,CAAS,OAAA,IAAU,CACnByL,CAAAA,GAAQ,CACV,CAAA,CAEMQ,CAAAA,CAAW,IAAM,CACjBF,CAAAA,GACJA,CAAAA,CAAS,IAAA,CACT/L,EAAS,MAAA,IAAS,EACpB,CAAA,CAEMkM,CAAAA,CAAY5G,CAAAA,EAAiB,CAC5BA,CAAAA,GACL2G,CAAAA,GACAf,CAAAA,CAAO,IAAA,CAAK5F,CAAI,CAAA,EAClB,CAAA,CAEM6G,CAAAA,CAAiB5E,CAAAA,EAAkB,CACvC,GAAI,EAAAuE,CAAAA,EAAW,CAACvE,CAAAA,CAAS,IAAA,CAAA,CAEzB,GAAI,CACFsE,CAAAA,CAAW,CAAA,CAAA,CACX,IAAMtL,CAAAA,CAAW,IAAI,UAAA,CAAWgH,CAAAA,CAAS,IAAmB,CAAA,CACtD6E,EAAS,IAAI,UAAA,CAAWT,CAAAA,CAAY,MAAA,CAASpL,CAAAA,CAAS,MAAM,CAAA,CAClE6L,CAAAA,CAAO,IAAIT,CAAW,CAAA,CACtBS,CAAAA,CAAO,GAAA,CAAI7L,CAAAA,CAAUoL,CAAAA,CAAY,MAAM,CAAA,CACvCA,EAAcS,CAAAA,CAEd,IAAIC,CAAAA,CAAe,CAAA,CACnB,KAAOA,CAAAA,CAAeV,CAAAA,CAAY,MAAA,EAAQ,CACxC,IAAMW,CAAAA,CAAYX,CAAAA,CAAY,QAAA,CAASU,CAAY,CAAA,CAC7CE,CAAAA,CAAUjB,CAAAA,CAAY,OAAOgB,CAAAA,CAAW,CAAE,MAAA,CAAQ,CAAA,CAAM,CAAC,CAAA,CAE/D,GAAIC,CAAAA,CAAQ,SAAW,CAAA,CACrB,MAGF,GAAIA,CAAAA,CAAQ,QAAA,CAAS,QAAG,CAAA,CAAG,CACzB,IAAMC,CAAAA,CAAgBD,CAAAA,CAAQ,WAAA,CAAY,QAAG,CAAA,GAAM,CAAA,CAAI,CAAA,CAAIA,CAAAA,CAAQ,OAAA,CAAQ,QAAG,CAAA,CAC9E,GAAIC,CAAAA,EAAiB,CAAA,CACnB,MAGF,IAAMC,EAAWF,CAAAA,CAAQ,KAAA,CAAM,CAAA,CAAGC,CAAa,CAAA,CAC3CC,CAAAA,EACFP,CAAAA,CAASO,CAAQ,EAGnB,IAAMC,CAAAA,CAAc,IAAI,WAAA,EAAY,CAAE,MAAA,CAAOD,CAAQ,CAAA,CACrDJ,GAAgBK,CAAAA,CAAY,MAAA,CAC5B,KACF,CAEAR,CAAAA,CAASK,CAAO,CAAA,CAChBF,CAAAA,EAAgBC,CAAAA,CAAU,OAC5B,CAEAX,CAAAA,CAAcA,CAAAA,CAAY,QAAA,CAASU,CAAY,EACjD,OAASjJ,CAAAA,CAAO,CACd,OAAA,CAAQ,KAAA,CAAM,oCAAA,CAAsCA,CAAK,EAC3D,CACF,EAEMuJ,CAAAA,CAAmBpF,CAAAA,EAAkB,CACzC0E,CAAAA,EAAS,CACL1E,CAAAA,CAAS,MAAA,GAAS,cAAc,GAAG,QAAA,CAAS,mBAAmB,CAAA,GAAM,KAAA,EACvE,OAAA,CAAQ,IAAA,CAAK,6CAA6C,EAE9D,CAAA,CAEMqF,CAAAA,CAAUpG,gCAAAA,EAAsB,CACtC,GAAI,CAACoG,CAAAA,CAAS,CACZlB,EAAO,IAAI,KAAA,CAAM,oCAAoC,CAAC,CAAA,CACtD,MACF,CAEA,GAAI,CACF,IAAMmB,CAAAA,CAAcD,CAAAA,CAAQ,CAC1B,GAAA,CAAAvE,CAAAA,CACA,MAAA,CAAQ,MAAA,CACR,OAAQ,CACN,cAAA,CAAgB,kBAAA,CAChB,MAAA,CAAQ,mBAAA,CACR,GAAGyC,CACL,CAAA,CACA,KAAM,OAAO7F,CAAAA,EAAS,QAAA,CAAWA,CAAAA,CAAO,IAAA,CAAK,SAAA,CAAUA,CAAI,CAAA,CAC3D,aAAc,aAAA,CACd,GAAGxD,EAAAA,EAAuB,CAAI,CAC5B,aAAA,CAAe,CAAA,CACjB,CAAA,CAAI,EAAC,CACL,OAAA,CAAU8F,CAAAA,EAAkB,CAC1B,GAAI,CAACsE,CAAAA,EAAYtE,CAAAA,EAAU,KAAM,CAC/B,IAAMuF,CAAAA,CAAgBzB,EAAAA,CAA6B9D,CAAAA,CAAS,IAAA,CAAM+D,CAAW,CAAA,CAC7EY,CAAAA,CAASY,CAAa,EACxB,CACA,GAAInB,CAAAA,CAAY,MAAA,CAAS,CAAA,CAAG,CAC1B,IAAMoB,CAAAA,CAAYzB,CAAAA,CAAY,MAAA,CAAOK,CAAAA,CAAa,CAAE,MAAA,CAAQ,CAAA,CAAK,CAAC,CAAA,CAClEO,CAAAA,CAASa,CAAS,EACpB,CACAf,CAAAA,GACF,CAAA,CACA,KAAO5I,CAAAA,EAAe,CACpB4I,CAAAA,CAAO5I,CAAK,EACd,CACF,CAAC,CAAA,CAEDuH,EAAAA,CAAgBhB,CAAAA,CAAQ,IAAM,CAC5BkD,CAAAA,CAAY,KAAA,IAAQ,CACpBb,CAAAA,CAAOzB,IAAkB,EAC3B,CAAC,CAAA,CAEDsC,CAAAA,CAAY,eAAA,GAAkBV,CAAa,CAAA,CAC3CU,EAAY,iBAAA,GAAoBF,CAAe,EACjD,CAAA,MAASvJ,CAAAA,CAAO,CACd4I,CAAAA,CAAO5I,CAAK,EACd,CACF,CAAC,CACH,CCjJA,eAAsB4J,EAAAA,CACpB3E,CAAAA,CACApD,CAAAA,CACAgI,CAAAA,CACAjN,CAAAA,CACA2J,CAAAA,CACA9D,CAAAA,CAA2B,KAAA,CACZ,CACf,IAAMqH,CAAAA,CAAQD,KAAiB,CACzBnC,CAAAA,CAAqCoC,CAAAA,CAAQ,CAAE,aAAA,CAAe,CAAA,OAAA,EAAUA,CAAK,CAAA,CAAG,EAAI,EAAC,CACrFN,CAAAA,CAAUpG,gCAAAA,EAAsB,CAChC2G,CAAAA,CAA0B7L,EAAAA,EAAqB,EAAK,CAAC,CAACsL,CAAAA,CAE5D,GAAI/G,CAAAA,EAA4BsH,CAAAA,CAAyB,CACvD,MAAM3B,EAAAA,CAAuBnD,EAAKpD,CAAAA,CAAM6F,CAAAA,CAAY9K,CAAAA,CAAU2J,CAAM,CAAA,CACpE,MACF,CAQA,GAAIwD,EAAyB,CAC3B,MAAM3B,EAAAA,CAAuBnD,CAAAA,CAAKpD,CAAAA,CAAM6F,CAAAA,CAAY9K,CAAAA,CAAU2J,CAAM,EACpE,MACF,CAEA,MAAMkB,EAAAA,CAAmBxC,CAAAA,CAAKpD,CAAAA,CAAM6F,CAAAA,CAAY9K,CAAAA,CAAU2J,CAAM,EAClE,CClBO,SAASyD,EAAAA,CACdC,CAAAA,CACAC,CAAAA,CACAL,CAAAA,CACArE,CAAAA,CACe,CACf,IAAI2E,CAAAA,CAAa,EAAA,CACjB,GAAI,CACFA,CAAAA,CACE,OAAA,CAAQ,IAAI,qBAAA,EACZ,OAAA,CAAQ,GAAA,CAAI,iBAAA,EACZ,OAAA,CAAQ,GAAA,CAAI,YAAA,EACZ,GACJ,MAAQ,CAER,CAEAA,CAAAA,CAAa,MAAA,CAAOA,CAAAA,EAAc,EAAE,CAAA,CAAE,IAAA,GACtC,IAAMlF,CAAAA,CAAM,CAAA,EAAGiF,CAAAA,EAAWC,CAAU,CAAA,mCAAA,CAAA,CAE9B9D,CAAAA,CAAcxE,CAAAA,EAClBoI,CAAAA,CAAK,OAAA,CAAW,CACd,GAAA,CAAAhF,CAAAA,CACA,MAAA,CAAQ,MAAA,CACR,IAAA,CAAApD,CACF,CAAC,CAAA,CAEGuE,CAAAA,CAAkBb,EAAAA,CAAuBN,CAAAA,CAAKO,CAAU,CAAA,CAE9D,eAAec,EACb9I,CAAAA,CACAZ,CAAAA,CACA2J,CAAAA,CACA9D,CAAAA,CACe,CACf,GAAI,CACF,MAAMmH,GACJ3E,CAAAA,CACAzH,CAAAA,CACAqM,CAAAA,CACAjN,CAAAA,CACA2J,CAAAA,CACA9D,CACF,EACF,CAAA,MAASzC,CAAAA,CAAO,CACd,GAAIuG,CAAAA,EAAQ,OAAA,CACV,OAEF,MAAMvG,CACR,CACF,CAEA,IAAM7B,CAAAA,CAAsCgI,EAAAA,CAA4B,CACtE,eAAA,CAAAC,CAAAA,CACA,OAAA,CAAAC,EACA,iBAAA,CAAAC,CACF,CAAC,CAAA,CAED,OAAO,CACL,4BAAA,CAA6B7H,CAAAA,CAAS,CACpC,OAAOF,EAAAA,CAA6BJ,CAAAA,CAASM,CAAO,CACtD,CACF,CACF,CCIA,IAAM2L,EAAAA,CAAuB,cAAA,CACvBC,EAAAA,CAA4B,aAAA,CAGlC,IAAMC,EAAAA,CACJ9N,CAAAA,EACG,CACH,GAAI,CAACA,CAAAA,CACH,OAAO,IAAA,CAGT,IAAA,IAAS4H,CAAAA,CAAe5H,CAAAA,CAAa,QAAA,CAAS,OAAS,CAAA,CAAG4H,CAAAA,EAAgB,CAAA,CAAGA,CAAAA,EAAgB,CAAA,CAAG,CAC9F,IAAM9H,CAAAA,CAAUE,EAAa,QAAA,CAAS4H,CAAY,CAAA,CAElD,GAAK9H,CAAAA,EAKHA,CAAAA,CAAQ,IAAA,GAAS,WAAA,GAChBA,CAAAA,CAAQ,IAAA,GAAS,cAAA,EAAkBA,CAAAA,CAAQ,IAAA,GAAS,SAAA,CAAA,EACrDA,CAAAA,CAAQ,OAAA,EAAS,MAAK,CAEtB,OAAOA,CAEX,CAEA,OAAO,IACT,CAAA,CAEMiO,EAAAA,CACJ/N,GACG,CACH,GAAI,CAACA,CAAAA,CACH,OAAO,IAAA,CAGT,IAAA,IAAS4H,CAAAA,CAAe5H,EAAa,QAAA,CAAS,MAAA,CAAS,CAAA,CAAG4H,CAAAA,EAAgB,CAAA,CAAGA,CAAAA,EAAgB,CAAA,CAAG,CAC9F,IAAM9H,CAAAA,CAAUE,CAAAA,CAAa,QAAA,CAAS4H,CAAY,CAAA,CAElD,GAAK9H,CAAAA,EAIDA,EAAQ,IAAA,GAAS,MAAA,EAAUA,CAAAA,CAAQ,SAAA,CACrC,OAAOA,CAAAA,CAAQ,SAEnB,CAEA,OAAO,IACT,CAAA,CAEMkO,EAAAA,CAAyC,CAC7ChO,CAAAA,CACAiO,CAAAA,GACG,CACH,GAAI,CAACjO,CAAAA,CACH,OAAO,IAAA,CAGT,GAAI,CAACiO,CAAAA,CACH,OAAOH,EAAAA,CAA8C9N,CAAY,CAAA,CAGnE,IAAMkO,CAAAA,CAAYlO,CAAAA,CAAa,QAAA,CAAS,SAAA,CACrCF,CAAAA,EAAYA,EAAQ,SAAA,GAAcmO,CACrC,CAAA,CAEA,GAAIC,CAAAA,CAAY,CAAA,CACd,OAAOJ,EAAAA,CAA8C9N,CAAY,CAAA,CAGnE,IAAA,IAAS4H,CAAAA,CAAe5H,CAAAA,CAAa,QAAA,CAAS,MAAA,CAAS,CAAA,CAAG4H,CAAAA,CAAesG,EAAWtG,CAAAA,EAAgB,CAAA,CAAG,CACrG,IAAM9H,CAAAA,CAAUE,CAAAA,CAAa,QAAA,CAAS4H,CAAY,EAElD,GAAK9H,CAAAA,EAKHA,CAAAA,CAAQ,IAAA,GAAS,WAAA,GAChBA,CAAAA,CAAQ,IAAA,GAAS,cAAA,EAAkBA,EAAQ,IAAA,GAAS,SAAA,CAAA,EACrDA,CAAAA,CAAQ,OAAA,EAAS,IAAA,EAAK,CAEtB,OAAOA,CAEX,CAEA,OAAO,IACT,CAAA,CAEMqO,EAAAA,CAAyBC,CAAAA,EAAgD,CAC7E,IAAA,IAASC,CAAAA,CAAQD,EAAc,MAAA,CAAS,CAAA,CAAGC,CAAAA,EAAS,CAAA,CAAGA,CAAAA,EAAS,CAAA,CAAG,CACjE,IAAMrO,CAAAA,CAAeoO,CAAAA,CAAcC,CAAK,CAAA,CAExC,GAAKrO,CAAAA,GAKHA,CAAAA,CAAa,YAAA,GAAiB,cAC9BA,CAAAA,CAAa,YAAA,GAAiB,WAAA,EAC9BA,CAAAA,CAAa,YAAA,GAAiB,YAAA,EAC9BA,CAAAA,CAAa,MAAA,GAAW,aACxBA,CAAAA,CAAa,MAAA,GAAW,SAAA,CAAA,CAExB,OAAOA,CAEX,CAEA,OAAO,IACT,EAEMsO,EAAAA,CAA0B,CAC9BF,CAAAA,CACAjL,CAAAA,GAEKA,CAAAA,EAIEiL,CAAAA,CAAc,IAAA,CAAMpO,CAAAA,EAAiBA,CAAAA,CAAa,MAAA,GAAWmD,CAAM,CAAA,EAAK,IAAA,CAG3EoL,EAAAA,CAAwB,CAAC5C,CAAAA,CAAgBpG,IAAmB,CAChE,IAAMiJ,CAAAA,CAAgB7C,CAAAA,CAAO,SAAA,EAAU,CAEvC,GAAI,CAAC6C,EACH,OAAO,CACL,QAAA,CAAU,EAAC,CACX,SAAA,CAAW,EACb,CAAA,CAGF,GAAIjJ,CAAAA,CACF,OAAO,CACL,QAAA,CAAU,CAACiJ,CAAa,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CACxC,SAAA,CAAW,EACb,CAAA,CAGF,IAAMC,CAAAA,CAAqB,GACvBC,CAAAA,CAAY,CAAA,CAEhB,IAAA,IAASL,CAAAA,CAAQ,CAAA,CAAGA,CAAAA,CAAQG,CAAAA,CAAc,MAAA,CAAQH,GAAS,CAAA,CAAG,CAC5D,IAAMnG,CAAAA,CAAOsG,CAAAA,CAAcH,CAAK,CAAA,CAMhC,GAJI,CAACnG,CAAAA,EAID,CAAC0F,EAAAA,CAAqB,IAAA,CAAK1F,CAAI,CAAA,CACjC,SAGF,IAAMyG,EAAUH,CAAAA,CAAc,KAAA,CAAME,CAAAA,CAAWL,CAAAA,CAAQ,CAAC,CAAA,CAAE,IAAA,EAAK,CAC3DM,GACFF,CAAAA,CAAS,IAAA,CAAKE,CAAO,CAAA,CAEvBD,CAAAA,CAAYL,CAAAA,CAAQ,EACtB,CAEA,IAAIO,CAAAA,CAAYJ,CAAAA,CAAc,KAAA,CAAME,CAAS,CAAA,CAAE,SAAA,EAAU,CAEzD,OAAIE,EAAU,MAAA,EAAU,EAAA,EAA4Bf,EAAAA,CAA0B,IAAA,CAAKe,CAAS,CAAA,GAC1FH,CAAAA,CAAS,IAAA,CAAKG,CAAAA,CAAU,IAAA,EAAM,CAAA,CAC9BA,CAAAA,CAAY,EAAA,CAAA,CAGP,CACL,QAAA,CAAAH,EACA,SAAA,CAAAG,CACF,CACF,CAAA,CAEO,SAASC,EAAAA,CACd5M,CAAAA,CAC0B,CAC1B,GAAM,CACJ,MAAA,CAAA4B,CAAAA,CACA,MAAA,CAAAiL,CAAAA,CACA,OAAA,CAAAC,CAAAA,CACA,iBAAA,CAAAC,EACA,YAAA,CAAAC,CAAAA,CAAe,IAAA,CACf,EAAA,CAAA9O,CAAAA,CAAK,kBAAA,CACL,WAAA,CAAA+O,CAAAA,CAAc,KAAA,CACd,UAAA,CAAAC,CAAAA,CAAa,IAAA,CACb,cAAA,CAAAC,CACF,CAAA,CAAInN,CAAAA,CAEAW,EAAY,KAAA,CACZyM,CAAAA,CAAUL,CAAAA,CAAoBD,CAAAA,EAAS,OAAA,CAAQC,CAAiB,CAAA,GAAM,MAAA,CAAS,MAC/EM,CAAAA,CAAczL,CAAAA,CAAO,WAAA,EAAY,CAAE,SAAA,CACnC0L,CAAAA,CAA8B,IAAA,CAC9BC,CAAAA,CAAqC,KACrCC,CAAAA,CAAkC,IAAA,CAClCC,CAAAA,CAAgB,KAAA,CAChBC,CAAAA,CAAiC,IAAA,CACjCC,CAAAA,CAAe,EAAA,CACfC,CAAAA,CAAc,EAAA,CACdC,CAAAA,CAAmB,OAAA,CAAQ,OAAA,EAAQ,CACnCC,CAAAA,CAAQjB,CAAAA,CAAO,YAAW,EAAKG,CAAAA,CAC/BhM,CAAAA,CAAmC,CACrC,OAAA,CAAAoM,CAAAA,CACA,MAAA,CAAQP,CAAAA,CAAO,aAAY,CAAE,MAAA,CAC7B,UAAA,CAAYA,CAAAA,CAAO,WAAA,EAAY,CAAE,MAAA,GAAW,YAAA,CAC5C,SAAUA,CAAAA,CAAO,WAAA,EAAY,CAAE,MAAA,GAAW,UAAA,CAC1C,KAAA,CAAAiB,CAAAA,CACA,YAAA,CAAAR,EACA,gBAAA,CAAAE,CAAAA,CACA,KAAA,CAAOX,CAAAA,CAAO,WAAA,EAAY,CAAE,KAAA,EAAS,IACvC,EAEMxM,CAAAA,CAAY,IAAI,GAAA,CAEhB0N,CAAAA,CAAe,IAAM,CACzB,IAAMC,CAAAA,CAAiBnB,EAAO,WAAA,EAAY,CACpCoB,CAAAA,CAAuC,CAC3C,OAAA,CAAAb,CAAAA,CACA,MAAA,CAAQY,CAAAA,CAAe,OACvB,UAAA,CAAYA,CAAAA,CAAe,MAAA,GAAW,YAAA,CACtC,QAAA,CAAUA,CAAAA,CAAe,MAAA,GAAW,UAAA,CACpC,KAAA,CAAAF,CAAAA,CACA,YAAA,CAAAR,CAAAA,CACA,gBAAA,CAAAE,CAAAA,CACA,KAAA,CAAOQ,CAAAA,CAAe,OAAS,IACjC,CAAA,CAEME,CAAAA,CACJlN,CAAAA,CAAS,OAAA,GAAYiN,CAAAA,CAAa,OAAA,EAClCjN,CAAAA,CAAS,SAAWiN,CAAAA,CAAa,MAAA,EACjCjN,CAAAA,CAAS,UAAA,GAAeiN,CAAAA,CAAa,UAAA,EACrCjN,CAAAA,CAAS,QAAA,GAAaiN,EAAa,QAAA,EACnCjN,CAAAA,CAAS,KAAA,GAAUiN,CAAAA,CAAa,KAAA,EAChCjN,CAAAA,CAAS,YAAA,GAAiBiN,CAAAA,CAAa,YAAA,EACvCjN,CAAAA,CAAS,gBAAA,GAAqBiN,CAAAA,CAAa,gBAAA,EAC3CjN,CAAAA,CAAS,KAAA,GAAUiN,CAAAA,CAAa,MAElC,OAAIC,CAAAA,GACFlN,CAAAA,CAAWiN,CAAAA,CAAAA,CAGNC,CACT,CAAA,CAEMnN,CAAAA,CAAO,IAAM,CACbJ,CAAAA,GAIJoN,CAAAA,EAAa,CACb1N,CAAAA,CAAU,OAAA,CAAS7C,CAAAA,EAAaA,CAAAA,EAAU,GAC5C,CAAA,CAEM2Q,CAAAA,CAAiB,IAAM,CACvBpB,CAAAA,EACFD,CAAAA,EAAS,OAAA,CAAQC,CAAAA,CAAmBK,CAAAA,CAAU,MAAA,CAAS,OAAO,EAElE,CAAA,CAEMgB,CAAAA,CAAsB,CAACtL,CAAAA,CAA2B,OAAS,CAC/D4K,CAAAA,CAAkB5K,CAAAA,CAClB6K,CAAAA,CAAe,EAAA,CACfC,CAAAA,CAAc,EAAA,CACdH,CAAAA,CAAgB,MAClB,CAAA,CAEMY,CAAAA,CAA0B,IAAM,CACpCf,CAAAA,CAAe,IAAA,CACfC,CAAAA,CAAsB,KACxB,EAEMe,CAAAA,CAAiBxM,CAAAA,EAA+C,CACpE,IAAMyM,CAAAA,CAAuBzM,CAAAA,EAAO,oBAAA,EAAwB,KAAA,CAE5D6L,EAAe,EAAA,CACfC,CAAAA,CAAc,EAAA,CACdF,CAAAA,CAAkB,IAAA,CAClBD,CAAAA,CAAgB,KAAA,CAEXc,CAAAA,EACHF,GAAwB,CAG1BxB,CAAAA,CAAO,IAAA,GACT,CAAA,CAEM2B,CAAAA,CAAoBC,CAAAA,GACxBZ,CAAAA,CAAmBA,EAAiB,IAAA,CAClC,IAAMY,CAAAA,EAAU,CAChB,IAAMA,CAAAA,EACR,CAAA,CAEOZ,GAGHa,EAAAA,CAAmB,MAAOlC,CAAAA,EAAuB,CACrD,GAAI,EAAA,CAACA,CAAAA,CAAS,MAAA,EAAU7L,CAAAA,CAAAA,CAIxB,CAAK8M,CAAAA,GACH,MAAMZ,CAAAA,CAAO,WAAA,CAAY,CACvB,EAAA,CAAA3O,EACA,KAAA,CAAA4P,CAAAA,CACA,WAAA,CAAAb,CAAAA,CACA,UAAA,CAAAC,CACF,CAAC,CAAA,CACDO,EAAgB,IAAA,CAAA,CAGlB,IAAA,IAAWf,CAAAA,IAAWF,CAAAA,CAAU,CAC9B,GAAI7L,CAAAA,CACF,OAGF,IAAMgO,CAAAA,CAAWxB,CAAAA,CAAiBA,CAAAA,CAAeT,CAAO,CAAA,CAAIA,CAAAA,CACvDiC,CAAAA,CAAS,IAAA,EAAK,GAInB,MAAM9B,CAAAA,CAAO,UAAA,CAAW,CACtB,EAAA,CAAA3O,CAAAA,CACA,IAAA,CAAMyQ,CACR,CAAC,CAAA,CACD9B,CAAAA,CAAO,MAAA,EAAO,EAChB,CAAA,CACF,CAAA,CAEM+B,CAAAA,CAAuB,MAC3B/Q,CAAAA,CACAyF,CAAAA,GACG,CACH,IAAMR,CAAAA,CAAYjF,CAAAA,CAAQ,SAAA,EAAa,IAAA,CACjCgR,EAAWhR,CAAAA,CAAQ,OAAA,EAAW,EAAA,CAEpC,GAAI,CAACgR,CAAAA,CAAS,IAAA,EAAK,CACjB,OAGEnB,CAAAA,GAAoB5K,CAAAA,EACtBsL,CAAAA,CAAoBtL,CAAS,CAAA,CAG/B,IAAMgM,CAAAA,CAAenB,EAErB,GAAImB,CAAAA,EAAgB,CAACD,CAAAA,CAAS,UAAA,CAAWC,CAAY,CAAA,CAAG,CACtDnB,EAAekB,CAAAA,CACf,MACF,CAEA,IAAME,CAAAA,CAAQF,CAAAA,CAAS,KAAA,CAAMC,CAAAA,CAAa,MAAM,CAAA,CAGhD,GAFAnB,CAAAA,CAAekB,CAAAA,CAEX,CAACE,CAAAA,EAAS,CAACzL,CAAAA,CACb,OAGFsK,CAAAA,EAAemB,CAAAA,CACf,GAAM,CAAE,QAAA,CAAAvC,CAAAA,CAAU,SAAA,CAAAG,CAAU,EAAIL,EAAAA,CAAsBsB,CAAAA,CAAatK,CAAK,CAAA,CACxEsK,CAAAA,CAAcjB,CAAAA,CAEVH,CAAAA,CAAS,MAAA,EACX,MAAMkC,EAAAA,CAAiBlC,CAAQ,CAAA,CAG7BlJ,CAAAA,EACFuJ,CAAAA,CAAO,MAAA,GAEX,CAAA,CAEMmC,GAAqB,IAAM,CAC/B,GAAIrO,CAAAA,CACF,OAGF,IAAMK,CAAAA,CAAWY,CAAAA,CAAO,WAAA,EAAY,CAEpC,GAAI,CAACwL,CAAAA,CAAS,CACZC,CAAAA,CAAcrM,CAAAA,CAAS,UACvB,MACF,CAEA,IAAMiO,CAAAA,CAAqB/C,EAAAA,CAAsBlL,CAAAA,CAAS,aAAa,CAAA,CACjEkO,EAAa7B,CAAAA,CAEnB,GAAIrM,CAAAA,CAAS,SAAA,EAAaiO,CAAAA,CAAoB,CAO5C,GANIA,CAAAA,CAAmB,SAAW3B,CAAAA,GAChCA,CAAAA,CAAe2B,CAAAA,CAAmB,MAAA,CAClC1B,CAAAA,CAAsBzB,EAAAA,CAAuCmD,CAAkB,CAAA,CAC/EzB,CAAAA,CAAmB,IAAA,CAAA,CAGjBA,CAAAA,GAAqByB,CAAAA,CAAmB,MAAA,CAAQ,CAClD5B,CAAAA,CAAcrM,CAAAA,CAAS,UACvBD,CAAAA,EAAK,CACL,MACF,CAEA,IAAMoO,CAAAA,CAAgBpD,EAAAA,CACpBkD,CAAAA,CACA1B,CACF,CAAA,CAEI4B,CAAAA,EACGX,CAAAA,CAAiB,IAAMI,CAAAA,CAAqBO,CAAAA,CAAe,KAAK,CAAC,EAE1E,CAAA,KAAA,GAAWD,CAAAA,EAAc,CAAClO,CAAAA,CAAS,SAAA,CAAW,CAC5C,IAAMoO,CAAAA,CAAuB/C,EAAAA,CAC3BrL,CAAAA,CAAS,aAAA,CACTsM,CACF,CAAA,CAEA,GAAI8B,CAAAA,EAAwB5B,CAAAA,GAAqB4B,EAAqB,MAAA,CAAQ,CAC5E,IAAMD,CAAAA,CAAgBpD,EAAAA,CACpBqD,CAAAA,CACA7B,CACF,CAAA,CAEI4B,GACGX,CAAAA,CAAiB,IAAMI,CAAAA,CAAqBO,CAAAA,CAAe,IAAI,CAAC,EAEzE,CAEIC,GAAsB,MAAA,GAAW5B,CAAAA,GACnCA,CAAAA,CAAmB,IAAA,CAAA,CAErBa,CAAAA,GACF,CAEAhB,CAAAA,CAAcrM,EAAS,SAAA,CACvBD,CAAAA,GACF,CAAA,CAEMsO,EAAAA,CAAoBzN,CAAAA,CAAO,SAAA,CAAUoN,EAAkB,EACvDM,EAAAA,CAAoBzC,CAAAA,CAAO,SAAA,CAAU,IAAM,CAC/C,GAAIlM,CAAAA,CACF,OAGF,IAAM4O,CAAAA,CAAY1C,CAAAA,CAAO,QAAA,IAAW,EAAKiB,CAAAA,EAASd,CAAAA,CAC9CuC,CAAAA,GAAczB,CAAAA,GAChBA,EAAQyB,CAAAA,CAAAA,CAGVxO,CAAAA,GACF,CAAC,CAAA,CAEKyO,CAAAA,CAAuC,CAC3C,SAAA,CAAUhS,CAAAA,CAAU,CAClB,OAAA6C,CAAAA,CAAU,GAAA,CAAI7C,CAAQ,CAAA,CACf,IAAM,CACX6C,CAAAA,CAAU,MAAA,CAAO7C,CAAQ,EAC3B,CACF,CAAA,CACA,WAAA,EAAc,CACZ,OAAAuQ,CAAAA,EAAa,CACN/M,CACT,CAAA,CACA,UAAA,CAAWyO,CAAAA,CAAa,CAClBrC,CAAAA,GAAYqC,IAIhBrC,CAAAA,CAAUqC,CAAAA,CACVtB,CAAAA,EAAe,CAEVf,CAAAA,EAIHC,CAAAA,CAAczL,CAAAA,CAAO,WAAA,EAAY,CAAE,SAAA,CACnCoN,EAAAA,EAAmB,GAJnBV,CAAAA,EAAc,CACdd,CAAAA,CAAmB,IAAA,CAAA,CAMrBzM,GAAK,EACP,CAAA,CACA,aAAA,EAAgB,CACdyO,CAAAA,CAAW,UAAA,CAAW,CAACpC,CAAO,EAChC,CAAA,CACA,mBAAA,EAAsB,CACpB,IAAM7O,CAAAA,CAASsO,CAAAA,CAAO,WAAA,EAAY,CAAE,OAEpC,GAAItO,CAAAA,GAAW,YAAA,EAAgBA,CAAAA,GAAW,UAAA,CAAY,CACpDiP,CAAAA,CAAmBF,CAAAA,CACnBgB,CAAAA,CAAc,CAAE,oBAAA,CAAsB,IAAK,CAAC,CAAA,CAC5CvN,CAAAA,EAAK,CACL,MACF,CAEAyO,CAAAA,CAAW,aAAA,GACb,CAAA,CACA,IAAA,EAAO,CACLhC,CAAAA,CAAmBF,EACnBgB,CAAAA,CAAc,CAAE,oBAAA,CAAsB,IAAK,CAAC,CAAA,CAC5CvN,CAAAA,GACF,EACA,QAAA,CAASwO,CAAAA,CAAW,CAClBzB,CAAAA,CAAQyB,CAAAA,CACR1C,CAAAA,CAAO,QAAA,GAAW0C,CAAS,EAC3BxO,CAAAA,GACF,CAAA,CACA,QAAA,EAAW,CACT,OAAO+M,CACT,CAAA,CACA,SAAU,CACJnN,CAAAA,GAIJA,CAAAA,CAAY,IAAA,CACZ2N,CAAAA,EAAc,CACdd,CAAAA,CAAmB,IAAA,CACnB6B,IAAkB,CAClBC,EAAAA,EAAkB,CAClBjP,CAAAA,CAAU,KAAA,EAAM,EAClB,CACF,CAAA,CAEA,OAAOmP,CACT","file":"index.cjs","sourcesContent":["import type {\n Conversation,\n ConversationControllerSnapshot,\n HistoryState,\n MessagesItem,\n} from \"../types\";\n\nexport type InternalState = {\n byId: Record<string, Conversation>;\n order: string[];\n starting: boolean;\n isLoading: boolean;\n isLoadingHistory: boolean;\n historyState: HistoryState;\n};\n\nexport class SimpleAbortController {\n aborted = false;\n private listeners: Array<() => void> = [];\n\n signal = {\n aborted: false,\n addEventListener: (_event: \"abort\", listener: () => void) => {\n this.listeners.push(listener);\n },\n };\n\n abort() {\n if (this.aborted) return;\n this.aborted = true;\n this.signal.aborted = true;\n this.listeners.forEach((listener) => listener());\n }\n}\n\nexport function createAbortController(): AbortController | SimpleAbortController {\n if (typeof AbortController !== \"undefined\") {\n return new AbortController();\n }\n return new SimpleAbortController();\n}\n\nexport function nowIso() {\n return new Date().toISOString();\n}\n\nexport function generateId() {\n return `msg-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;\n}\n\nexport function cloneMessage<T extends MessagesItem>(message: T): T {\n return { ...message } as T;\n}\n\nexport function cloneConversation(conversation: Conversation): Conversation {\n return {\n ...conversation,\n system: conversation.system ? { ...conversation.system } : undefined,\n runtimeError: conversation.runtimeError ? { ...conversation.runtimeError } : undefined,\n messages: conversation.messages.map((message) => cloneMessage(message)),\n };\n}\n\nexport function createSnapshot(state: InternalState): ConversationControllerSnapshot {\n return {\n starting: state.starting,\n isLoading: state.isLoading,\n isLoadingHistory: state.isLoadingHistory,\n historyState: { ...state.historyState },\n conversations: state.order\n .map((id) => state.byId[id])\n .filter((conversation): conversation is Conversation => Boolean(conversation))\n .map((conversation) => cloneConversation(conversation)),\n };\n}\n","import type { Conversation, ErrorMessage, MessagesItem, Role, TextMessage, ThoughtMessage, ToolMessage, UIRenderMessage } from \"../types\";\nimport { nowIso } from \"./utils\";\n\nexport type MessageHandler = (\n conv: Conversation,\n part: any,\n id: string,\n role: Role,\n status?: any\n) => Conversation;\n\nexport const handlers: Record<string, MessageHandler> = {\n \"text-content\": (conv, part, id, role, status) => {\n if (!id) return conv;\n const existing = conv.messages.find((message) => message.messageId === id);\n const newText = part.text || \"\";\n\n if (existing && \"content\" in existing) {\n return {\n ...conv,\n messages: conv.messages.map((message) =>\n message.messageId === id\n ? ({ ...message, content: (message as TextMessage).content + newText } as MessagesItem)\n : message\n ),\n lastUpdated: nowIso(),\n };\n }\n\n return {\n ...conv,\n messages: [\n ...conv.messages,\n {\n messageId: id,\n role,\n kind: \"text-content\",\n content: newText,\n timestamp: status?.timestamp || nowIso(),\n } as TextMessage,\n ],\n lastUpdated: nowIso(),\n };\n },\n\n thought: (conv, part, id, role, status) => {\n if (!id) return conv;\n const newChunk = part?.data?.description || \"\";\n const existing = conv.messages.find((message) => message.messageId === id);\n\n if (existing && \"thought\" in existing) {\n return {\n ...conv,\n messages: conv.messages.map((message) =>\n message.messageId === id\n ? ({ ...message, thought: (message as ThoughtMessage).thought + newChunk } as MessagesItem)\n : message\n ),\n lastUpdated: nowIso(),\n };\n }\n\n return {\n ...conv,\n messages: [\n ...conv.messages,\n {\n messageId: id,\n role,\n kind: \"thought\",\n thought: newChunk,\n timestamp: status?.timestamp || nowIso(),\n } as ThoughtMessage,\n ],\n lastUpdated: nowIso(),\n };\n },\n\n tool: (conv, part, _id, role, status) => {\n const partData = part?.data || {};\n const tool = partData?.tool;\n const name = tool?.displayName || tool?.name || \"\";\n const request = partData?.request;\n const id = request?.callId;\n if (!id || !name) return conv;\n\n const toolStatus = partData?.status;\n const existing = conv.messages.find((message) => message.messageId === id);\n\n if (existing && \"toolStatus\" in existing) {\n return {\n ...conv,\n messages: conv.messages.map((message) =>\n message.messageId === id\n ? ({\n ...message,\n toolStatus: toolStatus || (message as ToolMessage).toolStatus,\n } as MessagesItem)\n : message\n ),\n lastUpdated: nowIso(),\n };\n }\n\n return {\n ...conv,\n messages: [\n ...conv.messages,\n {\n messageId: id,\n role,\n kind: \"tool\",\n toolName: name,\n toolDescription: request?.args?.query || \"\",\n toolStatus: toolStatus || \"pending\",\n timestamp: status?.timestamp || nowIso(),\n } as ToolMessage,\n ],\n lastUpdated: nowIso(),\n };\n },\n\n error: (conv, part, id, role) => {\n const errorMsg = part?.text || part?.data?.error || \"发生错误\";\n return {\n ...conv,\n messages: [\n ...conv.messages,\n {\n messageId: id || `error-${Date.now()}`,\n role,\n kind: \"error\",\n content: errorMsg,\n timestamp: nowIso(),\n } as ErrorMessage,\n ],\n status: \"error\",\n lastUpdated: nowIso(),\n };\n },\n\n \"ui-render\": (conv, part, id, role, status) => {\n if (!id) return conv;\n const existing = conv.messages.find((message) => message.messageId === id);\n const partData = part?.data || {};\n const spec = partData.spec || { root: \"\", elements: {} };\n\n if (existing && existing.kind === \"ui-render\") {\n return {\n ...conv,\n messages: conv.messages.map((message) =>\n message.messageId === id ? ({ ...(message as UIRenderMessage), spec } as MessagesItem) : message\n ),\n lastUpdated: nowIso(),\n };\n }\n\n return {\n ...conv,\n messages: [\n ...conv.messages,\n {\n messageId: id,\n role,\n kind: \"ui-render\",\n spec,\n timestamp: status?.timestamp || nowIso(),\n } as UIRenderMessage,\n ],\n lastUpdated: nowIso(),\n };\n },\n};\n\nexport function getKind(part: any, metadata?: any) {\n if (part?.data?.tool) return \"tool\";\n if (part?.data?.type === \"ui\") return \"ui-render\";\n if (part?.kind === \"text\") return \"text-content\";\n if (part?.data?.type === \"though\" || metadata?.coderAgent?.kind === \"thought\") return \"thought\";\n if (metadata?.error) return \"error\";\n return \"unknown\";\n}\n","export { getMiniProgramRequest, resolveMiniProgramGlobals } from \"@amaster.ai/http-client\";\nimport { resolveMiniProgramGlobals } from \"@amaster.ai/http-client\";\n\nfunction isKnownMiniProgramEnv(env: unknown, envType?: Record<string, unknown>): boolean {\n if (typeof env === \"string\") {\n const normalizedEnv = env.trim().toUpperCase();\n if (\n normalizedEnv === \"TT\" ||\n normalizedEnv === \"DOUYIN\" ||\n normalizedEnv === \"WEAPP\" ||\n normalizedEnv === \"WECHAT\"\n ) {\n return true;\n }\n }\n\n if (!envType) {\n return false;\n }\n\n return (\n (typeof envType.TT !== \"undefined\" && env === envType.TT) ||\n (typeof envType.WEAPP !== \"undefined\" && env === envType.WEAPP)\n );\n}\n\nexport function isMiniProgramRuntime(): boolean {\n const runtime = resolveMiniProgramGlobals();\n if (isKnownMiniProgramEnv(runtime?.Taro?.getEnv?.(), runtime?.Taro?.ENV_TYPE)) {\n return true;\n }\n\n return (\n typeof runtime?.wx?.request === \"function\" ||\n typeof runtime?.tt?.request === \"function\" ||\n typeof runtime?.my?.request === \"function\" ||\n typeof runtime?.swan?.request === \"function\" ||\n typeof runtime?.qq?.request === \"function\" ||\n typeof runtime?.jd?.request === \"function\"\n );\n}\n\nexport function supportsChunkedRequest(): boolean {\n const runtime = resolveMiniProgramGlobals();\n if (typeof runtime?.tt?.request === \"function\" || typeof runtime?.tt?.createEventSource === \"function\") {\n return false;\n }\n\n return true;\n}\n\nexport function supportsDouyinEventSource(): boolean {\n const runtime = resolveMiniProgramGlobals();\n return typeof runtime?.tt?.createEventSource === \"function\";\n}\n","import type {\n Message1,\n SendStreamingMessageResponse,\n SendStreamingMessageSuccessResponse,\n TextPart,\n} from \"@a2a-js/sdk\";\nimport { handlers, type MessageHandler, getKind } from \"./controller/message-handlers\";\nimport {\n cloneConversation,\n createAbortController,\n createSnapshot,\n generateId,\n nowIso,\n type InternalState,\n type SimpleAbortController,\n} from \"./controller/utils\";\nimport { getMiniProgramRequest, supportsDouyinEventSource } from \"./runtime/platform\";\nimport type {\n Conversation,\n ConversationController,\n ConversationControllerOptions,\n ConversationRuntimeError,\n ConversationRuntimeFactory,\n MessagesItem,\n TextMessage,\n ThoughtMessage,\n ToolMessage,\n} from \"./types\";\n\nexport type {\n Role,\n TextMessage,\n ErrorMessage,\n ThoughtMessage,\n ToolMessage,\n UIRenderMessage,\n MessagesItem,\n Conversation,\n HistoryState,\n ConversationRequestState,\n ConversationRuntimeError,\n UpdateMessageInput,\n ConversationControllerSnapshot,\n ConversationStrings,\n ConversationControllerOptions,\n ConversationController,\n} from \"./types\";\n\nexport function createConversationController(\n copilot: ConversationRuntimeFactory,\n options: ConversationControllerOptions\n): ConversationController {\n const mode = options.mode || \"conversation\";\n const isSingleTurnMode = mode === \"single-turn\";\n const shouldLoadHistoryOnInit = !isSingleTurnMode;\n const shouldResumeOnInit = !isSingleTurnMode;\n const resolveContextId = () =>\n options.getContextId?.() ??\n copilot.createContextId(isSingleTurnMode ? \"single-turn\" : \"conversation\");\n\n const state: InternalState = {\n byId: {},\n order: [],\n starting: true,\n isLoading: false,\n isLoadingHistory: false,\n historyState: {\n next: null,\n hasMore: false,\n },\n };\n\n const listeners = new Set<(snapshot: ReturnType<typeof createSnapshot>) => void>();\n let activeAbortController: AbortController | SimpleAbortController | null = null;\n let activeRunPromise: Promise<void> | null = null;\n let currentStreamingTaskId: string | null = null;\n let lastMessageType = \"unknown\";\n let lastMessageId = \"\";\n let initPromise: Promise<void> | null = null;\n let destroyed = false;\n let currentContextId = resolveContextId();\n let sessionRuntime = copilot.createScopedRuntime(currentContextId);\n let activeRequestConversationId: string | null = null;\n\n const emit = () => {\n if (destroyed) return;\n const snapshot = createSnapshot(state);\n listeners.forEach((listener) => listener(snapshot));\n };\n\n const removeTaskFromOrder = (taskId: string) => {\n state.order = state.order.filter((id) => id !== taskId);\n };\n\n const pushTaskToOrder = (taskId: string, append = true) => {\n removeTaskFromOrder(taskId);\n state.order = append ? [...state.order, taskId] : [taskId, ...state.order];\n };\n\n const clearRuntimeMessageState = () => {\n lastMessageType = \"unknown\";\n lastMessageId = \"\";\n };\n\n const isNetworkError = (error: unknown) => {\n const payload = (error && typeof error === \"object\" ? error : {}) as Record<string, unknown>;\n const message = String(payload.message || payload.errMsg || \"\").toLowerCase();\n const errorCode = String(payload.errorCode || \"\");\n const errNo = String(payload.errNo || \"\");\n\n return (\n payload.name === \"TypeError\" ||\n /failed to fetch|fetch failed|timed out|disconnected|offline|断网/.test(message) ||\n [\"600009\", \"21101\", \"21102\", \"21103\"].includes(errorCode) ||\n [\"600009\", \"21101\", \"21102\", \"21103\"].includes(errNo)\n );\n };\n\n const createRuntimeError = (\n error: unknown,\n source: \"send\" | \"stream\" | \"recovery\" = \"stream\"\n ): ConversationRuntimeError => {\n const payload = (error && typeof error === \"object\" ? error : {}) as Record<string, unknown>;\n const message = String(payload.message || payload.errMsg || \"\").toLowerCase();\n return {\n code: isNetworkError(error) ? \"network\" : \"unknown\",\n message,\n retryable: true,\n source,\n timestamp: nowIso(),\n };\n };\n\n const updateConversationRequestMeta = (\n taskId: string | null | undefined,\n input: {\n requestState?: \"idle\" | \"submitting\" | \"streaming\" | \"recovering\" | \"error\";\n runtimeError?: ReturnType<typeof createRuntimeError> | null;\n status?: Conversation[\"status\"];\n }\n ) => {\n if (!taskId) return;\n const conversation = state.byId[taskId];\n if (!conversation) return;\n\n state.byId[taskId] = {\n ...conversation,\n requestState: input.requestState ?? conversation.requestState,\n runtimeError:\n input.runtimeError === undefined ? conversation.runtimeError : input.runtimeError,\n status: input.status ?? conversation.status,\n lastUpdated: nowIso(),\n };\n };\n\n const clearConversationRuntimeState = (taskId: string | null | undefined) => {\n updateConversationRequestMeta(taskId, {\n requestState: \"idle\",\n runtimeError: null,\n });\n };\n\n const resetState = () => {\n state.byId = {};\n state.order = [];\n state.historyState = {\n next: null,\n hasMore: false,\n };\n };\n\n const setLoading = (status: boolean) => {\n state.isLoading = status;\n !status && removeLoadingPlaceholder();\n };\n\n const refreshContextId = () => {\n currentContextId = resolveContextId();\n sessionRuntime = copilot.createScopedRuntime(currentContextId);\n return currentContextId;\n };\n\n const abortActiveSession = () => {\n activeAbortController?.abort();\n activeAbortController = null;\n activeRunPromise = null;\n clearConversationRuntimeState(activeRequestConversationId);\n setLoading(false);\n emit();\n };\n\n const handleEnd = () => {\n clearRuntimeMessageState();\n clearConversationRuntimeState(activeRequestConversationId);\n if (activeRequestConversationId) {\n updateConversationRequestMeta(activeRequestConversationId, {\n status: \"completed\",\n });\n }\n activeRequestConversationId = null;\n currentStreamingTaskId = null;\n activeAbortController = null;\n activeRunPromise = null;\n setLoading(false);\n emit();\n };\n\n const addConversation = (conversation: Conversation) => {\n state.byId[conversation.taskId] = conversation;\n pushTaskToOrder(conversation.taskId, true);\n emit();\n };\n\n const clearConversation = (taskId: string) => {\n if (!state.byId[taskId]) return;\n delete state.byId[taskId];\n removeTaskFromOrder(taskId);\n emit();\n };\n\n const addLoadingPlaceholder = () => {\n addConversation({\n taskId: \"loading-placeholder\",\n status: \"working\",\n messages: [\n {\n messageId: \"loading-placeholder\",\n role: \"assistant\",\n kind: \"text-content\",\n content: options.strings.thinking,\n timestamp: nowIso(),\n } as TextMessage,\n ],\n lastUpdated: nowIso(),\n });\n };\n\n const removeLoadingPlaceholder = () => {\n clearConversation(\"loading-placeholder\");\n };\n\n const fillData = ({\n kind,\n taskId,\n part,\n status,\n handler,\n isHistory,\n historyId,\n messageId,\n }: {\n kind: string;\n taskId: string;\n part: any;\n status: any;\n handler: MessageHandler;\n isHistory?: boolean;\n historyId?: string;\n messageId?: string;\n }) => {\n let id = messageId || lastMessageId;\n const role = status?.message?.role === \"agent\" ? \"assistant\" : \"user\";\n\n if (!messageId && (kind === \"ui-render\" || (kind !== \"unknown\" && kind !== lastMessageType))) {\n lastMessageType = kind;\n id = generateId();\n lastMessageId = id;\n }\n\n const prevConversation =\n state.byId[taskId] ??\n ({\n taskId,\n status: isHistory ? \"completed\" : \"submitted\",\n messages: [],\n role,\n historyId,\n lastUpdated: nowIso(),\n } as Conversation);\n\n const nextConversation = handler(prevConversation, part, id, role, status);\n state.byId[taskId] = {\n ...nextConversation,\n status: status?.state || prevConversation.status,\n lastUpdated: nowIso(),\n };\n\n if (!isHistory) {\n pushTaskToOrder(taskId, true);\n }\n\n emit();\n };\n\n const onSendError = (\n error?: unknown,\n source: \"send\" | \"stream\" | \"recovery\" = \"stream\",\n requestConversationId: string | null | undefined = activeRequestConversationId\n ) => {\n updateConversationRequestMeta(requestConversationId, {\n requestState: \"error\",\n runtimeError: createRuntimeError(error, source),\n status: \"error\",\n });\n if (requestConversationId && activeRequestConversationId === requestConversationId) {\n activeRequestConversationId = null;\n }\n setLoading(false);\n emit();\n };\n\n const processLiveData = (data: SendStreamingMessageResponse) => {\n if (!(data as any)?.result) return;\n const result = (data as SendStreamingMessageSuccessResponse).result as any;\n const { taskId, status, metadata, final } = result;\n\n if (final) {\n handleEnd();\n return;\n }\n\n if (!taskId) return;\n\n currentStreamingTaskId = taskId;\n const firstPart = status?.message?.parts?.[0];\n const kind = getKind(firstPart, metadata);\n const handler = handlers[kind];\n if (!handler) return;\n\n removeLoadingPlaceholder();\n fillData({\n kind,\n taskId,\n part: firstPart,\n status,\n handler,\n });\n };\n\n const processHistoryData = (data: Message1, taskId: string) => {\n const { messageId, historyId } = (data || {}) as any;\n if (!messageId) return;\n\n const firstPart = data.parts?.[0];\n const kind = getKind(firstPart);\n\n if (kind === \"text-content\") {\n let text = (firstPart as TextPart).text || \"\";\n text = text.trim();\n if (text.startsWith(\"<ui>\")) {\n const json = text.slice(4).trim();\n try {\n const partData = JSON.parse(json);\n if (partData.root && partData.elements) {\n fillData({\n kind: \"ui-render\",\n taskId,\n part: { kind: \"data\", data: { type: \"ui\", spec: partData } },\n handler: handlers[\"ui-render\"]!,\n isHistory: true,\n historyId,\n messageId,\n status: { message: data },\n });\n }\n } catch {\n // ignore invalid history ui payload\n }\n return;\n }\n }\n\n const handler = handlers[kind];\n if (!handler) return;\n\n fillData({\n kind,\n taskId,\n part: firstPart,\n handler,\n isHistory: true,\n historyId,\n messageId,\n status: { message: data },\n });\n };\n\n const runSession = async (\n messages: Array<{ role: \"system\" | \"user\" | \"assistant\"; content: string }>,\n chatOptions?: { taskId?: string },\n showLoadingPlaceholder = false,\n recoveryAttempt = 0,\n preferMiniProgramRequest = false,\n requestConversationId: string | null = activeRequestConversationId\n ) => {\n activeRequestConversationId = requestConversationId;\n abortActiveSession();\n clearRuntimeMessageState();\n updateConversationRequestMeta(requestConversationId, {\n requestState: \"submitting\",\n runtimeError: null,\n status: \"submitted\",\n });\n\n const abortController = createAbortController() as AbortController | SimpleAbortController;\n activeAbortController = abortController;\n\n if (showLoadingPlaceholder) {\n addLoadingPlaceholder();\n setLoading(true);\n emit();\n }\n\n let hasResponse = false;\n let streamFailed = false;\n let streamAborted = false;\n let finalReceived = false;\n let lastTaskId = chatOptions?.taskId || null;\n\n const runPromise = sessionRuntime.sendMessage(messages, {\n taskId: chatOptions?.taskId,\n signal: abortController.signal,\n preferMiniProgramRequest,\n onMessage: (message) => {\n const responseTaskId = (message as any)?.result?.taskId;\n const responseFinal = Boolean((message as any)?.result?.final);\n if (responseTaskId) {\n lastTaskId = responseTaskId;\n }\n if (responseFinal) {\n finalReceived = true;\n }\n hasResponse = true;\n updateConversationRequestMeta(requestConversationId, {\n requestState: responseFinal ? \"idle\" : \"streaming\",\n runtimeError: null,\n status: responseFinal ? \"completed\" : \"working\",\n });\n processLiveData(message);\n },\n onClose: () => {},\n });\n activeRunPromise = runPromise;\n\n const recovery = async () => {\n const isDouyinMiniProgram = supportsDouyinEventSource() && !!getMiniProgramRequest();\n const canRecover =\n isDouyinMiniProgram && !streamAborted && !finalReceived && recoveryAttempt < 2;\n if (canRecover) {\n console.log(\"[recovering]\");\n updateConversationRequestMeta(requestConversationId, {\n requestState: \"recovering\",\n runtimeError: null,\n status: \"working\",\n });\n emit();\n try {\n const status = await sessionRuntime.getChatStatus(lastTaskId || undefined);\n\n if (status.working && status.taskId) {\n currentStreamingTaskId = status.taskId;\n await runSession(\n [],\n { taskId: status.taskId },\n true,\n recoveryAttempt + 1,\n true,\n requestConversationId\n );\n return true;\n }\n\n if (!hasResponse && !lastTaskId && !status.taskId && recoveryAttempt < 1) {\n await runSession(\n messages,\n chatOptions,\n true,\n recoveryAttempt + 1,\n true,\n requestConversationId\n );\n return true;\n }\n } catch (recoveryError) {\n console.error(\"[ConversationController] recovery failed:\", recoveryError);\n onSendError(recoveryError, \"recovery\", requestConversationId);\n return true;\n }\n }\n\n return false;\n };\n\n let streamError: unknown;\n let recovered = false;\n try {\n await runPromise;\n } catch (error) {\n if ((error as Error)?.name === \"AbortError\" || abortController.signal.aborted) {\n streamAborted = true;\n } else {\n streamFailed = true;\n streamError = error;\n console.error(\"[ConversationController] Stream error:\", error);\n }\n } finally {\n if (activeRunPromise === runPromise) {\n activeRunPromise = null;\n }\n if (activeAbortController === abortController) {\n activeAbortController = null;\n }\n\n recovered = await recovery();\n }\n\n if (recovered) {\n return;\n }\n\n if (streamFailed) {\n onSendError(streamError, \"stream\", requestConversationId);\n } else if (!hasResponse && showLoadingPlaceholder && !streamAborted) {\n onSendError(streamError, \"send\", requestConversationId);\n } else if (streamAborted) {\n clearConversationRuntimeState(requestConversationId);\n if (requestConversationId && activeRequestConversationId === requestConversationId) {\n activeRequestConversationId = null;\n }\n setLoading(false);\n emit();\n } else if (finalReceived && state.isLoading) {\n handleEnd();\n } else if (!finalReceived && state.isLoading) {\n onSendError(undefined, \"stream\", requestConversationId);\n }\n };\n\n return {\n getSnapshot() {\n return createSnapshot(state);\n },\n\n subscribe(listener) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n\n async init() {\n if (destroyed) return;\n if (initPromise) return initPromise;\n\n state.starting = true;\n emit();\n\n initPromise = (async () => {\n try {\n if (shouldLoadHistoryOnInit) {\n await this.loadHistory();\n }\n if (shouldResumeOnInit) {\n const result = await sessionRuntime.getChatStatus();\n if (result.taskId && result.working) {\n currentStreamingTaskId = result.taskId;\n await runSession([], { taskId: result.taskId }, false);\n }\n }\n } catch (error) {\n console.error(\"[ConversationController] init failed:\", error);\n } finally {\n state.starting = false;\n emit();\n initPromise = null;\n }\n })();\n\n return initPromise;\n },\n\n destroy() {\n destroyed = true;\n abortActiveSession();\n listeners.clear();\n },\n\n async sendMessage(userContent: string) {\n if (state.isLoading || !userContent.trim()) return;\n\n if (isSingleTurnMode) {\n this.abort();\n resetState();\n clearRuntimeMessageState();\n currentStreamingTaskId = null;\n refreshContextId();\n }\n\n const localTaskId = generateId();\n activeRequestConversationId = localTaskId;\n\n addConversation({\n taskId: localTaskId,\n status: \"submitted\",\n requestState: \"submitting\",\n runtimeError: null,\n messages: [\n {\n messageId: generateId(),\n role: \"user\",\n kind: \"text-content\",\n content: userContent,\n timestamp: nowIso(),\n } as TextMessage,\n ],\n lastUpdated: nowIso(),\n });\n\n try {\n await runSession(\n [{ role: \"user\", content: userContent }],\n undefined,\n true,\n 0,\n false,\n localTaskId\n );\n } catch (error) {\n if ((error as Error).name === \"AbortError\") return;\n onSendError(error, \"send\", localTaskId);\n }\n },\n\n abort() {\n const wasAborted = activeAbortController?.signal.aborted;\n abortActiveSession();\n clearRuntimeMessageState();\n clearConversationRuntimeState(activeRequestConversationId);\n activeRequestConversationId = null;\n currentStreamingTaskId = null;\n removeLoadingPlaceholder();\n if (!wasAborted) {\n void Promise.resolve();\n }\n },\n\n async cancelChat(taskId?: string) {\n const targetTaskId = taskId || currentStreamingTaskId;\n this.abort();\n\n addConversation({\n taskId: generateId(),\n status: \"error\",\n messages: [\n {\n messageId: `cancel-${Date.now()}`,\n role: \"assistant\",\n kind: \"text-content\",\n content: options.strings.cancelled,\n timestamp: nowIso(),\n } as TextMessage,\n ],\n lastUpdated: nowIso(),\n });\n\n if (!targetTaskId) return;\n\n try {\n await sessionRuntime.cancelChat(targetTaskId);\n currentStreamingTaskId = null;\n } catch (error) {\n console.error(\"[ConversationController] cancel failed:\", error);\n }\n },\n\n resetConversation(greeting?: string) {\n this.abort();\n resetState();\n activeRequestConversationId = null;\n currentStreamingTaskId = null;\n clearRuntimeMessageState();\n if (isSingleTurnMode) {\n refreshContextId();\n }\n\n if (greeting) {\n const taskId = `conv-${Date.now()}`;\n state.byId[taskId] = {\n taskId,\n status: \"submitted\",\n messages: [\n {\n messageId: `greeting-${Date.now()}`,\n role: \"assistant\",\n kind: \"text-content\",\n content: greeting,\n timestamp: nowIso(),\n } as TextMessage,\n ],\n lastUpdated: nowIso(),\n };\n state.order = [taskId];\n }\n\n emit();\n },\n\n async startNewConversation() {\n addConversation({\n taskId: generateId(),\n status: \"submitted\",\n messages: [],\n lastUpdated: nowIso(),\n system: { level: \"newConversation\" },\n });\n\n try {\n await sessionRuntime.newConversation();\n } catch (error) {\n console.error(\"[ConversationController] newConversation failed:\", error);\n }\n },\n\n async loadHistory(limit = 20, next?: string) {\n state.isLoadingHistory = true;\n emit();\n\n try {\n const result = await sessionRuntime.getHistory(limit, next);\n const messages = result?.messages || [];\n\n let taskId = \"\";\n let lastRole = \"\";\n const taskIds: string[] = [];\n\n messages.forEach((message: any) => {\n const role = message.role === \"agent\" ? \"assistant\" : \"user\";\n if (role !== lastRole) {\n taskId = `history-conv-${generateId()}`;\n taskIds.push(taskId);\n lastRole = role;\n }\n processHistoryData(message, taskId);\n });\n\n state.order = [...taskIds, ...state.order.filter((id) => !taskIds.includes(id))];\n state.historyState = {\n next: result?.next || null,\n hasMore: result?.hasMore || false,\n };\n } catch (error) {\n console.error(\"[ConversationController] loadHistory failed:\", error);\n } finally {\n state.isLoadingHistory = false;\n emit();\n }\n },\n\n async loadMoreHistory() {\n if (!state.historyState.hasMore || state.isLoadingHistory || !state.historyState.next) return;\n await this.loadHistory(20, state.historyState.next);\n },\n\n getConversation(taskId: string) {\n const conversation = state.byId[taskId];\n return conversation ? cloneConversation(conversation) : undefined;\n },\n\n clearConversation(taskId: string) {\n clearConversation(taskId);\n },\n\n removeMessage(taskId: string, messageId: string) {\n const conversation = state.byId[taskId];\n if (!conversation) return;\n\n state.byId[taskId] = {\n ...conversation,\n messages: conversation.messages.filter((message) => message.messageId !== messageId),\n lastUpdated: nowIso(),\n };\n pushTaskToOrder(taskId, true);\n emit();\n },\n\n updateMessage(input) {\n const {\n taskId,\n messageId,\n content,\n partial = false,\n status,\n response,\n metadata = {},\n } = input;\n const conversation = state.byId[taskId];\n if (!conversation) return;\n\n const messageIndex = conversation.messages.findIndex(\n (message) => message.messageId === messageId\n );\n if (messageIndex === -1) return;\n\n const oldMessage = conversation.messages[messageIndex];\n if (!oldMessage) return;\n\n const updatedMessage: MessagesItem = { ...oldMessage, ...metadata } as MessagesItem;\n\n if (content !== undefined) {\n if (\"content\" in updatedMessage) {\n updatedMessage.content = partial\n ? `${(updatedMessage as TextMessage).content || \"\"}${content}`\n : content;\n } else if (\"thought\" in updatedMessage) {\n updatedMessage.thought = partial\n ? `${(updatedMessage as ThoughtMessage).thought || \"\"}${content}`\n : content;\n } else if (oldMessage.kind === \"text-content\") {\n (updatedMessage as TextMessage).content = partial\n ? `${(oldMessage as TextMessage).content || \"\"}${content}`\n : content;\n }\n }\n\n if (\"toolStatus\" in updatedMessage || status) {\n (updatedMessage as ToolMessage).toolStatus =\n status || (updatedMessage as ToolMessage).toolStatus;\n }\n if (response !== undefined) {\n (updatedMessage as ToolMessage).response = response;\n }\n\n const nextMessages = [...conversation.messages];\n nextMessages[messageIndex] = updatedMessage;\n\n state.byId[taskId] = {\n ...conversation,\n messages: nextMessages,\n lastUpdated: nowIso(),\n };\n pushTaskToOrder(taskId, true);\n emit();\n },\n };\n}\n","import { isMiniProgramRuntime } from \"./platform\";\n\nexport type ContextIdMode = \"conversation\" | \"single-turn\";\n\nfunction generateUUID(): string {\n const cryptoObj = typeof globalThis !== \"undefined\" ? globalThis.crypto : undefined;\n\n if (cryptoObj && typeof cryptoObj.randomUUID === \"function\") {\n return cryptoObj.randomUUID();\n }\n\n if (cryptoObj && typeof cryptoObj.getRandomValues === \"function\") {\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, (char) => {\n const randomValues = cryptoObj.getRandomValues(new Uint8Array(1));\n const random = (randomValues[0] ?? 0) % 16;\n const value = char === \"x\" ? random : (random & 0x3) | 0x8;\n return value.toString(16);\n });\n }\n\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, (char) => {\n const random = (Math.random() * 16) | 0;\n const value = char === \"x\" ? random : (random & 0x3) | 0x8;\n return value.toString(16);\n });\n}\n\nfunction getAppIdFromHostname(hostname: string): string | null {\n const wwwMatch = /^www\\.([\\da-z-]+)(?:-[^.]+)?\\.[\\w-]+\\.(?:local|ai|cn)$/.exec(hostname);\n if (wwwMatch?.[1]) return wwwMatch[1];\n\n const domainMatch = /^([\\da-z-]+)(?:-[^.]+)?\\.[\\w-]+\\.(?:local|ai|cn)$/.exec(hostname);\n if (domainMatch?.[1]) return domainMatch[1];\n\n return null;\n}\n\nfunction extractAppIdFromUrl(): string | null {\n if (typeof window === \"undefined\") return null;\n\n try {\n const url = window.location.href;\n const pathMatch = /\\/app\\/([\\da-z-]+)(?:\\/|$)/.exec(url);\n if (pathMatch?.[1]) return pathMatch[1];\n return getAppIdFromHostname(window.location.hostname);\n } catch {\n return null;\n }\n}\n\nlet cachedAppId: string | null = null;\nlet cachedAnonymousUid: string | null = null;\n\nfunction getAppId(hostname?: string): string {\n const urlAppId = hostname ? getAppIdFromHostname(hostname) : extractAppIdFromUrl();\n if (urlAppId) return urlAppId;\n if (!cachedAppId) cachedAppId = generateUUID();\n return cachedAppId;\n}\n\nexport function createContextIdResolver(url: string, getUserUid?: () => string | null) {\n const createContextId = createContextIdFactory(url, getUserUid);\n return () => {\n return createContextId(\"conversation\");\n };\n}\n\nexport function createContextIdFactory(url: string, getUserUid?: () => string | null) {\n return (mode: ContextIdMode = \"conversation\") => {\n const isMiniProgram = isMiniProgramRuntime();\n let appId = getAppId();\n\n if (isMiniProgram) {\n const hostname = url ? url.replace(/^https?:\\/\\//, \"\").split(\"/\")[0] : \"\";\n appId = getAppId(hostname);\n }\n\n const userUid = getUserUid?.() ?? (cachedAnonymousUid ??= `anonymous-${generateUUID()}`);\n const baseContextId = `${appId}:${userUid}`;\n\n if (mode === \"single-turn\") {\n return `${baseContextId}:${generateUUID()}`;\n }\n\n return baseContextId;\n };\n}\n\nexport { generateUUID };\n","import type { Part } from \"@a2a-js/sdk\";\nimport type { MessageContent, TextContent } from \"../types\";\n\nexport function convertToA2AParts(content: string | MessageContent[]): Part[] {\n if (typeof content === \"string\") {\n return [{ kind: \"text\", text: content }];\n }\n\n return content\n .map((part): Part | null => {\n switch (part.type) {\n case \"text\":\n return { kind: \"text\", text: part.text };\n case \"image\":\n if (part.data) {\n return {\n kind: \"file\",\n file: {\n bytes: part.data,\n mimeType: part.mimeType || \"image/png\",\n },\n };\n }\n if (part.url) {\n return {\n kind: \"file\",\n file: { uri: part.url, mimeType: part.mimeType || \"image/png\" },\n };\n }\n return null;\n case \"file\":\n if (part.data) {\n return {\n kind: \"file\",\n file: {\n bytes: part.data,\n ...(part.mimeType && { mimeType: part.mimeType }),\n ...(part.name && { name: part.name }),\n },\n };\n }\n if (part.url) {\n return {\n kind: \"file\",\n file: {\n uri: part.url,\n ...(part.mimeType && { mimeType: part.mimeType }),\n ...(part.name && { name: part.name }),\n },\n };\n }\n return null;\n default:\n return null;\n }\n })\n .filter((part): part is Part => part !== null);\n}\n\nexport function extractTextFromContent(content: string | MessageContent[]): string {\n if (typeof content === \"string\") {\n return content;\n }\n return content\n .filter((part): part is TextContent => part.type === \"text\")\n .map((part) => part.text)\n .join(\"\\n\");\n}\n","import type { ContextIdMode } from \"./context\";\nimport type { ConversationRuntime, ConversationRuntimeFactory } from \"../types\";\n\nexport function createSessionRuntimeFactory(args: {\n createContextId: (mode?: ContextIdMode) => string;\n createRuntime: (contextId: string) => ConversationRuntime;\n}): ConversationRuntimeFactory {\n return {\n createContextId(mode) {\n return args.createContextId(mode);\n },\n createScopedRuntime(contextId: string) {\n return args.createRuntime(contextId);\n },\n };\n}\n","import type {\n CancelTaskRequest,\n CancelTaskResponse,\n SendStreamingMessageRequest,\n} from \"@a2a-js/sdk\";\nimport type { ConversationRuntime, ConversationRuntimeFactory } from \"../types\";\nimport { generateUUID, type ContextIdMode } from \"./context\";\nimport { convertToA2AParts, extractTextFromContent } from \"./message-content\";\nimport { createSessionRuntimeFactory } from \"./session-runtime\";\nimport type { StreamHandlers } from \"./stream\";\n\ninterface CreateCopilotRuntimeFactoryArgs {\n createContextId: (mode?: ContextIdMode) => string;\n postRpc: (data: unknown) => Promise<unknown>;\n sendMessageStream: (\n request: SendStreamingMessageRequest,\n handlers: StreamHandlers,\n signal?: ConversationRuntimeSendSignal,\n preferMiniProgramRequest?: boolean,\n ) => Promise<void>;\n}\n\ntype ConversationRuntimeSendSignal = Parameters<ConversationRuntime[\"sendMessage\"]>[1][\"signal\"];\n\nexport function createCopilotRuntimeFactory({\n createContextId,\n postRpc,\n sendMessageStream,\n}: CreateCopilotRuntimeFactoryArgs): ConversationRuntimeFactory {\n return createSessionRuntimeFactory({\n createContextId,\n createRuntime(contextId: string): ConversationRuntime {\n return {\n async sendMessage(messages, options) {\n const { taskId, signal, onOpen, onMessage, onClose, preferMiniProgramRequest } = options;\n const systemMsg = messages.find((message) => message.role === \"system\");\n const nonSystemMsgs = messages.filter((message) => message.role !== \"system\");\n const lastUserMsg = nonSystemMsgs[nonSystemMsgs.length - 1];\n\n const parts = lastUserMsg\n ? convertToA2AParts(lastUserMsg.content)\n : [{ kind: \"text\" as const, text: \"\" }];\n\n const systemPrompt = systemMsg ? extractTextFromContent(systemMsg.content) : undefined;\n\n const request: SendStreamingMessageRequest = {\n jsonrpc: \"2.0\",\n id: generateUUID(),\n method: \"message/stream\",\n params: {\n message: {\n contextId,\n kind: \"message\",\n messageId: generateUUID(),\n role: \"user\",\n parts,\n ...(taskId ? { taskId } : {}),\n ...(systemPrompt ? { metadata: { systemPrompt } } : {}),\n },\n },\n };\n\n await sendMessageStream(\n request,\n { onOpen, onMessage, onClose },\n signal,\n preferMiniProgramRequest\n );\n },\n\n cancelChat(taskId) {\n const request: CancelTaskRequest = {\n jsonrpc: \"2.0\",\n id: generateUUID(),\n method: \"tasks/cancel\",\n params: { id: taskId },\n };\n return postRpc(request) as Promise<CancelTaskResponse>;\n },\n\n async getHistory(limit = 50, next?: string) {\n try {\n const response: any = await postRpc({\n jsonrpc: \"2.0\",\n method: \"messages/list\",\n id: generateUUID(),\n params: {\n filter: { contextId },\n limit,\n ...(next ? { next } : {}),\n },\n });\n const result = response?.data?.result || {};\n const messages = result?.messages || [];\n const cursor = result?.next || \"\";\n\n return {\n messages,\n next: cursor,\n hasMore: !!cursor,\n };\n } catch {\n return undefined;\n }\n },\n\n async newConversation() {\n try {\n await postRpc({\n jsonrpc: \"2.0\",\n method: \"messages/clear\",\n id: generateUUID(),\n params: { contextId },\n });\n } catch {\n // noop\n }\n },\n\n async getChatStatus(taskId) {\n try {\n const request = {\n jsonrpc: \"2.0\",\n id: generateUUID(),\n method: \"tasks/get\",\n params: taskId ? { id: taskId } : { contextId },\n };\n const result: any = await postRpc(request);\n const data = result?.data?.result;\n return {\n working: data?.status?.state === \"working\",\n taskId: data?.id,\n error: data?.error?.message || \"\",\n };\n } catch (error) {\n return {\n working: false,\n error: (error as any)?.message || \"\",\n };\n }\n },\n };\n },\n });\n}\n","import { createParser } from \"eventsource-parser\";\nimport type { SendStreamingMessageResponse } from \"@a2a-js/sdk\";\nimport type { AbortSignalLike } from \"../../types\";\n\nexport interface StreamHandlers {\n onOpen?: () => void;\n onMessage: (message: SendStreamingMessageResponse) => void;\n onClose?: () => void;\n}\n\nexport function normalizeStreamError(error: unknown): Error {\n if (error instanceof Error) {\n return error;\n }\n\n if (error && typeof error === \"object\") {\n const payload = error as Record<string, unknown>;\n const message =\n (typeof payload.errMsg === \"string\" && payload.errMsg) ||\n (typeof payload.message === \"string\" && payload.message) ||\n JSON.stringify(payload);\n const normalized = new Error(message);\n if (typeof payload.errorCode === \"number\" || typeof payload.errorCode === \"string\") {\n (normalized as any).errorCode = payload.errorCode;\n }\n if (typeof payload.errNo === \"number\" || typeof payload.errNo === \"string\") {\n (normalized as any).errNo = payload.errNo;\n }\n (normalized as any).raw = error;\n return normalized;\n }\n\n return new Error(String(error));\n}\n\nexport function createAbortError(): Error {\n if (typeof DOMException !== \"undefined\") {\n return new DOMException(\"Aborted\", \"AbortError\");\n }\n const error = new Error(\"Aborted\");\n error.name = \"AbortError\";\n return error;\n}\n\nexport function createSSEConsumer(handlers: StreamHandlers) {\n return createParser({\n onEvent: (event) => {\n try {\n handlers.onMessage(JSON.parse(event.data));\n } catch (error) {\n console.error(\"[copilot stream] failed to parse SSE event:\", error, event.data);\n }\n },\n });\n}\n\nexport function bindAbortSignal(signal: AbortSignalLike | undefined, onAbort: () => void) {\n if (!signal) return;\n if (signal.aborted) {\n onAbort();\n return;\n }\n signal.addEventListener(\"abort\", onAbort);\n}\n","import type { AbortSignalLike } from \"../../types\";\nimport { createAbortError, createSSEConsumer, type StreamHandlers } from \"./shared\";\n\nexport async function startBrowserStream(\n url: string,\n data: unknown,\n authHeader: Record<string, string>,\n handlers: StreamHandlers,\n signal?: AbortSignalLike,\n): Promise<void> {\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n ...authHeader,\n };\n\n const response = await fetch(url, {\n method: \"POST\",\n headers,\n credentials: \"include\",\n body: JSON.stringify(data),\n signal: signal as AbortSignal | undefined,\n });\n\n if (!response.ok) {\n throw new Error(`Stream request failed: ${response.statusText || response.status}`);\n }\n\n handlers.onOpen?.();\n\n if (!response.body) {\n handlers.onClose?.();\n return;\n }\n\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n const parser = createSSEConsumer(handlers);\n\n try {\n while (true) {\n if (signal?.aborted) {\n throw createAbortError();\n }\n const { done, value } = await reader.read();\n if (done) {\n break;\n }\n parser.feed(decoder.decode(value, { stream: true }));\n }\n } finally {\n handlers.onClose?.();\n }\n}\n","import MiniProgramTextDecoder from \"miniprogram-text-decoder\";\nimport type { AbortSignalLike } from \"../../types\";\nimport { getMiniProgramRequest, supportsChunkedRequest } from \"../platform\";\nimport { bindAbortSignal, createAbortError, createSSEConsumer, normalizeStreamError, type StreamHandlers } from \"./shared\";\n\nfunction decodeMiniProgramArrayBuffer(\n value: ArrayBuffer | Uint8Array | undefined,\n textDecoder: MiniProgramTextDecoder\n): string {\n if (!value) return \"\";\n const buffer = value instanceof Uint8Array ? value : new Uint8Array(value);\n if (buffer.length === 0) return \"\";\n return textDecoder.decode(buffer, { stream: false });\n}\n\nexport async function startMiniProgramStream(\n url: string,\n data: unknown,\n authHeader: Record<string, string> = {},\n handlers: StreamHandlers,\n signal?: AbortSignalLike,\n): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n let chunkBuffer = new Uint8Array(0);\n const textDecoder = new MiniProgramTextDecoder(\"utf-8\", { fatal: false });\n let sawChunk = false;\n let settled = false;\n let opened = false;\n const parser = createSSEConsumer(handlers);\n\n const finish = (error?: unknown) => {\n if (settled) return;\n settled = true;\n if (error) {\n reject(normalizeStreamError(error));\n return;\n }\n handlers.onClose?.();\n resolve();\n };\n\n const emitOpen = () => {\n if (opened) return;\n opened = true;\n handlers.onOpen?.();\n };\n\n const feedText = (text: string) => {\n if (!text) return;\n emitOpen();\n parser.feed(text);\n };\n\n const chunkListener = (response: any) => {\n if (settled || !response.data) return;\n\n try {\n sawChunk = true;\n const newChunk = new Uint8Array(response.data as ArrayBuffer);\n const merged = new Uint8Array(chunkBuffer.length + newChunk.length);\n merged.set(chunkBuffer);\n merged.set(newChunk, chunkBuffer.length);\n chunkBuffer = merged;\n\n let decodeOffset = 0;\n while (decodeOffset < chunkBuffer.length) {\n const remaining = chunkBuffer.subarray(decodeOffset);\n const decoded = textDecoder.decode(remaining, { stream: false });\n\n if (decoded.length === 0) {\n break;\n }\n\n if (decoded.includes(\"�\")) {\n const lastGoodIndex = decoded.lastIndexOf(\"�\") === 0 ? 0 : decoded.indexOf(\"�\");\n if (lastGoodIndex <= 0) {\n break;\n }\n\n const goodPart = decoded.slice(0, lastGoodIndex);\n if (goodPart) {\n feedText(goodPart);\n }\n\n const encodedGood = new TextEncoder().encode(goodPart);\n decodeOffset += encodedGood.length;\n break;\n }\n\n feedText(decoded);\n decodeOffset += remaining.length;\n }\n\n chunkBuffer = chunkBuffer.subarray(decodeOffset);\n } catch (error) {\n console.error(\"[mini stream] chunk process error:\", error);\n }\n };\n\n const headersListener = (response: any) => {\n emitOpen();\n if (response.header?.[\"content-type\"]?.includes(\"text/event-stream\") === false) {\n console.warn(\"Warning: server did not return event-stream\");\n }\n };\n\n const miniReq = getMiniProgramRequest();\n if (!miniReq) {\n reject(new Error(\"Mini-program request API not found\"));\n return;\n }\n\n try {\n const requestTask = miniReq({\n url,\n method: \"POST\",\n header: {\n \"Content-Type\": \"application/json\",\n Accept: \"text/event-stream\",\n ...authHeader,\n },\n data: typeof data === \"string\" ? data : JSON.stringify(data),\n responseType: \"arraybuffer\",\n ...supportsChunkedRequest() ? {\n enableChunked: true\n } : {},\n success: (response: any) => {\n if (!sawChunk && response?.data) {\n const wholeResponse = decodeMiniProgramArrayBuffer(response.data, textDecoder);\n feedText(wholeResponse);\n }\n if (chunkBuffer.length > 0) {\n const finalText = textDecoder.decode(chunkBuffer, { stream: true });\n feedText(finalText);\n }\n finish();\n },\n fail: (error: any) => {\n finish(error);\n },\n });\n\n bindAbortSignal(signal, () => {\n requestTask.abort?.();\n finish(createAbortError());\n });\n\n requestTask.onChunkReceived?.(chunkListener);\n requestTask.onHeadersReceived?.(headersListener);\n } catch (error) {\n finish(error);\n }\n });\n}\n","import type { AbortSignalLike } from \"../../types\";\nimport { getMiniProgramRequest, isMiniProgramRuntime } from \"../platform\";\n// import { supportsDouyinEventSource } from \"../platform\";\nimport { startBrowserStream } from \"./browser\";\n// import { startDouyinEventSourceStream } from \"./douyin\";\nimport { startMiniProgramStream } from \"./mini-program\";\nimport type { StreamHandlers } from \"./shared\";\n\nexport async function startStream(\n url: string,\n data: unknown,\n getAccessToken: (() => string | null) | undefined,\n handlers: StreamHandlers,\n signal?: AbortSignalLike,\n preferMiniProgramRequest = false,\n): Promise<void> {\n const token = getAccessToken?.();\n const authHeader: Record<string, string> = token ? { Authorization: `Bearer ${token}` } : {};\n const miniReq = getMiniProgramRequest();\n const canUseMiniProgramStream = isMiniProgramRuntime() && !!miniReq;\n\n if (preferMiniProgramRequest && canUseMiniProgramStream) {\n await startMiniProgramStream(url, data, authHeader, handlers, signal);\n return;\n }\n\n // 抖音小程序的真机流式非常不好用,先注释\n // if (supportsDouyinEventSource()) {\n // await startDouyinEventSourceStream(url, data, authHeader, handlers, signal);\n // return;\n // }\n\n if (canUseMiniProgramStream) {\n await startMiniProgramStream(url, data, authHeader, handlers, signal);\n return;\n }\n\n await startBrowserStream(url, data, authHeader, handlers, signal);\n}\n\nexport type { StreamHandlers } from \"./shared\";\n","/* eslint-disable no-unused-vars */\nimport type { SendStreamingMessageRequest } from \"@a2a-js/sdk\";\nimport type { HttpClient } from \"@amaster.ai/http-client\";\nimport { createConversationController } from \"./conversation-controller\";\nimport { createContextIdFactory } from \"./runtime/context\";\nimport { createCopilotRuntimeFactory } from \"./runtime/copilot-runtime\";\nimport { startStream, type StreamHandlers } from \"./runtime/stream\";\nimport type {\n AbortSignalLike,\n ConversationController,\n ConversationControllerOptions,\n ConversationRuntimeFactory,\n} from \"./types\";\n\nexport type { TextContent, ImageContent, FileContent, MessageContent } from \"./types\";\n\nexport type CopilotClient = {\n createConversationController(options: ConversationControllerOptions): ConversationController;\n};\n\nexport function createCopilotClient(\n http: HttpClient,\n baseUrl?: string,\n getAccessToken?: () => string | null,\n getUserUid?: () => string | null\n): CopilotClient {\n let envBaseUrl = \"\";\n try {\n envBaseUrl =\n process.env.TARO_APP_API_BASE_URL ||\n process.env.VITE_API_BASE_URL ||\n process.env.API_BASE_URL ||\n \"\";\n } catch {\n // process is not defined -> ignore\n }\n\n envBaseUrl = String(envBaseUrl || \"\").trim();\n const url = `${baseUrl || envBaseUrl}/api/proxy/builtin/platform/copilot`;\n\n const postRpc = <T>(data: unknown) =>\n http.request<T>({\n url,\n method: \"POST\",\n data,\n });\n\n const createContextId = createContextIdFactory(url, getUserUid);\n\n async function sendMessageStream(\n request: SendStreamingMessageRequest,\n handlers: StreamHandlers,\n signal?: AbortSignalLike,\n preferMiniProgramRequest?: boolean,\n ): Promise<void> {\n try {\n await startStream(\n url,\n request,\n getAccessToken,\n handlers,\n signal,\n preferMiniProgramRequest,\n );\n } catch (error) {\n if (signal?.aborted) {\n return;\n }\n throw error;\n }\n }\n\n const runtime: ConversationRuntimeFactory = createCopilotRuntimeFactory({\n createContextId,\n postRpc,\n sendMessageStream,\n });\n\n return {\n createConversationController(options) {\n return createConversationController(runtime, options);\n },\n };\n}\n","export interface AutoVoiceReplyMessage {\n messageId?: string;\n role?: string;\n kind: string;\n content?: string;\n}\n\nexport interface AutoVoiceReplyConversation {\n taskId: string;\n status: string;\n requestState?: string;\n messages: AutoVoiceReplyMessage[];\n}\n\nexport interface AutoVoiceReplySourceSnapshot {\n conversations: AutoVoiceReplyConversation[];\n isLoading: boolean;\n}\n\nexport interface AutoVoiceReplySource {\n subscribe(listener: () => void): () => void;\n getSnapshot(): AutoVoiceReplySourceSnapshot;\n}\n\nexport interface AutoVoiceReplySpeechSnapshot {\n status: \"idle\" | \"connecting\" | \"speaking\" | \"error\";\n error?: string | null;\n voice?: string | null;\n}\n\nexport interface AutoVoiceReplySpeechDriver {\n subscribe(listener: () => void): () => void;\n getSnapshot(): AutoVoiceReplySpeechSnapshot;\n startStream(input: {\n id: string;\n voice?: string | null;\n audioFormat?: \"pcm\" | \"mp3\" | \"wav\" | \"opus\";\n sampleRate?: number;\n }): Promise<void>;\n appendText(input: { id: string; text: string }): Promise<void>;\n commit(): void;\n finish(): void;\n stop(): void;\n setVoice?(voice: string | null): void;\n getVoice?(): string | null;\n}\n\nexport interface AutoVoiceReplyStorage {\n getItem(key: string): string | null | undefined;\n setItem(key: string, value: string): void;\n}\n\nexport interface AutoVoiceReplySnapshot {\n enabled: boolean;\n status: \"idle\" | \"connecting\" | \"speaking\" | \"error\";\n connecting: boolean;\n speaking: boolean;\n voice: string | null;\n activeTaskId: string | null;\n suppressedTaskId: string | null;\n error: string | null;\n}\n\nexport interface AutoVoiceReplyController {\n subscribe(listener: () => void): () => void;\n getSnapshot(): AutoVoiceReplySnapshot;\n setEnabled(enabled: boolean): void;\n toggleEnabled(): void;\n toggleEnabledOrStop(): void;\n stop(): void;\n setVoice(voice: string | null): void;\n getVoice(): string | null;\n destroy(): void;\n}\n\nexport interface CreateAutoVoiceReplyControllerOptions {\n source: AutoVoiceReplySource;\n speech: AutoVoiceReplySpeechDriver;\n storage?: AutoVoiceReplyStorage;\n enabledStorageKey?: string;\n defaultVoice?: string | null;\n id?: string;\n audioFormat?: \"pcm\" | \"mp3\" | \"wav\" | \"opus\";\n sampleRate?: number;\n preprocessText?: (text: string) => string;\n}\n\nconst STREAM_BREAK_PATTERN = /[\\n。!?.!?;;]/;\nconst STREAM_SOFT_BREAK_PATTERN = /[,、,::]\\s*$/;\nconst STREAM_MIN_COMMIT_LENGTH = 24;\n\nconst getLatestAssistantTextMessageFromConversation = (\n conversation?: AutoVoiceReplyConversation | null,\n) => {\n if (!conversation) {\n return null;\n }\n\n for (let messageIndex = conversation.messages.length - 1; messageIndex >= 0; messageIndex -= 1) {\n const message = conversation.messages[messageIndex];\n\n if (!message) {\n continue;\n }\n\n if (\n message.role === \"assistant\" &&\n (message.kind === \"text-content\" || message.kind === \"message\") &&\n message.content?.trim()\n ) {\n return message;\n }\n }\n\n return null;\n};\n\nconst getLatestUserMessageIdFromConversation = (\n conversation?: AutoVoiceReplyConversation | null,\n) => {\n if (!conversation) {\n return null;\n }\n\n for (let messageIndex = conversation.messages.length - 1; messageIndex >= 0; messageIndex -= 1) {\n const message = conversation.messages[messageIndex];\n\n if (!message) {\n continue;\n }\n\n if (message.role === \"user\" && message.messageId) {\n return message.messageId;\n }\n }\n\n return null;\n};\n\nconst getLatestAssistantTextMessageAfterUser = (\n conversation?: AutoVoiceReplyConversation | null,\n userMessageId?: string | null,\n) => {\n if (!conversation) {\n return null;\n }\n\n if (!userMessageId) {\n return getLatestAssistantTextMessageFromConversation(conversation);\n }\n\n const userIndex = conversation.messages.findIndex(\n (message) => message.messageId === userMessageId,\n );\n\n if (userIndex < 0) {\n return getLatestAssistantTextMessageFromConversation(conversation);\n }\n\n for (let messageIndex = conversation.messages.length - 1; messageIndex > userIndex; messageIndex -= 1) {\n const message = conversation.messages[messageIndex];\n\n if (!message) {\n continue;\n }\n\n if (\n message.role === \"assistant\" &&\n (message.kind === \"text-content\" || message.kind === \"message\") &&\n message.content?.trim()\n ) {\n return message;\n }\n }\n\n return null;\n};\n\nconst getActiveConversation = (conversations: AutoVoiceReplyConversation[]) => {\n for (let index = conversations.length - 1; index >= 0; index -= 1) {\n const conversation = conversations[index];\n\n if (!conversation) {\n continue;\n }\n\n if (\n conversation.requestState === \"submitting\" ||\n conversation.requestState === \"streaming\" ||\n conversation.requestState === \"recovering\" ||\n conversation.status === \"submitted\" ||\n conversation.status === \"working\"\n ) {\n return conversation;\n }\n }\n\n return null;\n};\n\nconst getConversationByTaskId = (\n conversations: AutoVoiceReplyConversation[],\n taskId: string | null,\n) => {\n if (!taskId) {\n return null;\n }\n\n return conversations.find((conversation) => conversation.taskId === taskId) || null;\n};\n\nconst takeCommittedSegments = (buffer: string, final: boolean) => {\n const trimmedBuffer = buffer.trimStart();\n\n if (!trimmedBuffer) {\n return {\n segments: [] as string[],\n remainder: \"\",\n };\n }\n\n if (final) {\n return {\n segments: [trimmedBuffer].filter(Boolean),\n remainder: \"\",\n };\n }\n\n const segments: string[] = [];\n let lastIndex = 0;\n\n for (let index = 0; index < trimmedBuffer.length; index += 1) {\n const char = trimmedBuffer[index];\n\n if (!char) {\n continue;\n }\n\n if (!STREAM_BREAK_PATTERN.test(char)) {\n continue;\n }\n\n const segment = trimmedBuffer.slice(lastIndex, index + 1).trim();\n if (segment) {\n segments.push(segment);\n }\n lastIndex = index + 1;\n }\n\n let remainder = trimmedBuffer.slice(lastIndex).trimStart();\n\n if (remainder.length >= STREAM_MIN_COMMIT_LENGTH && STREAM_SOFT_BREAK_PATTERN.test(remainder)) {\n segments.push(remainder.trim());\n remainder = \"\";\n }\n\n return {\n segments,\n remainder,\n };\n};\n\nexport function createAutoVoiceReplyController(\n options: CreateAutoVoiceReplyControllerOptions,\n): AutoVoiceReplyController {\n const {\n source,\n speech,\n storage,\n enabledStorageKey,\n defaultVoice = null,\n id = \"auto-voice-reply\",\n audioFormat = \"pcm\",\n sampleRate = 24000,\n preprocessText,\n } = options;\n\n let destroyed = false;\n let enabled = enabledStorageKey ? storage?.getItem(enabledStorageKey) === \"true\" : false;\n let lastLoading = source.getSnapshot().isLoading;\n let activeTaskId: string | null = null;\n let activeUserMessageId: string | null = null;\n let suppressedTaskId: string | null = null;\n let streamStarted = false;\n let activeMessageId: string | null = null;\n let observedText = \"\";\n let pendingText = \"\";\n let queuedOperations = Promise.resolve();\n let voice = speech.getVoice?.() ?? defaultVoice;\n let snapshot: AutoVoiceReplySnapshot = {\n enabled,\n status: speech.getSnapshot().status,\n connecting: speech.getSnapshot().status === \"connecting\",\n speaking: speech.getSnapshot().status === \"speaking\",\n voice,\n activeTaskId,\n suppressedTaskId,\n error: speech.getSnapshot().error || null,\n };\n\n const listeners = new Set<() => void>();\n\n const syncSnapshot = () => {\n const speechSnapshot = speech.getSnapshot();\n const nextSnapshot: AutoVoiceReplySnapshot = {\n enabled,\n status: speechSnapshot.status,\n connecting: speechSnapshot.status === \"connecting\",\n speaking: speechSnapshot.status === \"speaking\",\n voice,\n activeTaskId,\n suppressedTaskId,\n error: speechSnapshot.error || null,\n };\n\n const changed =\n snapshot.enabled !== nextSnapshot.enabled ||\n snapshot.status !== nextSnapshot.status ||\n snapshot.connecting !== nextSnapshot.connecting ||\n snapshot.speaking !== nextSnapshot.speaking ||\n snapshot.voice !== nextSnapshot.voice ||\n snapshot.activeTaskId !== nextSnapshot.activeTaskId ||\n snapshot.suppressedTaskId !== nextSnapshot.suppressedTaskId ||\n snapshot.error !== nextSnapshot.error;\n\n if (changed) {\n snapshot = nextSnapshot;\n }\n\n return changed;\n };\n\n const emit = () => {\n if (destroyed) {\n return;\n }\n\n syncSnapshot();\n listeners.forEach((listener) => listener());\n };\n\n const persistEnabled = () => {\n if (enabledStorageKey) {\n storage?.setItem(enabledStorageKey, enabled ? \"true\" : \"false\");\n }\n };\n\n const resetStreamingState = (messageId: string | null = null) => {\n activeMessageId = messageId;\n observedText = \"\";\n pendingText = \"\";\n streamStarted = false;\n };\n\n const clearActiveRoundContext = () => {\n activeTaskId = null;\n activeUserMessageId = null;\n };\n\n const stopStreaming = (input?: { preserveRoundContext?: boolean }) => {\n const preserveRoundContext = input?.preserveRoundContext ?? false;\n\n observedText = \"\";\n pendingText = \"\";\n activeMessageId = null;\n streamStarted = false;\n\n if (!preserveRoundContext) {\n clearActiveRoundContext();\n }\n\n speech.stop();\n };\n\n const enqueueOperation = (operation: () => Promise<void> | void) => {\n queuedOperations = queuedOperations.then(\n () => operation(),\n () => operation(),\n );\n\n return queuedOperations;\n };\n\n const dispatchSegments = async (segments: string[]) => {\n if (!segments.length || destroyed) {\n return;\n }\n\n if (!streamStarted) {\n await speech.startStream({\n id,\n voice,\n audioFormat,\n sampleRate,\n });\n streamStarted = true;\n }\n\n for (const segment of segments) {\n if (destroyed) {\n return;\n }\n\n const nextText = preprocessText ? preprocessText(segment) : segment;\n if (!nextText.trim()) {\n continue;\n }\n\n await speech.appendText({\n id,\n text: nextText,\n });\n speech.commit();\n }\n };\n\n const processLatestMessage = async (\n message: AutoVoiceReplyMessage,\n final: boolean,\n ) => {\n const messageId = message.messageId || null;\n const fullText = message.content || \"\";\n\n if (!fullText.trim()) {\n return;\n }\n\n if (activeMessageId !== messageId) {\n resetStreamingState(messageId);\n }\n\n const previousText = observedText;\n\n if (previousText && !fullText.startsWith(previousText)) {\n observedText = fullText;\n return;\n }\n\n const delta = fullText.slice(previousText.length);\n observedText = fullText;\n\n if (!delta && !final) {\n return;\n }\n\n pendingText += delta;\n const { segments, remainder } = takeCommittedSegments(pendingText, final);\n pendingText = remainder;\n\n if (segments.length) {\n await dispatchSegments(segments);\n }\n\n if (final) {\n speech.finish();\n }\n };\n\n const handleSourceChange = () => {\n if (destroyed) {\n return;\n }\n\n const snapshot = source.getSnapshot();\n\n if (!enabled) {\n lastLoading = snapshot.isLoading;\n return;\n }\n\n const activeConversation = getActiveConversation(snapshot.conversations);\n const wasLoading = lastLoading;\n\n if (snapshot.isLoading && activeConversation) {\n if (activeConversation.taskId !== activeTaskId) {\n activeTaskId = activeConversation.taskId;\n activeUserMessageId = getLatestUserMessageIdFromConversation(activeConversation);\n suppressedTaskId = null;\n }\n\n if (suppressedTaskId === activeConversation.taskId) {\n lastLoading = snapshot.isLoading;\n emit();\n return;\n }\n\n const latestMessage = getLatestAssistantTextMessageAfterUser(\n activeConversation,\n activeUserMessageId,\n );\n\n if (latestMessage) {\n void enqueueOperation(() => processLatestMessage(latestMessage, false));\n }\n } else if (wasLoading && !snapshot.isLoading) {\n const finishedConversation = getConversationByTaskId(\n snapshot.conversations,\n activeTaskId,\n );\n\n if (finishedConversation && suppressedTaskId !== finishedConversation.taskId) {\n const latestMessage = getLatestAssistantTextMessageAfterUser(\n finishedConversation,\n activeUserMessageId,\n );\n\n if (latestMessage) {\n void enqueueOperation(() => processLatestMessage(latestMessage, true));\n }\n }\n\n if (finishedConversation?.taskId === suppressedTaskId) {\n suppressedTaskId = null;\n }\n clearActiveRoundContext();\n }\n\n lastLoading = snapshot.isLoading;\n emit();\n };\n\n const sourceUnsubscribe = source.subscribe(handleSourceChange);\n const speechUnsubscribe = speech.subscribe(() => {\n if (destroyed) {\n return;\n }\n\n const nextVoice = speech.getVoice?.() ?? voice ?? defaultVoice;\n if (nextVoice !== voice) {\n voice = nextVoice;\n }\n\n emit();\n });\n\n const controller: AutoVoiceReplyController = {\n subscribe(listener) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n getSnapshot() {\n syncSnapshot();\n return snapshot;\n },\n setEnabled(nextEnabled) {\n if (enabled === nextEnabled) {\n return;\n }\n\n enabled = nextEnabled;\n persistEnabled();\n\n if (!enabled) {\n stopStreaming();\n suppressedTaskId = null;\n } else {\n lastLoading = source.getSnapshot().isLoading;\n handleSourceChange();\n }\n\n emit();\n },\n toggleEnabled() {\n controller.setEnabled(!enabled);\n },\n toggleEnabledOrStop() {\n const status = speech.getSnapshot().status;\n\n if (status === \"connecting\" || status === \"speaking\") {\n suppressedTaskId = activeTaskId;\n stopStreaming({ preserveRoundContext: true });\n emit();\n return;\n }\n\n controller.toggleEnabled();\n },\n stop() {\n suppressedTaskId = activeTaskId;\n stopStreaming({ preserveRoundContext: true });\n emit();\n },\n setVoice(nextVoice) {\n voice = nextVoice;\n speech.setVoice?.(nextVoice);\n emit();\n },\n getVoice() {\n return voice;\n },\n destroy() {\n if (destroyed) {\n return;\n }\n\n destroyed = true;\n stopStreaming();\n suppressedTaskId = null;\n sourceUnsubscribe();\n speechUnsubscribe();\n listeners.clear();\n },\n };\n\n return controller;\n}\n"]}
|