echo-ai-agent 1.0.69 → 1.0.70

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/cli.js CHANGED
@@ -125,30 +125,34 @@ program
125
125
  const { default: inquirer } = require('inquirer');
126
126
 
127
127
  const mainMenu = async () => {
128
+ console.log(chalk.cyan.bold('\n⚙️ Echo Configuration Management\n'));
129
+ console.log(chalk.gray(' Use ↑↓ arrow keys to navigate, Enter to select\n'));
130
+
128
131
  const { action } = await inquirer.prompt([
129
132
  {
130
133
  type: 'list',
131
134
  name: 'action',
132
- message: chalk.cyan.bold('Echo Configuration Management:'),
135
+ message: 'Select an option:',
133
136
  pageSize: 12,
134
137
  choices: [
135
- { name: '📋 View Current Configuration', value: 'list' },
136
- { name: '🎨 Appearance Settings', value: 'appearance' },
137
- { name: '👤 Personalization', value: 'personalization' },
138
- { name: '🤖 AI Intelligence', value: 'ai' },
139
- { name: '🎙️ Voice Settings', value: 'voice' },
140
- { name: '🧠 Memory Management', value: 'memory' },
141
- { name: '🧩 Plugin Management', value: 'plugins' },
142
- { name: '⌨️ Workflow Macros', value: 'workflows' },
143
- { name: '🚀 Startup Settings', value: 'startup' },
144
- { name: '🔄 Auto-Update Settings', value: 'autoupdate' },
145
- { name: '🔔 Notification Settings', value: 'notify' },
138
+ { name: '📋 View Current Configuration', value: 'list', short: 'View Config' },
139
+ { name: '🎨 Appearance Settings', value: 'appearance', short: 'Appearance' },
140
+ { name: '👤 Personalization', value: 'personalization', short: 'Personalization' },
141
+ { name: '🤖 AI Intelligence', value: 'ai', short: 'AI Settings' },
142
+ { name: '🎙️ Voice Settings', value: 'voice', short: 'Voice' },
143
+ { name: '🧠 Memory Management', value: 'memory', short: 'Memory' },
144
+ { name: '🧩 Plugin Management', value: 'plugins', short: 'Plugins' },
145
+ { name: '⌨️ Workflow Macros', value: 'workflows', short: 'Workflows' },
146
+ { name: '🚀 Startup Settings', value: 'startup', short: 'Startup' },
147
+ { name: '🔄 Auto-Update Settings', value: 'autoupdate', short: 'Auto-Update' },
148
+ { name: '🔔 Notification Settings', value: 'notify', short: 'Notifications' },
146
149
  new inquirer.Separator('───'),
147
- { name: '📚 Documentation Hub', value: 'docs' },
148
- { name: '⚠️ Reset All Settings', value: 'reset' },
150
+ { name: '📚 Documentation Hub', value: 'docs', short: 'Docs' },
151
+ { name: '⚠️ Reset All Settings', value: 'reset', short: 'Reset' },
149
152
  new inquirer.Separator(),
150
153
  { name: '❌ Exit', value: 'exit', short: 'Exit' }
151
- ]
154
+ ],
155
+ loop: false
152
156
  }
153
157
  ]);
154
158
 
@@ -166,6 +170,7 @@ program
166
170
 
167
171
  case 'appearance':
168
172
  console.log(chalk.cyan.bold('\n🎨 Appearance Settings\n'));
173
+ console.log(chalk.gray(' Use ↑↓ arrow keys to navigate, Enter to select\n'));
169
174
  const appAnswers = await inquirer.prompt([
170
175
  {
171
176
  type: 'list',
@@ -180,7 +185,8 @@ program
180
185
  { name: '🔷 Blue (Ocean)', value: 'blue', short: 'Blue' }
181
186
  ],
182
187
  default: ['cyan', 'purple', 'green', 'gold', 'red', 'blue'].indexOf(config.get('theme')) || 0,
183
- pageSize: 6
188
+ pageSize: 6,
189
+ loop: false
184
190
  },
185
191
  {
186
192
  type: 'list',
@@ -192,7 +198,8 @@ program
192
198
  { name: '🖥️ Large (Full View)', value: 'large', short: 'Large' }
193
199
  ],
194
200
  default: ['small', 'medium', 'large'].indexOf(config.get('size')) || 1,
195
- pageSize: 3
201
+ pageSize: 3,
202
+ loop: false
196
203
  }
