devicely 2.3.0 โ†’ 2.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/bin/devicely.js +1 -1
  2. package/config/devices.conf +1 -1
  3. package/lib/advanced-logger.js +1 -0
  4. package/lib/aiProviders.js +1 -592
  5. package/lib/aiProviders.js.strategic-backup +657 -0
  6. package/lib/aiProvidersConfig.js +1 -171
  7. package/lib/androidDeviceDetection.js +1 -1
  8. package/lib/appMappings.js +1 -1
  9. package/lib/cognitiveLocator.js +1 -1
  10. package/lib/commanderService.js +1 -1
  11. package/lib/deviceDetection.js +1 -1
  12. package/lib/devices.js +1 -1
  13. package/lib/devices.js.strategic-backup +57 -0
  14. package/lib/doctor.js +1 -1
  15. package/lib/encryption.js +1 -1
  16. package/lib/encryption.js.strategic-backup +61 -0
  17. package/lib/executor.js +1 -1
  18. package/lib/executor.js.strategic-backup +107 -0
  19. package/lib/frontend/asset-manifest.json +3 -3
  20. package/lib/frontend/index.html +1 -1
  21. package/lib/frontend/static/js/main.686bc72a.js +3 -0
  22. package/lib/hybridAI.js +1 -0
  23. package/lib/intelligentLocatorService.js +1 -0
  24. package/lib/lightweightAI.js +1 -0
  25. package/lib/localBuiltInAI.js +1 -0
  26. package/lib/localBuiltInAI_backup.js +1 -0
  27. package/lib/localBuiltInAI_simple.js +1 -0
  28. package/lib/locatorStrategy.js +1 -1
  29. package/lib/logger-demo.js +2 -0
  30. package/lib/logger-integration-examples.js +102 -0
  31. package/lib/logger.js +1 -1
  32. package/lib/package.json +2 -0
  33. package/lib/quick-start-logger.js +2 -0
  34. package/lib/scriptLoader.js +1 -1
  35. package/lib/server.js +1 -1
  36. package/lib/server.js.strategic-backup +6298 -0
  37. package/lib/tensorflowAI.js +1 -0
  38. package/lib/tensorflowAI.js.strategic-backup +717 -0
  39. package/lib/tinyAI.js +1 -0
  40. package/lib/universalSessionManager.js +1 -0
  41. package/package.json +5 -2
  42. package/scripts/shell/android_device_control.enc +1 -1
  43. package/scripts/shell/connect_ios_usb_multi_final.enc +1 -1
  44. package/scripts/shell/connect_ios_wireless_multi_final.enc +1 -1
  45. package/lib/aiProviders_new.js +0 -70
  46. package/lib/frontend/static/js/main.310a0af8.js +0 -3
  47. /package/lib/frontend/static/js/{main.310a0af8.js.LICENSE.txt โ†’ main.686bc72a.js.LICENSE.txt} +0 -0
