@lanonasis/cli 3.6.4 → 3.6.5
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 +1 -2
- package/dist/commands/api-keys.js +78 -73
- package/dist/commands/auth.js +167 -160
- package/dist/commands/completion.js +39 -31
- package/dist/commands/config.js +201 -162
- package/dist/commands/enhanced-memory.js +17 -11
- package/dist/commands/guide.js +88 -79
- package/dist/commands/init.js +20 -14
- package/dist/commands/mcp.js +173 -142
- package/dist/commands/memory.js +83 -77
- package/dist/commands/organization.js +21 -15
- package/dist/commands/topics.js +58 -52
- package/dist/core/achievements.js +26 -19
- package/dist/core/architecture.js +59 -42
- package/dist/core/dashboard.js +81 -71
- package/dist/core/error-handler.js +39 -30
- package/dist/core/power-mode.js +53 -46
- package/dist/core/progress.js +44 -35
- package/dist/core/welcome.js +64 -56
- package/dist/enhanced-cli.js +58 -49
- package/dist/index-simple.js +112 -74
- package/dist/index.js +68 -63
- package/dist/mcp/access-control.js +17 -13
- package/dist/mcp/client/enhanced-client.js +23 -16
- package/dist/mcp/enhanced-server.js +14 -10
- package/dist/mcp/logger.js +6 -2
- package/dist/mcp/memory-state.js +17 -13
- package/dist/mcp/schemas/tool-schemas.d.ts +28 -28
- package/dist/mcp/schemas/tool-schemas.js +126 -122
- package/dist/mcp/server/lanonasis-server.js +51 -44
- package/dist/mcp/transports/transport-manager.js +25 -18
- package/dist/mcp/vector-store.js +10 -6
- package/dist/mcp-server.js +21 -17
- package/dist/utils/api.js +30 -21
- package/dist/utils/config.js +59 -13
- package/dist/utils/formatting.js +14 -6
- package/dist/utils/mcp-client.js +132 -77
- package/package.json +17 -93
- package/dist/completions/bash-completion.sh +0 -88
- package/dist/completions/fish-completion.fish +0 -132
- package/dist/completions/zsh-completion.zsh +0 -196
package/dist/commands/topics.js
CHANGED
|
@@ -1,11 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.topicCommands = topicCommands;
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
9
|
+
const ora_1 = __importDefault(require("ora"));
|
|
10
|
+
const table_1 = require("table");
|
|
11
|
+
const date_fns_1 = require("date-fns");
|
|
12
|
+
const api_js_1 = require("../utils/api.js");
|
|
13
|
+
const formatting_js_1 = require("../utils/formatting.js");
|
|
14
|
+
function topicCommands(program) {
|
|
9
15
|
// Create topic
|
|
10
16
|
program
|
|
11
17
|
.command('create')
|
|
@@ -21,7 +27,7 @@ export function topicCommands(program) {
|
|
|
21
27
|
try {
|
|
22
28
|
let { name, description, color, icon, parent, interactive } = options;
|
|
23
29
|
if (interactive || !name) {
|
|
24
|
-
const answers = await
|
|
30
|
+
const answers = await inquirer_1.default.prompt([
|
|
25
31
|
{
|
|
26
32
|
type: 'input',
|
|
27
33
|
name: 'name',
|
|
@@ -58,7 +64,7 @@ export function topicCommands(program) {
|
|
|
58
64
|
color = answers.color;
|
|
59
65
|
icon = answers.icon;
|
|
60
66
|
}
|
|
61
|
-
const spinner =
|
|
67
|
+
const spinner = (0, ora_1.default)('Creating topic...').start();
|
|
62
68
|
const topicData = { name };
|
|
63
69
|
if (description)
|
|
64
70
|
topicData.description = description;
|
|
@@ -68,11 +74,11 @@ export function topicCommands(program) {
|
|
|
68
74
|
topicData.icon = icon;
|
|
69
75
|
if (parent)
|
|
70
76
|
topicData.parent_topic_id = parent;
|
|
71
|
-
const topic = await apiClient.createTopic(topicData);
|
|
77
|
+
const topic = await api_js_1.apiClient.createTopic(topicData);
|
|
72
78
|
spinner.succeed('Topic created successfully');
|
|
73
79
|
console.log();
|
|
74
|
-
console.log(
|
|
75
|
-
console.log(` ID: ${
|
|
80
|
+
console.log(chalk_1.default.green('✓ Topic created:'));
|
|
81
|
+
console.log(` ID: ${chalk_1.default.cyan(topic.id)}`);
|
|
76
82
|
console.log(` Name: ${topic.name}`);
|
|
77
83
|
if (topic.description) {
|
|
78
84
|
console.log(` Description: ${topic.description}`);
|
|
@@ -83,7 +89,7 @@ export function topicCommands(program) {
|
|
|
83
89
|
}
|
|
84
90
|
catch (error) {
|
|
85
91
|
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
86
|
-
console.error(
|
|
92
|
+
console.error(chalk_1.default.red('✖ Failed to create topic:'), errorMessage);
|
|
87
93
|
process.exit(1);
|
|
88
94
|
}
|
|
89
95
|
});
|
|
@@ -94,14 +100,14 @@ export function topicCommands(program) {
|
|
|
94
100
|
.description('List topics')
|
|
95
101
|
.action(async () => {
|
|
96
102
|
try {
|
|
97
|
-
const spinner =
|
|
98
|
-
const topics = await apiClient.getTopics();
|
|
103
|
+
const spinner = (0, ora_1.default)('Fetching topics...').start();
|
|
104
|
+
const topics = await api_js_1.apiClient.getTopics();
|
|
99
105
|
spinner.stop();
|
|
100
106
|
if (topics.length === 0) {
|
|
101
|
-
console.log(
|
|
107
|
+
console.log(chalk_1.default.yellow('No topics found'));
|
|
102
108
|
return;
|
|
103
109
|
}
|
|
104
|
-
console.log(
|
|
110
|
+
console.log(chalk_1.default.blue.bold(`\n📁 Topics (${topics.length} total)`));
|
|
105
111
|
console.log();
|
|
106
112
|
const outputFormat = process.env.CLI_OUTPUT_FORMAT || 'table';
|
|
107
113
|
if (outputFormat === 'json') {
|
|
@@ -110,10 +116,10 @@ export function topicCommands(program) {
|
|
|
110
116
|
else {
|
|
111
117
|
// Table format
|
|
112
118
|
const tableData = topics.map((topic) => [
|
|
113
|
-
truncateText(topic.name, 25),
|
|
114
|
-
truncateText(topic.description || '', 40),
|
|
119
|
+
(0, formatting_js_1.truncateText)(topic.name, 25),
|
|
120
|
+
(0, formatting_js_1.truncateText)(topic.description || '', 40),
|
|
115
121
|
topic.color || '',
|
|
116
|
-
format(new Date(topic.created_at), 'MMM dd, yyyy'),
|
|
122
|
+
(0, date_fns_1.format)(new Date(topic.created_at), 'MMM dd, yyyy'),
|
|
117
123
|
topic.parent_topic_id ? '✓' : ''
|
|
118
124
|
]);
|
|
119
125
|
const tableConfig = {
|
|
@@ -130,12 +136,12 @@ export function topicCommands(program) {
|
|
|
130
136
|
]
|
|
131
137
|
};
|
|
132
138
|
const tableHeaders = ['Name', 'Description', 'System', 'Created'];
|
|
133
|
-
console.log(table([tableHeaders, ...tableData], tableConfig));
|
|
139
|
+
console.log((0, table_1.table)([tableHeaders, ...tableData], tableConfig));
|
|
134
140
|
}
|
|
135
141
|
}
|
|
136
142
|
catch (error) {
|
|
137
143
|
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
138
|
-
console.error(
|
|
144
|
+
console.error(chalk_1.default.red('✖ Failed to list topics:'), errorMessage);
|
|
139
145
|
process.exit(1);
|
|
140
146
|
}
|
|
141
147
|
});
|
|
@@ -147,37 +153,37 @@ export function topicCommands(program) {
|
|
|
147
153
|
.argument('<id>', 'topic ID')
|
|
148
154
|
.action(async (id) => {
|
|
149
155
|
try {
|
|
150
|
-
const spinner =
|
|
151
|
-
const topic = await apiClient.getTopic(id);
|
|
156
|
+
const spinner = (0, ora_1.default)('Fetching topic...').start();
|
|
157
|
+
const topic = await api_js_1.apiClient.getTopic(id);
|
|
152
158
|
spinner.stop();
|
|
153
|
-
console.log(
|
|
159
|
+
console.log(chalk_1.default.blue.bold('\n📁 Topic Details'));
|
|
154
160
|
console.log();
|
|
155
|
-
console.log(
|
|
156
|
-
console.log(
|
|
161
|
+
console.log(chalk_1.default.green('Name:'), topic.name);
|
|
162
|
+
console.log(chalk_1.default.green('ID:'), chalk_1.default.cyan(topic.id));
|
|
157
163
|
if (topic.description) {
|
|
158
|
-
console.log(
|
|
164
|
+
console.log(chalk_1.default.green('Description:'), topic.description);
|
|
159
165
|
}
|
|
160
166
|
if (topic.color) {
|
|
161
|
-
console.log(
|
|
167
|
+
console.log(chalk_1.default.green('Color:'), topic.color);
|
|
162
168
|
}
|
|
163
169
|
if (topic.icon) {
|
|
164
|
-
console.log(
|
|
170
|
+
console.log(chalk_1.default.green('Icon:'), topic.icon);
|
|
165
171
|
}
|
|
166
172
|
if (topic.parent_topic_id) {
|
|
167
|
-
console.log(
|
|
173
|
+
console.log(chalk_1.default.green('Parent Topic:'), topic.parent_topic_id);
|
|
168
174
|
}
|
|
169
|
-
console.log(
|
|
170
|
-
console.log(
|
|
171
|
-
console.log(
|
|
175
|
+
console.log(chalk_1.default.green('System Topic:'), topic.is_system ? 'Yes' : 'No');
|
|
176
|
+
console.log(chalk_1.default.green('Created:'), (0, date_fns_1.format)(new Date(topic.created_at), 'PPpp'));
|
|
177
|
+
console.log(chalk_1.default.green('Updated:'), (0, date_fns_1.format)(new Date(topic.updated_at), 'PPpp'));
|
|
172
178
|
if (topic.metadata && Object.keys(topic.metadata).length > 0) {
|
|
173
179
|
console.log();
|
|
174
|
-
console.log(
|
|
180
|
+
console.log(chalk_1.default.green('Metadata:'));
|
|
175
181
|
console.log(JSON.stringify(topic.metadata, null, 2));
|
|
176
182
|
}
|
|
177
183
|
}
|
|
178
184
|
catch (error) {
|
|
179
185
|
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
180
|
-
console.error(
|
|
186
|
+
console.error(chalk_1.default.red('✖ Failed to get topic:'), errorMessage);
|
|
181
187
|
process.exit(1);
|
|
182
188
|
}
|
|
183
189
|
});
|
|
@@ -196,10 +202,10 @@ export function topicCommands(program) {
|
|
|
196
202
|
let updateData = {};
|
|
197
203
|
if (options.interactive) {
|
|
198
204
|
// First, get current topic data
|
|
199
|
-
const spinner =
|
|
200
|
-
const currentTopic = await apiClient.getTopic(id);
|
|
205
|
+
const spinner = (0, ora_1.default)('Fetching current topic...').start();
|
|
206
|
+
const currentTopic = await api_js_1.apiClient.getTopic(id);
|
|
201
207
|
spinner.stop();
|
|
202
|
-
const answers = await
|
|
208
|
+
const answers = await inquirer_1.default.prompt([
|
|
203
209
|
{
|
|
204
210
|
type: 'input',
|
|
205
211
|
name: 'name',
|
|
@@ -248,20 +254,20 @@ export function topicCommands(program) {
|
|
|
248
254
|
updateData.icon = options.icon;
|
|
249
255
|
}
|
|
250
256
|
if (Object.keys(updateData).length === 0) {
|
|
251
|
-
console.log(
|
|
257
|
+
console.log(chalk_1.default.yellow('No updates specified'));
|
|
252
258
|
return;
|
|
253
259
|
}
|
|
254
|
-
const spinner =
|
|
255
|
-
const topic = await apiClient.updateTopic(id, updateData);
|
|
260
|
+
const spinner = (0, ora_1.default)('Updating topic...').start();
|
|
261
|
+
const topic = await api_js_1.apiClient.updateTopic(id, updateData);
|
|
256
262
|
spinner.succeed('Topic updated successfully');
|
|
257
263
|
console.log();
|
|
258
|
-
console.log(
|
|
259
|
-
console.log(` ID: ${
|
|
264
|
+
console.log(chalk_1.default.green('✓ Topic updated:'));
|
|
265
|
+
console.log(` ID: ${chalk_1.default.cyan(topic.id)}`);
|
|
260
266
|
console.log(` Name: ${topic.name}`);
|
|
261
267
|
}
|
|
262
268
|
catch (error) {
|
|
263
269
|
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
264
|
-
console.error(
|
|
270
|
+
console.error(chalk_1.default.red('✖ Failed to update topic:'), errorMessage);
|
|
265
271
|
process.exit(1);
|
|
266
272
|
}
|
|
267
273
|
});
|
|
@@ -275,8 +281,8 @@ export function topicCommands(program) {
|
|
|
275
281
|
.action(async (id, options) => {
|
|
276
282
|
try {
|
|
277
283
|
if (!options.force) {
|
|
278
|
-
const topic = await apiClient.getTopic(id);
|
|
279
|
-
const answer = await
|
|
284
|
+
const topic = await api_js_1.apiClient.getTopic(id);
|
|
285
|
+
const answer = await inquirer_1.default.prompt([
|
|
280
286
|
{
|
|
281
287
|
type: 'confirm',
|
|
282
288
|
name: 'confirm',
|
|
@@ -285,17 +291,17 @@ export function topicCommands(program) {
|
|
|
285
291
|
}
|
|
286
292
|
]);
|
|
287
293
|
if (!answer.confirm) {
|
|
288
|
-
console.log(
|
|
294
|
+
console.log(chalk_1.default.yellow('Deletion cancelled'));
|
|
289
295
|
return;
|
|
290
296
|
}
|
|
291
297
|
}
|
|
292
|
-
const spinner =
|
|
293
|
-
await apiClient.deleteTopic(id);
|
|
298
|
+
const spinner = (0, ora_1.default)('Deleting topic...').start();
|
|
299
|
+
await api_js_1.apiClient.deleteTopic(id);
|
|
294
300
|
spinner.succeed('Topic deleted successfully');
|
|
295
301
|
}
|
|
296
302
|
catch (error) {
|
|
297
303
|
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
298
|
-
console.error(
|
|
304
|
+
console.error(chalk_1.default.red('✖ Failed to delete topic:'), errorMessage);
|
|
299
305
|
process.exit(1);
|
|
300
306
|
}
|
|
301
307
|
});
|
|
@@ -1,11 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
/**
|
|
2
3
|
* Achievement System and Engagement Features
|
|
3
4
|
* Gamification elements to enhance user engagement
|
|
4
5
|
*/
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
7
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
8
|
+
};
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.AchievementSystem = void 0;
|
|
11
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
12
|
+
const boxen_1 = __importDefault(require("boxen"));
|
|
13
|
+
const events_1 = require("events");
|
|
14
|
+
class AchievementSystem extends events_1.EventEmitter {
|
|
9
15
|
stateManager;
|
|
10
16
|
achievements;
|
|
11
17
|
userStats;
|
|
@@ -265,10 +271,10 @@ export class AchievementSystem extends EventEmitter {
|
|
|
265
271
|
* Show achievement celebration
|
|
266
272
|
*/
|
|
267
273
|
celebrate(achievement) {
|
|
268
|
-
const celebration =
|
|
269
|
-
`${
|
|
270
|
-
`${
|
|
271
|
-
`${
|
|
274
|
+
const celebration = (0, boxen_1.default)(`${achievement.icon} ${chalk_1.default.bold.yellow('Achievement Unlocked!')}\n\n` +
|
|
275
|
+
`${chalk_1.default.bold(achievement.name)}\n` +
|
|
276
|
+
`${chalk_1.default.gray(achievement.description)}\n\n` +
|
|
277
|
+
`${chalk_1.default.green(`+${achievement.points} points`)}`, {
|
|
272
278
|
padding: 1,
|
|
273
279
|
borderStyle: 'double',
|
|
274
280
|
borderColor: 'yellow',
|
|
@@ -281,14 +287,14 @@ export class AchievementSystem extends EventEmitter {
|
|
|
281
287
|
*/
|
|
282
288
|
showAchievements() {
|
|
283
289
|
console.clear();
|
|
284
|
-
console.log(
|
|
290
|
+
console.log(chalk_1.default.bold.yellow('🏆 Achievements\n'));
|
|
285
291
|
const categories = ['usage', 'milestone', 'special', 'hidden'];
|
|
286
292
|
const totalPoints = this.getTotalPoints();
|
|
287
293
|
const unlockedPoints = this.getUnlockedPoints();
|
|
288
294
|
// Summary
|
|
289
|
-
console.log(
|
|
290
|
-
`Unlocked: ${
|
|
291
|
-
`Completion: ${
|
|
295
|
+
console.log((0, boxen_1.default)(`Points: ${chalk_1.default.bold.green(unlockedPoints)} / ${totalPoints}\n` +
|
|
296
|
+
`Unlocked: ${chalk_1.default.bold(this.unlockedAchievements.size)} / ${this.achievements.size}\n` +
|
|
297
|
+
`Completion: ${chalk_1.default.bold(Math.round((this.unlockedAchievements.size / this.achievements.size) * 100) + '%')}`, {
|
|
292
298
|
padding: 1,
|
|
293
299
|
borderStyle: 'single',
|
|
294
300
|
borderColor: 'cyan'
|
|
@@ -299,7 +305,7 @@ export class AchievementSystem extends EventEmitter {
|
|
|
299
305
|
.filter(a => a.category === category);
|
|
300
306
|
if (categoryAchievements.length === 0)
|
|
301
307
|
return;
|
|
302
|
-
console.log(`\n${
|
|
308
|
+
console.log(`\n${chalk_1.default.bold(this.getCategoryTitle(category))}\n`);
|
|
303
309
|
categoryAchievements.forEach(achievement => {
|
|
304
310
|
this.displayAchievement(achievement);
|
|
305
311
|
});
|
|
@@ -311,9 +317,9 @@ export class AchievementSystem extends EventEmitter {
|
|
|
311
317
|
displayAchievement(achievement) {
|
|
312
318
|
const unlocked = achievement.unlocked || this.unlockedAchievements.has(achievement.id);
|
|
313
319
|
const icon = unlocked ? achievement.icon : '🔒';
|
|
314
|
-
const name = unlocked ?
|
|
315
|
-
const description = unlocked ? achievement.description :
|
|
316
|
-
const points =
|
|
320
|
+
const name = unlocked ? chalk_1.default.bold(achievement.name) : chalk_1.default.dim(achievement.name);
|
|
321
|
+
const description = unlocked ? achievement.description : chalk_1.default.dim(achievement.description);
|
|
322
|
+
const points = chalk_1.default.green(`${achievement.points}pts`);
|
|
317
323
|
let progressBar = '';
|
|
318
324
|
if (achievement.maxProgress && !unlocked) {
|
|
319
325
|
const progress = achievement.progress || 0;
|
|
@@ -321,12 +327,12 @@ export class AchievementSystem extends EventEmitter {
|
|
|
321
327
|
const barLength = 20;
|
|
322
328
|
const filled = Math.round((progress / achievement.maxProgress) * barLength);
|
|
323
329
|
const bar = '█'.repeat(filled) + '░'.repeat(barLength - filled);
|
|
324
|
-
progressBar = `\n ${
|
|
330
|
+
progressBar = `\n ${chalk_1.default.cyan(bar)} ${percentage}% (${progress}/${achievement.maxProgress})`;
|
|
325
331
|
}
|
|
326
332
|
console.log(` ${icon} ${name} ${points}`);
|
|
327
333
|
console.log(` ${description}${progressBar}`);
|
|
328
334
|
if (unlocked && achievement.unlockedAt) {
|
|
329
|
-
console.log(
|
|
335
|
+
console.log(chalk_1.default.dim(` Unlocked: ${achievement.unlockedAt.toLocaleDateString()}`));
|
|
330
336
|
}
|
|
331
337
|
console.log();
|
|
332
338
|
}
|
|
@@ -368,7 +374,7 @@ export class AchievementSystem extends EventEmitter {
|
|
|
368
374
|
// Show subtle notification for new achievements
|
|
369
375
|
if (newAchievements.length > 0 && !this.stateManager.getPreferences().expertMode) {
|
|
370
376
|
newAchievements.forEach(achievement => {
|
|
371
|
-
console.log(
|
|
377
|
+
console.log(chalk_1.default.yellow(`\n🎉 Achievement unlocked: ${achievement.name}!`));
|
|
372
378
|
});
|
|
373
379
|
}
|
|
374
380
|
}
|
|
@@ -423,3 +429,4 @@ export class AchievementSystem extends EventEmitter {
|
|
|
423
429
|
// Would save to storage
|
|
424
430
|
}
|
|
425
431
|
}
|
|
432
|
+
exports.AchievementSystem = AchievementSystem;
|
|
@@ -1,11 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
/**
|
|
2
3
|
* Core Architecture for Enhanced CLI Experience
|
|
3
4
|
* Implements the layered architecture for state management, interaction, and presentation
|
|
4
5
|
*/
|
|
5
|
-
|
|
6
|
-
|
|
6
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
7
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
8
|
+
};
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.SubtleAnimationController = exports.ResponsiveLayoutManager = exports.AdaptiveThemeEngine = exports.PresentationLayer = exports.InlineHelpProvider = exports.RealTimeFeedback = exports.ContextualValidator = exports.AdaptivePromptSystem = exports.InteractionEngine = exports.StateManager = void 0;
|
|
11
|
+
exports.createCLIArchitecture = createCLIArchitecture;
|
|
12
|
+
const events_1 = require("events");
|
|
13
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
7
14
|
// State Management Layer
|
|
8
|
-
|
|
15
|
+
class StateManager extends events_1.EventEmitter {
|
|
9
16
|
navigationStack = [];
|
|
10
17
|
userContext;
|
|
11
18
|
sessionMemory;
|
|
@@ -66,7 +73,7 @@ export class StateManager extends EventEmitter {
|
|
|
66
73
|
renderBreadcrumb() {
|
|
67
74
|
if (this.navigationStack.length > 0) {
|
|
68
75
|
const path = this.navigationStack.map(s => s.name).join(' > ');
|
|
69
|
-
console.log(
|
|
76
|
+
console.log(chalk_1.default.dim(path));
|
|
70
77
|
}
|
|
71
78
|
}
|
|
72
79
|
// Context methods
|
|
@@ -112,8 +119,9 @@ export class StateManager extends EventEmitter {
|
|
|
112
119
|
return this.sessionMemory.undoStack.pop();
|
|
113
120
|
}
|
|
114
121
|
}
|
|
122
|
+
exports.StateManager = StateManager;
|
|
115
123
|
// Interaction Engine
|
|
116
|
-
|
|
124
|
+
class InteractionEngine {
|
|
117
125
|
stateManager;
|
|
118
126
|
promptSystem;
|
|
119
127
|
validationEngine;
|
|
@@ -139,8 +147,9 @@ export class InteractionEngine {
|
|
|
139
147
|
return this.helpSystem.getHelp();
|
|
140
148
|
}
|
|
141
149
|
}
|
|
150
|
+
exports.InteractionEngine = InteractionEngine;
|
|
142
151
|
// Adaptive Prompt System
|
|
143
|
-
|
|
152
|
+
class AdaptivePromptSystem {
|
|
144
153
|
stateManager;
|
|
145
154
|
constructor(stateManager) {
|
|
146
155
|
this.stateManager = stateManager;
|
|
@@ -166,8 +175,9 @@ export class AdaptivePromptSystem {
|
|
|
166
175
|
return null;
|
|
167
176
|
}
|
|
168
177
|
}
|
|
178
|
+
exports.AdaptivePromptSystem = AdaptivePromptSystem;
|
|
169
179
|
// Contextual Validator
|
|
170
|
-
|
|
180
|
+
class ContextualValidator {
|
|
171
181
|
validate(value, rules) {
|
|
172
182
|
const errors = [];
|
|
173
183
|
const warnings = [];
|
|
@@ -194,14 +204,15 @@ export class ContextualValidator {
|
|
|
194
204
|
};
|
|
195
205
|
}
|
|
196
206
|
}
|
|
207
|
+
exports.ContextualValidator = ContextualValidator;
|
|
197
208
|
// Real-time Feedback System
|
|
198
|
-
|
|
209
|
+
class RealTimeFeedback {
|
|
199
210
|
icons = {
|
|
200
|
-
success:
|
|
201
|
-
error:
|
|
202
|
-
warning:
|
|
203
|
-
info:
|
|
204
|
-
loading:
|
|
211
|
+
success: chalk_1.default.green('✓'),
|
|
212
|
+
error: chalk_1.default.red('✖'),
|
|
213
|
+
warning: chalk_1.default.yellow('⚠'),
|
|
214
|
+
info: chalk_1.default.cyan('ℹ'),
|
|
215
|
+
loading: chalk_1.default.blue('◐')
|
|
205
216
|
};
|
|
206
217
|
show(message, type) {
|
|
207
218
|
const icon = this.icons[type];
|
|
@@ -210,16 +221,17 @@ export class RealTimeFeedback {
|
|
|
210
221
|
}
|
|
211
222
|
getColorFunction(type) {
|
|
212
223
|
switch (type) {
|
|
213
|
-
case 'success': return
|
|
214
|
-
case 'error': return
|
|
215
|
-
case 'warning': return
|
|
216
|
-
case 'info': return
|
|
217
|
-
default: return
|
|
224
|
+
case 'success': return chalk_1.default.green;
|
|
225
|
+
case 'error': return chalk_1.default.red;
|
|
226
|
+
case 'warning': return chalk_1.default.yellow;
|
|
227
|
+
case 'info': return chalk_1.default.cyan;
|
|
228
|
+
default: return chalk_1.default.white;
|
|
218
229
|
}
|
|
219
230
|
}
|
|
220
231
|
}
|
|
232
|
+
exports.RealTimeFeedback = RealTimeFeedback;
|
|
221
233
|
// Inline Help Provider
|
|
222
|
-
|
|
234
|
+
class InlineHelpProvider {
|
|
223
235
|
stateManager;
|
|
224
236
|
constructor(stateManager) {
|
|
225
237
|
this.stateManager = stateManager;
|
|
@@ -244,8 +256,9 @@ export class InlineHelpProvider {
|
|
|
244
256
|
return helps[state.name] || 'Type "?" for help, "←" to go back';
|
|
245
257
|
}
|
|
246
258
|
}
|
|
259
|
+
exports.InlineHelpProvider = InlineHelpProvider;
|
|
247
260
|
// Presentation Layer
|
|
248
|
-
|
|
261
|
+
class PresentationLayer {
|
|
249
262
|
themeEngine;
|
|
250
263
|
layoutManager;
|
|
251
264
|
animationController;
|
|
@@ -264,31 +277,32 @@ export class PresentationLayer {
|
|
|
264
277
|
this.animationController.animate(_element, _animation);
|
|
265
278
|
}
|
|
266
279
|
}
|
|
280
|
+
exports.PresentationLayer = PresentationLayer;
|
|
267
281
|
// Theme Engine
|
|
268
|
-
|
|
282
|
+
class AdaptiveThemeEngine {
|
|
269
283
|
currentTheme = 'default';
|
|
270
284
|
themes = {
|
|
271
285
|
default: {
|
|
272
|
-
primary:
|
|
273
|
-
secondary:
|
|
274
|
-
success:
|
|
275
|
-
warning:
|
|
276
|
-
error:
|
|
277
|
-
info:
|
|
278
|
-
accent:
|
|
279
|
-
muted:
|
|
280
|
-
highlight:
|
|
286
|
+
primary: chalk_1.default.blue.bold,
|
|
287
|
+
secondary: chalk_1.default.gray,
|
|
288
|
+
success: chalk_1.default.green,
|
|
289
|
+
warning: chalk_1.default.yellow,
|
|
290
|
+
error: chalk_1.default.red,
|
|
291
|
+
info: chalk_1.default.cyan,
|
|
292
|
+
accent: chalk_1.default.magenta,
|
|
293
|
+
muted: chalk_1.default.dim,
|
|
294
|
+
highlight: chalk_1.default.white.bold
|
|
281
295
|
},
|
|
282
296
|
dark: {
|
|
283
|
-
primary:
|
|
284
|
-
secondary:
|
|
285
|
-
success:
|
|
286
|
-
warning:
|
|
287
|
-
error:
|
|
288
|
-
info:
|
|
289
|
-
accent:
|
|
290
|
-
muted:
|
|
291
|
-
highlight:
|
|
297
|
+
primary: chalk_1.default.cyanBright.bold,
|
|
298
|
+
secondary: chalk_1.default.gray,
|
|
299
|
+
success: chalk_1.default.greenBright,
|
|
300
|
+
warning: chalk_1.default.yellowBright,
|
|
301
|
+
error: chalk_1.default.redBright,
|
|
302
|
+
info: chalk_1.default.blueBright,
|
|
303
|
+
accent: chalk_1.default.magentaBright,
|
|
304
|
+
muted: chalk_1.default.dim,
|
|
305
|
+
highlight: chalk_1.default.whiteBright.bold
|
|
292
306
|
}
|
|
293
307
|
};
|
|
294
308
|
setTheme(theme) {
|
|
@@ -300,8 +314,9 @@ export class AdaptiveThemeEngine {
|
|
|
300
314
|
return this.themes[this.currentTheme];
|
|
301
315
|
}
|
|
302
316
|
}
|
|
317
|
+
exports.AdaptiveThemeEngine = AdaptiveThemeEngine;
|
|
303
318
|
// Layout Manager
|
|
304
|
-
|
|
319
|
+
class ResponsiveLayoutManager {
|
|
305
320
|
render(content, layout) {
|
|
306
321
|
// Implement different layout strategies
|
|
307
322
|
switch (layout) {
|
|
@@ -335,15 +350,17 @@ export class ResponsiveLayoutManager {
|
|
|
335
350
|
// Implementation here
|
|
336
351
|
}
|
|
337
352
|
}
|
|
353
|
+
exports.ResponsiveLayoutManager = ResponsiveLayoutManager;
|
|
338
354
|
// Animation Controller
|
|
339
|
-
|
|
355
|
+
class SubtleAnimationController {
|
|
340
356
|
animate(_element, _animation) {
|
|
341
357
|
// Implement subtle animations for CLI
|
|
342
358
|
// This would handle progress bars, spinners, etc.
|
|
343
359
|
}
|
|
344
360
|
}
|
|
361
|
+
exports.SubtleAnimationController = SubtleAnimationController;
|
|
345
362
|
// Factory to create the complete architecture
|
|
346
|
-
|
|
363
|
+
function createCLIArchitecture() {
|
|
347
364
|
const stateManager = new StateManager();
|
|
348
365
|
const interactionEngine = new InteractionEngine(stateManager);
|
|
349
366
|
const presentationLayer = new PresentationLayer();
|