@toolplex/ai-engine 0.1.0
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/LICENSE +98 -0
- package/README.md +292 -0
- package/dist/adapters/index.d.ts +9 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +9 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/types.d.ts +137 -0
- package/dist/adapters/types.d.ts.map +1 -0
- package/dist/adapters/types.js +14 -0
- package/dist/adapters/types.js.map +1 -0
- package/dist/core/ChatEngine.d.ts +47 -0
- package/dist/core/ChatEngine.d.ts.map +1 -0
- package/dist/core/ChatEngine.js +355 -0
- package/dist/core/ChatEngine.js.map +1 -0
- package/dist/core/ToolBuilder.d.ts +25 -0
- package/dist/core/ToolBuilder.d.ts.map +1 -0
- package/dist/core/ToolBuilder.js +215 -0
- package/dist/core/ToolBuilder.js.map +1 -0
- package/dist/core/index.d.ts +6 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +6 -0
- package/dist/core/index.js.map +1 -0
- package/dist/index.d.ts +41 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +49 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/DefaultStdioTransportFactory.d.ts +27 -0
- package/dist/mcp/DefaultStdioTransportFactory.d.ts.map +1 -0
- package/dist/mcp/DefaultStdioTransportFactory.js +60 -0
- package/dist/mcp/DefaultStdioTransportFactory.js.map +1 -0
- package/dist/mcp/MCPClient.d.ts +60 -0
- package/dist/mcp/MCPClient.d.ts.map +1 -0
- package/dist/mcp/MCPClient.js +164 -0
- package/dist/mcp/MCPClient.js.map +1 -0
- package/dist/mcp/index.d.ts +10 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +11 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/paths.d.ts +16 -0
- package/dist/mcp/paths.d.ts.map +1 -0
- package/dist/mcp/paths.js +58 -0
- package/dist/mcp/paths.js.map +1 -0
- package/dist/mcp/types.d.ts +85 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/types.js +7 -0
- package/dist/mcp/types.js.map +1 -0
- package/dist/providers/index.d.ts +40 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +148 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/toolplex.d.ts +43 -0
- package/dist/providers/toolplex.d.ts.map +1 -0
- package/dist/providers/toolplex.js +168 -0
- package/dist/providers/toolplex.js.map +1 -0
- package/dist/types/index.d.ts +218 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +8 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/index.d.ts +8 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +8 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/models.d.ts +30 -0
- package/dist/utils/models.d.ts.map +1 -0
- package/dist/utils/models.js +52 -0
- package/dist/utils/models.js.map +1 -0
- package/dist/utils/schema.d.ts +74 -0
- package/dist/utils/schema.d.ts.map +1 -0
- package/dist/utils/schema.js +253 -0
- package/dist/utils/schema.js.map +1 -0
- package/package.json +70 -0
- package/src/adapters/index.ts +9 -0
- package/src/adapters/types.ts +241 -0
- package/src/core/ChatEngine.ts +464 -0
- package/src/core/ToolBuilder.ts +323 -0
- package/src/core/index.ts +6 -0
- package/src/index.ts +86 -0
- package/src/mcp/DefaultStdioTransportFactory.ts +71 -0
- package/src/mcp/MCPClient.ts +209 -0
- package/src/mcp/index.ts +24 -0
- package/src/mcp/paths.ts +91 -0
- package/src/mcp/types.ts +93 -0
- package/src/providers/index.ts +177 -0
- package/src/providers/toolplex.ts +217 -0
- package/src/types/index.ts +290 -0
- package/src/utils/index.ts +8 -0
- package/src/utils/models.ts +59 -0
- package/src/utils/schema.ts +307 -0
|
@@ -0,0 +1,355 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @toolplex/ai-engine - Chat Engine
|
|
3
|
+
*
|
|
4
|
+
* Core streaming engine that orchestrates AI chat sessions.
|
|
5
|
+
* Uses adapters for all platform-specific I/O operations.
|
|
6
|
+
*/
|
|
7
|
+
import { streamText, stepCountIs } from "ai";
|
|
8
|
+
import { randomUUID } from "crypto";
|
|
9
|
+
import { getModel, toolplexUsageMap } from "../providers/index.js";
|
|
10
|
+
import { buildMCPTools } from "./ToolBuilder.js";
|
|
11
|
+
export class ChatEngine {
|
|
12
|
+
adapter;
|
|
13
|
+
config;
|
|
14
|
+
initialized = false;
|
|
15
|
+
constructor(options) {
|
|
16
|
+
this.adapter = options.adapter;
|
|
17
|
+
this.config = {
|
|
18
|
+
maxSteps: 50,
|
|
19
|
+
debug: false,
|
|
20
|
+
hiddenTools: ["initialize_toolplex"],
|
|
21
|
+
...options.config,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Initialize the engine
|
|
26
|
+
*/
|
|
27
|
+
async initialize() {
|
|
28
|
+
if (this.initialized)
|
|
29
|
+
return;
|
|
30
|
+
await this.adapter.initialize();
|
|
31
|
+
this.initialized = true;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Shutdown the engine
|
|
35
|
+
*/
|
|
36
|
+
async shutdown() {
|
|
37
|
+
if (!this.initialized)
|
|
38
|
+
return;
|
|
39
|
+
await this.adapter.shutdown();
|
|
40
|
+
this.initialized = false;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Initialize MCP for a session
|
|
44
|
+
*/
|
|
45
|
+
async initializeMCP(sessionId) {
|
|
46
|
+
const apiKey = await this.adapter.credentials.getToolPlexApiKey();
|
|
47
|
+
const sessionInfo = this.adapter.mcp.getSessionInfo(sessionId);
|
|
48
|
+
if (!sessionInfo.exists) {
|
|
49
|
+
this.adapter.logger.debug("ChatEngine: Initializing MCP transport", {
|
|
50
|
+
sessionId,
|
|
51
|
+
});
|
|
52
|
+
const result = await this.adapter.mcp.createTransport(sessionId, apiKey);
|
|
53
|
+
if (!result.success) {
|
|
54
|
+
throw new Error(`Failed to create MCP transport: ${result.error}`);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Initialize a session with ToolPlex context
|
|
60
|
+
*/
|
|
61
|
+
async initializeSession(sessionId, modelId, provider) {
|
|
62
|
+
try {
|
|
63
|
+
this.adapter.logger.debug("ChatEngine: Initializing session with ToolPlex", {
|
|
64
|
+
sessionId,
|
|
65
|
+
modelId,
|
|
66
|
+
provider,
|
|
67
|
+
});
|
|
68
|
+
// Initialize MCP transport
|
|
69
|
+
await this.initializeMCP(sessionId);
|
|
70
|
+
// Extract model metadata
|
|
71
|
+
const modelParts = modelId.split("/");
|
|
72
|
+
const modelName = modelParts[modelParts.length - 1] || modelId;
|
|
73
|
+
const toolArgs = {
|
|
74
|
+
llm_context: {
|
|
75
|
+
model_family: provider,
|
|
76
|
+
model_name: modelName,
|
|
77
|
+
model_version: modelId,
|
|
78
|
+
chat_client: "toolplex",
|
|
79
|
+
},
|
|
80
|
+
};
|
|
81
|
+
// Call initialize_toolplex to get the context
|
|
82
|
+
const result = await this.adapter.mcp.callTool(sessionId, "initialize_toolplex", toolArgs);
|
|
83
|
+
// Extract text content from the result
|
|
84
|
+
let contextText = "";
|
|
85
|
+
if (result && typeof result === "object" && result.content) {
|
|
86
|
+
for (const item of result.content) {
|
|
87
|
+
if (item.type === "text" && item.text) {
|
|
88
|
+
contextText += item.text + "\n\n";
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
else if (typeof result === "string") {
|
|
93
|
+
contextText = result;
|
|
94
|
+
}
|
|
95
|
+
return {
|
|
96
|
+
success: true,
|
|
97
|
+
context: contextText.trim(),
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
catch (error) {
|
|
101
|
+
this.adapter.logger.error("ChatEngine: Failed to initialize session", {
|
|
102
|
+
sessionId,
|
|
103
|
+
error,
|
|
104
|
+
});
|
|
105
|
+
return {
|
|
106
|
+
success: false,
|
|
107
|
+
error: error instanceof Error ? error.message : "Unknown error",
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Stream a chat completion
|
|
113
|
+
*/
|
|
114
|
+
async stream(options) {
|
|
115
|
+
const credentials = await this.adapter.credentials.getCredentials();
|
|
116
|
+
const streamId = options.streamId || randomUUID();
|
|
117
|
+
const { sessionId, modelId, provider, messages, tools: providedTools, temperature, topP, fileAttachments, modelConfig, } = options;
|
|
118
|
+
this.adapter.logger.debug("ChatEngine: Starting stream", {
|
|
119
|
+
sessionId,
|
|
120
|
+
modelId,
|
|
121
|
+
provider,
|
|
122
|
+
messageCount: messages.length,
|
|
123
|
+
hasTools: !!providedTools,
|
|
124
|
+
hasAttachments: !!fileAttachments?.length,
|
|
125
|
+
streamId,
|
|
126
|
+
});
|
|
127
|
+
// Create abort controller
|
|
128
|
+
const abortController = new AbortController();
|
|
129
|
+
// Get the model
|
|
130
|
+
const model = getModel(modelId, credentials, {
|
|
131
|
+
logger: this.adapter.logger,
|
|
132
|
+
clientVersion: this.adapter.getClientVersion(),
|
|
133
|
+
});
|
|
134
|
+
// Build MCP tools
|
|
135
|
+
let mcpTools = {};
|
|
136
|
+
const apiKey = await this.adapter.credentials.getToolPlexApiKey();
|
|
137
|
+
if (apiKey) {
|
|
138
|
+
try {
|
|
139
|
+
await this.initializeMCP(sessionId);
|
|
140
|
+
mcpTools = await buildMCPTools({
|
|
141
|
+
sessionId,
|
|
142
|
+
streamId,
|
|
143
|
+
modelId,
|
|
144
|
+
abortSignal: abortController.signal,
|
|
145
|
+
adapter: this.adapter,
|
|
146
|
+
hiddenTools: this.config.hiddenTools,
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
catch (error) {
|
|
150
|
+
this.adapter.logger.error("ChatEngine: Failed to initialize MCP tools", {
|
|
151
|
+
sessionId,
|
|
152
|
+
error,
|
|
153
|
+
});
|
|
154
|
+
// Continue without tools
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
// Merge tools
|
|
158
|
+
const allTools = { ...providedTools, ...mcpTools };
|
|
159
|
+
// Process messages
|
|
160
|
+
const processedMessages = this.processMessages(messages, fileAttachments, modelConfig);
|
|
161
|
+
// Track usage data
|
|
162
|
+
let capturedUsage = null;
|
|
163
|
+
// Promise for onFinish coordination
|
|
164
|
+
let resolveOnFinish = null;
|
|
165
|
+
const onFinishPromise = new Promise((resolve) => {
|
|
166
|
+
resolveOnFinish = resolve;
|
|
167
|
+
});
|
|
168
|
+
// Prepare stream options
|
|
169
|
+
const streamTextOptions = {
|
|
170
|
+
model,
|
|
171
|
+
messages: processedMessages,
|
|
172
|
+
tools: allTools,
|
|
173
|
+
stopWhen: stepCountIs(this.config.maxSteps),
|
|
174
|
+
temperature,
|
|
175
|
+
topP,
|
|
176
|
+
abortSignal: abortController.signal,
|
|
177
|
+
};
|
|
178
|
+
// Enforce maxTokens if specified by model config
|
|
179
|
+
if (modelConfig?.enforceMaxTokens && modelConfig?.maxOutputTokens) {
|
|
180
|
+
streamTextOptions.maxTokens = modelConfig.maxOutputTokens;
|
|
181
|
+
}
|
|
182
|
+
// Start streaming
|
|
183
|
+
const result = streamText({
|
|
184
|
+
...streamTextOptions,
|
|
185
|
+
headers: {
|
|
186
|
+
"x-session-id": sessionId,
|
|
187
|
+
...(provider === "openrouter" && {
|
|
188
|
+
"HTTP-Referer": "https://toolplex.ai",
|
|
189
|
+
"X-Title": "ToolPlex AI",
|
|
190
|
+
}),
|
|
191
|
+
},
|
|
192
|
+
onChunk: async (event) => {
|
|
193
|
+
// Capture usage data
|
|
194
|
+
if (provider === "toolplex" && event.chunk) {
|
|
195
|
+
const chunk = event.chunk;
|
|
196
|
+
if (chunk.providerMetadata?.usage || chunk.usage) {
|
|
197
|
+
const usage = chunk.providerMetadata?.usage || chunk.usage;
|
|
198
|
+
const promptTokens = usage.prompt_tokens || usage.input_tokens || 0;
|
|
199
|
+
const completionTokens = usage.completion_tokens || usage.output_tokens || 0;
|
|
200
|
+
const totalTokens = usage.total_tokens || promptTokens + completionTokens;
|
|
201
|
+
capturedUsage = {
|
|
202
|
+
prompt_tokens: promptTokens,
|
|
203
|
+
completion_tokens: completionTokens,
|
|
204
|
+
total_tokens: totalTokens,
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
},
|
|
209
|
+
onStepFinish: async (event) => {
|
|
210
|
+
// Emit step finish event if there are tool calls
|
|
211
|
+
const hasToolCalls = event.toolCalls && event.toolCalls.length > 0;
|
|
212
|
+
if (hasToolCalls) {
|
|
213
|
+
this.adapter.logger.debug("ChatEngine: Step finished with tool calls", {
|
|
214
|
+
sessionId,
|
|
215
|
+
textLength: event.text?.length || 0,
|
|
216
|
+
toolCallCount: event.toolCalls.length,
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
},
|
|
220
|
+
onFinish: async (completion) => {
|
|
221
|
+
this.adapter.logger.debug("ChatEngine: Stream finished", {
|
|
222
|
+
sessionId,
|
|
223
|
+
textLength: completion.text?.length,
|
|
224
|
+
finishReason: completion.finishReason,
|
|
225
|
+
usage: completion.usage,
|
|
226
|
+
});
|
|
227
|
+
// Get usage data
|
|
228
|
+
let usageSource = completion.usage;
|
|
229
|
+
if (provider === "toolplex") {
|
|
230
|
+
const mapUsage = toolplexUsageMap.get(sessionId);
|
|
231
|
+
if (mapUsage) {
|
|
232
|
+
usageSource = mapUsage;
|
|
233
|
+
toolplexUsageMap.delete(sessionId);
|
|
234
|
+
}
|
|
235
|
+
else if (capturedUsage) {
|
|
236
|
+
usageSource = capturedUsage;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
// Emit complete event
|
|
240
|
+
this.adapter.events.emitComplete(streamId, completion.text || "", usageSource
|
|
241
|
+
? {
|
|
242
|
+
promptTokens: usageSource.prompt_tokens ||
|
|
243
|
+
usageSource.inputTokens ||
|
|
244
|
+
usageSource.promptTokens ||
|
|
245
|
+
0,
|
|
246
|
+
completionTokens: usageSource.completion_tokens ||
|
|
247
|
+
usageSource.outputTokens ||
|
|
248
|
+
usageSource.completionTokens ||
|
|
249
|
+
0,
|
|
250
|
+
totalTokens: usageSource.total_tokens || usageSource.totalTokens || 0,
|
|
251
|
+
}
|
|
252
|
+
: undefined);
|
|
253
|
+
if (resolveOnFinish) {
|
|
254
|
+
resolveOnFinish();
|
|
255
|
+
}
|
|
256
|
+
},
|
|
257
|
+
onError: (error) => {
|
|
258
|
+
this.adapter.logger.error("ChatEngine: Stream error", {
|
|
259
|
+
error,
|
|
260
|
+
sessionId,
|
|
261
|
+
modelId,
|
|
262
|
+
});
|
|
263
|
+
this.adapter.events.emitError(streamId, error instanceof Error ? error.message : String(error));
|
|
264
|
+
if (resolveOnFinish) {
|
|
265
|
+
resolveOnFinish();
|
|
266
|
+
}
|
|
267
|
+
},
|
|
268
|
+
});
|
|
269
|
+
return {
|
|
270
|
+
streamId,
|
|
271
|
+
textStream: result.textStream,
|
|
272
|
+
fullStream: result.fullStream,
|
|
273
|
+
onFinishPromise,
|
|
274
|
+
abort: async () => {
|
|
275
|
+
this.adapter.logger.debug("ChatEngine: Aborting stream", {
|
|
276
|
+
streamId,
|
|
277
|
+
sessionId,
|
|
278
|
+
});
|
|
279
|
+
abortController.abort();
|
|
280
|
+
},
|
|
281
|
+
};
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Process messages for streaming (handle attachments, filter empty blocks)
|
|
285
|
+
*/
|
|
286
|
+
processMessages(messages, fileAttachments, modelConfig) {
|
|
287
|
+
let processedMessages = [...messages];
|
|
288
|
+
// Filter empty text blocks (unless model requires preserving them)
|
|
289
|
+
if (!modelConfig?.preserveEmptyContentBlocks) {
|
|
290
|
+
processedMessages = processedMessages.map((msg) => {
|
|
291
|
+
if ((msg.role === "user" || msg.role === "assistant") &&
|
|
292
|
+
Array.isArray(msg.content)) {
|
|
293
|
+
const filteredContent = msg.content.filter((part) => {
|
|
294
|
+
if (part.type !== "text")
|
|
295
|
+
return true;
|
|
296
|
+
return part.text && part.text.trim().length > 0;
|
|
297
|
+
});
|
|
298
|
+
return {
|
|
299
|
+
...msg,
|
|
300
|
+
content: filteredContent.length > 0 ? filteredContent : "",
|
|
301
|
+
};
|
|
302
|
+
}
|
|
303
|
+
return msg;
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
// Handle file attachments
|
|
307
|
+
if (fileAttachments && fileAttachments.length > 0) {
|
|
308
|
+
const lastMessage = processedMessages[processedMessages.length - 1];
|
|
309
|
+
if (lastMessage && lastMessage.role === "user") {
|
|
310
|
+
const textContent = typeof lastMessage.content === "string" ? lastMessage.content : "";
|
|
311
|
+
const parts = textContent.trim()
|
|
312
|
+
? [{ type: "text", text: textContent }]
|
|
313
|
+
: [];
|
|
314
|
+
for (const attachment of fileAttachments) {
|
|
315
|
+
const mimeType = attachment.mimeType || attachment.type;
|
|
316
|
+
if (!mimeType) {
|
|
317
|
+
parts.push({
|
|
318
|
+
type: "text",
|
|
319
|
+
text: `[Attached file: ${attachment.name} - type unknown]`,
|
|
320
|
+
});
|
|
321
|
+
continue;
|
|
322
|
+
}
|
|
323
|
+
if (mimeType.startsWith("image/")) {
|
|
324
|
+
parts.push({
|
|
325
|
+
type: "image",
|
|
326
|
+
image: attachment.data,
|
|
327
|
+
mimeType: mimeType,
|
|
328
|
+
});
|
|
329
|
+
}
|
|
330
|
+
else if (mimeType === "application/pdf" ||
|
|
331
|
+
mimeType.startsWith("text/") ||
|
|
332
|
+
mimeType.startsWith("application/")) {
|
|
333
|
+
parts.push({
|
|
334
|
+
type: "file",
|
|
335
|
+
data: Buffer.from(attachment.data, "base64"),
|
|
336
|
+
mediaType: mimeType,
|
|
337
|
+
});
|
|
338
|
+
}
|
|
339
|
+
else {
|
|
340
|
+
parts.push({
|
|
341
|
+
type: "text",
|
|
342
|
+
text: `[Attached file: ${attachment.name}]`,
|
|
343
|
+
});
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
processedMessages[processedMessages.length - 1] = {
|
|
347
|
+
...lastMessage,
|
|
348
|
+
content: parts,
|
|
349
|
+
};
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
return processedMessages;
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
//# sourceMappingURL=ChatEngine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChatEngine.js","sourceRoot":"","sources":["../../src/core/ChatEngine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @toolplex/ai-engine - Tool Builder
|
|
3
|
+
*
|
|
4
|
+
* Builds AI SDK tools from MCP tools, handling:
|
|
5
|
+
* - Schema cleaning and sanitization
|
|
6
|
+
* - Tool confirmation flows
|
|
7
|
+
* - Tool execution with cancellation support
|
|
8
|
+
*/
|
|
9
|
+
import type { EngineAdapter } from "../adapters/types.js";
|
|
10
|
+
export interface BuildToolsOptions {
|
|
11
|
+
sessionId: string;
|
|
12
|
+
streamId: string;
|
|
13
|
+
modelId: string;
|
|
14
|
+
abortSignal: AbortSignal;
|
|
15
|
+
adapter: EngineAdapter;
|
|
16
|
+
/** Tools to hide from AI agents (e.g., 'initialize_toolplex') */
|
|
17
|
+
hiddenTools?: string[];
|
|
18
|
+
/** Callback for when tool args are edited during confirmation */
|
|
19
|
+
onArgsEdited?: (toolName: string, editedArgs: any, configEdited: boolean) => void;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Build AI SDK tools from MCP tools
|
|
23
|
+
*/
|
|
24
|
+
export declare function buildMCPTools(options: BuildToolsOptions): Promise<Record<string, any>>;
|
|
25
|
+
//# sourceMappingURL=ToolBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ToolBuilder.d.ts","sourceRoot":"","sources":["../../src/core/ToolBuilder.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAS1D,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,WAAW,CAAC;IACzB,OAAO,EAAE,aAAa,CAAC;IACvB,iEAAiE;IACjE,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,iEAAiE;IACjE,YAAY,CAAC,EAAE,CACb,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,GAAG,EACf,YAAY,EAAE,OAAO,KAClB,IAAI,CAAC;CACX;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAkO9B"}
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @toolplex/ai-engine - Tool Builder
|
|
3
|
+
*
|
|
4
|
+
* Builds AI SDK tools from MCP tools, handling:
|
|
5
|
+
* - Schema cleaning and sanitization
|
|
6
|
+
* - Tool confirmation flows
|
|
7
|
+
* - Tool execution with cancellation support
|
|
8
|
+
*/
|
|
9
|
+
import { tool, jsonSchema } from "ai";
|
|
10
|
+
import { deepSanitizeParams, cleanToolSchema } from "../utils/schema.js";
|
|
11
|
+
import { isChatGPTModel, isGoogleGeminiModel } from "../utils/models.js";
|
|
12
|
+
/**
|
|
13
|
+
* Build AI SDK tools from MCP tools
|
|
14
|
+
*/
|
|
15
|
+
export async function buildMCPTools(options) {
|
|
16
|
+
const { sessionId, streamId, modelId, abortSignal, adapter, hiddenTools = ["initialize_toolplex"], onArgsEdited, } = options;
|
|
17
|
+
const logger = adapter.logger;
|
|
18
|
+
const isGemini = isGoogleGeminiModel(modelId);
|
|
19
|
+
// Get tools from MCP
|
|
20
|
+
const mcpToolsResult = await adapter.mcp.listTools(sessionId);
|
|
21
|
+
const mcpTools = mcpToolsResult?.tools || [];
|
|
22
|
+
const aiSdkTools = {};
|
|
23
|
+
// Track active tool executions for cancellation
|
|
24
|
+
const activeToolExecutions = new Map();
|
|
25
|
+
// Clean up when stream is aborted
|
|
26
|
+
abortSignal.addEventListener("abort", () => {
|
|
27
|
+
logger.debug("Tool builder: Stream aborted, cancelling active tool executions", {
|
|
28
|
+
sessionId,
|
|
29
|
+
streamId,
|
|
30
|
+
activeToolCount: activeToolExecutions.size,
|
|
31
|
+
});
|
|
32
|
+
for (const [toolExecutionId, controller,] of activeToolExecutions.entries()) {
|
|
33
|
+
logger.debug("Tool builder: Aborting tool execution", {
|
|
34
|
+
toolExecutionId,
|
|
35
|
+
});
|
|
36
|
+
controller.abort();
|
|
37
|
+
}
|
|
38
|
+
activeToolExecutions.clear();
|
|
39
|
+
});
|
|
40
|
+
for (const mcpTool of mcpTools) {
|
|
41
|
+
// Skip hidden tools
|
|
42
|
+
if (hiddenTools.includes(mcpTool.name)) {
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
const toolSchema = mcpTool.inputSchema || {
|
|
46
|
+
type: "object",
|
|
47
|
+
properties: {},
|
|
48
|
+
};
|
|
49
|
+
const finalSchema = cleanToolSchema(toolSchema, isGemini, logger);
|
|
50
|
+
aiSdkTools[mcpTool.name] = tool({
|
|
51
|
+
description: mcpTool.description || `Tool: ${mcpTool.name}`,
|
|
52
|
+
inputSchema: jsonSchema(finalSchema),
|
|
53
|
+
execute: async (params) => {
|
|
54
|
+
const toolExecutionId = `${mcpTool.name}-${Date.now()}`;
|
|
55
|
+
const toolAbortController = new AbortController();
|
|
56
|
+
activeToolExecutions.set(toolExecutionId, toolAbortController);
|
|
57
|
+
// Check if stream was already aborted
|
|
58
|
+
if (abortSignal.aborted) {
|
|
59
|
+
logger.debug("Tool builder: Stream already aborted, skipping tool execution", {
|
|
60
|
+
toolName: mcpTool.name,
|
|
61
|
+
sessionId,
|
|
62
|
+
});
|
|
63
|
+
activeToolExecutions.delete(toolExecutionId);
|
|
64
|
+
throw new Error("Stream cancelled");
|
|
65
|
+
}
|
|
66
|
+
try {
|
|
67
|
+
// Normalize ChatGPT args -> arguments workaround
|
|
68
|
+
if (mcpTool.name === "call_tool" &&
|
|
69
|
+
isChatGPTModel(modelId) &&
|
|
70
|
+
params?.args &&
|
|
71
|
+
!params?.arguments) {
|
|
72
|
+
logger.info("Tool builder: Normalizing call_tool params for ChatGPT", {
|
|
73
|
+
modelId,
|
|
74
|
+
originalKeys: Object.keys(params),
|
|
75
|
+
});
|
|
76
|
+
const { args, ...rest } = params;
|
|
77
|
+
params = { ...rest, arguments: args };
|
|
78
|
+
}
|
|
79
|
+
// Deep sanitize params
|
|
80
|
+
const sanitizedParams = deepSanitizeParams(params, toolSchema, undefined, logger);
|
|
81
|
+
// Log when sanitization modifies parameters
|
|
82
|
+
if (JSON.stringify(params) !== JSON.stringify(sanitizedParams)) {
|
|
83
|
+
logger.debug("Tool builder: deepSanitizeParams modified tool arguments", {
|
|
84
|
+
toolName: mcpTool.name,
|
|
85
|
+
sessionId,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
// Check abort before confirmation
|
|
89
|
+
if (toolAbortController.signal.aborted) {
|
|
90
|
+
throw new Error("Tool execution cancelled");
|
|
91
|
+
}
|
|
92
|
+
// Handle confirmation if adapter supports it
|
|
93
|
+
let finalParams = sanitizedParams;
|
|
94
|
+
if (adapter.confirmations.isInteractive()) {
|
|
95
|
+
const confirmationRequest = await checkToolConfirmation(mcpTool.name, sanitizedParams, { sessionId, streamId });
|
|
96
|
+
if (confirmationRequest) {
|
|
97
|
+
logger.debug("Tool builder: Tool requires user confirmation", {
|
|
98
|
+
sessionId,
|
|
99
|
+
toolName: mcpTool.name,
|
|
100
|
+
confirmationType: confirmationRequest.type,
|
|
101
|
+
});
|
|
102
|
+
try {
|
|
103
|
+
const result = await adapter.confirmations.requestConfirmation(streamId, confirmationRequest);
|
|
104
|
+
if (!result.allowed) {
|
|
105
|
+
return {
|
|
106
|
+
content: [
|
|
107
|
+
{
|
|
108
|
+
type: "text",
|
|
109
|
+
text: `Operation cancelled: ${result.reason || "User denied the operation"}`,
|
|
110
|
+
},
|
|
111
|
+
],
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
// Apply edited config if provided
|
|
115
|
+
if (result.editedConfig) {
|
|
116
|
+
finalParams = { ...sanitizedParams };
|
|
117
|
+
if (confirmationRequest.type === "install") {
|
|
118
|
+
finalParams.config = result.editedConfig;
|
|
119
|
+
}
|
|
120
|
+
if (onArgsEdited) {
|
|
121
|
+
onArgsEdited(mcpTool.name, finalParams, result.wasEdited === true);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
catch (confirmationError) {
|
|
126
|
+
if (confirmationError?.message === "Stream cancelled by user") {
|
|
127
|
+
throw new Error("Tool execution cancelled");
|
|
128
|
+
}
|
|
129
|
+
throw confirmationError;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
// Check abort before MCP call
|
|
134
|
+
if (toolAbortController.signal.aborted) {
|
|
135
|
+
throw new Error("Tool execution cancelled");
|
|
136
|
+
}
|
|
137
|
+
// Execute the MCP tool
|
|
138
|
+
const result = await adapter.mcp.callTool(sessionId, mcpTool.name, finalParams);
|
|
139
|
+
return result;
|
|
140
|
+
}
|
|
141
|
+
catch (error) {
|
|
142
|
+
activeToolExecutions.delete(toolExecutionId);
|
|
143
|
+
if (toolAbortController.signal.aborted ||
|
|
144
|
+
abortSignal.aborted ||
|
|
145
|
+
error?.message === "Tool execution cancelled") {
|
|
146
|
+
throw new Error("Tool execution cancelled");
|
|
147
|
+
}
|
|
148
|
+
logger.error("Tool builder: Tool execution failed", {
|
|
149
|
+
sessionId,
|
|
150
|
+
toolName: mcpTool.name,
|
|
151
|
+
error,
|
|
152
|
+
});
|
|
153
|
+
return {
|
|
154
|
+
isError: true,
|
|
155
|
+
content: [
|
|
156
|
+
{
|
|
157
|
+
type: "text",
|
|
158
|
+
text: `Tool execution failed: ${error instanceof Error ? error.message : String(error)}`,
|
|
159
|
+
},
|
|
160
|
+
],
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
},
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
return aiSdkTools;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Check if a tool requires confirmation
|
|
170
|
+
* This is a simplified version - the full implementation would be in the confirmation registry
|
|
171
|
+
*/
|
|
172
|
+
async function checkToolConfirmation(toolName, params, _context) {
|
|
173
|
+
// Install/uninstall operations always require confirmation
|
|
174
|
+
if (toolName === "install_server" || toolName === "install_mcp_server") {
|
|
175
|
+
return {
|
|
176
|
+
type: "install",
|
|
177
|
+
data: {
|
|
178
|
+
serverId: params.server_id,
|
|
179
|
+
serverName: params.server_name,
|
|
180
|
+
config: params.config,
|
|
181
|
+
},
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
if (toolName === "uninstall_server" || toolName === "uninstall_mcp_server") {
|
|
185
|
+
return {
|
|
186
|
+
type: "uninstall",
|
|
187
|
+
data: {
|
|
188
|
+
serverId: params.server_id,
|
|
189
|
+
serverName: params.server_name,
|
|
190
|
+
},
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
if (toolName === "save_playbook") {
|
|
194
|
+
return {
|
|
195
|
+
type: "save-playbook",
|
|
196
|
+
data: {
|
|
197
|
+
playbookName: params.playbook_name,
|
|
198
|
+
description: params.description,
|
|
199
|
+
actions: params.actions,
|
|
200
|
+
privacy: params.privacy,
|
|
201
|
+
},
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
if (toolName === "submit_feedback") {
|
|
205
|
+
return {
|
|
206
|
+
type: "submit-feedback",
|
|
207
|
+
data: {
|
|
208
|
+
vote: params.vote,
|
|
209
|
+
message: params.message,
|
|
210
|
+
},
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
return null;
|
|
214
|
+
}
|
|
215
|
+
//# sourceMappingURL=ToolBuilder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ToolBuilder.js","sourceRoot":"","sources":["../../src/core/ToolBuilder.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAOtC,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAkBzE;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,OAA0B;IAE1B,MAAM,EACJ,SAAS,EACT,QAAQ,EACR,OAAO,EACP,WAAW,EACX,OAAO,EACP,WAAW,GAAG,CAAC,qBAAqB,CAAC,EACrC,YAAY,GACb,GAAG,OAAO,CAAC;IAEZ,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC9B,MAAM,QAAQ,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAE9C,qBAAqB;IACrB,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IAC9D,MAAM,QAAQ,GAAc,cAAc,EAAE,KAAK,IAAI,EAAE,CAAC;IAExD,MAAM,UAAU,GAAwB,EAAE,CAAC;IAE3C,gDAAgD;IAChD,MAAM,oBAAoB,GAAG,IAAI,GAAG,EAA2B,CAAC;IAEhE,kCAAkC;IAClC,WAAW,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;QACzC,MAAM,CAAC,KAAK,CACV,iEAAiE,EACjE;YACE,SAAS;YACT,QAAQ;YACR,eAAe,EAAE,oBAAoB,CAAC,IAAI;SAC3C,CACF,CAAC;QAEF,KAAK,MAAM,CACT,eAAe,EACf,UAAU,EACX,IAAI,oBAAoB,CAAC,OAAO,EAAE,EAAE,CAAC;YACpC,MAAM,CAAC,KAAK,CAAC,uCAAuC,EAAE;gBACpD,eAAe;aAChB,CAAC,CAAC;YACH,UAAU,CAAC,KAAK,EAAE,CAAC;QACrB,CAAC;QAED,oBAAoB,CAAC,KAAK,EAAE,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,oBAAoB;QACpB,IAAI,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACvC,SAAS;QACX,CAAC;QAED,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW,IAAI;YACxC,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,EAAE;SACf,CAAC;QACF,MAAM,WAAW,GAAG,eAAe,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QAElE,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;YAC9B,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,SAAS,OAAO,CAAC,IAAI,EAAE;YAC3D,WAAW,EAAE,UAAU,CAAM,WAAW,CAAC;YACzC,OAAO,EAAE,KAAK,EAAE,MAAW,EAA0B,EAAE;gBACrD,MAAM,eAAe,GAAG,GAAG,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;gBACxD,MAAM,mBAAmB,GAAG,IAAI,eAAe,EAAE,CAAC;gBAClD,oBAAoB,CAAC,GAAG,CAAC,eAAe,EAAE,mBAAmB,CAAC,CAAC;gBAE/D,sCAAsC;gBACtC,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;oBACxB,MAAM,CAAC,KAAK,CACV,+DAA+D,EAC/D;wBACE,QAAQ,EAAE,OAAO,CAAC,IAAI;wBACtB,SAAS;qBACV,CACF,CAAC;oBACF,oBAAoB,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;oBAC7C,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;gBACtC,CAAC;gBAED,IAAI,CAAC;oBACH,iDAAiD;oBACjD,IACE,OAAO,CAAC,IAAI,KAAK,WAAW;wBAC5B,cAAc,CAAC,OAAO,CAAC;wBACvB,MAAM,EAAE,IAAI;wBACZ,CAAC,MAAM,EAAE,SAAS,EAClB,CAAC;wBACD,MAAM,CAAC,IAAI,CACT,wDAAwD,EACxD;4BACE,OAAO;4BACP,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;yBAClC,CACF,CAAC;wBACF,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC;wBACjC,MAAM,GAAG,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;oBACxC,CAAC;oBAED,uBAAuB;oBACvB,MAAM,eAAe,GAAG,kBAAkB,CACxC,MAAM,EACN,UAAU,EACV,SAAS,EACT,MAAM,CACP,CAAC;oBAEF,4CAA4C;oBAC5C,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE,CAAC;wBAC/D,MAAM,CAAC,KAAK,CACV,0DAA0D,EAC1D;4BACE,QAAQ,EAAE,OAAO,CAAC,IAAI;4BACtB,SAAS;yBACV,CACF,CAAC;oBACJ,CAAC;oBAED,kCAAkC;oBAClC,IAAI,mBAAmB,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;wBACvC,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;oBAC9C,CAAC;oBAED,6CAA6C;oBAC7C,IAAI,WAAW,GAAG,eAAe,CAAC;oBAElC,IAAI,OAAO,CAAC,aAAa,CAAC,aAAa,EAAE,EAAE,CAAC;wBAC1C,MAAM,mBAAmB,GAAG,MAAM,qBAAqB,CACrD,OAAO,CAAC,IAAI,EACZ,eAAe,EACf,EAAE,SAAS,EAAE,QAAQ,EAAE,CACxB,CAAC;wBAEF,IAAI,mBAAmB,EAAE,CAAC;4BACxB,MAAM,CAAC,KAAK,CAAC,+CAA+C,EAAE;gCAC5D,SAAS;gCACT,QAAQ,EAAE,OAAO,CAAC,IAAI;gCACtB,gBAAgB,EAAE,mBAAmB,CAAC,IAAI;6BAC3C,CAAC,CAAC;4BAEH,IAAI,CAAC;gCACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,mBAAmB,CAC5D,QAAQ,EACR,mBAAmB,CACpB,CAAC;gCAEF,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;oCACpB,OAAO;wCACL,OAAO,EAAE;4CACP;gDACE,IAAI,EAAE,MAAM;gDACZ,IAAI,EAAE,wBAAwB,MAAM,CAAC,MAAM,IAAI,2BAA2B,EAAE;6CAC7E;yCACF;qCACF,CAAC;gCACJ,CAAC;gCAED,kCAAkC;gCAClC,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;oCACxB,WAAW,GAAG,EAAE,GAAG,eAAe,EAAE,CAAC;oCACrC,IAAI,mBAAmB,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;wCAC3C,WAAW,CAAC,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC;oCAC3C,CAAC;oCAED,IAAI,YAAY,EAAE,CAAC;wCACjB,YAAY,CACV,OAAO,CAAC,IAAI,EACZ,WAAW,EACX,MAAM,CAAC,SAAS,KAAK,IAAI,CAC1B,CAAC;oCACJ,CAAC;gCACH,CAAC;4BACH,CAAC;4BAAC,OAAO,iBAAsB,EAAE,CAAC;gCAChC,IAAI,iBAAiB,EAAE,OAAO,KAAK,0BAA0B,EAAE,CAAC;oCAC9D,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;gCAC9C,CAAC;gCACD,MAAM,iBAAiB,CAAC;4BAC1B,CAAC;wBACH,CAAC;oBACH,CAAC;oBAED,8BAA8B;oBAC9B,IAAI,mBAAmB,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;wBACvC,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;oBAC9C,CAAC;oBAED,uBAAuB;oBACvB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CACvC,SAAS,EACT,OAAO,CAAC,IAAI,EACZ,WAAW,CACZ,CAAC;oBAEF,OAAO,MAAM,CAAC;gBAChB,CAAC;gBAAC,OAAO,KAAU,EAAE,CAAC;oBACpB,oBAAoB,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;oBAE7C,IACE,mBAAmB,CAAC,MAAM,CAAC,OAAO;wBAClC,WAAW,CAAC,OAAO;wBACnB,KAAK,EAAE,OAAO,KAAK,0BAA0B,EAC7C,CAAC;wBACD,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;oBAC9C,CAAC;oBAED,MAAM,CAAC,KAAK,CAAC,qCAAqC,EAAE;wBAClD,SAAS;wBACT,QAAQ,EAAE,OAAO,CAAC,IAAI;wBACtB,KAAK;qBACN,CAAC,CAAC;oBAEH,OAAO;wBACL,OAAO,EAAE,IAAI;wBACb,OAAO,EAAE;4BACP;gCACE,IAAI,EAAE,MAAM;gCACZ,IAAI,EAAE,0BAA0B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;6BACzF;yBACF;qBACF,CAAC;gBACJ,CAAC;YACH,CAAC;SACK,CAAC,CAAC;IACZ,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,qBAAqB,CAClC,QAAgB,EAChB,MAAW,EACX,QAAiD;IAEjD,2DAA2D;IAC3D,IAAI,QAAQ,KAAK,gBAAgB,IAAI,QAAQ,KAAK,oBAAoB,EAAE,CAAC;QACvE,OAAO;YACL,IAAI,EAAE,SAAS;YACf,IAAI,EAAE;gBACJ,QAAQ,EAAE,MAAM,CAAC,SAAS;gBAC1B,UAAU,EAAE,MAAM,CAAC,WAAW;gBAC9B,MAAM,EAAE,MAAM,CAAC,MAAM;aACtB;SACF,CAAC;IACJ,CAAC;IAED,IAAI,QAAQ,KAAK,kBAAkB,IAAI,QAAQ,KAAK,sBAAsB,EAAE,CAAC;QAC3E,OAAO;YACL,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE;gBACJ,QAAQ,EAAE,MAAM,CAAC,SAAS;gBAC1B,UAAU,EAAE,MAAM,CAAC,WAAW;aAC/B;SACF,CAAC;IACJ,CAAC;IAED,IAAI,QAAQ,KAAK,eAAe,EAAE,CAAC;QACjC,OAAO;YACL,IAAI,EAAE,eAAe;YACrB,IAAI,EAAE;gBACJ,YAAY,EAAE,MAAM,CAAC,aAAa;gBAClC,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,OAAO,EAAE,MAAM,CAAC,OAAO;aACxB;SACF,CAAC;IACJ,CAAC;IAED,IAAI,QAAQ,KAAK,iBAAiB,EAAE,CAAC;QACnC,OAAO;YACL,IAAI,EAAE,iBAAiB;YACvB,IAAI,EAAE;gBACJ,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,OAAO,EAAE,MAAM,CAAC,OAAO;aACxB;SACF,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,KAAK,iBAAiB,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAA0B,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAE,aAAa,EAA0B,MAAM,kBAAkB,CAAC"}
|