@lanonasis/cli 3.6.5 → 3.6.7
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/dist/commands/api-keys.d.ts +2 -1
- package/dist/commands/api-keys.js +73 -78
- package/dist/commands/auth.js +160 -167
- package/dist/commands/completion.js +31 -39
- package/dist/commands/config.js +162 -201
- package/dist/commands/enhanced-memory.js +11 -17
- package/dist/commands/guide.js +79 -88
- package/dist/commands/init.js +14 -20
- package/dist/commands/mcp.d.ts +10 -0
- package/dist/commands/mcp.js +167 -156
- package/dist/commands/memory.js +77 -83
- package/dist/commands/organization.js +15 -21
- package/dist/commands/topics.js +52 -58
- package/dist/core/achievements.js +19 -26
- package/dist/core/architecture.js +42 -59
- package/dist/core/dashboard.js +71 -81
- package/dist/core/error-handler.js +30 -39
- package/dist/core/power-mode.js +46 -53
- package/dist/core/progress.js +35 -44
- package/dist/core/welcome.js +56 -64
- package/dist/enhanced-cli.js +49 -58
- package/dist/index-simple.js +75 -113
- package/dist/index.js +64 -69
- package/dist/mcp/access-control.js +13 -17
- package/dist/mcp/client/enhanced-client.js +16 -23
- package/dist/mcp/enhanced-server.js +10 -14
- package/dist/mcp/logger.js +3 -7
- package/dist/mcp/memory-state.js +13 -17
- package/dist/mcp/schemas/tool-schemas.d.ts +16 -16
- package/dist/mcp/schemas/tool-schemas.js +122 -126
- package/dist/mcp/server/lanonasis-server.js +66 -57
- package/dist/mcp/transports/transport-manager.js +18 -25
- package/dist/mcp/vector-store.js +6 -10
- package/dist/mcp-server.js +23 -27
- package/dist/utils/api.js +19 -26
- package/dist/utils/config.d.ts +2 -1
- package/dist/utils/config.js +65 -78
- package/dist/utils/formatting.js +6 -14
- package/dist/utils/mcp-client.js +76 -117
- package/package.json +36 -5
package/dist/core/power-mode.js
CHANGED
|
@@ -1,17 +1,11 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/**
|
|
3
2
|
* Power User Mode
|
|
4
3
|
* Streamlined interface for expert users with advanced features
|
|
5
4
|
*/
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
};
|
|
9
|
-
|
|
10
|
-
exports.PowerUserMode = void 0;
|
|
11
|
-
const chalk_1 = __importDefault(require("chalk"));
|
|
12
|
-
const readline_1 = __importDefault(require("readline"));
|
|
13
|
-
const progress_js_1 = require("./progress.js");
|
|
14
|
-
class PowerUserMode {
|
|
5
|
+
import chalk from 'chalk';
|
|
6
|
+
import readline from 'readline';
|
|
7
|
+
import { SmartSuggestions } from './progress.js';
|
|
8
|
+
export class PowerUserMode {
|
|
15
9
|
stateManager;
|
|
16
10
|
commandHistory = [];
|
|
17
11
|
historyIndex = -1;
|
|
@@ -20,7 +14,7 @@ class PowerUserMode {
|
|
|
20
14
|
aliases = new Map();
|
|
21
15
|
constructor(stateManager) {
|
|
22
16
|
this.stateManager = stateManager;
|
|
23
|
-
this.smartSuggestions = new
|
|
17
|
+
this.smartSuggestions = new SmartSuggestions(stateManager.getUserContext());
|
|
24
18
|
this.loadAliases();
|
|
25
19
|
}
|
|
26
20
|
/**
|
|
@@ -29,7 +23,7 @@ class PowerUserMode {
|
|
|
29
23
|
async enter() {
|
|
30
24
|
console.clear();
|
|
31
25
|
this.showBanner();
|
|
32
|
-
this.rl =
|
|
26
|
+
this.rl = readline.createInterface({
|
|
33
27
|
input: process.stdin,
|
|
34
28
|
output: process.stdout,
|
|
35
29
|
prompt: this.getPrompt(),
|
|
@@ -47,15 +41,15 @@ class PowerUserMode {
|
|
|
47
41
|
if (this.rl) {
|
|
48
42
|
this.rl.close();
|
|
49
43
|
}
|
|
50
|
-
console.log(
|
|
44
|
+
console.log(chalk.dim('\nExiting power mode...'));
|
|
51
45
|
}
|
|
52
46
|
/**
|
|
53
47
|
* Show power mode banner
|
|
54
48
|
*/
|
|
55
49
|
showBanner() {
|
|
56
|
-
console.log(
|
|
57
|
-
console.log(
|
|
58
|
-
console.log(
|
|
50
|
+
console.log(chalk.cyan.bold('◗ ONASIS POWER MODE'));
|
|
51
|
+
console.log(chalk.dim('━'.repeat(50)));
|
|
52
|
+
console.log(chalk.dim('Type commands directly. Tab for completion. ? for help.'));
|
|
59
53
|
console.log();
|
|
60
54
|
}
|
|
61
55
|
/**
|
|
@@ -64,7 +58,7 @@ class PowerUserMode {
|
|
|
64
58
|
getPrompt() {
|
|
65
59
|
const context = this.stateManager.getCurrentNavigation();
|
|
66
60
|
const contextName = context ? context.name : 'memories';
|
|
67
|
-
return
|
|
61
|
+
return chalk.cyan('◗ ') + chalk.blue(`onasis:${contextName}> `);
|
|
68
62
|
}
|
|
69
63
|
/**
|
|
70
64
|
* Setup key bindings for enhanced navigation
|
|
@@ -79,7 +73,7 @@ class PowerUserMode {
|
|
|
79
73
|
});
|
|
80
74
|
// Ctrl+C for graceful exit
|
|
81
75
|
this.rl.on('SIGINT', () => {
|
|
82
|
-
console.log(
|
|
76
|
+
console.log(chalk.yellow('\n\nUse "exit" to leave power mode'));
|
|
83
77
|
this.rl?.prompt();
|
|
84
78
|
});
|
|
85
79
|
// Ctrl+L for clear screen
|
|
@@ -187,7 +181,7 @@ class PowerUserMode {
|
|
|
187
181
|
*/
|
|
188
182
|
async quickCreate(args) {
|
|
189
183
|
if (args.length === 0) {
|
|
190
|
-
console.log(
|
|
184
|
+
console.log(chalk.yellow('Usage: create [-t title] [-c content] [--tags tag1,tag2] [--type type] [--topic topic]'));
|
|
191
185
|
return;
|
|
192
186
|
}
|
|
193
187
|
const params = this.parseArgs(args);
|
|
@@ -197,23 +191,23 @@ class PowerUserMode {
|
|
|
197
191
|
const tags = params.tags ? params.tags.split(',') : [];
|
|
198
192
|
const type = params.type || 'knowledge';
|
|
199
193
|
const topic = params.topic;
|
|
200
|
-
console.log(
|
|
201
|
-
console.log(
|
|
202
|
-
console.log(
|
|
194
|
+
console.log(chalk.green(`✓ Memory created (id: mem_${this.generateId()}) in 47ms`));
|
|
195
|
+
console.log(chalk.dim(` Title: ${title}`));
|
|
196
|
+
console.log(chalk.dim(` Type: ${type}`));
|
|
203
197
|
if (topic)
|
|
204
|
-
console.log(
|
|
198
|
+
console.log(chalk.dim(` Topic: ${topic}`));
|
|
205
199
|
if (tags.length)
|
|
206
|
-
console.log(
|
|
200
|
+
console.log(chalk.dim(` Tags: ${tags.join(', ')}`));
|
|
207
201
|
}
|
|
208
202
|
/**
|
|
209
203
|
* Quick search command
|
|
210
204
|
*/
|
|
211
205
|
async quickSearch(query) {
|
|
212
206
|
if (!query) {
|
|
213
|
-
console.log(
|
|
207
|
+
console.log(chalk.yellow('Usage: search <query> [--limit n] [--threshold 0.x]'));
|
|
214
208
|
return;
|
|
215
209
|
}
|
|
216
|
-
console.log(
|
|
210
|
+
console.log(chalk.dim(`Searching for "${query}"...`));
|
|
217
211
|
// Simulate search results
|
|
218
212
|
const results = [
|
|
219
213
|
{ id: 'mem_abc123', title: 'API Response Caching', score: 100 },
|
|
@@ -238,7 +232,7 @@ class PowerUserMode {
|
|
|
238
232
|
const params = this.parseArgs(args);
|
|
239
233
|
const limit = params.limit || 10;
|
|
240
234
|
const sortBy = params.sort || 'created';
|
|
241
|
-
console.log(
|
|
235
|
+
console.log(chalk.dim(`Listing memories (limit: ${limit}, sort: ${sortBy})`));
|
|
242
236
|
// Simulate list
|
|
243
237
|
const items = [
|
|
244
238
|
'mem_abc123 API Documentation 2 hours ago',
|
|
@@ -252,29 +246,29 @@ class PowerUserMode {
|
|
|
252
246
|
*/
|
|
253
247
|
async quickDelete(args) {
|
|
254
248
|
if (args.length === 0) {
|
|
255
|
-
console.log(
|
|
249
|
+
console.log(chalk.yellow('Usage: delete <id>'));
|
|
256
250
|
return;
|
|
257
251
|
}
|
|
258
252
|
const id = args[0];
|
|
259
|
-
console.log(
|
|
253
|
+
console.log(chalk.red(`✓ Memory ${id} deleted`));
|
|
260
254
|
}
|
|
261
255
|
/**
|
|
262
256
|
* Quick update command
|
|
263
257
|
*/
|
|
264
258
|
async quickUpdate(args) {
|
|
265
259
|
if (args.length === 0) {
|
|
266
|
-
console.log(
|
|
260
|
+
console.log(chalk.yellow('Usage: update <id> [--title new-title] [--add-tag tag] [--remove-tag tag]'));
|
|
267
261
|
return;
|
|
268
262
|
}
|
|
269
263
|
const id = args[0];
|
|
270
264
|
const params = this.parseArgs(args.slice(1));
|
|
271
|
-
console.log(
|
|
265
|
+
console.log(chalk.green(`✓ Memory ${id} updated`));
|
|
272
266
|
if (params.title)
|
|
273
|
-
console.log(
|
|
267
|
+
console.log(chalk.dim(` New title: ${params.title}`));
|
|
274
268
|
if (params['add-tag'])
|
|
275
|
-
console.log(
|
|
269
|
+
console.log(chalk.dim(` Added tag: ${params['add-tag']}`));
|
|
276
270
|
if (params['remove-tag'])
|
|
277
|
-
console.log(
|
|
271
|
+
console.log(chalk.dim(` Removed tag: ${params['remove-tag']}`));
|
|
278
272
|
}
|
|
279
273
|
/**
|
|
280
274
|
* Handle topic commands
|
|
@@ -286,10 +280,10 @@ class PowerUserMode {
|
|
|
286
280
|
console.log('Topics: Architecture, API, Documentation, Projects');
|
|
287
281
|
break;
|
|
288
282
|
case 'create':
|
|
289
|
-
console.log(
|
|
283
|
+
console.log(chalk.green(`✓ Topic "${args[1]}" created`));
|
|
290
284
|
break;
|
|
291
285
|
default:
|
|
292
|
-
console.log(
|
|
286
|
+
console.log(chalk.yellow('Usage: topic [list|create|delete] [name]'));
|
|
293
287
|
}
|
|
294
288
|
}
|
|
295
289
|
/**
|
|
@@ -305,14 +299,14 @@ class PowerUserMode {
|
|
|
305
299
|
console.log('Rate Limits: 1000/hour (432 used)');
|
|
306
300
|
break;
|
|
307
301
|
default:
|
|
308
|
-
console.log(
|
|
302
|
+
console.log(chalk.yellow('Usage: api [keys|limits|stats]'));
|
|
309
303
|
}
|
|
310
304
|
}
|
|
311
305
|
/**
|
|
312
306
|
* Handle pipe operations
|
|
313
307
|
*/
|
|
314
308
|
async handlePipe(_args) {
|
|
315
|
-
console.log(
|
|
309
|
+
console.log(chalk.cyan('Pipe operations coming soon...'));
|
|
316
310
|
}
|
|
317
311
|
/**
|
|
318
312
|
* Handle format changes
|
|
@@ -322,10 +316,10 @@ class PowerUserMode {
|
|
|
322
316
|
if (['table', 'json', 'yaml', 'minimal'].includes(format)) {
|
|
323
317
|
const fmt = format;
|
|
324
318
|
this.stateManager.updatePreference('outputFormat', fmt);
|
|
325
|
-
console.log(
|
|
319
|
+
console.log(chalk.green(`✓ Output format set to ${format}`));
|
|
326
320
|
}
|
|
327
321
|
else {
|
|
328
|
-
console.log(
|
|
322
|
+
console.log(chalk.yellow('Usage: format [table|json|yaml|minimal]'));
|
|
329
323
|
}
|
|
330
324
|
}
|
|
331
325
|
/**
|
|
@@ -334,19 +328,19 @@ class PowerUserMode {
|
|
|
334
328
|
async executeSystemCommand(command) {
|
|
335
329
|
// Check if it looks like a memory content
|
|
336
330
|
if (!command.startsWith('onasis') && !command.includes('|') && command.length > 10) {
|
|
337
|
-
console.log(
|
|
331
|
+
console.log(chalk.dim('Interpreting as memory content...'));
|
|
338
332
|
await this.quickCreate(['-c', command]);
|
|
339
333
|
}
|
|
340
334
|
else {
|
|
341
|
-
console.log(
|
|
342
|
-
console.log(
|
|
335
|
+
console.log(chalk.red(`Command not recognized: ${command}`));
|
|
336
|
+
console.log(chalk.dim('Type "?" for help'));
|
|
343
337
|
}
|
|
344
338
|
}
|
|
345
339
|
/**
|
|
346
340
|
* Show help
|
|
347
341
|
*/
|
|
348
342
|
showHelp() {
|
|
349
|
-
console.log(
|
|
343
|
+
console.log(chalk.bold('\n📚 Power Mode Commands\n'));
|
|
350
344
|
const commands = [
|
|
351
345
|
['create, c', 'Create memory quickly'],
|
|
352
346
|
['search, s, /', 'Search memories'],
|
|
@@ -362,9 +356,9 @@ class PowerUserMode {
|
|
|
362
356
|
['exit, quit', 'Exit power mode']
|
|
363
357
|
];
|
|
364
358
|
commands.forEach(([cmd, desc]) => {
|
|
365
|
-
console.log(` ${
|
|
359
|
+
console.log(` ${chalk.cyan(cmd.padEnd(15))} ${desc}`);
|
|
366
360
|
});
|
|
367
|
-
console.log(
|
|
361
|
+
console.log(chalk.bold('\n⚡ Power Features\n'));
|
|
368
362
|
console.log(' • Tab completion for commands and arguments');
|
|
369
363
|
console.log(' • Pipe operations: search cache | format table');
|
|
370
364
|
console.log(' • Aliases: alias sc="search cache"');
|
|
@@ -376,9 +370,9 @@ class PowerUserMode {
|
|
|
376
370
|
* Show command history
|
|
377
371
|
*/
|
|
378
372
|
showHistory() {
|
|
379
|
-
console.log(
|
|
373
|
+
console.log(chalk.bold('\n📜 Command History\n'));
|
|
380
374
|
this.commandHistory.slice(-10).forEach((cmd, i) => {
|
|
381
|
-
console.log(` ${
|
|
375
|
+
console.log(` ${chalk.dim(String(i + 1).padStart(3))} ${cmd}`);
|
|
382
376
|
});
|
|
383
377
|
}
|
|
384
378
|
/**
|
|
@@ -387,9 +381,9 @@ class PowerUserMode {
|
|
|
387
381
|
handleAlias(args) {
|
|
388
382
|
if (args.length === 0) {
|
|
389
383
|
// Show all aliases
|
|
390
|
-
console.log(
|
|
384
|
+
console.log(chalk.bold('\n🔤 Aliases\n'));
|
|
391
385
|
this.aliases.forEach((value, key) => {
|
|
392
|
-
console.log(` ${
|
|
386
|
+
console.log(` ${chalk.cyan(key)} = "${value}"`);
|
|
393
387
|
});
|
|
394
388
|
return;
|
|
395
389
|
}
|
|
@@ -398,11 +392,11 @@ class PowerUserMode {
|
|
|
398
392
|
if (match) {
|
|
399
393
|
const [, name, command] = match;
|
|
400
394
|
this.aliases.set(name, command);
|
|
401
|
-
console.log(
|
|
395
|
+
console.log(chalk.green(`✓ Alias created: ${name} → ${command}`));
|
|
402
396
|
this.saveAliases();
|
|
403
397
|
}
|
|
404
398
|
else {
|
|
405
|
-
console.log(
|
|
399
|
+
console.log(chalk.yellow('Usage: alias name="command"'));
|
|
406
400
|
}
|
|
407
401
|
}
|
|
408
402
|
/**
|
|
@@ -466,4 +460,3 @@ class PowerUserMode {
|
|
|
466
460
|
// Would save to config file
|
|
467
461
|
}
|
|
468
462
|
}
|
|
469
|
-
exports.PowerUserMode = PowerUserMode;
|
package/dist/core/progress.js
CHANGED
|
@@ -1,18 +1,12 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/**
|
|
3
2
|
* Progress Indicators and Feedback System
|
|
4
3
|
* Provides real-time visual feedback for long-running operations
|
|
5
4
|
*/
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
const ora_1 = __importDefault(require("ora"));
|
|
12
|
-
const chalk_1 = __importDefault(require("chalk"));
|
|
13
|
-
const cli_progress_1 = __importDefault(require("cli-progress"));
|
|
14
|
-
const perf_hooks_1 = require("perf_hooks");
|
|
15
|
-
class ProgressIndicator {
|
|
5
|
+
import ora from 'ora';
|
|
6
|
+
import chalk from 'chalk';
|
|
7
|
+
import cliProgress from 'cli-progress';
|
|
8
|
+
import { performance } from 'perf_hooks';
|
|
9
|
+
export class ProgressIndicator {
|
|
16
10
|
spinner;
|
|
17
11
|
progressBar;
|
|
18
12
|
startTime;
|
|
@@ -20,8 +14,8 @@ class ProgressIndicator {
|
|
|
20
14
|
* Show a spinner for indeterminate progress
|
|
21
15
|
*/
|
|
22
16
|
startSpinner(message, options) {
|
|
23
|
-
this.startTime =
|
|
24
|
-
this.spinner = (
|
|
17
|
+
this.startTime = performance.now();
|
|
18
|
+
this.spinner = ora({
|
|
25
19
|
text: message,
|
|
26
20
|
spinner: (options?.spinner || 'dots12'),
|
|
27
21
|
color: (options?.color || 'cyan'),
|
|
@@ -44,7 +38,7 @@ class ProgressIndicator {
|
|
|
44
38
|
if (this.spinner) {
|
|
45
39
|
const elapsed = this.getElapsedTime();
|
|
46
40
|
const finalMessage = message || this.spinner.text;
|
|
47
|
-
this.spinner.succeed(`${finalMessage} ${
|
|
41
|
+
this.spinner.succeed(`${finalMessage} ${chalk.dim(`(${elapsed}ms)`)}`);
|
|
48
42
|
this.spinner = undefined;
|
|
49
43
|
}
|
|
50
44
|
}
|
|
@@ -55,7 +49,7 @@ class ProgressIndicator {
|
|
|
55
49
|
if (this.spinner) {
|
|
56
50
|
const elapsed = this.getElapsedTime();
|
|
57
51
|
const finalMessage = message || this.spinner.text;
|
|
58
|
-
this.spinner.fail(`${finalMessage} ${
|
|
52
|
+
this.spinner.fail(`${finalMessage} ${chalk.dim(`(${elapsed}ms)`)}`);
|
|
59
53
|
this.spinner = undefined;
|
|
60
54
|
}
|
|
61
55
|
}
|
|
@@ -66,7 +60,7 @@ class ProgressIndicator {
|
|
|
66
60
|
if (this.spinner) {
|
|
67
61
|
const elapsed = this.getElapsedTime();
|
|
68
62
|
const finalMessage = message || this.spinner.text;
|
|
69
|
-
this.spinner.warn(`${finalMessage} ${
|
|
63
|
+
this.spinner.warn(`${finalMessage} ${chalk.dim(`(${elapsed}ms)`)}`);
|
|
70
64
|
this.spinner = undefined;
|
|
71
65
|
}
|
|
72
66
|
}
|
|
@@ -83,17 +77,17 @@ class ProgressIndicator {
|
|
|
83
77
|
* Show a progress bar for determinate progress
|
|
84
78
|
*/
|
|
85
79
|
startProgressBar(total, options) {
|
|
86
|
-
this.startTime =
|
|
80
|
+
this.startTime = performance.now();
|
|
87
81
|
const format = options?.format ||
|
|
88
|
-
'{title} |' +
|
|
89
|
-
this.progressBar = new
|
|
82
|
+
'{title} |' + chalk.cyan('{bar}') + '| {percentage}% | {value}/{total} | {duration}s | {eta}s remaining';
|
|
83
|
+
this.progressBar = new cliProgress.SingleBar({
|
|
90
84
|
format,
|
|
91
85
|
barCompleteChar: '█',
|
|
92
86
|
barIncompleteChar: '░',
|
|
93
87
|
hideCursor: true,
|
|
94
88
|
clearOnComplete: options?.clearOnComplete || false,
|
|
95
89
|
stopOnComplete: true
|
|
96
|
-
},
|
|
90
|
+
}, cliProgress.Presets.shades_classic);
|
|
97
91
|
this.progressBar.start(total, 0, {
|
|
98
92
|
title: options?.title || 'Progress'
|
|
99
93
|
});
|
|
@@ -167,15 +161,14 @@ class ProgressIndicator {
|
|
|
167
161
|
getElapsedTime() {
|
|
168
162
|
if (!this.startTime)
|
|
169
163
|
return '0';
|
|
170
|
-
const elapsed = Math.round(
|
|
164
|
+
const elapsed = Math.round(performance.now() - this.startTime);
|
|
171
165
|
return elapsed.toString();
|
|
172
166
|
}
|
|
173
167
|
}
|
|
174
|
-
exports.ProgressIndicator = ProgressIndicator;
|
|
175
168
|
/**
|
|
176
169
|
* Multi-step progress indicator
|
|
177
170
|
*/
|
|
178
|
-
class MultiStepProgress {
|
|
171
|
+
export class MultiStepProgress {
|
|
179
172
|
steps;
|
|
180
173
|
currentStep = 0;
|
|
181
174
|
progressIndicator;
|
|
@@ -216,13 +209,13 @@ class MultiStepProgress {
|
|
|
216
209
|
console.clear();
|
|
217
210
|
const progressBar = this.renderProgressBar();
|
|
218
211
|
const stepList = this.renderStepList();
|
|
219
|
-
console.log(
|
|
212
|
+
console.log(chalk.bold('Progress\n'));
|
|
220
213
|
console.log(progressBar);
|
|
221
214
|
console.log();
|
|
222
215
|
console.log(stepList);
|
|
223
216
|
if (this.currentStep < this.steps.length) {
|
|
224
217
|
console.log();
|
|
225
|
-
console.log(
|
|
218
|
+
console.log(chalk.cyan(`→ ${this.steps[this.currentStep].name}...`));
|
|
226
219
|
}
|
|
227
220
|
}
|
|
228
221
|
/**
|
|
@@ -235,7 +228,7 @@ class MultiStepProgress {
|
|
|
235
228
|
const barLength = 40;
|
|
236
229
|
const filled = Math.round((completed / total) * barLength);
|
|
237
230
|
const bar = '█'.repeat(filled) + '░'.repeat(barLength - filled);
|
|
238
|
-
return `[${
|
|
231
|
+
return `[${chalk.cyan(bar)}] ${percentage}%`;
|
|
239
232
|
}
|
|
240
233
|
/**
|
|
241
234
|
* Render step list
|
|
@@ -246,37 +239,36 @@ class MultiStepProgress {
|
|
|
246
239
|
let color;
|
|
247
240
|
switch (step.status) {
|
|
248
241
|
case 'completed':
|
|
249
|
-
icon =
|
|
250
|
-
color =
|
|
242
|
+
icon = chalk.green('✓');
|
|
243
|
+
color = chalk.green;
|
|
251
244
|
break;
|
|
252
245
|
case 'failed':
|
|
253
|
-
icon =
|
|
254
|
-
color =
|
|
246
|
+
icon = chalk.red('✗');
|
|
247
|
+
color = chalk.red;
|
|
255
248
|
break;
|
|
256
249
|
case 'pending':
|
|
257
|
-
icon =
|
|
258
|
-
color =
|
|
250
|
+
icon = chalk.gray('○');
|
|
251
|
+
color = chalk.gray;
|
|
259
252
|
break;
|
|
260
253
|
case 'active':
|
|
261
|
-
icon =
|
|
262
|
-
color =
|
|
254
|
+
icon = chalk.blue('●');
|
|
255
|
+
color = chalk.blue;
|
|
263
256
|
break;
|
|
264
257
|
default:
|
|
265
|
-
icon =
|
|
266
|
-
color =
|
|
258
|
+
icon = chalk.gray('○');
|
|
259
|
+
color = chalk.gray;
|
|
267
260
|
}
|
|
268
261
|
const stepNumber = `[${index + 1}]`;
|
|
269
262
|
const name = color(step.name);
|
|
270
|
-
const description = step.description ?
|
|
263
|
+
const description = step.description ? chalk.dim(` - ${step.description}`) : '';
|
|
271
264
|
return `${icon} ${stepNumber} ${name}${description}`;
|
|
272
265
|
}).join('\n');
|
|
273
266
|
}
|
|
274
267
|
}
|
|
275
|
-
exports.MultiStepProgress = MultiStepProgress;
|
|
276
268
|
/**
|
|
277
269
|
* Smart suggestions system
|
|
278
270
|
*/
|
|
279
|
-
class SmartSuggestions {
|
|
271
|
+
export class SmartSuggestions {
|
|
280
272
|
userContext;
|
|
281
273
|
commandHistory = [];
|
|
282
274
|
constructor(userContext) {
|
|
@@ -425,13 +417,12 @@ class SmartSuggestions {
|
|
|
425
417
|
displaySuggestions(suggestions) {
|
|
426
418
|
if (suggestions.length === 0)
|
|
427
419
|
return;
|
|
428
|
-
console.log(
|
|
420
|
+
console.log(chalk.dim('\n💡 Suggestions:'));
|
|
429
421
|
suggestions.forEach((suggestion, index) => {
|
|
430
|
-
const number =
|
|
431
|
-
const text =
|
|
432
|
-
const desc =
|
|
422
|
+
const number = chalk.cyan(`${index + 1}.`);
|
|
423
|
+
const text = chalk.bold(suggestion.text);
|
|
424
|
+
const desc = chalk.dim(suggestion.description);
|
|
433
425
|
console.log(` ${number} ${text} - ${desc}`);
|
|
434
426
|
});
|
|
435
427
|
}
|
|
436
428
|
}
|
|
437
|
-
exports.SmartSuggestions = SmartSuggestions;
|