197
204
  ]);
198
205
  config.set('theme', appAnswers.theme);
@@ -217,6 +224,7 @@ program
217
224
 
218
225
  case 'voice':
219
226
  console.log(chalk.cyan.bold('\n🎙️ Voice Recognition Settings\n'));
227
+ console.log(chalk.gray(' Use ↑↓ arrow keys to navigate, Enter to select\n'));
220
228
  const { voiceProvider } = await inquirer.prompt([
221
229
  {
222
230
  type: 'list',
@@ -228,7 +236,8 @@ program
228
236
  { name: '🏠 Whisper Local (Privacy, Offline)', value: 'whisper-local', short: 'Whisper Local' }
229
237
  ],
230
238
  default: ['browser', 'whisper', 'whisper-local'].indexOf(config.get('voiceProvider')) || 0,
231
- pageSize: 3
239
+ pageSize: 3,
240
+ loop: false
232
241
  }
233
242
  ]);
234
243
 
@@ -259,6 +268,7 @@ program
259
268
 
260
269
  case 'memory':
261
270
  console.log(chalk.cyan.bold('\n🧠 Memory Management\n'));
271
+ console.log(chalk.gray(' Use ↑↓ arrow keys to navigate, Enter to select\n'));
262
272
  const memEnabled = config.get('memoryEnabled') !== false;
263
273
  const memAction = await inquirer.prompt([
264
274
  {
@@ -270,7 +280,8 @@ program
270
280
  { name: '🗑️ Clear All Memory', value: 'clear', short: 'Clear Memory' },
271
281
  { name: '⬅️ Back', value: 'back', short: 'Back' }
272
282
  ],
273
- pageSize: 3
283
+ pageSize: 3,
284
+ loop: false
274
285
  }
275
286
  ]);
276
287
 
@@ -297,6 +308,7 @@ program
297
308
 
298
309
  case 'plugins':
299
310
  console.log(chalk.cyan.bold('\n🧩 Plugin Management\n'));
311
+ console.log(chalk.gray(' Use ↑↓ arrow keys to navigate, Enter to select\n'));
300
312
  const PluginManager = require('./scripts/plugin-manager');
301
313
  const generator = require('./scripts/plugin-generator');
302
314
  const pm = new PluginManager();
@@ -312,7 +324,8 @@ program
312
324
  { name: '🛠️ Create New Plugin', value: 'create', short: 'Create' },
313
325
  { name: '⬅️ Back', value: 'back', short: 'Back' }
314
326
  ],
315
- pageSize: 3
327
+ pageSize: 3,
328
+ loop: false
316
329
  }
317
330
  ]);
318
331
 
@@ -367,6 +380,7 @@ program
367
380
  }
368
381
 
369
382
  console.log(chalk.cyan.bold(`\n🤖 AI Model Selection - ${providerData.name}\n`));
383
+ console.log(chalk.gray(' Use ↑↓ arrow keys to navigate, Enter to select\n'));
370
384
  const { selectedModel } = await inquirer.prompt([
371
385
  {
372
386
  type: 'list',
@@ -378,7 +392,8 @@ program
378
392
  short: m.name
379
393
  })),
380
394
  default: providerData.models.findIndex(m => m.id === config.get('model')) || 0,
381
- pageSize: providerData.models.length
395
+ pageSize: Math.min(providerData.models.length, 8),
396
+ loop: false
382
397
  }
383
398
  ]);
384
399
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "echo-ai-agent",
3
- "version": "1.0.69",
3
+ "version": "1.0.70",
4
4
  "description": "A premium JARVIS-inspired AI assistant for your desktop - voice-controlled, intelligent, and beautiful",
5
5
  "main": "main/main.js",
