@touchvue/chat 1.0.0-beta.55 → 1.0.0-beta.57

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. package/es/index.mjs.map +1 -1
  2. package/es/node_modules/.pnpm/{dompurify@3.4.3 → dompurify@3.4.11}/node_modules/dompurify/dist/purify.es.mjs +939 -226
  3. package/es/node_modules/.pnpm/dompurify@3.4.11/node_modules/dompurify/dist/purify.es.mjs.map +1 -0
  4. package/es/node_modules/.pnpm/{linkify-it@5.0.0 → linkify-it@5.0.2}/node_modules/linkify-it/index.mjs +109 -105
  5. package/es/node_modules/.pnpm/linkify-it@5.0.2/node_modules/linkify-it/index.mjs.map +1 -0
  6. package/es/node_modules/.pnpm/{linkify-it@5.0.0 → linkify-it@5.0.2}/node_modules/linkify-it/lib/re.mjs +34 -30
  7. package/es/node_modules/.pnpm/linkify-it@5.0.2/node_modules/linkify-it/lib/re.mjs.map +1 -0
  8. package/es/node_modules/.pnpm/{markdown-it-deflist@3.0.0 → markdown-it-deflist@3.0.1}/node_modules/markdown-it-deflist/index.mjs +2 -1
  9. package/es/node_modules/.pnpm/markdown-it-deflist@3.0.1/node_modules/markdown-it-deflist/index.mjs.map +1 -0
  10. package/es/node_modules/.pnpm/markdown-it@14.1.0/node_modules/markdown-it/lib/index.mjs +1 -1
  11. package/es/package.json.mjs +1 -1
  12. package/es/packages/components/touchchat/component/AiRobot/face.vue2.mjs.map +1 -1
  13. package/es/packages/components/touchchat/component/AiRobot/letter.vue2.mjs +1 -1
  14. package/es/packages/components/touchchat/component/AiRobot/letter.vue2.mjs.map +1 -1
  15. package/es/packages/components/touchchat/component/AiRobot/meterialPrepare.vue2.mjs.map +1 -1
  16. package/es/packages/components/touchchat/component/AiRobot/start.vue2.mjs.map +1 -1
  17. package/es/packages/components/touchchat/component/CardView.vue2.mjs.map +1 -1
  18. package/es/packages/components/touchchat/component/ImageFile.vue2.mjs.map +1 -1
  19. package/es/packages/components/touchchat/component/ImageView.vue2.mjs.map +1 -1
  20. package/es/packages/components/touchchat/component/LinkView.vue2.mjs.map +1 -1
  21. package/es/packages/components/touchchat/component/MarkLayer.vue2.mjs.map +1 -1
  22. package/es/packages/components/touchchat/component/ModuleSelect.vue2.mjs.map +1 -1
  23. package/es/packages/components/touchchat/component/Screenshot.vue2.mjs.map +1 -1
  24. package/es/packages/components/touchchat/component/ThoughtChain.vue2.mjs.map +1 -1
  25. package/es/packages/components/touchchat/component/UploadView.vue2.mjs +2 -2
  26. package/es/packages/components/touchchat/component/UploadView.vue2.mjs.map +1 -1
  27. package/es/packages/components/touchchat/component/UploadView_api.vue2.mjs.map +1 -1
  28. package/es/packages/components/touchchat/index.mjs.map +1 -1
  29. package/es/packages/components/touchchat/src/AiChat/Chat/TouchChat.mjs.map +1 -1
  30. package/es/packages/components/touchchat/src/AiChat/Chat/useChat.mjs +7 -39
  31. package/es/packages/components/touchchat/src/AiChat/Chat/useChat.mjs.map +1 -1
  32. package/es/packages/components/touchchat/src/AiChat/Chat/useMessageRender.mjs +1 -1
  33. package/es/packages/components/touchchat/src/AiChat/Chat/useSSE.mjs +26 -16
  34. package/es/packages/components/touchchat/src/AiChat/Chat/useSSE.mjs.map +1 -1
  35. package/es/packages/components/touchchat/src/AiChat/Chat/useScroll.mjs.map +1 -1
  36. package/es/packages/components/touchchat/src/AiChat/ChatInput.vue2.mjs +16 -4
  37. package/es/packages/components/touchchat/src/AiChat/ChatInput.vue2.mjs.map +1 -1
  38. package/es/packages/components/touchchat/src/AiChat/HistoryList.vue2.mjs.map +1 -1
  39. package/es/packages/components/touchchat/src/AiChat/HistorySidebar.vue2.mjs.map +1 -1
  40. package/es/packages/components/touchchat/src/AiChat/SiderBarView.vue2.mjs.map +1 -1
  41. package/es/packages/components/touchchat/src/AiChat/TouchAgent.vue2.mjs +139 -81
  42. package/es/packages/components/touchchat/src/AiChat/TouchAgent.vue2.mjs.map +1 -1
  43. package/es/packages/components/touchchat/src/index.vue2.mjs +11 -1
  44. package/es/packages/components/touchchat/src/index.vue2.mjs.map +1 -1
  45. package/es/packages/components/touchchat/src/types/a2a.mjs.map +1 -1
  46. package/es/packages/components/touchchat/utils/a2aService.mjs +204 -104
  47. package/es/packages/components/touchchat/utils/a2aService.mjs.map +1 -1
  48. package/es/packages/components/touchchat/utils/chatRobot.mjs.map +1 -1
  49. package/es/packages/components/touchchat/utils/deepCloneDom.mjs.map +1 -1
  50. package/es/packages/components/touchchat/utils/hight-it.mjs.map +1 -1
  51. package/es/packages/components/touchchat/utils/markdown.mjs +23 -6
  52. package/es/packages/components/touchchat/utils/markdown.mjs.map +1 -1
  53. package/es/packages/components/touchchat/utils/socket.mjs.map +1 -1
  54. package/es/packages/components/touchchat/utils/tools.mjs +4 -4
  55. package/es/packages/components/touchchat/utils/tools.mjs.map +1 -1
  56. package/es/packages/components/touchchat/utils/uuid.mjs.map +1 -1
  57. package/es/packages/utils/config.mjs.map +1 -1
  58. package/es/packages/utils/types.mjs.map +1 -1
  59. package/lib/index.js.map +1 -1
  60. package/lib/node_modules/.pnpm/{dompurify@3.4.3 → dompurify@3.4.11}/node_modules/dompurify/dist/purify.es.js +939 -226
  61. package/lib/node_modules/.pnpm/dompurify@3.4.11/node_modules/dompurify/dist/purify.es.js.map +1 -0
  62. package/lib/node_modules/.pnpm/{linkify-it@5.0.0 → linkify-it@5.0.2}/node_modules/linkify-it/index.js +109 -105
  63. package/lib/node_modules/.pnpm/linkify-it@5.0.2/node_modules/linkify-it/index.js.map +1 -0
  64. package/lib/node_modules/.pnpm/{linkify-it@5.0.0 → linkify-it@5.0.2}/node_modules/linkify-it/lib/re.js +34 -30
  65. package/lib/node_modules/.pnpm/linkify-it@5.0.2/node_modules/linkify-it/lib/re.js.map +1 -0
  66. package/lib/node_modules/.pnpm/{markdown-it-deflist@3.0.0 → markdown-it-deflist@3.0.1}/node_modules/markdown-it-deflist/index.js +2 -1
  67. package/lib/node_modules/.pnpm/markdown-it-deflist@3.0.1/node_modules/markdown-it-deflist/index.js.map +1 -0
  68. package/lib/node_modules/.pnpm/markdown-it@14.1.0/node_modules/markdown-it/lib/index.js +1 -1
  69. package/lib/package.json.js +1 -1
  70. package/lib/packages/components/touchchat/component/AiRobot/face.vue2.js.map +1 -1
  71. package/lib/packages/components/touchchat/component/AiRobot/letter.vue2.js +1 -1
  72. package/lib/packages/components/touchchat/component/AiRobot/letter.vue2.js.map +1 -1
  73. package/lib/packages/components/touchchat/component/AiRobot/meterialPrepare.vue2.js.map +1 -1
  74. package/lib/packages/components/touchchat/component/AiRobot/start.vue2.js.map +1 -1
  75. package/lib/packages/components/touchchat/component/CardView.vue2.js.map +1 -1
  76. package/lib/packages/components/touchchat/component/ImageFile.vue2.js.map +1 -1
  77. package/lib/packages/components/touchchat/component/ImageView.vue2.js.map +1 -1
  78. package/lib/packages/components/touchchat/component/LinkView.vue2.js.map +1 -1
  79. package/lib/packages/components/touchchat/component/MarkLayer.vue2.js.map +1 -1
  80. package/lib/packages/components/touchchat/component/ModuleSelect.vue2.js.map +1 -1
  81. package/lib/packages/components/touchchat/component/Screenshot.vue2.js.map +1 -1
  82. package/lib/packages/components/touchchat/component/ThoughtChain.vue2.js.map +1 -1
  83. package/lib/packages/components/touchchat/component/UploadView.vue2.js +2 -2
  84. package/lib/packages/components/touchchat/component/UploadView.vue2.js.map +1 -1
  85. package/lib/packages/components/touchchat/component/UploadView_api.vue2.js.map +1 -1
  86. package/lib/packages/components/touchchat/index.js.map +1 -1
  87. package/lib/packages/components/touchchat/src/AiChat/Chat/TouchChat.js.map +1 -1
  88. package/lib/packages/components/touchchat/src/AiChat/Chat/useChat.js +6 -38
  89. package/lib/packages/components/touchchat/src/AiChat/Chat/useChat.js.map +1 -1
  90. package/lib/packages/components/touchchat/src/AiChat/Chat/useMessageRender.js +1 -1
  91. package/lib/packages/components/touchchat/src/AiChat/Chat/useSSE.js +26 -16
  92. package/lib/packages/components/touchchat/src/AiChat/Chat/useSSE.js.map +1 -1
  93. package/lib/packages/components/touchchat/src/AiChat/Chat/useScroll.js.map +1 -1
  94. package/lib/packages/components/touchchat/src/AiChat/ChatInput.vue2.js +15 -3
  95. package/lib/packages/components/touchchat/src/AiChat/ChatInput.vue2.js.map +1 -1
  96. package/lib/packages/components/touchchat/src/AiChat/HistoryList.vue2.js.map +1 -1
  97. package/lib/packages/components/touchchat/src/AiChat/HistorySidebar.vue2.js.map +1 -1
  98. package/lib/packages/components/touchchat/src/AiChat/SiderBarView.vue2.js.map +1 -1
  99. package/lib/packages/components/touchchat/src/AiChat/TouchAgent.vue2.js +139 -81
  100. package/lib/packages/components/touchchat/src/AiChat/TouchAgent.vue2.js.map +1 -1
  101. package/lib/packages/components/touchchat/src/index.vue2.js +11 -1
  102. package/lib/packages/components/touchchat/src/index.vue2.js.map +1 -1
  103. package/lib/packages/components/touchchat/src/types/a2a.js.map +1 -1
  104. package/lib/packages/components/touchchat/utils/a2aService.js +204 -104
  105. package/lib/packages/components/touchchat/utils/a2aService.js.map +1 -1
  106. package/lib/packages/components/touchchat/utils/chatRobot.js.map +1 -1
  107. package/lib/packages/components/touchchat/utils/deepCloneDom.js.map +1 -1
  108. package/lib/packages/components/touchchat/utils/hight-it.js.map +1 -1
  109. package/lib/packages/components/touchchat/utils/markdown.js +23 -6
  110. package/lib/packages/components/touchchat/utils/markdown.js.map +1 -1
  111. package/lib/packages/components/touchchat/utils/socket.js.map +1 -1
  112. package/lib/packages/components/touchchat/utils/tools.js +4 -4
  113. package/lib/packages/components/touchchat/utils/tools.js.map +1 -1
  114. package/lib/packages/components/touchchat/utils/uuid.js.map +1 -1
  115. package/lib/packages/utils/config.js.map +1 -1
  116. package/lib/packages/utils/types.js.map +1 -1
  117. package/package.json +1 -1
  118. package/es/node_modules/.pnpm/dompurify@3.4.3/node_modules/dompurify/dist/purify.es.mjs.map +0 -1
  119. package/es/node_modules/.pnpm/linkify-it@5.0.0/node_modules/linkify-it/index.mjs.map +0 -1
  120. package/es/node_modules/.pnpm/linkify-it@5.0.0/node_modules/linkify-it/lib/re.mjs.map +0 -1
  121. package/es/node_modules/.pnpm/markdown-it-deflist@3.0.0/node_modules/markdown-it-deflist/index.mjs.map +0 -1
  122. package/lib/node_modules/.pnpm/dompurify@3.4.3/node_modules/dompurify/dist/purify.es.js.map +0 -1
  123. package/lib/node_modules/.pnpm/linkify-it@5.0.0/node_modules/linkify-it/index.js.map +0 -1
  124. package/lib/node_modules/.pnpm/linkify-it@5.0.0/node_modules/linkify-it/lib/re.js.map +0 -1
  125. package/lib/node_modules/.pnpm/markdown-it-deflist@3.0.0/node_modules/markdown-it-deflist/index.js.map +0 -1
