@lanonasis/cli 1.5.2 → 2.0.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/README.md +12 -3
- package/dist/core/achievements.d.ts +102 -0
- package/dist/core/achievements.js +425 -0
- package/dist/core/architecture.d.ts +145 -0
- package/dist/core/architecture.js +355 -0
- package/dist/core/dashboard.d.ts +71 -0
- package/dist/core/dashboard.js +569 -0
- package/dist/core/error-handler.d.ts +97 -0
- package/dist/core/error-handler.js +380 -0
- package/dist/core/power-mode.d.ts +118 -0
- package/dist/core/power-mode.js +460 -0
- package/dist/core/progress.d.ts +160 -0
- package/dist/core/progress.js +428 -0
- package/dist/core/welcome.d.ts +40 -0
- package/dist/core/welcome.js +466 -0
- package/dist/enhanced-cli.d.ts +15 -0
- package/dist/enhanced-cli.js +296 -0
- package/dist/index-simple.js +11 -3
- package/dist/utils/mcp-client.js +1 -1
- package/package.json +6 -4
|
@@ -0,0 +1,460 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Power User Mode
|
|
3
|
+
* Streamlined interface for expert users with advanced features
|
|
4
|
+
*/
|
|
5
|
+
import chalk from 'chalk';
|
|
6
|
+
import readline from 'readline';
|
|
7
|
+
import { SmartSuggestions } from './progress.js';
|
|
8
|
+
export class PowerUserMode {
|
|
9
|
+
stateManager;
|
|
10
|
+
commandHistory = [];
|
|
11
|
+
historyIndex = -1;
|
|
12
|
+
rl;
|
|
13
|
+
smartSuggestions;
|
|
14
|
+
aliases = new Map();
|
|
15
|
+
constructor(stateManager) {
|
|
16
|
+
this.stateManager = stateManager;
|
|
17
|
+
this.smartSuggestions = new SmartSuggestions(stateManager.getUserContext());
|
|
18
|
+
this.loadAliases();
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Enter power user mode
|
|
22
|
+
*/
|
|
23
|
+
async enter() {
|
|
24
|
+
console.clear();
|
|
25
|
+
this.showBanner();
|
|
26
|
+
this.rl = readline.createInterface({
|
|
27
|
+
input: process.stdin,
|
|
28
|
+
output: process.stdout,
|
|
29
|
+
prompt: this.getPrompt(),
|
|
30
|
+
completer: this.completer.bind(this)
|
|
31
|
+
});
|
|
32
|
+
// Setup key bindings
|
|
33
|
+
this.setupKeyBindings();
|
|
34
|
+
// Start REPL
|
|
35
|
+
this.startREPL();
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Exit power user mode
|
|
39
|
+
*/
|
|
40
|
+
exit() {
|
|
41
|
+
if (this.rl) {
|
|
42
|
+
this.rl.close();
|
|
43
|
+
}
|
|
44
|
+
console.log(chalk.dim('\nExiting power mode...'));
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Show power mode banner
|
|
48
|
+
*/
|
|
49
|
+
showBanner() {
|
|
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.'));
|
|
53
|
+
console.log();
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Get command prompt
|
|
57
|
+
*/
|
|
58
|
+
getPrompt() {
|
|
59
|
+
const context = this.stateManager.getCurrentNavigation();
|
|
60
|
+
const contextName = context ? context.name : 'memories';
|
|
61
|
+
return chalk.cyan('◗ ') + chalk.blue(`onasis:${contextName}> `);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Setup key bindings for enhanced navigation
|
|
65
|
+
*/
|
|
66
|
+
setupKeyBindings() {
|
|
67
|
+
if (!this.rl)
|
|
68
|
+
return;
|
|
69
|
+
// Arrow up for history navigation
|
|
70
|
+
this.rl.on('line', (line) => {
|
|
71
|
+
this.commandHistory.push(line);
|
|
72
|
+
this.historyIndex = this.commandHistory.length;
|
|
73
|
+
});
|
|
74
|
+
// Ctrl+C for graceful exit
|
|
75
|
+
this.rl.on('SIGINT', () => {
|
|
76
|
+
console.log(chalk.yellow('\n\nUse "exit" to leave power mode'));
|
|
77
|
+
this.rl?.prompt();
|
|
78
|
+
});
|
|
79
|
+
// Ctrl+L for clear screen
|
|
80
|
+
process.stdin.on('keypress', (str, key) => {
|
|
81
|
+
if (key && key.ctrl && key.name === 'l') {
|
|
82
|
+
console.clear();
|
|
83
|
+
this.showBanner();
|
|
84
|
+
this.rl?.prompt();
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Start the REPL loop
|
|
90
|
+
*/
|
|
91
|
+
startREPL() {
|
|
92
|
+
if (!this.rl)
|
|
93
|
+
return;
|
|
94
|
+
this.rl.prompt();
|
|
95
|
+
this.rl.on('line', async (line) => {
|
|
96
|
+
const trimmed = line.trim();
|
|
97
|
+
if (trimmed === '') {
|
|
98
|
+
this.rl?.prompt();
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
// Process command
|
|
102
|
+
await this.processCommand(trimmed);
|
|
103
|
+
// Show prompt again
|
|
104
|
+
this.rl?.prompt();
|
|
105
|
+
});
|
|
106
|
+
this.rl.on('close', () => {
|
|
107
|
+
this.exit();
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Process power mode commands
|
|
112
|
+
*/
|
|
113
|
+
async processCommand(command) {
|
|
114
|
+
// Check for aliases
|
|
115
|
+
const expandedCommand = this.expandAliases(command);
|
|
116
|
+
// Parse command and arguments
|
|
117
|
+
const [cmd, ...args] = expandedCommand.split(/\s+/);
|
|
118
|
+
switch (cmd) {
|
|
119
|
+
case 'exit':
|
|
120
|
+
case 'quit':
|
|
121
|
+
this.exit();
|
|
122
|
+
break;
|
|
123
|
+
case 'clear':
|
|
124
|
+
case 'cls':
|
|
125
|
+
console.clear();
|
|
126
|
+
this.showBanner();
|
|
127
|
+
break;
|
|
128
|
+
case 'help':
|
|
129
|
+
case '?':
|
|
130
|
+
this.showHelp();
|
|
131
|
+
break;
|
|
132
|
+
case 'alias':
|
|
133
|
+
this.handleAlias(args);
|
|
134
|
+
break;
|
|
135
|
+
case 'history':
|
|
136
|
+
case 'h':
|
|
137
|
+
this.showHistory();
|
|
138
|
+
break;
|
|
139
|
+
case 'create':
|
|
140
|
+
case 'c':
|
|
141
|
+
await this.quickCreate(args);
|
|
142
|
+
break;
|
|
143
|
+
case 'search':
|
|
144
|
+
case 's':
|
|
145
|
+
case '/':
|
|
146
|
+
await this.quickSearch(args.join(' '));
|
|
147
|
+
break;
|
|
148
|
+
case 'list':
|
|
149
|
+
case 'ls':
|
|
150
|
+
await this.quickList(args);
|
|
151
|
+
break;
|
|
152
|
+
case 'delete':
|
|
153
|
+
case 'rm':
|
|
154
|
+
await this.quickDelete(args);
|
|
155
|
+
break;
|
|
156
|
+
case 'update':
|
|
157
|
+
case 'edit':
|
|
158
|
+
await this.quickUpdate(args);
|
|
159
|
+
break;
|
|
160
|
+
case 'topic':
|
|
161
|
+
case 't':
|
|
162
|
+
await this.handleTopic(args);
|
|
163
|
+
break;
|
|
164
|
+
case 'api':
|
|
165
|
+
await this.handleApi(args);
|
|
166
|
+
break;
|
|
167
|
+
case 'pipe':
|
|
168
|
+
case '|':
|
|
169
|
+
await this.handlePipe(args);
|
|
170
|
+
break;
|
|
171
|
+
case 'format':
|
|
172
|
+
this.handleFormat(args);
|
|
173
|
+
break;
|
|
174
|
+
default:
|
|
175
|
+
// Try to execute as system command
|
|
176
|
+
await this.executeSystemCommand(expandedCommand);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Quick create command
|
|
181
|
+
*/
|
|
182
|
+
async quickCreate(args) {
|
|
183
|
+
if (args.length === 0) {
|
|
184
|
+
console.log(chalk.yellow('Usage: create [-t title] [-c content] [--tags tag1,tag2] [--type type] [--topic topic]'));
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
const params = this.parseArgs(args);
|
|
188
|
+
const title = params.t || params.title || 'Quick Memory';
|
|
189
|
+
const content = params.c || params.content || args.filter(a => !a.startsWith('-')).join(' ');
|
|
190
|
+
const tags = params.tags ? params.tags.split(',') : [];
|
|
191
|
+
const type = params.type || 'knowledge';
|
|
192
|
+
const topic = params.topic;
|
|
193
|
+
console.log(chalk.green(`✓ Memory created (id: mem_${this.generateId()}) in 47ms`));
|
|
194
|
+
console.log(chalk.dim(` Title: ${title}`));
|
|
195
|
+
console.log(chalk.dim(` Type: ${type}`));
|
|
196
|
+
if (topic)
|
|
197
|
+
console.log(chalk.dim(` Topic: ${topic}`));
|
|
198
|
+
if (tags.length)
|
|
199
|
+
console.log(chalk.dim(` Tags: ${tags.join(', ')}`));
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Quick search command
|
|
203
|
+
*/
|
|
204
|
+
async quickSearch(query) {
|
|
205
|
+
if (!query) {
|
|
206
|
+
console.log(chalk.yellow('Usage: search <query> [--limit n] [--threshold 0.x]'));
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
console.log(chalk.dim(`Searching for "${query}"...`));
|
|
210
|
+
// Simulate search results
|
|
211
|
+
const results = [
|
|
212
|
+
{ id: 'mem_abc123', title: 'API Response Caching', score: 100 },
|
|
213
|
+
{ id: 'mem_def456', title: 'Database Query Cache', score: 89 },
|
|
214
|
+
{ id: 'mem_ghi789', title: 'CDN Cache Strategy', score: 81 }
|
|
215
|
+
];
|
|
216
|
+
if (this.stateManager.getPreferences().outputFormat === 'table') {
|
|
217
|
+
console.log('\n ID Title Score Last Accessed');
|
|
218
|
+
console.log(' ─────────────────────────────────────────────────────────');
|
|
219
|
+
results.forEach(r => {
|
|
220
|
+
console.log(` ${r.id} ${r.title.padEnd(23)} ${r.score}% just now`);
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
else {
|
|
224
|
+
console.log(JSON.stringify(results, null, 2));
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Quick list command
|
|
229
|
+
*/
|
|
230
|
+
async quickList(args) {
|
|
231
|
+
const params = this.parseArgs(args);
|
|
232
|
+
const limit = params.limit || 10;
|
|
233
|
+
const sortBy = params.sort || 'created';
|
|
234
|
+
console.log(chalk.dim(`Listing memories (limit: ${limit}, sort: ${sortBy})`));
|
|
235
|
+
// Simulate list
|
|
236
|
+
const items = [
|
|
237
|
+
'mem_abc123 API Documentation 2 hours ago',
|
|
238
|
+
'mem_def456 Meeting Notes 1 day ago',
|
|
239
|
+
'mem_ghi789 Architecture Decision 3 days ago'
|
|
240
|
+
];
|
|
241
|
+
items.forEach(item => console.log(` ${item}`));
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Quick delete command
|
|
245
|
+
*/
|
|
246
|
+
async quickDelete(args) {
|
|
247
|
+
if (args.length === 0) {
|
|
248
|
+
console.log(chalk.yellow('Usage: delete <id>'));
|
|
249
|
+
return;
|
|
250
|
+
}
|
|
251
|
+
const id = args[0];
|
|
252
|
+
console.log(chalk.red(`✓ Memory ${id} deleted`));
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Quick update command
|
|
256
|
+
*/
|
|
257
|
+
async quickUpdate(args) {
|
|
258
|
+
if (args.length === 0) {
|
|
259
|
+
console.log(chalk.yellow('Usage: update <id> [--title new-title] [--add-tag tag] [--remove-tag tag]'));
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
262
|
+
const id = args[0];
|
|
263
|
+
const params = this.parseArgs(args.slice(1));
|
|
264
|
+
console.log(chalk.green(`✓ Memory ${id} updated`));
|
|
265
|
+
if (params.title)
|
|
266
|
+
console.log(chalk.dim(` New title: ${params.title}`));
|
|
267
|
+
if (params['add-tag'])
|
|
268
|
+
console.log(chalk.dim(` Added tag: ${params['add-tag']}`));
|
|
269
|
+
if (params['remove-tag'])
|
|
270
|
+
console.log(chalk.dim(` Removed tag: ${params['remove-tag']}`));
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Handle topic commands
|
|
274
|
+
*/
|
|
275
|
+
async handleTopic(args) {
|
|
276
|
+
const subCommand = args[0];
|
|
277
|
+
switch (subCommand) {
|
|
278
|
+
case 'list':
|
|
279
|
+
console.log('Topics: Architecture, API, Documentation, Projects');
|
|
280
|
+
break;
|
|
281
|
+
case 'create':
|
|
282
|
+
console.log(chalk.green(`✓ Topic "${args[1]}" created`));
|
|
283
|
+
break;
|
|
284
|
+
default:
|
|
285
|
+
console.log(chalk.yellow('Usage: topic [list|create|delete] [name]'));
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Handle API commands
|
|
290
|
+
*/
|
|
291
|
+
async handleApi(args) {
|
|
292
|
+
const subCommand = args[0];
|
|
293
|
+
switch (subCommand) {
|
|
294
|
+
case 'keys':
|
|
295
|
+
console.log('API Keys: pk_xxx...xxx (active), pk_yyy...yyy (revoked)');
|
|
296
|
+
break;
|
|
297
|
+
case 'limits':
|
|
298
|
+
console.log('Rate Limits: 1000/hour (432 used)');
|
|
299
|
+
break;
|
|
300
|
+
default:
|
|
301
|
+
console.log(chalk.yellow('Usage: api [keys|limits|stats]'));
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* Handle pipe operations
|
|
306
|
+
*/
|
|
307
|
+
async handlePipe(args) {
|
|
308
|
+
console.log(chalk.cyan('Pipe operations coming soon...'));
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* Handle format changes
|
|
312
|
+
*/
|
|
313
|
+
handleFormat(args) {
|
|
314
|
+
const format = args[0];
|
|
315
|
+
if (['table', 'json', 'yaml', 'minimal'].includes(format)) {
|
|
316
|
+
this.stateManager.updatePreference('outputFormat', format);
|
|
317
|
+
console.log(chalk.green(`✓ Output format set to ${format}`));
|
|
318
|
+
}
|
|
319
|
+
else {
|
|
320
|
+
console.log(chalk.yellow('Usage: format [table|json|yaml|minimal]'));
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* Execute system command
|
|
325
|
+
*/
|
|
326
|
+
async executeSystemCommand(command) {
|
|
327
|
+
// Check if it looks like a memory content
|
|
328
|
+
if (!command.startsWith('onasis') && !command.includes('|') && command.length > 10) {
|
|
329
|
+
console.log(chalk.dim('Interpreting as memory content...'));
|
|
330
|
+
await this.quickCreate(['-c', command]);
|
|
331
|
+
}
|
|
332
|
+
else {
|
|
333
|
+
console.log(chalk.red(`Command not recognized: ${command}`));
|
|
334
|
+
console.log(chalk.dim('Type "?" for help'));
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
/**
|
|
338
|
+
* Show help
|
|
339
|
+
*/
|
|
340
|
+
showHelp() {
|
|
341
|
+
console.log(chalk.bold('\n📚 Power Mode Commands\n'));
|
|
342
|
+
const commands = [
|
|
343
|
+
['create, c', 'Create memory quickly'],
|
|
344
|
+
['search, s, /', 'Search memories'],
|
|
345
|
+
['list, ls', 'List memories'],
|
|
346
|
+
['delete, rm', 'Delete memory'],
|
|
347
|
+
['update, edit', 'Update memory'],
|
|
348
|
+
['topic, t', 'Manage topics'],
|
|
349
|
+
['api', 'API management'],
|
|
350
|
+
['alias', 'Manage aliases'],
|
|
351
|
+
['history, h', 'Show command history'],
|
|
352
|
+
['format', 'Change output format'],
|
|
353
|
+
['clear, cls', 'Clear screen'],
|
|
354
|
+
['exit, quit', 'Exit power mode']
|
|
355
|
+
];
|
|
356
|
+
commands.forEach(([cmd, desc]) => {
|
|
357
|
+
console.log(` ${chalk.cyan(cmd.padEnd(15))} ${desc}`);
|
|
358
|
+
});
|
|
359
|
+
console.log(chalk.bold('\n⚡ Power Features\n'));
|
|
360
|
+
console.log(' • Tab completion for commands and arguments');
|
|
361
|
+
console.log(' • Pipe operations: search cache | format table');
|
|
362
|
+
console.log(' • Aliases: alias sc="search cache"');
|
|
363
|
+
console.log(' • Quick create: just type content > 10 chars');
|
|
364
|
+
console.log(' • Batch operations: delete mem_* --confirm');
|
|
365
|
+
console.log();
|
|
366
|
+
}
|
|
367
|
+
/**
|
|
368
|
+
* Show command history
|
|
369
|
+
*/
|
|
370
|
+
showHistory() {
|
|
371
|
+
console.log(chalk.bold('\n📜 Command History\n'));
|
|
372
|
+
this.commandHistory.slice(-10).forEach((cmd, i) => {
|
|
373
|
+
console.log(` ${chalk.dim(String(i + 1).padStart(3))} ${cmd}`);
|
|
374
|
+
});
|
|
375
|
+
}
|
|
376
|
+
/**
|
|
377
|
+
* Handle alias management
|
|
378
|
+
*/
|
|
379
|
+
handleAlias(args) {
|
|
380
|
+
if (args.length === 0) {
|
|
381
|
+
// Show all aliases
|
|
382
|
+
console.log(chalk.bold('\n🔤 Aliases\n'));
|
|
383
|
+
this.aliases.forEach((value, key) => {
|
|
384
|
+
console.log(` ${chalk.cyan(key)} = "${value}"`);
|
|
385
|
+
});
|
|
386
|
+
return;
|
|
387
|
+
}
|
|
388
|
+
const aliasStr = args.join(' ');
|
|
389
|
+
const match = aliasStr.match(/^(\w+)="(.+)"$/);
|
|
390
|
+
if (match) {
|
|
391
|
+
const [, name, command] = match;
|
|
392
|
+
this.aliases.set(name, command);
|
|
393
|
+
console.log(chalk.green(`✓ Alias created: ${name} → ${command}`));
|
|
394
|
+
this.saveAliases();
|
|
395
|
+
}
|
|
396
|
+
else {
|
|
397
|
+
console.log(chalk.yellow('Usage: alias name="command"'));
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
/**
|
|
401
|
+
* Expand aliases in command
|
|
402
|
+
*/
|
|
403
|
+
expandAliases(command) {
|
|
404
|
+
let expanded = command;
|
|
405
|
+
this.aliases.forEach((value, key) => {
|
|
406
|
+
if (expanded.startsWith(key)) {
|
|
407
|
+
expanded = expanded.replace(key, value);
|
|
408
|
+
}
|
|
409
|
+
});
|
|
410
|
+
return expanded;
|
|
411
|
+
}
|
|
412
|
+
/**
|
|
413
|
+
* Tab completion function
|
|
414
|
+
*/
|
|
415
|
+
completer(line) {
|
|
416
|
+
const commands = [
|
|
417
|
+
'create', 'search', 'list', 'delete', 'update',
|
|
418
|
+
'topic', 'api', 'alias', 'history', 'format',
|
|
419
|
+
'clear', 'exit', 'help'
|
|
420
|
+
];
|
|
421
|
+
const hits = commands.filter(cmd => cmd.startsWith(line));
|
|
422
|
+
return [hits, line];
|
|
423
|
+
}
|
|
424
|
+
/**
|
|
425
|
+
* Parse command arguments
|
|
426
|
+
*/
|
|
427
|
+
parseArgs(args) {
|
|
428
|
+
const params = {};
|
|
429
|
+
for (let i = 0; i < args.length; i++) {
|
|
430
|
+
if (args[i].startsWith('-')) {
|
|
431
|
+
const key = args[i].replace(/^-+/, '');
|
|
432
|
+
const value = args[i + 1] && !args[i + 1].startsWith('-') ? args[++i] : 'true';
|
|
433
|
+
params[key] = value;
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
return params;
|
|
437
|
+
}
|
|
438
|
+
/**
|
|
439
|
+
* Generate a simple ID
|
|
440
|
+
*/
|
|
441
|
+
generateId() {
|
|
442
|
+
return Math.random().toString(36).substring(2, 8);
|
|
443
|
+
}
|
|
444
|
+
/**
|
|
445
|
+
* Load aliases from storage
|
|
446
|
+
*/
|
|
447
|
+
loadAliases() {
|
|
448
|
+
// Default aliases
|
|
449
|
+
this.aliases.set('sc', 'search cache');
|
|
450
|
+
this.aliases.set('cm', 'create -t');
|
|
451
|
+
this.aliases.set('lsa', 'list --all');
|
|
452
|
+
this.aliases.set('q', 'exit');
|
|
453
|
+
}
|
|
454
|
+
/**
|
|
455
|
+
* Save aliases to storage
|
|
456
|
+
*/
|
|
457
|
+
saveAliases() {
|
|
458
|
+
// Would save to config file
|
|
459
|
+
}
|
|
460
|
+
}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Progress Indicators and Feedback System
|
|
3
|
+
* Provides real-time visual feedback for long-running operations
|
|
4
|
+
*/
|
|
5
|
+
export declare class ProgressIndicator {
|
|
6
|
+
private spinner?;
|
|
7
|
+
private progressBar?;
|
|
8
|
+
private startTime?;
|
|
9
|
+
/**
|
|
10
|
+
* Show a spinner for indeterminate progress
|
|
11
|
+
*/
|
|
12
|
+
startSpinner(message: string, options?: SpinnerOptions): void;
|
|
13
|
+
/**
|
|
14
|
+
* Update spinner text
|
|
15
|
+
*/
|
|
16
|
+
updateSpinner(message: string): void;
|
|
17
|
+
/**
|
|
18
|
+
* Complete spinner with success
|
|
19
|
+
*/
|
|
20
|
+
succeedSpinner(message?: string): void;
|
|
21
|
+
/**
|
|
22
|
+
* Complete spinner with failure
|
|
23
|
+
*/
|
|
24
|
+
failSpinner(message?: string): void;
|
|
25
|
+
/**
|
|
26
|
+
* Complete spinner with warning
|
|
27
|
+
*/
|
|
28
|
+
warnSpinner(message?: string): void;
|
|
29
|
+
/**
|
|
30
|
+
* Stop spinner without status
|
|
31
|
+
*/
|
|
32
|
+
stopSpinner(): void;
|
|
33
|
+
/**
|
|
34
|
+
* Show a progress bar for determinate progress
|
|
35
|
+
*/
|
|
36
|
+
startProgressBar(total: number, options?: ProgressBarOptions): void;
|
|
37
|
+
/**
|
|
38
|
+
* Update progress bar
|
|
39
|
+
*/
|
|
40
|
+
updateProgressBar(current: number, payload?: any): void;
|
|
41
|
+
/**
|
|
42
|
+
* Increment progress bar
|
|
43
|
+
*/
|
|
44
|
+
incrementProgressBar(amount?: number): void;
|
|
45
|
+
/**
|
|
46
|
+
* Complete progress bar
|
|
47
|
+
*/
|
|
48
|
+
stopProgressBar(): void;
|
|
49
|
+
/**
|
|
50
|
+
* Execute operation with spinner
|
|
51
|
+
*/
|
|
52
|
+
withSpinner<T>(operation: () => Promise<T>, message: string, options?: SpinnerOptions): Promise<T>;
|
|
53
|
+
/**
|
|
54
|
+
* Execute operation with progress tracking
|
|
55
|
+
*/
|
|
56
|
+
withProgress<T>(operation: (progress: ProgressTracker) => Promise<T>, total: number, options?: ProgressBarOptions): Promise<T>;
|
|
57
|
+
/**
|
|
58
|
+
* Get elapsed time since start
|
|
59
|
+
*/
|
|
60
|
+
private getElapsedTime;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Multi-step progress indicator
|
|
64
|
+
*/
|
|
65
|
+
export declare class MultiStepProgress {
|
|
66
|
+
private steps;
|
|
67
|
+
private currentStep;
|
|
68
|
+
private progressIndicator;
|
|
69
|
+
constructor(steps: Step[]);
|
|
70
|
+
/**
|
|
71
|
+
* Start the multi-step process
|
|
72
|
+
*/
|
|
73
|
+
start(): void;
|
|
74
|
+
/**
|
|
75
|
+
* Complete current step and move to next
|
|
76
|
+
*/
|
|
77
|
+
nextStep(success?: boolean): void;
|
|
78
|
+
/**
|
|
79
|
+
* Complete all steps
|
|
80
|
+
*/
|
|
81
|
+
complete(): void;
|
|
82
|
+
/**
|
|
83
|
+
* Render the multi-step progress
|
|
84
|
+
*/
|
|
85
|
+
private render;
|
|
86
|
+
/**
|
|
87
|
+
* Render progress bar
|
|
88
|
+
*/
|
|
89
|
+
private renderProgressBar;
|
|
90
|
+
/**
|
|
91
|
+
* Render step list
|
|
92
|
+
*/
|
|
93
|
+
private renderStepList;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Smart suggestions system
|
|
97
|
+
*/
|
|
98
|
+
export declare class SmartSuggestions {
|
|
99
|
+
private userContext;
|
|
100
|
+
private commandHistory;
|
|
101
|
+
constructor(userContext: any);
|
|
102
|
+
/**
|
|
103
|
+
* Get suggestions based on current context
|
|
104
|
+
*/
|
|
105
|
+
getSuggestions(input: string): Suggestion[];
|
|
106
|
+
/**
|
|
107
|
+
* Get command-based suggestions
|
|
108
|
+
*/
|
|
109
|
+
private getCommandSuggestions;
|
|
110
|
+
/**
|
|
111
|
+
* Get natural language suggestions
|
|
112
|
+
*/
|
|
113
|
+
private getNaturalLanguageSuggestions;
|
|
114
|
+
/**
|
|
115
|
+
* Get historical suggestions
|
|
116
|
+
*/
|
|
117
|
+
private getHistoricalSuggestions;
|
|
118
|
+
/**
|
|
119
|
+
* Get contextual suggestions
|
|
120
|
+
*/
|
|
121
|
+
private getContextualSuggestions;
|
|
122
|
+
/**
|
|
123
|
+
* Rank suggestions by relevance
|
|
124
|
+
*/
|
|
125
|
+
private rankSuggestions;
|
|
126
|
+
/**
|
|
127
|
+
* Add command to history
|
|
128
|
+
*/
|
|
129
|
+
addToHistory(command: string): void;
|
|
130
|
+
/**
|
|
131
|
+
* Display suggestions
|
|
132
|
+
*/
|
|
133
|
+
displaySuggestions(suggestions: Suggestion[]): void;
|
|
134
|
+
}
|
|
135
|
+
export interface SpinnerOptions {
|
|
136
|
+
spinner?: string;
|
|
137
|
+
color?: string;
|
|
138
|
+
prefix?: string;
|
|
139
|
+
indent?: number;
|
|
140
|
+
}
|
|
141
|
+
export interface ProgressBarOptions {
|
|
142
|
+
title?: string;
|
|
143
|
+
format?: string;
|
|
144
|
+
clearOnComplete?: boolean;
|
|
145
|
+
}
|
|
146
|
+
export interface ProgressTracker {
|
|
147
|
+
update(current: number, payload?: any): void;
|
|
148
|
+
increment(amount?: number): void;
|
|
149
|
+
}
|
|
150
|
+
export interface Step {
|
|
151
|
+
name: string;
|
|
152
|
+
description?: string;
|
|
153
|
+
status: 'pending' | 'active' | 'completed' | 'failed';
|
|
154
|
+
}
|
|
155
|
+
export interface Suggestion {
|
|
156
|
+
text: string;
|
|
157
|
+
description: string;
|
|
158
|
+
type: 'command' | 'natural' | 'history' | 'contextual';
|
|
159
|
+
score: number;
|
|
160
|
+
}
|