@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/commands/memory.js
CHANGED
|
@@ -1,18 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
};
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
const table_1 = require("table");
|
|
11
|
-
const word_wrap_1 = __importDefault(require("word-wrap"));
|
|
12
|
-
const date_fns_1 = require("date-fns");
|
|
13
|
-
const api_js_1 = require("../utils/api.js");
|
|
14
|
-
const formatting_js_1 = require("../utils/formatting.js");
|
|
15
|
-
function memoryCommands(program) {
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import inquirer from 'inquirer';
|
|
3
|
+
import ora from 'ora';
|
|
4
|
+
import { table } from 'table';
|
|
5
|
+
import wrap from 'word-wrap';
|
|
6
|
+
import { format } from 'date-fns';
|
|
7
|
+
import { apiClient } from '../utils/api.js';
|
|
8
|
+
import { formatBytes, truncateText } from '../utils/formatting.js';
|
|
9
|
+
export function memoryCommands(program) {
|
|
16
10
|
// Create memory
|
|
17
11
|
program
|
|
18
12
|
.command('create')
|
|
@@ -28,7 +22,7 @@ function memoryCommands(program) {
|
|
|
28
22
|
try {
|
|
29
23
|
let { title, content, type, tags, topicId, interactive } = options;
|
|
30
24
|
if (interactive || (!title || !content)) {
|
|
31
|
-
const answers = await
|
|
25
|
+
const answers = await inquirer.prompt([
|
|
32
26
|
{
|
|
33
27
|
type: 'input',
|
|
34
28
|
name: 'title',
|
|
@@ -62,7 +56,7 @@ function memoryCommands(program) {
|
|
|
62
56
|
type = answers.type;
|
|
63
57
|
tags = answers.tags;
|
|
64
58
|
}
|
|
65
|
-
const spinner = (
|
|
59
|
+
const spinner = ora('Creating memory...').start();
|
|
66
60
|
const memoryData = {
|
|
67
61
|
title,
|
|
68
62
|
content,
|
|
@@ -74,11 +68,11 @@ function memoryCommands(program) {
|
|
|
74
68
|
if (topicId) {
|
|
75
69
|
memoryData.topic_id = topicId;
|
|
76
70
|
}
|
|
77
|
-
const memory = await
|
|
71
|
+
const memory = await apiClient.createMemory(memoryData);
|
|
78
72
|
spinner.succeed('Memory created successfully');
|
|
79
73
|
console.log();
|
|
80
|
-
console.log(
|
|
81
|
-
console.log(` ID: ${
|
|
74
|
+
console.log(chalk.green('✓ Memory created:'));
|
|
75
|
+
console.log(` ID: ${chalk.cyan(memory.id)}`);
|
|
82
76
|
console.log(` Title: ${memory.title}`);
|
|
83
77
|
console.log(` Type: ${memory.memory_type}`);
|
|
84
78
|
if (memory.tags && memory.tags.length > 0) {
|
|
@@ -87,7 +81,7 @@ function memoryCommands(program) {
|
|
|
87
81
|
}
|
|
88
82
|
catch (error) {
|
|
89
83
|
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
90
|
-
console.error(
|
|
84
|
+
console.error(chalk.red('✖ Failed to create memory:'), errorMessage);
|
|
91
85
|
process.exit(1);
|
|
92
86
|
}
|
|
93
87
|
});
|
|
@@ -105,7 +99,7 @@ function memoryCommands(program) {
|
|
|
105
99
|
.option('--order <order>', 'sort order (asc, desc)', 'desc')
|
|
106
100
|
.action(async (options) => {
|
|
107
101
|
try {
|
|
108
|
-
const spinner = (
|
|
102
|
+
const spinner = ora('Fetching memories...').start();
|
|
109
103
|
const params = {
|
|
110
104
|
page: parseInt(options.page || '1'),
|
|
111
105
|
limit: parseInt(options.limit || '20'),
|
|
@@ -118,15 +112,15 @@ function memoryCommands(program) {
|
|
|
118
112
|
params.tags = options.tags;
|
|
119
113
|
if (options.userId)
|
|
120
114
|
params.user_id = options.userId;
|
|
121
|
-
const result = await
|
|
115
|
+
const result = await apiClient.getMemories(params);
|
|
122
116
|
spinner.stop();
|
|
123
117
|
const memories = result.memories || result.data || [];
|
|
124
118
|
if (memories.length === 0) {
|
|
125
|
-
console.log(
|
|
119
|
+
console.log(chalk.yellow('No memories found'));
|
|
126
120
|
return;
|
|
127
121
|
}
|
|
128
|
-
console.log(
|
|
129
|
-
console.log(
|
|
122
|
+
console.log(chalk.blue.bold(`\n📚 Memories (${result.pagination.total} total)`));
|
|
123
|
+
console.log(chalk.gray(`Page ${result.pagination.page || 1} of ${result.pagination.pages || Math.ceil(result.pagination.total / result.pagination.limit)}`));
|
|
130
124
|
console.log();
|
|
131
125
|
const outputFormat = process.env.CLI_OUTPUT_FORMAT || 'table';
|
|
132
126
|
if (outputFormat === 'json') {
|
|
@@ -135,10 +129,10 @@ function memoryCommands(program) {
|
|
|
135
129
|
else {
|
|
136
130
|
// Table format
|
|
137
131
|
const tableData = memories.map((memory) => [
|
|
138
|
-
|
|
132
|
+
truncateText(memory.title, 30),
|
|
139
133
|
memory.memory_type,
|
|
140
134
|
memory.tags.slice(0, 3).join(', '),
|
|
141
|
-
|
|
135
|
+
format(new Date(memory.created_at), 'MMM dd, yyyy'),
|
|
142
136
|
memory.access_count
|
|
143
137
|
]);
|
|
144
138
|
const tableConfig = {
|
|
@@ -155,19 +149,19 @@ function memoryCommands(program) {
|
|
|
155
149
|
{ width: 8 }
|
|
156
150
|
]
|
|
157
151
|
};
|
|
158
|
-
console.log(
|
|
152
|
+
console.log(table([tableConfig.header, ...tableData], {
|
|
159
153
|
columnDefault: tableConfig.columnDefault,
|
|
160
154
|
columns: tableConfig.columns
|
|
161
155
|
}));
|
|
162
156
|
// Pagination info
|
|
163
157
|
if (result.pagination.pages > 1) {
|
|
164
|
-
console.log(
|
|
158
|
+
console.log(chalk.gray(`\nUse --page ${result.pagination.page + 1} for next page`));
|
|
165
159
|
}
|
|
166
160
|
}
|
|
167
161
|
}
|
|
168
162
|
catch (error) {
|
|
169
163
|
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
170
|
-
console.error(
|
|
164
|
+
console.error(chalk.red('✖ Failed to list memories:'), errorMessage);
|
|
171
165
|
process.exit(1);
|
|
172
166
|
}
|
|
173
167
|
});
|
|
@@ -182,7 +176,7 @@ function memoryCommands(program) {
|
|
|
182
176
|
.option('--tags <tags>', 'filter by tags (comma-separated)')
|
|
183
177
|
.action(async (query, options) => {
|
|
184
178
|
try {
|
|
185
|
-
const spinner = (
|
|
179
|
+
const spinner = ora(`Searching for "${query}"...`).start();
|
|
186
180
|
const searchOptions = {
|
|
187
181
|
limit: parseInt(options.limit || '20'),
|
|
188
182
|
threshold: parseFloat(options.threshold || '0.7')
|
|
@@ -193,30 +187,30 @@ function memoryCommands(program) {
|
|
|
193
187
|
if (options.tags) {
|
|
194
188
|
searchOptions.tags = options.tags.split(',').map((t) => t.trim());
|
|
195
189
|
}
|
|
196
|
-
const result = await
|
|
190
|
+
const result = await apiClient.searchMemories(query, searchOptions);
|
|
197
191
|
spinner.stop();
|
|
198
192
|
const results = result.results || result.data || [];
|
|
199
193
|
if (results.length === 0) {
|
|
200
|
-
console.log(
|
|
194
|
+
console.log(chalk.yellow('No memories found matching your search'));
|
|
201
195
|
return;
|
|
202
196
|
}
|
|
203
|
-
console.log(
|
|
204
|
-
console.log(
|
|
197
|
+
console.log(chalk.blue.bold(`\n🔍 Search Results (${result.total_results || results.length} found)`));
|
|
198
|
+
console.log(chalk.gray(`Query: "${query}" | Search time: ${result.search_time_ms || 0}ms`));
|
|
205
199
|
console.log();
|
|
206
200
|
results.forEach((memory, index) => {
|
|
207
201
|
const score = (memory.relevance_score * 100).toFixed(1);
|
|
208
|
-
console.log(
|
|
209
|
-
console.log(
|
|
210
|
-
console.log(
|
|
202
|
+
console.log(chalk.green(`${index + 1}. ${memory.title}`) + chalk.gray(` (${score}% match)`));
|
|
203
|
+
console.log(chalk.white(` ${truncateText(memory.content, 100)}`));
|
|
204
|
+
console.log(chalk.cyan(` ID: ${memory.id}`) + chalk.gray(` | Type: ${memory.memory_type}`));
|
|
211
205
|
if (memory.tags.length > 0) {
|
|
212
|
-
console.log(
|
|
206
|
+
console.log(chalk.yellow(` Tags: ${memory.tags.join(', ')}`));
|
|
213
207
|
}
|
|
214
208
|
console.log();
|
|
215
209
|
});
|
|
216
210
|
}
|
|
217
211
|
catch (error) {
|
|
218
212
|
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
219
|
-
console.error(
|
|
213
|
+
console.error(chalk.red('✖ Search failed:'), errorMessage);
|
|
220
214
|
process.exit(1);
|
|
221
215
|
}
|
|
222
216
|
});
|
|
@@ -228,38 +222,38 @@ function memoryCommands(program) {
|
|
|
228
222
|
.argument('<id>', 'memory ID')
|
|
229
223
|
.action(async (id) => {
|
|
230
224
|
try {
|
|
231
|
-
const spinner = (
|
|
232
|
-
const memory = await
|
|
225
|
+
const spinner = ora('Fetching memory...').start();
|
|
226
|
+
const memory = await apiClient.getMemory(id);
|
|
233
227
|
spinner.stop();
|
|
234
|
-
console.log(
|
|
228
|
+
console.log(chalk.blue.bold('\n📄 Memory Details'));
|
|
235
229
|
console.log();
|
|
236
|
-
console.log(
|
|
237
|
-
console.log(
|
|
238
|
-
console.log(
|
|
239
|
-
console.log(
|
|
240
|
-
console.log(
|
|
230
|
+
console.log(chalk.green('Title:'), memory.title);
|
|
231
|
+
console.log(chalk.green('ID:'), chalk.cyan(memory.id));
|
|
232
|
+
console.log(chalk.green('Type:'), memory.memory_type);
|
|
233
|
+
console.log(chalk.green('Created:'), format(new Date(memory.created_at), 'PPpp'));
|
|
234
|
+
console.log(chalk.green('Updated:'), format(new Date(memory.updated_at), 'PPpp'));
|
|
241
235
|
if (memory.last_accessed) {
|
|
242
|
-
console.log(
|
|
236
|
+
console.log(chalk.green('Last Accessed:'), format(new Date(memory.last_accessed), 'PPpp'));
|
|
243
237
|
}
|
|
244
|
-
console.log(
|
|
238
|
+
console.log(chalk.green('Access Count:'), memory.access_count);
|
|
245
239
|
if (memory.tags && memory.tags.length > 0) {
|
|
246
|
-
console.log(
|
|
240
|
+
console.log(chalk.green('Tags:'), memory.tags.join(', '));
|
|
247
241
|
}
|
|
248
242
|
if (memory.topic_id) {
|
|
249
|
-
console.log(
|
|
243
|
+
console.log(chalk.green('Topic ID:'), memory.topic_id);
|
|
250
244
|
}
|
|
251
245
|
console.log();
|
|
252
|
-
console.log(
|
|
253
|
-
console.log((
|
|
246
|
+
console.log(chalk.green('Content:'));
|
|
247
|
+
console.log(wrap(memory.content, { width: 80, indent: ' ' }));
|
|
254
248
|
if (memory.metadata && Object.keys(memory.metadata).length > 0) {
|
|
255
249
|
console.log();
|
|
256
|
-
console.log(
|
|
250
|
+
console.log(chalk.green('Metadata:'));
|
|
257
251
|
console.log(JSON.stringify(memory.metadata, null, 2));
|
|
258
252
|
}
|
|
259
253
|
}
|
|
260
254
|
catch (error) {
|
|
261
255
|
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
262
|
-
console.error(
|
|
256
|
+
console.error(chalk.red('✖ Failed to get memory:'), errorMessage);
|
|
263
257
|
process.exit(1);
|
|
264
258
|
}
|
|
265
259
|
});
|
|
@@ -278,10 +272,10 @@ function memoryCommands(program) {
|
|
|
278
272
|
let updateData = {};
|
|
279
273
|
if (options.interactive) {
|
|
280
274
|
// First, get current memory data
|
|
281
|
-
const spinner = (
|
|
282
|
-
const currentMemory = await
|
|
275
|
+
const spinner = ora('Fetching current memory...').start();
|
|
276
|
+
const currentMemory = await apiClient.getMemory(id);
|
|
283
277
|
spinner.stop();
|
|
284
|
-
const answers = await
|
|
278
|
+
const answers = await inquirer.prompt([
|
|
285
279
|
{
|
|
286
280
|
type: 'input',
|
|
287
281
|
name: 'title',
|
|
@@ -327,20 +321,20 @@ function memoryCommands(program) {
|
|
|
327
321
|
}
|
|
328
322
|
}
|
|
329
323
|
if (Object.keys(updateData).length === 0) {
|
|
330
|
-
console.log(
|
|
324
|
+
console.log(chalk.yellow('No updates specified'));
|
|
331
325
|
return;
|
|
332
326
|
}
|
|
333
|
-
const spinner = (
|
|
334
|
-
const memory = await
|
|
327
|
+
const spinner = ora('Updating memory...').start();
|
|
328
|
+
const memory = await apiClient.updateMemory(id, updateData);
|
|
335
329
|
spinner.succeed('Memory updated successfully');
|
|
336
330
|
console.log();
|
|
337
|
-
console.log(
|
|
338
|
-
console.log(` ID: ${
|
|
331
|
+
console.log(chalk.green('✓ Memory updated:'));
|
|
332
|
+
console.log(` ID: ${chalk.cyan(memory.id)}`);
|
|
339
333
|
console.log(` Title: ${memory.title}`);
|
|
340
334
|
}
|
|
341
335
|
catch (error) {
|
|
342
336
|
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
343
|
-
console.error(
|
|
337
|
+
console.error(chalk.red('✖ Failed to update memory:'), errorMessage);
|
|
344
338
|
process.exit(1);
|
|
345
339
|
}
|
|
346
340
|
});
|
|
@@ -354,8 +348,8 @@ function memoryCommands(program) {
|
|
|
354
348
|
.action(async (id, options) => {
|
|
355
349
|
try {
|
|
356
350
|
if (!options.force) {
|
|
357
|
-
const memory = await
|
|
358
|
-
const answer = await
|
|
351
|
+
const memory = await apiClient.getMemory(id);
|
|
352
|
+
const answer = await inquirer.prompt([
|
|
359
353
|
{
|
|
360
354
|
type: 'confirm',
|
|
361
355
|
name: 'confirm',
|
|
@@ -364,17 +358,17 @@ function memoryCommands(program) {
|
|
|
364
358
|
}
|
|
365
359
|
]);
|
|
366
360
|
if (!answer.confirm) {
|
|
367
|
-
console.log(
|
|
361
|
+
console.log(chalk.yellow('Deletion cancelled'));
|
|
368
362
|
return;
|
|
369
363
|
}
|
|
370
364
|
}
|
|
371
|
-
const spinner = (
|
|
372
|
-
await
|
|
365
|
+
const spinner = ora('Deleting memory...').start();
|
|
366
|
+
await apiClient.deleteMemory(id);
|
|
373
367
|
spinner.succeed('Memory deleted successfully');
|
|
374
368
|
}
|
|
375
369
|
catch (error) {
|
|
376
370
|
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
377
|
-
console.error(
|
|
371
|
+
console.error(chalk.red('✖ Failed to delete memory:'), errorMessage);
|
|
378
372
|
process.exit(1);
|
|
379
373
|
}
|
|
380
374
|
});
|
|
@@ -384,35 +378,35 @@ function memoryCommands(program) {
|
|
|
384
378
|
.description('Show memory statistics (admin only)')
|
|
385
379
|
.action(async () => {
|
|
386
380
|
try {
|
|
387
|
-
const spinner = (
|
|
388
|
-
const stats = await
|
|
381
|
+
const spinner = ora('Fetching statistics...').start();
|
|
382
|
+
const stats = await apiClient.getMemoryStats();
|
|
389
383
|
spinner.stop();
|
|
390
|
-
console.log(
|
|
384
|
+
console.log(chalk.blue.bold('\n📊 Memory Statistics'));
|
|
391
385
|
console.log();
|
|
392
|
-
console.log(
|
|
393
|
-
console.log(
|
|
394
|
-
console.log(
|
|
386
|
+
console.log(chalk.green('Total Memories:'), stats.total_memories.toLocaleString());
|
|
387
|
+
console.log(chalk.green('Total Size:'), formatBytes(stats.total_size_bytes));
|
|
388
|
+
console.log(chalk.green('Average Access Count:'), stats.avg_access_count);
|
|
395
389
|
console.log();
|
|
396
|
-
console.log(
|
|
390
|
+
console.log(chalk.yellow('Memories by Type:'));
|
|
397
391
|
Object.entries(stats.memories_by_type).forEach(([type, count]) => {
|
|
398
392
|
console.log(` ${type}: ${count}`);
|
|
399
393
|
});
|
|
400
394
|
if (stats.most_accessed_memory) {
|
|
401
395
|
console.log();
|
|
402
|
-
console.log(
|
|
396
|
+
console.log(chalk.yellow('Most Accessed Memory:'));
|
|
403
397
|
console.log(` ${stats.most_accessed_memory.title} (${stats.most_accessed_memory.access_count} times)`);
|
|
404
398
|
}
|
|
405
399
|
if (stats.recent_memories.length > 0) {
|
|
406
400
|
console.log();
|
|
407
|
-
console.log(
|
|
401
|
+
console.log(chalk.yellow('Recent Memories:'));
|
|
408
402
|
stats.recent_memories.forEach((memory, index) => {
|
|
409
|
-
console.log(` ${index + 1}. ${
|
|
403
|
+
console.log(` ${index + 1}. ${truncateText(memory.title, 50)}`);
|
|
410
404
|
});
|
|
411
405
|
}
|
|
412
406
|
}
|
|
413
407
|
catch (error) {
|
|
414
408
|
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
415
|
-
console.error(
|
|
409
|
+
console.error(chalk.red('✖ Failed to get statistics:'), errorMessage);
|
|
416
410
|
process.exit(1);
|
|
417
411
|
}
|
|
418
412
|
});
|
|
@@ -1,47 +1,41 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.orgCommands = orgCommands;
|
|
7
|
-
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
-
const config_js_1 = require("../utils/config.js");
|
|
9
|
-
function orgCommands(program) {
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { CLIConfig } from '../utils/config.js';
|
|
3
|
+
export function orgCommands(program) {
|
|
10
4
|
// Show organization info
|
|
11
5
|
program
|
|
12
6
|
.command('info')
|
|
13
7
|
.description('Show organization information')
|
|
14
8
|
.action(async () => {
|
|
15
|
-
const config = new
|
|
9
|
+
const config = new CLIConfig();
|
|
16
10
|
await config.init();
|
|
17
11
|
const user = await config.getCurrentUser();
|
|
18
12
|
if (!user) {
|
|
19
|
-
console.error(
|
|
13
|
+
console.error(chalk.red('✖ Not authenticated'));
|
|
20
14
|
process.exit(1);
|
|
21
15
|
}
|
|
22
|
-
console.log(
|
|
16
|
+
console.log(chalk.blue.bold('🏢 Organization Information'));
|
|
23
17
|
console.log();
|
|
24
|
-
console.log(
|
|
25
|
-
console.log(
|
|
26
|
-
console.log(
|
|
27
|
-
console.log(
|
|
18
|
+
console.log(chalk.green('Organization ID:'), user.organization_id);
|
|
19
|
+
console.log(chalk.green('Your Role:'), user.role);
|
|
20
|
+
console.log(chalk.green('Plan:'), user.plan);
|
|
21
|
+
console.log(chalk.green('Email:'), user.email);
|
|
28
22
|
// In a full implementation, you'd fetch more org details from the API
|
|
29
23
|
console.log();
|
|
30
|
-
console.log(
|
|
24
|
+
console.log(chalk.gray('Note: Use the web dashboard for full organization management'));
|
|
31
25
|
});
|
|
32
26
|
// Placeholder for future org management commands
|
|
33
27
|
program
|
|
34
28
|
.command('members')
|
|
35
29
|
.description('List organization members (admin only)')
|
|
36
30
|
.action(async () => {
|
|
37
|
-
console.log(
|
|
38
|
-
console.log(
|
|
31
|
+
console.log(chalk.yellow('⚠️ This feature is not yet implemented'));
|
|
32
|
+
console.log(chalk.gray('Use the web dashboard to manage organization members'));
|
|
39
33
|
});
|
|
40
34
|
program
|
|
41
35
|
.command('usage')
|
|
42
36
|
.description('Show organization usage statistics')
|
|
43
37
|
.action(async () => {
|
|
44
|
-
console.log(
|
|
45
|
-
console.log(
|
|
38
|
+
console.log(chalk.yellow('⚠️ This feature is not yet implemented'));
|
|
39
|
+
console.log(chalk.gray('Use the web dashboard to view usage statistics'));
|
|
46
40
|
});
|
|
47
41
|
}
|