@@ -1,592 +1 @@
1
- // AI Provider Abstraction Layer - API-Only Multi-Provider Support
2
- // Pure API-based AI providers - No local models, no storage
3
- // Supports: OpenAI, Google Gemini, Anthropic Claude, GitHub Copilot, Groq, Cohere, Mistral AI
4
-
5
- const { OpenAI } = require('openai');
6
- const { GoogleGenerativeAI } = require('@google/generative-ai');
7
- const { Anthropic } = require('@anthropic-ai/sdk');
8
- const { getPackageId, APP_MAPPINGS } = require('./appMappings');
9
-
10
- // Configuration: API-only mode (no caching, no local storage)
11
- const AI_CONFIG = {
12
- cache: false, // Disable any response caching
13
- localStorage: false, // No local storage of models or data
14
- streamingOnly: false, // Use standard requests for better compatibility
15
- timeout: 30000, // 30 second timeout for API calls
16
- retries: 2, // Retry failed requests twice
17
- };
18
-
19
- class AIProviderManager {
20
- constructor() {
21
- this.provider = process.env.AI_PROVIDER || 'gemini';
22
- this.model = process.env.AI_MODEL || null; // Auto-select default if null
23
- this.requestCache = new Map(); // In-memory only, cleared on restart
24
- this.cacheExpiry = 300000; // 5 minutes (for identical requests only)
25
- this.initializeProviders();
26
-
27
- // Log API-only mode
28
- console.log('๐Ÿš€ AI Provider: API-Only Mode (No Local Models)');
29
- console.log(` Active Provider: ${this.provider}`);
30
- }
31
-
32
- initializeProviders() {
33
- // OpenAI - Direct API connection
34
- if (process.env.OPENAI_API_KEY) {
35
- this.openai = new OpenAI({
36
- apiKey: process.env.OPENAI_API_KEY,
37
- timeout: AI_CONFIG.timeout,
38
- maxRetries: AI_CONFIG.retries,
39
- });
40
- }
41
-
42
- // Google Gemini - Direct API connection
43
- if (process.env.GEMINI_API_KEY) {
44
- this.gemini = new GoogleGenerativeAI(process.env.GEMINI_API_KEY);
45
- }
46
-
47
- // Anthropic Claude - Direct API connection
48
- if (process.env.CLAUDE_API_KEY) {
49
- this.claude = new Anthropic({
50
- apiKey: process.env.CLAUDE_API_KEY,
51
- timeout: AI_CONFIG.timeout,
52
- maxRetries: AI_CONFIG.retries,
53
- });
54
- }
55
-
56
- // GitHub Copilot - Direct API connection
57
- if (process.env.GITHUB_TOKEN) {
58
- this.copilot = new OpenAI({
59
- apiKey: process.env.GITHUB_TOKEN,
60
- baseURL: 'https://api.githubcopilot.com',
61
- timeout: AI_CONFIG.timeout,
62
- maxRetries: AI_CONFIG.retries,
63
- });
64
- }
65
-
66
- // Groq - Ultra-fast API inference (no local processing)
67
- if (process.env.GROQ_API_KEY) {
68
- this.groq = new OpenAI({
69
- apiKey: process.env.GROQ_API_KEY,
70
- baseURL: 'https://api.groq.com/openai/v1',
71
- timeout: AI_CONFIG.timeout,
72
- maxRetries: AI_CONFIG.retries,
73
- });
74
- }
75
-
76
- // Cohere - Direct API connection
77
- if (process.env.COHERE_API_KEY) {
78
- this.cohere = new OpenAI({
79
- apiKey: process.env.COHERE_API_KEY,
80
- baseURL: 'https://api.cohere.ai/v1',
81
- timeout: AI_CONFIG.timeout,
82
- maxRetries: AI_CONFIG.retries,
83
- });
84
- }
85
-
86
- // Mistral AI - Direct API connection
87
- if (process.env.MISTRAL_API_KEY) {
88
- this.mistral = new OpenAI({
89
- apiKey: process.env.MISTRAL_API_KEY,
90
- baseURL: 'https://api.mistral.ai/v1',
91
- timeout: AI_CONFIG.timeout,
92
- maxRetries: AI_CONFIG.retries,
93
- });
94
- }
95
- }
96
-
97
- getSystemPrompt(platform = null) {
98
- // Generate app list based on platform
99
- let appListSection = '';
100
-
101
- if (platform === 'both') {
102
- // Multi-platform mode - use generic app names
103
- const commonApps = Object.keys(APP_MAPPINGS)
104
- .filter(app => APP_MAPPINGS[app].ios && APP_MAPPINGS[app].android)
105
- .slice(0, 30);
106
-
107
- appListSection = `\n\nMULTI-PLATFORM MODE (iOS + Android devices)
108
- Available apps: ${commonApps.join(', ')}
109
-
110
- IMPORTANT: Use generic app names (e.g., "launch settings", "launch chrome")
111
- The system will automatically convert to platform-specific package IDs:
112
- ${commonApps.slice(0, 15).map(app => `- ${app} -> iOS: ${APP_MAPPINGS[app].ios} / Android: ${APP_MAPPINGS[app].android}`).join('\n')}
113
-
114
- Commands will execute SIMULTANEOUSLY on all devices with correct package IDs.
115
- `;
116
- } else if (platform) {
117
- const availableApps = Object.keys(APP_MAPPINGS)
118
- .filter(app => APP_MAPPINGS[app][platform])
119
- .slice(0, 50);
120
-
121
- appListSection = `\n\nPLATFORM: ${platform.toUpperCase()}
122
- Available apps for ${platform}: ${availableApps.join(', ')}
123
-
124
- APP PACKAGE MAPPINGS:
125
- When user says "launch chrome", "open chrome", etc., use the correct package ID:
126
- ${availableApps.slice(0, 20).map(app => `- ${app} -> launch ${APP_MAPPINGS[app][platform]}`).join('\n')}
127
- `;
128
- }
129
-
130
- return `You are a mobile device automation command converter. Convert natural language requests into executable commands for iOS and Android devices.
131
-
132
- Available commands (work on both iOS & Android):
133
- - launch <app_name>: Launch an app using generic name (e.g., "launch settings", "launch chrome")
134
- - kill <app_name>: Close/force stop an app
135
- - home: Go to home screen (press home button)
136
- - back: Navigate back (Android/iOS)
137
- - url <url>: Open URL in browser
138
- - click <text>: Click on a button or element by visible text
139
- - click <x,y>: Click at specific coordinates (e.g., click 500,1000)
140
- - tap <text/coords>: Same as click
141
- - longpress <text/coords>: Long press on element or coordinates
142
- - swipe <direction>: Swipe up/down/left/right (use for scrolling)
143
- - type <text>: Type text into focused field (just the text, no "type" prefix)
144
- - screenshot: Take screenshot
145
- - restart: Restart device
146
- - rotate <left/right/portrait/landscape>: Rotate screen
147
-
148
- iOS-specific commands:
149
- - darkmode/lightmode: Change appearance
150
- - airplane <on/off>: Toggle airplane mode
151
- - wifi <on/off>: Toggle WiFi
152
- - volume <up/down/mute>: Control volume
153
-
154
- Android-specific commands:
155
- - getLocators: Get all interactive elements on current screen
156
- - recent: Open recent apps
157
- - notifications: Open notification panel
158
- - quicksettings: Open quick settings
159
- ${appListSection}
160
-
161
- COMMON PHRASE MAPPINGS:
162
- - "scroll up" OR "scroll down" -> swipe up OR swipe down
163
- - "go to <url>" OR "open <url>" OR "visit <url>" -> url https://<url>
164
- - "press home" OR "go home" OR "home button" -> home
165
- - "open settings" OR "launch settings" -> launch settings
166
- - "open camera" OR "launch camera" -> launch camera
167
-
168
- Examples:
169
- - "open chrome" -> launch chrome
170
- - "launch settings" -> launch settings
171
- - "open camera" -> launch camera
172
- - "scroll up" -> swipe up
173
- - "scroll down" -> swipe down
174
- - "click on the login button" -> click Login
175
- - "tap at center of screen" -> click 540,1000
176
- - "swipe down" -> swipe down
177
- - "type hello world" -> hello world
178
- - "take a screenshot" -> screenshot
179
- - "go back" -> back
180
- - "press home" -> home
181
- - "go to google.com" -> url https://www.google.com
182
- - "visit youtube.com" -> url https://www.youtube.com
183
- - "launch Chrome and search google.com" -> launch chrome
184
- WAIT 3000
185
- url https://www.google.com
186
- - "launch settings scroll up launch camera go to google.com press home" ->
187
- launch settings
188
- WAIT 3000
189
- swipe up
190
- WAIT 1000
191
- home
192
- WAIT 500
193
- launch camera
194
- WAIT 3000
195
- home
196
- WAIT 500
197
- url https://www.google.com
198
- WAIT 2000
199
- home
200
-
201
- Convert this request to commands: "{INPUT}"
202
-
203
- CRITICAL RULES - YOU MUST FOLLOW THESE EXACTLY:
204
- 1. Output ONLY executable commands, one per line
205
- 2. NO explanations, NO markdown code blocks, NO comments, NO extra text
206
- 3. For multi-step actions, insert WAIT <milliseconds> between commands
207
- 4. Use GENERIC app names (e.g., "launch settings", "launch chrome", "launch camera")
208
- 5. Do NOT use platform-specific package IDs - use simple app names
209
- 6. The system will automatically convert to correct package IDs for each platform
210
- 5. For URLs, always use: url https://example.com
211
- 6. For scrolling, use: swipe up OR swipe down (never "scroll")
212
- 7. For text input, output ONLY the text (never include "type" prefix)
213
- 8. For home button, output: home (never "press home" or "go home")
214
- 9. WAIT timings: apps=3000ms, pages=2000ms, UI=1000ms, quick=500ms
215
- 10. Parse compound requests into individual steps with WAIT between each
216
-
217
- OUTPUT FORMAT EXAMPLE:
218
- launch com.apple.Preferences
219
- WAIT 3000
220
- swipe up
221
- WAIT 1000
222
- home
223
-
224
- DO NOT include any other text. Start your response with the first command.`;
225
- }
226
-
227
- async convertCommand(text, platform = null, providerOverride = null) {
228
- const provider = providerOverride || this.provider;
229
-
230
- // Check in-memory cache for identical requests (5 min expiry)
231
- const cacheKey = `${provider}-${platform}-${text}`;
232
- const cached = this.requestCache.get(cacheKey);
233
- if (cached && Date.now() - cached.timestamp < this.cacheExpiry) {
234
- console.log('๐ŸŽฏ Using cached response (in-memory)');
235
- return cached.response;
236
- }
237
-
238
- try {
239
- let result;
240
- switch (provider) {
241
- case 'openai':
242
- result = await this.convertWithOpenAI(text, platform);
243
- break;
244
- case 'gemini':
245
- result = await this.convertWithGemini(text, platform);
246
- break;
247
- case 'claude':
248
- result = await this.convertWithClaude(text, platform);
249
- break;
250
- case 'copilot':
251
- result = await this.convertWithCopilot(text, platform);
252
- break;
253
- case 'groq':
254
- result = await this.convertWithGroq(text, platform);
255
- break;
256
- case 'cohere':
257
- result = await this.convertWithCohere(text, platform);
258
- break;
259
- case 'mistral':
260
- result = await this.convertWithMistral(text, platform);
261
- break;
262
- default:
263
- throw new Error(`Unknown AI provider: ${provider}`);
264
- }
265
-
266
- // Cache in memory only (cleared on restart)
267
- this.requestCache.set(cacheKey, { response: result, timestamp: Date.now() });
268
-
269
- // Clear old cache entries (keep last 50)
270
- if (this.requestCache.size > 50) {
271
- const firstKey = this.requestCache.keys().next().value;
272
- this.requestCache.delete(firstKey);
273
- }
274
-
275
- return result;
276
- } catch (error) {
277
- console.error(`โŒ API Error with ${provider}:`, error.message);
278
- throw new Error(`AI conversion failed (${provider}): ${error.message}`);
279
- }
280
- }
281
-
282
- // Get model to use (from env or default)
283
- getModelForProvider(provider) {
284
- // If specific model is set, use it
285
- if (this.model) return this.model;
286
-
287
- // Otherwise use defaults (latest models as of August 24, 2026 - which are Aug 2024 models)
288
- const defaults = {
289
- openai: 'gpt-4o-2024-08-06', // Latest GPT-4o
290
- gemini: 'gemini-1.5-pro-002', // Latest Gemini 1.5 Pro
291
- claude: 'claude-3-5-sonnet-20241022', // Latest Claude 3.5 Sonnet
292
- copilot: 'gpt-4o', // Latest multimodal
293
- groq: 'llama-3.3-70b-versatile', // Latest Llama 3.3
294
- cohere: 'command-r-plus-08-2024', // Latest Command R+
295
- mistral: 'mistral-large-2411', // Latest Mistral Large 2
296
- };
297
-
298
- return defaults[provider] || 'gpt-4o-2024-08-06';
299
- }
300
-
301
- async convertWithOpenAI(text, platform = null) {
302
- if (!this.openai) {
303
- throw new Error('OpenAI not configured');
304
- }
305
-
306
- const model = this.getModelForProvider('openai');
307
-
308
- const response = await this.openai.chat.completions.create({
309
- model: model,
310
- messages: [
311
- { role: 'system', content: this.getSystemPrompt(platform) },
312
- { role: 'user', content: text }
313
- ],
314
- temperature: 0.3,
315
- max_tokens: 500,
316
- });
317
-
318
- let convertedText = response.choices[0].message.content.trim();
319
- convertedText = this.cleanAIResponse(convertedText);
320
-
321
- return convertedText;
322
- }
323
-
324
- async convertWithGemini(text, platform = null) {
325
- if (!this.gemini) {
326
- throw new Error('Gemini not configured');
327
- }
328
-
329
- let modelName = this.getModelForProvider('gemini');
330
-
331
- try {
332
- // Use default Gemini config for best accuracy
333
- const model = this.gemini.getGenerativeModel({ model: modelName });
334
-
335
- // Build prompt and sanitize for Gemini API (requires ASCII-safe ByteString)
336
- const rawPrompt = this.getSystemPrompt(platform).replace('{INPUT}', text);
337
-
338
- // Remove ALL non-ASCII characters that could cause ByteString errors
339
- const sanitizedPrompt = rawPrompt
340
- .replace(/[^\x00-\x7F]/g, ' ') // Replace non-ASCII with spaces
341
- .replace(/\s+/g, ' ') // Normalize multiple spaces
342
- .trim();
343
-
344
- const result = await model.generateContent(sanitizedPrompt);
345
- const response = await result.response;
346
- let convertedText = response.text().trim();
347
-
348
- return this.cleanAIResponse(convertedText);
349
- } catch (error) {
350
- // If the model fails, try with a faster fallback
351
- if (modelName !== 'gemini-2.5-flash') {
352
- console.warn(`Gemini model ${modelName} failed, falling back to gemini-2.5-flash`);
353
- const fallbackModel = this.gemini.getGenerativeModel({ model: 'gemini-2.5-flash' });
354
- const prompt = this.getSystemPrompt(platform).replace('{INPUT}', text);
355
- const sanitizedPrompt = prompt.replace(/[^\x00-\x7F]/g, " ").replace(/\s+/g, ' ').trim();
356
- const result = await fallbackModel.generateContent(sanitizedPrompt);
357
- const response = await result.response;
358
- return this.cleanAIResponse(response.text().trim());
359
- }
360
- throw error;
361
- }
362
- }
363
-
364
- async convertWithCopilot(text, platform = null) {
365
- if (!this.copilot) {
366
- throw new Error('GitHub Copilot not configured');
367
- }
368
-
369
- const model = this.getModelForProvider('copilot');
370
-
371
- const response = await this.copilot.chat.completions.create({
372
- model: model,
373
- messages: [
374
- { role: 'system', content: this.getSystemPrompt(platform) },
375
- { role: 'user', content: text }
376
- ],
377
- temperature: 0.3,
378
- max_tokens: 500,
379
- });
380
-
381
- let convertedText = response.choices[0].message.content.trim();
382
- convertedText = this.cleanAIResponse(convertedText);
383
-
384
- return convertedText;
385
- }
386
-
387
- async convertWithClaude(text, platform = null) {
388
- if (!this.claude) {
389
- throw new Error('Claude not configured');
390
- }
391
-
392
- const model = this.getModelForProvider('claude');
393
- const systemPrompt = this.getSystemPrompt(platform);
394
-
395
- const response = await this.claude.messages.create({
396
- model: model,
397
- max_tokens: 500,
398
- system: systemPrompt,
399
- messages: [
400
- { role: 'user', content: text }
401
- ],
402
- temperature: 0.3,
403
- });
404
-
405
- let convertedText = response.content[0].text.trim();
406
- convertedText = this.cleanAIResponse(convertedText);
407
-
408
- return convertedText;
409
- }
410
-
411
- async convertWithGroq(text, platform = null) {
412
- if (!this.groq) {
413
- throw new Error('Groq not configured');
414
- }
415
-
416
- const model = this.getModelForProvider('groq');
417
-
418
- const response = await this.groq.chat.completions.create({
419
- model: model,
420
- messages: [
421
- { role: 'system', content: this.getSystemPrompt(platform) },
422
- { role: 'user', content: text }
423
- ],
424
- temperature: 0.3,
425
- max_tokens: 500,
426
- });
427
-
428
- let convertedText = response.choices[0].message.content.trim();
429
- convertedText = this.cleanAIResponse(convertedText);
430
-
431
- return convertedText;
432
- }
433
-
434
- async convertWithCohere(text, platform = null) {
435
- if (!this.cohere) {
436
- throw new Error('Cohere not configured');
437
- }
438
-
439
- const model = this.getModelForProvider('cohere');
440
-
441
- const response = await this.cohere.chat.completions.create({
442
- model: model,
443
- messages: [
444
- { role: 'system', content: this.getSystemPrompt(platform) },
445
- { role: 'user', content: text }
446
- ],
447
- temperature: 0.3,
448
- max_tokens: 500,
449
- });
450
-
451
- let convertedText = response.choices[0].message.content.trim();
452
- convertedText = this.cleanAIResponse(convertedText);
453
-
454
- return convertedText;
455
- }
456
-
457
- async convertWithMistral(text, platform = null) {
458
- if (!this.mistral) {
459
- throw new Error('Mistral AI not configured');
460
- }
461
-
462
- const model = this.getModelForProvider('mistral');
463
-
464
- const response = await this.mistral.chat.completions.create({
465
- model: model,
466
- messages: [
467
- { role: 'system', content: this.getSystemPrompt(platform) },
468
- { role: 'user', content: text }
469
- ],
470
- temperature: 0.3,
471
- max_tokens: 500,
472
- });
473
-
474
- let convertedText = response.choices[0].message.content.trim();
475
- convertedText = this.cleanAIResponse(convertedText);
476
-
477
- return convertedText;
478
- }
479
-
480
- // Clean up AI responses - remove markdown, explanations, etc.
481
- cleanAIResponse(text) {
482
- // Remove markdown code blocks
483
- text = text.replace(/```[\s\S]*?```/g, '').trim();
484
- text = text.replace(/```/g, '').trim();
485
-
486
- // Remove any lines that look like explanations (starting with explanatory text)
487
- const lines = text.split('\n');
488
- const cleanedLines = lines.filter(line => {
489
- const trimmed = line.trim();
490
- if (!trimmed) return false;
491
-
492
- // Keep lines that are commands or WAIT
493
- if (trimmed.startsWith('launch ')) return true;
494
- if (trimmed.startsWith('kill ')) return true;
495
- if (trimmed === 'home') return true;
496
- if (trimmed === 'back') return true;
497
- if (trimmed.startsWith('url ')) return true;
498
- if (trimmed.startsWith('click ')) return true;
499
- if (trimmed.startsWith('tap ')) return true;
500
- if (trimmed.startsWith('longpress ')) return true;
501
- if (trimmed.startsWith('swipe ')) return true;
502
- if (trimmed.startsWith('WAIT ')) return true;
503
- if (trimmed.startsWith('screenshot')) return true;
504
- if (trimmed.startsWith('restart')) return true;
505
- if (trimmed.startsWith('rotate ')) return true;
506
- if (trimmed.startsWith('darkmode')) return true;
507
- if (trimmed.startsWith('lightmode')) return true;
508
- if (trimmed.startsWith('airplane ')) return true;
509
- if (trimmed.startsWith('wifi ')) return true;
510
- if (trimmed.startsWith('volume ')) return true;
511
- if (trimmed === 'getLocators') return true;
512
- if (trimmed === 'recent') return true;
513
- if (trimmed === 'notifications') return true;
514
- if (trimmed === 'quicksettings') return true;
515
-
516
- // If it doesn't start with a known command, it might be text to type
517
- // Check if previous line was a command that expects text input
518
- return true; // For now, include it (could be text to type)
519
- });
520
-
521
- return cleanedLines.join('\n').trim();
522
- }
523
-
524
- getAvailableProviders() {
525
- const available = [];
526
-
527
- if (this.openai) available.push({ id: 'openai', name: 'OpenAI', icon: '๐Ÿค–' });
528
- if (this.gemini) available.push({ id: 'gemini', name: 'Google Gemini', icon: 'โœจ' });
529
- if (this.claude) available.push({ id: 'claude', name: 'Anthropic Claude', icon: '๐Ÿง ' });
530
- if (this.copilot) available.push({ id: 'copilot', name: 'GitHub Copilot', icon: '๐Ÿ™' });
531
- if (this.groq) available.push({ id: 'groq', name: 'Groq', icon: 'โšก' });
532
- if (this.cohere) available.push({ id: 'cohere', name: 'Cohere', icon: '๐ŸŒŠ' });
533
- if (this.mistral) available.push({ id: 'mistral', name: 'Mistral AI', icon: '๐ŸŒฌ๏ธ' });
534
-
535
- return available;
536
- }
537
-
538
- setProvider(provider, model = null) {
539
- const available = this.getAvailableProviders().map(p => p.id);
540
- if (available.includes(provider)) {
541
- this.provider = provider;
542
- if (model) {
543
- this.model = model;
544
- }
545
- return true;
546
- }
547
- return false;
548
- }
549
-
550
- getCurrentProvider() {
551
- return {
552
- id: this.provider,
553
- name: this.getProviderName(this.provider),
554
- model: this.model || this.getModelForProvider(this.provider),
555
- available: this.getAvailableProviders(),
556
- };
557
- }
558
-
559
- getProviderName(providerId) {
560
- const names = {
561
- openai: 'OpenAI',
562
- gemini: 'Google Gemini',
563
- claude: 'Anthropic Claude',
564
- copilot: 'GitHub Copilot',
565
- groq: 'Groq',
566
- cohere: 'Cohere',
567
- mistral: 'Mistral AI',
568
- };
569
- return names[providerId] || 'Unknown';
570
- }
571
-
572
- // Clear in-memory cache (no persistent storage)
573
- clearCache() {
574
- const size = this.requestCache.size;
575
- this.requestCache.clear();
576
- console.log(`๐Ÿงน Cleared ${size} cached responses from memory`);
577
- return size;
578
- }
579
-
580
- // Get cache statistics
581
- getCacheStats() {
582
- return {
583
- size: this.requestCache.size,
584
- maxSize: 50,
585
- expiryMs: this.cacheExpiry,
586
- storageType: 'memory-only',
587
- persistentStorage: false,
588
- };
589
- }
590
- }
591
-
592
- module.exports = AIProviderManager;
1
+ const _0x296709=_0x5d63;(function(_0x188b0a,_0x21a2a8){const _0x1dbd1d=_0x5d63,_0x4c45ed=_0x188b0a();while(!![]){try{const _0x38e107=-parseInt(_0x1dbd1d(0x1db))/0x1*(parseInt(_0x1dbd1d(0x240))/0x2)+-parseInt(_0x1dbd1d(0x1a6))/0x3*(-parseInt(_0x1dbd1d(0x288))/0x4)+parseInt(_0x1dbd1d(0x1e4))/0x5*(-parseInt(_0x1dbd1d(0x1bf))/0x6)+-parseInt(_0x1dbd1d(0x18b))/0x7*(-parseInt(_0x1dbd1d(0x1f9))/0x8)+parseInt(_0x1dbd1d(0x225))/0x9+parseInt(_0x1dbd1d(0x1d7))/0xa+parseInt(_0x1dbd1d(0x281))/0xb;if(_0x38e107===_0x21a2a8)break;else _0x4c45ed['push'](_0x4c45ed['shift']());}catch(_0x2a5fe0){_0x4c45ed['push'](_0x4c45ed['shift']());}}}(_0x4583,0x1d9cb));function _0x4583(){const _0x369720=['y3jLyxrL','z2v0q2fJAgvtDgf0CW','u2r0BgS','Bw9KzwXqCM92AwrLCG','y1PAuha','cGPjtvbpuLrbtLq6ifvZzsbNzw5LCMLJigfWCcbUyw1LCYaOzs5NlIWGiMXHDw5JAcbZzxr0Aw5NCYiSicjSyxvUy2GGy2HYB21LiIKkvgHLihn5C3rLBsb3AwXSigf1Dg9TyxrPy2fSBhKGy29UDMvYDcb0BYbWBgf0zM9YBs1ZCgvJAwzPyYbWywnRywDLieLeCZOk','t2XSyw1HicHmB2nHBcK','mtK5ndq5ChbyA0nl','BwvTB3j5lw9UBhK','ic0+igXHDw5JAca','C2nYzwvUC2HVDa','s2DeEfG','y29UDMvYDfDPDgHhCM9X','y0fssg0','y29UDgvUDa','BwTpCwW','t2XSyw1HigLZig5VDcbYzwfJAgfIBguGyxqG','ze9Zs3a','B1Dktwm','z2v0','CM90yxrLia','EhD4CKi','Dxr5r3i','r3jVCq','C2L6zq','BwvZC2fNzxm','Bg9Uz3bYzxnZia','tfHwwwW','Bwf4x3rVA2vUCW','rNrIvfq','CMvZDgfYDa','DKPkDxG','tu5xAM8','Evz6Dxy','mMrWDefqva','y29UDMvYDfDPDgHpCgvUquK','yLzLv3C','sKXYBeO','BgrICuG','Eg11ELm','tM8GBw9KzwXZigLUC3rHBgXLzcbPBIbpBgXHBweUifb1BgWGB25LihDPDgG6ig9SBgfTysbWDwXSigXSyw1HmY4Y','CxvPy2TZzxr0Aw5NCW','8j+oRYbvC2LUzYbJywnOzwqGCMvZCg9UC2uGkgLUlw1LBw9YEsK','yw5KCM9Pza','z2v0u3LZDgvTuhjVBxb0','Bwf6s28','z3jVCq','y29UDMvYDenVBw1HBMq','CgvYC2LZDgvUDfn0B3jHz2u','y29Kzq','qgfUDgHYB3bPyY1HAs9ZzgS','EfzgENy','icaGqwn0AxzLifbYB3zPzgvYoIa','cGPdB21Tyw5KCYb3AwXSigv4zwn1DguGu0LnvuXuqu5ft1vttfKGB24GywXSigrLDMLJzxmGD2L0AcbJB3jYzwn0ihbHy2THz2uGsurZlGO','rxHkyu8','wM56zwu','DgLTzw91Da','CM9Szq','Ahb5BwO','DvLxvMi','yM90Aa','D2fYBG','uM1suKS','yvrhsKS','Bg9JywXtDg9YywDL','wMP0vM4','rerzD00','runptK5sruzvu0ve','8j+MMsboBYbpBgXHBweGBw9KzwWGC2vSzwn0zwqGlsb1C2LUzYbPBNn0ywXSzwqGiG','vNzOExO','CMvXDwvZDenHy2HL','D3HoC0y','Ahr0CdOVl2XVy2fSAg9ZDdOXmtqZna','EKTcChO','sxDMrgy','wM9RCgC','Eg9kzMi','y2XLyxjdywnOzq','whjLvxi','C3rHDhvZ','y29UDMvYDfDPDgHdB3bPBg90','zKjsCgy','4PQG77Ipicbszwz1C2LUzYb0BYbZD2L0y2GGDg8GDw5RBM93BIbbssbWCM92AwrLCIaI','z2v0tw9KzwXgB3jqCM92AwrLCG','BNj5Euy','BMv4Da','z2v0qxzHAwXHyMXLuhjVDMLKzxjZ','igzHAwXLzcWGzMfSBgLUzYbIywnRihrVigDLBwLUAs0YlJuTzMXHC2G','C3rYzwfTAw5Nt25SEq','zfHTs1u','Au9pEfa','rg9mtgi','q2XHDwrLig5VDcbJB25MAwD1CMvK','yxL4vgK','BKvdCwC','cGPnvuXuss1qtefurK9stsbnt0rficHPt1mGkYbbBMrYB2LKigrLDMLJzxmPcKf2ywLSywjSzsbHChbZoIa','8j+NUsbdBgvHCMvKia','rNDKrvm','AwnVBG','mtGXodG2muHYvfL6BG','EurbzNy','cKf2ywLSywjSzsbHChbZigzVCIa','Ahr0Chm6lY9HCgKUy29OzxjLlMfPl3yX','z3b0ltrVltiWmJqTmdGTmdy','Dg9vChbLCKnHC2u','8j+AGcbbssbqCM92AwrLCJOGqvbjlu9UBhKGtw9KzsaOtM8Gtg9JywWGtw9KzwXZkq','ndHQzKD6q1C','y29UDMvYDfDPDgHpBgXHBwe','BwLZDhjHBa','C2XPy2u','CMvZB2X2zu9SBgfTyu1VzgvS','ChjuEK0','qw50AhjVCgLJienSyxvKzq','Bgf1BMnOia','vxnKu3K','EfbowKO','Au1yzwC','ww91igfYzsbHig1VyMLSzsbKzxzPy2uGyxv0B21HDgLVBIbJB21Tyw5KignVBNzLCNrLCI4Gq29UDMvYDcbUyxr1CMfSigXHBMD1ywDLihjLCxvLC3rZigLUDg8GzxHLy3v0ywjSzsbJB21Tyw5KCYbMB3iGAu9tigfUzcbbBMrYB2LKigrLDMLJzxmUcGPbDMfPBgfIBguGy29TBwfUzhmGkhDVCMSGB24GyM90AcbPt1mGjIbbBMrYB2LKktOklsbSyxvUy2GGpgfWCf9Uyw1LpJOGtgf1BMnOigfUigfWCcb1C2LUzYbNzw5LCMLJig5HBwuGkguUzY4SicjSyxvUy2GGC2v0DgLUz3mIlcaIBgf1BMnOignOCM9TzsiPcI0GA2LSBca8yxbWx25HBwu+oIbdBg9Zzs9MB3jJzsbZDg9WigfUigfWCaOTigHVBwu6ieDVihrVigHVBwuGC2nYzwvUicHWCMvZCYbOB21Ligj1DhrVBIKklsbIywnRoIboyxzPz2f0zsbIywnRicHbBMrYB2LKl2LpuYKklsb1CMWGphvYBd46ie9Wzw4GvvjmigLUigjYB3DZzxiklsbJBgLJAYa8Dgv4Dd46ienSAwnRig9UigeGyNv0Dg9Uig9YigvSzw1LBNqGyNKGDMLZAwjSzsb0zxH0cI0Gy2XPy2SGphGSEt46ienSAwnRigf0ihnWzwnPzMLJignVB3jKAw5HDgvZicHLlMCUlcbJBgLJAYa1mdaSmtaWmcKklsb0yxaGphrLEhqVy29VCMrZpJOGu2fTzsbHCYbJBgLJAWOTigXVBMDWCMvZCYa8Dgv4Dc9JB29Yzhm+oIbmB25NihbYzxnZig9UigvSzw1LBNqGB3iGy29VCMrPBMf0zxmklsbZD2LWzsa8zgLYzwn0Aw9UpJOGu3DPCguGDxaVzg93BI9Szwz0l3jPz2H0icH1C2uGzM9YihnJCM9SBgLUzYKklsb0ExbLidX0zxH0pJOGvhLWzsb0zxH0igLUDg8GzM9JDxnLzcbMAwvSzcaOANvZDcb0AguGDgv4DcWGBM8GiNr5CguIihbYzwzPEcKklsbZy3jLzw5ZAg90oIbuywTLihnJCMvLBNnOB3qklsbYzxn0yxj0oIbszxn0yxj0igrLDMLJzqOTihjVDgf0zsa8BgvMDc9YAwDODc9WB3j0CMfPDc9Syw5KC2nHCgu+oIbsB3rHDguGC2nYzwvUcGPPt1mTC3bLy2LMAwmGy29TBwfUzhm6cI0GzgfYA21VzguVBgLNAhrTB2rLoIbdAgfUz2uGyxbWzwfYyw5JzqOTigfPCNbSyw5LidXVBI9VzMy+oIbuB2DNBguGywLYCgXHBMuGBw9KzqOTihDPzMKGpg9Ul29MzJ46ifrVz2DSzsbxAuzPcI0GDM9SDw1LidX1Cc9KB3DUl211Dgu+oIbdB250CM9SihzVBhvTzqOkqw5KCM9Pzc1ZCgvJAwzPyYbJB21Tyw5KCZOklsbNzxrmB2nHDg9YCZOGr2v0igfSBcbPBNrLCMfJDgL2zsbLBgvTzw50CYbVBIbJDxjYzw50ihnJCMvLBGOTihjLy2vUDdOGt3bLBIbYzwnLBNqGyxbWCWOTig5VDgLMAwnHDgLVBNm6ie9Wzw4GBM90AwzPy2f0Aw9UihbHBMvScI0GCxvPy2TZzxr0Aw5NCZOGt3bLBIbXDwLJAYbZzxr0Aw5NCWO','zNPlEum','CMv0CMLLCW','Ahr0Chm6lY9HCgKUz2L0AhvIy29WAwXVDc5JB20','yxbpweG','B21dyxu','DgvZDa','rvPeEgi','zKXMDNy','DhjPBq','q29OzxjLig5VDcbJB25MAwD1CMvK','DxnLCG','Ahr0Chm6lY9HCgKUz3jVCs5JB20VB3bLBMfPl3yX','seT4uha','zwj1r1G','CMvJzw50','C2v0','tw9vqKy','AKjVtwK','B0v0t3m','y29TBwfUzc1YlxbSDxmTmdGTmJaYna','zwrPBuG','ExnxCMS','zMrUshe','rwzlr3i','yMvlCMe','s1nHqw4','y29OzxjL','ChvZAa','ic0+igLpuZOG','Dgv4Da','vw5RBM93BIbbssbWCM92AwrLCJOG','z2vTAw5P','Bvnxrgm','qufXDgK','A2v5CW','y29UDMvYDfDPDgHnAxn0CMfS','twLZDhjHBcbbsq','yxbPs2v5','cGPdt01nt04GueHsqvnfie1bufbjtKDtoGOTicjZy3jVBgWGDxaIie9sicjZy3jVBgWGzg93BIiGlt4GC3DPCguGDxaGt1iGC3DPCguGzg93BGOTicjNBYb0BYa8DxjSpIiGt1iGiM9Wzw4GphvYBd4Iie9sicj2AxnPDca8DxjSpIiGlt4GDxjSigH0DhbZoI8VphvYBd4klsaIChjLC3mGAg9TzsiGt1iGiMDVigHVBwuIie9sicjOB21Ligj1DhrVBIiGlt4GAg9TzqOTicjVCgvUihnLDhrPBMDZiIbpuIaIBgf1BMnOihnLDhrPBMDZiIaTpIbSyxvUy2GGC2v0DgLUz3mklsaIB3bLBIbJyw1LCMeIie9sicjSyxvUy2GGy2fTzxjHiIaTpIbSyxvUy2GGy2fTzxjHcGPfEgfTCgXLCZOklsaIB3bLBIbJAhjVBwuIic0+igXHDw5JAcbJAhjVBwuklsaIBgf1BMnOihnLDhrPBMDZiIaTpIbSyxvUy2GGC2v0DgLUz3mklsaIB3bLBIbJyw1LCMeIic0+igXHDw5JAcbJyw1LCMeklsaIC2nYB2XSihvWiIaTpIbZD2LWzsb1CaOTicjZy3jVBgWGzg93BIiGlt4GC3DPCguGzg93BGOTicjJBgLJAYbVBIb0AguGBg9NAw4GyNv0Dg9UiIaTpIbJBgLJAYbmB2DPBGOTicj0yxaGyxqGy2vUDgvYig9MihnJCMvLBIiGlt4Gy2XPy2SGntqWldeWmdaklsaIC3DPCguGzg93BIiGlt4GC3DPCguGzg93BGOTicj0ExbLigHLBgXVihDVCMXKiIaTpIbOzwXSBYb3B3jSzaOTicj0ywTLigeGC2nYzwvUC2HVDciGlt4GC2nYzwvUC2HVDaOTicjNBYbIywnRiIaTpIbIywnRcI0GiNbYzxnZigHVBwuIic0+igHVBwuklsaIz28GDg8Gz29Vz2XLlMnVBsiGlt4GDxjSigH0DhbZoI8VD3D3lMDVB2DSzs5JB20klsaIDMLZAxqGEw91DhvIzs5JB20Iic0+ihvYBcbODhrWCZOVl3D3DY55B3v0DwjLlMnVBqOTicjSyxvUy2GGq2HYB21LigfUzcbZzwfYy2GGz29Vz2XLlMnVBsiGlt4GBgf1BMnOignOCM9TzqPxquLuidmWmdakDxjSigH0DhbZoI8VD3D3lMDVB2DSzs5JB20klsaIBgf1BMnOihnLDhrPBMDZihnJCM9SBcb1CcbSyxvUy2GGy2fTzxjHigDVihrVigDVB2DSzs5JB20GChjLC3mGAg9TzsiGlt4kBgf1BMnOihnLDhrPBMDZcLDbsvqGmZaWmaPZD2LWzsb1CaPxquLuideWmdakAg9TzqPxquLuiduWmaPSyxvUy2GGy2fTzxjHcLDbsvqGmZaWmaPOB21LcLDbsvqGntaWcNvYBcbODhrWCZOVl3D3DY5NB29NBguUy29TcLDbsvqGmJaWmaPOB21LcGPdB252zxj0ihrOAxmGCMvXDwvZDcb0BYbJB21Tyw5KCZOGiNTjtLbvvh0IcGPduKLusunbtcbsvuXfuYaTifLpvsbnvvnuiezpteXpvYbusevtrsbfwefdveXzoGOXlIbpDxrWDxqGt05mwsbLEgvJDxrHyMXLignVBw1HBMrZlcbVBMuGCgvYigXPBMukmI4GtK8GzxHWBgfUyxrPB25ZlcbotYbTyxjRzg93BIbJB2rLigjSB2nRCYWGtK8Gy29TBwvUDhmSie5pigv4DhjHihrLEhqkmY4GrM9Yig11BhrPlxn0zxaGywn0Aw9UCYWGAw5Zzxj0ifDbsvqGpg1PBgXPC2vJB25KCZ4GyMv0D2vLBIbJB21Tyw5KCWO0lIbvC2uGr0vorvjjqYbHChaGBMfTzxmGkguUzY4SicjSyxvUy2GGC2v0DgLUz3mIlcaIBgf1BMnOignOCM9TzsiSicjSyxvUy2GGy2fTzxjHiIKkns4Grg8GtK9uihvZzsbWBgf0zM9YBs1ZCgvJAwzPyYbWywnRywDLieLeCYaTihvZzsbZAw1WBguGyxbWig5HBwvZcJyUifrOzsbZExn0zw0GD2LSBcbHDxrVBwf0AwnHBgX5ignVBNzLCNqGDg8Gy29YCMvJDcbWywnRywDLieLeCYbMB3iGzwfJAcbWBgf0zM9YBqO1lIbgB3iGvvjmCYWGywX3yxLZihvZztOGDxjSigH0DhbZoI8VzxHHBxbSzs5JB20knI4GrM9YihnJCM9SBgLUzYWGDxnLoIbZD2LWzsb1CcbpuIbZD2LWzsbKB3DUicHUzxzLCIaIC2nYB2XSiIKknY4GrM9YihrLEhqGAw5WDxqSig91Dhb1DcbptKXzihrOzsb0zxH0icHUzxzLCIbPBMnSDwrLicj0ExbLiIbWCMvMAxGPcJGUiezVCIbOB21Ligj1DhrVBIWGB3v0Chv0oIbOB21LicHUzxzLCIaIChjLC3mGAg9TzsiGB3iGiMDVigHVBwuIkqO5lIbxquLuihrPBwLUz3m6igfWChm9mZaWmg1ZlcbWywDLCZ0YmdaWBxmSifvjpteWmdbTCYWGCxvPy2S9ntaWBxmkmtaUifbHCNnLignVBxbVDw5KihjLCxvLC3rZigLUDg8GAw5KAxzPzhvHBcbZDgvWCYb3AxrOifDbsvqGyMv0D2vLBIbLywnOcGPpvvrqvvqGrK9stufuievyqu1qteu6cMXHDw5JAcbJB20UyxbWBguUuhjLzMvYzw5Jzxmkv0fjvcaZmdaWcNn3AxbLihvWcLDbsvqGmtaWmaPOB21LcGPetYbot1qGAw5JBhvKzsbHBNKGB3rOzxiGDgv4Dc4Gu3rHCNqGEw91CIbYzxnWB25Zzsb3AxrOihrOzsbMAxjZDcbJB21Tyw5KlG','Eu1OBK8','BM90AwzPy2f0Aw9UCW','n2HPvvvAtq','ww14Dfm','Ce5vC1e','4P2miefqssbfCNjVCIb3AxrOia','B2XSyw1Hqxv0B01VzgvS','AKzbsfa','DujLDgW','y2XHDwrLltmTns1ZB25UzxqTmJaYndeWmJi','AwTtDuu','r2rmugG','qMfWA24','zxjYB3i','y2fJAgvfEhbPCNK','CKHyC2q','thjbwKK','t3bLBKfj','BwLZDhjHBc1SyxjNzs0YndeX','CfzQtM4','BNLfwxG','vwLbwLu','r3jVCsbUB3qGy29UzMLNDxjLza','cGPqtefurK9sttOG','yvPpEe8','uw1Ru2i','z2TKCMS','BwvZC2fNzq','BgXHBweZlJi','mJm4ndrTzvnUEMK','y2XLyw5bsvjLC3bVBNnL','rgXJuMm','EgTjDuS','C3DPCguG','BMDsthy','svLxs2u','DgfWia','t3bLBKfjig5VDcbJB25MAwD1CMvK','Ahr0Chm6lY9HCgKUBwLZDhjHBc5HAs92mq','zKDwAw0','yMfJAW','lIbtDgfYDcbPDcb3AxrOoIbVBgXHBweGC2vYDMu','l2fWAs90ywDZ','B0rZuKK','iIaTigzHBgXPBMCGyMfJAYb0BYaI','qND6BhG','CMvZCg9UC2u','Bg9N','ENHoDKC','ktOG','C3LZDgvT','s1PJrKm','ueH3v2C','ChjVDMLKzxi','mtaWmJaWnLPZsvL5rW','s0vNBgq','ww9jthK','y0LpCuW','ywTNqva','iIbPCYbUB3qGAw5ZDgfSBgvKlIbqDwXSigL0ihDPDgG6ig9SBgfTysbWDwXSia','qw92t2e','sMXcAMe','CMvWBgfJzq','z2vTAw5PlteUns1WCM8TmdaY','C0DiDvO','y29UDMvYDfDPDgHdBgf1zgu','v0fjvca','tufisM4','BgXHBweTmY4ZltCWyI12zxjZyxrPBgu','zgvSzxrL','Bwf4uMv0CMLLCW','DuLPzNq','y29UDMvYDfDPDgHdB2HLCMu','B3bLBMfP','Aw5PDgLHBgL6zvbYB3zPzgvYCW','C2v0uhjVDMLKzxi','sgP6uuW','uwHYqMm','ndyWotmWBgvTweHH','y2XHDwrL','lI9HAvbYB3zPzgvYC0nVBMzPzW','z2v0tg9JyxrVCNm','mJe4otyYtNfcue1m','zfzfzM8','whbhzKq','CfDhzgi','z2v0r2vUzxjHDgL2zu1VzgvS','ENf2Deq','r29Vz2XLieDLBwLUAq','svPPuvi','y2f1C2u','nuvHuxLHAG','vNPiuee','B2XSyw1H','C3bSAxq','q2nSD28','r2vTAw5Pig1VzgvSia','zMLSDgvY','DfzTwvq','z2v0uhjVDMLKzxjoyw1L','vvbttvG','D2vArey','z2vUzxjHDgvdB250zw50','cGPbufaGuefds0fhrsbnqvbqsu5huZOkv2HLBIb1C2vYihnHExmGiMXHDw5JAcbJAhjVBwuIlcaIB3bLBIbJAhjVBwuIlcbLDgmUlcb1C2uGDgHLignVCNjLy3qGCgfJA2fNzsbjrdOk','z3b0ltrV','Aw9Z','C3rHCNrZv2L0Aa','y29TCgXLDgLVBNm','uMXhEue','C3rVCMfNzvr5Cgu','y2HHDa','EezXv0C','mtqYnJe4nhzetuToAG','Bwf4u2L6zq','Aw5JBhvKzxm','ALPTALi','y2HVAwnLCW','CxP4wwS','z2vTAw5PltiUns1MBgfZAa','z2v0t2XSyw1HqMfZzvvYBa','AezHtNO','t1PSBwG','quKGy29UDMvYC2LVBIbMywLSzwqGka','4PQG77IpicbvBMTUB3DUiefjihbYB3zPzgvYici','zxHWAxj5txm','AM9PBG','BMfTzq','y29UDMvYDfDPDgHhzw1PBMK','yMfZzvvsta','lI9HChbnyxbWAw5NCW','DgvTCgvYyxr1CMu','Bw9KzwW','zgfYA21Vzgu','ExjZvMK','l3yX','veDIELm','zvvMC2G','Bw9KzwXZ','D2LMAsa','t0vrvge','Cu9ZBfC','zM1QEuy','E0LoufvuFq','y29WAwXVDa','qvbjq29UBMvJDgLVBKvYCM9Y','BwfW','q29OzxjL','D3bSCgy','uNHuAxa'];_0x4583=function(){return _0x369720;};return _0x4583();}function _0x5d63(_0x4581f0,_0x13d0ca){_0x4581f0=_0x4581f0-0x171;const _0x4583ea=_0x4583();let _0x5d6382=_0x4583ea[_0x4581f0];if(_0x5d63['HGGbkr']===undefined){var _0x540366=function(_0x32ab1c){const _0xdf80d8='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x1da405='',_0xfc0239='';for(let _0x4b3f54=0x0,_0x5971bb,_0x26b70c,_0x459069=0x0;_0x26b70c=_0x32ab1c['charAt'](_0x459069++);~_0x26b70c&&(_0x5971bb=_0x4b3f54%0x4?_0x5971bb*0x40+_0x26b70c:_0x26b70c,_0x4b3f54++%0x4)?_0x1da405+=String['fromCharCode'](0xff&_0x5971bb>>(-0x2*_0x4b3f54&0x6)):0x0){_0x26b70c=_0xdf80d8['indexOf'](_0x26b70c);}for(let _0x33785d=0x0,_0x16566b=_0x1da405['length'];_0x33785d<_0x16566b;_0x33785d++){_0xfc0239+='%'+('00'+_0x1da405['charCodeAt'](_0x33785d)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0xfc0239);};_0x5d63['pdgQWz']=_0x540366,_0x5d63['Oxerzq']={},_0x5d63['HGGbkr']=!![];}const _0x452dc1=_0x4583ea[0x0],_0x3e37ad=_0x4581f0+_0x452dc1,_0x5cd9da=_0x5d63['Oxerzq'][_0x3e37ad];return!_0x5cd9da?(_0x5d6382=_0x5d63['pdgQWz'](_0x5d6382),_0x5d63['Oxerzq'][_0x3e37ad]=_0x5d6382):_0x5d6382=_0x5cd9da,_0x5d6382;}const {OpenAI}=require(_0x296709(0x1d2)),{GoogleGenerativeAI}=require('@google/generative-ai'),{Anthropic}=require(_0x296709(0x250)),{getPackageId,APP_MAPPINGS}=require(_0x296709(0x20a)),{AI_PROVIDERS_CONFIG}=require(_0x296709(0x1d9)),_0x27ba4a={};_0x27ba4a['cache']=![],_0x27ba4a[_0x296709(0x25e)]=![],_0x27ba4a[_0x296709(0x276)]=![],_0x27ba4a['timeout']=0x7530,_0x27ba4a[_0x296709(0x295)]=0x2;const AI_CONFIG=_0x27ba4a;function resolveProvider(_0xc68f0f){const _0x23d7c8=_0x296709,_0x23a278={};_0x23a278[_0x23d7c8(0x1e5)]=_0x23d7c8(0x181);const _0x345eb3=_0x23a278,_0x4754a2=Object[_0x23d7c8(0x184)](AI_PROVIDERS_CONFIG);if(!_0xc68f0f)return _0x345eb3['VzHPA'];if(_0x4754a2[_0x23d7c8(0x1fb)](_0xc68f0f))return _0xc68f0f;const _0x5e288d=_0x4754a2[_0x23d7c8(0x1fb)](_0x345eb3[_0x23d7c8(0x1e5)])?_0x345eb3[_0x23d7c8(0x1e5)]:_0x4754a2[0x0];return console[_0x23d7c8(0x25b)](_0x23d7c8(0x204)+_0xc68f0f+_0x23d7c8(0x1b5)+_0x5e288d+'\x22.'),console[_0x23d7c8(0x25b)]('\x20\x20\x20Valid\x20providers:\x20'+_0x4754a2[_0x23d7c8(0x206)](',\x20')),_0x5e288d;}function getOllamaBaseUrl(){const _0x34dfa4=_0x296709,_0x20f165={};_0x20f165[_0x34dfa4(0x173)]=_0x34dfa4(0x266);const _0x5a8bc7=_0x20f165;return(process.env.OLLAMA_BASE_URL||_0x5a8bc7[_0x34dfa4(0x173)])[_0x34dfa4(0x1c7)](/\/+$/,'');}class AIProviderManager{constructor(){const _0x516869=_0x296709,_0x1fda24={'KZcFC':'6|3|2|8|5|0|1|7|4','DoLLb':function(_0x3c6584,_0x4364b5){return _0x3c6584(_0x4364b5);},'RlGyA':_0x516869(0x287)},_0x50fe20=_0x1fda24[_0x516869(0x1bc)]['split']('|');let _0x4f47a9=0x0;while(!![]){switch(_0x50fe20[_0x4f47a9++]){case'0':this[_0x516869(0x197)]=0x493e0;continue;case'1':this[_0x516869(0x1d3)]();continue;case'2':this['modelProvider']=this['provider'];continue;case'3':this['model']=process.env.AI_MODEL||null;continue;case'4':console['log'](_0x516869(0x252)+this[_0x516869(0x1be)]);continue;case'5':this[_0x516869(0x264)]=new Map();continue;case'6':this[_0x516869(0x1be)]=_0x1fda24[_0x516869(0x279)](resolveProvider,process.env.AI_PROVIDER);continue;case'7':console[_0x516869(0x1b8)](_0x1fda24[_0x516869(0x1f5)]);continue;case'8':this['ollamaAutoModel']=null;continue;}break;}}[_0x296709(0x1d3)](){const _0x47e9c8=_0x296709,_0x3775a1={'Znzee':function(_0x39faaa,_0x51c553){return _0x39faaa===_0x51c553;},'nryyF':_0x47e9c8(0x285),'UPSMX':'gemini-1.5-pro-002','mkOql':'llama-3.3-70b-versatile','RmRRK':_0x47e9c8(0x175),'xFqWG':_0x47e9c8(0x19b),'RxTip':function(_0x55aefe,_0x263a23){return _0x55aefe!==_0x263a23;},'fdnHq':'UPyjI','Bwzlx':'dDGpG','sGHuZ':_0x47e9c8(0x172),'MeQsL':_0x47e9c8(0x282),'cZZPp':_0x47e9c8(0x296),'cARHm':_0x47e9c8(0x29f),'aImwq':_0x47e9c8(0x27c),'fBRpf':_0x47e9c8(0x284),'xPNZJ':function(_0x55ed81){return _0x55ed81();},'LXVYl':_0x47e9c8(0x1af)};if(process.env.OPENAI_API_KEY){if(_0x3775a1[_0x47e9c8(0x21d)](_0x3775a1[_0x47e9c8(0x178)],_0x3775a1[_0x47e9c8(0x1b6)])){const _0x1f2ee0={};_0x1f2ee0[_0x47e9c8(0x187)]=process.env.OPENAI_API_KEY,_0x1f2ee0[_0x47e9c8(0x256)]=AI_CONFIG[_0x47e9c8(0x256)],_0x1f2ee0[_0x47e9c8(0x1cf)]=AI_CONFIG[_0x47e9c8(0x295)],this[_0x47e9c8(0x1d2)]=new OpenAI(_0x1f2ee0);}else{const _0x20e2ab=_0x5a5ec7[_0x47e9c8(0x184)](_0x3703a5)[_0x47e9c8(0x1ea)](_0x13f272=>_0xfb64e5[_0x13f272][_0x47e9c8(0x1f2)]&&_0x2d8e7e[_0x13f272][_0x47e9c8(0x249)])[_0x47e9c8(0x28b)](0x0,0x1e);_0x3307f1='\x0a\x0aMULTI-PLATFORM\x20MODE\x20(iOS\x20+\x20Android\x20devices)\x0aAvailable\x20apps:\x20'+_0x20e2ab['join'](',\x20')+_0x47e9c8(0x223)+_0x20e2ab['slice'](0x0,0xf)[_0x47e9c8(0x21a)](_0x2582e1=>'-\x20'+_0x2582e1+'\x20->\x20iOS:\x20'+_0x17000d[_0x2582e1][_0x47e9c8(0x1f2)]+'\x20/\x20Android:\x20'+_0x2c88b5[_0x2582e1]['android'])[_0x47e9c8(0x206)]('\x0a')+_0x47e9c8(0x253);}}if(process.env.GEMINI_API_KEY){if(_0x3775a1[_0x47e9c8(0x1c9)]!==_0x3775a1[_0x47e9c8(0x1c9)]){if(this[_0x47e9c8(0x20c)]&&_0x3775a1['Znzee'](this[_0x47e9c8(0x221)],_0x40a996))return this['model'];const _0x1bba7d={};_0x1bba7d[_0x47e9c8(0x1d2)]=_0x3775a1[_0x47e9c8(0x272)],_0x1bba7d['gemini']=_0x3775a1[_0x47e9c8(0x1ed)],_0x1bba7d[_0x47e9c8(0x1d8)]=_0x47e9c8(0x192),_0x1bba7d[_0x47e9c8(0x218)]='gpt-4o',_0x1bba7d[_0x47e9c8(0x24c)]=_0x3775a1[_0x47e9c8(0x22d)],_0x1bba7d[_0x47e9c8(0x17c)]=_0x3775a1[_0x47e9c8(0x25c)],_0x1bba7d['mistral']=_0x3775a1[_0x47e9c8(0x1f8)],_0x1bba7d[_0x47e9c8(0x1e6)]=_0x523228.env.OLLAMA_MODEL||_0x47e9c8(0x1a5);const _0x381c2c=_0x1bba7d;return _0x381c2c[_0x1bf979]||_0x47e9c8(0x285);}else this[_0x47e9c8(0x181)]=new GoogleGenerativeAI(process.env.GEMINI_API_KEY);}if(process.env.CLAUDE_API_KEY){const _0x1e985f={};_0x1e985f[_0x47e9c8(0x187)]=process.env.CLAUDE_API_KEY,_0x1e985f['timeout']=AI_CONFIG[_0x47e9c8(0x256)],_0x1e985f[_0x47e9c8(0x1cf)]=AI_CONFIG[_0x47e9c8(0x295)],this[_0x47e9c8(0x1d8)]=new Anthropic(_0x1e985f);}if(process.env.GITHUB_TOKEN){if(_0x3775a1[_0x47e9c8(0x255)](_0x3775a1['MeQsL'],_0x47e9c8(0x234)))throw new _0xcb871(_0x47e9c8(0x27a));else{const _0x12950a={};_0x12950a[_0x47e9c8(0x187)]=process.env.GITHUB_TOKEN,_0x12950a[_0x47e9c8(0x209)]=_0x3775a1[_0x47e9c8(0x222)],_0x12950a[_0x47e9c8(0x256)]=AI_CONFIG[_0x47e9c8(0x256)],_0x12950a['maxRetries']=AI_CONFIG[_0x47e9c8(0x295)],this[_0x47e9c8(0x218)]=new OpenAI(_0x12950a);}}if(process.env.GROQ_API_KEY){const _0x106342={};_0x106342[_0x47e9c8(0x187)]=process.env.GROQ_API_KEY,_0x106342[_0x47e9c8(0x209)]=_0x3775a1[_0x47e9c8(0x22b)],_0x106342[_0x47e9c8(0x256)]=AI_CONFIG[_0x47e9c8(0x256)],_0x106342[_0x47e9c8(0x1cf)]=AI_CONFIG[_0x47e9c8(0x295)],this[_0x47e9c8(0x24c)]=new OpenAI(_0x106342);}if(process.env.COHERE_API_KEY){if(_0x3775a1[_0x47e9c8(0x21d)](_0x3775a1['aImwq'],_0x47e9c8(0x23f))){const _0x2b252d={};_0x2b252d[_0x47e9c8(0x187)]=process.env.COHERE_API_KEY,_0x2b252d['baseURL']=_0x3775a1[_0x47e9c8(0x26f)],_0x2b252d[_0x47e9c8(0x256)]=AI_CONFIG[_0x47e9c8(0x256)],_0x2b252d[_0x47e9c8(0x1cf)]=AI_CONFIG[_0x47e9c8(0x295)],this[_0x47e9c8(0x17c)]=new OpenAI(_0x2b252d);}else this[_0x47e9c8(0x20c)]=_0x2194da;}this[_0x47e9c8(0x1e6)]=new OpenAI({'apiKey':'ollama','baseURL':_0x3775a1[_0x47e9c8(0x291)](getOllamaBaseUrl)+_0x47e9c8(0x20f),'timeout':AI_CONFIG[_0x47e9c8(0x256)],'maxRetries':AI_CONFIG[_0x47e9c8(0x295)]});if(process.env.MISTRAL_API_KEY){const _0x213b49={};_0x213b49[_0x47e9c8(0x187)]=process.env.MISTRAL_API_KEY,_0x213b49[_0x47e9c8(0x209)]=_0x3775a1[_0x47e9c8(0x239)],_0x213b49[_0x47e9c8(0x256)]=AI_CONFIG['timeout'],_0x213b49['maxRetries']=AI_CONFIG[_0x47e9c8(0x295)],this[_0x47e9c8(0x28a)]=new OpenAI(_0x213b49);}}[_0x296709(0x24a)](_0x56a960=null){const _0x2a3e7d=_0x296709,_0x2474a9={};_0x2474a9['iOOxP']=function(_0x1f4d56,_0xb0d8d8){return _0x1f4d56===_0xb0d8d8;},_0x2474a9[_0x2a3e7d(0x27f)]=_0x2a3e7d(0x25a),_0x2474a9['JlBja']=function(_0x5acc2d,_0x227e91){return _0x5acc2d!==_0x227e91;};const _0xfff471=_0x2474a9;let _0x2f0fd6='';if(_0xfff471[_0x2a3e7d(0x278)](_0x56a960,_0xfff471[_0x2a3e7d(0x27f)])){if(_0xfff471[_0x2a3e7d(0x1c6)](_0x2a3e7d(0x290),_0x2a3e7d(0x290))){const _0xd784b6={};_0xd784b6['apiKey']=_0x42f136.env.OPENAI_API_KEY,_0xd784b6[_0x2a3e7d(0x256)]=_0x1d1e3c[_0x2a3e7d(0x256)],_0xd784b6['maxRetries']=_0x221c13[_0x2a3e7d(0x295)],this[_0x2a3e7d(0x1d2)]=new _0x14a2cb(_0xd784b6);}else{const _0x545e96=Object[_0x2a3e7d(0x184)](APP_MAPPINGS)[_0x2a3e7d(0x1ea)](_0x6dfe5=>APP_MAPPINGS[_0x6dfe5]['ios']&&APP_MAPPINGS[_0x6dfe5][_0x2a3e7d(0x249)])['slice'](0x0,0x1e);_0x2f0fd6=_0x2a3e7d(0x27d)+_0x545e96[_0x2a3e7d(0x206)](',\x20')+_0x2a3e7d(0x223)+_0x545e96[_0x2a3e7d(0x28b)](0x0,0xf)[_0x2a3e7d(0x21a)](_0x8e789d=>'-\x20'+_0x8e789d+_0x2a3e7d(0x17e)+APP_MAPPINGS[_0x8e789d][_0x2a3e7d(0x1f2)]+'\x20/\x20Android:\x20'+APP_MAPPINGS[_0x8e789d][_0x2a3e7d(0x249)])[_0x2a3e7d(0x206)]('\x0a')+_0x2a3e7d(0x253);}}else{if(_0x56a960){const _0x1ede69=Object[_0x2a3e7d(0x184)](APP_MAPPINGS)['filter'](_0x122f81=>APP_MAPPINGS[_0x122f81][_0x56a960])[_0x2a3e7d(0x28b)](0x0,0x32);_0x2f0fd6=_0x2a3e7d(0x1a0)+_0x56a960[_0x2a3e7d(0x286)]()+_0x2a3e7d(0x283)+_0x56a960+':\x20'+_0x1ede69[_0x2a3e7d(0x206)](',\x20')+_0x2a3e7d(0x1f0)+_0x1ede69[_0x2a3e7d(0x28b)](0x0,0x14)['map'](_0x2fd9de=>'-\x20'+_0x2fd9de+_0x2a3e7d(0x227)+APP_MAPPINGS[_0x2fd9de][_0x56a960])['join']('\x0a')+'\x0a';}}return _0x2a3e7d(0x293)+_0x2f0fd6+_0x2a3e7d(0x188);}async[_0x296709(0x24d)](_0x5154bd,_0x5db6d1=null,_0xee1533=null){const _0x1d8a13=_0x296709,_0x25a885={'weZDF':function(_0x236740){return _0x236740();},'AAqti':function(_0x7e85fc,_0x3b936e){return _0x7e85fc<_0x3b936e;},'GdLPh':function(_0x476a13,_0x21ee55){return _0x476a13-_0x21ee55;},'pVjNn':_0x1d8a13(0x248),'Bapkn':_0x1d8a13(0x251),'zFKaT':_0x1d8a13(0x1d2),'MNWjo':'claude','AovOa':_0x1d8a13(0x24c),'ebuGX':_0x1d8a13(0x1e6),'ZjtVn':function(_0x4a407c,_0x35299e){return _0x4a407c!==_0x35299e;},'dVEfo':_0x1d8a13(0x1e0)},_0x4fed1a=_0xee1533||this[_0x1d8a13(0x1be)],_0x5a2f43=_0x4fed1a+'-'+_0x5db6d1+'-'+_0x5154bd,_0x46d341=this[_0x1d8a13(0x264)][_0x1d8a13(0x231)](_0x5a2f43);if(_0x46d341&&_0x25a885[_0x1d8a13(0x183)](_0x25a885[_0x1d8a13(0x194)](Date['now'](),_0x46d341['timestamp']),this[_0x1d8a13(0x197)]))return console[_0x1d8a13(0x1b8)](_0x25a885[_0x1d8a13(0x19c)]),_0x46d341['response'];try{if(_0x25a885[_0x1d8a13(0x195)]===_0x25a885[_0x1d8a13(0x195)]){let _0x50ad07;switch(_0x4fed1a){case _0x25a885['zFKaT']:_0x50ad07=await this[_0x1d8a13(0x241)](_0x5154bd,_0x5db6d1);break;case _0x1d8a13(0x181):_0x50ad07=await this[_0x1d8a13(0x208)](_0x5154bd,_0x5db6d1);break;case _0x25a885[_0x1d8a13(0x23e)]:_0x50ad07=await this[_0x1d8a13(0x1ca)](_0x5154bd,_0x5db6d1);break;case'copilot':_0x50ad07=await this[_0x1d8a13(0x26e)](_0x5154bd,_0x5db6d1);break;case _0x25a885[_0x1d8a13(0x1c5)]:_0x50ad07=await this['convertWithGroq'](_0x5154bd,_0x5db6d1);break;case _0x1d8a13(0x17c):_0x50ad07=await this['convertWithCohere'](_0x5154bd,_0x5db6d1);break;case _0x1d8a13(0x28a):_0x50ad07=await this[_0x1d8a13(0x185)](_0x5154bd,_0x5db6d1);break;case _0x25a885[_0x1d8a13(0x2a1)]:_0x50ad07=await this['convertWithOllama'](_0x5154bd,_0x5db6d1);break;default:throw new Error(_0x1d8a13(0x180)+_0x4fed1a);}this[_0x1d8a13(0x264)][_0x1d8a13(0x171)](_0x5a2f43,{'response':_0x50ad07,'timestamp':Date['now']()});if(this[_0x1d8a13(0x264)][_0x1d8a13(0x236)]>0x32){if(_0x25a885[_0x1d8a13(0x25f)](_0x25a885[_0x1d8a13(0x1dc)],_0x1d8a13(0x193))){const _0x400b7c=this['requestCache']['keys']()[_0x1d8a13(0x273)]()['value'];this[_0x1d8a13(0x264)][_0x1d8a13(0x1ce)](_0x400b7c);}else throw new _0x10db61('Ollama\x20is\x20not\x20reachable\x20at\x20'+_0x25a885[_0x1d8a13(0x1ee)](_0x325a6d)+'.\x20Start\x20it\x20with:\x20ollama\x20serve');}return _0x50ad07;}else throw new _0x2f9332('Gemini\x20not\x20configured');}catch(_0x1fcb5f){console[_0x1d8a13(0x196)](_0x1d8a13(0x18e)+_0x4fed1a+':',_0x1fcb5f[_0x1d8a13(0x1a4)]);throw new Error(_0x1d8a13(0x203)+_0x4fed1a+_0x1d8a13(0x1ba)+_0x1fcb5f[_0x1d8a13(0x1a4)]);}}[_0x296709(0x271)](_0x13b863){const _0x1e63fb=_0x296709,_0x26f9a2={};_0x26f9a2['oDsRI']=function(_0x316e6f,_0x287719){return _0x316e6f===_0x287719;},_0x26f9a2['ldbqH']=_0x1e63fb(0x285),_0x26f9a2[_0x1e63fb(0x242)]=_0x1e63fb(0x1c8),_0x26f9a2['gsnKD']=_0x1e63fb(0x192),_0x26f9a2[_0x1e63fb(0x294)]=_0x1e63fb(0x1f1),_0x26f9a2['xwxrB']=_0x1e63fb(0x19b),_0x26f9a2[_0x1e63fb(0x1e8)]=_0x1e63fb(0x1a5);const _0x4af879=_0x26f9a2;if(this[_0x1e63fb(0x20c)]&&_0x4af879[_0x1e63fb(0x1b4)](this[_0x1e63fb(0x221)],_0x13b863))return this[_0x1e63fb(0x20c)];const _0x48434f={};_0x48434f[_0x1e63fb(0x1d2)]=_0x4af879[_0x1e63fb(0x244)],_0x48434f[_0x1e63fb(0x181)]=_0x4af879[_0x1e63fb(0x242)],_0x48434f[_0x1e63fb(0x1d8)]=_0x4af879['gsnKD'],_0x48434f[_0x1e63fb(0x218)]=_0x4af879['fzKyC'],_0x48434f['groq']=_0x1e63fb(0x1cd),_0x48434f[_0x1e63fb(0x17c)]='command-r-plus-08-2024',_0x48434f[_0x1e63fb(0x28a)]=_0x4af879[_0x1e63fb(0x233)],_0x48434f[_0x1e63fb(0x1e6)]=process.env.OLLAMA_MODEL||_0x4af879['Cclwo'];const _0x1ad849=_0x48434f;return _0x1ad849[_0x13b863]||_0x4af879[_0x1e63fb(0x244)];}async['convertWithOpenAI'](_0x5c1566,_0x37ecd1=null){const _0x5b71c5=_0x296709,_0x2ee856={};_0x2ee856[_0x5b71c5(0x1ac)]=_0x5b71c5(0x1ae),_0x2ee856[_0x5b71c5(0x1a8)]='openai',_0x2ee856[_0x5b71c5(0x215)]=_0x5b71c5(0x29e);const _0x23089f=_0x2ee856;if(!this[_0x5b71c5(0x1d2)])throw new Error(_0x23089f[_0x5b71c5(0x1ac)]);const _0x4ce718=this['getModelForProvider'](_0x23089f[_0x5b71c5(0x1a8)]),_0x221f63={};_0x221f63[_0x5b71c5(0x257)]=_0x23089f[_0x5b71c5(0x215)],_0x221f63[_0x5b71c5(0x22c)]=_0x5c1566;const _0x5a37be=await this['openai'][_0x5b71c5(0x1f7)][_0x5b71c5(0x1f4)][_0x5b71c5(0x21e)]({'model':_0x4ce718,'messages':[{'role':_0x5b71c5(0x1bb),'content':this[_0x5b71c5(0x24a)](_0x37ecd1)},_0x221f63],'temperature':0.3,'max_tokens':0x1f4});let _0x331bb4=_0x5a37be[_0x5b71c5(0x1fd)][0x0][_0x5b71c5(0x1a4)][_0x5b71c5(0x22c)][_0x5b71c5(0x29c)]();return _0x331bb4=this[_0x5b71c5(0x1a7)](_0x331bb4),_0x331bb4;}async[_0x296709(0x208)](_0x299983,_0x441ca9=null){const _0x2d6fa7=_0x296709,_0x3b7c87={};_0x3b7c87[_0x2d6fa7(0x176)]='gemini',_0x3b7c87[_0x2d6fa7(0x1fe)]=_0x2d6fa7(0x217),_0x3b7c87[_0x2d6fa7(0x1a2)]=_0x2d6fa7(0x1ff);const _0x2c1607=_0x3b7c87;if(!this['gemini'])throw new Error('Gemini\x20not\x20configured');let _0x23b929=this[_0x2d6fa7(0x271)](_0x2c1607['edimH']);try{const _0x3e09c3={};_0x3e09c3[_0x2d6fa7(0x20c)]=_0x23b929;const _0x44f5e2=this[_0x2d6fa7(0x181)][_0x2d6fa7(0x1df)](_0x3e09c3),_0x2d2211=this[_0x2d6fa7(0x24a)](_0x441ca9)[_0x2d6fa7(0x1c7)](_0x2c1607[_0x2d6fa7(0x1fe)],_0x299983),_0x1dc711=_0x2d2211['replace'](/[^\x00-\x7F]/g,'\x20')['replace'](/\s+/g,'\x20')[_0x2d6fa7(0x29c)](),_0x2a7635=await _0x44f5e2[_0x2d6fa7(0x1ef)](_0x1dc711),_0x132f3f=await _0x2a7635[_0x2d6fa7(0x1b7)];let _0x44e1f6=_0x132f3f[_0x2d6fa7(0x17f)]()[_0x2d6fa7(0x29c)]();return this[_0x2d6fa7(0x1a7)](_0x44e1f6);}catch(_0x31334a){if(_0x23b929!==_0x2c1607[_0x2d6fa7(0x1a2)]){console[_0x2d6fa7(0x25b)](_0x2d6fa7(0x1e9)+_0x23b929+_0x2d6fa7(0x275));const _0x54f968={};_0x54f968[_0x2d6fa7(0x20c)]='gemini-2.5-flash';const _0x212897=this['gemini'][_0x2d6fa7(0x1df)](_0x54f968),_0x2a11ea=this[_0x2d6fa7(0x24a)](_0x441ca9)['replace'](_0x2c1607[_0x2d6fa7(0x1fe)],_0x299983),_0x4ca19f=_0x2a11ea['replace'](/[^\x00-\x7F]/g,'\x20')[_0x2d6fa7(0x1c7)](/\s+/g,'\x20')['trim'](),_0x4b4c1c=await _0x212897[_0x2d6fa7(0x1ef)](_0x4ca19f),_0x84c1f4=await _0x4b4c1c[_0x2d6fa7(0x1b7)];return this[_0x2d6fa7(0x1a7)](_0x84c1f4[_0x2d6fa7(0x17f)]()[_0x2d6fa7(0x29c)]());}throw _0x31334a;}}async[_0x296709(0x26e)](_0x5cbc9c,_0x2c7bd7=null){const _0x44fcdf=_0x296709,_0x45a44a={};_0x45a44a[_0x44fcdf(0x2a0)]='GitHub\x20Copilot\x20not\x20configured',_0x45a44a[_0x44fcdf(0x24b)]=_0x44fcdf(0x218),_0x45a44a[_0x44fcdf(0x1c2)]=_0x44fcdf(0x1bb),_0x45a44a['ngRLv']='user';const _0x3e0360=_0x45a44a;if(!this[_0x44fcdf(0x218)])throw new Error(_0x3e0360['HKxPp']);const _0x12d375=this[_0x44fcdf(0x271)](_0x3e0360[_0x44fcdf(0x24b)]),_0xb21ef9=await this['copilot'][_0x44fcdf(0x1f7)][_0x44fcdf(0x1f4)][_0x44fcdf(0x21e)]({'model':_0x12d375,'messages':[{'role':_0x3e0360[_0x44fcdf(0x1c2)],'content':this[_0x44fcdf(0x24a)](_0x2c7bd7)},{'role':_0x3e0360[_0x44fcdf(0x1ab)],'content':_0x5cbc9c}],'temperature':0.3,'max_tokens':0x1f4});let _0x56f982=_0xb21ef9[_0x44fcdf(0x1fd)][0x0]['message']['content'][_0x44fcdf(0x29c)]();return _0x56f982=this[_0x44fcdf(0x1a7)](_0x56f982),_0x56f982;}async[_0x296709(0x1ca)](_0x26e5b9,_0x5ce179=null){const _0x471bb4=_0x296709,_0x4b1d91={};_0x4b1d91[_0x471bb4(0x220)]='Claude\x20not\x20configured',_0x4b1d91[_0x471bb4(0x258)]=_0x471bb4(0x1d8),_0x4b1d91[_0x471bb4(0x1b0)]=_0x471bb4(0x29e);const _0x21aab4=_0x4b1d91;if(!this[_0x471bb4(0x1d8)])throw new Error(_0x21aab4[_0x471bb4(0x220)]);const _0x574cf4=this[_0x471bb4(0x271)](_0x21aab4[_0x471bb4(0x258)]),_0x4c34ad=this[_0x471bb4(0x24a)](_0x5ce179),_0x16d138={};_0x16d138['role']=_0x21aab4[_0x471bb4(0x1b0)],_0x16d138['content']=_0x26e5b9;const _0x89e94d={};_0x89e94d[_0x471bb4(0x20c)]=_0x574cf4,_0x89e94d[_0x471bb4(0x23a)]=0x1f4,_0x89e94d[_0x471bb4(0x1bb)]=_0x4c34ad,_0x89e94d[_0x471bb4(0x237)]=[_0x16d138],_0x89e94d[_0x471bb4(0x20b)]=0.3;const _0x2af6d2=await this[_0x471bb4(0x1d8)]['messages'][_0x471bb4(0x21e)](_0x89e94d);let _0x3e8214=_0x2af6d2[_0x471bb4(0x22c)][0x0][_0x471bb4(0x17f)]['trim']();return _0x3e8214=this[_0x471bb4(0x1a7)](_0x3e8214),_0x3e8214;}async[_0x296709(0x28c)](){const _0x105473=_0x296709,_0x226f91={'swqUi':function(_0x27d0b5,_0x2d566a){return _0x27d0b5===_0x2d566a;},'dOsKp':function(_0x7f7511,_0x3ec6f5){return _0x7f7511(_0x3ec6f5);},'OZlmh':function(_0x24ec10){return _0x24ec10();},'HjzQL':function(_0x300534,_0x4e65f5){return _0x300534===_0x4e65f5;},'vAqRx':_0x105473(0x199),'beKra':_0x105473(0x246)},_0x3f0c38=_0x226f91['swqUi'](this['modelProvider'],_0x105473(0x1e6))&&this[_0x105473(0x20c)]||process.env.OLLAMA_MODEL;if(_0x3f0c38)return _0x3f0c38;if(this['ollamaAutoModel'])return this[_0x105473(0x18f)];const _0x29a2af=_0x226f91[_0x105473(0x22f)](require,'axios');let _0x4810be=[];try{const _0x40337e={};_0x40337e[_0x105473(0x256)]=0xbb8;const _0x387c3c=await _0x29a2af[_0x105473(0x231)](_0x226f91[_0x105473(0x202)](getOllamaBaseUrl)+_0x105473(0x1b3),_0x40337e);_0x4810be=_0x387c3c['data']?.[_0x105473(0x212)]||[];}catch(_0x5637cb){if(_0x226f91[_0x105473(0x1d5)](_0x226f91['vAqRx'],_0x105473(0x20e)))throw new _0x18345a(_0x105473(0x22e)+_0x1aa51b()+'.\x20Start\x20it\x20with:\x20ollama\x20serve');else throw new Error(_0x105473(0x22e)+_0x226f91[_0x105473(0x202)](getOllamaBaseUrl)+'.\x20Start\x20it\x20with:\x20ollama\x20serve');}if(!_0x4810be['length']){if(_0x105473(0x1b9)===_0x105473(0x1a9))return{'id':this['provider'],'name':this[_0x105473(0x1ec)](this[_0x105473(0x1be)]),'model':this[_0x105473(0x20c)]||this[_0x105473(0x271)](this[_0x105473(0x1be)]),'available':this[_0x105473(0x274)]()};else throw new Error(_0x226f91[_0x105473(0x17a)]);}return this[_0x105473(0x18f)]=_0x4810be[0x0][_0x105473(0x207)],console['log'](_0x105473(0x262)+this[_0x105473(0x18f)]+'\x22'),this['ollamaAutoModel'];}async[_0x296709(0x289)](_0xeb32ad,_0x472fb7=null){const _0x10ca44=_0x296709,_0x1e95a3={'uYWVb':_0x10ca44(0x226),'IZiQR':_0x10ca44(0x190),'IwfDf':_0x10ca44(0x1bb),'vJJux':_0x10ca44(0x29e),'KSaAn':function(_0x1d03fb,_0x5c44d0){return _0x1d03fb===_0x5c44d0;},'UiAZU':_0x10ca44(0x261),'nyEYx':function(_0x454f02){return _0x454f02();}},_0x12848b=await this['resolveOllamaModel']();let _0x442dc3;try{if(_0x1e95a3[_0x10ca44(0x1e2)]===_0x1e95a3[_0x10ca44(0x1e2)])_0x442dc3=await this[_0x10ca44(0x1e6)][_0x10ca44(0x1f7)][_0x10ca44(0x1f4)][_0x10ca44(0x21e)]({'model':_0x12848b,'messages':[{'role':_0x1e95a3[_0x10ca44(0x268)],'content':this[_0x10ca44(0x24a)](_0x472fb7)},{'role':_0x1e95a3[_0x10ca44(0x23d)],'content':_0xeb32ad}],'temperature':0.3,'max_tokens':0x1f4});else{const _0x15ba8a={};return _0x15ba8a[_0x10ca44(0x236)]=this[_0x10ca44(0x264)]['size'],_0x15ba8a[_0x10ca44(0x1fa)]=0x32,_0x15ba8a[_0x10ca44(0x205)]=this[_0x10ca44(0x197)],_0x15ba8a[_0x10ca44(0x1f6)]=_0x1e95a3[_0x10ca44(0x259)],_0x15ba8a['persistentStorage']=![],_0x15ba8a;}}catch(_0x3cbfdb){const _0x35e733=_0x3cbfdb['name']===_0x10ca44(0x219)||_0x1e95a3['KSaAn'](_0x3cbfdb[_0x10ca44(0x24f)],_0x1e95a3[_0x10ca44(0x19e)])||_0x1e95a3['KSaAn'](_0x3cbfdb[_0x10ca44(0x1e3)]?.['code'],_0x1e95a3[_0x10ca44(0x19e)])||/connection error|fetch failed|ECONNREFUSED/i[_0x10ca44(0x299)](_0x3cbfdb[_0x10ca44(0x1a4)]||'');if(_0x35e733)throw new Error(_0x10ca44(0x22e)+_0x1e95a3[_0x10ca44(0x19d)](getOllamaBaseUrl)+_0x10ca44(0x1b2));if(_0x1e95a3[_0x10ca44(0x17b)](_0x3cbfdb[_0x10ca44(0x26d)],0x194))throw new Error('Model\x20\x22'+_0x12848b+_0x10ca44(0x1c4)+_0x12848b);throw _0x3cbfdb;}let _0x580657=_0x442dc3['choices'][0x0][_0x10ca44(0x1a4)][_0x10ca44(0x22c)][_0x10ca44(0x29c)]();return _0x580657=this[_0x10ca44(0x1a7)](_0x580657),_0x580657;}async[_0x296709(0x22a)](_0x199451,_0x2cdd1e=null){const _0x413c3b=_0x296709,_0x251b9e={};_0x251b9e[_0x413c3b(0x23b)]=_0x413c3b(0x19f),_0x251b9e[_0x413c3b(0x245)]=_0x413c3b(0x24c),_0x251b9e[_0x413c3b(0x1c0)]=_0x413c3b(0x1bb),_0x251b9e[_0x413c3b(0x1d0)]=_0x413c3b(0x29e);const _0x3fbd07=_0x251b9e;if(!this[_0x413c3b(0x24c)])throw new Error(_0x3fbd07[_0x413c3b(0x23b)]);const _0x2a4b0e=this['getModelForProvider'](_0x3fbd07['xmuzS']),_0x202f2a=await this['groq'][_0x413c3b(0x1f7)][_0x413c3b(0x1f4)][_0x413c3b(0x21e)]({'model':_0x2a4b0e,'messages':[{'role':_0x3fbd07['KEgld'],'content':this[_0x413c3b(0x24a)](_0x2cdd1e)},{'role':_0x3fbd07[_0x413c3b(0x1d0)],'content':_0x199451}],'temperature':0.3,'max_tokens':0x1f4});let _0x297de1=_0x202f2a[_0x413c3b(0x1fd)][0x0][_0x413c3b(0x1a4)][_0x413c3b(0x22c)][_0x413c3b(0x29c)]();return _0x297de1=this['cleanAIResponse'](_0x297de1),_0x297de1;}async[_0x296709(0x1d1)](_0x4c05a6,_0x5b1b99=null){const _0x36b171=_0x296709,_0x127b8e={};_0x127b8e[_0x36b171(0x229)]=_0x36b171(0x29d),_0x127b8e[_0x36b171(0x1c1)]=_0x36b171(0x17c),_0x127b8e[_0x36b171(0x1d6)]=_0x36b171(0x29e);const _0xc12ee1=_0x127b8e;if(!this['cohere'])throw new Error(_0xc12ee1[_0x36b171(0x229)]);const _0x18cfd6=this['getModelForProvider'](_0xc12ee1['YoILy']),_0x4e50c3={};_0x4e50c3[_0x36b171(0x257)]=_0xc12ee1['QhrBc'],_0x4e50c3[_0x36b171(0x22c)]=_0x4c05a6;const _0xc06be4=await this[_0x36b171(0x17c)]['chat'][_0x36b171(0x1f4)][_0x36b171(0x21e)]({'model':_0x18cfd6,'messages':[{'role':'system','content':this[_0x36b171(0x24a)](_0x5b1b99)},_0x4e50c3],'temperature':0.3,'max_tokens':0x1f4});let _0x2eb73b=_0xc06be4[_0x36b171(0x1fd)][0x0][_0x36b171(0x1a4)]['content'][_0x36b171(0x29c)]();return _0x2eb73b=this[_0x36b171(0x1a7)](_0x2eb73b),_0x2eb73b;}async[_0x296709(0x185)](_0x57075c,_0x4ec145=null){const _0x4e4420=_0x296709,_0x4f3c5d={};_0x4f3c5d[_0x4e4420(0x1a3)]='Mistral\x20AI\x20not\x20configured',_0x4f3c5d[_0x4e4420(0x216)]=_0x4e4420(0x28a),_0x4f3c5d[_0x4e4420(0x1a1)]=_0x4e4420(0x1bb),_0x4f3c5d['Zokpg']=_0x4e4420(0x29e);const _0x16f368=_0x4f3c5d;if(!this[_0x4e4420(0x28a)])throw new Error(_0x16f368['gkdrk']);const _0x189562=this[_0x4e4420(0x271)](_0x16f368[_0x4e4420(0x216)]),_0x5bad87=await this[_0x4e4420(0x28a)][_0x4e4420(0x1f7)][_0x4e4420(0x1f4)]['create']({'model':_0x189562,'messages':[{'role':_0x16f368[_0x4e4420(0x1a1)],'content':this[_0x4e4420(0x24a)](_0x4ec145)},{'role':_0x16f368[_0x4e4420(0x269)],'content':_0x57075c}],'temperature':0.3,'max_tokens':0x1f4});let _0x49c469=_0x5bad87[_0x4e4420(0x1fd)][0x0][_0x4e4420(0x1a4)]['content'][_0x4e4420(0x29c)]();return _0x49c469=this['cleanAIResponse'](_0x49c469),_0x49c469;}[_0x296709(0x1a7)](_0x29d21c){const _0x36cc1e=_0x296709,_0x3c72d6={};_0x3c72d6[_0x36cc1e(0x1bd)]=_0x36cc1e(0x28f),_0x3c72d6['fLfvv']='kill\x20',_0x3c72d6[_0x36cc1e(0x1de)]=function(_0x3e850b,_0x25b5f8){return _0x3e850b===_0x25b5f8;},_0x3c72d6[_0x36cc1e(0x292)]='home',_0x3c72d6[_0x36cc1e(0x265)]=_0x36cc1e(0x1b1),_0x3c72d6[_0x36cc1e(0x29a)]='click\x20',_0x3c72d6[_0x36cc1e(0x1cc)]=_0x36cc1e(0x1ad),_0x3c72d6['zKBpz']=_0x36cc1e(0x238),_0x3c72d6[_0x36cc1e(0x182)]=_0x36cc1e(0x1aa),_0x3c72d6[_0x36cc1e(0x25d)]=_0x36cc1e(0x1cb),_0x3c72d6[_0x36cc1e(0x297)]=_0x36cc1e(0x228),_0x3c72d6['yMhnO']=_0x36cc1e(0x23c),_0x3c72d6[_0x36cc1e(0x210)]=_0x36cc1e(0x232),_0x3c72d6['wLnKh']=_0x36cc1e(0x20d),_0x3c72d6[_0x36cc1e(0x177)]='lightmode',_0x3c72d6[_0x36cc1e(0x191)]='airplane\x20',_0x3c72d6[_0x36cc1e(0x201)]=_0x36cc1e(0x213),_0x3c72d6['tVmYT']='volume\x20',_0x3c72d6[_0x36cc1e(0x21c)]=function(_0x67c8e0,_0x50e8fb){return _0x67c8e0===_0x50e8fb;},_0x3c72d6[_0x36cc1e(0x1c3)]=_0x36cc1e(0x1da),_0x3c72d6['EfKGr']=_0x36cc1e(0x18a),_0x3c72d6[_0x36cc1e(0x230)]=_0x36cc1e(0x247);const _0x38cb7b=_0x3c72d6;_0x29d21c=_0x29d21c[_0x36cc1e(0x1c7)](/```[\s\S]*?```/g,'')[_0x36cc1e(0x29c)](),_0x29d21c=_0x29d21c[_0x36cc1e(0x1c7)](/```/g,'')[_0x36cc1e(0x29c)]();const _0x5492db=_0x29d21c[_0x36cc1e(0x1e7)]('\x0a'),_0x295b36=_0x5492db[_0x36cc1e(0x1ea)](_0x28fcab=>{const _0x15d3b2=_0x36cc1e,_0x593558=_0x28fcab[_0x15d3b2(0x29c)]();if(!_0x593558)return![];if(_0x593558[_0x15d3b2(0x1f3)](_0x38cb7b[_0x15d3b2(0x1bd)]))return!![];if(_0x593558[_0x15d3b2(0x1f3)](_0x38cb7b[_0x15d3b2(0x29b)]))return!![];if(_0x38cb7b[_0x15d3b2(0x1de)](_0x593558,_0x38cb7b[_0x15d3b2(0x292)]))return!![];if(_0x38cb7b[_0x15d3b2(0x1de)](_0x593558,_0x38cb7b[_0x15d3b2(0x265)]))return!![];if(_0x593558['startsWith']('url\x20'))return!![];if(_0x593558['startsWith'](_0x38cb7b['EZDxb']))return!![];if(_0x593558[_0x15d3b2(0x1f3)](_0x38cb7b[_0x15d3b2(0x1cc)]))return!![];if(_0x593558[_0x15d3b2(0x1f3)](_0x38cb7b[_0x15d3b2(0x267)]))return!![];if(_0x593558[_0x15d3b2(0x1f3)](_0x38cb7b['mSWDc']))return!![];if(_0x593558['startsWith'](_0x38cb7b[_0x15d3b2(0x25d)]))return!![];if(_0x593558[_0x15d3b2(0x1f3)](_0x38cb7b[_0x15d3b2(0x297)]))return!![];if(_0x593558[_0x15d3b2(0x1f3)](_0x38cb7b[_0x15d3b2(0x189)]))return!![];if(_0x593558[_0x15d3b2(0x1f3)](_0x38cb7b[_0x15d3b2(0x210)]))return!![];if(_0x593558[_0x15d3b2(0x1f3)](_0x38cb7b['wLnKh']))return!![];if(_0x593558[_0x15d3b2(0x1f3)](_0x38cb7b[_0x15d3b2(0x177)]))return!![];if(_0x593558['startsWith'](_0x38cb7b[_0x15d3b2(0x191)]))return!![];if(_0x593558[_0x15d3b2(0x1f3)](_0x38cb7b['hFaNz']))return!![];if(_0x593558[_0x15d3b2(0x1f3)](_0x38cb7b[_0x15d3b2(0x1eb)]))return!![];if(_0x38cb7b['wplpf'](_0x593558,_0x38cb7b[_0x15d3b2(0x1c3)]))return!![];if(_0x38cb7b[_0x15d3b2(0x1de)](_0x593558,_0x15d3b2(0x2a2)))return!![];if(_0x38cb7b[_0x15d3b2(0x21c)](_0x593558,_0x38cb7b[_0x15d3b2(0x179)]))return!![];if(_0x38cb7b[_0x15d3b2(0x21c)](_0x593558,_0x38cb7b[_0x15d3b2(0x230)]))return!![];return!![];});return _0x295b36['join']('\x0a')[_0x36cc1e(0x29c)]();}[_0x296709(0x274)](){const _0x28d36e=_0x296709,_0x29b683={};_0x29b683[_0x28d36e(0x26c)]='openai',_0x29b683[_0x28d36e(0x198)]=_0x28d36e(0x19a),_0x29b683[_0x28d36e(0x260)]=_0x28d36e(0x1d8),_0x29b683[_0x28d36e(0x18d)]='Anthropic\x20Claude',_0x29b683[_0x28d36e(0x277)]='copilot',_0x29b683[_0x28d36e(0x27b)]='GitHub\x20Copilot',_0x29b683[_0x28d36e(0x174)]=_0x28d36e(0x17c),_0x29b683[_0x28d36e(0x28d)]=_0x28d36e(0x21b),_0x29b683[_0x28d36e(0x1fc)]=_0x28d36e(0x28a),_0x29b683[_0x28d36e(0x298)]='๐ŸŒฌ๏ธ',_0x29b683[_0x28d36e(0x243)]='ollama',_0x29b683[_0x28d36e(0x263)]=_0x28d36e(0x224);const _0x34ec2c=_0x29b683,_0xfede9d=[],_0x519d53={};_0x519d53['id']=_0x34ec2c[_0x28d36e(0x26c)],_0x519d53[_0x28d36e(0x207)]=_0x34ec2c[_0x28d36e(0x198)],_0x519d53[_0x28d36e(0x280)]='๐Ÿค–';if(this['openai'])_0xfede9d[_0x28d36e(0x17d)](_0x519d53);const _0x56673c={};_0x56673c['id']=_0x28d36e(0x181),_0x56673c['name']=_0x28d36e(0x1e1),_0x56673c[_0x28d36e(0x280)]='โœจ';if(this['gemini'])_0xfede9d[_0x28d36e(0x17d)](_0x56673c);const _0x1db4ac={};_0x1db4ac['id']=_0x34ec2c[_0x28d36e(0x260)],_0x1db4ac[_0x28d36e(0x207)]=_0x34ec2c[_0x28d36e(0x18d)],_0x1db4ac[_0x28d36e(0x280)]='๐Ÿง ';if(this['claude'])_0xfede9d['push'](_0x1db4ac);const _0x30f94e={};_0x30f94e['id']=_0x34ec2c[_0x28d36e(0x277)],_0x30f94e[_0x28d36e(0x207)]=_0x34ec2c['ayxTi'],_0x30f94e[_0x28d36e(0x280)]='๐Ÿ™';if(this[_0x28d36e(0x218)])_0xfede9d[_0x28d36e(0x17d)](_0x30f94e);const _0x33b86f={};_0x33b86f['id']=_0x28d36e(0x24c),_0x33b86f[_0x28d36e(0x207)]=_0x28d36e(0x235),_0x33b86f[_0x28d36e(0x280)]='โšก';if(this[_0x28d36e(0x24c)])_0xfede9d[_0x28d36e(0x17d)](_0x33b86f);const _0x440de7={};_0x440de7['id']=_0x34ec2c['oEtOs'],_0x440de7[_0x28d36e(0x207)]=_0x34ec2c['prTzM'],_0x440de7[_0x28d36e(0x280)]='๐ŸŒŠ';if(this[_0x28d36e(0x17c)])_0xfede9d[_0x28d36e(0x17d)](_0x440de7);const _0x2d4e49={};_0x2d4e49['id']=_0x34ec2c[_0x28d36e(0x1fc)],_0x2d4e49['name']='Mistral\x20AI',_0x2d4e49[_0x28d36e(0x280)]=_0x34ec2c['omCau'];if(this['mistral'])_0xfede9d[_0x28d36e(0x17d)](_0x2d4e49);const _0x504f98={};_0x504f98['id']=_0x34ec2c[_0x28d36e(0x243)],_0x504f98[_0x28d36e(0x207)]=_0x34ec2c[_0x28d36e(0x263)],_0x504f98[_0x28d36e(0x280)]='๐Ÿฆ™';if(this[_0x28d36e(0x1e6)])_0xfede9d['push'](_0x504f98);return _0xfede9d;}[_0x296709(0x1d4)](_0x494b66,_0x5dd2fa=null){const _0x1b4eca=_0x296709;if(!AI_PROVIDERS_CONFIG[_0x494b66])return console[_0x1b4eca(0x25b)](_0x1b4eca(0x270)+_0x494b66+'\x22'),![];const _0x26f9af=this[_0x1b4eca(0x274)]()['map'](_0x29b151=>_0x29b151['id']);if(_0x26f9af['includes'](_0x494b66))return this[_0x1b4eca(0x1be)]=_0x494b66,_0x5dd2fa&&(this['model']=_0x5dd2fa),!![];return![];}['getCurrentProvider'](){const _0x389094=_0x296709;return{'id':this[_0x389094(0x1be)],'name':this[_0x389094(0x1ec)](this[_0x389094(0x1be)]),'model':this['model']||this[_0x389094(0x271)](this[_0x389094(0x1be)]),'available':this[_0x389094(0x274)]()};}['getProviderName'](_0x3ea703){const _0x1fcdbf=_0x296709,_0x7cf0b6={};_0x7cf0b6[_0x1fcdbf(0x1dd)]=_0x1fcdbf(0x19a),_0x7cf0b6[_0x1fcdbf(0x254)]=_0x1fcdbf(0x1e1),_0x7cf0b6['JCYBr']='GitHub\x20Copilot',_0x7cf0b6[_0x1fcdbf(0x214)]=_0x1fcdbf(0x235),_0x7cf0b6['xoJfb']=_0x1fcdbf(0x186),_0x7cf0b6[_0x1fcdbf(0x211)]='Unknown';const _0x29101e=_0x7cf0b6,_0x46aeeb={};_0x46aeeb[_0x1fcdbf(0x1d2)]=_0x29101e['XpGfD'],_0x46aeeb[_0x1fcdbf(0x181)]=_0x29101e[_0x1fcdbf(0x254)],_0x46aeeb[_0x1fcdbf(0x1d8)]=_0x1fcdbf(0x28e),_0x46aeeb[_0x1fcdbf(0x218)]=_0x29101e['JCYBr'],_0x46aeeb['groq']=_0x29101e[_0x1fcdbf(0x214)],_0x46aeeb[_0x1fcdbf(0x17c)]='Cohere',_0x46aeeb[_0x1fcdbf(0x28a)]=_0x29101e[_0x1fcdbf(0x26a)];const _0x434c58=_0x46aeeb;return _0x434c58[_0x3ea703]||_0x29101e[_0x1fcdbf(0x211)];}[_0x296709(0x26b)](){const _0x37a0ea=_0x296709,_0x507ed5=this[_0x37a0ea(0x264)][_0x37a0ea(0x236)];return this[_0x37a0ea(0x264)]['clear'](),console[_0x37a0ea(0x1b8)](_0x37a0ea(0x27e)+_0x507ed5+'\x20cached\x20responses\x20from\x20memory'),_0x507ed5;}[_0x296709(0x21f)](){const _0x40959e=_0x296709,_0x597cea={};_0x597cea[_0x40959e(0x18c)]=_0x40959e(0x226);const _0x28bb58=_0x597cea,_0x39b924={};return _0x39b924[_0x40959e(0x236)]=this[_0x40959e(0x264)][_0x40959e(0x236)],_0x39b924[_0x40959e(0x1fa)]=0x32,_0x39b924[_0x40959e(0x205)]=this[_0x40959e(0x197)],_0x39b924[_0x40959e(0x1f6)]=_0x28bb58['YmxtS'],_0x39b924[_0x40959e(0x24e)]=![],_0x39b924;}}module['exports']=AIProviderManager,module['exports'][_0x296709(0x200)]=getOllamaBaseUrl;