@amaster.ai/copilot-client 1.1.9 → 1.1.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +2 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +83 -1
- package/dist/index.d.ts +83 -1
- 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/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"],"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","supportsChunkedRequest","runtime","resolveMiniProgramGlobals","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","createCopilotClient","http","baseUrl","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 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\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 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 { getMiniProgramRequest } from \"@amaster.ai/http-client\";\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 = getMiniProgramRequest();\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 } 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\n if (preferMiniProgramRequest && miniReq) {\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 (miniReq) {\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"]}
|
|
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":"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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 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"]}
|