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 +36 -21
- package/package.json +1 -1
- package/scripts/setup-wizard.js +23 -17
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:
|
|
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
package/scripts/setup-wizard.js
CHANGED
|
@@ -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
|
|