@@ -1,5 +1,33 @@
1
1
  'use strict';
2
2
 
3
+ const extractSSEData = (line) => {
4
+ const trimmed = line.trim();
5
+ if (!trimmed)
6
+ return null;
7
+ if (trimmed.startsWith("data:")) {
8
+ return trimmed.substring(5).trim();
9
+ }
10
+ if (!trimmed.startsWith(":") && !trimmed.startsWith("event:") && !trimmed.startsWith("id:") && trimmed.startsWith("{")) {
11
+ return trimmed;
12
+ }
13
+ return null;
14
+ };
15
+ const parseErrorFromResponseBody = (errorBody) => {
16
+ var _a;
17
+ const trimmed = errorBody.trim();
18
+ if (!trimmed)
19
+ return null;
20
+ const sseData = extractSSEData(trimmed);
21
+ const jsonText = sseData || trimmed;
22
+ try {
23
+ const errorData = JSON.parse(jsonText);
24
+ if ((_a = errorData.error) == null ? void 0 : _a.message) {
25
+ return errorData.error.message;
26
+ }
27
+ } catch (e) {
28
+ }
29
+ return null;
30
+ };
3
31
  class A2AService {
4
32
  constructor() {
5
33
  this.agents = /* @__PURE__ */ new Map();
@@ -39,14 +67,10 @@ class A2AService {
39
67
  if (!agent) {
40
68
  throw new Error(`Agent ${agentId} not found`);
41
69
  }
70
+ const streamRequest = this.buildA2AStreamRequest(message, sessionId);
42
71
  const request = {
43
- jsonrpc: "2.0",
44
- id: this.generateId(),
45
- method: "message/send",
46
- params: {
47
- message,
48
- sessionId
49
- }
72
+ ...streamRequest,
73
+ method: "message/send"
50
74
  };
51
75
  const response = await fetch(agent.endpoint, {
52
76
  method: "POST",
@@ -66,92 +90,42 @@ class A2AService {
66
90
  return data.result;
67
91
  }
68
92
  // Stream message to agent (for streaming responses)
69
- async streamMessage(agentId, message, sessionId, signal) {
93
+ async streamMessage(agentId, message, sessionId, signal, modules) {
70
94
  const agent = this.agents.get(agentId);
71
95
  if (!agent) {
72
96
  throw new Error(`Agent ${agentId} not found`);
73
97
  }
74
- const request = {
75
- jsonrpc: "2.0",
76
- id: this.generateId(),
77
- method: "message/stream",
78
- params: {
79
- message,
80
- sessionId
81
- }
98
+ let headers = {
99
+ "Content-Type": "application/json",
100
+ Accept: "text/event-stream",
101
+ ...agent.authToken ? { Authorization: `Bearer ${agent.authToken}` } : {}
82
102
  };
103
+ const requestBody = this.buildA2AStreamRequest(message, sessionId);
104
+ if (modules && modules.length > 0 && typeof modules[0] === "object" && modules[0] !== null && modules[0].config) {
105
+ const customConfig = modules[0].config;
106
+ if (typeof customConfig.headers === "function") {
107
+ headers = {
108
+ ...headers,
109
+ ...customConfig.headers()
110
+ };
111
+ }
112
+ }
113
+ const body = JSON.stringify(requestBody);
83
114
  const response = await fetch(agent.endpoint, {
84
115
  method: "POST",
85
- headers: {
86
- "Content-Type": "application/json",
87
- Accept: "text/event-stream",
88
- ...agent.authToken && { Authorization: `Bearer ${agent.authToken}` }
89
- },
90
- body: JSON.stringify(request),
116
+ headers,
117
+ body,
91
118
  signal
92
119
  });
93
120
  if (!response.ok) {
94
- throw new Error(`HTTP error: ${response.status}`);
121
+ const errorBody = await response.text();
122
+ const errorMessage = parseErrorFromResponseBody(errorBody);
123
+ throw new Error(errorMessage || errorBody || `HTTP error: ${response.status}`);
95
124
  }
96
125
  if (!response.body) {
97
126
  throw new Error("No response body");
98
127
  }
99
- return new ReadableStream({
100
- async start(controller) {
101
- const reader = response.body.getReader();
102
- const decoder = new TextDecoder();
103
- let buffer = "";
104
- if (signal) {
105
- signal.addEventListener("abort", () => {
106
- controller.close();
107
- reader.cancel();
108
- });
109
- }
110
- try {
111
- let isDone = false;
112
- while (!isDone) {
113
- if (signal == null ? void 0 : signal.aborted) {
114
- controller.close();
115
- return;
116
- }
117
- const { done, value } = await reader.read();
118
- if (done) {
119
- isDone = true;
120
- controller.close();
121
- break;
122
- }
123
- buffer += decoder.decode(value, { stream: true });
124
- const lines = buffer.split("\n");
125
- buffer = lines.pop() || "";
126
- const fn = async (data) => {
127
- if (data === "[DONE]") {
128
- controller.close();
129
- return;
130
- }
131
- try {
132
- const chunk = JSON.parse(data);
133
- await new Promise((resolve) => setTimeout(resolve, 50));
134
- controller.enqueue(chunk);
135
- } catch (e) {
136
- console.warn("Failed to parse SSE data:", data);
137
- }
138
- };
139
- for (const line of lines) {
140
- const trimmed = line.trim();
141
- if (trimmed.startsWith("data:")) {
142
- const data = trimmed.slice(5);
143
- await fn(data);
144
- } else if (trimmed.startsWith("data: ")) {
145
- const data = trimmed.slice(6);
146
- await fn(data);
147
- }
148
- }
149
- }
150
- } finally {
151
- reader.releaseLock();
152
- }
153
- }
154
- });
128
+ return this.createSSEReadableStream(response.body, signal);
155
129
  }
156
130
  // Multi-agent message routing
157
131
  async routeMessage(agentIds, message, mode = "sequential") {
@@ -246,19 +220,120 @@ class A2AService {
246
220
  generateId() {
247
221
  return `req-${Date.now()}-${Math.random().toString(36).slice(2, 11)}`;
248
222
  }
249
- // Multi-agent streaming message
250
- async *streamMultiAgentMessage(hostEndpoint, subAgents, message, headers, sessionId, signal) {
251
- const subAgentsJson = JSON.stringify(subAgents);
252
- const xSubAgents = btoa(unescape(encodeURIComponent(subAgentsJson)));
253
- const request = {
223
+ getMessageText(message) {
224
+ return message.parts.filter((part) => part.type === "text").map((part) => part.text).join("");
225
+ }
226
+ buildA2AStreamRequest(message, sessionId) {
227
+ const text = this.getMessageText(message);
228
+ const params = {
229
+ message: {
230
+ role: message.role,
231
+ parts: [
232
+ {
233
+ kind: "data",
234
+ data: {
235
+ role: message.role,
236
+ content_type: "text",
237
+ content: text
238
+ }
239
+ }
240
+ ],
241
+ messageId: message.messageId,
242
+ kind: "message"
243
+ }
244
+ };
245
+ if (sessionId) {
246
+ params.sessionId = sessionId;
247
+ }
248
+ return {
254
249
  jsonrpc: "2.0",
255
250
  id: this.generateId(),
256
251
  method: "message/stream",
257
- params: {
258
- message,
259
- sessionId
260
- }
252
+ params
261
253
  };
254
+ }
255
+ createSSEReadableStream(responseBody, signal) {
256
+ return new ReadableStream({
257
+ async start(controller) {
258
+ const reader = responseBody.getReader();
259
+ const decoder = new TextDecoder();
260
+ let buffer = "";
261
+ let streamClosed = false;
262
+ const closeStream = () => {
263
+ if (!streamClosed) {
264
+ streamClosed = true;
265
+ controller.close();
266
+ }
267
+ };
268
+ const handleSSEData = async (data) => {
269
+ if (data === "[DONE]") {
270
+ closeStream();
271
+ return;
272
+ }
273
+ const trimmedData = data.trim();
274
+ if (!trimmedData)
275
+ return;
276
+ try {
277
+ const chunk = JSON.parse(trimmedData);
278
+ controller.enqueue(chunk);
279
+ if (chunk.error) {
280
+ closeStream();
281
+ }
282
+ } catch (e) {
283
+ console.warn("Failed to parse SSE data:", trimmedData);
284
+ }
285
+ };
286
+ const processBuffer = async (flushRemaining = false) => {
287
+ if (flushRemaining && buffer.trim()) {
288
+ const data = extractSSEData(buffer);
289
+ if (data) {
290
+ await handleSSEData(data);
291
+ }
292
+ buffer = "";
293
+ return;
294
+ }
295
+ const lines = buffer.split("\n");
296
+ buffer = lines.pop() || "";
297
+ for (const line of lines) {
298
+ const data = extractSSEData(line);
299
+ if (data) {
300
+ await handleSSEData(data);
301
+ }
302
+ }
303
+ };
304
+ if (signal) {
305
+ signal.addEventListener("abort", () => {
306
+ closeStream();
307
+ reader.cancel();
308
+ });
309
+ }
310
+ try {
311
+ while (!streamClosed) {
312
+ if (signal == null ? void 0 : signal.aborted) {
313
+ closeStream();
314
+ return;
315
+ }
316
+ const { done, value } = await reader.read();
317
+ if (done) {
318
+ buffer += decoder.decode();
319
+ await processBuffer(true);
320
+ closeStream();
321
+ break;
322
+ }
323
+ buffer += decoder.decode(value, { stream: true });
324
+ await processBuffer();
325
+ }
326
+ } finally {
327
+ reader.releaseLock();
328
+ }
329
+ }
330
+ });
331
+ }
332
+ // Multi-agent streaming message
333
+ async *streamMultiAgentMessage(hostEndpoint, subAgents, message, headers, sessionId, signal) {
334
+ const subAgentsJson = JSON.stringify(subAgents);
335
+ const xSubAgents = btoa(unescape(encodeURIComponent(subAgentsJson)));
336
+ const request = this.buildA2AStreamRequest(message, sessionId);
262
337
  const response = await fetch(hostEndpoint, {
263
338
  method: "POST",
264
339
  headers: {
@@ -281,30 +356,55 @@ class A2AService {
281
356
  const reader = response.body.getReader();
282
357
  const decoder = new TextDecoder();
283
358
  let buffer = "";
359
+ const processBuffer = function* (flushRemaining = false) {
360
+ if (flushRemaining && buffer.trim()) {
361
+ const data = extractSSEData(buffer);
362
+ buffer = "";
363
+ if (data && data !== "[DONE]") {
364
+ try {
365
+ yield JSON.parse(data);
366
+ } catch (e) {
367
+ console.warn("Failed to parse SSE data:", data);
368
+ }
369
+ }
370
+ return data === "[DONE]";
371
+ }
372
+ const lines = buffer.split("\n");
373
+ buffer = lines.pop() || "";
374
+ for (const line of lines) {
375
+ const data = extractSSEData(line);
376
+ if (!data)
377
+ continue;
378
+ if (data === "[DONE]")
379
+ return true;
380
+ try {
381
+ yield JSON.parse(data);
382
+ } catch (e) {
383
+ console.warn("Failed to parse SSE data:", data);
384
+ }
385
+ }
386
+ return false;
387
+ };
284
388
  try {
285
389
  while (true) {
286
390
  if (signal == null ? void 0 : signal.aborted) {
287
391
  return;
288
392
  }
289
393
  const { done, value } = await reader.read();
290
- if (done)
291
- break;
292
- buffer += decoder.decode(value, { stream: true });
293
- const lines = buffer.split("\n");
294
- buffer = lines.pop() || "";
295
- for (const line of lines) {
296
- const trimmed = line.trim();
297
- if (trimmed.startsWith("data: ")) {
298
- const data = trimmed.slice(6);
299
- if (data === "[DONE]")
394
+ if (done) {
395
+ buffer += decoder.decode();
396
+ for (const chunk of processBuffer(true)) {
397
+ yield chunk;
398
+ if (chunk.error)
300
399
  return;
301
- try {
302
- const chunk = JSON.parse(data);
303
- yield chunk;
304
- } catch (e) {
305
- console.warn("Failed to parse SSE data:", data);
306
- }
307
400
  }
401
+ break;
402
+ }
403
+ buffer += decoder.decode(value, { stream: true });
404
+ for (const chunk of processBuffer()) {
405
+ yield chunk;
406
+ if (chunk.error)
407
+ return;
308
408
  }
309
409
  }
310
410
  } finally {
@@ -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'\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
+ {"version":3,"file":"a2aService.js","sources":["../../../../../../packages/components/touchchat/utils/a2aService.ts"],"sourcesContent":["import type { AgentConfig, Message, JSONRPCRequest, StreamChunk, Task, AgentCard, SubAgent, TextPart } from '../src/types/a2a'\r\nimport type { ModuleItem } from '../../../../packages/components/touchchat/src/AiChat/Chat/types'\r\n// @/types/a2a\r\n\r\nconst extractSSEData = (line: string): string | null => {\r\n\tconst trimmed = line.trim()\r\n\tif (!trimmed) return null\r\n\tif (trimmed.startsWith('data:')) {\r\n\t\treturn trimmed.substring(5).trim()\r\n\t}\r\n\tif (!trimmed.startsWith(':') && !trimmed.startsWith('event:') && !trimmed.startsWith('id:') && trimmed.startsWith('{')) {\r\n\t\treturn trimmed\r\n\t}\r\n\treturn null\r\n}\r\n\r\nconst parseErrorFromResponseBody = (errorBody: string): string | null => {\r\n\tconst trimmed = errorBody.trim()\r\n\tif (!trimmed) return null\r\n\r\n\tconst sseData = extractSSEData(trimmed)\r\n\tconst jsonText = sseData || trimmed\r\n\r\n\ttry {\r\n\t\tconst errorData = JSON.parse(jsonText)\r\n\t\tif (errorData.error?.message) {\r\n\t\t\treturn errorData.error.message\r\n\t\t}\r\n\t} catch {\r\n\t\t// ignore parse errors\r\n\t}\r\n\r\n\treturn null\r\n}\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 streamRequest = this.buildA2AStreamRequest(message, sessionId)\r\n\t\tconst request: JSONRPCRequest = {\r\n\t\t\t...streamRequest,\r\n\t\t\tmethod: 'message/send'\r\n\t\t} as JSONRPCRequest\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, modules?: ModuleItem[]): 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\tlet headers: Record<string, string> = {\r\n\t\t\t'Content-Type': 'application/json',\r\n\t\t\tAccept: 'text/event-stream',\r\n\t\t\t...(agent.authToken ? { Authorization: `Bearer ${agent.authToken}` } : {})\r\n\t\t}\r\n\r\n\t\tconst requestBody: Record<string, unknown> = this.buildA2AStreamRequest(message, sessionId)\r\n\r\n\t\t// modules 仅用于补充请求头(如 Authorization),不再覆盖 A2A 请求体\r\n\t\tif (modules && modules.length > 0 && typeof modules[0] === 'object' && modules[0] !== null && modules[0].config) {\r\n\t\t\tconst customConfig = modules[0].config\r\n\t\t\tif (typeof customConfig.headers === 'function') {\r\n\t\t\t\theaders = {\r\n\t\t\t\t\t...headers,\r\n\t\t\t\t\t...customConfig.headers()\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tconst body = JSON.stringify(requestBody)\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\tbody,\r\n\t\t\tsignal\r\n\t\t})\r\n\r\n\t\tif (!response.ok) {\r\n\t\t\tconst errorBody = await response.text()\r\n\t\t\tconst errorMessage = parseErrorFromResponseBody(errorBody)\r\n\t\t\tthrow new Error(errorMessage || errorBody || `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 this.createSSEReadableStream(response.body, signal)\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\tprivate getMessageText(message: Message): string {\r\n\t\treturn message.parts\r\n\t\t\t.filter((part): part is TextPart => part.type === 'text')\r\n\t\t\t.map(part => part.text)\r\n\t\t\t.join('')\r\n\t}\r\n\r\n\tprivate buildA2AStreamRequest(message: Message, sessionId?: string): Record<string, unknown> {\r\n\t\tconst text = this.getMessageText(message)\r\n\t\tconst params: Record<string, unknown> = {\r\n\t\t\tmessage: {\r\n\t\t\t\trole: message.role,\r\n\t\t\t\tparts: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tkind: 'data',\r\n\t\t\t\t\t\tdata: {\r\n\t\t\t\t\t\t\trole: message.role,\r\n\t\t\t\t\t\t\tcontent_type: 'text',\r\n\t\t\t\t\t\t\tcontent: text\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\tmessageId: message.messageId,\r\n\t\t\t\tkind: 'message'\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (sessionId) {\r\n\t\t\tparams.sessionId = sessionId\r\n\t\t}\r\n\r\n\t\treturn {\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}\r\n\t}\r\n\r\n\tprivate createSSEReadableStream(responseBody: ReadableStream<Uint8Array>, signal?: AbortSignal): ReadableStream<StreamChunk> {\r\n\t\treturn new ReadableStream<StreamChunk>({\r\n\t\t\tasync start(controller) {\r\n\t\t\t\tconst reader = responseBody.getReader()\r\n\t\t\t\tconst decoder = new TextDecoder()\r\n\t\t\t\tlet buffer = ''\r\n\t\t\t\tlet streamClosed = false\r\n\r\n\t\t\t\tconst closeStream = () => {\r\n\t\t\t\t\tif (!streamClosed) {\r\n\t\t\t\t\t\tstreamClosed = true\r\n\t\t\t\t\t\tcontroller.close()\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconst handleSSEData = async (data: string) => {\r\n\t\t\t\t\tif (data === '[DONE]') {\r\n\t\t\t\t\t\tcloseStream()\r\n\t\t\t\t\t\treturn\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tconst trimmedData = data.trim()\r\n\t\t\t\t\tif (!trimmedData) return\r\n\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tconst chunk: StreamChunk = JSON.parse(trimmedData)\r\n\t\t\t\t\t\tcontroller.enqueue(chunk)\r\n\t\t\t\t\t\tif (chunk.error) {\r\n\t\t\t\t\t\t\tcloseStream()\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} catch (e) {\r\n\t\t\t\t\t\tconsole.warn('Failed to parse SSE data:', trimmedData)\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconst processBuffer = async (flushRemaining = false) => {\r\n\t\t\t\t\tif (flushRemaining && buffer.trim()) {\r\n\t\t\t\t\t\tconst data = extractSSEData(buffer)\r\n\t\t\t\t\t\tif (data) {\r\n\t\t\t\t\t\t\tawait handleSSEData(data)\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbuffer = ''\r\n\t\t\t\t\t\treturn\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tconst lines = buffer.split('\\n')\r\n\t\t\t\t\tbuffer = lines.pop() || ''\r\n\r\n\t\t\t\t\tfor (const line of lines) {\r\n\t\t\t\t\t\tconst data = extractSSEData(line)\r\n\t\t\t\t\t\tif (data) {\r\n\t\t\t\t\t\t\tawait handleSSEData(data)\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\tif (signal) {\r\n\t\t\t\t\tsignal.addEventListener('abort', () => {\r\n\t\t\t\t\t\tcloseStream()\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\twhile (!streamClosed) {\r\n\t\t\t\t\t\tif (signal?.aborted) {\r\n\t\t\t\t\t\t\tcloseStream()\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\tbuffer += decoder.decode()\r\n\t\t\t\t\t\t\tawait processBuffer(true)\r\n\t\t\t\t\t\t\tcloseStream()\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\tawait processBuffer()\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 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 = this.buildA2AStreamRequest(message, sessionId)\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\tconst processBuffer = function* (flushRemaining = false): Generator<StreamChunk, boolean, unknown> {\r\n\t\t\tif (flushRemaining && buffer.trim()) {\r\n\t\t\t\tconst data = extractSSEData(buffer)\r\n\t\t\t\tbuffer = ''\r\n\t\t\t\tif (data && data !== '[DONE]') {\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tyield JSON.parse(data) as StreamChunk\r\n\t\t\t\t\t} catch (e) {\r\n\t\t\t\t\t\tconsole.warn('Failed to parse SSE data:', data)\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn data === '[DONE]'\r\n\t\t\t}\r\n\r\n\t\t\tconst lines = buffer.split('\\n')\r\n\t\t\tbuffer = lines.pop() || ''\r\n\r\n\t\t\tfor (const line of lines) {\r\n\t\t\t\tconst data = extractSSEData(line)\r\n\t\t\t\tif (!data) continue\r\n\t\t\t\tif (data === '[DONE]') return true\r\n\r\n\t\t\t\ttry {\r\n\t\t\t\t\tyield JSON.parse(data) as StreamChunk\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tconsole.warn('Failed to parse SSE data:', data)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn false\r\n\t\t}\r\n\r\n\t\ttry {\r\n\t\t\twhile (true) {\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) {\r\n\t\t\t\t\tbuffer += decoder.decode()\r\n\t\t\t\t\tfor (const chunk of processBuffer(true)) {\r\n\t\t\t\t\t\tyield chunk\r\n\t\t\t\t\t\tif (chunk.error) return\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak\r\n\t\t\t\t}\r\n\r\n\t\t\t\tbuffer += decoder.decode(value, { stream: true })\r\n\t\t\t\tfor (const chunk of processBuffer()) {\r\n\t\t\t\t\tyield chunk\r\n\t\t\t\t\tif (chunk.error) return\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":";;AAIA,MAAM,cAAA,GAAiB,CAAC,IAAgC,KAAA;AACvD,EAAM,MAAA,OAAA,GAAU,KAAK,IAAK,EAAA,CAAA;AAC1B,EAAA,IAAI,CAAC,OAAA;AAAS,IAAO,OAAA,IAAA,CAAA;AACrB,EAAI,IAAA,OAAA,CAAQ,UAAW,CAAA,OAAO,CAAG,EAAA;AAChC,IAAA,OAAO,OAAQ,CAAA,SAAA,CAAU,CAAC,CAAA,CAAE,IAAK,EAAA,CAAA;AAAA,GAClC;AACA,EAAA,IAAI,CAAC,OAAQ,CAAA,UAAA,CAAW,GAAG,CAAK,IAAA,CAAC,QAAQ,UAAW,CAAA,QAAQ,CAAK,IAAA,CAAC,QAAQ,UAAW,CAAA,KAAK,KAAK,OAAQ,CAAA,UAAA,CAAW,GAAG,CAAG,EAAA;AACvH,IAAO,OAAA,OAAA,CAAA;AAAA,GACR;AACA,EAAO,OAAA,IAAA,CAAA;AACR,CAAA,CAAA;AAEA,MAAM,0BAAA,GAA6B,CAAC,SAAqC,KAAA;AAhBzE,EAAA,IAAA,EAAA,CAAA;AAiBC,EAAM,MAAA,OAAA,GAAU,UAAU,IAAK,EAAA,CAAA;AAC/B,EAAA,IAAI,CAAC,OAAA;AAAS,IAAO,OAAA,IAAA,CAAA;AAErB,EAAM,MAAA,OAAA,GAAU,eAAe,OAAO,CAAA,CAAA;AACtC,EAAA,MAAM,WAAW,OAAW,IAAA,OAAA,CAAA;AAE5B,EAAI,IAAA;AACH,IAAM,MAAA,SAAA,GAAY,IAAK,CAAA,KAAA,CAAM,QAAQ,CAAA,CAAA;AACrC,IAAI,IAAA,CAAA,EAAA,GAAA,SAAA,CAAU,KAAV,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAiB,OAAS,EAAA;AAC7B,MAAA,OAAO,UAAU,KAAM,CAAA,OAAA,CAAA;AAAA,KACxB;AAAA,WACO,CAAN,EAAA;AAAA,GAEF;AAEA,EAAO,OAAA,IAAA,CAAA;AACR,CAAA,CAAA;AAGO,MAAM,UAAW,CAAA;AAAA,EAAjB,WAAA,GAAA;AACN,IAAQ,IAAA,CAAA,MAAA,uBAAuC,GAAI,EAAA,CAAA;AAAA,GAAA;AAAA;AAAA,EAGnD,cAAc,MAA2B,EAAA;AACxC,IAAA,IAAA,CAAK,MAAO,CAAA,GAAA,CAAI,MAAO,CAAA,EAAA,EAAI,MAAM,CAAA,CAAA;AAAA,GAClC;AAAA;AAAA,EAGA,gBAAgB,OAAuB,EAAA;AACtC,IAAK,IAAA,CAAA,MAAA,CAAO,OAAO,OAAO,CAAA,CAAA;AAAA,GAC3B;AAAA;AAAA,EAGA,SAAS,OAA0C,EAAA;AAClD,IAAO,OAAA,IAAA,CAAK,MAAO,CAAA,GAAA,CAAI,OAAO,CAAA,CAAA;AAAA,GAC/B;AAAA;AAAA,EAGA,YAA8B,GAAA;AAC7B,IAAA,OAAO,KAAM,CAAA,IAAA,CAAK,IAAK,CAAA,MAAA,CAAO,QAAQ,CAAA,CAAA;AAAA,GACvC;AAAA;AAAA,EAGA,MAAM,eAAe,GAAiC,EAAA;AACrD,IAAM,MAAA,QAAA,GAAW,MAAM,KAAA,CAAM,GAAK,EAAA;AAAA,MACjC,MAAQ,EAAA,KAAA;AAAA,MACR,OAAS,EAAA;AAAA,QACR,MAAQ,EAAA,kBAAA;AAAA,OACT;AAAA,KACA,CAAA,CAAA;AAED,IAAI,IAAA,CAAC,SAAS,EAAI,EAAA;AACjB,MAAA,MAAM,IAAI,KAAA,CAAM,CAA+B,4BAAA,EAAA,QAAA,CAAS,UAAY,CAAA,CAAA,CAAA,CAAA;AAAA,KACrE;AAEA,IAAA,OAAO,SAAS,IAAK,EAAA,CAAA;AAAA,GACtB;AAAA;AAAA,EAGA,MAAM,WAAA,CAAY,OAAiB,EAAA,OAAA,EAAkB,SAAmC,EAAA;AACvF,IAAA,MAAM,KAAQ,GAAA,IAAA,CAAK,MAAO,CAAA,GAAA,CAAI,OAAO,CAAA,CAAA;AACrC,IAAA,IAAI,CAAC,KAAO,EAAA;AACX,MAAM,MAAA,IAAI,KAAM,CAAA,CAAA,MAAA,EAAS,OAAmB,CAAA,UAAA,CAAA,CAAA,CAAA;AAAA,KAC7C;AAEA,IAAA,MAAM,aAAgB,GAAA,IAAA,CAAK,qBAAsB,CAAA,OAAA,EAAS,SAAS,CAAA,CAAA;AACnE,IAAA,MAAM,OAA0B,GAAA;AAAA,MAC/B,GAAG,aAAA;AAAA,MACH,MAAQ,EAAA,cAAA;AAAA,KACT,CAAA;AAEA,IAAA,MAAM,QAAW,GAAA,MAAM,KAAM,CAAA,KAAA,CAAM,QAAU,EAAA;AAAA,MAC5C,MAAQ,EAAA,MAAA;AAAA,MACR,OAAS,EAAA;AAAA,QACR,cAAgB,EAAA,kBAAA;AAAA,QAChB,GAAI,KAAM,CAAA,SAAA,IAAa,EAAE,aAAe,EAAA,CAAA,OAAA,EAAU,MAAM,SAAY,CAAA,CAAA,EAAA;AAAA,OACrE;AAAA,MACA,IAAA,EAAM,IAAK,CAAA,SAAA,CAAU,OAAO,CAAA;AAAA,KAC5B,CAAA,CAAA;AAED,IAAI,IAAA,CAAC,SAAS,EAAI,EAAA;AACjB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAe,YAAA,EAAA,QAAA,CAAS,MAAQ,CAAA,CAAA,CAAA,CAAA;AAAA,KACjD;AAEA,IAAM,MAAA,IAAA,GAAO,MAAM,QAAA,CAAS,IAAK,EAAA,CAAA;AAEjC,IAAA,IAAI,KAAK,KAAO,EAAA;AACf,MAAA,MAAM,IAAI,KAAA,CAAM,CAAc,WAAA,EAAA,IAAA,CAAK,MAAM,OAAS,CAAA,CAAA,CAAA,CAAA;AAAA,KACnD;AAEA,IAAA,OAAO,IAAK,CAAA,MAAA,CAAA;AAAA,GACb;AAAA;AAAA,EAGA,MAAM,aAAc,CAAA,OAAA,EAAiB,OAAkB,EAAA,SAAA,EAAoB,QAAsB,OAA8D,EAAA;AAC9J,IAAA,MAAM,KAAQ,GAAA,IAAA,CAAK,MAAO,CAAA,GAAA,CAAI,OAAO,CAAA,CAAA;AACrC,IAAA,IAAI,CAAC,KAAO,EAAA;AACX,MAAM,MAAA,IAAI,KAAM,CAAA,CAAA,MAAA,EAAS,OAAmB,CAAA,UAAA,CAAA,CAAA,CAAA;AAAA,KAC7C;AAEA,IAAA,IAAI,OAAkC,GAAA;AAAA,MACrC,cAAgB,EAAA,kBAAA;AAAA,MAChB,MAAQ,EAAA,mBAAA;AAAA,MACR,GAAI,MAAM,SAAY,GAAA,EAAE,eAAe,CAAU,OAAA,EAAA,KAAA,CAAM,SAAY,CAAA,CAAA,EAAA,GAAI,EAAC;AAAA,KACzE,CAAA;AAEA,IAAA,MAAM,WAAuC,GAAA,IAAA,CAAK,qBAAsB,CAAA,OAAA,EAAS,SAAS,CAAA,CAAA;AAG1F,IAAA,IAAI,WAAW,OAAQ,CAAA,MAAA,GAAS,CAAK,IAAA,OAAO,QAAQ,CAAC,CAAA,KAAM,QAAY,IAAA,OAAA,CAAQ,CAAC,CAAM,KAAA,IAAA,IAAQ,OAAQ,CAAA,CAAC,EAAE,MAAQ,EAAA;AAChH,MAAM,MAAA,YAAA,GAAe,OAAQ,CAAA,CAAC,CAAE,CAAA,MAAA,CAAA;AAChC,MAAI,IAAA,OAAO,YAAa,CAAA,OAAA,KAAY,UAAY,EAAA;AAC/C,QAAU,OAAA,GAAA;AAAA,UACT,GAAG,OAAA;AAAA,UACH,GAAG,aAAa,OAAQ,EAAA;AAAA,SACzB,CAAA;AAAA,OACD;AAAA,KACD;AAEA,IAAM,MAAA,IAAA,GAAO,IAAK,CAAA,SAAA,CAAU,WAAW,CAAA,CAAA;AAEvC,IAAA,MAAM,QAAW,GAAA,MAAM,KAAM,CAAA,KAAA,CAAM,QAAU,EAAA;AAAA,MAC5C,MAAQ,EAAA,MAAA;AAAA,MACR,OAAA;AAAA,MACA,IAAA;AAAA,MACA,MAAA;AAAA,KACA,CAAA,CAAA;AAED,IAAI,IAAA,CAAC,SAAS,EAAI,EAAA;AACjB,MAAM,MAAA,SAAA,GAAY,MAAM,QAAA,CAAS,IAAK,EAAA,CAAA;AACtC,MAAM,MAAA,YAAA,GAAe,2BAA2B,SAAS,CAAA,CAAA;AACzD,MAAA,MAAM,IAAI,KAAM,CAAA,YAAA,IAAgB,SAAa,IAAA,CAAA,YAAA,EAAe,SAAS,MAAQ,CAAA,CAAA,CAAA,CAAA;AAAA,KAC9E;AAEA,IAAI,IAAA,CAAC,SAAS,IAAM,EAAA;AACnB,MAAM,MAAA,IAAI,MAAM,kBAAkB,CAAA,CAAA;AAAA,KACnC;AAEA,IAAA,OAAO,IAAK,CAAA,uBAAA,CAAwB,QAAS,CAAA,IAAA,EAAM,MAAM,CAAA,CAAA;AAAA,GAC1D;AAAA;AAAA,EAGA,MAAM,YAAA,CAAa,QAAoB,EAAA,OAAA,EAAkB,OAAkC,YAA0C,EAAA;AACpI,IAAM,MAAA,OAAA,uBAAc,GAAkB,EAAA,CAAA;AAEtC,IAAA,IAAI,SAAS,UAAY,EAAA;AACxB,MAAA,MAAM,QAAW,GAAA,QAAA,CAAS,GAAI,CAAA,OAAM,OAAW,KAAA;AAC9C,QAAI,IAAA;AACH,UAAA,MAAM,IAAO,GAAA,MAAM,IAAK,CAAA,WAAA,CAAY,SAAS,OAAO,CAAA,CAAA;AACpD,UAAA,OAAO,EAAE,OAAA,EAAS,IAAM,EAAA,KAAA,EAAO,IAAK,EAAA,CAAA;AAAA,iBAC5B,KAAP,EAAA;AACD,UAAA,OAAO,EAAE,OAAA,EAAS,IAAM,EAAA,IAAA,EAAM,KAAM,EAAA,CAAA;AAAA,SACrC;AAAA,OACA,CAAA,CAAA;AAED,MAAA,MAAM,OAAU,GAAA,MAAM,OAAQ,CAAA,GAAA,CAAI,QAAQ,CAAA,CAAA;AAC1C,MAAA,KAAA,MAAW,EAAE,OAAA,EAAS,IAAM,EAAA,KAAA,MAAW,OAAS,EAAA;AAC/C,QAAA,IAAI,IAAM,EAAA;AACT,UAAQ,OAAA,CAAA,GAAA,CAAI,SAAS,IAAI,CAAA,CAAA;AAAA,SACnB,MAAA;AACN,UAAQ,OAAA,CAAA,KAAA,CAAM,CAA0B,uBAAA,EAAA,OAAA,CAAA,CAAA,CAAA,EAAY,KAAK,CAAA,CAAA;AAAA,SAC1D;AAAA,OACD;AAAA,KACM,MAAA;AAEN,MAAA,KAAA,MAAW,WAAW,QAAU,EAAA;AAC/B,QAAI,IAAA;AACH,UAAA,MAAM,IAAO,GAAA,MAAM,IAAK,CAAA,WAAA,CAAY,SAAS,OAAO,CAAA,CAAA;AACpD,UAAQ,OAAA,CAAA,GAAA,CAAI,SAAS,IAAI,CAAA,CAAA;AAAA,iBACjB,KAAP,EAAA;AACD,UAAQ,OAAA,CAAA,KAAA,CAAM,CAA0B,uBAAA,EAAA,OAAA,CAAA,CAAA,CAAA,EAAY,KAAK,CAAA,CAAA;AAAA,SAC1D;AAAA,OACD;AAAA,KACD;AAEA,IAAO,OAAA,OAAA,CAAA;AAAA,GACR;AAAA;AAAA,EAGA,MAAM,OAAQ,CAAA,OAAA,EAAiB,MAA+B,EAAA;AAC7D,IAAA,MAAM,KAAQ,GAAA,IAAA,CAAK,MAAO,CAAA,GAAA,CAAI,OAAO,CAAA,CAAA;AACrC,IAAA,IAAI,CAAC,KAAO,EAAA;AACX,MAAM,MAAA,IAAI,KAAM,CAAA,CAAA,MAAA,EAAS,OAAmB,CAAA,UAAA,CAAA,CAAA,CAAA;AAAA,KAC7C;AAEA,IAAA,MAAM,OAA0B,GAAA;AAAA,MAC/B,OAAS,EAAA,KAAA;AAAA,MACT,EAAA,EAAI,KAAK,UAAW,EAAA;AAAA,MACpB,MAAQ,EAAA,UAAA;AAAA,MACR,MAAA,EAAQ,EAAE,MAAO,EAAA;AAAA,KAClB,CAAA;AAEA,IAAA,MAAM,QAAW,GAAA,MAAM,KAAM,CAAA,KAAA,CAAM,QAAU,EAAA;AAAA,MAC5C,MAAQ,EAAA,MAAA;AAAA,MACR,OAAS,EAAA;AAAA,QACR,cAAgB,EAAA,kBAAA;AAAA,QAChB,GAAI,KAAM,CAAA,SAAA,IAAa,EAAE,aAAe,EAAA,CAAA,OAAA,EAAU,MAAM,SAAY,CAAA,CAAA,EAAA;AAAA,OACrE;AAAA,MACA,IAAA,EAAM,IAAK,CAAA,SAAA,CAAU,OAAO,CAAA;AAAA,KAC5B,CAAA,CAAA;AAED,IAAI,IAAA,CAAC,SAAS,EAAI,EAAA;AACjB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAe,YAAA,EAAA,QAAA,CAAS,MAAQ,CAAA,CAAA,CAAA,CAAA;AAAA,KACjD;AAEA,IAAM,MAAA,IAAA,GAAO,MAAM,QAAA,CAAS,IAAK,EAAA,CAAA;AAEjC,IAAA,IAAI,KAAK,KAAO,EAAA;AACf,MAAA,MAAM,IAAI,KAAA,CAAM,CAAc,WAAA,EAAA,IAAA,CAAK,MAAM,OAAS,CAAA,CAAA,CAAA,CAAA;AAAA,KACnD;AAEA,IAAA,OAAO,IAAK,CAAA,MAAA,CAAA;AAAA,GACb;AAAA;AAAA,EAGA,MAAM,UAAW,CAAA,OAAA,EAAiB,MAA+B,EAAA;AAChE,IAAA,MAAM,KAAQ,GAAA,IAAA,CAAK,MAAO,CAAA,GAAA,CAAI,OAAO,CAAA,CAAA;AACrC,IAAA,IAAI,CAAC,KAAO,EAAA;AACX,MAAM,MAAA,IAAI,KAAM,CAAA,CAAA,MAAA,EAAS,OAAmB,CAAA,UAAA,CAAA,CAAA,CAAA;AAAA,KAC7C;AAEA,IAAA,MAAM,OAA0B,GAAA;AAAA,MAC/B,OAAS,EAAA,KAAA;AAAA,MACT,EAAA,EAAI,KAAK,UAAW,EAAA;AAAA,MACpB,MAAQ,EAAA,aAAA;AAAA,MACR,MAAA,EAAQ,EAAE,MAAO,EAAA;AAAA,KAClB,CAAA;AAEA,IAAA,MAAM,QAAW,GAAA,MAAM,KAAM,CAAA,KAAA,CAAM,QAAU,EAAA;AAAA,MAC5C,MAAQ,EAAA,MAAA;AAAA,MACR,OAAS,EAAA;AAAA,QACR,cAAgB,EAAA,kBAAA;AAAA,QAChB,GAAI,KAAM,CAAA,SAAA,IAAa,EAAE,aAAe,EAAA,CAAA,OAAA,EAAU,MAAM,SAAY,CAAA,CAAA,EAAA;AAAA,OACrE;AAAA,MACA,IAAA,EAAM,IAAK,CAAA,SAAA,CAAU,OAAO,CAAA;AAAA,KAC5B,CAAA,CAAA;AAED,IAAI,IAAA,CAAC,SAAS,EAAI,EAAA;AACjB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAe,YAAA,EAAA,QAAA,CAAS,MAAQ,CAAA,CAAA,CAAA,CAAA;AAAA,KACjD;AAEA,IAAM,MAAA,IAAA,GAAO,MAAM,QAAA,CAAS,IAAK,EAAA,CAAA;AAEjC,IAAA,IAAI,KAAK,KAAO,EAAA;AACf,MAAA,MAAM,IAAI,KAAA,CAAM,CAAc,WAAA,EAAA,IAAA,CAAK,MAAM,OAAS,CAAA,CAAA,CAAA,CAAA;AAAA,KACnD;AAAA,GACD;AAAA;AAAA,EAGQ,UAAqB,GAAA;AAC5B,IAAA,OAAO,CAAO,IAAA,EAAA,IAAA,CAAK,GAAI,EAAA,CAAA,CAAA,EAAK,IAAK,CAAA,MAAA,EAAS,CAAA,QAAA,CAAS,EAAE,CAAA,CAAE,KAAM,CAAA,CAAA,EAAG,EAAE,CAAA,CAAA,CAAA,CAAA;AAAA,GACnE;AAAA,EAEQ,eAAe,OAA0B,EAAA;AAChD,IAAA,OAAO,OAAQ,CAAA,KAAA,CACb,MAAO,CAAA,CAAC,SAA2B,IAAK,CAAA,IAAA,KAAS,MAAM,CAAA,CACvD,IAAI,CAAQ,IAAA,KAAA,IAAA,CAAK,IAAI,CAAA,CACrB,KAAK,EAAE,CAAA,CAAA;AAAA,GACV;AAAA,EAEQ,qBAAA,CAAsB,SAAkB,SAA6C,EAAA;AAC5F,IAAM,MAAA,IAAA,GAAO,IAAK,CAAA,cAAA,CAAe,OAAO,CAAA,CAAA;AACxC,IAAA,MAAM,MAAkC,GAAA;AAAA,MACvC,OAAS,EAAA;AAAA,QACR,MAAM,OAAQ,CAAA,IAAA;AAAA,QACd,KAAO,EAAA;AAAA,UACN;AAAA,YACC,IAAM,EAAA,MAAA;AAAA,YACN,IAAM,EAAA;AAAA,cACL,MAAM,OAAQ,CAAA,IAAA;AAAA,cACd,YAAc,EAAA,MAAA;AAAA,cACd,OAAS,EAAA,IAAA;AAAA,aACV;AAAA,WACD;AAAA,SACD;AAAA,QACA,WAAW,OAAQ,CAAA,SAAA;AAAA,QACnB,IAAM,EAAA,SAAA;AAAA,OACP;AAAA,KACD,CAAA;AAEA,IAAA,IAAI,SAAW,EAAA;AACd,MAAA,MAAA,CAAO,SAAY,GAAA,SAAA,CAAA;AAAA,KACpB;AAEA,IAAO,OAAA;AAAA,MACN,OAAS,EAAA,KAAA;AAAA,MACT,EAAA,EAAI,KAAK,UAAW,EAAA;AAAA,MACpB,MAAQ,EAAA,gBAAA;AAAA,MACR,MAAA;AAAA,KACD,CAAA;AAAA,GACD;AAAA,EAEQ,uBAAA,CAAwB,cAA0C,MAAmD,EAAA;AAC5H,IAAA,OAAO,IAAI,cAA4B,CAAA;AAAA,MACtC,MAAM,MAAM,UAAY,EAAA;AACvB,QAAM,MAAA,MAAA,GAAS,aAAa,SAAU,EAAA,CAAA;AACtC,QAAM,MAAA,OAAA,GAAU,IAAI,WAAY,EAAA,CAAA;AAChC,QAAA,IAAI,MAAS,GAAA,EAAA,CAAA;AACb,QAAA,IAAI,YAAe,GAAA,KAAA,CAAA;AAEnB,QAAA,MAAM,cAAc,MAAM;AACzB,UAAA,IAAI,CAAC,YAAc,EAAA;AAClB,YAAe,YAAA,GAAA,IAAA,CAAA;AACf,YAAA,UAAA,CAAW,KAAM,EAAA,CAAA;AAAA,WAClB;AAAA,SACD,CAAA;AAEA,QAAM,MAAA,aAAA,GAAgB,OAAO,IAAiB,KAAA;AAC7C,UAAA,IAAI,SAAS,QAAU,EAAA;AACtB,YAAY,WAAA,EAAA,CAAA;AACZ,YAAA,OAAA;AAAA,WACD;AAEA,UAAM,MAAA,WAAA,GAAc,KAAK,IAAK,EAAA,CAAA;AAC9B,UAAA,IAAI,CAAC,WAAA;AAAa,YAAA,OAAA;AAElB,UAAI,IAAA;AACH,YAAM,MAAA,KAAA,GAAqB,IAAK,CAAA,KAAA,CAAM,WAAW,CAAA,CAAA;AACjD,YAAA,UAAA,CAAW,QAAQ,KAAK,CAAA,CAAA;AACxB,YAAA,IAAI,MAAM,KAAO,EAAA;AAChB,cAAY,WAAA,EAAA,CAAA;AAAA,aACb;AAAA,mBACQ,CAAP,EAAA;AACD,YAAQ,OAAA,CAAA,IAAA,CAAK,6BAA6B,WAAW,CAAA,CAAA;AAAA,WACtD;AAAA,SACD,CAAA;AAEA,QAAM,MAAA,aAAA,GAAgB,OAAO,cAAA,GAAiB,KAAU,KAAA;AACvD,UAAI,IAAA,cAAA,IAAkB,MAAO,CAAA,IAAA,EAAQ,EAAA;AACpC,YAAM,MAAA,IAAA,GAAO,eAAe,MAAM,CAAA,CAAA;AAClC,YAAA,IAAI,IAAM,EAAA;AACT,cAAA,MAAM,cAAc,IAAI,CAAA,CAAA;AAAA,aACzB;AACA,YAAS,MAAA,GAAA,EAAA,CAAA;AACT,YAAA,OAAA;AAAA,WACD;AAEA,UAAM,MAAA,KAAA,GAAQ,MAAO,CAAA,KAAA,CAAM,IAAI,CAAA,CAAA;AAC/B,UAAS,MAAA,GAAA,KAAA,CAAM,KAAS,IAAA,EAAA,CAAA;AAExB,UAAA,KAAA,MAAW,QAAQ,KAAO,EAAA;AACzB,YAAM,MAAA,IAAA,GAAO,eAAe,IAAI,CAAA,CAAA;AAChC,YAAA,IAAI,IAAM,EAAA;AACT,cAAA,MAAM,cAAc,IAAI,CAAA,CAAA;AAAA,aACzB;AAAA,WACD;AAAA,SACD,CAAA;AAEA,QAAA,IAAI,MAAQ,EAAA;AACX,UAAO,MAAA,CAAA,gBAAA,CAAiB,SAAS,MAAM;AACtC,YAAY,WAAA,EAAA,CAAA;AACZ,YAAA,MAAA,CAAO,MAAO,EAAA,CAAA;AAAA,WACd,CAAA,CAAA;AAAA,SACF;AAEA,QAAI,IAAA;AACH,UAAA,OAAO,CAAC,YAAc,EAAA;AACrB,YAAA,IAAI,iCAAQ,OAAS,EAAA;AACpB,cAAY,WAAA,EAAA,CAAA;AACZ,cAAA,OAAA;AAAA,aACD;AAEA,YAAA,MAAM,EAAE,IAAM,EAAA,KAAA,EAAU,GAAA,MAAM,OAAO,IAAK,EAAA,CAAA;AAC1C,YAAA,IAAI,IAAM,EAAA;AACT,cAAA,MAAA,IAAU,QAAQ,MAAO,EAAA,CAAA;AACzB,cAAA,MAAM,cAAc,IAAI,CAAA,CAAA;AACxB,cAAY,WAAA,EAAA,CAAA;AACZ,cAAA,MAAA;AAAA,aACD;AAEA,YAAA,MAAA,IAAU,QAAQ,MAAO,CAAA,KAAA,EAAO,EAAE,MAAA,EAAQ,MAAM,CAAA,CAAA;AAChD,YAAA,MAAM,aAAc,EAAA,CAAA;AAAA,WACrB;AAAA,SACC,SAAA;AACD,UAAA,MAAA,CAAO,WAAY,EAAA,CAAA;AAAA,SACpB;AAAA,OACD;AAAA,KACA,CAAA,CAAA;AAAA,GACF;AAAA;AAAA,EAGA,OAAO,uBAAwB,CAAA,YAAA,EAAsB,WAAuB,OAAkB,EAAA,OAAA,EAAiB,WAAoB,MAAkE,EAAA;AAEpM,IAAM,MAAA,aAAA,GAAgB,IAAK,CAAA,SAAA,CAAU,SAAS,CAAA,CAAA;AAE9C,IAAA,MAAM,aAAa,IAAK,CAAA,QAAA,CAAS,kBAAmB,CAAA,aAAa,CAAC,CAAC,CAAA,CAAA;AAEnE,IAAA,MAAM,OAAU,GAAA,IAAA,CAAK,qBAAsB,CAAA,OAAA,EAAS,SAAS,CAAA,CAAA;AAE7D,IAAM,MAAA,QAAA,GAAW,MAAM,KAAA,CAAM,YAAc,EAAA;AAAA,MAC1C,MAAQ,EAAA,MAAA;AAAA,MACR,OAAS,EAAA;AAAA,QACR,cAAgB,EAAA,kBAAA;AAAA,QAChB,MAAQ,EAAA,mBAAA;AAAA,QACR,cAAgB,EAAA,UAAA;AAAA;AAAA;AAAA,QAGhB,GAAG,OAAA;AAAA,OACJ;AAAA,MACA,IAAA,EAAM,IAAK,CAAA,SAAA,CAAU,OAAO,CAAA;AAAA,MAC5B,MAAA;AAAA,KACA,CAAA,CAAA;AAED,IAAI,IAAA,CAAC,SAAS,EAAI,EAAA;AACjB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAe,YAAA,EAAA,QAAA,CAAS,MAAQ,CAAA,CAAA,CAAA,CAAA;AAAA,KACjD;AAEA,IAAI,IAAA,CAAC,SAAS,IAAM,EAAA;AACnB,MAAM,MAAA,IAAI,MAAM,kBAAkB,CAAA,CAAA;AAAA,KACnC;AAEA,IAAM,MAAA,MAAA,GAAS,QAAS,CAAA,IAAA,CAAK,SAAU,EAAA,CAAA;AACvC,IAAM,MAAA,OAAA,GAAU,IAAI,WAAY,EAAA,CAAA;AAChC,IAAA,IAAI,MAAS,GAAA,EAAA,CAAA;AAEb,IAAM,MAAA,aAAA,GAAgB,WAAW,cAAA,GAAiB,KAAiD,EAAA;AAClG,MAAI,IAAA,cAAA,IAAkB,MAAO,CAAA,IAAA,EAAQ,EAAA;AACpC,QAAM,MAAA,IAAA,GAAO,eAAe,MAAM,CAAA,CAAA;AAClC,QAAS,MAAA,GAAA,EAAA,CAAA;AACT,QAAI,IAAA,IAAA,IAAQ,SAAS,QAAU,EAAA;AAC9B,UAAI,IAAA;AACH,YAAM,MAAA,IAAA,CAAK,MAAM,IAAI,CAAA,CAAA;AAAA,mBACb,CAAP,EAAA;AACD,YAAQ,OAAA,CAAA,IAAA,CAAK,6BAA6B,IAAI,CAAA,CAAA;AAAA,WAC/C;AAAA,SACD;AACA,QAAA,OAAO,IAAS,KAAA,QAAA,CAAA;AAAA,OACjB;AAEA,MAAM,MAAA,KAAA,GAAQ,MAAO,CAAA,KAAA,CAAM,IAAI,CAAA,CAAA;AAC/B,MAAS,MAAA,GAAA,KAAA,CAAM,KAAS,IAAA,EAAA,CAAA;AAExB,MAAA,KAAA,MAAW,QAAQ,KAAO,EAAA;AACzB,QAAM,MAAA,IAAA,GAAO,eAAe,IAAI,CAAA,CAAA;AAChC,QAAA,IAAI,CAAC,IAAA;AAAM,UAAA,SAAA;AACX,QAAA,IAAI,IAAS,KAAA,QAAA;AAAU,UAAO,OAAA,IAAA,CAAA;AAE9B,QAAI,IAAA;AACH,UAAM,MAAA,IAAA,CAAK,MAAM,IAAI,CAAA,CAAA;AAAA,iBACb,CAAP,EAAA;AACD,UAAQ,OAAA,CAAA,IAAA,CAAK,6BAA6B,IAAI,CAAA,CAAA;AAAA,SAC/C;AAAA,OACD;AAEA,MAAO,OAAA,KAAA,CAAA;AAAA,KACR,CAAA;AAEA,IAAI,IAAA;AACH,MAAA,OAAO,IAAM,EAAA;AACZ,QAAA,IAAI,iCAAQ,OAAS,EAAA;AACpB,UAAA,OAAA;AAAA,SACD;AAEA,QAAA,MAAM,EAAE,IAAM,EAAA,KAAA,EAAU,GAAA,MAAM,OAAO,IAAK,EAAA,CAAA;AAC1C,QAAA,IAAI,IAAM,EAAA;AACT,UAAA,MAAA,IAAU,QAAQ,MAAO,EAAA,CAAA;AACzB,UAAW,KAAA,MAAA,KAAA,IAAS,aAAc,CAAA,IAAI,CAAG,EAAA;AACxC,YAAM,MAAA,KAAA,CAAA;AACN,YAAA,IAAI,KAAM,CAAA,KAAA;AAAO,cAAA,OAAA;AAAA,WAClB;AACA,UAAA,MAAA;AAAA,SACD;AAEA,QAAA,MAAA,IAAU,QAAQ,MAAO,CAAA,KAAA,EAAO,EAAE,MAAA,EAAQ,MAAM,CAAA,CAAA;AAChD,QAAW,KAAA,MAAA,KAAA,IAAS,eAAiB,EAAA;AACpC,UAAM,MAAA,KAAA,CAAA;AACN,UAAA,IAAI,KAAM,CAAA,KAAA;AAAO,YAAA,OAAA;AAAA,SAClB;AAAA,OACD;AAAA,KACC,SAAA;AACD,MAAA,MAAA,CAAO,WAAY,EAAA,CAAA;AAAA,KACpB;AAAA,GACD;AACD,CAAA;AAGa,MAAA,UAAA,GAAa,IAAI,UAAW;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"chatRobot.js","sources":["../../../../../../packages/components/touchchat/utils/chatRobot.ts"],"sourcesContent":["// // 假设 Socket 和 SOCKET_STATUS 的类型定义如下,实际可能需要根据 socket.ts 文件调整\nimport { Socket, SOCKET_STATUS } from './socket';\n// 修改iSocket接口定义\ninterface iSocket {\n status: string;\n connect: (arg: boolean) => Promise<boolean>; // 修改为返回Promise<boolean>\n close: () => void;\n send: (data: string | object | Blob | ArrayBuffer, sendType?: 'text' | 'binary') => Promise<void>; // 更新参数和返回类型\n}\n\n// type SOCKET_STATUS = {\n// CONNECTED: string;\n// };\n\ntype Listener = {\n msgCallback: (data: any) => void;\n statusCallback?: (status: string) => void;\n};\n\ntype ChatConfig = {\n token: string;\n wsUrl: string;\n otherChatData?: Record<string, any>;\n};\n\n// 由于 Vue 未在项目结构中找到,这里简化处理\ninterface VuePrototype {\n $uuid: () => string;\n}\n\ndeclare global {\n interface Location {\n readonly origin: string; // 添加readonly修饰符\n }\n}\n\nclass ChatRobot {\n chatSocket: iSocket | null = null;\n chatId: string;\n chatOrder: number = 0;\n status: string | null = null;\n token: string;\n listeners: Map<string, Listener[]> = new Map();\n config: ChatConfig;\n\n constructor(config: ChatConfig) {\n // 假设 Vue 存在且有 $uuid 方法\n const mockVue: { prototype: VuePrototype } = {\n prototype: {\n $uuid: () => 'mock-uuid-123',\n },\n };\n this.chatId = mockVue.prototype.$uuid().replace(/-/gi, '');\n this.config = { ...config };\n this.token = config.token;\n }\n\n connect() {\n let origin = (window.location as any).origin || 'http://localhost';\n\n if (origin.indexOf('http') > -1) {\n origin = origin.replace('http', 'ws');\n } else if (origin.indexOf('https') > -1) {\n origin = origin.replace('https', 'wss');\n }\n\n // 假设 Socket 构造函数签名如下\n this.chatSocket = new Socket(\n `${origin}/websocket`,\n // `${this.config.wsUrl}`,\n this.chatMsgCallback.bind(this),\n this.chatStatusCallback.bind(this),\n this\n );\n this.chatSocket.connect(true);\n }\n\n close() {\n if (this.chatSocket) {\n this.chatSocket.close();\n }\n }\n\n chatMsgCallback(msg: any) {\n if (typeof msg !== 'object' || !msg.type) return;\n\n const callbacks = this.listeners.get(msg.type);\n if (callbacks) {\n callbacks.forEach(callback => {\n try {\n callback.msgCallback(msg.data ? msg.data : msg);\n } catch (e) {\n console.error(e);\n }\n });\n }\n }\n\n chatStatusCallback(status: string) {\n this.status = status;\n // 连接成功后,发送此指令\n if (status === SOCKET_STATUS.CONNECTED) {\n let baseInfo = { chatId: this.chatId, accessToken: this.token, chatType: 'switchHistory' };\n\n if (this.config && this.config.otherChatData) {\n baseInfo = { ...baseInfo, ...this.config.otherChatData };\n }\n if (this.chatSocket) {\n this.chatSocket.send(baseInfo, 'text');\n }\n }\n this.listeners.forEach(callbacks => {\n callbacks.forEach(callback => {\n if (callback.statusCallback) {\n try {\n callback.statusCallback(status);\n } catch (e) {\n console.error('statusCallback回调异常', e);\n }\n }\n });\n });\n }\n\n addListener(msgType: string, listener: Listener) {\n if (!this.listeners.has(msgType)) {\n this.listeners.set(msgType, []);\n }\n this.listeners.get(msgType)?.push(listener);\n }\n\n removeListener() {\n // listener: Listener\n console.log(this.listeners);\n // this.listeners.forEach((value) => {\n // const index = value.indexOf(listener);\n // if (index !== -1) {\n // value.splice(index, 1);\n // }\n // });\n }\n\n send(chatInfo: any, chatType: string = 'request') {\n if (!this.chatSocket || this.chatSocket.status !== 'connected') {\n throw new Error('网络连接失败,请检查网络');\n }\n try {\n let chatData = {\n chatId: this.chatId,\n accessToken: this.token,\n chatType: 'request',\n chatOrder: chatType === 'request' ? ++this.chatOrder : undefined,\n chatInfo,\n };\n if (this.config && this.config.otherChatData) {\n chatData = { ...chatData, ...this.config.otherChatData };\n }\n this.chatSocket.send(chatData, 'text');\n } catch (e) {\n if (e instanceof Error) {\n throw new Error('消息组织失败,请刷新');\n }\n }\n }\n}\n\nexport { ChatRobot };\n"],"names":["Socket","SOCKET_STATUS"],"mappings":"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"}
1
+ {"version":3,"file":"chatRobot.js","sources":["../../../../../../packages/components/touchchat/utils/chatRobot.ts"],"sourcesContent":["// // 假设 Socket 和 SOCKET_STATUS 的类型定义如下,实际可能需要根据 socket.ts 文件调整\r\nimport { Socket, SOCKET_STATUS } from './socket';\r\n// 修改iSocket接口定义\r\ninterface iSocket {\r\n status: string;\r\n connect: (arg: boolean) => Promise<boolean>; // 修改为返回Promise<boolean>\r\n close: () => void;\r\n send: (data: string | object | Blob | ArrayBuffer, sendType?: 'text' | 'binary') => Promise<void>; // 更新参数和返回类型\r\n}\r\n\r\n// type SOCKET_STATUS = {\r\n// CONNECTED: string;\r\n// };\r\n\r\ntype Listener = {\r\n msgCallback: (data: any) => void;\r\n statusCallback?: (status: string) => void;\r\n};\r\n\r\ntype ChatConfig = {\r\n token: string;\r\n wsUrl: string;\r\n otherChatData?: Record<string, any>;\r\n};\r\n\r\n// 由于 Vue 未在项目结构中找到,这里简化处理\r\ninterface VuePrototype {\r\n $uuid: () => string;\r\n}\r\n\r\ndeclare global {\r\n interface Location {\r\n readonly origin: string; // 添加readonly修饰符\r\n }\r\n}\r\n\r\nclass ChatRobot {\r\n chatSocket: iSocket | null = null;\r\n chatId: string;\r\n chatOrder: number = 0;\r\n status: string | null = null;\r\n token: string;\r\n listeners: Map<string, Listener[]> = new Map();\r\n config: ChatConfig;\r\n\r\n constructor(config: ChatConfig) {\r\n // 假设 Vue 存在且有 $uuid 方法\r\n const mockVue: { prototype: VuePrototype } = {\r\n prototype: {\r\n $uuid: () => 'mock-uuid-123',\r\n },\r\n };\r\n this.chatId = mockVue.prototype.$uuid().replace(/-/gi, '');\r\n this.config = { ...config };\r\n this.token = config.token;\r\n }\r\n\r\n connect() {\r\n let origin = (window.location as any).origin || 'http://localhost';\r\n\r\n if (origin.indexOf('http') > -1) {\r\n origin = origin.replace('http', 'ws');\r\n } else if (origin.indexOf('https') > -1) {\r\n origin = origin.replace('https', 'wss');\r\n }\r\n\r\n // 假设 Socket 构造函数签名如下\r\n this.chatSocket = new Socket(\r\n `${origin}/websocket`,\r\n // `${this.config.wsUrl}`,\r\n this.chatMsgCallback.bind(this),\r\n this.chatStatusCallback.bind(this),\r\n this\r\n );\r\n this.chatSocket.connect(true);\r\n }\r\n\r\n close() {\r\n if (this.chatSocket) {\r\n this.chatSocket.close();\r\n }\r\n }\r\n\r\n chatMsgCallback(msg: any) {\r\n if (typeof msg !== 'object' || !msg.type) return;\r\n\r\n const callbacks = this.listeners.get(msg.type);\r\n if (callbacks) {\r\n callbacks.forEach(callback => {\r\n try {\r\n callback.msgCallback(msg.data ? msg.data : msg);\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n });\r\n }\r\n }\r\n\r\n chatStatusCallback(status: string) {\r\n this.status = status;\r\n // 连接成功后,发送此指令\r\n if (status === SOCKET_STATUS.CONNECTED) {\r\n let baseInfo = { chatId: this.chatId, accessToken: this.token, chatType: 'switchHistory' };\r\n\r\n if (this.config && this.config.otherChatData) {\r\n baseInfo = { ...baseInfo, ...this.config.otherChatData };\r\n }\r\n if (this.chatSocket) {\r\n this.chatSocket.send(baseInfo, 'text');\r\n }\r\n }\r\n this.listeners.forEach(callbacks => {\r\n callbacks.forEach(callback => {\r\n if (callback.statusCallback) {\r\n try {\r\n callback.statusCallback(status);\r\n } catch (e) {\r\n console.error('statusCallback回调异常', e);\r\n }\r\n }\r\n });\r\n });\r\n }\r\n\r\n addListener(msgType: string, listener: Listener) {\r\n if (!this.listeners.has(msgType)) {\r\n this.listeners.set(msgType, []);\r\n }\r\n this.listeners.get(msgType)?.push(listener);\r\n }\r\n\r\n removeListener() {\r\n // listener: Listener\r\n console.log(this.listeners);\r\n // this.listeners.forEach((value) => {\r\n // const index = value.indexOf(listener);\r\n // if (index !== -1) {\r\n // value.splice(index, 1);\r\n // }\r\n // });\r\n }\r\n\r\n send(chatInfo: any, chatType: string = 'request') {\r\n if (!this.chatSocket || this.chatSocket.status !== 'connected') {\r\n throw new Error('网络连接失败,请检查网络');\r\n }\r\n try {\r\n let chatData = {\r\n chatId: this.chatId,\r\n accessToken: this.token,\r\n chatType: 'request',\r\n chatOrder: chatType === 'request' ? ++this.chatOrder : undefined,\r\n chatInfo,\r\n };\r\n if (this.config && this.config.otherChatData) {\r\n chatData = { ...chatData, ...this.config.otherChatData };\r\n }\r\n this.chatSocket.send(chatData, 'text');\r\n } catch (e) {\r\n if (e instanceof Error) {\r\n throw new Error('消息组织失败,请刷新');\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport { ChatRobot };\r\n"],"names":["Socket","SOCKET_STATUS"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"deepCloneDom.js","sources":["../../../../../../packages/components/touchchat/utils/deepCloneDom.ts"],"sourcesContent":["/** 核心函数, 对比节点的内容 实现动态更新 markdown 的 div 而不是用 innerHTML 的属性全部刷新 */\n\nexport function deepCloneDom(div1: Node | null, div2: Node | null): void {\n if (!div1 || !div2) {\n return;\n }\n\n // 递归比较和更新 div1 和 div2 的子节点\n function compareAndUpdate(node1: Node | null, node2: Node): void {\n // 情况 1:node1 是文本节点,更新文本内容\n if (node1 && node1.nodeType === Node.TEXT_NODE && node2.nodeType === Node.TEXT_NODE) {\n if (node1.nodeValue !== node2.nodeValue) {\n // 更新文本内容\n node1.nodeValue = node2.nodeValue;\n }\n return;\n }\n\n // 情况 2:node1 和 node2 的标签名不同,替换整个节点\n if (\n !node1 ||\n (node1.nodeType === Node.ELEMENT_NODE &&\n node2.nodeType === Node.ELEMENT_NODE &&\n (node1 as Element).tagName !== (node2 as Element).tagName)\n ) {\n // 克隆 node2 节点\n const newNode = node2.cloneNode(true);\n if (node1 && node1.parentNode) {\n // 替换旧节点\n node1.parentNode.replaceChild(newNode, node1);\n } else if (node2.parentNode) {\n // 如果 node1 不存在,直接新增\n node2.parentNode.appendChild(newNode);\n }\n return;\n }\n\n // 确保 node1 是元素节点再进行属性操作\n if (node1 && node1.nodeType === Node.ELEMENT_NODE && node2.nodeType === Node.ELEMENT_NODE) {\n const element1 = node1 as Element;\n const element2 = node2 as Element;\n\n // 情况 3:节点的 class 或其他属性更新, 注意对root节点的保护\n if (element1.className !== 'article-content' && element1.className !== element2.className) {\n // 3.1 更新 className\n element1.className = element2.className;\n }\n\n // 3.2 对 id 的更新 注意对root节点的保护\n if (element1.id !== 'article-content' && element1.id !== element2.id) {\n element1.id = element2.id;\n }\n\n // 3.3 对 style 的更新\n if ((element1 as HTMLElement).style.cssText !== (element2 as HTMLElement).style.cssText) {\n (element1 as HTMLElement).style.cssText = (element2 as HTMLElement).style.cssText;\n }\n }\n\n // 情况 4:递归对比和更新子节点\n const children1 = node1 ? Array.from(node1.childNodes) : []; // node1 的所有子节点\n const children2 = Array.from(node2.childNodes); // node2 的所有子节点\n\n // 遍历 node2 的子节点,逐个与 node1 的对应子节点比较\n children2.forEach((child2, index) => {\n const child1 = children1[index];\n if (!child1) {\n // 如果 child1 不存在,直接克隆 child2 并添加到 node1\n const newChild = child2.cloneNode(true);\n if (node1 && node1.nodeType === Node.ELEMENT_NODE) {\n node1.appendChild(newChild);\n }\n } else {\n // 如果 child1 存在,递归比较和更新\n compareAndUpdate(child1, child2);\n }\n });\n\n // 删除 node1 中多余的子节点\n if (children1.length > children2.length) {\n for (let i = children2.length; i < children1.length; i++) {\n if (node1) {\n node1.removeChild(children1[i]);\n }\n }\n }\n }\n\n // 从 div2 根节点开始与 div1 比较\n compareAndUpdate(div1, div2);\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deepCloneDom.js","sources":["../../../../../../packages/components/touchchat/utils/deepCloneDom.ts"],"sourcesContent":["/** 核心函数, 对比节点的内容 实现动态更新 markdown 的 div 而不是用 innerHTML 的属性全部刷新 */\r\n\r\nexport function deepCloneDom(div1: Node | null, div2: Node | null): void {\r\n if (!div1 || !div2) {\r\n return;\r\n }\r\n\r\n // 递归比较和更新 div1 和 div2 的子节点\r\n function compareAndUpdate(node1: Node | null, node2: Node): void {\r\n // 情况 1:node1 是文本节点,更新文本内容\r\n if (node1 && node1.nodeType === Node.TEXT_NODE && node2.nodeType === Node.TEXT_NODE) {\r\n if (node1.nodeValue !== node2.nodeValue) {\r\n // 更新文本内容\r\n node1.nodeValue = node2.nodeValue;\r\n }\r\n return;\r\n }\r\n\r\n // 情况 2:node1 和 node2 的标签名不同,替换整个节点\r\n if (\r\n !node1 ||\r\n (node1.nodeType === Node.ELEMENT_NODE &&\r\n node2.nodeType === Node.ELEMENT_NODE &&\r\n (node1 as Element).tagName !== (node2 as Element).tagName)\r\n ) {\r\n // 克隆 node2 节点\r\n const newNode = node2.cloneNode(true);\r\n if (node1 && node1.parentNode) {\r\n // 替换旧节点\r\n node1.parentNode.replaceChild(newNode, node1);\r\n } else if (node2.parentNode) {\r\n // 如果 node1 不存在,直接新增\r\n node2.parentNode.appendChild(newNode);\r\n }\r\n return;\r\n }\r\n\r\n // 确保 node1 是元素节点再进行属性操作\r\n if (node1 && node1.nodeType === Node.ELEMENT_NODE && node2.nodeType === Node.ELEMENT_NODE) {\r\n const element1 = node1 as Element;\r\n const element2 = node2 as Element;\r\n\r\n // 情况 3:节点的 class 或其他属性更新, 注意对root节点的保护\r\n if (element1.className !== 'article-content' && element1.className !== element2.className) {\r\n // 3.1 更新 className\r\n element1.className = element2.className;\r\n }\r\n\r\n // 3.2 对 id 的更新 注意对root节点的保护\r\n if (element1.id !== 'article-content' && element1.id !== element2.id) {\r\n element1.id = element2.id;\r\n }\r\n\r\n // 3.3 对 style 的更新\r\n if ((element1 as HTMLElement).style.cssText !== (element2 as HTMLElement).style.cssText) {\r\n (element1 as HTMLElement).style.cssText = (element2 as HTMLElement).style.cssText;\r\n }\r\n }\r\n\r\n // 情况 4:递归对比和更新子节点\r\n const children1 = node1 ? Array.from(node1.childNodes) : []; // node1 的所有子节点\r\n const children2 = Array.from(node2.childNodes); // node2 的所有子节点\r\n\r\n // 遍历 node2 的子节点,逐个与 node1 的对应子节点比较\r\n children2.forEach((child2, index) => {\r\n const child1 = children1[index];\r\n if (!child1) {\r\n // 如果 child1 不存在,直接克隆 child2 并添加到 node1\r\n const newChild = child2.cloneNode(true);\r\n if (node1 && node1.nodeType === Node.ELEMENT_NODE) {\r\n node1.appendChild(newChild);\r\n }\r\n } else {\r\n // 如果 child1 存在,递归比较和更新\r\n compareAndUpdate(child1, child2);\r\n }\r\n });\r\n\r\n // 删除 node1 中多余的子节点\r\n if (children1.length > children2.length) {\r\n for (let i = children2.length; i < children1.length; i++) {\r\n if (node1) {\r\n node1.removeChild(children1[i]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n // 从 div2 根节点开始与 div1 比较\r\n compareAndUpdate(div1, div2);\r\n}\r\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"hight-it.js","sources":["../../../../../../packages/components/touchchat/utils/hight-it.ts"],"sourcesContent":["import 'highlight.js/styles/atom-one-light.css';\nimport hljs, { LanguageFn } from 'highlight.js/lib/core';\nimport Htmlbars from 'highlight.js/lib/languages/htmlbars';\nimport Handlebars from 'highlight.js/lib/languages/handlebars';\nimport Css from 'highlight.js/lib/languages/css';\nimport Shell from 'highlight.js/lib/languages/shell';\nimport Bash from 'highlight.js/lib/languages/bash';\nimport C from 'highlight.js/lib/languages/c';\nimport Clike from 'highlight.js/lib/languages/c-like';\nimport Java from 'highlight.js/lib/languages/java';\nimport Python from 'highlight.js/lib/languages/python';\nimport Cpp from 'highlight.js/lib/languages/cpp';\nimport Csharp from 'highlight.js/lib/languages/csharp';\nimport Php from 'highlight.js/lib/languages/php';\nimport Sql from 'highlight.js/lib/languages/sql';\nimport R from 'highlight.js/lib/languages/r';\nimport Swift from 'highlight.js/lib/languages/swift';\nimport Go from 'highlight.js/lib/languages/go';\nimport Matlab from 'highlight.js/lib/languages/matlab';\nimport Ruby from 'highlight.js/lib/languages/ruby';\nimport Perl from 'highlight.js/lib/languages/perl';\nimport Objectivec from 'highlight.js/lib/languages/objectivec';\nimport Rust from 'highlight.js/lib/languages/rust';\nimport Dart from 'highlight.js/lib/languages/dart';\nimport Delphi from 'highlight.js/lib/languages/delphi';\nimport D from 'highlight.js/lib/languages/d';\nimport Kotlin from 'highlight.js/lib/languages/kotlin';\nimport Scala from 'highlight.js/lib/languages/scala';\nimport Sas from 'highlight.js/lib/languages/sas';\nimport Lisp from 'highlight.js/lib/languages/lisp';\nimport Lua from 'highlight.js/lib/languages/lua';\nimport Ada from 'highlight.js/lib/languages/ada';\nimport Fortran from 'highlight.js/lib/languages/fortran';\nimport Powershell from 'highlight.js/lib/languages/powershell';\nimport Vbscript from 'highlight.js/lib/languages/vbscript';\nimport VbscriptHtml from 'highlight.js/lib/languages/vbscript-html';\nimport Groovy from 'highlight.js/lib/languages/groovy';\nimport Julia from 'highlight.js/lib/languages/julia';\nimport JuliaRepl from 'highlight.js/lib/languages/julia-repl';\nimport Haskell from 'highlight.js/lib/languages/haskell';\nimport Actionscript from 'highlight.js/lib/languages/actionscript';\nimport Scheme from 'highlight.js/lib/languages/scheme';\nimport Typescript from 'highlight.js/lib/languages/typescript';\nimport Fsharp from 'highlight.js/lib/languages/fsharp';\nimport Prolog from 'highlight.js/lib/languages/prolog';\nimport Erlang from 'highlight.js/lib/languages/erlang';\nimport ErlangRepl from 'highlight.js/lib/languages/erlang-repl';\nimport Json from 'highlight.js/lib/languages/json';\nimport Ini from 'highlight.js/lib/languages/ini';\n\nhljs.registerLanguage('json', Json);\nhljs.registerLanguage('ini', Ini);\nhljs.registerLanguage('handlebars', Handlebars);\nhljs.registerLanguage('htmlbars', Htmlbars);\nhljs.registerLanguage('css', Css);\nhljs.registerLanguage('shell', Shell);\nhljs.registerLanguage('bash', Bash);\nhljs.registerLanguage('c-like', Clike);\nhljs.registerLanguage('c', C);\nhljs.registerLanguage('cpp', Cpp);\nhljs.registerLanguage('java', Java);\nhljs.registerLanguage('python', Python);\nhljs.registerLanguage('csharp', Csharp);\nhljs.registerLanguage('php', Php);\nhljs.registerLanguage('sql', Sql);\nhljs.registerLanguage('r', R);\nhljs.registerLanguage('swift', Swift);\nhljs.registerLanguage('go', Go);\nhljs.registerLanguage('matlab', Matlab);\nhljs.registerLanguage('ruby', Ruby);\nhljs.registerLanguage('perl', Perl);\nhljs.registerLanguage('objectivec', Objectivec);\nhljs.registerLanguage('rust', Rust);\nhljs.registerLanguage('dart', Dart);\nhljs.registerLanguage('delphi', Delphi);\nhljs.registerLanguage('d', D);\nhljs.registerLanguage('kotlin', Kotlin);\nhljs.registerLanguage('scala', Scala);\nhljs.registerLanguage('sas', Sas);\nhljs.registerLanguage('lisp', Lisp);\nhljs.registerLanguage('lua', Lua);\nhljs.registerLanguage('ada', Ada);\nhljs.registerLanguage('fortran', Fortran);\nhljs.registerLanguage('powershell', Powershell);\nhljs.registerLanguage('vbscript', Vbscript);\nhljs.registerLanguage('vbscript-html', VbscriptHtml);\nhljs.registerLanguage('groovy', Groovy);\nhljs.registerLanguage('julia', Julia);\nhljs.registerLanguage('julia-repl', JuliaRepl);\nhljs.registerLanguage('haskell', Haskell);\nhljs.registerLanguage('actionscript', Actionscript);\nhljs.registerLanguage('scheme', Scheme);\nhljs.registerLanguage('typescript', Typescript);\nhljs.registerLanguage('fsharp', Fsharp);\nhljs.registerLanguage('prolog', Prolog);\nhljs.registerLanguage('erlang', Erlang);\nhljs.registerLanguage('erlang-repl', ErlangRepl);\n\ninterface MarkdownIt {\n renderer: {\n rules: Record<string, (tokens: any[], idx: number, ...args: any[]) => string>;\n };\n}\n\nconst highlightPlugin = (md: MarkdownIt) => {\n md.renderer.rules.fence = (tokens: any[], idx: number) => {\n const token = tokens[idx];\n const code: string = token.content;\n const lang: string = token.info;\n const langObj: LanguageFn | false = hljs.getLanguage(lang);\n let cnt: string;\n if (langObj) {\n cnt = hljs.highlight(code, { language: lang }).value;\n } else {\n cnt = hljs.highlightAuto(code).value;\n }\n\n return `<pre class=\"hljs\"><code>${cnt}</code></pre>`;\n };\n};\n\nexport default highlightPlugin;\n"],"names":["hljs","Json","Ini","Handlebars","Htmlbars","Css","Shell","Bash","Clike","C","Cpp","Java","Python","Csharp","Php","Sql","R","Swift","Go","Matlab","Ruby","Perl","Objectivec","Rust","Dart","Delphi","D","Kotlin","Scala","Sas","Lisp","Lua","Ada","Fortran","Powershell","Vbscript","VbscriptHtml","Groovy","Julia","JuliaRepl","Haskell","Actionscript","Scheme","Typescript","Fsharp","Prolog","Erlang","ErlangRepl"],"mappings":"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"}
1
+ {"version":3,"file":"hight-it.js","sources":["../../../../../../packages/components/touchchat/utils/hight-it.ts"],"sourcesContent":["import 'highlight.js/styles/atom-one-light.css';\r\nimport hljs, { LanguageFn } from 'highlight.js/lib/core';\r\nimport Htmlbars from 'highlight.js/lib/languages/htmlbars';\r\nimport Handlebars from 'highlight.js/lib/languages/handlebars';\r\nimport Css from 'highlight.js/lib/languages/css';\r\nimport Shell from 'highlight.js/lib/languages/shell';\r\nimport Bash from 'highlight.js/lib/languages/bash';\r\nimport C from 'highlight.js/lib/languages/c';\r\nimport Clike from 'highlight.js/lib/languages/c-like';\r\nimport Java from 'highlight.js/lib/languages/java';\r\nimport Python from 'highlight.js/lib/languages/python';\r\nimport Cpp from 'highlight.js/lib/languages/cpp';\r\nimport Csharp from 'highlight.js/lib/languages/csharp';\r\nimport Php from 'highlight.js/lib/languages/php';\r\nimport Sql from 'highlight.js/lib/languages/sql';\r\nimport R from 'highlight.js/lib/languages/r';\r\nimport Swift from 'highlight.js/lib/languages/swift';\r\nimport Go from 'highlight.js/lib/languages/go';\r\nimport Matlab from 'highlight.js/lib/languages/matlab';\r\nimport Ruby from 'highlight.js/lib/languages/ruby';\r\nimport Perl from 'highlight.js/lib/languages/perl';\r\nimport Objectivec from 'highlight.js/lib/languages/objectivec';\r\nimport Rust from 'highlight.js/lib/languages/rust';\r\nimport Dart from 'highlight.js/lib/languages/dart';\r\nimport Delphi from 'highlight.js/lib/languages/delphi';\r\nimport D from 'highlight.js/lib/languages/d';\r\nimport Kotlin from 'highlight.js/lib/languages/kotlin';\r\nimport Scala from 'highlight.js/lib/languages/scala';\r\nimport Sas from 'highlight.js/lib/languages/sas';\r\nimport Lisp from 'highlight.js/lib/languages/lisp';\r\nimport Lua from 'highlight.js/lib/languages/lua';\r\nimport Ada from 'highlight.js/lib/languages/ada';\r\nimport Fortran from 'highlight.js/lib/languages/fortran';\r\nimport Powershell from 'highlight.js/lib/languages/powershell';\r\nimport Vbscript from 'highlight.js/lib/languages/vbscript';\r\nimport VbscriptHtml from 'highlight.js/lib/languages/vbscript-html';\r\nimport Groovy from 'highlight.js/lib/languages/groovy';\r\nimport Julia from 'highlight.js/lib/languages/julia';\r\nimport JuliaRepl from 'highlight.js/lib/languages/julia-repl';\r\nimport Haskell from 'highlight.js/lib/languages/haskell';\r\nimport Actionscript from 'highlight.js/lib/languages/actionscript';\r\nimport Scheme from 'highlight.js/lib/languages/scheme';\r\nimport Typescript from 'highlight.js/lib/languages/typescript';\r\nimport Fsharp from 'highlight.js/lib/languages/fsharp';\r\nimport Prolog from 'highlight.js/lib/languages/prolog';\r\nimport Erlang from 'highlight.js/lib/languages/erlang';\r\nimport ErlangRepl from 'highlight.js/lib/languages/erlang-repl';\r\nimport Json from 'highlight.js/lib/languages/json';\r\nimport Ini from 'highlight.js/lib/languages/ini';\r\n\r\nhljs.registerLanguage('json', Json);\r\nhljs.registerLanguage('ini', Ini);\r\nhljs.registerLanguage('handlebars', Handlebars);\r\nhljs.registerLanguage('htmlbars', Htmlbars);\r\nhljs.registerLanguage('css', Css);\r\nhljs.registerLanguage('shell', Shell);\r\nhljs.registerLanguage('bash', Bash);\r\nhljs.registerLanguage('c-like', Clike);\r\nhljs.registerLanguage('c', C);\r\nhljs.registerLanguage('cpp', Cpp);\r\nhljs.registerLanguage('java', Java);\r\nhljs.registerLanguage('python', Python);\r\nhljs.registerLanguage('csharp', Csharp);\r\nhljs.registerLanguage('php', Php);\r\nhljs.registerLanguage('sql', Sql);\r\nhljs.registerLanguage('r', R);\r\nhljs.registerLanguage('swift', Swift);\r\nhljs.registerLanguage('go', Go);\r\nhljs.registerLanguage('matlab', Matlab);\r\nhljs.registerLanguage('ruby', Ruby);\r\nhljs.registerLanguage('perl', Perl);\r\nhljs.registerLanguage('objectivec', Objectivec);\r\nhljs.registerLanguage('rust', Rust);\r\nhljs.registerLanguage('dart', Dart);\r\nhljs.registerLanguage('delphi', Delphi);\r\nhljs.registerLanguage('d', D);\r\nhljs.registerLanguage('kotlin', Kotlin);\r\nhljs.registerLanguage('scala', Scala);\r\nhljs.registerLanguage('sas', Sas);\r\nhljs.registerLanguage('lisp', Lisp);\r\nhljs.registerLanguage('lua', Lua);\r\nhljs.registerLanguage('ada', Ada);\r\nhljs.registerLanguage('fortran', Fortran);\r\nhljs.registerLanguage('powershell', Powershell);\r\nhljs.registerLanguage('vbscript', Vbscript);\r\nhljs.registerLanguage('vbscript-html', VbscriptHtml);\r\nhljs.registerLanguage('groovy', Groovy);\r\nhljs.registerLanguage('julia', Julia);\r\nhljs.registerLanguage('julia-repl', JuliaRepl);\r\nhljs.registerLanguage('haskell', Haskell);\r\nhljs.registerLanguage('actionscript', Actionscript);\r\nhljs.registerLanguage('scheme', Scheme);\r\nhljs.registerLanguage('typescript', Typescript);\r\nhljs.registerLanguage('fsharp', Fsharp);\r\nhljs.registerLanguage('prolog', Prolog);\r\nhljs.registerLanguage('erlang', Erlang);\r\nhljs.registerLanguage('erlang-repl', ErlangRepl);\r\n\r\ninterface MarkdownIt {\r\n renderer: {\r\n rules: Record<string, (tokens: any[], idx: number, ...args: any[]) => string>;\r\n };\r\n}\r\n\r\nconst highlightPlugin = (md: MarkdownIt) => {\r\n md.renderer.rules.fence = (tokens: any[], idx: number) => {\r\n const token = tokens[idx];\r\n const code: string = token.content;\r\n const lang: string = token.info;\r\n const langObj: LanguageFn | false = hljs.getLanguage(lang);\r\n let cnt: string;\r\n if (langObj) {\r\n cnt = hljs.highlight(code, { language: lang }).value;\r\n } else {\r\n cnt = hljs.highlightAuto(code).value;\r\n }\r\n\r\n return `<pre class=\"hljs\"><code>${cnt}</code></pre>`;\r\n };\r\n};\r\n\r\nexport default highlightPlugin;\r\n"],"names":["hljs","Json","Ini","Handlebars","Htmlbars","Css","Shell","Bash","Clike","C","Cpp","Java","Python","Csharp","Php","Sql","R","Swift","Go","Matlab","Ruby","Perl","Objectivec","Rust","Dart","Delphi","D","Kotlin","Scala","Sas","Lisp","Lua","Ada","Fortran","Powershell","Vbscript","VbscriptHtml","Groovy","Julia","JuliaRepl","Haskell","Actionscript","Scheme","Typescript","Fsharp","Prolog","Erlang","ErlangRepl"],"mappings":"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"}