@touchvue/chat 1.0.0-beta.49 → 1.0.0-beta.50
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +70 -70
- package/es/package.json.css +1 -1
- package/es/package.json.mjs +1 -1
- package/es/packages/components/resolver.mjs.map +1 -1
- package/es/packages/components/touchchat/component/AiRobot/HelloChat.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/component/AiRobot/letter.vue.mjs +1 -1
- package/es/packages/components/touchchat/component/AiRobot/letter.vue2.mjs +8 -8
- package/es/packages/components/touchchat/component/AiRobot/letter.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/component/FileContent.vue2.mjs +3 -3
- package/es/packages/components/touchchat/component/FileContent.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/component/FileView.vue2.mjs +2 -2
- package/es/packages/components/touchchat/component/FileView.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/component/HelloChat.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/component/ImageFile.vue2.mjs +6 -6
- package/es/packages/components/touchchat/component/ImageFile.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/component/ImageView.vue2.mjs +1 -1
- package/es/packages/components/touchchat/component/ImageView.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/component/LinkView.vue2.mjs +4 -4
- package/es/packages/components/touchchat/component/LinkView.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/component/MarkLayer.vue2.mjs +1 -1
- package/es/packages/components/touchchat/component/MarkLayer.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/component/ModuleSelect.vue2.mjs +2 -2
- package/es/packages/components/touchchat/component/ModuleSelect.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/component/PDFFile.vue2.mjs +10 -10
- package/es/packages/components/touchchat/component/PDFFile.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/component/QuoteContent.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/component/RealtimeVoice.vue2.mjs +1 -1
- package/es/packages/components/touchchat/component/RealtimeVoice.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/component/UploadView.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/component/VideoFile.vue.mjs +1 -1
- package/es/packages/components/touchchat/component/VideoFile.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/src/AiChat/AgentsView.vue2.mjs +1 -1
- package/es/packages/components/touchchat/src/AiChat/AgentsView.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/src/AiChat/AiMessage.vue2.mjs +30 -30
- package/es/packages/components/touchchat/src/AiChat/AiMessage.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/src/AiChat/Chat/scriptMatcher.mjs.map +1 -1
- package/es/packages/components/touchchat/src/AiChat/Chat/types.mjs.map +1 -1
- package/es/packages/components/touchchat/src/AiChat/Chat/useChat.mjs.map +1 -1
- package/es/packages/components/touchchat/src/AiChat/Chat/useCopy.mjs.map +1 -1
- package/es/packages/components/touchchat/src/AiChat/Chat/useMessageRender.mjs.map +1 -1
- package/es/packages/components/touchchat/src/AiChat/Chat/useSSE.mjs +1 -4
- package/es/packages/components/touchchat/src/AiChat/Chat/useSSE.mjs.map +1 -1
- package/es/packages/components/touchchat/src/AiChat/ChatInput.vue2.mjs +5 -5
- package/es/packages/components/touchchat/src/AiChat/ChatInput.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/src/AiChat/HistoryList.vue2.mjs +1 -1
- package/es/packages/components/touchchat/src/AiChat/HistoryList.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/src/AiChat/HistorySidebar.vue2.mjs +3 -3
- package/es/packages/components/touchchat/src/AiChat/HistorySidebar.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/src/AiChat/MessageActions.vue2.mjs +11 -11
- package/es/packages/components/touchchat/src/AiChat/MessageActions.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/src/AiChat/SiderBarView.vue2.mjs +3 -3
- package/es/packages/components/touchchat/src/AiChat/SiderBarView.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/src/AiChat/TouchChat.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/src/AiChat/TouchHistory.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/src/AiChat/UserMessage.vue2.mjs +16 -16
- package/es/packages/components/touchchat/src/AiChat/UserMessage.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/src/index.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/utils/a2aService.mjs.map +1 -1
- package/es/packages/components/touchchat/utils/fetchStream.mjs.map +1 -1
- package/lib/package.json.css +1 -1
- package/lib/package.json.js +1 -1
- package/lib/packages/components/resolver.js.map +1 -1
- package/lib/packages/components/touchchat/component/AiRobot/HelloChat.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/component/AiRobot/letter.vue.js +1 -1
- package/lib/packages/components/touchchat/component/AiRobot/letter.vue2.js +8 -8
- package/lib/packages/components/touchchat/component/AiRobot/letter.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/component/FileContent.vue2.js +3 -3
- package/lib/packages/components/touchchat/component/FileContent.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/component/FileView.vue2.js +2 -2
- package/lib/packages/components/touchchat/component/FileView.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/component/HelloChat.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/component/ImageFile.vue2.js +6 -6
- package/lib/packages/components/touchchat/component/ImageFile.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/component/ImageView.vue2.js +1 -1
- package/lib/packages/components/touchchat/component/ImageView.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/component/LinkView.vue2.js +4 -4
- package/lib/packages/components/touchchat/component/LinkView.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/component/MarkLayer.vue2.js +1 -1
- package/lib/packages/components/touchchat/component/MarkLayer.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/component/ModuleSelect.vue2.js +2 -2
- package/lib/packages/components/touchchat/component/ModuleSelect.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/component/PDFFile.vue2.js +10 -10
- package/lib/packages/components/touchchat/component/PDFFile.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/component/QuoteContent.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/component/RealtimeVoice.vue2.js +1 -1
- package/lib/packages/components/touchchat/component/RealtimeVoice.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/component/UploadView.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/component/VideoFile.vue.js +1 -1
- package/lib/packages/components/touchchat/component/VideoFile.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/src/AiChat/AgentsView.vue2.js +1 -1
- package/lib/packages/components/touchchat/src/AiChat/AgentsView.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/src/AiChat/AiMessage.vue2.js +30 -30
- package/lib/packages/components/touchchat/src/AiChat/AiMessage.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/src/AiChat/Chat/scriptMatcher.js.map +1 -1
- package/lib/packages/components/touchchat/src/AiChat/Chat/types.js.map +1 -1
- package/lib/packages/components/touchchat/src/AiChat/Chat/useChat.js.map +1 -1
- package/lib/packages/components/touchchat/src/AiChat/Chat/useCopy.js.map +1 -1
- package/lib/packages/components/touchchat/src/AiChat/Chat/useMessageRender.js.map +1 -1
- package/lib/packages/components/touchchat/src/AiChat/Chat/useSSE.js +1 -4
- package/lib/packages/components/touchchat/src/AiChat/Chat/useSSE.js.map +1 -1
- package/lib/packages/components/touchchat/src/AiChat/ChatInput.vue2.js +5 -5
- package/lib/packages/components/touchchat/src/AiChat/ChatInput.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/src/AiChat/HistoryList.vue2.js +1 -1
- package/lib/packages/components/touchchat/src/AiChat/HistoryList.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/src/AiChat/HistorySidebar.vue2.js +3 -3
- package/lib/packages/components/touchchat/src/AiChat/HistorySidebar.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/src/AiChat/MessageActions.vue2.js +11 -11
- package/lib/packages/components/touchchat/src/AiChat/MessageActions.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/src/AiChat/SiderBarView.vue2.js +3 -3
- package/lib/packages/components/touchchat/src/AiChat/SiderBarView.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/src/AiChat/TouchChat.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/src/AiChat/TouchHistory.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/src/AiChat/UserMessage.vue2.js +16 -16
- package/lib/packages/components/touchchat/src/AiChat/UserMessage.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/src/index.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/utils/a2aService.js.map +1 -1
- package/lib/packages/components/touchchat/utils/fetchStream.js.map +1 -1
- package/package.json +83 -83
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"a2aService.js","sources":["../../../../../../packages/components/touchchat/utils/a2aService.ts"],"sourcesContent":["import type { AgentConfig, Message, JSONRPCRequest, StreamChunk, Task, AgentCard, SubAgent } from '../src/types/a2a'\n// @/types/a2a\n\n// A2A Service - Handles communication with A2A agents\nexport class A2AService {\n\tprivate agents: Map<string, AgentConfig> = new Map()\n\n\t// Register an agent\n\tregisterAgent(config: AgentConfig): void {\n\t\tthis.agents.set(config.id, config)\n\t}\n\n\t// Unregister an agent\n\tunregisterAgent(agentId: string): void {\n\t\tthis.agents.delete(agentId)\n\t}\n\n\t// Get registered agent\n\tgetAgent(agentId: string): AgentConfig | undefined {\n\t\treturn this.agents.get(agentId)\n\t}\n\n\t// Get all registered agents\n\tgetAllAgents(): AgentConfig[] {\n\t\treturn Array.from(this.agents.values())\n\t}\n\n\t// Fetch agent card (agent discovery)\n\tasync fetchAgentCard(url: string): Promise<AgentCard> {\n\t\tconst response = await fetch(url, {\n\t\t\tmethod: 'GET',\n\t\t\theaders: {\n\t\t\t\tAccept: 'application/json'\n\t\t\t}\n\t\t})\n\n\t\tif (!response.ok) {\n\t\t\tthrow new Error(`Failed to fetch agent card: ${response.statusText}`)\n\t\t}\n\n\t\treturn response.json()\n\t}\n\n\t// Send message to agent (non-streaming)\n\tasync sendMessage(agentId: string, message: Message, sessionId?: string): Promise<Task> {\n\t\tconst agent = this.agents.get(agentId)\n\t\tif (!agent) {\n\t\t\tthrow new Error(`Agent ${agentId} not found`)\n\t\t}\n\n\t\tconst request: JSONRPCRequest = {\n\t\t\tjsonrpc: '2.0',\n\t\t\tid: this.generateId(),\n\t\t\tmethod: 'message/send',\n\t\t\tparams: {\n\t\t\t\tmessage,\n\t\t\t\tsessionId\n\t\t\t}\n\t\t}\n\n\t\tconst response = await fetch(agent.endpoint, {\n\t\t\tmethod: 'POST',\n\t\t\theaders: {\n\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\t...(agent.authToken && { Authorization: `Bearer ${agent.authToken}` })\n\t\t\t},\n\t\t\tbody: JSON.stringify(request)\n\t\t})\n\n\t\tif (!response.ok) {\n\t\t\tthrow new Error(`HTTP error: ${response.status}`)\n\t\t}\n\n\t\tconst data = await response.json()\n\n\t\tif (data.error) {\n\t\t\tthrow new Error(`A2A error: ${data.error.message}`)\n\t\t}\n\n\t\treturn data.result as Task\n\t}\n\n\t// Stream message to agent (for streaming responses)\n\tasync streamMessage(agentId: string, message: Message, sessionId?: string, signal?: AbortSignal): Promise<ReadableStream<StreamChunk>> {\n\t\tconst agent = this.agents.get(agentId)\n\t\tif (!agent) {\n\t\t\tthrow new Error(`Agent ${agentId} not found`)\n\t\t}\n\n\t\tconst request: JSONRPCRequest = {\n\t\t\tjsonrpc: '2.0',\n\t\t\tid: this.generateId(),\n\t\t\tmethod: 'message/stream',\n\t\t\tparams: {\n\t\t\t\tmessage,\n\t\t\t\tsessionId\n\t\t\t}\n\t\t}\n\n\t\tconst response = await fetch(agent.endpoint, {\n\t\t\tmethod: 'POST',\n\t\t\theaders: {\n\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\tAccept: 'text/event-stream',\n\t\t\t\t...(agent.authToken && { Authorization: `Bearer ${agent.authToken}` })\n\t\t\t},\n\t\t\tbody: JSON.stringify(request),\n\t\t\tsignal\n\t\t})\n\n\t\tif (!response.ok) {\n\t\t\tthrow new Error(`HTTP error: ${response.status}`)\n\t\t}\n\n\t\tif (!response.body) {\n\t\t\tthrow new Error('No response body')\n\t\t}\n\n\t\treturn new ReadableStream<StreamChunk>({\n\t\t\tasync start(controller) {\n\t\t\t\tconst reader = response.body!.getReader()\n\t\t\t\tconst decoder = new TextDecoder()\n\t\t\t\tlet buffer = ''\n\n\t\t\t\t// Handle abort signal\n\t\t\t\tif (signal) {\n\t\t\t\t\tsignal.addEventListener('abort', () => {\n\t\t\t\t\t\tcontroller.close()\n\t\t\t\t\t\treader.cancel()\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tlet isDone = false\n\t\t\t\t\twhile (!isDone) {\n\t\t\t\t\t\t// Check if the signal has been aborted\n\t\t\t\t\t\tif (signal?.aborted) {\n\t\t\t\t\t\t\tcontroller.close()\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst { done, value } = await reader.read()\n\t\t\t\t\t\tif (done) {\n\t\t\t\t\t\t\tisDone = true\n\t\t\t\t\t\t\tcontroller.close()\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbuffer += decoder.decode(value, { stream: true })\n\t\t\t\t\t\tconst lines = buffer.split('\\n')\n\t\t\t\t\t\tbuffer = lines.pop() || ''\n\n\t\t\t\t\t\tconst fn = async (data: string) => {\n\t\t\t\t\t\t\tif (data === '[DONE]') {\n\t\t\t\t\t\t\t\tcontroller.close()\n\t\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tconst chunk: StreamChunk = JSON.parse(data)\n\t\t\t\t\t\t\t\t// Add a small delay to simulate streaming effect\n\t\t\t\t\t\t\t\tawait new Promise(resolve => setTimeout(resolve, 50))\n\t\t\t\t\t\t\t\tcontroller.enqueue(chunk)\n\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\tconsole.warn('Failed to parse SSE data:', data)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfor (const line of lines) {\n\t\t\t\t\t\t\tconst trimmed = line.trim()\n\t\t\t\t\t\t\tif (trimmed.startsWith('data:')) {\n\t\t\t\t\t\t\t\tconst data = trimmed.slice(5)\n\t\t\t\t\t\t\t\tawait fn(data)\n\t\t\t\t\t\t\t} else if (trimmed.startsWith('data: ')) {\n\t\t\t\t\t\t\t\tconst data = trimmed.slice(6)\n\t\t\t\t\t\t\t\tawait fn(data)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} finally {\n\t\t\t\t\treader.releaseLock()\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t}\n\n\t// Multi-agent message routing\n\tasync routeMessage(agentIds: string[], message: Message, mode: 'sequential' | 'parallel' = 'sequential'): Promise<Map<string, Task>> {\n\t\tconst results = new Map<string, Task>()\n\n\t\tif (mode === 'parallel') {\n\t\t\tconst promises = agentIds.map(async agentId => {\n\t\t\t\ttry {\n\t\t\t\t\tconst task = await this.sendMessage(agentId, message)\n\t\t\t\t\treturn { agentId, task, error: null }\n\t\t\t\t} catch (error) {\n\t\t\t\t\treturn { agentId, task: null, error }\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tconst settled = await Promise.all(promises)\n\t\t\tfor (const { agentId, task, error } of settled) {\n\t\t\t\tif (task) {\n\t\t\t\t\tresults.set(agentId, task)\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error(`Error sending to agent ${agentId}:`, error)\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t// Sequential\n\t\t\tfor (const agentId of agentIds) {\n\t\t\t\ttry {\n\t\t\t\t\tconst task = await this.sendMessage(agentId, message)\n\t\t\t\t\tresults.set(agentId, task)\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconsole.error(`Error sending to agent ${agentId}:`, error)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn results\n\t}\n\n\t// Get task status\n\tasync getTask(agentId: string, taskId: string): Promise<Task> {\n\t\tconst agent = this.agents.get(agentId)\n\t\tif (!agent) {\n\t\t\tthrow new Error(`Agent ${agentId} not found`)\n\t\t}\n\n\t\tconst request: JSONRPCRequest = {\n\t\t\tjsonrpc: '2.0',\n\t\t\tid: this.generateId(),\n\t\t\tmethod: 'task/get',\n\t\t\tparams: { taskId }\n\t\t}\n\n\t\tconst response = await fetch(agent.endpoint, {\n\t\t\tmethod: 'POST',\n\t\t\theaders: {\n\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\t...(agent.authToken && { Authorization: `Bearer ${agent.authToken}` })\n\t\t\t},\n\t\t\tbody: JSON.stringify(request)\n\t\t})\n\n\t\tif (!response.ok) {\n\t\t\tthrow new Error(`HTTP error: ${response.status}`)\n\t\t}\n\n\t\tconst data = await response.json()\n\n\t\tif (data.error) {\n\t\t\tthrow new Error(`A2A error: ${data.error.message}`)\n\t\t}\n\n\t\treturn data.result as Task\n\t}\n\n\t// Cancel task\n\tasync cancelTask(agentId: string, taskId: string): Promise<void> {\n\t\tconst agent = this.agents.get(agentId)\n\t\tif (!agent) {\n\t\t\tthrow new Error(`Agent ${agentId} not found`)\n\t\t}\n\n\t\tconst request: JSONRPCRequest = {\n\t\t\tjsonrpc: '2.0',\n\t\t\tid: this.generateId(),\n\t\t\tmethod: 'task/cancel',\n\t\t\tparams: { taskId }\n\t\t}\n\n\t\tconst response = await fetch(agent.endpoint, {\n\t\t\tmethod: 'POST',\n\t\t\theaders: {\n\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\t...(agent.authToken && { Authorization: `Bearer ${agent.authToken}` })\n\t\t\t},\n\t\t\tbody: JSON.stringify(request)\n\t\t})\n\n\t\tif (!response.ok) {\n\t\t\tthrow new Error(`HTTP error: ${response.status}`)\n\t\t}\n\n\t\tconst data = await response.json()\n\n\t\tif (data.error) {\n\t\t\tthrow new Error(`A2A error: ${data.error.message}`)\n\t\t}\n\t}\n\n\t// Generate unique ID\n\tprivate generateId(): string {\n\t\treturn `req-${Date.now()}-${Math.random().toString(36).slice(2, 11)}`\n\t}\n\n\t// Multi-agent streaming message\n\tasync *streamMultiAgentMessage(hostEndpoint: string, subAgents: SubAgent[], message: Message, headers: object, sessionId?: string, signal?: AbortSignal): AsyncGenerator<StreamChunk, void, unknown> {\n\t\t// Build X-Sub-Agents headers: JSON array -> Base64\n\t\tconst subAgentsJson = JSON.stringify(subAgents)\n\t\t// Use Unicode-safe Base64 encoding\n\t\tconst xSubAgents = btoa(unescape(encodeURIComponent(subAgentsJson)))\n\n\t\tconst request: JSONRPCRequest = {\n\t\t\tjsonrpc: '2.0',\n\t\t\tid: this.generateId(),\n\t\t\tmethod: 'message/stream',\n\t\t\tparams: {\n\t\t\t\tmessage,\n\t\t\t\tsessionId\n\t\t\t}\n\t\t}\n\n\t\tconst response = await fetch(hostEndpoint, {\n\t\t\tmethod: 'POST',\n\t\t\theaders: {\n\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\tAccept: 'text/event-stream',\n\t\t\t\t'X-Sub-Agents': xSubAgents,\n\t\t\t\t// 'ai-jwt-token': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJhc2lhaW5mby5jb20iLCJzdWIiOiJkZW5nd2FuIiwiYXVkIjoiY29tLmFpZi5wYWFzLndlYlRva2VuIiwidXNlckluZm8iOiJ7XCJhbGlhc1wiOlwiZGVuZ3dhblwiLFwiYXV0b2luXCI6ZmFsc2UsXCJlbnZDb2RlXCI6XCJQUk9EXCIsXCJlbnZOYW1lXCI6XCLnlJ_kuqfnjq_looNcIixcImxhbmd1YWdlXCI6XCJ6aFwiLFwicGVybWlzc2lvbnNcIjpbXCJcIixcInBvcnRhbDpzeXN0ZW06cm9sZTpiaW5kXCIsXCJwb3J0YWw6ZGljdGlvbmFyeTpkYXRhOmFkZFwiLG51bGwsXCJhZ2VudFwiLFwicG9ydGFsOnN5c3RlbTp1c2VyOmRlbGV0ZVwiLFwicG9ydGFsOmRpY3Rpb25hcnk6ZGF0YTp1cGRhdGVcIixcImF1ZGl0TG9nL2xpc3RBdWRpdExvZ1wiLFwicG9ydGFsOmRpY3Rpb25hcnk6ZGF0YTpkZWxldGVcIixcInBvcnRhbDpzeXN0ZW06dXNlcjp1cGRhdGVcIixcInBvcnRhbDptY3A6YXVkaXRcIixcInBvcnRhbDptY3A6c2FmZWF1ZGl0XCIsXCJwb3J0YWw6bWNwOnRvb2xjb25maXJtXCIsXCJwb3J0YWw6c3lzdGVtOnRlbmFudDphZGRcIixcInBvcnRhbDpzeXN0ZW06dGVuYW50OnJlbGF0aW9uXCIsXCJwb3J0YWw6c3lzdGVtOm9wZXJhdGlvbjpwZXJtaXNzaW9uXCIsXCJwb3J0YWw6c3lzdGVtUGFyYW1ldGVyOmRlbGV0ZVwiLFwicG9ydGFsOmRpY3Rpb25hcnk6dXBkYXRlXCIsXCJwb3J0YWw6c3lzdGVtOnJvbGU6YWRkXCIsXCJ0ZW5hbnQvZ2V0VGVuYW50RHRvTGlzdFwiLFwicG9ydGFsOnN5c3RlbTpyb2xlOnVwZGF0ZVwiLFwicG9ydGFsOmFnZW50OmF1ZGl0XCIsXCJwb3J0YWw6bm90aWNlOnVwZGF0ZVwiLFwicG9ydGFsOnN5c3RlbTpyb2xlOmRlbGV0ZVwiLFwicG9ydGFsOnN5c3RlbTp1c2VyOmFkZFwiLFwibWVudS9nZXRNZW51QnlQYXJhbVwiLFwicG9ydGFsOmRpY3Rpb25hcnk6ZGVsZXRlXCIsXCJwb3J0YWw6c3lzdGVtOm9wZXJhdGlvbjpkZWxldGVcIixcInVzZXIvcXVlcnlVc2VyRHRvTGlzdFwiLFwicG9ydGFsOnN5c3RlbTptZW51OmFkZFwiLFwicG9ydGFsOnN5c3RlbVBhcmFtZXRlcjp1cGRhdGVcIixcInBvcnRhbDphZ2VudDptb2RlbGNoZWNrXCIsXCJwb3J0YWw6c3lzdGVtOm1lbnU6dXBkYXRlXCIsXCJyb2xlL3F1ZXJ5Um9sZUxpc3RcIixcInBvcnRhbDpzeXN0ZW06bWVudTpkZWxldGVcIixcInBvcnRhbDpub3RpY2U6YWRkXCIsXCJwb3J0YWw6c3lzdGVtOnRlbmFudDpkZWxldGVcIixcInBvcnRhbDpzeXN0ZW1QYXJhbWV0ZXI6YWRkXCIsXCJyb2xlUGVybWlzc2lvbnMvcXVlcnlNZW51UGVybWlzc2lvbkxpc3RcIixcInBvcnRhbDpzeXN0ZW06dGVuYW50OnVwZGF0ZVwiLFwibm90aWNlL2xpc3ROb3RpY2VcIl0sXCJwbGF0Zm9ybU1hbmFnZXJcIjp0cnVlLFwicm9sZUxpc3RcIjpbe1wiY3JlYXRlVGltZVwiOlwiMjAyNi0wMy0wMSAwMDowMDowMFwiLFwiaGFzRWRpdFwiOjEsXCJyb2xlQ29kZVwiOlwiY2FwX3Byb3ZpZGVyXCIsXCJyb2xlSWRcIjoxMixcInJvbGVOYW1lXCI6XCLog73lipvmj5DkvpvogIVcIixcInJvbGVUeXBlXCI6MX0se1wiY3JlYXRlVGltZVwiOlwiMjAyNi0wMy0wMSAwMDowMDowMFwiLFwiaGFzRWRpdFwiOjEsXCJyb2xlQ29kZVwiOlwidGVuYW50X2FkbWluXCIsXCJyb2xlSWRcIjo4LFwicm9sZU5hbWVcIjpcIuenn-aIt-euoeeQhuWRmFwiLFwicm9sZVR5cGVcIjoxfSx7XCJjcmVhdGVUaW1lXCI6XCIyMDIyLTA2LTI4IDAwOjAwOjAwXCIsXCJoYXNFZGl0XCI6MSxcInJvbGVDb2RlXCI6XCJyb2xlX2FkbWluXCIsXCJyb2xlSWRcIjoxLFwicm9sZU5hbWVcIjpcIui2hee6p-euoeeQhuWRmFwiLFwicm9sZVR5cGVcIjoxfV0sXCJ0ZW5hbnRDb2RlXCI6XCJ0ZW5hbnQtb25lXCIsXCJ0ZW5hbnRJZFwiOjUsXCJ0ZW5hbnROYW1lXCI6XCLkuIDnuqfov5DokKXnqbrpl7RcIixcInVzZXJJZFwiOjYsXCJ1c2VyTmFtZVwiOlwiZGVuZ3dhblwifSIsImV4cCI6MTc3Mzk5ODEzN30.7P8WVl3ji1G2unk0wOISJbF43ilcuzksOdSOQJNHGXM'\n\t\t\t\t// 'ai-jwt-token': authToken\n\t\t\t\t...headers\n\t\t\t},\n\t\t\tbody: JSON.stringify(request),\n\t\t\tsignal\n\t\t})\n\n\t\tif (!response.ok) {\n\t\t\tthrow new Error(`HTTP error: ${response.status}`)\n\t\t}\n\n\t\tif (!response.body) {\n\t\t\tthrow new Error('No response body')\n\t\t}\n\n\t\tconst reader = response.body.getReader()\n\t\tconst decoder = new TextDecoder()\n\t\tlet buffer = ''\n\n\t\ttry {\n\t\t\twhile (true) {\n\t\t\t\t// Check if the signal has been aborted\n\t\t\t\tif (signal?.aborted) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\tconst { done, value } = await reader.read()\n\t\t\t\tif (done) break\n\n\t\t\t\tbuffer += decoder.decode(value, { stream: true })\n\t\t\t\tconst lines = buffer.split('\\n')\n\t\t\t\tbuffer = lines.pop() || ''\n\n\t\t\t\tfor (const line of lines) {\n\t\t\t\t\tconst trimmed = line.trim()\n\t\t\t\t\tif (trimmed.startsWith('data: ')) {\n\t\t\t\t\t\tconst data = trimmed.slice(6)\n\t\t\t\t\t\tif (data === '[DONE]') return\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst chunk: StreamChunk = JSON.parse(data)\n\t\t\t\t\t\t\tyield chunk\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\tconsole.warn('Failed to parse SSE data:', data)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} finally {\n\t\t\treader.releaseLock()\n\t\t}\n\t}\n}\n\n// Singleton instance\nexport const a2aService = new A2AService()\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"a2aService.js","sources":["../../../../../../packages/components/touchchat/utils/a2aService.ts"],"sourcesContent":["import type { AgentConfig, Message, JSONRPCRequest, StreamChunk, Task, AgentCard, SubAgent } from '../src/types/a2a'\r\n// @/types/a2a\r\n\r\n// A2A Service - Handles communication with A2A agents\r\nexport class A2AService {\r\n\tprivate agents: Map<string, AgentConfig> = new Map()\r\n\r\n\t// Register an agent\r\n\tregisterAgent(config: AgentConfig): void {\r\n\t\tthis.agents.set(config.id, config)\r\n\t}\r\n\r\n\t// Unregister an agent\r\n\tunregisterAgent(agentId: string): void {\r\n\t\tthis.agents.delete(agentId)\r\n\t}\r\n\r\n\t// Get registered agent\r\n\tgetAgent(agentId: string): AgentConfig | undefined {\r\n\t\treturn this.agents.get(agentId)\r\n\t}\r\n\r\n\t// Get all registered agents\r\n\tgetAllAgents(): AgentConfig[] {\r\n\t\treturn Array.from(this.agents.values())\r\n\t}\r\n\r\n\t// Fetch agent card (agent discovery)\r\n\tasync fetchAgentCard(url: string): Promise<AgentCard> {\r\n\t\tconst response = await fetch(url, {\r\n\t\t\tmethod: 'GET',\r\n\t\t\theaders: {\r\n\t\t\t\tAccept: 'application/json'\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\tif (!response.ok) {\r\n\t\t\tthrow new Error(`Failed to fetch agent card: ${response.statusText}`)\r\n\t\t}\r\n\r\n\t\treturn response.json()\r\n\t}\r\n\r\n\t// Send message to agent (non-streaming)\r\n\tasync sendMessage(agentId: string, message: Message, sessionId?: string): Promise<Task> {\r\n\t\tconst agent = this.agents.get(agentId)\r\n\t\tif (!agent) {\r\n\t\t\tthrow new Error(`Agent ${agentId} not found`)\r\n\t\t}\r\n\r\n\t\tconst request: JSONRPCRequest = {\r\n\t\t\tjsonrpc: '2.0',\r\n\t\t\tid: this.generateId(),\r\n\t\t\tmethod: 'message/send',\r\n\t\t\tparams: {\r\n\t\t\t\tmessage,\r\n\t\t\t\tsessionId\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tconst response = await fetch(agent.endpoint, {\r\n\t\t\tmethod: 'POST',\r\n\t\t\theaders: {\r\n\t\t\t\t'Content-Type': 'application/json',\r\n\t\t\t\t...(agent.authToken && { Authorization: `Bearer ${agent.authToken}` })\r\n\t\t\t},\r\n\t\t\tbody: JSON.stringify(request)\r\n\t\t})\r\n\r\n\t\tif (!response.ok) {\r\n\t\t\tthrow new Error(`HTTP error: ${response.status}`)\r\n\t\t}\r\n\r\n\t\tconst data = await response.json()\r\n\r\n\t\tif (data.error) {\r\n\t\t\tthrow new Error(`A2A error: ${data.error.message}`)\r\n\t\t}\r\n\r\n\t\treturn data.result as Task\r\n\t}\r\n\r\n\t// Stream message to agent (for streaming responses)\r\n\tasync streamMessage(agentId: string, message: Message, sessionId?: string, signal?: AbortSignal): Promise<ReadableStream<StreamChunk>> {\r\n\t\tconst agent = this.agents.get(agentId)\r\n\t\tif (!agent) {\r\n\t\t\tthrow new Error(`Agent ${agentId} not found`)\r\n\t\t}\r\n\r\n\t\tconst request: JSONRPCRequest = {\r\n\t\t\tjsonrpc: '2.0',\r\n\t\t\tid: this.generateId(),\r\n\t\t\tmethod: 'message/stream',\r\n\t\t\tparams: {\r\n\t\t\t\tmessage,\r\n\t\t\t\tsessionId\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tconst response = await fetch(agent.endpoint, {\r\n\t\t\tmethod: 'POST',\r\n\t\t\theaders: {\r\n\t\t\t\t'Content-Type': 'application/json',\r\n\t\t\t\tAccept: 'text/event-stream',\r\n\t\t\t\t...(agent.authToken && { Authorization: `Bearer ${agent.authToken}` })\r\n\t\t\t},\r\n\t\t\tbody: JSON.stringify(request),\r\n\t\t\tsignal\r\n\t\t})\r\n\r\n\t\tif (!response.ok) {\r\n\t\t\tthrow new Error(`HTTP error: ${response.status}`)\r\n\t\t}\r\n\r\n\t\tif (!response.body) {\r\n\t\t\tthrow new Error('No response body')\r\n\t\t}\r\n\r\n\t\treturn new ReadableStream<StreamChunk>({\r\n\t\t\tasync start(controller) {\r\n\t\t\t\tconst reader = response.body!.getReader()\r\n\t\t\t\tconst decoder = new TextDecoder()\r\n\t\t\t\tlet buffer = ''\r\n\r\n\t\t\t\t// Handle abort signal\r\n\t\t\t\tif (signal) {\r\n\t\t\t\t\tsignal.addEventListener('abort', () => {\r\n\t\t\t\t\t\tcontroller.close()\r\n\t\t\t\t\t\treader.cancel()\r\n\t\t\t\t\t})\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttry {\r\n\t\t\t\t\tlet isDone = false\r\n\t\t\t\t\twhile (!isDone) {\r\n\t\t\t\t\t\t// Check if the signal has been aborted\r\n\t\t\t\t\t\tif (signal?.aborted) {\r\n\t\t\t\t\t\t\tcontroller.close()\r\n\t\t\t\t\t\t\treturn\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tconst { done, value } = await reader.read()\r\n\t\t\t\t\t\tif (done) {\r\n\t\t\t\t\t\t\tisDone = true\r\n\t\t\t\t\t\t\tcontroller.close()\r\n\t\t\t\t\t\t\tbreak\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tbuffer += decoder.decode(value, { stream: true })\r\n\t\t\t\t\t\tconst lines = buffer.split('\\n')\r\n\t\t\t\t\t\tbuffer = lines.pop() || ''\r\n\r\n\t\t\t\t\t\tconst fn = async (data: string) => {\r\n\t\t\t\t\t\t\tif (data === '[DONE]') {\r\n\t\t\t\t\t\t\t\tcontroller.close()\r\n\t\t\t\t\t\t\t\treturn\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\t\tconst chunk: StreamChunk = JSON.parse(data)\r\n\t\t\t\t\t\t\t\t// Add a small delay to simulate streaming effect\r\n\t\t\t\t\t\t\t\tawait new Promise(resolve => setTimeout(resolve, 50))\r\n\t\t\t\t\t\t\t\tcontroller.enqueue(chunk)\r\n\t\t\t\t\t\t\t} catch (e) {\r\n\t\t\t\t\t\t\t\tconsole.warn('Failed to parse SSE data:', data)\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tfor (const line of lines) {\r\n\t\t\t\t\t\t\tconst trimmed = line.trim()\r\n\t\t\t\t\t\t\tif (trimmed.startsWith('data:')) {\r\n\t\t\t\t\t\t\t\tconst data = trimmed.slice(5)\r\n\t\t\t\t\t\t\t\tawait fn(data)\r\n\t\t\t\t\t\t\t} else if (trimmed.startsWith('data: ')) {\r\n\t\t\t\t\t\t\t\tconst data = trimmed.slice(6)\r\n\t\t\t\t\t\t\t\tawait fn(data)\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t} finally {\r\n\t\t\t\t\treader.releaseLock()\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\r\n\t// Multi-agent message routing\r\n\tasync routeMessage(agentIds: string[], message: Message, mode: 'sequential' | 'parallel' = 'sequential'): Promise<Map<string, Task>> {\r\n\t\tconst results = new Map<string, Task>()\r\n\r\n\t\tif (mode === 'parallel') {\r\n\t\t\tconst promises = agentIds.map(async agentId => {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tconst task = await this.sendMessage(agentId, message)\r\n\t\t\t\t\treturn { agentId, task, error: null }\r\n\t\t\t\t} catch (error) {\r\n\t\t\t\t\treturn { agentId, task: null, error }\r\n\t\t\t\t}\r\n\t\t\t})\r\n\r\n\t\t\tconst settled = await Promise.all(promises)\r\n\t\t\tfor (const { agentId, task, error } of settled) {\r\n\t\t\t\tif (task) {\r\n\t\t\t\t\tresults.set(agentId, task)\r\n\t\t\t\t} else {\r\n\t\t\t\t\tconsole.error(`Error sending to agent ${agentId}:`, error)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\t// Sequential\r\n\t\t\tfor (const agentId of agentIds) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tconst task = await this.sendMessage(agentId, message)\r\n\t\t\t\t\tresults.set(agentId, task)\r\n\t\t\t\t} catch (error) {\r\n\t\t\t\t\tconsole.error(`Error sending to agent ${agentId}:`, error)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn results\r\n\t}\r\n\r\n\t// Get task status\r\n\tasync getTask(agentId: string, taskId: string): Promise<Task> {\r\n\t\tconst agent = this.agents.get(agentId)\r\n\t\tif (!agent) {\r\n\t\t\tthrow new Error(`Agent ${agentId} not found`)\r\n\t\t}\r\n\r\n\t\tconst request: JSONRPCRequest = {\r\n\t\t\tjsonrpc: '2.0',\r\n\t\t\tid: this.generateId(),\r\n\t\t\tmethod: 'task/get',\r\n\t\t\tparams: { taskId }\r\n\t\t}\r\n\r\n\t\tconst response = await fetch(agent.endpoint, {\r\n\t\t\tmethod: 'POST',\r\n\t\t\theaders: {\r\n\t\t\t\t'Content-Type': 'application/json',\r\n\t\t\t\t...(agent.authToken && { Authorization: `Bearer ${agent.authToken}` })\r\n\t\t\t},\r\n\t\t\tbody: JSON.stringify(request)\r\n\t\t})\r\n\r\n\t\tif (!response.ok) {\r\n\t\t\tthrow new Error(`HTTP error: ${response.status}`)\r\n\t\t}\r\n\r\n\t\tconst data = await response.json()\r\n\r\n\t\tif (data.error) {\r\n\t\t\tthrow new Error(`A2A error: ${data.error.message}`)\r\n\t\t}\r\n\r\n\t\treturn data.result as Task\r\n\t}\r\n\r\n\t// Cancel task\r\n\tasync cancelTask(agentId: string, taskId: string): Promise<void> {\r\n\t\tconst agent = this.agents.get(agentId)\r\n\t\tif (!agent) {\r\n\t\t\tthrow new Error(`Agent ${agentId} not found`)\r\n\t\t}\r\n\r\n\t\tconst request: JSONRPCRequest = {\r\n\t\t\tjsonrpc: '2.0',\r\n\t\t\tid: this.generateId(),\r\n\t\t\tmethod: 'task/cancel',\r\n\t\t\tparams: { taskId }\r\n\t\t}\r\n\r\n\t\tconst response = await fetch(agent.endpoint, {\r\n\t\t\tmethod: 'POST',\r\n\t\t\theaders: {\r\n\t\t\t\t'Content-Type': 'application/json',\r\n\t\t\t\t...(agent.authToken && { Authorization: `Bearer ${agent.authToken}` })\r\n\t\t\t},\r\n\t\t\tbody: JSON.stringify(request)\r\n\t\t})\r\n\r\n\t\tif (!response.ok) {\r\n\t\t\tthrow new Error(`HTTP error: ${response.status}`)\r\n\t\t}\r\n\r\n\t\tconst data = await response.json()\r\n\r\n\t\tif (data.error) {\r\n\t\t\tthrow new Error(`A2A error: ${data.error.message}`)\r\n\t\t}\r\n\t}\r\n\r\n\t// Generate unique ID\r\n\tprivate generateId(): string {\r\n\t\treturn `req-${Date.now()}-${Math.random().toString(36).slice(2, 11)}`\r\n\t}\r\n\r\n\t// Multi-agent streaming message\r\n\tasync *streamMultiAgentMessage(hostEndpoint: string, subAgents: SubAgent[], message: Message, headers: object, sessionId?: string, signal?: AbortSignal): AsyncGenerator<StreamChunk, void, unknown> {\r\n\t\t// Build X-Sub-Agents headers: JSON array -> Base64\r\n\t\tconst subAgentsJson = JSON.stringify(subAgents)\r\n\t\t// Use Unicode-safe Base64 encoding\r\n\t\tconst xSubAgents = btoa(unescape(encodeURIComponent(subAgentsJson)))\r\n\r\n\t\tconst request: JSONRPCRequest = {\r\n\t\t\tjsonrpc: '2.0',\r\n\t\t\tid: this.generateId(),\r\n\t\t\tmethod: 'message/stream',\r\n\t\t\tparams: {\r\n\t\t\t\tmessage,\r\n\t\t\t\tsessionId\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tconst response = await fetch(hostEndpoint, {\r\n\t\t\tmethod: 'POST',\r\n\t\t\theaders: {\r\n\t\t\t\t'Content-Type': 'application/json',\r\n\t\t\t\tAccept: 'text/event-stream',\r\n\t\t\t\t'X-Sub-Agents': xSubAgents,\r\n\t\t\t\t// 'ai-jwt-token': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJhc2lhaW5mby5jb20iLCJzdWIiOiJkZW5nd2FuIiwiYXVkIjoiY29tLmFpZi5wYWFzLndlYlRva2VuIiwidXNlckluZm8iOiJ7XCJhbGlhc1wiOlwiZGVuZ3dhblwiLFwiYXV0b2luXCI6ZmFsc2UsXCJlbnZDb2RlXCI6XCJQUk9EXCIsXCJlbnZOYW1lXCI6XCLnlJ_kuqfnjq_looNcIixcImxhbmd1YWdlXCI6XCJ6aFwiLFwicGVybWlzc2lvbnNcIjpbXCJcIixcInBvcnRhbDpzeXN0ZW06cm9sZTpiaW5kXCIsXCJwb3J0YWw6ZGljdGlvbmFyeTpkYXRhOmFkZFwiLG51bGwsXCJhZ2VudFwiLFwicG9ydGFsOnN5c3RlbTp1c2VyOmRlbGV0ZVwiLFwicG9ydGFsOmRpY3Rpb25hcnk6ZGF0YTp1cGRhdGVcIixcImF1ZGl0TG9nL2xpc3RBdWRpdExvZ1wiLFwicG9ydGFsOmRpY3Rpb25hcnk6ZGF0YTpkZWxldGVcIixcInBvcnRhbDpzeXN0ZW06dXNlcjp1cGRhdGVcIixcInBvcnRhbDptY3A6YXVkaXRcIixcInBvcnRhbDptY3A6c2FmZWF1ZGl0XCIsXCJwb3J0YWw6bWNwOnRvb2xjb25maXJtXCIsXCJwb3J0YWw6c3lzdGVtOnRlbmFudDphZGRcIixcInBvcnRhbDpzeXN0ZW06dGVuYW50OnJlbGF0aW9uXCIsXCJwb3J0YWw6c3lzdGVtOm9wZXJhdGlvbjpwZXJtaXNzaW9uXCIsXCJwb3J0YWw6c3lzdGVtUGFyYW1ldGVyOmRlbGV0ZVwiLFwicG9ydGFsOmRpY3Rpb25hcnk6dXBkYXRlXCIsXCJwb3J0YWw6c3lzdGVtOnJvbGU6YWRkXCIsXCJ0ZW5hbnQvZ2V0VGVuYW50RHRvTGlzdFwiLFwicG9ydGFsOnN5c3RlbTpyb2xlOnVwZGF0ZVwiLFwicG9ydGFsOmFnZW50OmF1ZGl0XCIsXCJwb3J0YWw6bm90aWNlOnVwZGF0ZVwiLFwicG9ydGFsOnN5c3RlbTpyb2xlOmRlbGV0ZVwiLFwicG9ydGFsOnN5c3RlbTp1c2VyOmFkZFwiLFwibWVudS9nZXRNZW51QnlQYXJhbVwiLFwicG9ydGFsOmRpY3Rpb25hcnk6ZGVsZXRlXCIsXCJwb3J0YWw6c3lzdGVtOm9wZXJhdGlvbjpkZWxldGVcIixcInVzZXIvcXVlcnlVc2VyRHRvTGlzdFwiLFwicG9ydGFsOnN5c3RlbTptZW51OmFkZFwiLFwicG9ydGFsOnN5c3RlbVBhcmFtZXRlcjp1cGRhdGVcIixcInBvcnRhbDphZ2VudDptb2RlbGNoZWNrXCIsXCJwb3J0YWw6c3lzdGVtOm1lbnU6dXBkYXRlXCIsXCJyb2xlL3F1ZXJ5Um9sZUxpc3RcIixcInBvcnRhbDpzeXN0ZW06bWVudTpkZWxldGVcIixcInBvcnRhbDpub3RpY2U6YWRkXCIsXCJwb3J0YWw6c3lzdGVtOnRlbmFudDpkZWxldGVcIixcInBvcnRhbDpzeXN0ZW1QYXJhbWV0ZXI6YWRkXCIsXCJyb2xlUGVybWlzc2lvbnMvcXVlcnlNZW51UGVybWlzc2lvbkxpc3RcIixcInBvcnRhbDpzeXN0ZW06dGVuYW50OnVwZGF0ZVwiLFwibm90aWNlL2xpc3ROb3RpY2VcIl0sXCJwbGF0Zm9ybU1hbmFnZXJcIjp0cnVlLFwicm9sZUxpc3RcIjpbe1wiY3JlYXRlVGltZVwiOlwiMjAyNi0wMy0wMSAwMDowMDowMFwiLFwiaGFzRWRpdFwiOjEsXCJyb2xlQ29kZVwiOlwiY2FwX3Byb3ZpZGVyXCIsXCJyb2xlSWRcIjoxMixcInJvbGVOYW1lXCI6XCLog73lipvmj5DkvpvogIVcIixcInJvbGVUeXBlXCI6MX0se1wiY3JlYXRlVGltZVwiOlwiMjAyNi0wMy0wMSAwMDowMDowMFwiLFwiaGFzRWRpdFwiOjEsXCJyb2xlQ29kZVwiOlwidGVuYW50X2FkbWluXCIsXCJyb2xlSWRcIjo4LFwicm9sZU5hbWVcIjpcIuenn-aIt-euoeeQhuWRmFwiLFwicm9sZVR5cGVcIjoxfSx7XCJjcmVhdGVUaW1lXCI6XCIyMDIyLTA2LTI4IDAwOjAwOjAwXCIsXCJoYXNFZGl0XCI6MSxcInJvbGVDb2RlXCI6XCJyb2xlX2FkbWluXCIsXCJyb2xlSWRcIjoxLFwicm9sZU5hbWVcIjpcIui2hee6p-euoeeQhuWRmFwiLFwicm9sZVR5cGVcIjoxfV0sXCJ0ZW5hbnRDb2RlXCI6XCJ0ZW5hbnQtb25lXCIsXCJ0ZW5hbnRJZFwiOjUsXCJ0ZW5hbnROYW1lXCI6XCLkuIDnuqfov5DokKXnqbrpl7RcIixcInVzZXJJZFwiOjYsXCJ1c2VyTmFtZVwiOlwiZGVuZ3dhblwifSIsImV4cCI6MTc3Mzk5ODEzN30.7P8WVl3ji1G2unk0wOISJbF43ilcuzksOdSOQJNHGXM'\r\n\t\t\t\t// 'ai-jwt-token': authToken\r\n\t\t\t\t...headers\r\n\t\t\t},\r\n\t\t\tbody: JSON.stringify(request),\r\n\t\t\tsignal\r\n\t\t})\r\n\r\n\t\tif (!response.ok) {\r\n\t\t\tthrow new Error(`HTTP error: ${response.status}`)\r\n\t\t}\r\n\r\n\t\tif (!response.body) {\r\n\t\t\tthrow new Error('No response body')\r\n\t\t}\r\n\r\n\t\tconst reader = response.body.getReader()\r\n\t\tconst decoder = new TextDecoder()\r\n\t\tlet buffer = ''\r\n\r\n\t\ttry {\r\n\t\t\twhile (true) {\r\n\t\t\t\t// Check if the signal has been aborted\r\n\t\t\t\tif (signal?.aborted) {\r\n\t\t\t\t\treturn\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconst { done, value } = await reader.read()\r\n\t\t\t\tif (done) break\r\n\r\n\t\t\t\tbuffer += decoder.decode(value, { stream: true })\r\n\t\t\t\tconst lines = buffer.split('\\n')\r\n\t\t\t\tbuffer = lines.pop() || ''\r\n\r\n\t\t\t\tfor (const line of lines) {\r\n\t\t\t\t\tconst trimmed = line.trim()\r\n\t\t\t\t\tif (trimmed.startsWith('data: ')) {\r\n\t\t\t\t\t\tconst data = trimmed.slice(6)\r\n\t\t\t\t\t\tif (data === '[DONE]') return\r\n\r\n\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\tconst chunk: StreamChunk = JSON.parse(data)\r\n\t\t\t\t\t\t\tyield chunk\r\n\t\t\t\t\t\t} catch (e) {\r\n\t\t\t\t\t\t\tconsole.warn('Failed to parse SSE data:', data)\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} finally {\r\n\t\t\treader.releaseLock()\r\n\t\t}\r\n\t}\r\n}\r\n\r\n// Singleton instance\r\nexport const a2aService = new A2AService()\r\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetchStream.js","sources":["../../../../../../packages/components/touchchat/utils/fetchStream.ts"],"sourcesContent":["// 定义 FetchStream 所需的选项接口\ninterface FetchStreamOptions {\n\turl: string\n\trequestInit?: RequestInit\n\tonmessage?: (line: string, index: number) => void\n\tondone?: (allDataText: string) => void\n\tonerror?: (response: Response | Error) => void\n\tonabort?: () => void\n\tontimeout?: () => void\n}\n\nconst decoder = new TextDecoder('utf-8')\nlet partial = '' // 未完成的字节\n\n// 改进的handleChunk函数,更安全地处理UTF-8字符\nconst handleChunk = (chunk: Uint8Array): string => {\n\t// 将新数据块拼接到剩余字节\n\tconst data = partial + decoder.decode(chunk, { stream: true })\n\n\t// 查找最后一个完整行结束位置\n\tconst lastNewline = data.lastIndexOf('\\n')\n\n\tif (lastNewline >= 0) {\n\t\tpartial = data.slice(lastNewline + 1) // 保留不完整部分\n\t\treturn data.slice(0, lastNewline + 1) // 返回完整行\n\t}\n\n\t// 如果没有找到换行符,保留全部数据\n\tpartial = data\n\treturn ''\n}\n\n// FetchStream 类,用于处理流式请求\nexport class FetchStream {\n\turl: string\n\trequestInit: RequestInit\n\tonmessage?: (line: string, index: number) => void\n\tondone?: (allDataText: string) => void\n\tonerror?: (response: Response | Error) => void\n\tonabort?: () => void\n\tontimeout?: () => void\n\tcontroller: AbortController | null\n\ttimer: ReturnType<typeof setTimeout> | null\n\n\tconstructor(options: FetchStreamOptions) {\n\t\tif (!options.url) {\n\t\t\tthrow new Error('url argument must be provided')\n\t\t}\n\t\tthis.url = options.url\n\t\tthis.requestInit = options.requestInit || {}\n\t\tthis.onmessage = options.onmessage\n\t\tthis.ondone = options.ondone\n\t\tthis.onerror = options.onerror\n\t\tthis.onabort = options.onabort\n\t\tthis.ontimeout = options.ontimeout\n\n\t\tthis.controller = new AbortController()\n\t\tthis.timer = null\n\n\t\tthis.createFetchRequest()\n\t}\n\n\t// 创建 fetch 请求\n\tasync createFetchRequest(): Promise<void> {\n\t\tthis.timeout()\n\n\t\ttry {\n\t\t\tconst response = await fetch(this.url, {\n\t\t\t\tmethod: 'POST',\n\t\t\t\tsignal: this.controller?.signal,\n\t\t\t\t...this.requestInit\n\t\t\t})\n\n\t\t\tif (this.timer) {\n\t\t\t\tclearTimeout(this.timer)\n\t\t\t}\n\n\t\t\tif (response.status === 200) {\n\t\t\t\tif (!response.body) {\n\t\t\t\t\tthrow new Error('Response body is null')\n\t\t\t\t}\n\t\t\t\tconst reader = response.body.getReader()\n\t\t\t\tlet allDataText = ''\n\t\t\t\tlet buffer = ''\n\t\t\t\tlet index = 0\n\n\t\t\t\tlet shouldContinue = true\n\t\t\t\twhile (shouldContinue) {\n\t\t\t\t\tconst { value, done } = await reader.read()\n\t\t\t\t\tif (done) {\n\t\t\t\t\t\tshouldContinue = false\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\tif (value) {\n\t\t\t\t\t\tconst dataText = handleChunk(value)\n\n\t\t\t\t\t\tif (dataText) {\n\t\t\t\t\t\t\tallDataText += dataText\n\t\t\t\t\t\t\tbuffer += dataText\n\n\t\t\t\t\t\t\t// 处理完整行\n\t\t\t\t\t\t\tlet lineEndIndex\n\t\t\t\t\t\t\twhile ((lineEndIndex = buffer.indexOf('\\n')) >= 0) {\n\t\t\t\t\t\t\t\tconst line = buffer.slice(0, lineEndIndex)\n\t\t\t\t\t\t\t\tbuffer = buffer.slice(lineEndIndex + 1)\n\t\t\t\t\t\t\t\tthis.onmessage?.(line, index++)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// 处理剩余数据\n\t\t\t\tif (buffer.length > 0) {\n\t\t\t\t\tthis.onmessage?.(buffer, index++)\n\t\t\t\t}\n\n\t\t\t\tthis.ondone?.(allDataText)\n\t\t\t} else {\n\t\t\t\t// 读取响应体中的错误信息\n\t\t\t\tconst errorBody = await response.text()\n\t\t\t\tthrow new Error(errorBody || `请求失败: ${response.status} ${response.statusText}`)\n\t\t\t}\n\t\t} catch (response) {\n\t\t\t// 如果是用户主动中止的错误,不调用onerror\n\t\t\tconst isAbortError = response instanceof Error && response.name === 'AbortError'\n\n\t\t\t// 如果不是用户主动中止的错误,则调用 onerror\n\t\t\tif (!isAbortError) {\n\t\t\t\tthis.onerror?.(response instanceof Response ? response : new Error(String(response)))\n\t\t\t} else if (this.onabort) {\n\t\t\t\t// 如果是中止错误且定义了 onabort 回调,则调用它\n\t\t\t\tthis.onabort()\n\t\t\t}\n\t\t}\n\t}\n\n\t// 中断 fetch 请求\n\tabort(): void {\n\t\ttry {\n\t\t\tthis.controller?.abort()\n\t\t\tthis.onabort?.()\n\t\t} catch (error) {\n\t\t\tconsole.error('Abort error:', error)\n\t\t}\n\t}\n\n\t// 超时中断\n\ttimeout(time: number = 60000): void {\n\t\tthis.timer = setTimeout(() => {\n\t\t\tthis.abort()\n\t\t\tthis.ontimeout?.()\n\t\t}, time)\n\t}\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fetchStream.js","sources":["../../../../../../packages/components/touchchat/utils/fetchStream.ts"],"sourcesContent":["// 定义 FetchStream 所需的选项接口\r\ninterface FetchStreamOptions {\r\n\turl: string\r\n\trequestInit?: RequestInit\r\n\tonmessage?: (line: string, index: number) => void\r\n\tondone?: (allDataText: string) => void\r\n\tonerror?: (response: Response | Error) => void\r\n\tonabort?: () => void\r\n\tontimeout?: () => void\r\n}\r\n\r\nconst decoder = new TextDecoder('utf-8')\r\nlet partial = '' // 未完成的字节\r\n\r\n// 改进的handleChunk函数,更安全地处理UTF-8字符\r\nconst handleChunk = (chunk: Uint8Array): string => {\r\n\t// 将新数据块拼接到剩余字节\r\n\tconst data = partial + decoder.decode(chunk, { stream: true })\r\n\r\n\t// 查找最后一个完整行结束位置\r\n\tconst lastNewline = data.lastIndexOf('\\n')\r\n\r\n\tif (lastNewline >= 0) {\r\n\t\tpartial = data.slice(lastNewline + 1) // 保留不完整部分\r\n\t\treturn data.slice(0, lastNewline + 1) // 返回完整行\r\n\t}\r\n\r\n\t// 如果没有找到换行符,保留全部数据\r\n\tpartial = data\r\n\treturn ''\r\n}\r\n\r\n// FetchStream 类,用于处理流式请求\r\nexport class FetchStream {\r\n\turl: string\r\n\trequestInit: RequestInit\r\n\tonmessage?: (line: string, index: number) => void\r\n\tondone?: (allDataText: string) => void\r\n\tonerror?: (response: Response | Error) => void\r\n\tonabort?: () => void\r\n\tontimeout?: () => void\r\n\tcontroller: AbortController | null\r\n\ttimer: ReturnType<typeof setTimeout> | null\r\n\r\n\tconstructor(options: FetchStreamOptions) {\r\n\t\tif (!options.url) {\r\n\t\t\tthrow new Error('url argument must be provided')\r\n\t\t}\r\n\t\tthis.url = options.url\r\n\t\tthis.requestInit = options.requestInit || {}\r\n\t\tthis.onmessage = options.onmessage\r\n\t\tthis.ondone = options.ondone\r\n\t\tthis.onerror = options.onerror\r\n\t\tthis.onabort = options.onabort\r\n\t\tthis.ontimeout = options.ontimeout\r\n\r\n\t\tthis.controller = new AbortController()\r\n\t\tthis.timer = null\r\n\r\n\t\tthis.createFetchRequest()\r\n\t}\r\n\r\n\t// 创建 fetch 请求\r\n\tasync createFetchRequest(): Promise<void> {\r\n\t\tthis.timeout()\r\n\r\n\t\ttry {\r\n\t\t\tconst response = await fetch(this.url, {\r\n\t\t\t\tmethod: 'POST',\r\n\t\t\t\tsignal: this.controller?.signal,\r\n\t\t\t\t...this.requestInit\r\n\t\t\t})\r\n\r\n\t\t\tif (this.timer) {\r\n\t\t\t\tclearTimeout(this.timer)\r\n\t\t\t}\r\n\r\n\t\t\tif (response.status === 200) {\r\n\t\t\t\tif (!response.body) {\r\n\t\t\t\t\tthrow new Error('Response body is null')\r\n\t\t\t\t}\r\n\t\t\t\tconst reader = response.body.getReader()\r\n\t\t\t\tlet allDataText = ''\r\n\t\t\t\tlet buffer = ''\r\n\t\t\t\tlet index = 0\r\n\r\n\t\t\t\tlet shouldContinue = true\r\n\t\t\t\twhile (shouldContinue) {\r\n\t\t\t\t\tconst { value, done } = await reader.read()\r\n\t\t\t\t\tif (done) {\r\n\t\t\t\t\t\tshouldContinue = false\r\n\t\t\t\t\t\tbreak\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (value) {\r\n\t\t\t\t\t\tconst dataText = handleChunk(value)\r\n\r\n\t\t\t\t\t\tif (dataText) {\r\n\t\t\t\t\t\t\tallDataText += dataText\r\n\t\t\t\t\t\t\tbuffer += dataText\r\n\r\n\t\t\t\t\t\t\t// 处理完整行\r\n\t\t\t\t\t\t\tlet lineEndIndex\r\n\t\t\t\t\t\t\twhile ((lineEndIndex = buffer.indexOf('\\n')) >= 0) {\r\n\t\t\t\t\t\t\t\tconst line = buffer.slice(0, lineEndIndex)\r\n\t\t\t\t\t\t\t\tbuffer = buffer.slice(lineEndIndex + 1)\r\n\t\t\t\t\t\t\t\tthis.onmessage?.(line, index++)\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// 处理剩余数据\r\n\t\t\t\tif (buffer.length > 0) {\r\n\t\t\t\t\tthis.onmessage?.(buffer, index++)\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.ondone?.(allDataText)\r\n\t\t\t} else {\r\n\t\t\t\t// 读取响应体中的错误信息\r\n\t\t\t\tconst errorBody = await response.text()\r\n\t\t\t\tthrow new Error(errorBody || `请求失败: ${response.status} ${response.statusText}`)\r\n\t\t\t}\r\n\t\t} catch (response) {\r\n\t\t\t// 如果是用户主动中止的错误,不调用onerror\r\n\t\t\tconst isAbortError = response instanceof Error && response.name === 'AbortError'\r\n\r\n\t\t\t// 如果不是用户主动中止的错误,则调用 onerror\r\n\t\t\tif (!isAbortError) {\r\n\t\t\t\tthis.onerror?.(response instanceof Response ? response : new Error(String(response)))\r\n\t\t\t} else if (this.onabort) {\r\n\t\t\t\t// 如果是中止错误且定义了 onabort 回调,则调用它\r\n\t\t\t\tthis.onabort()\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// 中断 fetch 请求\r\n\tabort(): void {\r\n\t\ttry {\r\n\t\t\tthis.controller?.abort()\r\n\t\t\tthis.onabort?.()\r\n\t\t} catch (error) {\r\n\t\t\tconsole.error('Abort error:', error)\r\n\t\t}\r\n\t}\r\n\r\n\t// 超时中断\r\n\ttimeout(time: number = 60000): void {\r\n\t\tthis.timer = setTimeout(() => {\r\n\t\t\tthis.abort()\r\n\t\t\tthis.ontimeout?.()\r\n\t\t}, time)\r\n\t}\r\n}\r\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,83 +1,83 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@touchvue/chat",
|
|
3
|
-
"version": "1.0.0-beta.
|
|
4
|
-
"description": "TouchVue Chat Component Library",
|
|
5
|
-
"main": "lib/index.js",
|
|
6
|
-
"module": "es/index.mjs",
|
|
7
|
-
"types": "types/index.d.ts",
|
|
8
|
-
"style": "theme/index.css",
|
|
9
|
-
"exports": {
|
|
10
|
-
".": {
|
|
11
|
-
"types": "./es/index.d.ts",
|
|
12
|
-
"import": "./es/index.mjs",
|
|
13
|
-
"require": "./lib/index.js"
|
|
14
|
-
},
|
|
15
|
-
"./global": {
|
|
16
|
-
"types": "./global.d.ts"
|
|
17
|
-
},
|
|
18
|
-
"./es": {
|
|
19
|
-
"types": "./es/index.d.ts",
|
|
20
|
-
"import": "./es/index.mjs"
|
|
21
|
-
},
|
|
22
|
-
"./lib": {
|
|
23
|
-
"types": "./lib/index.d.ts",
|
|
24
|
-
"require": "./lib/index.js"
|
|
25
|
-
},
|
|
26
|
-
"./es/*.mjs": {
|
|
27
|
-
"types": "./es/*.d.ts",
|
|
28
|
-
"import": "./es/*.mjs"
|
|
29
|
-
},
|
|
30
|
-
"./es/*": {
|
|
31
|
-
"types": [
|
|
32
|
-
"./es/*.d.ts",
|
|
33
|
-
"./es/*/index.d.ts"
|
|
34
|
-
],
|
|
35
|
-
"import": "./es/*.mjs"
|
|
36
|
-
},
|
|
37
|
-
"./lib/*.js": {
|
|
38
|
-
"types": "./lib/*.d.ts",
|
|
39
|
-
"require": "./lib/*.js"
|
|
40
|
-
},
|
|
41
|
-
"./lib/*": {
|
|
42
|
-
"types": [
|
|
43
|
-
"./lib/*.d.ts",
|
|
44
|
-
"./lib/*/index.d.ts"
|
|
45
|
-
],
|
|
46
|
-
"require": "./lib/*.js"
|
|
47
|
-
},
|
|
48
|
-
"./resolver": {
|
|
49
|
-
"types": "./es/resolver/index.d.ts",
|
|
50
|
-
"import": "./es/resolver/index.mjs",
|
|
51
|
-
"require": "./lib/resolver/index.js"
|
|
52
|
-
},
|
|
53
|
-
"./*": "./*"
|
|
54
|
-
},
|
|
55
|
-
"files": [
|
|
56
|
-
"lib",
|
|
57
|
-
"es",
|
|
58
|
-
"theme",
|
|
59
|
-
"types",
|
|
60
|
-
"global.d.ts",
|
|
61
|
-
"README.md"
|
|
62
|
-
],
|
|
63
|
-
"sideEffects": [
|
|
64
|
-
"*.css",
|
|
65
|
-
"*.less",
|
|
66
|
-
"theme/**/*"
|
|
67
|
-
],
|
|
68
|
-
"keywords": [
|
|
69
|
-
"vue",
|
|
70
|
-
"vue3",
|
|
71
|
-
"component",
|
|
72
|
-
"ui",
|
|
73
|
-
"library"
|
|
74
|
-
],
|
|
75
|
-
"author": "",
|
|
76
|
-
"license": "ISC",
|
|
77
|
-
"peerDependencies": {
|
|
78
|
-
"vue": "^3.3.0"
|
|
79
|
-
},
|
|
80
|
-
"publishConfig": {
|
|
81
|
-
"access": "public"
|
|
82
|
-
}
|
|
83
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@touchvue/chat",
|
|
3
|
+
"version": "1.0.0-beta.50",
|
|
4
|
+
"description": "TouchVue Chat Component Library",
|
|
5
|
+
"main": "lib/index.js",
|
|
6
|
+
"module": "es/index.mjs",
|
|
7
|
+
"types": "types/index.d.ts",
|
|
8
|
+
"style": "theme/index.css",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./es/index.d.ts",
|
|
12
|
+
"import": "./es/index.mjs",
|
|
13
|
+
"require": "./lib/index.js"
|
|
14
|
+
},
|
|
15
|
+
"./global": {
|
|
16
|
+
"types": "./global.d.ts"
|
|
17
|
+
},
|
|
18
|
+
"./es": {
|
|
19
|
+
"types": "./es/index.d.ts",
|
|
20
|
+
"import": "./es/index.mjs"
|
|
21
|
+
},
|
|
22
|
+
"./lib": {
|
|
23
|
+
"types": "./lib/index.d.ts",
|
|
24
|
+
"require": "./lib/index.js"
|
|
25
|
+
},
|
|
26
|
+
"./es/*.mjs": {
|
|
27
|
+
"types": "./es/*.d.ts",
|
|
28
|
+
"import": "./es/*.mjs"
|
|
29
|
+
},
|
|
30
|
+
"./es/*": {
|
|
31
|
+
"types": [
|
|
32
|
+
"./es/*.d.ts",
|
|
33
|
+
"./es/*/index.d.ts"
|
|
34
|
+
],
|
|
35
|
+
"import": "./es/*.mjs"
|
|
36
|
+
},
|
|
37
|
+
"./lib/*.js": {
|
|
38
|
+
"types": "./lib/*.d.ts",
|
|
39
|
+
"require": "./lib/*.js"
|
|
40
|
+
},
|
|
41
|
+
"./lib/*": {
|
|
42
|
+
"types": [
|
|
43
|
+
"./lib/*.d.ts",
|
|
44
|
+
"./lib/*/index.d.ts"
|
|
45
|
+
],
|
|
46
|
+
"require": "./lib/*.js"
|
|
47
|
+
},
|
|
48
|
+
"./resolver": {
|
|
49
|
+
"types": "./es/resolver/index.d.ts",
|
|
50
|
+
"import": "./es/resolver/index.mjs",
|
|
51
|
+
"require": "./lib/resolver/index.js"
|
|
52
|
+
},
|
|
53
|
+
"./*": "./*"
|
|
54
|
+
},
|
|
55
|
+
"files": [
|
|
56
|
+
"lib",
|
|
57
|
+
"es",
|
|
58
|
+
"theme",
|
|
59
|
+
"types",
|
|
60
|
+
"global.d.ts",
|
|
61
|
+
"README.md"
|
|
62
|
+
],
|
|
63
|
+
"sideEffects": [
|
|
64
|
+
"*.css",
|
|
65
|
+
"*.less",
|
|
66
|
+
"theme/**/*"
|
|
67
|
+
],
|
|
68
|
+
"keywords": [
|
|
69
|
+
"vue",
|
|
70
|
+
"vue3",
|
|
71
|
+
"component",
|
|
72
|
+
"ui",
|
|
73
|
+
"library"
|
|
74
|
+
],
|
|
75
|
+
"author": "",
|
|
76
|
+
"license": "ISC",
|
|
77
|
+
"peerDependencies": {
|
|
78
|
+
"vue": "^3.3.0"
|
|
79
|
+
},
|
|
80
|
+
"publishConfig": {
|
|
81
|
+
"access": "public"
|
|
82
|
+
}
|
|
83
|
+
}
|