@stabgan/openrouter-mcp-multimodal 1.4.0 → 1.8.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 +21 -0
- package/README.md +164 -147
- package/dist/__tests__/image-utils.test.d.ts +1 -0
- package/dist/__tests__/image-utils.test.js +75 -0
- package/dist/__tests__/integration.test.d.ts +1 -0
- package/dist/__tests__/integration.test.js +111 -0
- package/dist/__tests__/model-cache.test.d.ts +1 -0
- package/dist/__tests__/model-cache.test.js +96 -0
- package/dist/index.js +47 -46
- package/dist/model-cache.d.ts +18 -46
- package/dist/model-cache.js +28 -125
- package/dist/openrouter-api.d.ts +2 -22
- package/dist/openrouter-api.js +34 -111
- package/dist/tool-handlers/analyze-image.d.ts +2 -17
- package/dist/tool-handlers/analyze-image.js +18 -259
- package/dist/tool-handlers/chat-completion.d.ts +1 -0
- package/dist/tool-handlers/chat-completion.js +10 -143
- package/dist/tool-handlers/generate-image.d.ts +30 -0
- package/dist/tool-handlers/generate-image.js +82 -0
- package/dist/tool-handlers/get-model-info.d.ts +5 -5
- package/dist/tool-handlers/get-model-info.js +11 -41
- package/dist/tool-handlers/image-utils.d.ts +11 -0
- package/dist/tool-handlers/image-utils.js +253 -0
- package/dist/tool-handlers/search-models.d.ts +3 -10
- package/dist/tool-handlers/search-models.js +6 -37
- package/dist/tool-handlers/validate-model.d.ts +5 -5
- package/dist/tool-handlers/validate-model.js +13 -37
- package/dist/tool-handlers.d.ts +1 -2
- package/dist/tool-handlers.js +55 -234
- package/package.json +20 -21
- package/dist/index.js.map +0 -1
- package/dist/model-cache.js.map +0 -1
- package/dist/openrouter-api.js.map +0 -1
- package/dist/tool-handlers/analyze-image.js.map +0 -1
- package/dist/tool-handlers/chat-completion.js.map +0 -1
- package/dist/tool-handlers/get-model-info.js.map +0 -1
- package/dist/tool-handlers/multi-image-analysis.d.ts +0 -46
- package/dist/tool-handlers/multi-image-analysis.js +0 -405
- package/dist/tool-handlers/multi-image-analysis.js.map +0 -1
- package/dist/tool-handlers/search-models.js.map +0 -1
- package/dist/tool-handlers/validate-model.js.map +0 -1
- package/dist/tool-handlers.js.map +0 -1
|
@@ -1,405 +0,0 @@
|
|
|
1
|
-
import fetch from 'node-fetch';
|
|
2
|
-
// Remove the sharp import to avoid conflicts with our dynamic import
|
|
3
|
-
// import sharp from 'sharp';
|
|
4
|
-
import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js';
|
|
5
|
-
import path from 'path';
|
|
6
|
-
import { promises as fs } from 'fs';
|
|
7
|
-
import { tmpdir } from 'os';
|
|
8
|
-
// Remove uuid import as we'll use a simple random string generator instead
|
|
9
|
-
// import { v4 as uuidv4 } from 'uuid';
|
|
10
|
-
// Setup sharp with fallback
|
|
11
|
-
let sharp;
|
|
12
|
-
try {
|
|
13
|
-
sharp = require('sharp');
|
|
14
|
-
}
|
|
15
|
-
catch (e) {
|
|
16
|
-
console.error('Warning: sharp module not available, using fallback image processing');
|
|
17
|
-
// Mock implementation that just passes through the base64 data
|
|
18
|
-
sharp = (buffer) => ({
|
|
19
|
-
metadata: async () => ({ width: 800, height: 600 }),
|
|
20
|
-
resize: () => ({
|
|
21
|
-
jpeg: () => ({
|
|
22
|
-
toBuffer: async () => buffer
|
|
23
|
-
})
|
|
24
|
-
}),
|
|
25
|
-
jpeg: () => ({
|
|
26
|
-
toBuffer: async () => buffer
|
|
27
|
-
})
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
// Default model for image analysis
|
|
31
|
-
const DEFAULT_FREE_MODEL = 'qwen/qwen2.5-vl-32b-instruct:free';
|
|
32
|
-
// Image processing constants
|
|
33
|
-
const MAX_DIMENSION = 800;
|
|
34
|
-
const JPEG_QUALITY = 80;
|
|
35
|
-
const MAX_RETRY_ATTEMPTS = 3;
|
|
36
|
-
const RETRY_DELAY = 1000; // ms
|
|
37
|
-
// Simple random ID generator to replace uuid
|
|
38
|
-
function generateRandomId() {
|
|
39
|
-
return Math.random().toString(36).substring(2, 15) +
|
|
40
|
-
Math.random().toString(36).substring(2, 15);
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Sleep function for retry mechanisms
|
|
44
|
-
*/
|
|
45
|
-
const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms));
|
|
46
|
-
/**
|
|
47
|
-
* Get MIME type from file extension or data URL
|
|
48
|
-
*/
|
|
49
|
-
function getMimeType(url) {
|
|
50
|
-
if (url.startsWith('data:')) {
|
|
51
|
-
const match = url.match(/^data:([^;]+);/);
|
|
52
|
-
return match ? match[1] : 'application/octet-stream';
|
|
53
|
-
}
|
|
54
|
-
const extension = path.extname(url.split('?')[0]).toLowerCase();
|
|
55
|
-
switch (extension) {
|
|
56
|
-
case '.png': return 'image/png';
|
|
57
|
-
case '.jpg':
|
|
58
|
-
case '.jpeg': return 'image/jpeg';
|
|
59
|
-
case '.webp': return 'image/webp';
|
|
60
|
-
case '.gif': return 'image/gif';
|
|
61
|
-
case '.bmp': return 'image/bmp';
|
|
62
|
-
case '.svg': return 'image/svg+xml';
|
|
63
|
-
default: return 'application/octet-stream';
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* Fetch image from various sources: data URLs, file paths, or remote URLs
|
|
68
|
-
*/
|
|
69
|
-
async function fetchImageAsBuffer(url) {
|
|
70
|
-
try {
|
|
71
|
-
// Handle data URLs
|
|
72
|
-
if (url.startsWith('data:')) {
|
|
73
|
-
const matches = url.match(/^data:([A-Za-z-+\/]+);base64,(.+)$/);
|
|
74
|
-
if (!matches || matches.length !== 3) {
|
|
75
|
-
throw new Error('Invalid data URL format');
|
|
76
|
-
}
|
|
77
|
-
return Buffer.from(matches[2], 'base64');
|
|
78
|
-
}
|
|
79
|
-
// Handle file URLs with file:// protocol
|
|
80
|
-
if (url.startsWith('file://')) {
|
|
81
|
-
const filePath = url.replace('file://', '');
|
|
82
|
-
try {
|
|
83
|
-
return await fs.readFile(filePath);
|
|
84
|
-
}
|
|
85
|
-
catch (error) {
|
|
86
|
-
console.error(`Error reading file at ${filePath}:`, error);
|
|
87
|
-
throw new Error(`Failed to read file: ${filePath}`);
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
// Handle absolute and relative file paths
|
|
91
|
-
if (url.startsWith('/') || url.startsWith('./') || url.startsWith('../') || /^[A-Za-z]:\\/.test(url)) {
|
|
92
|
-
try {
|
|
93
|
-
return await fs.readFile(url);
|
|
94
|
-
}
|
|
95
|
-
catch (error) {
|
|
96
|
-
console.error(`Error reading file at ${url}:`, error);
|
|
97
|
-
throw new Error(`Failed to read file: ${url}`);
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
// Handle http/https URLs
|
|
101
|
-
if (url.startsWith('http://') || url.startsWith('https://')) {
|
|
102
|
-
for (let attempt = 0; attempt < MAX_RETRY_ATTEMPTS; attempt++) {
|
|
103
|
-
try {
|
|
104
|
-
// Use AbortController for timeout instead of timeout option
|
|
105
|
-
const controller = new AbortController();
|
|
106
|
-
const timeoutId = setTimeout(() => controller.abort(), 15000);
|
|
107
|
-
const response = await fetch(url, {
|
|
108
|
-
signal: controller.signal,
|
|
109
|
-
headers: {
|
|
110
|
-
'User-Agent': 'OpenRouter-MCP-Server/1.0'
|
|
111
|
-
}
|
|
112
|
-
});
|
|
113
|
-
// Clear the timeout to prevent memory leaks
|
|
114
|
-
clearTimeout(timeoutId);
|
|
115
|
-
if (!response.ok) {
|
|
116
|
-
throw new Error(`HTTP error! status: ${response.status}`);
|
|
117
|
-
}
|
|
118
|
-
return Buffer.from(await response.arrayBuffer());
|
|
119
|
-
}
|
|
120
|
-
catch (error) {
|
|
121
|
-
console.error(`Error fetching URL (attempt ${attempt + 1}/${MAX_RETRY_ATTEMPTS}): ${url}`, error);
|
|
122
|
-
if (attempt < MAX_RETRY_ATTEMPTS - 1) {
|
|
123
|
-
// Exponential backoff with jitter
|
|
124
|
-
const delay = RETRY_DELAY * Math.pow(2, attempt) * (0.5 + Math.random() * 0.5);
|
|
125
|
-
await sleep(delay);
|
|
126
|
-
}
|
|
127
|
-
else {
|
|
128
|
-
throw error;
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
// If we get here, the URL format is unsupported
|
|
134
|
-
throw new Error(`Unsupported URL format: ${url}`);
|
|
135
|
-
}
|
|
136
|
-
catch (error) {
|
|
137
|
-
console.error(`Error fetching image from ${url}:`, error);
|
|
138
|
-
throw error;
|
|
139
|
-
}
|
|
140
|
-
// TypeScript requires a return statement here, but this is unreachable
|
|
141
|
-
return Buffer.from([]);
|
|
142
|
-
}
|
|
143
|
-
/**
|
|
144
|
-
* Process and optimize image for API consumption
|
|
145
|
-
*/
|
|
146
|
-
async function processImage(buffer, mimeType) {
|
|
147
|
-
try {
|
|
148
|
-
if (typeof sharp !== 'function') {
|
|
149
|
-
console.warn('Using fallback image processing (sharp not available)');
|
|
150
|
-
return processImageFallback(buffer, mimeType);
|
|
151
|
-
}
|
|
152
|
-
// Create a temporary directory for processing if needed
|
|
153
|
-
const tempDir = path.join(tmpdir(), `openrouter-mcp-${generateRandomId()}`);
|
|
154
|
-
await fs.mkdir(tempDir, { recursive: true });
|
|
155
|
-
// Get image info
|
|
156
|
-
let sharpInstance = sharp(buffer);
|
|
157
|
-
let metadata;
|
|
158
|
-
try {
|
|
159
|
-
metadata = await sharpInstance.metadata();
|
|
160
|
-
}
|
|
161
|
-
catch (error) {
|
|
162
|
-
console.warn('Error getting image metadata, using fallback:', error);
|
|
163
|
-
return processImageFallback(buffer, mimeType);
|
|
164
|
-
}
|
|
165
|
-
// Skip processing for small images
|
|
166
|
-
if (metadata.width && metadata.height &&
|
|
167
|
-
metadata.width <= MAX_DIMENSION &&
|
|
168
|
-
metadata.height <= MAX_DIMENSION &&
|
|
169
|
-
(mimeType === 'image/jpeg' || mimeType === 'image/webp')) {
|
|
170
|
-
return buffer.toString('base64');
|
|
171
|
-
}
|
|
172
|
-
// Resize larger images
|
|
173
|
-
if (metadata.width && metadata.height) {
|
|
174
|
-
const largerDimension = Math.max(metadata.width, metadata.height);
|
|
175
|
-
if (largerDimension > MAX_DIMENSION) {
|
|
176
|
-
const resizeOptions = metadata.width > metadata.height
|
|
177
|
-
? { width: MAX_DIMENSION }
|
|
178
|
-
: { height: MAX_DIMENSION };
|
|
179
|
-
sharpInstance = sharpInstance.resize(resizeOptions);
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
try {
|
|
183
|
-
// Convert to JPEG for consistency and small size
|
|
184
|
-
const processedBuffer = await sharpInstance
|
|
185
|
-
.jpeg({ quality: JPEG_QUALITY })
|
|
186
|
-
.toBuffer();
|
|
187
|
-
return processedBuffer.toString('base64');
|
|
188
|
-
}
|
|
189
|
-
catch (error) {
|
|
190
|
-
console.warn('Error in final image processing, using fallback:', error);
|
|
191
|
-
return processImageFallback(buffer, mimeType);
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
catch (error) {
|
|
195
|
-
console.error('Error processing image, using fallback:', error);
|
|
196
|
-
return processImageFallback(buffer, mimeType);
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
/**
|
|
200
|
-
* Find a suitable free model with vision capabilities, defaulting to Qwen
|
|
201
|
-
*/
|
|
202
|
-
export async function findSuitableFreeModel(openai) {
|
|
203
|
-
try {
|
|
204
|
-
// First try with an exact match for our preferred model
|
|
205
|
-
const preferredModel = DEFAULT_FREE_MODEL;
|
|
206
|
-
try {
|
|
207
|
-
// Check if our preferred model is available
|
|
208
|
-
const modelInfo = await openai.models.retrieve(preferredModel);
|
|
209
|
-
if (modelInfo && modelInfo.id) {
|
|
210
|
-
console.error(`Using preferred model: ${preferredModel}`);
|
|
211
|
-
return preferredModel;
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
catch (error) {
|
|
215
|
-
console.error(`Preferred model ${preferredModel} not available, searching for alternatives...`);
|
|
216
|
-
}
|
|
217
|
-
// Query available models
|
|
218
|
-
const modelsResponse = await openai.models.list();
|
|
219
|
-
if (!modelsResponse?.data || modelsResponse.data.length === 0) {
|
|
220
|
-
console.error('No models found, using default fallback model');
|
|
221
|
-
return DEFAULT_FREE_MODEL;
|
|
222
|
-
}
|
|
223
|
-
// First, try to find free vision models
|
|
224
|
-
const freeVisionModels = modelsResponse.data
|
|
225
|
-
.filter(model => {
|
|
226
|
-
const modelId = model.id.toLowerCase();
|
|
227
|
-
return modelId.includes('free') &&
|
|
228
|
-
(modelId.includes('vl') || modelId.includes('vision') || modelId.includes('claude') ||
|
|
229
|
-
modelId.includes('gemini') || modelId.includes('gpt-4') || modelId.includes('qwen'));
|
|
230
|
-
})
|
|
231
|
-
.map(model => {
|
|
232
|
-
// Extract context length if available
|
|
233
|
-
let contextLength = 0;
|
|
234
|
-
try {
|
|
235
|
-
const modelAny = model;
|
|
236
|
-
if (typeof modelAny.context_length === 'number') {
|
|
237
|
-
contextLength = modelAny.context_length;
|
|
238
|
-
}
|
|
239
|
-
else if (modelAny.context_window) {
|
|
240
|
-
contextLength = parseInt(modelAny.context_window, 10);
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
catch (e) {
|
|
244
|
-
console.error(`Error parsing context length for model ${model.id}:`, e);
|
|
245
|
-
}
|
|
246
|
-
return {
|
|
247
|
-
id: model.id,
|
|
248
|
-
contextLength: contextLength || 0
|
|
249
|
-
};
|
|
250
|
-
});
|
|
251
|
-
if (freeVisionModels.length > 0) {
|
|
252
|
-
// Sort by context length and pick the one with the largest context window
|
|
253
|
-
freeVisionModels.sort((a, b) => b.contextLength - a.contextLength);
|
|
254
|
-
const selectedModel = freeVisionModels[0].id;
|
|
255
|
-
console.error(`Selected free vision model: ${selectedModel} with context length: ${freeVisionModels[0].contextLength}`);
|
|
256
|
-
return selectedModel;
|
|
257
|
-
}
|
|
258
|
-
// If no free vision models found, fallback to our default
|
|
259
|
-
console.error('No free vision models found, using default fallback model');
|
|
260
|
-
return DEFAULT_FREE_MODEL;
|
|
261
|
-
}
|
|
262
|
-
catch (error) {
|
|
263
|
-
console.error('Error finding suitable model:', error);
|
|
264
|
-
return DEFAULT_FREE_MODEL;
|
|
265
|
-
}
|
|
266
|
-
}
|
|
267
|
-
/**
|
|
268
|
-
* Main handler for multi-image analysis
|
|
269
|
-
*/
|
|
270
|
-
export async function handleMultiImageAnalysis(request, openai, defaultModel) {
|
|
271
|
-
const args = request.params.arguments;
|
|
272
|
-
try {
|
|
273
|
-
// Validate inputs
|
|
274
|
-
if (!args.images || !Array.isArray(args.images) || args.images.length === 0) {
|
|
275
|
-
throw new McpError(ErrorCode.InvalidParams, 'At least one image is required');
|
|
276
|
-
}
|
|
277
|
-
if (!args.prompt) {
|
|
278
|
-
throw new McpError(ErrorCode.InvalidParams, 'A prompt for analyzing the images is required');
|
|
279
|
-
}
|
|
280
|
-
console.error(`Processing ${args.images.length} images`);
|
|
281
|
-
// Process each image and convert to base64 if needed
|
|
282
|
-
const processedImages = await Promise.all(args.images.map(async (image, index) => {
|
|
283
|
-
try {
|
|
284
|
-
// Skip processing if already a data URL
|
|
285
|
-
if (image.url.startsWith('data:')) {
|
|
286
|
-
console.error(`Image ${index + 1} is already in base64 format`);
|
|
287
|
-
return image;
|
|
288
|
-
}
|
|
289
|
-
console.error(`Processing image ${index + 1}: ${image.url.substring(0, 100)}${image.url.length > 100 ? '...' : ''}`);
|
|
290
|
-
// Get MIME type
|
|
291
|
-
const mimeType = getMimeType(image.url);
|
|
292
|
-
// Fetch and process the image
|
|
293
|
-
const buffer = await fetchImageAsBuffer(image.url);
|
|
294
|
-
const base64 = await processImage(buffer, mimeType);
|
|
295
|
-
return {
|
|
296
|
-
url: `data:${mimeType === 'application/octet-stream' ? 'image/jpeg' : mimeType};base64,${base64}`,
|
|
297
|
-
alt: image.alt
|
|
298
|
-
};
|
|
299
|
-
}
|
|
300
|
-
catch (error) {
|
|
301
|
-
console.error(`Error processing image ${index + 1}:`, error);
|
|
302
|
-
throw new Error(`Failed to process image ${index + 1}: ${image.url}. Error: ${error.message}`);
|
|
303
|
-
}
|
|
304
|
-
}));
|
|
305
|
-
// Select model with priority:
|
|
306
|
-
// 1. User-specified model
|
|
307
|
-
// 2. Default model from environment
|
|
308
|
-
// 3. Default free vision model
|
|
309
|
-
let model = args.model || defaultModel || DEFAULT_FREE_MODEL;
|
|
310
|
-
// If a model is specified but not our default free model, verify it exists
|
|
311
|
-
if (model !== DEFAULT_FREE_MODEL) {
|
|
312
|
-
try {
|
|
313
|
-
await openai.models.retrieve(model);
|
|
314
|
-
}
|
|
315
|
-
catch (error) {
|
|
316
|
-
console.error(`Specified model ${model} not found, falling back to auto-selection`);
|
|
317
|
-
model = await findSuitableFreeModel(openai);
|
|
318
|
-
}
|
|
319
|
-
}
|
|
320
|
-
console.error(`Making API call with model: ${model}`);
|
|
321
|
-
// Build content array for the API call
|
|
322
|
-
const content = [
|
|
323
|
-
{
|
|
324
|
-
type: 'text',
|
|
325
|
-
text: args.prompt
|
|
326
|
-
}
|
|
327
|
-
];
|
|
328
|
-
// Add each processed image to the content array
|
|
329
|
-
processedImages.forEach(image => {
|
|
330
|
-
content.push({
|
|
331
|
-
type: 'image_url',
|
|
332
|
-
image_url: {
|
|
333
|
-
url: image.url
|
|
334
|
-
}
|
|
335
|
-
});
|
|
336
|
-
});
|
|
337
|
-
// Make the API call
|
|
338
|
-
const completion = await openai.chat.completions.create({
|
|
339
|
-
model,
|
|
340
|
-
messages: [{
|
|
341
|
-
role: 'user',
|
|
342
|
-
content
|
|
343
|
-
}]
|
|
344
|
-
});
|
|
345
|
-
// Get response text and format if requested
|
|
346
|
-
let responseText = completion.choices[0].message.content || '';
|
|
347
|
-
// Format as markdown if requested
|
|
348
|
-
if (args.markdown_response) {
|
|
349
|
-
// Simple formatting enhancements
|
|
350
|
-
responseText = responseText
|
|
351
|
-
// Add horizontal rule after sections
|
|
352
|
-
.replace(/^(#{1,3}.*)/gm, '$1\n\n---')
|
|
353
|
-
// Ensure proper spacing for lists
|
|
354
|
-
.replace(/^(\s*[-*•]\s.+)$/gm, '\n$1')
|
|
355
|
-
// Convert plain URLs to markdown links
|
|
356
|
-
.replace(/(https?:\/\/[^\s]+)/g, '[$1]($1)');
|
|
357
|
-
}
|
|
358
|
-
// Return the analysis result
|
|
359
|
-
return {
|
|
360
|
-
content: [
|
|
361
|
-
{
|
|
362
|
-
type: 'text',
|
|
363
|
-
text: responseText,
|
|
364
|
-
},
|
|
365
|
-
],
|
|
366
|
-
metadata: {
|
|
367
|
-
model: completion.model,
|
|
368
|
-
usage: completion.usage
|
|
369
|
-
}
|
|
370
|
-
};
|
|
371
|
-
}
|
|
372
|
-
catch (error) {
|
|
373
|
-
console.error('Error in multi-image analysis:', error);
|
|
374
|
-
if (error instanceof McpError) {
|
|
375
|
-
throw error;
|
|
376
|
-
}
|
|
377
|
-
return {
|
|
378
|
-
content: [
|
|
379
|
-
{
|
|
380
|
-
type: 'text',
|
|
381
|
-
text: `Error analyzing images: ${error.message}`,
|
|
382
|
-
},
|
|
383
|
-
],
|
|
384
|
-
isError: true,
|
|
385
|
-
metadata: {
|
|
386
|
-
error_type: error.constructor.name,
|
|
387
|
-
error_message: error.message
|
|
388
|
-
}
|
|
389
|
-
};
|
|
390
|
-
}
|
|
391
|
-
}
|
|
392
|
-
/**
|
|
393
|
-
* Processes an image with minimal processing when sharp isn't available
|
|
394
|
-
*/
|
|
395
|
-
async function processImageFallback(buffer, mimeType) {
|
|
396
|
-
try {
|
|
397
|
-
// Just return the buffer as base64 without processing
|
|
398
|
-
return buffer.toString('base64');
|
|
399
|
-
}
|
|
400
|
-
catch (error) {
|
|
401
|
-
console.error('Error in fallback image processing:', error);
|
|
402
|
-
throw error;
|
|
403
|
-
}
|
|
404
|
-
}
|
|
405
|
-
//# sourceMappingURL=multi-image-analysis.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"multi-image-analysis.js","sourceRoot":"","sources":["../../src/tool-handlers/multi-image-analysis.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"search-models.js","sourceRoot":"","sources":["../../src/tool-handlers/search-models.ts"],"names":[],"mappings":"AAmBA,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,OAA2D,EAC3D,SAA8B,EAC9B,UAAsB;IAEtB,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC;IAEtC,IAAI,CAAC;QACH,8BAA8B;QAC9B,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,EAAE,CAAC;YAC/B,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,SAAS,EAAE,CAAC;YAC3C,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC/B,CAAC;QAED,kCAAkC;QAClC,MAAM,OAAO,GAAG,UAAU,CAAC,YAAY,CAAC;YACtC,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;YAC3C,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE;SACxB,CAAC,CAAC;QAEH,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;iBACvC;aACF;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,2BAA2B,KAAK,CAAC,OAAO,EAAE;qBACjD;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validate-model.js","sourceRoot":"","sources":["../../src/tool-handlers/validate-model.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,OAA4D,EAC5D,UAAsB;IAEtB,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC;IAEtC,IAAI,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,EAAE,CAAC;YAC/B,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,yFAAyF;qBAChG;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEhD,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;iBACzC;aACF;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,2BAA2B,KAAK,CAAC,OAAO,EAAE;qBACjD;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tool-handlers.js","sourceRoot":"","sources":["../src/tool-handlers.ts"],"names":[],"mappings":"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"}
|