6
6
  "bin": {
@@ -15,34 +15,36 @@ async function run() {
15
15
 
16
16
  // ========== STEP 1: AI Provider Selection ==========
17
17
  console.log(chalk.cyan.bold('\n🧠 Step 1: AI Intelligence Provider\n'));
18
+ console.log(chalk.gray(' Use ↑↓ arrow keys to navigate, Enter to select\n'));
18
19
  const { provider } = await inquirer.prompt([
19
20
  {
20
21
  type: 'list',
21
22
  name: 'provider',
22
23
  message: 'Select your AI Provider:',
23
24
  choices: [
24
- {
25
- name: '🟢 Google Gemini (Free tier, Fast, Multimodal)',
25
+ {
26
+ name: '🟢 Google Gemini (Free tier, Fast, Multimodal)',
26
27
  value: 'google',
27
28
  short: 'Google Gemini'
28
29
  },
29
- {
30
- name: '🔵 OpenAI (GPT-4o, Most Popular)',
30
+ {
31
+ name: '🔵 OpenAI (GPT-4o, Most Popular)',
31
32
  value: 'openai',
32
33
  short: 'OpenAI'
33
34
  },
34
- {
35
- name: '🟣 Anthropic (Claude, Best for Reasoning)',
35
+ {
36
+ name: '🟣 Anthropic (Claude, Best for Reasoning)',
36
37
  value: 'anthropic',
37
38
  short: 'Anthropic'
38
39
  },
39
- {
40
- name: '🔷 DeepSeek (Affordable & Powerful)',
40
+ {
41
+ name: '🔷 DeepSeek (Affordable & Powerful)',
41
42
  value: 'deepseek',
42
43
  short: 'DeepSeek'
43
44
  }
44
45
  ],
45
- pageSize: 4
46
+ pageSize: 4,
47
+ loop: false
46
48
  }
47
49
  ]);
48
50
 
@@ -70,6 +72,7 @@ async function run() {
70
72
 
71
73
  // ========== STEP 3: Model Selection ==========
72
74
  console.log(chalk.cyan.bold('\n🤖 Step 3: AI Model\n'));
75
+ console.log(chalk.gray(' Use ↑↓ arrow keys to navigate, Enter to select\n'));
73
76
  const models = AI_MODELS[provider].models;
74
77
  const { model } = await inquirer.prompt([
75
78
  {
@@ -82,7 +85,8 @@ async function run() {
82
85
  short: m.name
83
86
  })),
84
87
  default: models.findIndex(m => m.id === AI_MODELS[provider].defaultModel) || 0,
85
- pageSize: models.length
88
+ pageSize: Math.min(models.length, 8),
89
+ loop: false
86
90
  }
87
91
  ]);
88
92
 
@@ -100,30 +104,32 @@ async function run() {
100
104
 
101
105
  // ========== STEP 5: Voice Engine ==========
102
106
  console.log(chalk.cyan.bold('\n🎙️ Step 5: Voice Recognition\n'));
107
+ console.log(chalk.gray(' Use ↑↓ arrow keys to navigate, Enter to select\n'));
103
108
  const { voiceProvider } = await inquirer.prompt([
104
109
  {
105
110
  type: 'list',
106
111
  name: 'voiceProvider',
107
112
  message: 'Select Voice Recognition Engine:',
108
113
  choices: [
109
- {
110
- name: '🌐 Browser API (Native, Fast, Free - Recommended)',
114
+ {
115
+ name: '🌐 Browser API (Native, Fast, Free - Recommended)',
111
116
  value: 'browser',
112
117
  short: 'Browser API'
113
118
  },
114
- {
115
- name: '☁️ Whisper Cloud (Best Accuracy, Needs OpenAI Key)',
119
+ {
120
+ name: '☁️ Whisper Cloud (Best Accuracy, Needs OpenAI Key)',
116
121
  value: 'whisper',
117
122
  short: 'Whisper Cloud'
118
123
  },
119
- {
120
- name: '🏠 Whisper Local (Privacy-Focused, Offline)',
124
+ {
125
+ name: '🏠 Whisper Local (Privacy-Focused, Offline)',
121
126
  value: 'whisper-local',
122
127
  short: 'Whisper Local'
123
128
  }
124
129
  ],
125
130
  default: config.get('voiceProvider') || 'browser',
126
- pageSize: 3
131
+ pageSize: 3,
132
+ loop: false
127
133
  }
128
134
  ]);
129
135