devicely 2.3.0 โ 2.3.1
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/bin/devicely.js +1 -1
- package/config/devices.conf +1 -1
- package/lib/advanced-logger.js +1 -0
- package/lib/aiProviders.js +1 -592
- package/lib/aiProviders.js.strategic-backup +657 -0
- package/lib/aiProvidersConfig.js +1 -171
- package/lib/androidDeviceDetection.js +1 -1
- package/lib/appMappings.js +1 -1
- package/lib/cognitiveLocator.js +1 -1
- package/lib/commanderService.js +1 -1
- package/lib/deviceDetection.js +1 -1
- package/lib/devices.js +1 -1
- package/lib/devices.js.strategic-backup +57 -0
- package/lib/doctor.js +1 -1
- package/lib/encryption.js +1 -1
- package/lib/encryption.js.strategic-backup +61 -0
- package/lib/executor.js +1 -1
- package/lib/executor.js.strategic-backup +107 -0
- package/lib/frontend/asset-manifest.json +3 -3
- package/lib/frontend/index.html +1 -1
- package/lib/frontend/static/js/main.6878ba82.js +3 -0
- package/lib/hybridAI.js +1 -0
- package/lib/intelligentLocatorService.js +1 -0
- package/lib/lightweightAI.js +1 -0
- package/lib/localBuiltInAI.js +1 -0
- package/lib/localBuiltInAI_backup.js +1 -0
- package/lib/localBuiltInAI_simple.js +1 -0
- package/lib/locatorStrategy.js +1 -1
- package/lib/logger-demo.js +2 -0
- package/lib/logger-integration-examples.js +102 -0
- package/lib/logger.js +1 -1
- package/lib/package.json +2 -0
- package/lib/quick-start-logger.js +2 -0
- package/lib/scriptLoader.js +1 -1
- package/lib/server.js +1 -1
- package/lib/server.js.strategic-backup +6298 -0
- package/lib/tensorflowAI.js +1 -0
- package/lib/tensorflowAI.js.strategic-backup +717 -0
- package/lib/tinyAI.js +1 -0
- package/lib/universalSessionManager.js +1 -0
- package/package.json +5 -2
- package/scripts/shell/android_device_control.enc +1 -1
- package/scripts/shell/connect_ios_usb_multi_final.enc +1 -1
- package/scripts/shell/connect_ios_wireless_multi_final.enc +1 -1
- package/lib/aiProviders_new.js +0 -70
- package/lib/frontend/static/js/main.310a0af8.js +0 -3
- /package/lib/frontend/static/js/{main.310a0af8.js.LICENSE.txt โ main.6878ba82.js.LICENSE.txt} +0 -0
package/lib/aiProviders.js
CHANGED
|
@@ -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 _0x2dc07e=_0x168d;(function(_0x27e613,_0x2e1f1){const _0x17ce55=_0x168d,_0xd4bc90=_0x27e613();while(!![]){try{const _0x3ac0ba=-parseInt(_0x17ce55(0x17f))/0x1+-parseInt(_0x17ce55(0x181))/0x2*(parseInt(_0x17ce55(0x110))/0x3)+-parseInt(_0x17ce55(0x1c2))/0x4*(parseInt(_0x17ce55(0x141))/0x5)+parseInt(_0x17ce55(0xe6))/0x6*(-parseInt(_0x17ce55(0x1d7))/0x7)+-parseInt(_0x17ce55(0x195))/0x8*(parseInt(_0x17ce55(0x13f))/0x9)+-parseInt(_0x17ce55(0x146))/0xa+parseInt(_0x17ce55(0x113))/0xb;if(_0x3ac0ba===_0x2e1f1)break;else _0xd4bc90['push'](_0xd4bc90['shift']());}catch(_0xc498a6){_0xd4bc90['push'](_0xd4bc90['shift']());}}}(_0x507e,0x2ef62));const {OpenAI}=require('openai'),{GoogleGenerativeAI}=require('@google/generative-ai'),{Anthropic}=require(_0x2dc07e(0x19f)),{getPackageId,APP_MAPPINGS}=require(_0x2dc07e(0xef)),{AI_PROVIDERS_CONFIG}=require(_0x2dc07e(0x10c)),_0x1b6d0a={};_0x1b6d0a[_0x2dc07e(0x160)]=![],_0x1b6d0a[_0x2dc07e(0x1b0)]=![],_0x1b6d0a[_0x2dc07e(0x13d)]=![],_0x1b6d0a['timeout']=0x7530,_0x1b6d0a[_0x2dc07e(0xed)]=0x2;const AI_CONFIG=_0x1b6d0a;function resolveProvider(_0x5742f9){const _0x334113=_0x2dc07e,_0x12a8d6={};_0x12a8d6[_0x334113(0xf9)]=_0x334113(0x177);const _0x45f0df=_0x12a8d6,_0x5046b3=Object[_0x334113(0x11c)](AI_PROVIDERS_CONFIG);if(!_0x5742f9)return _0x45f0df[_0x334113(0xf9)];if(_0x5046b3[_0x334113(0x1ab)](_0x5742f9))return _0x5742f9;const _0x432a06=_0x5046b3[_0x334113(0x1ab)](_0x45f0df[_0x334113(0xf9)])?_0x334113(0x177):_0x5046b3[0x0];return console['warn'](_0x334113(0x1d4)+_0x5742f9+_0x334113(0x10a)+_0x432a06+'\x22.'),console[_0x334113(0xe1)](_0x334113(0x219)+_0x5046b3[_0x334113(0x111)](',\x20')),_0x432a06;}function _0x507e(){const _0x2bc3df=['BM93','wNbdtMy','tw9KzwWGiG','BgLNAhrTB2rL','r0HTt3u','s1DcthC','qLbhzwi','A1LOB0C','Du5MA1u','ruP0zxq','CMvZDgfYDa','sfPrvxa','DMDyDLe','vfvuvgu','AeL0CKO','quP5ww0','D3DmqxK','z2v0tw9KzwXgB3jqCM92AwrLCG','BwvZC2fNzq','y2fJAgvfEhbPCNK','C2XPy2u','rMvUD0G','y2HVAwnLCW','zhfUAwm','icaGvMfSAwqGChjVDMLKzxjZoIa','zgfYA21Vzgu','yw5KCM9Pza','Bg9N','v3HRuwe','shPvuw4','yvnWq0y','D2fYBG','ic0+igXHDw5JAca','qw50AhjVCgLJienSyxvKzq','twLZDhjHBcbbsq','z2v0tg9JyxrVCNm','nMj0vMv0uG','z2v0t2XSyw1HqMfZzvvYBa','vxjdyNG','r2vTAw5Pig5VDcbJB25MAwD1CMvK','BwLZDhjHBc1SyxjNzs0YndeX','Ag9Tzq','C25suwi','CMv0CMLLCW','z2vUzxjHDgvdB250zw50','lI9HChbnyxbWAw5NCW','z3b0ltrVltiWmJqTmdGTmdy','thPSqKS','z2v0r2vUzxjHDgL2zu1VzgvS','vLLrvNC','r3jVCsbUB3qGy29UzMLNDxjLza','zerHCNu','C2jvr3O','CgvYC2LZDgvUDfn0B3jHz2u','B1jzCem','vuvdr2i','sLHJs20','B0jkzfO','BwTIrhO','ic8Gqw5KCM9PzdOG','r3jVCq','twLZDhjHBcbbssbUB3qGy29UzMLNDxjLza','DgvZDa','ChvZAa','CMvXDwvZDenHy2HL','Cxfdque','qxnACu4','Efvlqw4','cKf2ywLSywjSzsbHChbZigzVCIa','tLHpvvi','yNvgsfm','yxHPB3m','iIaTigzHBgXPBMCGyMfJAYb0BYaI','cGPjtvbpuLrbtLq6ifvZzsbNzw5LCMLJigfWCcbUyw1LCYaOzs5NlIWGiMXHDw5JAcbZzxr0Aw5NCYiSicjSyxvUy2GGy2HYB21LiIKkvgHLihn5C3rLBsb3AwXSigf1Dg9TyxrPy2fSBhKGy29UDMvYDcb0BYbWBgf0zM9YBs1ZCgvJAwzPyYbWywnRywDLieLeCZOk','lI9HAvbYB3zPzgvYC0nVBMzPzW','q3Dts08','AfjVA2m','ChjVDMLKzxi','mJrWzxHxsgq','AM9PBG','y29TCgXLDgLVBNm','mtqXotq3ntjkvKrAzwO','zxHWAxj5txm','tM8GBw9KzwXZigLUC3rHBgXLzcbPBIbpBgXHBweUifb1BgWGB25LihDPDgG6ig9SBgfTysbWDwXSigXSyw1HmY4Y','q29OzxjLig5VDcbJB25MAwD1CMvK','z2vTAw5PltiUns1MBgfZAa','y29OzxjL','DMv0vKW','ignHy2HLzcbYzxnWB25ZzxmGzNjVBsbTzw1VCNK','y29Kzq','A2v5CW','quKGy29UDMvYC2LVBIbMywLSzwqGka','EMjpv1a','y29UDMvYDfDPDgHhzw1PBMK','DLzXrK4','ANjiEvi','q1PiAfe','A2LSBca','B3zNCMK','Bw9KzwW','ugvUwKW','BfHcwvO','q2XHDwrLig5VDcbJB25MAwD1CMvK','Dgv4Da','cGPbufaGuefds0fhrsbnqvbqsu5huZOkv2HLBIb1C2vYihnHExmGiMXHDw5JAcbJAhjVBwuIlcaIB3bLBIbJAhjVBwuIlcbLDgmUlcb1C2uGDgHLignVCNjLy3qGCgfJA2fNzsbjrdOk','twvbtuq','BgXHBweTmY4ZltCWyI12zxjZyxrPBgu','zgf0yq','Dg9vChbLCKnHC2u','BMv4Da','z3jVCq','y2f1C2u','tezMwxO','CMvWBgfJzq','BwLZDhjHBa','uxznBNC','thb4ELm','Aw9Z','E0LoufvuFq','BgPly3C','CMvJzw50','Aen6tK4','Bu5zzM0','C3rYzwfTAw5Nt25SEq','vfrYBKK','mJq1nJfxqwXtu2W','y29UDMvYDfDPDgHpCgvUquK','ndyWnJv2DLbvCNq','l2fWAs90ywDZ','vwTbu3C','yM1ny08','B3bLBMfP','ota1mdmWr2TyAfPI','sxfdt0O','DuP4y1e','wMz1CgO','8j+mRo+4JW','z2v0q3vYCMvUDfbYB3zPzgvY','qvbjq29UBMvJDgLVBKvYCM9Y','veHAsMy','yNLmBKK','Bhvxshu','ufDHrha','CMvZCg9UC2u','CNH5r3C','zKfwr1O','y2XHDwrLltmTns1ZB25UzxqTmJaYndeWmJi','AwnVBG','Eg9iBKi','DerLy2y','B2XSyw1H','zNvPwvO','y2XLyw5bsvjLC3bVBNnL','8j+MMsboBYbpBgXHBweGBw9KzwWGC2vSzwn0zwqGlsb1C2LUzYbPBNn0ywXSzwqGiG','ywTMDMK','z2v0q2fJAgvtDgf0CW','z2fTqve','qMXRA3O','y2fJAgu','C3DPCguG','y1LJtuW','B1Hqvfy','qxbdBgu','r2L0shvIienVCgLSB3qGBM90ignVBMzPz3vYzwq','z2vTAw5PlteUns1WCM8TmdaY','rw5lyNq','zgvSzxrL','wgzLsvG','BhjrsuK','Ahr0Chm6lY9HCgKUBwLZDhjHBc5HAs92mq','y2XPy2SG','zw5oqve','y29UDMvYDfDPDgHdBgf1zgu','BwfW','yxbPs2v5','Aw5PDgLHBgL6zvbYB3zPzgvYCW','DMfSDwu','vw5RBM93BG','A1HIC1K','ww91igfYzsbHig1VyMLSzsbKzxzPy2uGyxv0B21HDgLVBIbJB21Tyw5KignVBNzLCNrLCI4Gq29UDMvYDcbUyxr1CMfSigXHBMD1ywDLihjLCxvLC3rZigLUDg8GzxHLy3v0ywjSzsbJB21Tyw5KCYbMB3iGAu9tigfUzcbbBMrYB2LKigrLDMLJzxmUcGPbDMfPBgfIBguGy29TBwfUzhmGkhDVCMSGB24GyM90AcbPt1mGjIbbBMrYB2LKktOklsbSyxvUy2GGpgfWCf9Uyw1LpJOGtgf1BMnOigfUigfWCcb1C2LUzYbNzw5LCMLJig5HBwuGkguUzY4SicjSyxvUy2GGC2v0DgLUz3mIlcaIBgf1BMnOignOCM9TzsiPcI0GA2LSBca8yxbWx25HBwu+oIbdBg9Zzs9MB3jJzsbZDg9WigfUigfWCaOTigHVBwu6ieDVihrVigHVBwuGC2nYzwvUicHWCMvZCYbOB21Ligj1DhrVBIKklsbIywnRoIboyxzPz2f0zsbIywnRicHbBMrYB2LKl2LpuYKklsb1CMWGphvYBd46ie9Wzw4GvvjmigLUigjYB3DZzxiklsbJBgLJAYa8Dgv4Dd46ienSAwnRig9UigeGyNv0Dg9Uig9YigvSzw1LBNqGyNKGDMLZAwjSzsb0zxH0cI0Gy2XPy2SGphGSEt46ienSAwnRigf0ihnWzwnPzMLJignVB3jKAw5HDgvZicHLlMCUlcbJBgLJAYa1mdaSmtaWmcKklsb0yxaGphrLEhqVy29VCMrZpJOGu2fTzsbHCYbJBgLJAWOTigXVBMDWCMvZCYa8Dgv4Dc9JB29Yzhm+oIbmB25NihbYzxnZig9UigvSzw1LBNqGB3iGy29VCMrPBMf0zxmklsbZD2LWzsa8zgLYzwn0Aw9UpJOGu3DPCguGDxaVzg93BI9Szwz0l3jPz2H0icH1C2uGzM9YihnJCM9SBgLUzYKklsb0ExbLidX0zxH0pJOGvhLWzsb0zxH0igLUDg8GzM9JDxnLzcbMAwvSzcaOANvZDcb0AguGDgv4DcWGBM8GiNr5CguIihbYzwzPEcKklsbZy3jLzw5ZAg90oIbuywTLihnJCMvLBNnOB3qklsbYzxn0yxj0oIbszxn0yxj0igrLDMLJzqOTihjVDgf0zsa8BgvMDc9YAwDODc9WB3j0CMfPDc9Syw5KC2nHCgu+oIbsB3rHDguGC2nYzwvUcGPPt1mTC3bLy2LMAwmGy29TBwfUzhm6cI0GzgfYA21VzguVBgLNAhrTB2rLoIbdAgfUz2uGyxbWzwfYyw5JzqOTigfPCNbSyw5LidXVBI9VzMy+oIbuB2DNBguGywLYCgXHBMuGBw9KzqOTihDPzMKGpg9Ul29MzJ46ifrVz2DSzsbxAuzPcI0GDM9SDw1LidX1Cc9KB3DUl211Dgu+oIbdB250CM9SihzVBhvTzqOkqw5KCM9Pzc1ZCgvJAwzPyYbJB21Tyw5KCZOklsbNzxrmB2nHDg9YCZOGr2v0igfSBcbPBNrLCMfJDgL2zsbLBgvTzw50CYbVBIbJDxjYzw50ihnJCMvLBGOTihjLy2vUDdOGt3bLBIbYzwnLBNqGyxbWCWOTig5VDgLMAwnHDgLVBNm6ie9Wzw4GBM90AwzPy2f0Aw9UihbHBMvScI0GCxvPy2TZzxr0Aw5NCZOGt3bLBIbXDwLJAYbZzxr0Aw5NCWO','Cw9QvMC','z2vTAw5P','q0L2uKm','uKX6s3m','Ag5Wt0u','y29WAwXVDa','C2nYzwvUC2HVDa','C2v0','rgz0zM8','mtGWnZq0y3f2D1b5','BwvZC2fNzxm','ntG5ntHsu01vwvO','C3bSAxq','C3rHDhvZ','8j+NUsbdBgvHCMvKia','CgDpANG','v3PHDKW','y29UDgvUDa','t2XSyw1HicHmB2nHBcK','ic0+igLpuZOG','y2HHDa','cGPdB21Tyw5KCYb3AwXSigv4zwn1DguGu0LnvuXuqu5ft1vttfKGB24GywXSigrLDMLJzxmGD2L0AcbJB3jYzwn0ihbHy2THz2uGsurZlGO','yMfZzvvsta','zMLSDgvY','vw5RBM93BIbbssbWCM92AwrLCJOG','veT4txu','z3b0ltrV','Bw9KzwXqCM92AwrLCG','BLfqDxe','v0jlyM4','ktOG','odG4De5jsw1q','zw91DvO','z2v0','Cu15Cfe','zxHWB3j0CW','r29Vz2XLieDLBwLUAq','C2L6zq','z3bovNa','q29OzxjL','DgLTzw91Da','qgfUDgHYB3bPyY1HAs9ZzgS','yMPAv3O','r2L0shvIienVCgLSB3q','t3bLBKfjig5VDcbJB25MAwD1CMvK','ywrRrhy','cGPqtefurK9sttOG','y29UDMvYDfDPDgHdB3bPBg90','A0PlqKC','DxnfChO','zwDWAxG','DhjPBq','ru5XvKi','Aw5JBhvKzxm','EerSA24','AfvzBw4','BgXHBweZlJi','Bgf1BMnOia','Bg9JywXtDg9YywDL','C25zEKW','8j+oRYbvC2LUzYbJywnOzwqGCMvZCg9UC2uGkgLUlw1LBw9YEsK','Bwf4u2L6zq','A0P5quS','Bg9Uz3bYzxnZia','C3LZDgvT','y3j6rLm','t2XSyw1HigLZig5VDcbYzwfJAgfIBguGyxqG','AePkCKm','tef2s1u','zwjtsvy','CM90yxrLia','Bwf4uMv0CMLLCW','wgf3CeK','CKrlAu4','v21cyva','q2TWuge','mti0u2rkBwLu','DgvTCgvYyxr1CMu','z2v0u3LZDgvTuhjVBxb0','CNHSwLO','CMvZB2X2zu9SBgfTyu1VzgvS','wffiv0K','rKPbqMm','yMfJAW','sK9eEwq','Ahr0Chm6lY9HCgKUz3jVCs5JB20VB3bLBMfPl3yX','t3bLBKfj','runptK5sruzvu0ve','DgfWia','y3jLyxrL','s2fdugu','wwPLtgm','icaGqwn0AxzLifbYB3zPzgvYoIa','y29UDMvYDfDPDgHpBgXHBwe','4PQG77IpicbvBMTUB3DUiefjihbYB3zPzgvYici','iIbPCYbUB3qGAw5ZDgfSBgvKlIbqDwXSigL0ihDPDgG6ig9SBgfTysbWDwXSia','sgvRC2G','mtCZmZLgA0jxwLq','vhzWvwm','z2v0qxzHAwXHyMXLuhjVDMLKzxjZ','BMfTzq','y29UDMvYDfDPDgHdB2HLCMu','C3rHCNrZv2L0Aa','svLmEeS','y29UDMvYDfDPDgHhCM9X','D2LMAsa','4P2miefqssbfCNjVCIb3AxrOia','y2XHDwrL','DePQswW','BhrPCwW','DxjSia','BM90AwzPy2f0Aw9UCW','Ahr0CdOVl2XVy2fSAg9ZDdOXmtqZna','CM9Szq','B2XSyw1Hqxv0B01VzgvS','u1btr1a','shfpzxu','zLDxEfu','EhL0u2q','lIbtDgfYDcbPDcb3AxrOoIbVBgXHBweGC2vYDMu','DgPNAvG','y29TBwfUzc1YlxbSDxmTmdGTmJaYna','vvjquwK','qKzby1m','tujwyKe','C0XJwgS','DefxwLm','yM90Aa','wvPLyNm','wMvXuxC','z0LkEwe','v0LNug4','wNPAB2e','DxnLCG','vgTgEuO','mxW4FdD8mhWYFdn8nNW0Fdu','y29UDMvYDfDPDgHnAxn0CMfS','ywLYCgXHBMuG','z2v0uhjVDMLKzxjoyw1L'];_0x507e=function(){return _0x2bc3df;};return _0x507e();}function getOllamaBaseUrl(){const _0x26a53f=_0x2dc07e,_0x58cc98={};_0x58cc98[_0x26a53f(0x1aa)]=_0x26a53f(0x1e6);const _0x50e44b=_0x58cc98;return(process.env.OLLAMA_BASE_URL||_0x50e44b[_0x26a53f(0x1aa)])['replace'](/\/+$/,'');}class AIProviderManager{constructor(){const _0x29e335=_0x2dc07e,_0x307c27={'OouYb':function(_0x22a0ca,_0x336520){return _0x22a0ca(_0x336520);},'IKQfF':'๐\x20AI\x20Provider:\x20API-Only\x20Mode\x20(No\x20Local\x20Models)'},_0x1282d3=_0x29e335(0x1fd)[_0x29e335(0x182)]('|');let _0x540494=0x0;while(!![]){switch(_0x1282d3[_0x540494++]){case'0':this[_0x29e335(0x1e8)]=null;continue;case'1':this[_0x29e335(0x10f)]=_0x307c27['OouYb'](resolveProvider,process.env.AI_PROVIDER);continue;case'2':this[_0x29e335(0x102)]=new Map();continue;case'3':this['cacheExpiry']=0x493e0;continue;case'4':console[_0x29e335(0xdd)](_0x307c27['IKQfF']);continue;case'5':console[_0x29e335(0xdd)](_0x29e335(0x1d2)+this[_0x29e335(0x10f)]);continue;case'6':this[_0x29e335(0x171)]();continue;case'7':this[_0x29e335(0x191)]=this[_0x29e335(0x10f)];continue;case'8':this[_0x29e335(0x125)]=process.env.AI_MODEL||null;continue;}break;}}[_0x2dc07e(0x171)](){const _0x587b4d=_0x2dc07e,_0x140aed={};_0x140aed['uNfkU']='OpenAI',_0x140aed[_0x587b4d(0x157)]=_0x587b4d(0x19a),_0x140aed[_0x587b4d(0x1d0)]=_0x587b4d(0xe3),_0x140aed[_0x587b4d(0x207)]=_0x587b4d(0x1a1),_0x140aed[_0x587b4d(0x144)]='Cohere',_0x140aed['FReDr']=_0x587b4d(0xe4),_0x140aed[_0x587b4d(0x17a)]=_0x587b4d(0x173),_0x140aed[_0x587b4d(0x1a8)]=_0x587b4d(0x166),_0x140aed[_0x587b4d(0x1e2)]=_0x587b4d(0x154),_0x140aed[_0x587b4d(0x1f9)]=_0x587b4d(0x190),_0x140aed[_0x587b4d(0x1f1)]='llama3.2',_0x140aed['ebSIV']=_0x587b4d(0xf0),_0x140aed[_0x587b4d(0xe0)]=function(_0x2d2a8a,_0x59e1dc){return _0x2d2a8a===_0x59e1dc;},_0x140aed['AsZqN']=_0x587b4d(0x205),_0x140aed[_0x587b4d(0x1a3)]=function(_0x26adb0,_0x1a3c55){return _0x26adb0!==_0x1a3c55;},_0x140aed[_0x587b4d(0x192)]='https://api.githubcopilot.com',_0x140aed[_0x587b4d(0x1fa)]=function(_0x55f972,_0x201c75){return _0x55f972===_0x201c75;},_0x140aed['THZJf']=_0x587b4d(0x158),_0x140aed['hPzgy']=_0x587b4d(0x16b);const _0xed99d5=_0x140aed;if(process.env.OPENAI_API_KEY){const _0x55a656={};_0x55a656['apiKey']=process.env.OPENAI_API_KEY,_0x55a656['timeout']=AI_CONFIG[_0x587b4d(0x19e)],_0x55a656[_0x587b4d(0x1bd)]=AI_CONFIG[_0x587b4d(0xed)],this[_0x587b4d(0x145)]=new OpenAI(_0x55a656);}if(process.env.GEMINI_API_KEY){if(_0xed99d5[_0x587b4d(0xe0)]('VTyVo',_0xed99d5[_0x587b4d(0x104)])){const _0x13c134={};_0x13c134[_0x587b4d(0x145)]=_0xed99d5[_0x587b4d(0x209)],_0x13c134[_0x587b4d(0x177)]=_0xed99d5[_0x587b4d(0x157)],_0x13c134[_0x587b4d(0x1e1)]=_0xed99d5[_0x587b4d(0x1d0)],_0x13c134[_0x587b4d(0x17b)]=_0xed99d5[_0x587b4d(0x207)],_0x13c134[_0x587b4d(0x130)]=_0x587b4d(0xfe),_0x13c134[_0x587b4d(0x118)]=_0xed99d5[_0x587b4d(0x144)],_0x13c134['mistral']=_0xed99d5['FReDr'];const _0x1a096c=_0x13c134;return _0x1a096c[_0x5cd68b]||_0xed99d5['hnpOE'];}else this['gemini']=new GoogleGenerativeAI(process.env.GEMINI_API_KEY);}if(process.env.CLAUDE_API_KEY){if(_0xed99d5[_0x587b4d(0x1a3)](_0x587b4d(0x193),_0x587b4d(0x1fc))){const _0x227d5c={};_0x227d5c[_0x587b4d(0x170)]=process.env.CLAUDE_API_KEY,_0x227d5c[_0x587b4d(0x19e)]=AI_CONFIG['timeout'],_0x227d5c[_0x587b4d(0x1bd)]=AI_CONFIG[_0x587b4d(0xed)],this[_0x587b4d(0x1e1)]=new Anthropic(_0x227d5c);}else{if(this[_0x587b4d(0x125)]&&this[_0x587b4d(0x191)]===_0x1c360)return this[_0x587b4d(0x125)];const _0x275f96={};_0x275f96[_0x587b4d(0x145)]='gpt-4o-2024-08-06',_0x275f96[_0x587b4d(0x177)]=_0xed99d5['egpix'],_0x275f96[_0x587b4d(0x1e1)]=_0xed99d5[_0x587b4d(0x1e2)],_0x275f96[_0x587b4d(0x17b)]=_0xed99d5[_0x587b4d(0x1f9)],_0x275f96[_0x587b4d(0x130)]='llama-3.3-70b-versatile',_0x275f96[_0x587b4d(0x118)]=_0x587b4d(0x1ef),_0x275f96[_0x587b4d(0x134)]=_0x587b4d(0xea),_0x275f96[_0x587b4d(0x158)]=_0x2b1851.env.OLLAMA_MODEL||_0xed99d5[_0x587b4d(0x1f1)];const _0x57c7a5=_0x275f96;return _0x57c7a5[_0x534620]||_0xed99d5[_0x587b4d(0x1bb)];}}if(process.env.GITHUB_TOKEN){const _0x56e26b={};_0x56e26b[_0x587b4d(0x170)]=process.env.GITHUB_TOKEN,_0x56e26b['baseURL']=_0xed99d5[_0x587b4d(0x192)],_0x56e26b[_0x587b4d(0x19e)]=AI_CONFIG[_0x587b4d(0x19e)],_0x56e26b[_0x587b4d(0x1bd)]=AI_CONFIG[_0x587b4d(0xed)],this[_0x587b4d(0x17b)]=new OpenAI(_0x56e26b);}if(process.env.GROQ_API_KEY){const _0xaef2a={};_0xaef2a[_0x587b4d(0x170)]=process.env.GROQ_API_KEY,_0xaef2a[_0x587b4d(0x18c)]=_0x587b4d(0x1cb),_0xaef2a[_0x587b4d(0x19e)]=AI_CONFIG[_0x587b4d(0x19e)],_0xaef2a['maxRetries']=AI_CONFIG[_0x587b4d(0xed)],this[_0x587b4d(0x130)]=new OpenAI(_0xaef2a);}if(process.env.COHERE_API_KEY){if(_0xed99d5['ZzZoa'](_0x587b4d(0x1d8),'TvpUc')){const _0x74a2d6={};_0x74a2d6['apiKey']=process.env.COHERE_API_KEY,_0x74a2d6['baseURL']='https://api.cohere.ai/v1',_0x74a2d6[_0x587b4d(0x19e)]=AI_CONFIG[_0x587b4d(0x19e)],_0x74a2d6[_0x587b4d(0x1bd)]=AI_CONFIG[_0x587b4d(0xed)],this[_0x587b4d(0x118)]=new OpenAI(_0x74a2d6);}else{const _0x55da81=_0x1a18f8[_0x587b4d(0x11c)](_0x4b7eb2)[_0x587b4d(0x18d)](_0x19f316=>_0x4eb827[_0x19f316][_0xb6095d])['slice'](0x0,0x32);_0x512828=_0x587b4d(0x1a4)+_0x440f9c[_0x587b4d(0x12e)]()+_0x587b4d(0x106)+_0x1d9c5c+':\x20'+_0x55da81[_0x587b4d(0x111)](',\x20')+_0x587b4d(0x12a)+_0x55da81[_0x587b4d(0x215)](0x0,0x14)[_0x587b4d(0x16f)](_0x25918c=>'-\x20'+_0x25918c+_0x587b4d(0xe2)+_0x263ee5[_0x25918c][_0x2b748f])[_0x587b4d(0x111)]('\x0a')+'\x0a';}}this[_0x587b4d(0x158)]=new OpenAI({'apiKey':_0xed99d5[_0x587b4d(0x14d)],'baseURL':getOllamaBaseUrl()+'/v1','timeout':AI_CONFIG[_0x587b4d(0x19e)],'maxRetries':AI_CONFIG[_0x587b4d(0xed)]});if(process.env.MISTRAL_API_KEY){const _0x1be21f={};_0x1be21f['apiKey']=process.env.MISTRAL_API_KEY,_0x1be21f['baseURL']=_0xed99d5['hPzgy'],_0x1be21f[_0x587b4d(0x19e)]=AI_CONFIG[_0x587b4d(0x19e)],_0x1be21f[_0x587b4d(0x1bd)]=AI_CONFIG[_0x587b4d(0xed)],this['mistral']=new OpenAI(_0x1be21f);}}[_0x2dc07e(0x1c4)](_0x205eaa=null){const _0xe2c581=_0x2dc07e,_0x563a27={'sbUGz':function(_0x19c163){return _0x19c163();},'rxlZZ':function(_0x4e32d3,_0x28ec50){return _0x4e32d3===_0x28ec50;},'YuNol':_0xe2c581(0x1b1)};let _0x37517b='';if(_0x563a27[_0xe2c581(0x1c5)](_0x205eaa,_0xe2c581(0x1f5))){if(_0x563a27['YuNol']!==_0x563a27['YuNol'])throw new _0x4634b4(_0xe2c581(0x1b8)+_0x563a27[_0xe2c581(0xf6)](_0x470539)+_0xe2c581(0x1ed));else{const _0x16e2a4=Object[_0xe2c581(0x11c)](APP_MAPPINGS)[_0xe2c581(0x18d)](_0x452927=>APP_MAPPINGS[_0x452927][_0xe2c581(0x137)]&&APP_MAPPINGS[_0x452927][_0xe2c581(0xdc)])[_0xe2c581(0x215)](0x0,0x1e);_0x37517b='\x0a\x0aMULTI-PLATFORM\x20MODE\x20(iOS\x20+\x20Android\x20devices)\x0aAvailable\x20apps:\x20'+_0x16e2a4[_0xe2c581(0x111)](',\x20')+_0xe2c581(0x10b)+_0x16e2a4[_0xe2c581(0x215)](0x0,0xf)[_0xe2c581(0x16f)](_0x208d74=>'-\x20'+_0x208d74+_0xe2c581(0x189)+APP_MAPPINGS[_0x208d74]['ios']+_0xe2c581(0xfd)+APP_MAPPINGS[_0x208d74][_0xe2c581(0xdc)])[_0xe2c581(0x111)]('\x0a')+_0xe2c581(0x18b);}}else{if(_0x205eaa){const _0x1670df=Object['keys'](APP_MAPPINGS)[_0xe2c581(0x18d)](_0x38c822=>APP_MAPPINGS[_0x38c822][_0x205eaa])[_0xe2c581(0x215)](0x0,0x32);_0x37517b=_0xe2c581(0x1a4)+_0x205eaa[_0xe2c581(0x12e)]()+_0xe2c581(0x106)+_0x205eaa+':\x20'+_0x1670df[_0xe2c581(0x111)](',\x20')+_0xe2c581(0x12a)+_0x1670df[_0xe2c581(0x215)](0x0,0x14)[_0xe2c581(0x16f)](_0x150407=>'-\x20'+_0x150407+'\x20->\x20launch\x20'+APP_MAPPINGS[_0x150407][_0x205eaa])[_0xe2c581(0x111)]('\x0a')+'\x0a';}}return _0xe2c581(0x175)+_0x37517b+'\x0a\x0aCOMMON\x20PHRASE\x20MAPPINGS:\x0a-\x20\x22scroll\x20up\x22\x20OR\x20\x22scroll\x20down\x22\x20->\x20swipe\x20up\x20OR\x20swipe\x20down\x0a-\x20\x22go\x20to\x20<url>\x22\x20OR\x20\x22open\x20<url>\x22\x20OR\x20\x22visit\x20<url>\x22\x20->\x20url\x20https://<url>\x0a-\x20\x22press\x20home\x22\x20OR\x20\x22go\x20home\x22\x20OR\x20\x22home\x20button\x22\x20->\x20home\x0a-\x20\x22open\x20settings\x22\x20OR\x20\x22launch\x20settings\x22\x20->\x20launch\x20settings\x0a-\x20\x22open\x20camera\x22\x20OR\x20\x22launch\x20camera\x22\x20->\x20launch\x20camera\x0a\x0aExamples:\x0a-\x20\x22open\x20chrome\x22\x20->\x20launch\x20chrome\x0a-\x20\x22launch\x20settings\x22\x20->\x20launch\x20settings\x0a-\x20\x22open\x20camera\x22\x20->\x20launch\x20camera\x0a-\x20\x22scroll\x20up\x22\x20->\x20swipe\x20up\x0a-\x20\x22scroll\x20down\x22\x20->\x20swipe\x20down\x0a-\x20\x22click\x20on\x20the\x20login\x20button\x22\x20->\x20click\x20Login\x0a-\x20\x22tap\x20at\x20center\x20of\x20screen\x22\x20->\x20click\x20540,1000\x0a-\x20\x22swipe\x20down\x22\x20->\x20swipe\x20down\x0a-\x20\x22type\x20hello\x20world\x22\x20->\x20hello\x20world\x0a-\x20\x22take\x20a\x20screenshot\x22\x20->\x20screenshot\x0a-\x20\x22go\x20back\x22\x20->\x20back\x0a-\x20\x22press\x20home\x22\x20->\x20home\x0a-\x20\x22go\x20to\x20google.com\x22\x20->\x20url\x20https://www.google.com\x0a-\x20\x22visit\x20youtube.com\x22\x20->\x20url\x20https://www.youtube.com\x0a-\x20\x22launch\x20Chrome\x20and\x20search\x20google.com\x22\x20->\x20launch\x20chrome\x0aWAIT\x203000\x0aurl\x20https://www.google.com\x0a-\x20\x22launch\x20settings\x20scroll\x20up\x20launch\x20camera\x20go\x20to\x20google.com\x20press\x20home\x22\x20->\x0alaunch\x20settings\x0aWAIT\x203000\x0aswipe\x20up\x0aWAIT\x201000\x0ahome\x0aWAIT\x20500\x0alaunch\x20camera\x0aWAIT\x203000\x0ahome\x0aWAIT\x20500\x0aurl\x20https://www.google.com\x0aWAIT\x202000\x0ahome\x0a\x0aConvert\x20this\x20request\x20to\x20commands:\x20\x22{INPUT}\x22\x0a\x0aCRITICAL\x20RULES\x20-\x20YOU\x20MUST\x20FOLLOW\x20THESE\x20EXACTLY:\x0a1.\x20Output\x20ONLY\x20executable\x20commands,\x20one\x20per\x20line\x0a2.\x20NO\x20explanations,\x20NO\x20markdown\x20code\x20blocks,\x20NO\x20comments,\x20NO\x20extra\x20text\x0a3.\x20For\x20multi-step\x20actions,\x20insert\x20WAIT\x20<milliseconds>\x20between\x20commands\x0a4.\x20Use\x20GENERIC\x20app\x20names\x20(e.g.,\x20\x22launch\x20settings\x22,\x20\x22launch\x20chrome\x22,\x20\x22launch\x20camera\x22)\x0a5.\x20Do\x20NOT\x20use\x20platform-specific\x20package\x20IDs\x20-\x20use\x20simple\x20app\x20names\x0a6.\x20The\x20system\x20will\x20automatically\x20convert\x20to\x20correct\x20package\x20IDs\x20for\x20each\x20platform\x0a5.\x20For\x20URLs,\x20always\x20use:\x20url\x20https://example.com\x0a6.\x20For\x20scrolling,\x20use:\x20swipe\x20up\x20OR\x20swipe\x20down\x20(never\x20\x22scroll\x22)\x0a7.\x20For\x20text\x20input,\x20output\x20ONLY\x20the\x20text\x20(never\x20include\x20\x22type\x22\x20prefix)\x0a8.\x20For\x20home\x20button,\x20output:\x20home\x20(never\x20\x22press\x20home\x22\x20or\x20\x22go\x20home\x22)\x0a9.\x20WAIT\x20timings:\x20apps=3000ms,\x20pages=2000ms,\x20UI=1000ms,\x20quick=500ms\x0a10.\x20Parse\x20compound\x20requests\x20into\x20individual\x20steps\x20with\x20WAIT\x20between\x20each\x0a\x0aOUTPUT\x20FORMAT\x20EXAMPLE:\x0alaunch\x20com.apple.Preferences\x0aWAIT\x203000\x0aswipe\x20up\x0aWAIT\x201000\x0ahome\x0a\x0aDO\x20NOT\x20include\x20any\x20other\x20text.\x20Start\x20your\x20response\x20with\x20the\x20first\x20command.';}async['convertCommand'](_0x43613c,_0x1951bf=null,_0x5efc03=null){const _0x3e5d04=_0x2dc07e,_0x8b7bda={'UZQyE':function(_0x4fb113,_0x2e8cb1){return _0x4fb113===_0x2e8cb1;},'FJABc':function(_0x1d1098,_0xa4b943){return _0x1d1098===_0xa4b943;},'hUYmn':_0x3e5d04(0x1cd),'oqReC':function(_0x3dfbe3,_0x10086f){return _0x3dfbe3===_0x10086f;},'BbWya':function(_0x299182){return _0x299182();},'DHUqe':function(_0x3dbffd,_0x4abbb5){return _0x3dbffd<_0x4abbb5;},'SPSGP':function(_0xf23976,_0x5eee49){return _0xf23976-_0x5eee49;},'Heksh':_0x3e5d04(0x1b2),'TUTTe':function(_0x17cd13,_0x1ce448){return _0x17cd13!==_0x1ce448;},'LzlBK':'GJoCX','eouuZ':_0x3e5d04(0x145),'hJJrC':_0x3e5d04(0x177),'UkHFY':'groq','ApCle':'cohere','eHdup':_0x3e5d04(0x134),'MGizT':function(_0x2c937f,_0x3539e0){return _0x2c937f>_0x3539e0;},'mNYfm':'jXxjI'},_0x1fa1ea=_0x5efc03||this[_0x3e5d04(0x10f)],_0x5d377e=_0x1fa1ea+'-'+_0x1951bf+'-'+_0x43613c,_0x21bbc0=this[_0x3e5d04(0x102)][_0x3e5d04(0x197)](_0x5d377e);if(_0x21bbc0&&_0x8b7bda['DHUqe'](_0x8b7bda[_0x3e5d04(0x1e9)](Date[_0x3e5d04(0x201)](),_0x21bbc0['timestamp']),this[_0x3e5d04(0x214)]))return console[_0x3e5d04(0xdd)](_0x8b7bda[_0x3e5d04(0x1d6)]),_0x21bbc0[_0x3e5d04(0x151)];try{if(_0x8b7bda[_0x3e5d04(0x20e)](_0x3e5d04(0x124),_0x8b7bda[_0x3e5d04(0xf1)])){let _0x46540c;switch(_0x1fa1ea){case _0x8b7bda[_0x3e5d04(0x196)]:_0x46540c=await this['convertWithOpenAI'](_0x43613c,_0x1951bf);break;case _0x8b7bda[_0x3e5d04(0x1b9)]:_0x46540c=await this[_0x3e5d04(0x11f)](_0x43613c,_0x1951bf);break;case _0x3e5d04(0x1e1):_0x46540c=await this['convertWithClaude'](_0x43613c,_0x1951bf);break;case'copilot':_0x46540c=await this[_0x3e5d04(0x1a5)](_0x43613c,_0x1951bf);break;case _0x8b7bda['UkHFY']:_0x46540c=await this[_0x3e5d04(0x1de)](_0x43613c,_0x1951bf);break;case _0x8b7bda[_0x3e5d04(0x164)]:_0x46540c=await this[_0x3e5d04(0x1db)](_0x43613c,_0x1951bf);break;case _0x8b7bda['eHdup']:_0x46540c=await this[_0x3e5d04(0x1fe)](_0x43613c,_0x1951bf);break;case _0x3e5d04(0x158):_0x46540c=await this[_0x3e5d04(0x1d3)](_0x43613c,_0x1951bf);break;default:throw new Error(_0x3e5d04(0x18e)+_0x1fa1ea);}this[_0x3e5d04(0x102)][_0x3e5d04(0x17d)](_0x5d377e,{'response':_0x46540c,'timestamp':Date[_0x3e5d04(0x201)]()});if(_0x8b7bda['MGizT'](this[_0x3e5d04(0x102)][_0x3e5d04(0x19b)],0x32)){if(_0x8b7bda[_0x3e5d04(0x13c)]===_0x8b7bda[_0x3e5d04(0x13c)]){const _0x5643a8=this[_0x3e5d04(0x102)][_0x3e5d04(0x11c)]()[_0x3e5d04(0x12f)]()[_0x3e5d04(0x172)];this['requestCache'][_0x3e5d04(0x168)](_0x5643a8);}else{const _0x214b4e=_0x8b7bda['UZQyE'](_0x2f25c6['name'],_0x3e5d04(0x14c))||_0x8b7bda[_0x3e5d04(0x1c8)](_0x1904e9[_0x3e5d04(0x11b)],_0x8b7bda[_0x3e5d04(0x1ad)])||_0x8b7bda['oqReC'](_0x57eb4d[_0x3e5d04(0x131)]?.[_0x3e5d04(0x11b)],_0x8b7bda['hUYmn'])||/connection error|fetch failed|ECONNREFUSED/i[_0x3e5d04(0x100)](_0xb7592b['message']||'');if(_0x214b4e)throw new _0x4a26bd('Ollama\x20is\x20not\x20reachable\x20at\x20'+_0x8b7bda['BbWya'](_0x4f1dd7)+_0x3e5d04(0x1ed));if(_0xd38996[_0x3e5d04(0x183)]===0x194)throw new _0x2328b2(_0x3e5d04(0x203)+_0x2089ad+_0x3e5d04(0x1d5)+_0x4c1836);throw _0x1a4d16;}}return _0x46540c;}else return{'id':this[_0x3e5d04(0x10f)],'name':this[_0x3e5d04(0x200)](this[_0x3e5d04(0x10f)]),'model':this[_0x3e5d04(0x125)]||this[_0x3e5d04(0x212)](this[_0x3e5d04(0x10f)]),'available':this[_0x3e5d04(0x1d9)]()};}catch(_0x57e85c){console['error'](_0x3e5d04(0x1e0)+_0x1fa1ea+':',_0x57e85c[_0x3e5d04(0x213)]);throw new Error(_0x3e5d04(0x11d)+_0x1fa1ea+_0x3e5d04(0x194)+_0x57e85c[_0x3e5d04(0x213)]);}}[_0x2dc07e(0x212)](_0x21a4cd){const _0x5640c3=_0x2dc07e,_0x3ea468={};_0x3ea468['KRLcu']=function(_0xe108af,_0x161a7c){return _0xe108af===_0x161a7c;},_0x3ea468['JXcKm']='gpt-4o-2024-08-06',_0x3ea468['usEpz']=_0x5640c3(0x166),_0x3ea468[_0x5640c3(0xec)]=_0x5640c3(0x154),_0x3ea468[_0x5640c3(0x149)]=_0x5640c3(0x190),_0x3ea468[_0x5640c3(0x1a6)]=_0x5640c3(0x12c),_0x3ea468[_0x5640c3(0xf3)]=_0x5640c3(0x1ef),_0x3ea468['qqCAA']=_0x5640c3(0x1ae);const _0x52e52e=_0x3ea468;if(this[_0x5640c3(0x125)]&&_0x52e52e['KRLcu'](this[_0x5640c3(0x191)],_0x21a4cd))return this['model'];const _0x749bce={};_0x749bce[_0x5640c3(0x145)]=_0x52e52e['JXcKm'],_0x749bce[_0x5640c3(0x177)]=_0x52e52e[_0x5640c3(0x1a7)],_0x749bce['claude']=_0x52e52e[_0x5640c3(0xec)],_0x749bce[_0x5640c3(0x17b)]=_0x52e52e[_0x5640c3(0x149)],_0x749bce[_0x5640c3(0x130)]=_0x52e52e[_0x5640c3(0x1a6)],_0x749bce['cohere']=_0x52e52e['VYQVw'],_0x749bce[_0x5640c3(0x134)]=_0x5640c3(0xea),_0x749bce[_0x5640c3(0x158)]=process.env.OLLAMA_MODEL||_0x52e52e[_0x5640c3(0x103)];const _0xe613a8=_0x749bce;return _0xe613a8[_0x21a4cd]||_0x52e52e[_0x5640c3(0xfa)];}async[_0x2dc07e(0x140)](_0x239843,_0x4a4a81=null){const _0x20d3f4=_0x2dc07e,_0x3dfb09={};_0x3dfb09[_0x20d3f4(0x208)]=_0x20d3f4(0x145),_0x3dfb09['MBVbA']=_0x20d3f4(0x1b6);const _0x10b96d=_0x3dfb09;if(!this['openai'])throw new Error(_0x20d3f4(0x1a2));const _0xb5419c=this[_0x20d3f4(0x212)](_0x10b96d[_0x20d3f4(0x208)]),_0x1cea89={};_0x1cea89[_0x20d3f4(0x1e7)]=_0x20d3f4(0x1fb),_0x1cea89[_0x20d3f4(0x187)]=_0x239843;const _0x269161=await this[_0x20d3f4(0x145)][_0x20d3f4(0x18a)][_0x20d3f4(0x112)][_0x20d3f4(0x1cf)]({'model':_0xb5419c,'messages':[{'role':_0x10b96d[_0x20d3f4(0x1f2)],'content':this['getSystemPrompt'](_0x4a4a81)},_0x1cea89],'temperature':0.3,'max_tokens':0x1f4});let _0x4e7171=_0x269161[_0x20d3f4(0x217)][0x0][_0x20d3f4(0x213)][_0x20d3f4(0x187)][_0x20d3f4(0x1a9)]();return _0x4e7171=this['cleanAIResponse'](_0x4e7171),_0x4e7171;}async[_0x2dc07e(0x11f)](_0x1a2245,_0x3ac052=null){const _0x13fecc=_0x2dc07e,_0x29365d={};_0x29365d['tjgiX']='GitHub\x20Copilot\x20not\x20configured',_0x29365d['gpNVp']='gemini',_0x29365d['vVqFN']=_0x13fecc(0x138),_0x29365d[_0x13fecc(0x216)]=_0x13fecc(0x117),_0x29365d[_0x13fecc(0x1d1)]=function(_0x3a0dc4,_0x3ef2bf){return _0x3a0dc4!==_0x3ef2bf;},_0x29365d[_0x13fecc(0x1ec)]='QHTiP';const _0x1e1564=_0x29365d;if(!this[_0x13fecc(0x177)])throw new Error(_0x13fecc(0xe9));let _0x44a224=this['getModelForProvider'](_0x1e1564[_0x13fecc(0x19c)]);try{const _0x1ddb12={};_0x1ddb12[_0x13fecc(0x125)]=_0x44a224;const _0x219acd=this['gemini'][_0x13fecc(0xf2)](_0x1ddb12),_0x261118=this[_0x13fecc(0x1c4)](_0x3ac052)[_0x13fecc(0x133)](_0x1e1564[_0x13fecc(0x120)],_0x1a2245),_0x23d8b7=_0x261118[_0x13fecc(0x133)](/[^\x00-\x7F]/g,'\x20')[_0x13fecc(0x133)](/\s+/g,'\x20')['trim'](),_0x71dbcd=await _0x219acd['generateContent'](_0x23d8b7),_0x414e9e=await _0x71dbcd[_0x13fecc(0x151)];let _0x2796aa=_0x414e9e['text']()[_0x13fecc(0x1a9)]();return this['cleanAIResponse'](_0x2796aa);}catch(_0x16fefd){if(_0x44a224!==_0x1e1564[_0x13fecc(0x216)]){if(_0x1e1564[_0x13fecc(0x1d1)](_0x1e1564['xytSd'],_0x13fecc(0x18f))){console[_0x13fecc(0xe1)]('Gemini\x20model\x20'+_0x44a224+'\x20failed,\x20falling\x20back\x20to\x20gemini-2.5-flash');const _0x21f20f={};_0x21f20f[_0x13fecc(0x125)]=_0x1e1564[_0x13fecc(0x216)];const _0x32131c=this[_0x13fecc(0x177)][_0x13fecc(0xf2)](_0x21f20f),_0x1d9976=this[_0x13fecc(0x1c4)](_0x3ac052)['replace'](_0x1e1564['vVqFN'],_0x1a2245),_0x4adcc8=_0x1d9976[_0x13fecc(0x133)](/[^\x00-\x7F]/g,'\x20')[_0x13fecc(0x133)](/\s+/g,'\x20')['trim'](),_0x223044=await _0x32131c[_0x13fecc(0xee)](_0x4adcc8),_0x23fe9d=await _0x223044[_0x13fecc(0x151)];return this[_0x13fecc(0x15a)](_0x23fe9d['text']()[_0x13fecc(0x1a9)]());}else throw new _0x230208(_0x1e1564[_0x13fecc(0x1ee)]);}throw _0x16fefd;}}async[_0x2dc07e(0x1a5)](_0x429c37,_0x3d3ff7=null){const _0x52a809=_0x2dc07e,_0x463c29={};_0x463c29['HzUQn']=_0x52a809(0x115),_0x463c29[_0x52a809(0x14e)]=_0x52a809(0x152),_0x463c29[_0x52a809(0x153)]=_0x52a809(0x165),_0x463c29[_0x52a809(0x163)]='copilot',_0x463c29[_0x52a809(0xfc)]=_0x52a809(0x1b6),_0x463c29[_0x52a809(0x148)]=_0x52a809(0x1fb);const _0x23c83e=_0x463c29;if(!this[_0x52a809(0x17b)]){if(_0x23c83e[_0x52a809(0x14e)]!==_0x52a809(0x156))throw new Error(_0x23c83e['fAVGZ']);else throw new _0x458abe(_0x23c83e[_0x52a809(0xdf)]);}const _0x104d4c=this['getModelForProvider'](_0x23c83e['oXPTV']),_0x1fdf23=await this[_0x52a809(0x17b)][_0x52a809(0x18a)][_0x52a809(0x112)][_0x52a809(0x1cf)]({'model':_0x104d4c,'messages':[{'role':_0x23c83e['mkbDz'],'content':this['getSystemPrompt'](_0x3d3ff7)},{'role':_0x23c83e[_0x52a809(0x148)],'content':_0x429c37}],'temperature':0.3,'max_tokens':0x1f4});let _0x18989c=_0x1fdf23['choices'][0x0][_0x52a809(0x213)][_0x52a809(0x187)]['trim']();return _0x18989c=this[_0x52a809(0x15a)](_0x18989c),_0x18989c;}async[_0x2dc07e(0x16e)](_0x226a00,_0x5209a6=null){const _0x336b7b=_0x2dc07e,_0x1a36cd={};_0x1a36cd['URPQi']=_0x336b7b(0x128);const _0x339b96=_0x1a36cd;if(!this['claude'])throw new Error(_0x339b96[_0x336b7b(0x1f0)]);const _0x200b1e=this[_0x336b7b(0x212)](_0x336b7b(0x1e1)),_0x578037=this[_0x336b7b(0x1c4)](_0x5209a6),_0x68ceb4={};_0x68ceb4[_0x336b7b(0x1e7)]=_0x336b7b(0x1fb),_0x68ceb4['content']=_0x226a00;const _0x24573d={};_0x24573d[_0x336b7b(0x125)]=_0x200b1e,_0x24573d['max_tokens']=0x1f4,_0x24573d[_0x336b7b(0x1b6)]=_0x578037,_0x24573d[_0x336b7b(0x180)]=[_0x68ceb4],_0x24573d[_0x336b7b(0x1c3)]=0.3;const _0x59e91b=await this[_0x336b7b(0x1e1)][_0x336b7b(0x180)][_0x336b7b(0x1cf)](_0x24573d);let _0x2ed0b7=_0x59e91b[_0x336b7b(0x187)][0x0][_0x336b7b(0x129)][_0x336b7b(0x1a9)]();return _0x2ed0b7=this[_0x336b7b(0x15a)](_0x2ed0b7),_0x2ed0b7;}async[_0x2dc07e(0x1c6)](){const _0x13dacd=_0x2dc07e,_0x42c150={'oZHih':function(_0xe42847,_0x3a929d){return _0xe42847===_0x3a929d;},'gamAQ':_0x13dacd(0x158),'NVPpy':function(_0x78fbae,_0x297b4e){return _0x78fbae(_0x297b4e);},'rQiiI':_0x13dacd(0x109),'XQHWI':function(_0xc25bcc){return _0xc25bcc();},'QvMnw':function(_0x40abd7){return _0x40abd7();}},_0x20b35b=_0x42c150['oZHih'](this[_0x13dacd(0x191)],_0x42c150[_0x13dacd(0x15e)])&&this[_0x13dacd(0x125)]||process.env.OLLAMA_MODEL;if(_0x20b35b)return _0x20b35b;if(this[_0x13dacd(0x1e8)])return this['ollamaAutoModel'];const _0x44767a=_0x42c150['NVPpy'](require,_0x42c150['rQiiI']);let _0x1321d4=[];try{const _0x22551d={};_0x22551d[_0x13dacd(0x19e)]=0xbb8;const _0x2bdd2d=await _0x44767a[_0x13dacd(0x197)](_0x42c150[_0x13dacd(0x1c7)](getOllamaBaseUrl)+_0x13dacd(0x142),_0x22551d);_0x1321d4=_0x2bdd2d[_0x13dacd(0x12d)]?.['models']||[];}catch(_0x35b420){throw new Error(_0x13dacd(0x1b8)+_0x42c150[_0x13dacd(0x135)](getOllamaBaseUrl)+'.\x20Start\x20it\x20with:\x20ollama\x20serve');}if(!_0x1321d4['length'])throw new Error(_0x13dacd(0x115));return this[_0x13dacd(0x1e8)]=_0x1321d4[0x0][_0x13dacd(0x1da)],console[_0x13dacd(0xdd)](_0x13dacd(0x15b)+this[_0x13dacd(0x1e8)]+'\x22'),this[_0x13dacd(0x1e8)];}async[_0x2dc07e(0x1d3)](_0x5a8375,_0x15a9a2=null){const _0x54d15b=_0x2dc07e,_0x12a81a={'dDaru':'system','rDKiN':function(_0x274325,_0x25c157){return _0x274325===_0x25c157;},'Hrikw':_0x54d15b(0x206),'fuiYZ':'APIConnectionError','hItrJ':_0x54d15b(0x1cd),'ZeqQw':function(_0x4e8097){return _0x4e8097();},'pinWB':function(_0xa87fb,_0x53efa5){return _0xa87fb===_0x53efa5;}},_0x3fac2d=await this['resolveOllamaModel']();let _0x428581;try{const _0x36648a={};_0x36648a[_0x54d15b(0x1e7)]=_0x54d15b(0x1fb),_0x36648a[_0x54d15b(0x187)]=_0x5a8375,_0x428581=await this[_0x54d15b(0x158)][_0x54d15b(0x18a)][_0x54d15b(0x112)][_0x54d15b(0x1cf)]({'model':_0x3fac2d,'messages':[{'role':_0x12a81a[_0x54d15b(0xf5)],'content':this[_0x54d15b(0x1c4)](_0x15a9a2)},_0x36648a],'temperature':0.3,'max_tokens':0x1f4});}catch(_0xebf3fb){if(_0x12a81a[_0x54d15b(0x1bf)](_0x12a81a['Hrikw'],_0x54d15b(0xf8)))return _0x5a9cce[_0x54d15b(0xdd)]('๐ฏ\x20Using\x20cached\x20response\x20(in-memory)'),_0x22941b[_0x54d15b(0x151)];else{const _0x3185a2=_0xebf3fb[_0x54d15b(0x1da)]===_0x12a81a[_0x54d15b(0x159)]||_0xebf3fb[_0x54d15b(0x11b)]===_0x54d15b(0x1cd)||_0x12a81a[_0x54d15b(0x1bf)](_0xebf3fb['cause']?.['code'],_0x12a81a[_0x54d15b(0x20f)])||/connection error|fetch failed|ECONNREFUSED/i[_0x54d15b(0x100)](_0xebf3fb['message']||'');if(_0x3185a2)throw new Error(_0x54d15b(0x1b8)+_0x12a81a[_0x54d15b(0x1f7)](getOllamaBaseUrl)+_0x54d15b(0x1ed));if(_0x12a81a['pinWB'](_0xebf3fb[_0x54d15b(0x183)],0x194))throw new Error(_0x54d15b(0x203)+_0x3fac2d+'\x22\x20is\x20not\x20installed.\x20Pull\x20it\x20with:\x20ollama\x20pull\x20'+_0x3fac2d);throw _0xebf3fb;}}let _0x50cd09=_0x428581['choices'][0x0]['message'][_0x54d15b(0x187)]['trim']();return _0x50cd09=this[_0x54d15b(0x15a)](_0x50cd09),_0x50cd09;}async[_0x2dc07e(0x1de)](_0x5a3e2a,_0x110e0c=null){const _0x43781d=_0x2dc07e,_0xc2ce20={};_0xc2ce20[_0x43781d(0x143)]=_0x43781d(0xf4),_0xc2ce20[_0x43781d(0x1eb)]='groq',_0xc2ce20[_0x43781d(0x20c)]=_0x43781d(0x1b6),_0xc2ce20[_0x43781d(0x108)]=_0x43781d(0x1fb);const _0x3d05b9=_0xc2ce20;if(!this[_0x43781d(0x130)])throw new Error(_0x3d05b9[_0x43781d(0x143)]);const _0x5a8eff=this[_0x43781d(0x212)](_0x3d05b9[_0x43781d(0x1eb)]),_0x4b0b80=await this[_0x43781d(0x130)][_0x43781d(0x18a)][_0x43781d(0x112)][_0x43781d(0x1cf)]({'model':_0x5a8eff,'messages':[{'role':_0x3d05b9[_0x43781d(0x20c)],'content':this['getSystemPrompt'](_0x110e0c)},{'role':_0x3d05b9['buFHS'],'content':_0x5a3e2a}],'temperature':0.3,'max_tokens':0x1f4});let _0x599d75=_0x4b0b80[_0x43781d(0x217)][0x0]['message'][_0x43781d(0x187)][_0x43781d(0x1a9)]();return _0x599d75=this['cleanAIResponse'](_0x599d75),_0x599d75;}async[_0x2dc07e(0x1db)](_0x412d08,_0x19b0ed=null){const _0x3b2c0c=_0x2dc07e,_0x4bf809={};_0x4bf809[_0x3b2c0c(0x167)]=function(_0x9f5cfe,_0x5e4ba8){return _0x9f5cfe!==_0x5e4ba8;},_0x4bf809[_0x3b2c0c(0x20a)]=_0x3b2c0c(0x116),_0x4bf809[_0x3b2c0c(0x1c0)]=_0x3b2c0c(0x118),_0x4bf809['TzwgL']='system',_0x4bf809[_0x3b2c0c(0x1f6)]=_0x3b2c0c(0x1fb);const _0x29d9e6=_0x4bf809;if(!this[_0x3b2c0c(0x118)]){if(_0x29d9e6[_0x3b2c0c(0x167)]('ltiql',_0x3b2c0c(0x1e3)))this[_0x3b2c0c(0x125)]=_0x118c7b;else throw new Error(_0x29d9e6[_0x3b2c0c(0x20a)]);}const _0x3bd92c=this['getModelForProvider'](_0x29d9e6[_0x3b2c0c(0x1c0)]),_0x5bdd1=await this['cohere']['chat'][_0x3b2c0c(0x112)]['create']({'model':_0x3bd92c,'messages':[{'role':_0x29d9e6['TzwgL'],'content':this[_0x3b2c0c(0x1c4)](_0x19b0ed)},{'role':_0x29d9e6['YZebs'],'content':_0x412d08}],'temperature':0.3,'max_tokens':0x1f4});let _0x1efd04=_0x5bdd1[_0x3b2c0c(0x217)][0x0][_0x3b2c0c(0x213)][_0x3b2c0c(0x187)][_0x3b2c0c(0x1a9)]();return _0x1efd04=this[_0x3b2c0c(0x15a)](_0x1efd04),_0x1efd04;}async[_0x2dc07e(0x1fe)](_0xddc3bd,_0x27b95f=null){const _0x3a7a5a=_0x2dc07e,_0x5151e1={};_0x5151e1[_0x3a7a5a(0x17e)]=_0x3a7a5a(0xff),_0x5151e1['AZeCf']=_0x3a7a5a(0x134),_0x5151e1[_0x3a7a5a(0xe8)]=_0x3a7a5a(0x1fb);const _0xcf5d2a=_0x5151e1;if(!this[_0x3a7a5a(0x134)])throw new Error(_0xcf5d2a[_0x3a7a5a(0x17e)]);const _0x40f90c=this[_0x3a7a5a(0x212)](_0xcf5d2a['AZeCf']),_0x4bc68e={};_0x4bc68e[_0x3a7a5a(0x1e7)]=_0xcf5d2a[_0x3a7a5a(0xe8)],_0x4bc68e[_0x3a7a5a(0x187)]=_0xddc3bd;const _0x4e2247=await this[_0x3a7a5a(0x134)][_0x3a7a5a(0x18a)]['completions'][_0x3a7a5a(0x1cf)]({'model':_0x40f90c,'messages':[{'role':'system','content':this[_0x3a7a5a(0x1c4)](_0x27b95f)},_0x4bc68e],'temperature':0.3,'max_tokens':0x1f4});let _0x46522e=_0x4e2247[_0x3a7a5a(0x217)][0x0][_0x3a7a5a(0x213)][_0x3a7a5a(0x187)][_0x3a7a5a(0x1a9)]();return _0x46522e=this[_0x3a7a5a(0x15a)](_0x46522e),_0x46522e;}[_0x2dc07e(0x15a)](_0x598e13){const _0x32229f=_0x2dc07e,_0x214a85={};_0x214a85['CkpPa']=_0x32229f(0x1af),_0x214a85[_0x32229f(0xde)]=function(_0x1f75a4,_0x13a21e){return _0x1f75a4===_0x13a21e;},_0x214a85['TrFmX']=_0x32229f(0xeb),_0x214a85[_0x32229f(0x198)]=_0x32229f(0x1e4),_0x214a85['CIvRC']=_0x32229f(0x16c),_0x214a85[_0x32229f(0x136)]=_0x32229f(0x1b5),_0x214a85[_0x32229f(0x1f8)]=_0x32229f(0x161),_0x214a85['PenZL']='WAIT\x20',_0x214a85['XfeIX']=_0x32229f(0x17c),_0x214a85[_0x32229f(0x107)]='restart',_0x214a85[_0x32229f(0x186)]='rotate\x20',_0x214a85['jrHyR']='lightmode',_0x214a85[_0x32229f(0x11e)]=_0x32229f(0x1df),_0x214a85[_0x32229f(0x210)]=_0x32229f(0x13a),_0x214a85[_0x32229f(0x10e)]=function(_0x39109b,_0x352b75){return _0x39109b===_0x352b75;},_0x214a85[_0x32229f(0x119)]=_0x32229f(0x1e5),_0x214a85[_0x32229f(0x13b)]=function(_0x34ad77,_0x382a68){return _0x34ad77===_0x382a68;};const _0x275e3d=_0x214a85;_0x598e13=_0x598e13['replace'](/```[\s\S]*?```/g,'')[_0x32229f(0x1a9)](),_0x598e13=_0x598e13[_0x32229f(0x133)](/```/g,'')['trim']();const _0x605cf8=_0x598e13['split']('\x0a'),_0x183c73=_0x605cf8[_0x32229f(0x18d)](_0x8524e6=>{const _0x5a0faf=_0x32229f,_0x37c6=_0x8524e6['trim']();if(!_0x37c6)return![];if(_0x37c6[_0x5a0faf(0x1dc)](_0x275e3d[_0x5a0faf(0x1c1)]))return!![];if(_0x37c6['startsWith'](_0x5a0faf(0x123)))return!![];if(_0x275e3d[_0x5a0faf(0xde)](_0x37c6,_0x275e3d['TrFmX']))return!![];if(_0x275e3d['WxkQa'](_0x37c6,'back'))return!![];if(_0x37c6['startsWith'](_0x275e3d[_0x5a0faf(0x198)]))return!![];if(_0x37c6[_0x5a0faf(0x1dc)](_0x275e3d[_0x5a0faf(0x178)]))return!![];if(_0x37c6['startsWith'](_0x5a0faf(0x1ce)))return!![];if(_0x37c6[_0x5a0faf(0x1dc)](_0x275e3d[_0x5a0faf(0x136)]))return!![];if(_0x37c6[_0x5a0faf(0x1dc)](_0x275e3d['gIJya']))return!![];if(_0x37c6[_0x5a0faf(0x1dc)](_0x275e3d[_0x5a0faf(0x126)]))return!![];if(_0x37c6[_0x5a0faf(0x1dc)](_0x275e3d[_0x5a0faf(0x169)]))return!![];if(_0x37c6[_0x5a0faf(0x1dc)](_0x275e3d[_0x5a0faf(0x107)]))return!![];if(_0x37c6[_0x5a0faf(0x1dc)](_0x275e3d[_0x5a0faf(0x186)]))return!![];if(_0x37c6[_0x5a0faf(0x1dc)]('darkmode'))return!![];if(_0x37c6[_0x5a0faf(0x1dc)](_0x275e3d[_0x5a0faf(0x121)]))return!![];if(_0x37c6[_0x5a0faf(0x1dc)](_0x5a0faf(0x1ff)))return!![];if(_0x37c6[_0x5a0faf(0x1dc)](_0x275e3d[_0x5a0faf(0x11e)]))return!![];if(_0x37c6[_0x5a0faf(0x1dc)]('volume\x20'))return!![];if(_0x37c6===_0x5a0faf(0xe5))return!![];if(_0x37c6===_0x275e3d[_0x5a0faf(0x210)])return!![];if(_0x275e3d[_0x5a0faf(0x10e)](_0x37c6,_0x275e3d[_0x5a0faf(0x119)]))return!![];if(_0x275e3d[_0x5a0faf(0x13b)](_0x37c6,'quicksettings'))return!![];return!![];});return _0x183c73[_0x32229f(0x111)]('\x0a')[_0x32229f(0x1a9)]();}[_0x2dc07e(0x1d9)](){const _0x594c6c=_0x2dc07e,_0x277040={};_0x277040[_0x594c6c(0x1be)]='openai',_0x277040[_0x594c6c(0x174)]=_0x594c6c(0x177),_0x277040[_0x594c6c(0x150)]='Google\x20Gemini',_0x277040['oBJdZ']='copilot',_0x277040[_0x594c6c(0x176)]='groq',_0x277040[_0x594c6c(0x1b7)]='Cohere',_0x277040[_0x594c6c(0x211)]=_0x594c6c(0x134),_0x277040[_0x594c6c(0x185)]=_0x594c6c(0xe4),_0x277040['JODyd']=_0x594c6c(0x14a),_0x277040[_0x594c6c(0x15f)]=_0x594c6c(0x158),_0x277040['dqnic']=_0x594c6c(0x188);const _0x43fbe6=_0x277040,_0x1cec40=[],_0x59a378={};_0x59a378['id']=_0x43fbe6['XawpI'],_0x59a378[_0x594c6c(0x1da)]=_0x594c6c(0x1cc),_0x59a378[_0x594c6c(0x155)]='๐ค';if(this[_0x594c6c(0x145)])_0x1cec40[_0x594c6c(0x101)](_0x59a378);const _0x192465={};_0x192465['id']=_0x43fbe6['kXbsY'],_0x192465[_0x594c6c(0x1da)]=_0x43fbe6[_0x594c6c(0x150)],_0x192465[_0x594c6c(0x155)]='โจ';if(this[_0x594c6c(0x177)])_0x1cec40[_0x594c6c(0x101)](_0x192465);const _0x64f742={};_0x64f742['id']=_0x594c6c(0x1e1),_0x64f742[_0x594c6c(0x1da)]='Anthropic\x20Claude',_0x64f742[_0x594c6c(0x155)]='๐ง ';if(this[_0x594c6c(0x1e1)])_0x1cec40[_0x594c6c(0x101)](_0x64f742);const _0x34235a={};_0x34235a['id']=_0x43fbe6[_0x594c6c(0xfb)],_0x34235a['name']=_0x594c6c(0x1a1),_0x34235a[_0x594c6c(0x155)]='๐';if(this[_0x594c6c(0x17b)])_0x1cec40[_0x594c6c(0x101)](_0x34235a);const _0x5dfe9a={};_0x5dfe9a['id']=_0x43fbe6['qojVg'],_0x5dfe9a['name']=_0x594c6c(0xfe),_0x5dfe9a[_0x594c6c(0x155)]='โก';if(this[_0x594c6c(0x130)])_0x1cec40[_0x594c6c(0x101)](_0x5dfe9a);const _0xdac6b1={};_0xdac6b1['id']=_0x594c6c(0x118),_0xdac6b1[_0x594c6c(0x1da)]=_0x43fbe6[_0x594c6c(0x1b7)],_0xdac6b1['icon']='๐';if(this[_0x594c6c(0x118)])_0x1cec40[_0x594c6c(0x101)](_0xdac6b1);const _0x237676={};_0x237676['id']=_0x43fbe6['wwLAy'],_0x237676['name']=_0x43fbe6[_0x594c6c(0x185)],_0x237676['icon']=_0x43fbe6[_0x594c6c(0x1ca)];if(this[_0x594c6c(0x134)])_0x1cec40[_0x594c6c(0x101)](_0x237676);const _0x3cf893={};_0x3cf893['id']=_0x43fbe6[_0x594c6c(0x15f)],_0x3cf893[_0x594c6c(0x1da)]=_0x43fbe6[_0x594c6c(0x218)],_0x3cf893['icon']='๐ฆ';if(this[_0x594c6c(0x158)])_0x1cec40['push'](_0x3cf893);return _0x1cec40;}['setProvider'](_0x5499ca,_0x43df27=null){const _0x5bdaef=_0x2dc07e,_0x41f28f={};_0x41f28f[_0x5bdaef(0x1ea)]=function(_0xe7e88a,_0x141457){return _0xe7e88a===_0x141457;},_0x41f28f[_0x5bdaef(0x1ac)]=_0x5bdaef(0xeb),_0x41f28f[_0x5bdaef(0x12b)]=function(_0x39a1f6,_0x824a96){return _0x39a1f6===_0x824a96;},_0x41f28f['otXfn']=_0x5bdaef(0x1c9),_0x41f28f['VsUwp']='url\x20',_0x41f28f[_0x5bdaef(0x127)]='click\x20',_0x41f28f['xUKAn']='tap\x20',_0x41f28f[_0x5bdaef(0x179)]=_0x5bdaef(0x1b5),_0x41f28f[_0x5bdaef(0x162)]=_0x5bdaef(0x161),_0x41f28f[_0x5bdaef(0x16d)]='WAIT\x20',_0x41f28f[_0x5bdaef(0x13e)]='screenshot',_0x41f28f[_0x5bdaef(0x16a)]=_0x5bdaef(0x20b),_0x41f28f[_0x5bdaef(0x20d)]=_0x5bdaef(0x1bc),_0x41f28f['IqCOJ']=_0x5bdaef(0x1ff),_0x41f28f[_0x5bdaef(0x1ba)]=_0x5bdaef(0x1df),_0x41f28f['akfvi']='volume\x20',_0x41f28f[_0x5bdaef(0x132)]=_0x5bdaef(0xe5),_0x41f28f[_0x5bdaef(0x139)]='recent',_0x41f28f[_0x5bdaef(0x1b4)]=function(_0x2b8354,_0x3da353){return _0x2b8354===_0x3da353;},_0x41f28f['yZcUd']='notifications',_0x41f28f['ySHTT']='quicksettings',_0x41f28f[_0x5bdaef(0x1f3)]=function(_0x426171,_0x552412){return _0x426171!==_0x552412;},_0x41f28f[_0x5bdaef(0x122)]=_0x5bdaef(0x14f);const _0xdcc94f=_0x41f28f;if(!AI_PROVIDERS_CONFIG[_0x5499ca])return console['warn']('โ ๏ธ\x20\x20Refusing\x20to\x20switch\x20to\x20unknown\x20AI\x20provider\x20\x22'+_0x5499ca+'\x22'),![];const _0x42e4ea=this['getAvailableProviders']()[_0x5bdaef(0x16f)](_0x40d520=>_0x40d520['id']);if(_0x42e4ea[_0x5bdaef(0x1ab)](_0x5499ca)){this[_0x5bdaef(0x10f)]=_0x5499ca;if(_0x43df27){if(_0xdcc94f[_0x5bdaef(0x1f3)](_0x5bdaef(0x1a0),_0xdcc94f[_0x5bdaef(0x122)]))this['model']=_0x43df27;else{_0xceb916=_0x325b0f[_0x5bdaef(0x133)](/```[\s\S]*?```/g,'')[_0x5bdaef(0x1a9)](),_0xb90376=_0xb5a364[_0x5bdaef(0x133)](/```/g,'')['trim']();const _0x205d4a=_0x657e7b['split']('\x0a'),_0x17b437=_0x205d4a[_0x5bdaef(0x18d)](_0x2f1acb=>{const _0x41ea58=_0x5bdaef,_0x34d7af=_0x2f1acb['trim']();if(!_0x34d7af)return![];if(_0x34d7af[_0x41ea58(0x1dc)]('launch\x20'))return!![];if(_0x34d7af[_0x41ea58(0x1dc)](_0x41ea58(0x123)))return!![];if(RhJCrk[_0x41ea58(0x1ea)](_0x34d7af,RhJCrk[_0x41ea58(0x1ac)]))return!![];if(RhJCrk[_0x41ea58(0x12b)](_0x34d7af,RhJCrk['otXfn']))return!![];if(_0x34d7af[_0x41ea58(0x1dc)](RhJCrk['VsUwp']))return!![];if(_0x34d7af[_0x41ea58(0x1dc)](RhJCrk[_0x41ea58(0x127)]))return!![];if(_0x34d7af['startsWith'](RhJCrk[_0x41ea58(0x105)]))return!![];if(_0x34d7af[_0x41ea58(0x1dc)](RhJCrk[_0x41ea58(0x179)]))return!![];if(_0x34d7af[_0x41ea58(0x1dc)](RhJCrk['cYcML']))return!![];if(_0x34d7af['startsWith'](RhJCrk[_0x41ea58(0x16d)]))return!![];if(_0x34d7af[_0x41ea58(0x1dc)](RhJCrk[_0x41ea58(0x13e)]))return!![];if(_0x34d7af[_0x41ea58(0x1dc)](RhJCrk[_0x41ea58(0x16a)]))return!![];if(_0x34d7af['startsWith'](RhJCrk[_0x41ea58(0x20d)]))return!![];if(_0x34d7af[_0x41ea58(0x1dc)](_0x41ea58(0x21a)))return!![];if(_0x34d7af[_0x41ea58(0x1dc)](_0x41ea58(0x204)))return!![];if(_0x34d7af[_0x41ea58(0x1dc)](RhJCrk[_0x41ea58(0x147)]))return!![];if(_0x34d7af[_0x41ea58(0x1dc)](RhJCrk['LAvKU']))return!![];if(_0x34d7af[_0x41ea58(0x1dc)](RhJCrk[_0x41ea58(0x15c)]))return!![];if(_0x34d7af===RhJCrk[_0x41ea58(0x132)])return!![];if(RhJCrk[_0x41ea58(0x1ea)](_0x34d7af,RhJCrk[_0x41ea58(0x139)]))return!![];if(RhJCrk[_0x41ea58(0x1b4)](_0x34d7af,RhJCrk['yZcUd']))return!![];if(RhJCrk[_0x41ea58(0x1b4)](_0x34d7af,RhJCrk['ySHTT']))return!![];return!![];});return _0x17b437['join']('\x0a')[_0x5bdaef(0x1a9)]();}}return!![];}return![];}[_0x2dc07e(0x14b)](){const _0x108dca=_0x2dc07e;return{'id':this['provider'],'name':this[_0x108dca(0x200)](this[_0x108dca(0x10f)]),'model':this[_0x108dca(0x125)]||this[_0x108dca(0x212)](this[_0x108dca(0x10f)]),'available':this[_0x108dca(0x1d9)]()};}[_0x2dc07e(0x200)](_0x66946d){const _0x28cbb6=_0x2dc07e,_0x34c046={};_0x34c046['tAWZS']='GitHub\x20Copilot',_0x34c046[_0x28cbb6(0x1dd)]=_0x28cbb6(0xe4),_0x34c046[_0x28cbb6(0x202)]='Unknown';const _0x1c9dca=_0x34c046,_0x4f6ea7={};_0x4f6ea7[_0x28cbb6(0x145)]=_0x28cbb6(0x1cc),_0x4f6ea7['gemini']=_0x28cbb6(0x19a),_0x4f6ea7[_0x28cbb6(0x1e1)]=_0x28cbb6(0xe3),_0x4f6ea7[_0x28cbb6(0x17b)]=_0x1c9dca[_0x28cbb6(0x1f4)],_0x4f6ea7['groq']='Groq',_0x4f6ea7[_0x28cbb6(0x118)]=_0x28cbb6(0x19d),_0x4f6ea7[_0x28cbb6(0x134)]=_0x1c9dca[_0x28cbb6(0x1dd)];const _0x284f69=_0x4f6ea7;return _0x284f69[_0x66946d]||_0x1c9dca['ZpCNf'];}['clearCache'](){const _0x37463b=_0x2dc07e,_0x2ddd62=this[_0x37463b(0x102)]['size'];return this[_0x37463b(0x102)]['clear'](),console[_0x37463b(0xdd)](_0x37463b(0x184)+_0x2ddd62+_0x37463b(0x11a)),_0x2ddd62;}[_0x2dc07e(0x15d)](){const _0x24a4fd=_0x2dc07e,_0x991dcd={};_0x991dcd[_0x24a4fd(0x10d)]='memory-only';const _0x5ea316=_0x991dcd,_0x323bae={};return _0x323bae[_0x24a4fd(0x19b)]=this[_0x24a4fd(0x102)]['size'],_0x323bae[_0x24a4fd(0x1b3)]=0x32,_0x323bae[_0x24a4fd(0x114)]=this[_0x24a4fd(0x214)],_0x323bae['storageType']=_0x5ea316[_0x24a4fd(0x10d)],_0x323bae[_0x24a4fd(0xf7)]=![],_0x323bae;}}function _0x168d(_0x64636b,_0x23b0bb){_0x64636b=_0x64636b-0xdc;const _0x507e66=_0x507e();let _0x168de5=_0x507e66[_0x64636b];if(_0x168d['vBXxow']===undefined){var _0x40768a=function(_0x41b312){const _0x332198='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x16d4cc='',_0x5591d5='';for(let _0x3459d6=0x0,_0xdf1b71,_0x1e2ace,_0x468d03=0x0;_0x1e2ace=_0x41b312['charAt'](_0x468d03++);~_0x1e2ace&&(_0xdf1b71=_0x3459d6%0x4?_0xdf1b71*0x40+_0x1e2ace:_0x1e2ace,_0x3459d6++%0x4)?_0x16d4cc+=String['fromCharCode'](0xff&_0xdf1b71>>(-0x2*_0x3459d6&0x6)):0x0){_0x1e2ace=_0x332198['indexOf'](_0x1e2ace);}for(let _0x109118=0x0,_0x250a43=_0x16d4cc['length'];_0x109118<_0x250a43;_0x109118++){_0x5591d5+='%'+('00'+_0x16d4cc['charCodeAt'](_0x109118)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x5591d5);};_0x168d['JSpmyb']=_0x40768a,_0x168d['GKHHWo']={},_0x168d['vBXxow']=!![];}const _0x574b6d=_0x507e66[0x0],_0x466923=_0x64636b+_0x574b6d,_0x1fcf0b=_0x168d['GKHHWo'][_0x466923];return!_0x1fcf0b?(_0x168de5=_0x168d['JSpmyb'](_0x168de5),_0x168d['GKHHWo'][_0x466923]=_0x168de5):_0x168de5=_0x1fcf0b,_0x168de5;}module['exports']=AIProviderManager,module[_0x2dc07e(0x199)][_0x2dc07e(0xe7)]=getOllamaBaseUrl;
|