@touchvue/chat 1.0.0-beta.29 → 1.0.0-beta.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/es/package.json.mjs +1 -1
- package/es/packages/components/touchchat/component/ModuleSelect.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/src/AiChat/ChatInput.vue2.mjs +17 -18
- package/es/packages/components/touchchat/src/AiChat/ChatInput.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/src/AiChat/TouchAgent.vue.mjs +7 -0
- package/es/packages/components/touchchat/src/AiChat/TouchAgent.vue.mjs.map +1 -0
- package/es/packages/components/touchchat/src/AiChat/TouchAgent.vue2.mjs +929 -0
- package/es/packages/components/touchchat/src/AiChat/TouchAgent.vue2.mjs.map +1 -0
- package/es/packages/components/touchchat/src/AiChat/TouchChat.vue2.mjs +23 -19
- package/es/packages/components/touchchat/src/AiChat/TouchChat.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/src/AiChat/TouchHistory.vue2.mjs +74 -3
- package/es/packages/components/touchchat/src/AiChat/TouchHistory.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/src/index.vue2.mjs +32 -2
- package/es/packages/components/touchchat/src/index.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/src/types/a2a.mjs +11 -0
- package/es/packages/components/touchchat/src/types/a2a.mjs.map +1 -0
- package/es/packages/components/touchchat/utils/a2aService.mjs +292 -0
- package/es/packages/components/touchchat/utils/a2aService.mjs.map +1 -0
- package/lib/package.json.js +1 -1
- package/lib/packages/components/touchchat/component/ModuleSelect.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/src/AiChat/ChatInput.vue2.js +16 -17
- package/lib/packages/components/touchchat/src/AiChat/ChatInput.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/src/AiChat/TouchAgent.vue.js +11 -0
- package/lib/packages/components/touchchat/src/AiChat/TouchAgent.vue.js.map +1 -0
- package/lib/packages/components/touchchat/src/AiChat/TouchAgent.vue2.js +933 -0
- package/lib/packages/components/touchchat/src/AiChat/TouchAgent.vue2.js.map +1 -0
- package/lib/packages/components/touchchat/src/AiChat/TouchChat.vue2.js +23 -19
- package/lib/packages/components/touchchat/src/AiChat/TouchChat.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/src/AiChat/TouchHistory.vue2.js +73 -2
- package/lib/packages/components/touchchat/src/AiChat/TouchHistory.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/src/index.vue2.js +32 -2
- package/lib/packages/components/touchchat/src/index.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/src/types/a2a.js +13 -0
- package/lib/packages/components/touchchat/src/types/a2a.js.map +1 -0
- package/lib/packages/components/touchchat/utils/a2aService.js +295 -0
- package/lib/packages/components/touchchat/utils/a2aService.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
class A2AService {
|
|
2
|
+
constructor() {
|
|
3
|
+
this.agents = /* @__PURE__ */ new Map();
|
|
4
|
+
}
|
|
5
|
+
// Register an agent
|
|
6
|
+
registerAgent(config) {
|
|
7
|
+
this.agents.set(config.id, config);
|
|
8
|
+
}
|
|
9
|
+
// Unregister an agent
|
|
10
|
+
unregisterAgent(agentId) {
|
|
11
|
+
this.agents.delete(agentId);
|
|
12
|
+
}
|
|
13
|
+
// Get registered agent
|
|
14
|
+
getAgent(agentId) {
|
|
15
|
+
return this.agents.get(agentId);
|
|
16
|
+
}
|
|
17
|
+
// Get all registered agents
|
|
18
|
+
getAllAgents() {
|
|
19
|
+
return Array.from(this.agents.values());
|
|
20
|
+
}
|
|
21
|
+
// Fetch agent card (agent discovery)
|
|
22
|
+
async fetchAgentCard(url) {
|
|
23
|
+
const response = await fetch(url, {
|
|
24
|
+
method: "GET",
|
|
25
|
+
headers: {
|
|
26
|
+
Accept: "application/json"
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
if (!response.ok) {
|
|
30
|
+
throw new Error(`Failed to fetch agent card: ${response.statusText}`);
|
|
31
|
+
}
|
|
32
|
+
return response.json();
|
|
33
|
+
}
|
|
34
|
+
// Send message to agent (non-streaming)
|
|
35
|
+
async sendMessage(agentId, message, sessionId) {
|
|
36
|
+
const agent = this.agents.get(agentId);
|
|
37
|
+
if (!agent) {
|
|
38
|
+
throw new Error(`Agent ${agentId} not found`);
|
|
39
|
+
}
|
|
40
|
+
const request = {
|
|
41
|
+
jsonrpc: "2.0",
|
|
42
|
+
id: this.generateId(),
|
|
43
|
+
method: "message/send",
|
|
44
|
+
params: {
|
|
45
|
+
message,
|
|
46
|
+
sessionId
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
const response = await fetch(agent.endpoint, {
|
|
50
|
+
method: "POST",
|
|
51
|
+
headers: {
|
|
52
|
+
"Content-Type": "application/json",
|
|
53
|
+
...agent.authToken && { Authorization: `Bearer ${agent.authToken}` }
|
|
54
|
+
},
|
|
55
|
+
body: JSON.stringify(request)
|
|
56
|
+
});
|
|
57
|
+
if (!response.ok) {
|
|
58
|
+
throw new Error(`HTTP error: ${response.status}`);
|
|
59
|
+
}
|
|
60
|
+
const data = await response.json();
|
|
61
|
+
if (data.error) {
|
|
62
|
+
throw new Error(`A2A error: ${data.error.message}`);
|
|
63
|
+
}
|
|
64
|
+
return data.result;
|
|
65
|
+
}
|
|
66
|
+
// Stream message to agent (for streaming responses)
|
|
67
|
+
async streamMessage(agentId, message, sessionId) {
|
|
68
|
+
const agent = this.agents.get(agentId);
|
|
69
|
+
if (!agent) {
|
|
70
|
+
throw new Error(`Agent ${agentId} not found`);
|
|
71
|
+
}
|
|
72
|
+
const request = {
|
|
73
|
+
jsonrpc: "2.0",
|
|
74
|
+
id: this.generateId(),
|
|
75
|
+
method: "message/stream",
|
|
76
|
+
params: {
|
|
77
|
+
message,
|
|
78
|
+
sessionId
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
const response = await fetch(agent.endpoint, {
|
|
82
|
+
method: "POST",
|
|
83
|
+
headers: {
|
|
84
|
+
"Content-Type": "application/json",
|
|
85
|
+
Accept: "text/event-stream",
|
|
86
|
+
...agent.authToken && { Authorization: `Bearer ${agent.authToken}` }
|
|
87
|
+
},
|
|
88
|
+
body: JSON.stringify(request)
|
|
89
|
+
});
|
|
90
|
+
if (!response.ok) {
|
|
91
|
+
throw new Error(`HTTP error: ${response.status}`);
|
|
92
|
+
}
|
|
93
|
+
if (!response.body) {
|
|
94
|
+
throw new Error("No response body");
|
|
95
|
+
}
|
|
96
|
+
return new ReadableStream({
|
|
97
|
+
async start(controller) {
|
|
98
|
+
const reader = response.body.getReader();
|
|
99
|
+
const decoder = new TextDecoder();
|
|
100
|
+
let buffer = "";
|
|
101
|
+
try {
|
|
102
|
+
let isDone = false;
|
|
103
|
+
while (!isDone) {
|
|
104
|
+
const { done, value } = await reader.read();
|
|
105
|
+
if (done) {
|
|
106
|
+
isDone = true;
|
|
107
|
+
controller.close();
|
|
108
|
+
break;
|
|
109
|
+
}
|
|
110
|
+
buffer += decoder.decode(value, { stream: true });
|
|
111
|
+
const lines = buffer.split("\n");
|
|
112
|
+
buffer = lines.pop() || "";
|
|
113
|
+
for (const line of lines) {
|
|
114
|
+
const trimmed = line.trim();
|
|
115
|
+
if (trimmed.startsWith("data: ")) {
|
|
116
|
+
const data = trimmed.slice(6);
|
|
117
|
+
if (data === "[DONE]") {
|
|
118
|
+
controller.close();
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
try {
|
|
122
|
+
const chunk = JSON.parse(data);
|
|
123
|
+
await new Promise((resolve) => setTimeout(resolve, 50));
|
|
124
|
+
controller.enqueue(chunk);
|
|
125
|
+
} catch (e) {
|
|
126
|
+
console.warn("Failed to parse SSE data:", data);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
} finally {
|
|
132
|
+
reader.releaseLock();
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
// Multi-agent message routing
|
|
138
|
+
async routeMessage(agentIds, message, mode = "sequential") {
|
|
139
|
+
const results = /* @__PURE__ */ new Map();
|
|
140
|
+
if (mode === "parallel") {
|
|
141
|
+
const promises = agentIds.map(async (agentId) => {
|
|
142
|
+
try {
|
|
143
|
+
const task = await this.sendMessage(agentId, message);
|
|
144
|
+
return { agentId, task, error: null };
|
|
145
|
+
} catch (error) {
|
|
146
|
+
return { agentId, task: null, error };
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
const settled = await Promise.all(promises);
|
|
150
|
+
for (const { agentId, task, error } of settled) {
|
|
151
|
+
if (task) {
|
|
152
|
+
results.set(agentId, task);
|
|
153
|
+
} else {
|
|
154
|
+
console.error(`Error sending to agent ${agentId}:`, error);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
} else {
|
|
158
|
+
for (const agentId of agentIds) {
|
|
159
|
+
try {
|
|
160
|
+
const task = await this.sendMessage(agentId, message);
|
|
161
|
+
results.set(agentId, task);
|
|
162
|
+
} catch (error) {
|
|
163
|
+
console.error(`Error sending to agent ${agentId}:`, error);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
return results;
|
|
168
|
+
}
|
|
169
|
+
// Get task status
|
|
170
|
+
async getTask(agentId, taskId) {
|
|
171
|
+
const agent = this.agents.get(agentId);
|
|
172
|
+
if (!agent) {
|
|
173
|
+
throw new Error(`Agent ${agentId} not found`);
|
|
174
|
+
}
|
|
175
|
+
const request = {
|
|
176
|
+
jsonrpc: "2.0",
|
|
177
|
+
id: this.generateId(),
|
|
178
|
+
method: "task/get",
|
|
179
|
+
params: { taskId }
|
|
180
|
+
};
|
|
181
|
+
const response = await fetch(agent.endpoint, {
|
|
182
|
+
method: "POST",
|
|
183
|
+
headers: {
|
|
184
|
+
"Content-Type": "application/json",
|
|
185
|
+
...agent.authToken && { Authorization: `Bearer ${agent.authToken}` }
|
|
186
|
+
},
|
|
187
|
+
body: JSON.stringify(request)
|
|
188
|
+
});
|
|
189
|
+
if (!response.ok) {
|
|
190
|
+
throw new Error(`HTTP error: ${response.status}`);
|
|
191
|
+
}
|
|
192
|
+
const data = await response.json();
|
|
193
|
+
if (data.error) {
|
|
194
|
+
throw new Error(`A2A error: ${data.error.message}`);
|
|
195
|
+
}
|
|
196
|
+
return data.result;
|
|
197
|
+
}
|
|
198
|
+
// Cancel task
|
|
199
|
+
async cancelTask(agentId, taskId) {
|
|
200
|
+
const agent = this.agents.get(agentId);
|
|
201
|
+
if (!agent) {
|
|
202
|
+
throw new Error(`Agent ${agentId} not found`);
|
|
203
|
+
}
|
|
204
|
+
const request = {
|
|
205
|
+
jsonrpc: "2.0",
|
|
206
|
+
id: this.generateId(),
|
|
207
|
+
method: "task/cancel",
|
|
208
|
+
params: { taskId }
|
|
209
|
+
};
|
|
210
|
+
const response = await fetch(agent.endpoint, {
|
|
211
|
+
method: "POST",
|
|
212
|
+
headers: {
|
|
213
|
+
"Content-Type": "application/json",
|
|
214
|
+
...agent.authToken && { Authorization: `Bearer ${agent.authToken}` }
|
|
215
|
+
},
|
|
216
|
+
body: JSON.stringify(request)
|
|
217
|
+
});
|
|
218
|
+
if (!response.ok) {
|
|
219
|
+
throw new Error(`HTTP error: ${response.status}`);
|
|
220
|
+
}
|
|
221
|
+
const data = await response.json();
|
|
222
|
+
if (data.error) {
|
|
223
|
+
throw new Error(`A2A error: ${data.error.message}`);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
// Generate unique ID
|
|
227
|
+
generateId() {
|
|
228
|
+
return `req-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
|
|
229
|
+
}
|
|
230
|
+
// Multi-agent streaming message
|
|
231
|
+
async *streamMultiAgentMessage(hostEndpoint, subAgents, message, sessionId) {
|
|
232
|
+
const subAgentsJson = JSON.stringify(subAgents);
|
|
233
|
+
const xSubAgents = btoa(unescape(encodeURIComponent(subAgentsJson)));
|
|
234
|
+
const request = {
|
|
235
|
+
jsonrpc: "2.0",
|
|
236
|
+
id: this.generateId(),
|
|
237
|
+
method: "message/stream",
|
|
238
|
+
params: {
|
|
239
|
+
message,
|
|
240
|
+
sessionId
|
|
241
|
+
}
|
|
242
|
+
};
|
|
243
|
+
const response = await fetch(hostEndpoint, {
|
|
244
|
+
method: "POST",
|
|
245
|
+
headers: {
|
|
246
|
+
"Content-Type": "application/json",
|
|
247
|
+
Accept: "text/event-stream",
|
|
248
|
+
"X-Sub-Agents": xSubAgents
|
|
249
|
+
},
|
|
250
|
+
body: JSON.stringify(request)
|
|
251
|
+
});
|
|
252
|
+
if (!response.ok) {
|
|
253
|
+
throw new Error(`HTTP error: ${response.status}`);
|
|
254
|
+
}
|
|
255
|
+
if (!response.body) {
|
|
256
|
+
throw new Error("No response body");
|
|
257
|
+
}
|
|
258
|
+
const reader = response.body.getReader();
|
|
259
|
+
const decoder = new TextDecoder();
|
|
260
|
+
let buffer = "";
|
|
261
|
+
try {
|
|
262
|
+
while (true) {
|
|
263
|
+
const { done, value } = await reader.read();
|
|
264
|
+
if (done)
|
|
265
|
+
break;
|
|
266
|
+
buffer += decoder.decode(value, { stream: true });
|
|
267
|
+
const lines = buffer.split("\n");
|
|
268
|
+
buffer = lines.pop() || "";
|
|
269
|
+
for (const line of lines) {
|
|
270
|
+
const trimmed = line.trim();
|
|
271
|
+
if (trimmed.startsWith("data: ")) {
|
|
272
|
+
const data = trimmed.slice(6);
|
|
273
|
+
if (data === "[DONE]")
|
|
274
|
+
return;
|
|
275
|
+
try {
|
|
276
|
+
const chunk = JSON.parse(data);
|
|
277
|
+
yield chunk;
|
|
278
|
+
} catch (e) {
|
|
279
|
+
console.warn("Failed to parse SSE data:", data);
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
} finally {
|
|
285
|
+
reader.releaseLock();
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
const a2aService = new A2AService();
|
|
290
|
+
|
|
291
|
+
export { A2AService, a2aService };
|
|
292
|
+
//# sourceMappingURL=a2aService.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"a2aService.mjs","sources":["../../../../../../packages/components/touchchat/utils/a2aService.ts"],"sourcesContent":["import type { AgentConfig, Message, JSONRPCRequest, StreamChunk, Task, AgentCard, SubAgent } from '../src/types/a2a'\n// @/types/a2a\n\n// A2A Service - Handles communication with A2A agents\nexport class A2AService {\n\tprivate agents: Map<string, AgentConfig> = new Map()\n\n\t// Register an agent\n\tregisterAgent(config: AgentConfig): void {\n\t\tthis.agents.set(config.id, config)\n\t}\n\n\t// Unregister an agent\n\tunregisterAgent(agentId: string): void {\n\t\tthis.agents.delete(agentId)\n\t}\n\n\t// Get registered agent\n\tgetAgent(agentId: string): AgentConfig | undefined {\n\t\treturn this.agents.get(agentId)\n\t}\n\n\t// Get all registered agents\n\tgetAllAgents(): AgentConfig[] {\n\t\treturn Array.from(this.agents.values())\n\t}\n\n\t// Fetch agent card (agent discovery)\n\tasync fetchAgentCard(url: string): Promise<AgentCard> {\n\t\tconst response = await fetch(url, {\n\t\t\tmethod: 'GET',\n\t\t\theaders: {\n\t\t\t\tAccept: 'application/json'\n\t\t\t}\n\t\t})\n\n\t\tif (!response.ok) {\n\t\t\tthrow new Error(`Failed to fetch agent card: ${response.statusText}`)\n\t\t}\n\n\t\treturn response.json()\n\t}\n\n\t// Send message to agent (non-streaming)\n\tasync sendMessage(agentId: string, message: Message, sessionId?: string): Promise<Task> {\n\t\tconst agent = this.agents.get(agentId)\n\t\tif (!agent) {\n\t\t\tthrow new Error(`Agent ${agentId} not found`)\n\t\t}\n\n\t\tconst request: JSONRPCRequest = {\n\t\t\tjsonrpc: '2.0',\n\t\t\tid: this.generateId(),\n\t\t\tmethod: 'message/send',\n\t\t\tparams: {\n\t\t\t\tmessage,\n\t\t\t\tsessionId\n\t\t\t}\n\t\t}\n\n\t\tconst response = await fetch(agent.endpoint, {\n\t\t\tmethod: 'POST',\n\t\t\theaders: {\n\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\t...(agent.authToken && { Authorization: `Bearer ${agent.authToken}` })\n\t\t\t},\n\t\t\tbody: JSON.stringify(request)\n\t\t})\n\n\t\tif (!response.ok) {\n\t\t\tthrow new Error(`HTTP error: ${response.status}`)\n\t\t}\n\n\t\tconst data = await response.json()\n\n\t\tif (data.error) {\n\t\t\tthrow new Error(`A2A error: ${data.error.message}`)\n\t\t}\n\n\t\treturn data.result as Task\n\t}\n\n\t// Stream message to agent (for streaming responses)\n\tasync streamMessage(agentId: string, message: Message, sessionId?: string): Promise<ReadableStream<StreamChunk>> {\n\t\tconst agent = this.agents.get(agentId)\n\t\tif (!agent) {\n\t\t\tthrow new Error(`Agent ${agentId} not found`)\n\t\t}\n\n\t\tconst request: JSONRPCRequest = {\n\t\t\tjsonrpc: '2.0',\n\t\t\tid: this.generateId(),\n\t\t\tmethod: 'message/stream',\n\t\t\tparams: {\n\t\t\t\tmessage,\n\t\t\t\tsessionId\n\t\t\t}\n\t\t}\n\n\t\tconst response = await fetch(agent.endpoint, {\n\t\t\tmethod: 'POST',\n\t\t\theaders: {\n\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\tAccept: 'text/event-stream',\n\t\t\t\t...(agent.authToken && { Authorization: `Bearer ${agent.authToken}` })\n\t\t\t},\n\t\t\tbody: JSON.stringify(request)\n\t\t})\n\n\t\tif (!response.ok) {\n\t\t\tthrow new Error(`HTTP error: ${response.status}`)\n\t\t}\n\n\t\tif (!response.body) {\n\t\t\tthrow new Error('No response body')\n\t\t}\n\n\t\treturn new ReadableStream<StreamChunk>({\n\t\t\tasync start(controller) {\n\t\t\t\tconst reader = response.body!.getReader()\n\t\t\t\tconst decoder = new TextDecoder()\n\t\t\t\tlet buffer = ''\n\n\t\t\t\ttry {\n\t\t\t\t\tlet isDone = false\n\t\t\t\t\twhile (!isDone) {\n\t\t\t\t\t\tconst { done, value } = await reader.read()\n\t\t\t\t\t\tif (done) {\n\t\t\t\t\t\t\tisDone = true\n\t\t\t\t\t\t\tcontroller.close()\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbuffer += decoder.decode(value, { stream: true })\n\t\t\t\t\t\tconst lines = buffer.split('\\n')\n\t\t\t\t\t\tbuffer = lines.pop() || ''\n\n\t\t\t\t\t\tfor (const line of lines) {\n\t\t\t\t\t\t\tconst trimmed = line.trim()\n\t\t\t\t\t\t\tif (trimmed.startsWith('data: ')) {\n\t\t\t\t\t\t\t\tconst data = trimmed.slice(6)\n\t\t\t\t\t\t\t\tif (data === '[DONE]') {\n\t\t\t\t\t\t\t\t\tcontroller.close()\n\t\t\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tconst chunk: StreamChunk = JSON.parse(data)\n\t\t\t\t\t\t\t\t\t// Add a small delay to simulate streaming effect\n\t\t\t\t\t\t\t\t\tawait new Promise(resolve => setTimeout(resolve, 50))\n\t\t\t\t\t\t\t\t\tcontroller.enqueue(chunk)\n\t\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\t\tconsole.warn('Failed to parse SSE data:', data)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} finally {\n\t\t\t\t\treader.releaseLock()\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t}\n\n\t// Multi-agent message routing\n\tasync routeMessage(agentIds: string[], message: Message, mode: 'sequential' | 'parallel' = 'sequential'): Promise<Map<string, Task>> {\n\t\tconst results = new Map<string, Task>()\n\n\t\tif (mode === 'parallel') {\n\t\t\tconst promises = agentIds.map(async agentId => {\n\t\t\t\ttry {\n\t\t\t\t\tconst task = await this.sendMessage(agentId, message)\n\t\t\t\t\treturn { agentId, task, error: null }\n\t\t\t\t} catch (error) {\n\t\t\t\t\treturn { agentId, task: null, error }\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tconst settled = await Promise.all(promises)\n\t\t\tfor (const { agentId, task, error } of settled) {\n\t\t\t\tif (task) {\n\t\t\t\t\tresults.set(agentId, task)\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error(`Error sending to agent ${agentId}:`, error)\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t// Sequential\n\t\t\tfor (const agentId of agentIds) {\n\t\t\t\ttry {\n\t\t\t\t\tconst task = await this.sendMessage(agentId, message)\n\t\t\t\t\tresults.set(agentId, task)\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconsole.error(`Error sending to agent ${agentId}:`, error)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn results\n\t}\n\n\t// Get task status\n\tasync getTask(agentId: string, taskId: string): Promise<Task> {\n\t\tconst agent = this.agents.get(agentId)\n\t\tif (!agent) {\n\t\t\tthrow new Error(`Agent ${agentId} not found`)\n\t\t}\n\n\t\tconst request: JSONRPCRequest = {\n\t\t\tjsonrpc: '2.0',\n\t\t\tid: this.generateId(),\n\t\t\tmethod: 'task/get',\n\t\t\tparams: { taskId }\n\t\t}\n\n\t\tconst response = await fetch(agent.endpoint, {\n\t\t\tmethod: 'POST',\n\t\t\theaders: {\n\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\t...(agent.authToken && { Authorization: `Bearer ${agent.authToken}` })\n\t\t\t},\n\t\t\tbody: JSON.stringify(request)\n\t\t})\n\n\t\tif (!response.ok) {\n\t\t\tthrow new Error(`HTTP error: ${response.status}`)\n\t\t}\n\n\t\tconst data = await response.json()\n\n\t\tif (data.error) {\n\t\t\tthrow new Error(`A2A error: ${data.error.message}`)\n\t\t}\n\n\t\treturn data.result as Task\n\t}\n\n\t// Cancel task\n\tasync cancelTask(agentId: string, taskId: string): Promise<void> {\n\t\tconst agent = this.agents.get(agentId)\n\t\tif (!agent) {\n\t\t\tthrow new Error(`Agent ${agentId} not found`)\n\t\t}\n\n\t\tconst request: JSONRPCRequest = {\n\t\t\tjsonrpc: '2.0',\n\t\t\tid: this.generateId(),\n\t\t\tmethod: 'task/cancel',\n\t\t\tparams: { taskId }\n\t\t}\n\n\t\tconst response = await fetch(agent.endpoint, {\n\t\t\tmethod: 'POST',\n\t\t\theaders: {\n\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\t...(agent.authToken && { Authorization: `Bearer ${agent.authToken}` })\n\t\t\t},\n\t\t\tbody: JSON.stringify(request)\n\t\t})\n\n\t\tif (!response.ok) {\n\t\t\tthrow new Error(`HTTP error: ${response.status}`)\n\t\t}\n\n\t\tconst data = await response.json()\n\n\t\tif (data.error) {\n\t\t\tthrow new Error(`A2A error: ${data.error.message}`)\n\t\t}\n\t}\n\n\t// Generate unique ID\n\tprivate generateId(): string {\n\t\treturn `req-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`\n\t}\n\n\t// Multi-agent streaming message\n\tasync *streamMultiAgentMessage(hostEndpoint: string, subAgents: SubAgent[], message: Message, sessionId?: string): AsyncGenerator<StreamChunk, void, unknown> {\n\t\t// Build X-Sub-Agents header: JSON array -> Base64\n\t\tconst subAgentsJson = JSON.stringify(subAgents)\n\t\t// Use Unicode-safe Base64 encoding\n\t\tconst xSubAgents = btoa(unescape(encodeURIComponent(subAgentsJson)))\n\n\t\tconst request: JSONRPCRequest = {\n\t\t\tjsonrpc: '2.0',\n\t\t\tid: this.generateId(),\n\t\t\tmethod: 'message/stream',\n\t\t\tparams: {\n\t\t\t\tmessage,\n\t\t\t\tsessionId\n\t\t\t}\n\t\t}\n\n\t\tconst response = await fetch(hostEndpoint, {\n\t\t\tmethod: 'POST',\n\t\t\theaders: {\n\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\tAccept: 'text/event-stream',\n\t\t\t\t'X-Sub-Agents': xSubAgents\n\t\t\t},\n\t\t\tbody: JSON.stringify(request)\n\t\t})\n\n\t\tif (!response.ok) {\n\t\t\tthrow new Error(`HTTP error: ${response.status}`)\n\t\t}\n\n\t\tif (!response.body) {\n\t\t\tthrow new Error('No response body')\n\t\t}\n\n\t\tconst reader = response.body.getReader()\n\t\tconst decoder = new TextDecoder()\n\t\tlet buffer = ''\n\n\t\ttry {\n\t\t\twhile (true) {\n\t\t\t\tconst { done, value } = await reader.read()\n\t\t\t\tif (done) break\n\n\t\t\t\tbuffer += decoder.decode(value, { stream: true })\n\t\t\t\tconst lines = buffer.split('\\n')\n\t\t\t\tbuffer = lines.pop() || ''\n\n\t\t\t\tfor (const line of lines) {\n\t\t\t\t\tconst trimmed = line.trim()\n\t\t\t\t\tif (trimmed.startsWith('data: ')) {\n\t\t\t\t\t\tconst data = trimmed.slice(6)\n\t\t\t\t\t\tif (data === '[DONE]') return\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst chunk: StreamChunk = JSON.parse(data)\n\t\t\t\t\t\t\tyield chunk\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\tconsole.warn('Failed to parse SSE data:', data)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} finally {\n\t\t\treader.releaseLock()\n\t\t}\n\t}\n}\n\n// Singleton instance\nexport const a2aService = new A2AService()\n"],"names":[],"mappings":"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"}
|
package/lib/package.json.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
5
|
var name = "@touchvue/chat";
|
|
6
|
-
var version = "1.0.0-beta.
|
|
6
|
+
var version = "1.0.0-beta.30";
|
|
7
7
|
var description = "TouchVue UI Component Library";
|
|
8
8
|
var main = "lib/index.js";
|
|
9
9
|
var module$1 = "es/index.mjs";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModuleSelect.vue2.js","sources":["../../../../../../packages/components/touchchat/component/ModuleSelect.vue"],"sourcesContent":["<template>\n\t<div class=\"touchchat-custom-select\" tabindex=\"0\" @blur=\"isSelectOpen = false\">\n\t\t<div class=\"touchchat-select-trigger\" @click=\"toggleSelect\">\n\t\t\t<span class=\"touchchat-select-text\">{{ currentModuleName }}</span>\n\t\t\t<div class=\"touchchat-select-icon\" :class=\"{ 'is-open': isSelectOpen }\"></div>\n\t\t</div>\n\t\t<div v-show=\"isSelectOpen\" ref=\"dropdownRef\" class=\"touchchat-select-dropdown\" :class=\"{ 'is-upward': isUpward }\">\n\t\t\t<div v-for=\"item in modules\" :key=\"item.name\" class=\"touchchat-select-option\" :class=\"{ 'is-selected': item.name === modelValue }\" @click=\"selectOption(item)\">\n\t\t\t\t{{ item.name }}\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { ref, computed, nextTick, onMounted, onUnmounted } from 'vue'\ninterface BodyConfig {\n\tmodel: string\n\tmessages: Array<{\n\t\trole: string\n\t\tcontent: string\n\t}>\n\tstream: boolean\n}\n\n// 定义 respoKey 返回值的类型\ninterface RespoKeyConfig {\n\tcategory: string\n\tcontentCategory: string\n\tcontent: string\n\tall: string\n\tallCategory: string\n}\ninterface ModuleItem {\n\tname: string\n\tconfig: {\n\t\taction: string\n\t\theaders: () => object\n\t\tbody: () => BodyConfig // 修改为具体类型\n\t\trespoKey: () => RespoKeyConfig // 修改为具体类型\n\t}\n}\n\nconst props = defineProps<{\n\tmodules: ModuleItem[]\n\tmodelValue: string\n}>()\n\nconst emit = defineEmits<{\n\t(e: 'update:modelValue', value: string): void\n}>()\n\nconst isSelectOpen = ref(false)\nconst dropdownRef = ref<HTMLElement | null>(null)\nconst isUpward = ref(false)\n\nconst currentModuleName = computed(() => {\n\tconst selected = props.modules.find(item => item.name === props.modelValue)\n\treturn selected ? selected.name : props.modules[0]?.name || ''\n})\n\nconst toggleSelect = () => {\n\tisSelectOpen.value = !isSelectOpen.value\n\n\tif (isSelectOpen.value) {\n\t\t// 在下一个tick中计算位置\n\t\tnextTick(() => {\n\t\t\tcalculateDropdownPosition()\n\t\t})\n\t}\n}\n\nconst calculateDropdownPosition = () => {\n\tif (!dropdownRef.value) return\n\n\tconst dropdownRect = dropdownRef.value.getBoundingClientRect()\n\tconst viewportHeight = window.innerHeight\n\tconst spaceBelow = viewportHeight - dropdownRect.top - dropdownRect.height\n\tconst spaceAbove = dropdownRect.top\n\n\t// 如果下方空间不足且上方空间足够,则显示在上方\n\tisUpward.value = spaceBelow < 200 && spaceAbove > spaceBelow\n}\n\nconst selectOption = (item: ModuleItem) => {\n\temit('update:modelValue', item.name)\n\tisSelectOpen.value = false\n}\n\nconst handleWindowEvent = () => {\n\tif (isSelectOpen.value) {\n\t\tcalculateDropdownPosition()\n\t}\n}\n\nonMounted(() => {\n\twindow.addEventListener('scroll', handleWindowEvent, true)\n\twindow.addEventListener('resize', handleWindowEvent)\n\n\t// 点击外部关闭下拉菜单\n\tdocument.addEventListener('click', e => {\n\t\tconst selectEl = document.querySelector('.touchchat-custom-select')\n\t\tif (selectEl && !selectEl.contains(e.target as Node)) {\n\t\t\tisSelectOpen.value = false\n\t\t}\n\t})\n})\n\nonUnmounted(() => {\n\twindow.removeEventListener('scroll', handleWindowEvent, true)\n\twindow.removeEventListener('resize', handleWindowEvent)\n})\n</script>\n"],"names":["ref","computed","nextTick","onMounted","onUnmounted","_createElementBlock","_createElementVNode","_normalizeClass","_Fragment","_renderList","_toDisplayString"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ModuleSelect.vue2.js","sources":["../../../../../../packages/components/touchchat/component/ModuleSelect.vue"],"sourcesContent":["<template>\r\n\t<div class=\"touchchat-custom-select\" tabindex=\"0\" @blur=\"isSelectOpen = false\">\r\n\t\t<div class=\"touchchat-select-trigger\" @click=\"toggleSelect\">\r\n\t\t\t<span class=\"touchchat-select-text\">{{ currentModuleName }}</span>\r\n\t\t\t<div class=\"touchchat-select-icon\" :class=\"{ 'is-open': isSelectOpen }\"></div>\r\n\t\t</div>\r\n\t\t<div v-show=\"isSelectOpen\" ref=\"dropdownRef\" class=\"touchchat-select-dropdown\" :class=\"{ 'is-upward': isUpward }\">\r\n\t\t\t<div v-for=\"item in modules\" :key=\"item.name\" class=\"touchchat-select-option\" :class=\"{ 'is-selected': item.name === modelValue }\" @click=\"selectOption(item)\">\r\n\t\t\t\t{{ item.name }}\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n</template>\r\n\r\n<script lang=\"ts\" setup>\r\nimport { ref, computed, nextTick, onMounted, onUnmounted } from 'vue'\r\ninterface BodyConfig {\r\n\tmodel: string\r\n\tmessages: Array<{\r\n\t\trole: string\r\n\t\tcontent: string\r\n\t}>\r\n\tstream: boolean\r\n}\r\n\r\n// 定义 respoKey 返回值的类型\r\ninterface RespoKeyConfig {\r\n\tcategory: string\r\n\tcontentCategory: string\r\n\tcontent: string\r\n\tall: string\r\n\tallCategory: string\r\n}\r\ninterface ModuleItem {\r\n\tname: string\r\n\tconfig: {\r\n\t\taction: string\r\n\t\theaders: () => object\r\n\t\tbody: () => BodyConfig // 修改为具体类型\r\n\t\trespoKey: () => RespoKeyConfig // 修改为具体类型\r\n\t}\r\n}\r\n\r\nconst props = defineProps<{\r\n\tmodules: ModuleItem[]\r\n\tmodelValue: string\r\n}>()\r\n\r\nconst emit = defineEmits<{\r\n\t(e: 'update:modelValue', value: string): void\r\n}>()\r\n\r\nconst isSelectOpen = ref(false)\r\nconst dropdownRef = ref<HTMLElement | null>(null)\r\nconst isUpward = ref(false)\r\n\r\nconst currentModuleName = computed(() => {\r\n\tconst selected = props.modules.find(item => item.name === props.modelValue)\r\n\treturn selected ? selected.name : props.modules[0]?.name || ''\r\n})\r\n\r\nconst toggleSelect = () => {\r\n\tisSelectOpen.value = !isSelectOpen.value\r\n\r\n\tif (isSelectOpen.value) {\r\n\t\t// 在下一个tick中计算位置\r\n\t\tnextTick(() => {\r\n\t\t\tcalculateDropdownPosition()\r\n\t\t})\r\n\t}\r\n}\r\n\r\nconst calculateDropdownPosition = () => {\r\n\tif (!dropdownRef.value) return\r\n\r\n\tconst dropdownRect = dropdownRef.value.getBoundingClientRect()\r\n\tconst viewportHeight = window.innerHeight\r\n\tconst spaceBelow = viewportHeight - dropdownRect.top - dropdownRect.height\r\n\tconst spaceAbove = dropdownRect.top\r\n\r\n\t// 如果下方空间不足且上方空间足够,则显示在上方\r\n\tisUpward.value = spaceBelow < 200 && spaceAbove > spaceBelow\r\n}\r\n\r\nconst selectOption = (item: ModuleItem) => {\r\n\temit('update:modelValue', item.name)\r\n\tisSelectOpen.value = false\r\n}\r\n\r\nconst handleWindowEvent = () => {\r\n\tif (isSelectOpen.value) {\r\n\t\tcalculateDropdownPosition()\r\n\t}\r\n}\r\n\r\nonMounted(() => {\r\n\twindow.addEventListener('scroll', handleWindowEvent, true)\r\n\twindow.addEventListener('resize', handleWindowEvent)\r\n\r\n\t// 点击外部关闭下拉菜单\r\n\tdocument.addEventListener('click', e => {\r\n\t\tconst selectEl = document.querySelector('.touchchat-custom-select')\r\n\t\tif (selectEl && !selectEl.contains(e.target as Node)) {\r\n\t\t\tisSelectOpen.value = false\r\n\t\t}\r\n\t})\r\n})\r\n\r\nonUnmounted(() => {\r\n\twindow.removeEventListener('scroll', handleWindowEvent, true)\r\n\twindow.removeEventListener('resize', handleWindowEvent)\r\n})\r\n</script>\r\n"],"names":["ref","computed","nextTick","onMounted","onUnmounted","_createElementBlock","_createElementVNode","_normalizeClass","_Fragment","_renderList","_toDisplayString"],"mappings":"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"}
|
|
@@ -25,6 +25,15 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
25
25
|
const placeholder = vue.inject("placeholder", "\u8BF7\u8F93\u5165...");
|
|
26
26
|
const layout = vue.inject("layout", "side, think, upload, chain, screen,realtime");
|
|
27
27
|
const modules = vue.inject("modules", []);
|
|
28
|
+
const iModules = vue.ref(modules);
|
|
29
|
+
vue.watch(
|
|
30
|
+
() => modules,
|
|
31
|
+
(newVal) => {
|
|
32
|
+
iModules.value = newVal;
|
|
33
|
+
console.log("modules === ChatInput.vue === 128", newVal);
|
|
34
|
+
}
|
|
35
|
+
// { immediate: true }
|
|
36
|
+
);
|
|
28
37
|
const allowedTypes = vue.inject("allowedTypes", []);
|
|
29
38
|
vue.provide("uploadFile", (index, type) => {
|
|
30
39
|
if (uploadViewRef.value) {
|
|
@@ -53,8 +62,8 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
53
62
|
messages: [
|
|
54
63
|
{
|
|
55
64
|
role: "user",
|
|
56
|
-
content: props.inputValue
|
|
57
|
-
|
|
65
|
+
// content: props.inputValue // 使用传入的用户内容参数
|
|
66
|
+
content: ""
|
|
58
67
|
}
|
|
59
68
|
],
|
|
60
69
|
stream: true
|
|
@@ -80,6 +89,7 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
80
89
|
vue.watch(
|
|
81
90
|
() => selectVal.value,
|
|
82
91
|
() => {
|
|
92
|
+
console.log("selectVal.value === ChatInput.vue === 198", selectVal.value);
|
|
83
93
|
if (finallyModules.value.length > 0) {
|
|
84
94
|
selectInfo.value = finallyModules.value.find((item) => item.name === selectVal.value);
|
|
85
95
|
if (selectInfo.value) {
|
|
@@ -105,20 +115,16 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
105
115
|
{ deep: true }
|
|
106
116
|
);
|
|
107
117
|
const finallyModules = vue.computed(() => {
|
|
108
|
-
|
|
118
|
+
console.log("modules === ChatInput.vue === 226", modules, iModules.value);
|
|
119
|
+
if (!iModules.value.length) {
|
|
109
120
|
return optionalModules.value;
|
|
110
121
|
}
|
|
111
|
-
return
|
|
122
|
+
return iModules.value.flatMap((module) => {
|
|
112
123
|
if (typeof module === "string") {
|
|
113
124
|
const matchedModule = optionalModules.value.find((optModule) => optModule.name === module);
|
|
114
125
|
if (matchedModule) {
|
|
115
126
|
const updatedModule = { ...matchedModule };
|
|
116
127
|
const body = updatedModule.config.body();
|
|
117
|
-
if (body.messages && body.messages.length > 0 && body.messages[0].content) {
|
|
118
|
-
body.messages[0].content = props.inputValue;
|
|
119
|
-
} else {
|
|
120
|
-
body.messages = [{ role: "user", content: props.inputValue }];
|
|
121
|
-
}
|
|
122
128
|
if (thinkAble) {
|
|
123
129
|
body.model = props.enableDeepThinking ? "deepseek-reasoner" : "deepseek-v3";
|
|
124
130
|
}
|
|
@@ -128,9 +134,6 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
128
134
|
return [];
|
|
129
135
|
} else {
|
|
130
136
|
const body = module.config.body();
|
|
131
|
-
if (body.messages && body.messages.length > 0 && body.messages[0].content) {
|
|
132
|
-
body.messages[0].content = props.inputValue;
|
|
133
|
-
}
|
|
134
137
|
if (thinkAble) {
|
|
135
138
|
body.model = props.enableDeepThinking ? "deepseek-reasoner" : "deepseek-v3";
|
|
136
139
|
}
|
|
@@ -145,11 +148,6 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
145
148
|
if (thinkAble && body.model) {
|
|
146
149
|
body.model = props.enableDeepThinking ? "deepseek-reasoner" : "deepseek-v3";
|
|
147
150
|
}
|
|
148
|
-
if (body.messages && body.messages.length > 0 && body.messages[0].content) {
|
|
149
|
-
body.messages[0].content = props.inputValue;
|
|
150
|
-
} else {
|
|
151
|
-
body.messages = [{ role: "user", content: props.inputValue }];
|
|
152
|
-
}
|
|
153
151
|
selectInfo.value.config.body = () => body;
|
|
154
152
|
}
|
|
155
153
|
};
|
|
@@ -390,6 +388,7 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
390
388
|
vue.createElementVNode("p", null, "\u6E05\u7A7A\u6587\u672C")
|
|
391
389
|
])
|
|
392
390
|
])) : vue.createCommentVNode("v-if", true),
|
|
391
|
+
vue.createCommentVNode(" {{ finallyModules.length }} "),
|
|
393
392
|
finallyModules.value.length > 1 ? (vue.openBlock(), vue.createBlock(ModuleSelect.default, {
|
|
394
393
|
key: 2,
|
|
395
394
|
modelValue: selectVal.value,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatInput.vue2.js","sources":["../../../../../../../packages/components/touchchat/src/AiChat/ChatInput.vue"],"sourcesContent":["<template>\n\t<div class=\"touchchat-edit\">\n\t\t<!-- :file-progress=\"fileProgress\" -->\n\t\t<FileContent v-if=\"fileList.length > 0\" :file-list=\"fileList\" :has-colse=\"true\" type=\"ChatInput\" @colse=\"handleColse\" />\n\t\t<div class=\"touchchat-edit-input\">\n\t\t\t<!-- @keydown.enter.prevent -->\n\t\t\t<textarea :value=\"inputValue\" :placeholder=\"placeholder ?? '请输入...'\" @paste=\"handlePaste\" @input=\"handleInputChange\" @keydown.enter=\"handleSend\"> </textarea>\n\t\t</div>\n\n\t\t<!-- 按钮与开关容器 -->\n\t\t<div :class=\"thinkAble ? 'touchchat-edit-submit is-thinkable' : 'touchchat-edit-submit'\">\n\t\t\t<div class=\"touchchat-edit-submit-left\">\n\t\t\t\t<!-- 附件 @click=\"showMarkLaryer = true\" @progress-fn=\"progressFn\" -->\n\t\t\t\t<upload-view v-if=\"uploadAble\" ref=\"uploadViewRef\" :file-list=\"fileList\" @upload-file=\"uploadFile\">\n\t\t\t\t\t<button v-if=\"uploadAble\" class=\"touchchat-edit-attach\" :class=\"{ 'is-dis': isChating }\">\n\t\t\t\t\t\t<div class=\"touchchat-edit-attach-icon\"></div>\n\t\t\t\t\t\t<div class=\"touchchat-edit-attach-tip\">\n\t\t\t\t\t\t\t<p>文件数量:最多10个</p>\n\t\t\t\t\t\t\t<p>文件类型:{{ allowedTypes.join('、') || 'pdf,txt,csv,docx,xlsx,xls,pptx,ppt,md,mobi,epub,png,jpeg,jpg' }}</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</button>\n\t\t\t\t</upload-view>\n\n\t\t\t\t<button v-if=\"clearAble\" class=\"touchchat-edit-attach\" @click=\"handleClearClick\">\n\t\t\t\t\t<div class=\"touchchat-edit-delete-icon\"></div>\n\t\t\t\t\t<div class=\"touchchat-edit-attach-tip touchchat-edit-voice-tip\">\n\t\t\t\t\t\t<p>清空文本</p>\n\t\t\t\t\t</div>\n\t\t\t\t</button>\n\n\t\t\t\t<ModuleSelect v-if=\"finallyModules.length > 1\" v-model=\"selectVal\" :modules=\"finallyModules\" />\n\n\t\t\t\t<!-- 深度思考开关 - 修改为按钮样式 -->\n\t\t\t\t<button v-if=\"thinkAble\" class=\"touchchat-edit-think\" :class=\"{ 'is-on': enableDeepThinking, 'is-dis': isChating }\" @click=\"handleDeepThinkingClick\">\n\t\t\t\t\t<div class=\"touchchat-edit-think-icon\"></div>\n\t\t\t\t\t<div class=\"touchchat-edit-think-text\">深度思考</div>\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t\t<div class=\"touchchat-edit-submit-right\">\n\t\t\t\t<!-- 截图 -->\n\t\t\t\t<screenshot v-if=\"screenAble\" @up-file-list=\"upFileList\"></screenshot>\n\t\t\t\t<!-- 实时语音 -->\n\t\t\t\t<realtime-voice v-if=\"realtimeVoiceAble\" @start-realtime-voice=\"startRealtimeVoice\" @transcription=\"transcription\"></realtime-voice>\n\t\t\t\t<!-- 语音 -->\n\t\t\t\t<voice v-if=\"voiceAble\" ref=\"voiceRef\" @up-file-list=\"upFileList\"></voice>\n\t\t\t\t<!-- 发送按钮 -->\n\t\t\t\t<button v-if=\"!isChating\" class=\"touchchat-edit-send\" :disabled=\"!inputValue.trim() && !fileList.length\" @click=\"handleSend\">\n\t\t\t\t\t<div class=\"touchchat-edit-send-icon\"></div>\n\t\t\t\t</button>\n\n\t\t\t\t<!-- 停止按钮 -->\n\t\t\t\t<button v-else class=\"touchchat-edit-stop\" @click=\"handleStop\">\n\t\t\t\t\t<div class=\"touchchat-edit-stop-icon\"></div>\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t</div>\n\t\t<MarkLayer :show-mark-laryer=\"showMarkLaryer\" @colse-mark-layer=\"showMarkLaryer = false\" />\n\t</div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { ref, inject, provide, nextTick, computed, watch, onMounted } from 'vue'\nimport MarkLayer from '../../component/MarkLayer.vue'\nimport FileContent from '../../component/FileContent.vue'\nimport UploadView from '../../component/UploadView.vue'\nimport Screenshot from '../../component/Screenshot.vue'\nimport Voice from '../../component/VoiceView.vue'\nimport RealtimeVoice from '../../component/RealtimeVoice.vue'\nimport ModuleSelect from '../../component/ModuleSelect.vue'\nimport { showToast } from '../../utils/tools'\n\ninterface FileItem {\n\tfile: File\n\tisUploading: boolean\n\tuploadProgress: number\n\tuploadSuccess: boolean\n\tuploadError: boolean\n\tfileSize: string\n\tfileType: string\n\tname: string\n\tid: string\n\tbase64: string | null\n}\n\n// 定义 body 返回值的类型\ninterface BodyConfig {\n\tmodel: string\n\tmessages: Array<{\n\t\trole: string\n\t\tcontent: string\n\t}>\n\tstream: boolean\n}\n\n// 定义 respoKey 返回值的类型\ninterface RespoKeyConfig {\n\tcategory: string\n\tcontentCategory: string\n\tcontent: string\n\tall: string\n\tallCategory: string\n}\n\ninterface ModuleItem {\n\tname: string\n\tconfig: {\n\t\taction: string\n\t\theaders: () => object\n\t\tbody: () => BodyConfig // 修改为具体类型\n\t\trespoKey: () => RespoKeyConfig // 修改为具体类型\n\t}\n}\n\nconst props = defineProps<{\n\tinputValue: string\n\tisChating: boolean\n\tenableDeepThinking: boolean\n}>()\n\nconst placeholder = inject('placeholder', '请输入...')\nconst layout = inject<string>('layout', 'side, think, upload, chain, screen,realtime')\nconst modules = inject<(string | ModuleItem)[]>('modules', [])\nconst allowedTypes = inject<string[]>('allowedTypes', [])\nprovide('uploadFile', (index: number, type?: string) => {\n\tif (uploadViewRef.value) {\n\t\tuploadViewRef.value.uploadFile(index, type)\n\t}\n})\nconst thinkAble = layout.includes('think')\nconst clearAble = layout.includes('clear')\nconst uploadAble = layout.includes('upload')\nconst screenAble = layout.includes('screen')\nconst voiceAble = layout.includes('voice')\nconst realtimeVoiceAble = layout.includes('realtime')\nconst showMarkLaryer = ref<boolean>(false)\nconst fileList = ref<FileItem[]>([])\n// const fileData = ref<FileItem[]>([])\nconst optionalModules = ref<ModuleItem[]>([\n\t{\n\t\tname: 'deepseek-v3',\n\t\tconfig: {\n\t\t\taction: 'https://api.apiyi.com/v1/chat/completions',\n\t\t\theaders: () => ({\n\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\tAuthorization: 'Bearer sk-fe9MtODvds8wpzz05f3417Fe3e9641C1926e6fC588425dEd'\n\t\t\t}),\n\t\t\tbody: () => ({\n\t\t\t\tmodel: 'deepseek-v3',\n\t\t\t\tmessages: [\n\t\t\t\t\t{\n\t\t\t\t\t\trole: 'user',\n\t\t\t\t\t\tcontent: props.inputValue // 使用传入的用户内容参数\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\tstream: true\n\t\t\t}),\n\t\t\trespoKey: () => ({\n\t\t\t\tcategory: 'category',\n\t\t\t\tcontentCategory: 'task_stream_content',\n\t\t\t\tcontent: 'content',\n\t\t\t\tall: 'message',\n\t\t\t\tallCategory: 'answer'\n\t\t\t})\n\t\t}\n\t}\n])\nconst uploadViewRef = ref<InstanceType<typeof UploadView>>()\nconst selectVal = ref('')\nconst selectInfo = ref<ModuleItem>()\nconst voiceRef = ref<InstanceType<typeof Voice>>()\n// const scripts = inject<any[]>('scripts', [])\n\nconst modelChange = inject<(item: ModuleItem, index: number) => void>('modelChange', () => {\n\tconsole.warn('未提供modelChange函数')\n})\n\nconst emits = defineEmits<{\n\t(e: 'send', val: string, list: FileItem[]): void\n\t(e: 'stop'): void\n\t(e: 'update:enableDeepThinking', value: boolean): void\n\t(e: 'update:inputValue', value: string): void // 添加inputValue更新事件\n\t(e: 'moduleInfo', info: ModuleItem): void\n}>()\n\nwatch(\n\t() => selectVal.value,\n\t() => {\n\t\tif (finallyModules.value.length > 0) {\n\t\t\tselectInfo.value = finallyModules.value.find((item: any) => item.name === selectVal.value)\n\t\t\tif (selectInfo.value) {\n\t\t\t\temits('moduleInfo', selectInfo.value)\n\t\t\t\tmodelChange(selectInfo.value, finallyModules.value.indexOf(selectInfo.value))\n\t\t\t}\n\t\t}\n\t},\n\t{ deep: true }\n)\n\nwatch(\n\t() => props.enableDeepThinking,\n\t() => {\n\t\tupdateSelectInfo()\n\t},\n\t{ deep: true }\n)\n\nwatch(\n\t() => props.inputValue,\n\t() => {\n\t\tupdateSelectInfo()\n\t},\n\t{ deep: true }\n)\n\nconst finallyModules = computed(() => {\n\tif (!modules.length) {\n\t\treturn optionalModules.value\n\t}\n\treturn modules.flatMap((module: any) => {\n\t\tif (typeof module === 'string') {\n\t\t\t// 若 module 是字符串,在 optionalModules 中查找 name 匹配的项\n\t\t\tconst matchedModule = optionalModules.value.find((optModule: any) => optModule.name === module)\n\t\t\tif (matchedModule) {\n\t\t\t\t// 对匹配到的模块也更新 content 值\n\t\t\t\tconst updatedModule = { ...matchedModule }\n\t\t\t\tconst body = updatedModule.config.body()\n\t\t\t\tif (body.messages && body.messages.length > 0 && body.messages[0].content) {\n\t\t\t\t\tbody.messages[0].content = props.inputValue\n\t\t\t\t} else {\n\t\t\t\t\tbody.messages = [{ role: 'user', content: props.inputValue }]\n\t\t\t\t}\n\t\t\t\t// console.log(body,'ChatInput.vue === 196',props.inputValue)\n\t\t\t\t// body.messages[0].content = props.inputValue\n\t\t\t\tif (thinkAble) {\n\t\t\t\t\tbody.model = props.enableDeepThinking ? 'deepseek-reasoner' : 'deepseek-v3'\n\t\t\t\t}\n\t\t\t\tupdatedModule.config.body = () => body\n\t\t\t\treturn [updatedModule]\n\t\t\t}\n\t\t\treturn []\n\t\t} else {\n\t\t\tconst body = module.config.body()\n\t\t\tif (body.messages && body.messages.length > 0 && body.messages[0].content) {\n\t\t\t\tbody.messages[0].content = props.inputValue\n\t\t\t}\n\t\t\t// body.messages[0].content = props.inputValue\n\t\t\tif (thinkAble) {\n\t\t\t\tbody.model = props.enableDeepThinking ? 'deepseek-reasoner' : 'deepseek-v3'\n\t\t\t}\n\t\t\t// 重新定义 body 方法,返回更新后的 body\n\t\t\tmodule.config.body = () => body\n\t\t\treturn [module]\n\t\t}\n\t})\n})\n\nconst updateSelectInfo = () => {\n\tif (finallyModules.value.length > 0 && selectInfo.value) {\n\t\tconst body = selectInfo.value.config.body()\n\t\tif (thinkAble && body.model) {\n\t\t\tbody.model = props.enableDeepThinking ? 'deepseek-reasoner' : 'deepseek-v3'\n\t\t}\n\t\tif (body.messages && body.messages.length > 0 && body.messages[0].content) {\n\t\t\tbody.messages[0].content = props.inputValue\n\t\t} else {\n\t\t\tbody.messages = [{ role: 'user', content: props.inputValue }]\n\t\t}\n\t\tselectInfo.value.config.body = () => body\n\t}\n}\n\nconst upFileList = (list: FileItem[]) => {\n\tfileList.value.push(...list)\n\tnextTick(() => {\n\t\tif (uploadViewRef.value) {\n\t\t\t// 只对最新复制的图片进行加载\n\t\t\tuploadViewRef.value.uploadFile(fileList.value.length - 1)\n\t\t}\n\t})\n}\n\nconst handlePaste = (event: any, type?: string) => {\n\t// event.preventDefault();\n\tif (event.clipboardData) {\n\t\tconst clipboardData = event.clipboardData || window.Clipboard\n\t\tconst items = clipboardData.items\n\n\t\tlet isImage = false\n\t\tfor (let i = 0; i < items.length; i++) {\n\t\t\tif (items[i].type.indexOf('image/') !== -1) {\n\t\t\t\tisImage = true\n\t\t\t\t// 获取图片文件\n\t\t\t\tconst blob = items[i].getAsFile()\n\t\t\t\tif (blob) {\n\t\t\t\t\tconst reader = new FileReader()\n\t\t\t\t\treader.onload = e => {\n\t\t\t\t\t\tconst base64 = e.target?.result as string\n\t\t\t\t\t\t// 生成图片属性对象\n\t\t\t\t\t\tconst imageInfo = {\n\t\t\t\t\t\t\tfile: blob,\n\t\t\t\t\t\t\tisUploading: false,\n\t\t\t\t\t\t\tuploadProgress: 0,\n\t\t\t\t\t\t\tuploadSuccess: false,\n\t\t\t\t\t\t\tuploadError: false,\n\t\t\t\t\t\t\tfileSize: `${(blob.size / 1024).toFixed(2)} KB`,\n\t\t\t\t\t\t\tfileType: blob.type,\n\t\t\t\t\t\t\tname: `pasted_image_${Date.now()}`,\n\t\t\t\t\t\t\tid: Date.now().toString(),\n\t\t\t\t\t\t\tbase64\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfileList.value.push(imageInfo)\n\t\t\t\t\t\tnextTick(() => {\n\t\t\t\t\t\t\tif (uploadViewRef.value) {\n\t\t\t\t\t\t\t\t// 只对最新复制的图片进行加载\n\t\t\t\t\t\t\t\tuploadViewRef.value.uploadFile(fileList.value.length - 1)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t\treader.readAsDataURL(blob)\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\tif (isImage) {\n\t\t\tconsole.log('检测到粘贴的是图片')\n\t\t} else {\n\t\t\tconsole.log('粘贴的不是图片')\n\t\t}\n\t} else {\n\t\tif (type === 'copy') {\n\t\t\tfileList.value = event\n\t\t\tnextTick(() => {\n\t\t\t\tif (uploadViewRef.value) {\n\t\t\t\t\t// 只对最新复制的图片进行加载\n\t\t\t\t\tuploadViewRef.value.uploadFile(fileList.value.length - 1)\n\t\t\t\t}\n\t\t\t})\n\t\t\treturn\n\t\t}\n\t\tfileList.value.push(...event)\n\t\tnextTick(() => {\n\t\t\tif (uploadViewRef.value) {\n\t\t\t\t// 只对最新复制的图片进行加载\n\t\t\t\tuploadViewRef.value.uploadFile(fileList.value.length - 1)\n\t\t\t}\n\t\t})\n\t}\n}\n\nconst openMarkLayer = () => {\n\tshowMarkLaryer.value = true\n}\n\nconst colseMarkLayer = () => {\n\tshowMarkLaryer.value = false\n}\n\nconst handleColse = (id: string) => {\n\tconst index = fileList.value.findIndex((item: any) => item.id === id)\n\tif (index !== -1) {\n\t\tfileList.value.splice(index, 1)\n\t}\n}\n\nconst startRealtimeVoice = () => {\n\tif (voiceRef.value) {\n\t\tvoiceRef.value.toggleRecording(true)\n\t}\n}\n\nconst transcription = (text: string) => {\n\temits('update:inputValue', text)\n}\n\nconst handleClearClick = () => {\n\temits('update:inputValue', '')\n}\n\n// 处理输入框变化\nconst handleInputChange = (e: Event) => {\n\tconst value = (e.target as HTMLTextAreaElement).value\n\temits('update:inputValue', value)\n}\n\n// 处理深度思考按钮点击\nconst handleDeepThinkingClick = () => {\n\t// enableDeepThinking.value ? 'deepseek-reasoner' : 'deepseek-v3'\n\temits('update:enableDeepThinking', !props.enableDeepThinking)\n}\n\nconst uploadFile = (file: FileItem[]) => {\n\tif (file.length > 0) {\n\t\tfileList.value = file\n\t}\n}\n\nconst handleSend = (e?: Event) => {\n\t// 检测是否为 Shift+Enter,如果是则不发送,执行默认换行行为\n\tif (e instanceof KeyboardEvent && e.shiftKey) {\n\t\treturn\n\t}\n\t// 普通 Enter 时阻止默认行为,执行发送逻辑\n\tif (e instanceof KeyboardEvent) {\n\t\te.preventDefault()\n\t}\n\t// if (!scripts.length && fileList.value.length > 0) {\n\t// \tshowToast('暂不支持文件发送')\n\t// \treturn\n\t// }\n\tif (!props.inputValue.trim() && !fileList.value.length) {\n\t\tshowToast('请输入内容')\n\t\treturn\n\t}\n\tlet uploadError = false\n\tif (fileList.value.length > 0) {\n\t\tfileList.value.forEach((item: any) => {\n\t\t\tif (item.uploadError) {\n\t\t\t\tuploadError = true\n\t\t\t}\n\t\t})\n\t}\n\tif (uploadError) {\n\t\tshowToast('上传失败,请重试')\n\t\treturn\n\t}\n\tif (fileList.value.length > 10) {\n\t\tshowToast('文件数量不能超过10个')\n\t\treturn\n\t}\n\temits('send', props.inputValue, fileList.value)\n\tnextTick(() => {\n\t\tfileList.value = []\n\t\tif (uploadViewRef.value) {\n\t\t\tuploadViewRef.value.resetFile()\n\t\t}\n\t\tif (voiceRef.value) {\n\t\t\tvoiceRef.value.resetFile()\n\t\t}\n\t})\n}\n\nconst itemUploadFile = (index: number, type: string) => {\n\tif (uploadViewRef.value) {\n\t\tuploadViewRef.value.uploadFile(index, type)\n\t}\n}\nconst handleStop = () => emits('stop')\nonMounted(() => {\n\tif (finallyModules.value.length > 0) {\n\t\tselectVal.value = finallyModules.value[0].name\n\t\tselectInfo.value = finallyModules.value[0]\n\t\tif (selectInfo.value) {\n\t\t\temits('moduleInfo', selectInfo.value)\n\t\t}\n\t}\n})\ndefineExpose({\n\thandlePaste,\n\topenMarkLayer,\n\tcolseMarkLayer,\n\titemUploadFile\n})\n</script>\n"],"names":["inject","provide","ref","watch","computed","nextTick","showToast","onMounted","_createElementBlock","_createCommentVNode","_createBlock","FileContent","_createElementVNode","_unref","UploadView","_normalizeClass","_toDisplayString","ModuleSelect","Screenshot","RealtimeVoice","Voice","_Fragment","_createVNode","MarkLayer"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAiHA,IAAA,MAAM,KAAQ,GAAA,OAAA,CAAA;AAMd,IAAM,MAAA,WAAA,GAAcA,UAAO,CAAA,aAAA,EAAe,uBAAQ,CAAA,CAAA;AAClD,IAAM,MAAA,MAAA,GAASA,UAAe,CAAA,QAAA,EAAU,6CAA6C,CAAA,CAAA;AACrF,IAAA,MAAM,OAAU,GAAAA,UAAA,CAAgC,SAAW,EAAA,EAAE,CAAA,CAAA;AAC7D,IAAA,MAAM,YAAe,GAAAA,UAAA,CAAiB,cAAgB,EAAA,EAAE,CAAA,CAAA;AACxD,IAAQC,WAAA,CAAA,YAAA,EAAc,CAAC,KAAA,EAAe,IAAkB,KAAA;AACvD,MAAA,IAAI,cAAc,KAAO,EAAA;AACxB,QAAc,aAAA,CAAA,KAAA,CAAM,UAAW,CAAA,KAAA,EAAO,IAAI,CAAA,CAAA;AAAA,OAC3C;AAAA,KACA,CAAA,CAAA;AACD,IAAM,MAAA,SAAA,GAAY,MAAO,CAAA,QAAA,CAAS,OAAO,CAAA,CAAA;AACzC,IAAM,MAAA,SAAA,GAAY,MAAO,CAAA,QAAA,CAAS,OAAO,CAAA,CAAA;AACzC,IAAM,MAAA,UAAA,GAAa,MAAO,CAAA,QAAA,CAAS,QAAQ,CAAA,CAAA;AAC3C,IAAM,MAAA,UAAA,GAAa,MAAO,CAAA,QAAA,CAAS,QAAQ,CAAA,CAAA;AAC3C,IAAM,MAAA,SAAA,GAAY,MAAO,CAAA,QAAA,CAAS,OAAO,CAAA,CAAA;AACzC,IAAM,MAAA,iBAAA,GAAoB,MAAO,CAAA,QAAA,CAAS,UAAU,CAAA,CAAA;AACpD,IAAM,MAAA,cAAA,GAAiBC,QAAa,KAAK,CAAA,CAAA;AACzC,IAAM,MAAA,QAAA,GAAWA,OAAgB,CAAA,EAAE,CAAA,CAAA;AAEnC,IAAA,MAAM,kBAAkBA,OAAkB,CAAA;AAAA,MACzC;AAAA,QACC,IAAM,EAAA,aAAA;AAAA,QACN,MAAQ,EAAA;AAAA,UACP,MAAQ,EAAA,2CAAA;AAAA,UACR,SAAS,OAAO;AAAA,YACf,cAAgB,EAAA,kBAAA;AAAA,YAChB,aAAe,EAAA,4DAAA;AAAA,WAChB,CAAA;AAAA,UACA,MAAM,OAAO;AAAA,YACZ,KAAO,EAAA,aAAA;AAAA,YACP,QAAU,EAAA;AAAA,cACT;AAAA,gBACC,IAAM,EAAA,MAAA;AAAA,gBACN,SAAS,KAAM,CAAA,UAAA;AAAA;AAAA,eAChB;AAAA,aACD;AAAA,YACA,MAAQ,EAAA,IAAA;AAAA,WACT,CAAA;AAAA,UACA,UAAU,OAAO;AAAA,YAChB,QAAU,EAAA,UAAA;AAAA,YACV,eAAiB,EAAA,qBAAA;AAAA,YACjB,OAAS,EAAA,SAAA;AAAA,YACT,GAAK,EAAA,SAAA;AAAA,YACL,WAAa,EAAA,QAAA;AAAA,WACd,CAAA;AAAA,SACD;AAAA,OACD;AAAA,KACA,CAAA,CAAA;AACD,IAAA,MAAM,gBAAgBA,OAAqC,EAAA,CAAA;AAC3D,IAAM,MAAA,SAAA,GAAYA,QAAI,EAAE,CAAA,CAAA;AACxB,IAAA,MAAM,aAAaA,OAAgB,EAAA,CAAA;AACnC,IAAA,MAAM,WAAWA,OAAgC,EAAA,CAAA;AAGjD,IAAM,MAAA,WAAA,GAAcF,UAAkD,CAAA,aAAA,EAAe,MAAM;AAC1F,MAAA,OAAA,CAAQ,KAAK,2CAAkB,CAAA,CAAA;AAAA,KAC/B,CAAA,CAAA;AAED,IAAA,MAAM,KAAQ,GAAA,MAAA,CAAA;AAQd,IAAAG,SAAA;AAAA,MACC,MAAM,SAAU,CAAA,KAAA;AAAA,MAChB,MAAM;AACL,QAAI,IAAA,cAAA,CAAe,KAAM,CAAA,MAAA,GAAS,CAAG,EAAA;AACpC,UAAW,UAAA,CAAA,KAAA,GAAQ,eAAe,KAAM,CAAA,IAAA,CAAK,CAAC,IAAc,KAAA,IAAA,CAAK,IAAS,KAAA,SAAA,CAAU,KAAK,CAAA,CAAA;AACzF,UAAA,IAAI,WAAW,KAAO,EAAA;AACrB,YAAM,KAAA,CAAA,YAAA,EAAc,WAAW,KAAK,CAAA,CAAA;AACpC,YAAA,WAAA,CAAY,WAAW,KAAO,EAAA,cAAA,CAAe,MAAM,OAAQ,CAAA,UAAA,CAAW,KAAK,CAAC,CAAA,CAAA;AAAA,WAC7E;AAAA,SACD;AAAA,OACD;AAAA,MACA,EAAE,MAAM,IAAK,EAAA;AAAA,KACd,CAAA;AAEA,IAAAA,SAAA;AAAA,MACC,MAAM,KAAM,CAAA,kBAAA;AAAA,MACZ,MAAM;AACL,QAAiB,gBAAA,EAAA,CAAA;AAAA,OAClB;AAAA,MACA,EAAE,MAAM,IAAK,EAAA;AAAA,KACd,CAAA;AAEA,IAAAA,SAAA;AAAA,MACC,MAAM,KAAM,CAAA,UAAA;AAAA,MACZ,MAAM;AACL,QAAiB,gBAAA,EAAA,CAAA;AAAA,OAClB;AAAA,MACA,EAAE,MAAM,IAAK,EAAA;AAAA,KACd,CAAA;AAEA,IAAM,MAAA,cAAA,GAAiBC,aAAS,MAAM;AACrC,MAAI,IAAA,CAAC,QAAQ,MAAQ,EAAA;AACpB,QAAA,OAAO,eAAgB,CAAA,KAAA,CAAA;AAAA,OACxB;AACA,MAAO,OAAA,OAAA,CAAQ,OAAQ,CAAA,CAAC,MAAgB,KAAA;AACvC,QAAI,IAAA,OAAO,WAAW,QAAU,EAAA;AAE/B,UAAM,MAAA,aAAA,GAAgB,gBAAgB,KAAM,CAAA,IAAA,CAAK,CAAC,SAAmB,KAAA,SAAA,CAAU,SAAS,MAAM,CAAA,CAAA;AAC9F,UAAA,IAAI,aAAe,EAAA;AAElB,YAAM,MAAA,aAAA,GAAgB,EAAE,GAAG,aAAc,EAAA,CAAA;AACzC,YAAM,MAAA,IAAA,GAAO,aAAc,CAAA,MAAA,CAAO,IAAK,EAAA,CAAA;AACvC,YAAI,IAAA,IAAA,CAAK,QAAY,IAAA,IAAA,CAAK,QAAS,CAAA,MAAA,GAAS,KAAK,IAAK,CAAA,QAAA,CAAS,CAAC,CAAA,CAAE,OAAS,EAAA;AAC1E,cAAA,IAAA,CAAK,QAAS,CAAA,CAAC,CAAE,CAAA,OAAA,GAAU,KAAM,CAAA,UAAA,CAAA;AAAA,aAC3B,MAAA;AACN,cAAK,IAAA,CAAA,QAAA,GAAW,CAAC,EAAE,IAAA,EAAM,QAAQ,OAAS,EAAA,KAAA,CAAM,YAAY,CAAA,CAAA;AAAA,aAC7D;AAGA,YAAA,IAAI,SAAW,EAAA;AACd,cAAK,IAAA,CAAA,KAAA,GAAQ,KAAM,CAAA,kBAAA,GAAqB,mBAAsB,GAAA,aAAA,CAAA;AAAA,aAC/D;AACA,YAAc,aAAA,CAAA,MAAA,CAAO,OAAO,MAAM,IAAA,CAAA;AAClC,YAAA,OAAO,CAAC,aAAa,CAAA,CAAA;AAAA,WACtB;AACA,UAAA,OAAO,EAAC,CAAA;AAAA,SACF,MAAA;AACN,UAAM,MAAA,IAAA,GAAO,MAAO,CAAA,MAAA,CAAO,IAAK,EAAA,CAAA;AAChC,UAAI,IAAA,IAAA,CAAK,QAAY,IAAA,IAAA,CAAK,QAAS,CAAA,MAAA,GAAS,KAAK,IAAK,CAAA,QAAA,CAAS,CAAC,CAAA,CAAE,OAAS,EAAA;AAC1E,YAAA,IAAA,CAAK,QAAS,CAAA,CAAC,CAAE,CAAA,OAAA,GAAU,KAAM,CAAA,UAAA,CAAA;AAAA,WAClC;AAEA,UAAA,IAAI,SAAW,EAAA;AACd,YAAK,IAAA,CAAA,KAAA,GAAQ,KAAM,CAAA,kBAAA,GAAqB,mBAAsB,GAAA,aAAA,CAAA;AAAA,WAC/D;AAEA,UAAO,MAAA,CAAA,MAAA,CAAO,OAAO,MAAM,IAAA,CAAA;AAC3B,UAAA,OAAO,CAAC,MAAM,CAAA,CAAA;AAAA,SACf;AAAA,OACA,CAAA,CAAA;AAAA,KACD,CAAA,CAAA;AAED,IAAA,MAAM,mBAAmB,MAAM;AAC9B,MAAA,IAAI,cAAe,CAAA,KAAA,CAAM,MAAS,GAAA,CAAA,IAAK,WAAW,KAAO,EAAA;AACxD,QAAA,MAAM,IAAO,GAAA,UAAA,CAAW,KAAM,CAAA,MAAA,CAAO,IAAK,EAAA,CAAA;AAC1C,QAAI,IAAA,SAAA,IAAa,KAAK,KAAO,EAAA;AAC5B,UAAK,IAAA,CAAA,KAAA,GAAQ,KAAM,CAAA,kBAAA,GAAqB,mBAAsB,GAAA,aAAA,CAAA;AAAA,SAC/D;AACA,QAAI,IAAA,IAAA,CAAK,QAAY,IAAA,IAAA,CAAK,QAAS,CAAA,MAAA,GAAS,KAAK,IAAK,CAAA,QAAA,CAAS,CAAC,CAAA,CAAE,OAAS,EAAA;AAC1E,UAAA,IAAA,CAAK,QAAS,CAAA,CAAC,CAAE,CAAA,OAAA,GAAU,KAAM,CAAA,UAAA,CAAA;AAAA,SAC3B,MAAA;AACN,UAAK,IAAA,CAAA,QAAA,GAAW,CAAC,EAAE,IAAA,EAAM,QAAQ,OAAS,EAAA,KAAA,CAAM,YAAY,CAAA,CAAA;AAAA,SAC7D;AACA,QAAW,UAAA,CAAA,KAAA,CAAM,MAAO,CAAA,IAAA,GAAO,MAAM,IAAA,CAAA;AAAA,OACtC;AAAA,KACD,CAAA;AAEA,IAAM,MAAA,UAAA,GAAa,CAAC,IAAqB,KAAA;AACxC,MAAS,QAAA,CAAA,KAAA,CAAM,IAAK,CAAA,GAAG,IAAI,CAAA,CAAA;AAC3B,MAAAC,YAAA,CAAS,MAAM;AACd,QAAA,IAAI,cAAc,KAAO,EAAA;AAExB,UAAA,aAAA,CAAc,KAAM,CAAA,UAAA,CAAW,QAAS,CAAA,KAAA,CAAM,SAAS,CAAC,CAAA,CAAA;AAAA,SACzD;AAAA,OACA,CAAA,CAAA;AAAA,KACF,CAAA;AAEA,IAAM,MAAA,WAAA,GAAc,CAAC,KAAA,EAAY,IAAkB,KAAA;AAElD,MAAA,IAAI,MAAM,aAAe,EAAA;AACxB,QAAM,MAAA,aAAA,GAAgB,KAAM,CAAA,aAAA,IAAiB,MAAO,CAAA,SAAA,CAAA;AACpD,QAAA,MAAM,QAAQ,aAAc,CAAA,KAAA,CAAA;AAE5B,QAAA,IAAI,OAAU,GAAA,KAAA,CAAA;AACd,QAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,KAAA,CAAM,QAAQ,CAAK,EAAA,EAAA;AACtC,UAAA,IAAI,MAAM,CAAC,CAAA,CAAE,KAAK,OAAQ,CAAA,QAAQ,MAAM,CAAI,CAAA,EAAA;AAC3C,YAAU,OAAA,GAAA,IAAA,CAAA;AAEV,YAAA,MAAM,IAAO,GAAA,KAAA,CAAM,CAAC,CAAA,CAAE,SAAU,EAAA,CAAA;AAChC,YAAA,IAAI,IAAM,EAAA;AACT,cAAM,MAAA,MAAA,GAAS,IAAI,UAAW,EAAA,CAAA;AAC9B,cAAA,MAAA,CAAO,SAAS,CAAK,CAAA,KAAA;;AACpB,gBAAM,MAAA,MAAA,GAAA,CAAS,EAAE,GAAA,CAAA,CAAA,MAAA,KAAF,IAAU,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAA,CAAA;AAEzB,gBAAA,MAAM,SAAY,GAAA;AAAA,kBACjB,IAAM,EAAA,IAAA;AAAA,kBACN,WAAa,EAAA,KAAA;AAAA,kBACb,cAAgB,EAAA,CAAA;AAAA,kBAChB,aAAe,EAAA,KAAA;AAAA,kBACf,WAAa,EAAA,KAAA;AAAA,kBACb,UAAU,CAAI,EAAA,CAAA,IAAA,CAAK,IAAO,GAAA,IAAA,EAAM,QAAQ,CAAC,CAAA,CAAA,GAAA,CAAA;AAAA,kBACzC,UAAU,IAAK,CAAA,IAAA;AAAA,kBACf,IAAA,EAAM,CAAgB,aAAA,EAAA,IAAA,CAAK,GAAI,EAAA,CAAA,CAAA;AAAA,kBAC/B,EAAI,EAAA,IAAA,CAAK,GAAI,EAAA,CAAE,QAAS,EAAA;AAAA,kBACxB,MAAA;AAAA,iBACD,CAAA;AACA,gBAAS,QAAA,CAAA,KAAA,CAAM,KAAK,SAAS,CAAA,CAAA;AAC7B,gBAAAA,YAAA,CAAS,MAAM;AACd,kBAAA,IAAI,cAAc,KAAO,EAAA;AAExB,oBAAA,aAAA,CAAc,KAAM,CAAA,UAAA,CAAW,QAAS,CAAA,KAAA,CAAM,SAAS,CAAC,CAAA,CAAA;AAAA,mBACzD;AAAA,iBACA,CAAA,CAAA;AAAA,eACF,CAAA;AACA,cAAA,MAAA,CAAO,cAAc,IAAI,CAAA,CAAA;AAAA,aAC1B;AACA,YAAA,MAAA;AAAA,WACD;AAAA,SACD;AAEA,QAAA,IAAI,OAAS,EAAA;AACZ,UAAA,OAAA,CAAQ,IAAI,wDAAW,CAAA,CAAA;AAAA,SACjB,MAAA;AACN,UAAA,OAAA,CAAQ,IAAI,4CAAS,CAAA,CAAA;AAAA,SACtB;AAAA,OACM,MAAA;AACN,QAAA,IAAI,SAAS,MAAQ,EAAA;AACpB,UAAA,QAAA,CAAS,KAAQ,GAAA,KAAA,CAAA;AACjB,UAAAA,YAAA,CAAS,MAAM;AACd,YAAA,IAAI,cAAc,KAAO,EAAA;AAExB,cAAA,aAAA,CAAc,KAAM,CAAA,UAAA,CAAW,QAAS,CAAA,KAAA,CAAM,SAAS,CAAC,CAAA,CAAA;AAAA,aACzD;AAAA,WACA,CAAA,CAAA;AACD,UAAA,OAAA;AAAA,SACD;AACA,QAAS,QAAA,CAAA,KAAA,CAAM,IAAK,CAAA,GAAG,KAAK,CAAA,CAAA;AAC5B,QAAAA,YAAA,CAAS,MAAM;AACd,UAAA,IAAI,cAAc,KAAO,EAAA;AAExB,YAAA,aAAA,CAAc,KAAM,CAAA,UAAA,CAAW,QAAS,CAAA,KAAA,CAAM,SAAS,CAAC,CAAA,CAAA;AAAA,WACzD;AAAA,SACA,CAAA,CAAA;AAAA,OACF;AAAA,KACD,CAAA;AAEA,IAAA,MAAM,gBAAgB,MAAM;AAC3B,MAAA,cAAA,CAAe,KAAQ,GAAA,IAAA,CAAA;AAAA,KACxB,CAAA;AAEA,IAAA,MAAM,iBAAiB,MAAM;AAC5B,MAAA,cAAA,CAAe,KAAQ,GAAA,KAAA,CAAA;AAAA,KACxB,CAAA;AAEA,IAAM,MAAA,WAAA,GAAc,CAAC,EAAe,KAAA;AACnC,MAAM,MAAA,KAAA,GAAQ,SAAS,KAAM,CAAA,SAAA,CAAU,CAAC,IAAc,KAAA,IAAA,CAAK,OAAO,EAAE,CAAA,CAAA;AACpE,MAAA,IAAI,UAAU,CAAI,CAAA,EAAA;AACjB,QAAS,QAAA,CAAA,KAAA,CAAM,MAAO,CAAA,KAAA,EAAO,CAAC,CAAA,CAAA;AAAA,OAC/B;AAAA,KACD,CAAA;AAEA,IAAA,MAAM,qBAAqB,MAAM;AAChC,MAAA,IAAI,SAAS,KAAO,EAAA;AACnB,QAAS,QAAA,CAAA,KAAA,CAAM,gBAAgB,IAAI,CAAA,CAAA;AAAA,OACpC;AAAA,KACD,CAAA;AAEA,IAAM,MAAA,aAAA,GAAgB,CAAC,IAAiB,KAAA;AACvC,MAAA,KAAA,CAAM,qBAAqB,IAAI,CAAA,CAAA;AAAA,KAChC,CAAA;AAEA,IAAA,MAAM,mBAAmB,MAAM;AAC9B,MAAA,KAAA,CAAM,qBAAqB,EAAE,CAAA,CAAA;AAAA,KAC9B,CAAA;AAGA,IAAM,MAAA,iBAAA,GAAoB,CAAC,CAAa,KAAA;AACvC,MAAM,MAAA,KAAA,GAAS,EAAE,MAA+B,CAAA,KAAA,CAAA;AAChD,MAAA,KAAA,CAAM,qBAAqB,KAAK,CAAA,CAAA;AAAA,KACjC,CAAA;AAGA,IAAA,MAAM,0BAA0B,MAAM;AAErC,MAAM,KAAA,CAAA,2BAAA,EAA6B,CAAC,KAAA,CAAM,kBAAkB,CAAA,CAAA;AAAA,KAC7D,CAAA;AAEA,IAAM,MAAA,UAAA,GAAa,CAAC,IAAqB,KAAA;AACxC,MAAI,IAAA,IAAA,CAAK,SAAS,CAAG,EAAA;AACpB,QAAA,QAAA,CAAS,KAAQ,GAAA,IAAA,CAAA;AAAA,OAClB;AAAA,KACD,CAAA;AAEA,IAAM,MAAA,UAAA,GAAa,CAAC,CAAc,KAAA;AAEjC,MAAI,IAAA,CAAA,YAAa,aAAiB,IAAA,CAAA,CAAE,QAAU,EAAA;AAC7C,QAAA,OAAA;AAAA,OACD;AAEA,MAAA,IAAI,aAAa,aAAe,EAAA;AAC/B,QAAA,CAAA,CAAE,cAAe,EAAA,CAAA;AAAA,OAClB;AAKA,MAAI,IAAA,CAAC,MAAM,UAAW,CAAA,IAAA,MAAU,CAAC,QAAA,CAAS,MAAM,MAAQ,EAAA;AACvD,QAAAC,eAAA,CAAU,gCAAO,CAAA,CAAA;AACjB,QAAA,OAAA;AAAA,OACD;AACA,MAAA,IAAI,WAAc,GAAA,KAAA,CAAA;AAClB,MAAI,IAAA,QAAA,CAAS,KAAM,CAAA,MAAA,GAAS,CAAG,EAAA;AAC9B,QAAS,QAAA,CAAA,KAAA,CAAM,OAAQ,CAAA,CAAC,IAAc,KAAA;AACrC,UAAA,IAAI,KAAK,WAAa,EAAA;AACrB,YAAc,WAAA,GAAA,IAAA,CAAA;AAAA,WACf;AAAA,SACA,CAAA,CAAA;AAAA,OACF;AACA,MAAA,IAAI,WAAa,EAAA;AAChB,QAAAA,eAAA,CAAU,kDAAU,CAAA,CAAA;AACpB,QAAA,OAAA;AAAA,OACD;AACA,MAAI,IAAA,QAAA,CAAS,KAAM,CAAA,MAAA,GAAS,EAAI,EAAA;AAC/B,QAAAA,eAAA,CAAU,0DAAa,CAAA,CAAA;AACvB,QAAA,OAAA;AAAA,OACD;AACA,MAAA,KAAA,CAAM,MAAQ,EAAA,KAAA,CAAM,UAAY,EAAA,QAAA,CAAS,KAAK,CAAA,CAAA;AAC9C,MAAAD,YAAA,CAAS,MAAM;AACd,QAAA,QAAA,CAAS,QAAQ,EAAC,CAAA;AAClB,QAAA,IAAI,cAAc,KAAO,EAAA;AACxB,UAAA,aAAA,CAAc,MAAM,SAAU,EAAA,CAAA;AAAA,SAC/B;AACA,QAAA,IAAI,SAAS,KAAO,EAAA;AACnB,UAAA,QAAA,CAAS,MAAM,SAAU,EAAA,CAAA;AAAA,SAC1B;AAAA,OACA,CAAA,CAAA;AAAA,KACF,CAAA;AAEA,IAAM,MAAA,cAAA,GAAiB,CAAC,KAAA,EAAe,IAAiB,KAAA;AACvD,MAAA,IAAI,cAAc,KAAO,EAAA;AACxB,QAAc,aAAA,CAAA,KAAA,CAAM,UAAW,CAAA,KAAA,EAAO,IAAI,CAAA,CAAA;AAAA,OAC3C;AAAA,KACD,CAAA;AACA,IAAM,MAAA,UAAA,GAAa,MAAM,KAAA,CAAM,MAAM,CAAA,CAAA;AACrC,IAAAE,aAAA,CAAU,MAAM;AACf,MAAI,IAAA,cAAA,CAAe,KAAM,CAAA,MAAA,GAAS,CAAG,EAAA;AACpC,QAAA,SAAA,CAAU,KAAQ,GAAA,cAAA,CAAe,KAAM,CAAA,CAAC,CAAE,CAAA,IAAA,CAAA;AAC1C,QAAW,UAAA,CAAA,KAAA,GAAQ,cAAe,CAAA,KAAA,CAAM,CAAC,CAAA,CAAA;AACzC,QAAA,IAAI,WAAW,KAAO,EAAA;AACrB,UAAM,KAAA,CAAA,YAAA,EAAc,WAAW,KAAK,CAAA,CAAA;AAAA,SACrC;AAAA,OACD;AAAA,KACA,CAAA,CAAA;AACD,IAAa,QAAA,CAAA;AAAA,MACZ,WAAA;AAAA,MACA,aAAA;AAAA,MACA,cAAA;AAAA,MACA,cAAA;AAAA,KACA,CAAA,CAAA;;;4BA7cA,EAAAC,sBAAA,CAwDM,OAAA,EAxDD,KAAA,EAAM,kBAAgB,EAAA;AAAA,QAC1BC,uBAAuC,kCAAA,CAAA;AAAA,QACpB,SAAA,KAAS,CAAA,MAAA,GAAM,sBAAlCC,gBAAwHC,mBAAA,EAAA;AAAA;UAA/E,aAAW,QAAQ,CAAA,KAAA;AAAA,UAAG,WAAW,EAAA,IAAA;AAAA,UAAM,IAAK,EAAA,WAAA;AAAA,UAAa,OAAO,EAAA,WAAA;AAAA;QACzGC,sBAGM,CAAA,KAAA,EAAA,EAHD,KAAA,EAAM,wBAAsB,EAAA;AAAA,UAChCH,uBAAgC,2BAAA,CAAA;AAAA,UAChCG,uBAA6J,UAAA,EAAA;AAAA,YAAlJ,OAAO,OAAU,CAAA,UAAA;AAAA,YAAG,WAAa,EAAA,CAAA,EAAA,GAAAC,SAAA,CAAW,WAAA,CAAA,KAAX,IAAW,GAAA,EAAA,GAAA,uBAAA;AAAA,YAAe,OAAO,EAAA,WAAA;AAAA,YAAc,OAAO,EAAA,iBAAA;AAAA,YAAoB,wBAAe,UAAU,EAAA,CAAA,OAAA,CAAA,CAAA;AAAA,aAAE,GAAC,EAAA,EAAA,EAAA,CAAA,OAAA,EAAA,aAAA,CAAA,CAAA;AAAA;QAGnJJ,uBAAgB,8CAAA,CAAA;AAAA,QAChBG,sBAAA;AAAA,UA6CM,KAAA;AAAA,UAAA;AAAA,YA7CA,yBAAO,CAAAC,SAAA,CAAS,SAAA,CAAA,GAAA,uCAAA,uBAAA,CAAA;AAAA;;YACrBD,sBA0BM,CAAA,KAAA,EAAA,EA1BD,KAAA,EAAM,8BAA4B,EAAA;AAAA,cACtCH,uBAAsE,2EAAA,CAAA;AAAA,cACnDI,UAAU,UAAA,CAAA,qBAA7BH,gBAQcI,kBAAA,EAAA;AAAA;uBARqB,EAAA,eAAA;AAAA,gBAAJ,GAAI,EAAA,aAAA;AAAA,gBAAiB,aAAW,QAAQ,CAAA,KAAA;AAAA,gBAAG,YAAa,EAAA,UAAA;AAAA;qCACtF,MAMS;AAAA,kBANKD,SAAU,CAAA,UAAA,oBAAxB,EAAAL,sBAAA;AAAA,oBAMS,QAAA;AAAA,oBAAA;AAAA;sBANiB,KAAA,EAAKO,mBAAA,CAAC,uBAAA,EAAuB,EAAA,QAAqB,EAAA,OAAA,CAAS,SAAA,EAAA,CAAA,CAAA;AAAA;;sBACpFH,sBAA8C,CAAA,KAAA,EAAA,EAAzC,KAAA,EAAM,8BAA4B,CAAA;AAAA,sBACvCA,sBAGM,CAAA,KAAA,EAAA,EAHD,KAAA,EAAM,6BAA2B,EAAA;AAAA,wBACrCA,sBAAA,CAAiB,WAAd,oDAAU,CAAA;AAAA,wBACbA,sBAAA;AAAA,0BAA0G,GAAA;AAAA,0BAAvG,IAAA;AAAA,0BAAA,gCAAA,GAAQI,oBAAAH,SAAA,CAAA,YAAA,EAAa,IAAI,CAAA,QAAA,KAAA,+HAAA,CAAA;AAAA,0BAAA,CAAA;AAAA;AAAA,yBAAA;AAAA;;;;;;;;;cAKjBA,UAAS,SAAA,CAAA,qBAAvBL,uBAKS,QAAA,EAAA;AAAA;gBALgB,KAAM,EAAA,uBAAA;AAAA,gBAAyB,OAAO,EAAA,gBAAA;AAAA;gBAC9DI,sBAA8C,CAAA,KAAA,EAAA,EAAzC,KAAA,EAAM,8BAA4B,CAAA;AAAA,gBACvCA,sBAEM,CAAA,KAAA,EAAA,EAFD,KAAA,EAAM,sDAAoD,EAAA;AAAA,kBAC9DA,sBAAA,CAAW,WAAR,0BAAI,CAAA;AAAA;;cAIW,eAAA,KAAe,CAAA,MAAA,GAAM,sBAAzCF,gBAA+FO,oBAAA,EAAA;AAAA;4BAAvC,SAAS,CAAA,KAAA;AAAA,8CAAT,KAAA,SAAA,CAAS,KAAA,GAAA,MAAA;AAAA,gBAAG,SAAS,cAAc,CAAA,KAAA;AAAA;cAE3FR,uBAAyB,qFAAA,CAAA;AAAA,cACXI,SAAS,CAAA,SAAA,oBAAvB,EAAAL,sBAAA;AAAA,gBAGS,QAAA;AAAA,gBAAA;AAAA;kBAHgB,KAAM,EAAAO,kBAAA,CAAA,CAAA,sBAAA,EAA0C,EAAA,OAAA,EAAA,OAAA,CAAA,kBAAA,UAA8B,EAAA,OAAA,CAAS,SAAA,EAAA,CAAA,CAAA;AAAA,kBAAK,OAAO,EAAA,uBAAA;AAAA;;kBAC3HH,sBAA6C,CAAA,KAAA,EAAA,EAAxC,KAAA,EAAM,6BAA2B,CAAA;AAAA,kBACtCA,uBAAiD,KAA5C,EAAA,EAAA,KAAM,EAAA,2BAAA,IAA4B,0BAAI,CAAA;AAAA;;;;;YAG7CA,sBAgBM,CAAA,KAAA,EAAA,EAhBD,KAAA,EAAM,+BAA6B,EAAA;AAAA,cACvCH,uBAAW,gBAAA,CAAA;AAAA,cACOI,UAAU,UAAA,CAAA,qBAA5BH,gBAAsEQ,kBAAA,EAAA;AAAA;gBAAvC,YAAc,EAAA,UAAA;AAAA;cAC7CT,uBAAa,4BAAA,CAAA;AAAA,cACSI,UAAiB,iBAAA,CAAA,qBAAvCH,gBAAoIS,qBAAA,EAAA;AAAA;gBAA1F,oBAAsB,EAAA,kBAAA;AAAA,gBAAqB,eAAe,EAAA,aAAA;AAAA;cACpGV,uBAAW,gBAAA,CAAA;AAAA,cACEI,SAAS,CAAA,SAAA,oBAAtB,EAAAH,eAAA;AAAA,gBAA0EU,iBAAA;AAAA,gBAAA;AAAA;yBAA9C,EAAA,UAAA;AAAA,kBAAJ,GAAI,EAAA,QAAA;AAAA,kBAAY,YAAc,EAAA,UAAA;AAAA;;;;;cACtDX,uBAAa,4BAAA,CAAA;AAAA,eACE,OAAS,CAAA,SAAA,qBAAxBD,uBAES,QAAA,EAAA;AAAA;gBAFiB,KAAM,EAAA,qBAAA;AAAA,gBAAuB,QAAA,GAAW,OAAU,CAAA,UAAA,CAAC,MAAW,IAAA,CAAA,SAAA,KAAS,CAAA,MAAA;AAAA,gBAAS,OAAO,EAAA,UAAA;AAAA;gBAChHI,sBAA4C,CAAA,KAAA,EAAA,EAAvC,KAAA,EAAM,4BAA0B,CAAA;AAAA,qDAItC,EAAAJ,sBAAA;AAAA,gBAESa,YAAA;AAAA,gBAAA,EAAA,KAAA,CAAA,EAAA;AAAA,gBAAA;AAAA,kBAHTZ,uBAAa,4BAAA,CAAA;AAAA,kBACbG,uBAES,QAAA,EAAA;AAAA,oBAFM,KAAM,EAAA,qBAAA;AAAA,oBAAuB,OAAO,EAAA,UAAA;AAAA;oBAClDA,sBAA4C,CAAA,KAAA,EAAA,EAAvC,KAAA,EAAM,4BAA0B,CAAA;AAAA;;;;;;;;;;QAIxCU,gBAA2FC,iBAAA,EAAA;AAAA,UAA/E,oBAAkB,cAAc,CAAA,KAAA;AAAA,UAAG,yBAAkB,KAAA,cAAA,CAAc,KAAA,GAAA,KAAA;AAAA;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"ChatInput.vue2.js","sources":["../../../../../../../packages/components/touchchat/src/AiChat/ChatInput.vue"],"sourcesContent":["<template>\n\t<div class=\"touchchat-edit\">\n\t\t<!-- :file-progress=\"fileProgress\" -->\n\t\t<FileContent v-if=\"fileList.length > 0\" :file-list=\"fileList\" :has-colse=\"true\" type=\"ChatInput\" @colse=\"handleColse\" />\n\t\t<div class=\"touchchat-edit-input\">\n\t\t\t<!-- @keydown.enter.prevent -->\n\t\t\t<textarea :value=\"inputValue\" :placeholder=\"placeholder ?? '请输入...'\" @paste=\"handlePaste\" @input=\"handleInputChange\" @keydown.enter=\"handleSend\"> </textarea>\n\t\t</div>\n\n\t\t<!-- 按钮与开关容器 -->\n\t\t<div :class=\"thinkAble ? 'touchchat-edit-submit is-thinkable' : 'touchchat-edit-submit'\">\n\t\t\t<div class=\"touchchat-edit-submit-left\">\n\t\t\t\t<!-- 附件 @click=\"showMarkLaryer = true\" @progress-fn=\"progressFn\" -->\n\t\t\t\t<upload-view v-if=\"uploadAble\" ref=\"uploadViewRef\" :file-list=\"fileList\" @upload-file=\"uploadFile\">\n\t\t\t\t\t<button v-if=\"uploadAble\" class=\"touchchat-edit-attach\" :class=\"{ 'is-dis': isChating }\">\n\t\t\t\t\t\t<div class=\"touchchat-edit-attach-icon\"></div>\n\t\t\t\t\t\t<div class=\"touchchat-edit-attach-tip\">\n\t\t\t\t\t\t\t<p>文件数量:最多10个</p>\n\t\t\t\t\t\t\t<p>文件类型:{{ allowedTypes.join('、') || 'pdf,txt,csv,docx,xlsx,xls,pptx,ppt,md,mobi,epub,png,jpeg,jpg' }}</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</button>\n\t\t\t\t</upload-view>\n\n\t\t\t\t<button v-if=\"clearAble\" class=\"touchchat-edit-attach\" @click=\"handleClearClick\">\n\t\t\t\t\t<div class=\"touchchat-edit-delete-icon\"></div>\n\t\t\t\t\t<div class=\"touchchat-edit-attach-tip touchchat-edit-voice-tip\">\n\t\t\t\t\t\t<p>清空文本</p>\n\t\t\t\t\t</div>\n\t\t\t\t</button>\n\t\t\t\t<!-- {{ finallyModules.length }} -->\n\t\t\t\t<ModuleSelect v-if=\"finallyModules.length > 1\" v-model=\"selectVal\" :modules=\"finallyModules\" />\n\n\t\t\t\t<!-- 深度思考开关 - 修改为按钮样式 -->\n\t\t\t\t<button v-if=\"thinkAble\" class=\"touchchat-edit-think\" :class=\"{ 'is-on': enableDeepThinking, 'is-dis': isChating }\" @click=\"handleDeepThinkingClick\">\n\t\t\t\t\t<div class=\"touchchat-edit-think-icon\"></div>\n\t\t\t\t\t<div class=\"touchchat-edit-think-text\">深度思考</div>\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t\t<div class=\"touchchat-edit-submit-right\">\n\t\t\t\t<!-- 截图 -->\n\t\t\t\t<screenshot v-if=\"screenAble\" @up-file-list=\"upFileList\"></screenshot>\n\t\t\t\t<!-- 实时语音 -->\n\t\t\t\t<realtime-voice v-if=\"realtimeVoiceAble\" @start-realtime-voice=\"startRealtimeVoice\" @transcription=\"transcription\"></realtime-voice>\n\t\t\t\t<!-- 语音 -->\n\t\t\t\t<voice v-if=\"voiceAble\" ref=\"voiceRef\" @up-file-list=\"upFileList\"></voice>\n\t\t\t\t<!-- 发送按钮 -->\n\t\t\t\t<button v-if=\"!isChating\" class=\"touchchat-edit-send\" :disabled=\"!inputValue.trim() && !fileList.length\" @click=\"handleSend\">\n\t\t\t\t\t<div class=\"touchchat-edit-send-icon\"></div>\n\t\t\t\t</button>\n\n\t\t\t\t<!-- 停止按钮 -->\n\t\t\t\t<button v-else class=\"touchchat-edit-stop\" @click=\"handleStop\">\n\t\t\t\t\t<div class=\"touchchat-edit-stop-icon\"></div>\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t</div>\n\t\t<MarkLayer :show-mark-laryer=\"showMarkLaryer\" @colse-mark-layer=\"showMarkLaryer = false\" />\n\t</div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { ref, inject, provide, nextTick, computed, watch, onMounted } from 'vue'\nimport MarkLayer from '../../component/MarkLayer.vue'\nimport FileContent from '../../component/FileContent.vue'\nimport UploadView from '../../component/UploadView.vue'\nimport Screenshot from '../../component/Screenshot.vue'\nimport Voice from '../../component/VoiceView.vue'\nimport RealtimeVoice from '../../component/RealtimeVoice.vue'\nimport ModuleSelect from '../../component/ModuleSelect.vue'\nimport { showToast } from '../../utils/tools'\n\ninterface FileItem {\n\tfile: File\n\tisUploading: boolean\n\tuploadProgress: number\n\tuploadSuccess: boolean\n\tuploadError: boolean\n\tfileSize: string\n\tfileType: string\n\tname: string\n\tid: string\n\tbase64: string | null\n}\n\n// 定义 body 返回值的类型\ninterface BodyConfig {\n\tmodel: string\n\tmessages: Array<{\n\t\trole: string\n\t\tcontent: string\n\t}>\n\tstream: boolean\n}\n\n// 定义 respoKey 返回值的类型\ninterface RespoKeyConfig {\n\tcategory: string\n\tcontentCategory: string\n\tcontent: string\n\tall: string\n\tallCategory: string\n}\n\ninterface ModuleItem {\n\tname: string\n\tconfig: {\n\t\taction: string\n\t\theaders: () => object\n\t\tbody: () => BodyConfig // 修改为具体类型\n\t\trespoKey: () => RespoKeyConfig // 修改为具体类型\n\t}\n}\n\nconst props = defineProps<{\n\tinputValue: string\n\tisChating: boolean\n\tenableDeepThinking?: boolean\n}>()\n\nconst placeholder = inject('placeholder', '请输入...')\nconst layout = inject<string>('layout', 'side, think, upload, chain, screen,realtime')\nconst modules = inject<(string | ModuleItem)[]>('modules', [])\nconst iModules = ref(modules)\nwatch(\n\t() => modules,\n\tnewVal => {\n\t\tiModules.value = newVal\n\t\tconsole.log('modules === ChatInput.vue === 128', newVal)\n\t}\n\t// { immediate: true }\n)\n\nconst allowedTypes = inject<string[]>('allowedTypes', [])\nprovide('uploadFile', (index: number, type?: string) => {\n\tif (uploadViewRef.value) {\n\t\tuploadViewRef.value.uploadFile(index, type)\n\t}\n})\nconst thinkAble = layout.includes('think')\nconst clearAble = layout.includes('clear')\nconst uploadAble = layout.includes('upload')\nconst screenAble = layout.includes('screen')\nconst voiceAble = layout.includes('voice')\nconst realtimeVoiceAble = layout.includes('realtime')\nconst showMarkLaryer = ref<boolean>(false)\nconst fileList = ref<FileItem[]>([])\n// const fileData = ref<FileItem[]>([])\nconst optionalModules = ref<ModuleItem[]>([\n\t{\n\t\tname: 'deepseek-v3',\n\t\tconfig: {\n\t\t\taction: 'https://api.apiyi.com/v1/chat/completions',\n\t\t\theaders: () => ({\n\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\tAuthorization: 'Bearer sk-fe9MtODvds8wpzz05f3417Fe3e9641C1926e6fC588425dEd'\n\t\t\t}),\n\t\t\tbody: () => ({\n\t\t\t\tmodel: 'deepseek-v3',\n\t\t\t\tmessages: [\n\t\t\t\t\t{\n\t\t\t\t\t\trole: 'user',\n\t\t\t\t\t\t// content: props.inputValue // 使用传入的用户内容参数\n\t\t\t\t\t\tcontent: ''\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\tstream: true\n\t\t\t}),\n\t\t\trespoKey: () => ({\n\t\t\t\tcategory: 'category',\n\t\t\t\tcontentCategory: 'task_stream_content',\n\t\t\t\tcontent: 'content',\n\t\t\t\tall: 'message',\n\t\t\t\tallCategory: 'answer'\n\t\t\t})\n\t\t}\n\t}\n])\nconst uploadViewRef = ref<InstanceType<typeof UploadView>>()\nconst selectVal = ref('')\nconst selectInfo = ref<ModuleItem>()\nconst voiceRef = ref<InstanceType<typeof Voice>>()\n// const scripts = inject<any[]>('scripts', [])\n\nconst modelChange = inject<(item: ModuleItem, index: number) => void>('modelChange', () => {\n\tconsole.warn('未提供modelChange函数')\n})\n\nconst emits = defineEmits<{\n\t(e: 'send', val: string, list: FileItem[]): void\n\t(e: 'stop'): void\n\t(e: 'update:enableDeepThinking', value: boolean): void\n\t(e: 'update:inputValue', value: string): void // 添加inputValue更新事件\n\t(e: 'moduleInfo', info: ModuleItem): void\n}>()\n\nwatch(\n\t() => selectVal.value,\n\t() => {\n\t\tconsole.log('selectVal.value === ChatInput.vue === 198', selectVal.value)\n\t\tif (finallyModules.value.length > 0) {\n\t\t\tselectInfo.value = finallyModules.value.find((item: any) => item.name === selectVal.value)\n\t\t\tif (selectInfo.value) {\n\t\t\t\temits('moduleInfo', selectInfo.value)\n\t\t\t\tmodelChange(selectInfo.value, finallyModules.value.indexOf(selectInfo.value))\n\t\t\t}\n\t\t}\n\t},\n\t{ deep: true }\n)\n\nwatch(\n\t() => props.enableDeepThinking,\n\t() => {\n\t\tupdateSelectInfo()\n\t},\n\t{ deep: true }\n)\n\nwatch(\n\t() => props.inputValue,\n\t() => {\n\t\tupdateSelectInfo()\n\t},\n\t{ deep: true }\n)\n\nconst finallyModules = computed(() => {\n\tconsole.log('modules === ChatInput.vue === 226', modules, iModules.value)\n\tif (!iModules.value.length) {\n\t\treturn optionalModules.value\n\t}\n\treturn iModules.value.flatMap((module: any) => {\n\t\tif (typeof module === 'string') {\n\t\t\t// 若 module 是字符串,在 optionalModules 中查找 name 匹配的项\n\t\t\tconst matchedModule = optionalModules.value.find((optModule: any) => optModule.name === module)\n\t\t\tif (matchedModule) {\n\t\t\t\t// 对匹配到的模块也更新 content 值\n\t\t\t\tconst updatedModule = { ...matchedModule }\n\t\t\t\tconst body = updatedModule.config.body()\n\t\t\t\tif (thinkAble) {\n\t\t\t\t\tbody.model = props.enableDeepThinking ? 'deepseek-reasoner' : 'deepseek-v3'\n\t\t\t\t}\n\t\t\t\tupdatedModule.config.body = () => body\n\t\t\t\treturn [updatedModule]\n\t\t\t}\n\t\t\treturn []\n\t\t} else {\n\t\t\tconst body = module.config.body()\n\t\t\tif (thinkAble) {\n\t\t\t\tbody.model = props.enableDeepThinking ? 'deepseek-reasoner' : 'deepseek-v3'\n\t\t\t}\n\t\t\t// 重新定义 body 方法,返回更新后的 body\n\t\t\tmodule.config.body = () => body\n\t\t\treturn [module]\n\t\t}\n\t})\n})\n\nconst updateSelectInfo = () => {\n\tif (finallyModules.value.length > 0 && selectInfo.value) {\n\t\tconst body = selectInfo.value.config.body()\n\t\tif (thinkAble && body.model) {\n\t\t\tbody.model = props.enableDeepThinking ? 'deepseek-reasoner' : 'deepseek-v3'\n\t\t}\n\t\tselectInfo.value.config.body = () => body\n\t}\n}\n\nconst upFileList = (list: FileItem[]) => {\n\tfileList.value.push(...list)\n\tnextTick(() => {\n\t\tif (uploadViewRef.value) {\n\t\t\t// 只对最新复制的图片进行加载\n\t\t\tuploadViewRef.value.uploadFile(fileList.value.length - 1)\n\t\t}\n\t})\n}\n\nconst handlePaste = (event: any, type?: string) => {\n\t// event.preventDefault();\n\tif (event.clipboardData) {\n\t\tconst clipboardData = event.clipboardData || window.Clipboard\n\t\tconst items = clipboardData.items\n\n\t\tlet isImage = false\n\t\tfor (let i = 0; i < items.length; i++) {\n\t\t\tif (items[i].type.indexOf('image/') !== -1) {\n\t\t\t\tisImage = true\n\t\t\t\t// 获取图片文件\n\t\t\t\tconst blob = items[i].getAsFile()\n\t\t\t\tif (blob) {\n\t\t\t\t\tconst reader = new FileReader()\n\t\t\t\t\treader.onload = e => {\n\t\t\t\t\t\tconst base64 = e.target?.result as string\n\t\t\t\t\t\t// 生成图片属性对象\n\t\t\t\t\t\tconst imageInfo = {\n\t\t\t\t\t\t\tfile: blob,\n\t\t\t\t\t\t\tisUploading: false,\n\t\t\t\t\t\t\tuploadProgress: 0,\n\t\t\t\t\t\t\tuploadSuccess: false,\n\t\t\t\t\t\t\tuploadError: false,\n\t\t\t\t\t\t\tfileSize: `${(blob.size / 1024).toFixed(2)} KB`,\n\t\t\t\t\t\t\tfileType: blob.type,\n\t\t\t\t\t\t\tname: `pasted_image_${Date.now()}`,\n\t\t\t\t\t\t\tid: Date.now().toString(),\n\t\t\t\t\t\t\tbase64\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfileList.value.push(imageInfo)\n\t\t\t\t\t\tnextTick(() => {\n\t\t\t\t\t\t\tif (uploadViewRef.value) {\n\t\t\t\t\t\t\t\t// 只对最新复制的图片进行加载\n\t\t\t\t\t\t\t\tuploadViewRef.value.uploadFile(fileList.value.length - 1)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t\treader.readAsDataURL(blob)\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\tif (isImage) {\n\t\t\tconsole.log('检测到粘贴的是图片')\n\t\t} else {\n\t\t\tconsole.log('粘贴的不是图片')\n\t\t}\n\t} else {\n\t\tif (type === 'copy') {\n\t\t\tfileList.value = event\n\t\t\tnextTick(() => {\n\t\t\t\tif (uploadViewRef.value) {\n\t\t\t\t\t// 只对最新复制的图片进行加载\n\t\t\t\t\tuploadViewRef.value.uploadFile(fileList.value.length - 1)\n\t\t\t\t}\n\t\t\t})\n\t\t\treturn\n\t\t}\n\t\tfileList.value.push(...event)\n\t\tnextTick(() => {\n\t\t\tif (uploadViewRef.value) {\n\t\t\t\t// 只对最新复制的图片进行加载\n\t\t\t\tuploadViewRef.value.uploadFile(fileList.value.length - 1)\n\t\t\t}\n\t\t})\n\t}\n}\n\nconst openMarkLayer = () => {\n\tshowMarkLaryer.value = true\n}\n\nconst colseMarkLayer = () => {\n\tshowMarkLaryer.value = false\n}\n\nconst handleColse = (id: string) => {\n\tconst index = fileList.value.findIndex((item: any) => item.id === id)\n\tif (index !== -1) {\n\t\tfileList.value.splice(index, 1)\n\t}\n}\n\nconst startRealtimeVoice = () => {\n\tif (voiceRef.value) {\n\t\tvoiceRef.value.toggleRecording(true)\n\t}\n}\n\nconst transcription = (text: string) => {\n\temits('update:inputValue', text)\n}\n\nconst handleClearClick = () => {\n\temits('update:inputValue', '')\n}\n\n// 处理输入框变化\nconst handleInputChange = (e: Event) => {\n\tconst value = (e.target as HTMLTextAreaElement).value\n\temits('update:inputValue', value)\n}\n\n// 处理深度思考按钮点击\nconst handleDeepThinkingClick = () => {\n\t// enableDeepThinking.value ? 'deepseek-reasoner' : 'deepseek-v3'\n\temits('update:enableDeepThinking', !props.enableDeepThinking)\n}\n\nconst uploadFile = (file: FileItem[]) => {\n\tif (file.length > 0) {\n\t\tfileList.value = file\n\t}\n}\n\nconst handleSend = (e?: Event) => {\n\t// 检测是否为 Shift+Enter,如果是则不发送,执行默认换行行为\n\tif (e instanceof KeyboardEvent && e.shiftKey) {\n\t\treturn\n\t}\n\t// 普通 Enter 时阻止默认行为,执行发送逻辑\n\tif (e instanceof KeyboardEvent) {\n\t\te.preventDefault()\n\t}\n\t// if (!scripts.length && fileList.value.length > 0) {\n\t// \tshowToast('暂不支持文件发送')\n\t// \treturn\n\t// }\n\tif (!props.inputValue.trim() && !fileList.value.length) {\n\t\tshowToast('请输入内容')\n\t\treturn\n\t}\n\tlet uploadError = false\n\tif (fileList.value.length > 0) {\n\t\tfileList.value.forEach((item: any) => {\n\t\t\tif (item.uploadError) {\n\t\t\t\tuploadError = true\n\t\t\t}\n\t\t})\n\t}\n\tif (uploadError) {\n\t\tshowToast('上传失败,请重试')\n\t\treturn\n\t}\n\tif (fileList.value.length > 10) {\n\t\tshowToast('文件数量不能超过10个')\n\t\treturn\n\t}\n\temits('send', props.inputValue, fileList.value)\n\tnextTick(() => {\n\t\tfileList.value = []\n\t\tif (uploadViewRef.value) {\n\t\t\tuploadViewRef.value.resetFile()\n\t\t}\n\t\tif (voiceRef.value) {\n\t\t\tvoiceRef.value.resetFile()\n\t\t}\n\t})\n}\n\nconst itemUploadFile = (index: number, type: string) => {\n\tif (uploadViewRef.value) {\n\t\tuploadViewRef.value.uploadFile(index, type)\n\t}\n}\nconst handleStop = () => emits('stop')\nonMounted(() => {\n\tif (finallyModules.value.length > 0) {\n\t\tselectVal.value = finallyModules.value[0].name\n\t\tselectInfo.value = finallyModules.value[0]\n\t\tif (selectInfo.value) {\n\t\t\temits('moduleInfo', selectInfo.value)\n\t\t}\n\t}\n})\ndefineExpose({\n\thandlePaste,\n\topenMarkLayer,\n\tcolseMarkLayer,\n\titemUploadFile\n})\n</script>\n"],"names":["inject","ref","watch","provide","computed","nextTick","showToast","onMounted","_createElementBlock","_createCommentVNode","_createBlock","FileContent","_createElementVNode","_unref","UploadView","_normalizeClass","_toDisplayString","ModuleSelect","Screenshot","RealtimeVoice","Voice","_Fragment","_createVNode","MarkLayer"],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var TouchAgent_vue_vue_type_script_setup_true_lang = require('./TouchAgent.vue2.js');
|
|
6
|
+
var _pluginVue_exportHelper = require('../../../../../_virtual/_plugin-vue_export-helper.js');
|
|
7
|
+
|
|
8
|
+
var TouchAgent = /* @__PURE__ */ _pluginVue_exportHelper.default(TouchAgent_vue_vue_type_script_setup_true_lang.default, [["__file", "TouchAgent.vue"]]);
|
|
9
|
+
|
|
10
|
+
exports.default = TouchAgent;
|
|
11
|
+
//# sourceMappingURL=TouchAgent.vue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TouchAgent.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;"}
|