@claude-flow/cli 3.0.0-alpha.120 → 3.0.0-alpha.121

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.
Files changed (35) hide show
  1. package/README.md +156 -0
  2. package/dist/src/commands/index.d.ts +2 -0
  3. package/dist/src/commands/index.d.ts.map +1 -1
  4. package/dist/src/commands/index.js +7 -0
  5. package/dist/src/commands/index.js.map +1 -1
  6. package/dist/src/commands/ruvector/backup.d.ts +11 -0
  7. package/dist/src/commands/ruvector/backup.d.ts.map +1 -0
  8. package/dist/src/commands/ruvector/backup.js +746 -0
  9. package/dist/src/commands/ruvector/backup.js.map +1 -0
  10. package/dist/src/commands/ruvector/benchmark.d.ts +11 -0
  11. package/dist/src/commands/ruvector/benchmark.d.ts.map +1 -0
  12. package/dist/src/commands/ruvector/benchmark.js +480 -0
  13. package/dist/src/commands/ruvector/benchmark.js.map +1 -0
  14. package/dist/src/commands/ruvector/index.d.ts +27 -0
  15. package/dist/src/commands/ruvector/index.d.ts.map +1 -0
  16. package/dist/src/commands/ruvector/index.js +119 -0
  17. package/dist/src/commands/ruvector/index.js.map +1 -0
  18. package/dist/src/commands/ruvector/init.d.ts +11 -0
  19. package/dist/src/commands/ruvector/init.d.ts.map +1 -0
  20. package/dist/src/commands/ruvector/init.js +431 -0
  21. package/dist/src/commands/ruvector/init.js.map +1 -0
  22. package/dist/src/commands/ruvector/migrate.d.ts +11 -0
  23. package/dist/src/commands/ruvector/migrate.d.ts.map +1 -0
  24. package/dist/src/commands/ruvector/migrate.js +481 -0
  25. package/dist/src/commands/ruvector/migrate.js.map +1 -0
  26. package/dist/src/commands/ruvector/optimize.d.ts +11 -0
  27. package/dist/src/commands/ruvector/optimize.d.ts.map +1 -0
  28. package/dist/src/commands/ruvector/optimize.js +503 -0
  29. package/dist/src/commands/ruvector/optimize.js.map +1 -0
  30. package/dist/src/commands/ruvector/status.d.ts +11 -0
  31. package/dist/src/commands/ruvector/status.d.ts.map +1 -0
  32. package/dist/src/commands/ruvector/status.js +456 -0
  33. package/dist/src/commands/ruvector/status.js.map +1 -0
  34. package/dist/tsconfig.tsbuildinfo +1 -1
  35. package/package.json +1 -1
@@ -0,0 +1,456 @@
1
+ /**
2
+ * V3 CLI RuVector Status Command
3
+ * Check connection and schema status
4
+ */
5
+ import { output } from '../../output.js';
6
+ /**
7
+ * Get PostgreSQL connection config from context
8
+ */
9
+ function getConnectionConfig(ctx) {
10
+ return {
11
+ host: ctx.flags.host || process.env.PGHOST || 'localhost',
12
+ port: parseInt(ctx.flags.port || process.env.PGPORT || '5432', 10),
13
+ database: ctx.flags.database || process.env.PGDATABASE || '',
14
+ user: ctx.flags.user || process.env.PGUSER || 'postgres',
15
+ password: ctx.flags.password || process.env.PGPASSWORD || '',
16
+ ssl: ctx.flags.ssl || process.env.PGSSLMODE === 'require',
17
+ schema: ctx.flags.schema || 'claude_flow',
18
+ };
19
+ }
20
+ /**
21
+ * Format bytes to human readable
22
+ */
23
+ function formatBytes(bytes) {
24
+ if (bytes === 0)
25
+ return '0 B';
26
+ const k = 1024;
27
+ const sizes = ['B', 'KB', 'MB', 'GB', 'TB'];
28
+ const i = Math.floor(Math.log(bytes) / Math.log(k));
29
+ return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];
30
+ }
31
+ /**
32
+ * RuVector status command
33
+ */
34
+ export const statusCommand = {
35
+ name: 'status',
36
+ description: 'Check connection and schema status',
37
+ options: [
38
+ {
39
+ name: 'verbose',
40
+ short: 'v',
41
+ description: 'Show detailed information',
42
+ type: 'boolean',
43
+ default: false,
44
+ },
45
+ {
46
+ name: 'json',
47
+ description: 'Output as JSON',
48
+ type: 'boolean',
49
+ default: false,
50
+ },
51
+ {
52
+ name: 'host',
53
+ short: 'h',
54
+ description: 'PostgreSQL host',
55
+ type: 'string',
56
+ default: 'localhost',
57
+ },
58
+ {
59
+ name: 'port',
60
+ short: 'p',
61
+ description: 'PostgreSQL port',
62
+ type: 'number',
63
+ default: 5432,
64
+ },
65
+ {
66
+ name: 'database',
67
+ short: 'd',
68
+ description: 'Database name',
69
+ type: 'string',
70
+ },
71
+ {
72
+ name: 'user',
73
+ short: 'u',
74
+ description: 'Database user',
75
+ type: 'string',
76
+ },
77
+ {
78
+ name: 'password',
79
+ description: 'Database password',
80
+ type: 'string',
81
+ },
82
+ {
83
+ name: 'ssl',
84
+ description: 'Enable SSL',
85
+ type: 'boolean',
86
+ default: false,
87
+ },
88
+ {
89
+ name: 'schema',
90
+ short: 's',
91
+ description: 'Schema name',
92
+ type: 'string',
93
+ default: 'claude_flow',
94
+ },
95
+ ],
96
+ examples: [
97
+ { command: 'claude-flow ruvector status', description: 'Check basic status' },
98
+ { command: 'claude-flow ruvector status --verbose', description: 'Show detailed info' },
99
+ { command: 'claude-flow ruvector status --json', description: 'Output as JSON' },
100
+ ],
101
+ action: async (ctx) => {
102
+ const config = getConnectionConfig(ctx);
103
+ const verbose = ctx.flags.verbose;
104
+ const jsonOutput = ctx.flags.json;
105
+ if (!jsonOutput) {
106
+ output.writeln();
107
+ output.writeln(output.bold('RuVector PostgreSQL Status'));
108
+ output.writeln(output.dim('='.repeat(60)));
109
+ output.writeln();
110
+ }
111
+ if (!config.database) {
112
+ if (jsonOutput) {
113
+ output.printJson({ error: 'Database name required' });
114
+ }
115
+ else {
116
+ output.printError('Database name is required. Use --database or -d flag, or set PGDATABASE env.');
117
+ }
118
+ return { success: false, exitCode: 1 };
119
+ }
120
+ const statusData = {
121
+ connection: {},
122
+ pgvector: {},
123
+ ruvector: {},
124
+ tables: [],
125
+ indexes: [],
126
+ migrations: [],
127
+ };
128
+ const spinner = output.createSpinner({ text: 'Connecting to PostgreSQL...', spinner: 'dots' });
129
+ if (!jsonOutput)
130
+ spinner.start();
131
+ try {
132
+ // Import pg
133
+ let pg = null;
134
+ try {
135
+ pg = await import('pg');
136
+ }
137
+ catch {
138
+ if (!jsonOutput)
139
+ spinner.fail('PostgreSQL driver not found');
140
+ if (jsonOutput) {
141
+ output.printJson({ error: 'pg package not installed' });
142
+ }
143
+ else {
144
+ output.printError('Install pg package: npm install pg');
145
+ }
146
+ return { success: false, exitCode: 1 };
147
+ }
148
+ const startTime = Date.now();
149
+ const client = new pg.Client({
150
+ host: config.host,
151
+ port: config.port,
152
+ database: config.database,
153
+ user: config.user,
154
+ password: config.password,
155
+ ssl: config.ssl ? { rejectUnauthorized: false } : false,
156
+ });
157
+ await client.connect();
158
+ const connectionTime = Date.now() - startTime;
159
+ if (!jsonOutput)
160
+ spinner.succeed(`Connected in ${connectionTime}ms`);
161
+ statusData.connection = {
162
+ host: config.host,
163
+ port: config.port,
164
+ database: config.database,
165
+ user: config.user,
166
+ ssl: config.ssl,
167
+ latency: connectionTime,
168
+ status: 'connected',
169
+ };
170
+ // Get PostgreSQL version
171
+ const versionResult = await client.query('SELECT version()');
172
+ const pgVersion = versionResult.rows[0].version;
173
+ statusData.connection.pgVersion = pgVersion;
174
+ // Check pgvector extension
175
+ if (!jsonOutput)
176
+ spinner.setText('Checking pgvector extension...');
177
+ spinner.start();
178
+ const extensionResult = await client.query(`
179
+ SELECT extversion FROM pg_extension WHERE extname = 'vector'
180
+ `);
181
+ if (extensionResult.rows.length === 0) {
182
+ statusData.pgvector = { installed: false };
183
+ if (!jsonOutput) {
184
+ spinner.succeed(output.warning('pgvector extension not installed'));
185
+ }
186
+ }
187
+ else {
188
+ statusData.pgvector = {
189
+ installed: true,
190
+ version: extensionResult.rows[0].extversion,
191
+ };
192
+ if (!jsonOutput) {
193
+ spinner.succeed(`pgvector v${extensionResult.rows[0].extversion} installed`);
194
+ }
195
+ }
196
+ // Check schema exists
197
+ if (!jsonOutput)
198
+ spinner.setText(`Checking schema "${config.schema}"...`);
199
+ spinner.start();
200
+ const schemaResult = await client.query(`
201
+ SELECT schema_name FROM information_schema.schemata WHERE schema_name = $1
202
+ `, [config.schema]);
203
+ if (schemaResult.rows.length === 0) {
204
+ statusData.ruvector = { initialized: false };
205
+ if (!jsonOutput) {
206
+ spinner.succeed(output.warning(`Schema "${config.schema}" not found`));
207
+ output.printInfo('Run `claude-flow ruvector init` to initialize');
208
+ }
209
+ if (jsonOutput) {
210
+ output.printJson(statusData);
211
+ }
212
+ await client.end();
213
+ return { success: true, data: statusData };
214
+ }
215
+ if (!jsonOutput)
216
+ spinner.succeed(`Schema "${config.schema}" found`);
217
+ // Get RuVector metadata
218
+ if (!jsonOutput)
219
+ spinner.setText('Loading RuVector metadata...');
220
+ spinner.start();
221
+ try {
222
+ const metadataResult = await client.query(`
223
+ SELECT key, value FROM ${config.schema}.metadata
224
+ `);
225
+ const metadata = {};
226
+ for (const row of metadataResult.rows) {
227
+ metadata[row.key] = JSON.parse(row.value);
228
+ }
229
+ statusData.ruvector = {
230
+ initialized: true,
231
+ version: metadata.ruvector_version || 'unknown',
232
+ dimensions: metadata.dimensions || 1536,
233
+ initializedAt: metadata.initialized_at,
234
+ };
235
+ if (!jsonOutput)
236
+ spinner.succeed('RuVector metadata loaded');
237
+ }
238
+ catch {
239
+ statusData.ruvector = { initialized: true, version: 'unknown' };
240
+ if (!jsonOutput)
241
+ spinner.succeed(output.warning('Could not load RuVector metadata'));
242
+ }
243
+ // Get table statistics
244
+ if (!jsonOutput)
245
+ spinner.setText('Gathering table statistics...');
246
+ spinner.start();
247
+ const tablesResult = await client.query(`
248
+ SELECT
249
+ t.table_name,
250
+ pg_relation_size(quote_ident(t.table_schema) || '.' || quote_ident(t.table_name)) as table_size,
251
+ pg_total_relation_size(quote_ident(t.table_schema) || '.' || quote_ident(t.table_name)) as total_size,
252
+ (SELECT count(*) FROM ${config.schema}.embeddings) as row_count
253
+ FROM information_schema.tables t
254
+ WHERE t.table_schema = $1
255
+ ORDER BY t.table_name
256
+ `, [config.schema]);
257
+ const tableStats = [];
258
+ for (const row of tablesResult.rows) {
259
+ // Get row count for each table
260
+ let rowCount = 0;
261
+ try {
262
+ const countResult = await client.query(`
263
+ SELECT count(*) as cnt FROM ${config.schema}.${row.table_name}
264
+ `);
265
+ rowCount = parseInt(countResult.rows[0].cnt, 10);
266
+ }
267
+ catch {
268
+ // Skip if can't count
269
+ }
270
+ tableStats.push({
271
+ name: row.table_name,
272
+ rows: rowCount,
273
+ size: formatBytes(parseInt(row.table_size, 10)),
274
+ totalSize: formatBytes(parseInt(row.total_size, 10)),
275
+ });
276
+ }
277
+ statusData.tables = tableStats;
278
+ if (!jsonOutput)
279
+ spinner.succeed(`Found ${tableStats.length} tables`);
280
+ // Get index information
281
+ if (verbose) {
282
+ if (!jsonOutput)
283
+ spinner.setText('Gathering index information...');
284
+ spinner.start();
285
+ const indexResult = await client.query(`
286
+ SELECT
287
+ i.relname as index_name,
288
+ t.relname as table_name,
289
+ am.amname as index_type,
290
+ pg_relation_size(i.oid) as index_size,
291
+ idx.indisvalid as is_valid,
292
+ idx.indisunique as is_unique
293
+ FROM pg_index idx
294
+ JOIN pg_class i ON i.oid = idx.indexrelid
295
+ JOIN pg_class t ON t.oid = idx.indrelid
296
+ JOIN pg_namespace n ON n.oid = t.relnamespace
297
+ JOIN pg_am am ON am.oid = i.relam
298
+ WHERE n.nspname = $1
299
+ ORDER BY t.relname, i.relname
300
+ `, [config.schema]);
301
+ statusData.indexes = indexResult.rows.map(row => ({
302
+ name: row.index_name,
303
+ table: row.table_name,
304
+ type: row.index_type,
305
+ size: formatBytes(parseInt(row.index_size, 10)),
306
+ valid: row.is_valid,
307
+ unique: row.is_unique,
308
+ }));
309
+ if (!jsonOutput)
310
+ spinner.succeed(`Found ${indexResult.rows.length} indexes`);
311
+ }
312
+ // Get migration status
313
+ if (!jsonOutput)
314
+ spinner.setText('Checking migration status...');
315
+ spinner.start();
316
+ try {
317
+ const migrationsResult = await client.query(`
318
+ SELECT version, name, applied_at
319
+ FROM ${config.schema}.migrations
320
+ ORDER BY version ASC
321
+ `);
322
+ statusData.migrations = migrationsResult.rows.map(row => ({
323
+ version: row.version,
324
+ name: row.name,
325
+ appliedAt: row.applied_at,
326
+ }));
327
+ if (!jsonOutput)
328
+ spinner.succeed(`${migrationsResult.rows.length} migrations applied`);
329
+ }
330
+ catch {
331
+ statusData.migrations = [];
332
+ if (!jsonOutput)
333
+ spinner.succeed(output.warning('Could not read migrations table'));
334
+ }
335
+ await client.end();
336
+ // Output results
337
+ if (jsonOutput) {
338
+ output.printJson(statusData);
339
+ }
340
+ else {
341
+ output.writeln();
342
+ // Connection info
343
+ output.writeln(output.highlight('Connection:'));
344
+ output.printTable({
345
+ columns: [
346
+ { key: 'property', header: 'Property', width: 20 },
347
+ { key: 'value', header: 'Value', width: 40 },
348
+ ],
349
+ data: [
350
+ { property: 'Host', value: config.host },
351
+ { property: 'Port', value: String(config.port) },
352
+ { property: 'Database', value: config.database },
353
+ { property: 'User', value: config.user },
354
+ { property: 'SSL', value: config.ssl ? 'Enabled' : 'Disabled' },
355
+ { property: 'Latency', value: `${connectionTime}ms` },
356
+ ],
357
+ });
358
+ output.writeln();
359
+ // pgvector info
360
+ output.writeln(output.highlight('pgvector Extension:'));
361
+ const pgvectorData = statusData.pgvector;
362
+ output.writeln(` Status: ${pgvectorData.installed ? output.success('Installed') : output.error('Not Installed')}`);
363
+ if (pgvectorData.version) {
364
+ output.writeln(` Version: ${pgvectorData.version}`);
365
+ }
366
+ output.writeln();
367
+ // RuVector info
368
+ output.writeln(output.highlight('RuVector:'));
369
+ const ruvectorData = statusData.ruvector;
370
+ output.writeln(` Initialized: ${ruvectorData.initialized ? output.success('Yes') : output.error('No')}`);
371
+ if (ruvectorData.version) {
372
+ output.writeln(` Version: ${ruvectorData.version}`);
373
+ }
374
+ if (ruvectorData.dimensions) {
375
+ output.writeln(` Dimensions: ${ruvectorData.dimensions}`);
376
+ }
377
+ output.writeln();
378
+ // Table statistics
379
+ output.writeln(output.highlight('Table Statistics:'));
380
+ output.printTable({
381
+ columns: [
382
+ { key: 'name', header: 'Table', width: 30 },
383
+ { key: 'rows', header: 'Rows', width: 12 },
384
+ { key: 'size', header: 'Size', width: 12 },
385
+ { key: 'totalSize', header: 'Total Size', width: 12 },
386
+ ],
387
+ data: tableStats,
388
+ });
389
+ output.writeln();
390
+ // Index information (verbose only)
391
+ if (verbose && statusData.indexes.length > 0) {
392
+ output.writeln(output.highlight('Index Health:'));
393
+ output.printTable({
394
+ columns: [
395
+ { key: 'name', header: 'Index', width: 35 },
396
+ { key: 'table', header: 'Table', width: 20 },
397
+ { key: 'type', header: 'Type', width: 10 },
398
+ { key: 'size', header: 'Size', width: 10 },
399
+ { key: 'status', header: 'Status', width: 10 },
400
+ ],
401
+ data: statusData.indexes.map(idx => ({
402
+ ...idx,
403
+ status: idx.valid ? output.success('Valid') : output.error('Invalid'),
404
+ })),
405
+ });
406
+ output.writeln();
407
+ }
408
+ // Migration status
409
+ output.writeln(output.highlight('Migrations:'));
410
+ const migrations = statusData.migrations;
411
+ if (migrations.length === 0) {
412
+ output.writeln(' No migrations applied');
413
+ }
414
+ else {
415
+ output.printTable({
416
+ columns: [
417
+ { key: 'version', header: 'Version', width: 12 },
418
+ { key: 'name', header: 'Name', width: 35 },
419
+ { key: 'appliedAt', header: 'Applied At', width: 22 },
420
+ ],
421
+ data: migrations.map(m => ({
422
+ ...m,
423
+ appliedAt: new Date(m.appliedAt).toISOString().replace('T', ' ').substring(0, 19),
424
+ })),
425
+ });
426
+ }
427
+ output.writeln();
428
+ // Summary
429
+ const embeddingsTable = tableStats.find(t => t.name === 'embeddings');
430
+ if (embeddingsTable) {
431
+ output.printBox([
432
+ `Total Vectors: ${embeddingsTable.rows.toLocaleString()}`,
433
+ `Storage Used: ${embeddingsTable.totalSize}`,
434
+ `Schema: ${config.schema}`,
435
+ `Migrations: ${migrations.length} applied`,
436
+ ].join('\n'), 'Summary');
437
+ }
438
+ }
439
+ return { success: true, data: statusData };
440
+ }
441
+ catch (error) {
442
+ if (!jsonOutput)
443
+ spinner.fail('Status check failed');
444
+ const errorMessage = error instanceof Error ? error.message : String(error);
445
+ if (jsonOutput) {
446
+ output.printJson({ error: errorMessage });
447
+ }
448
+ else {
449
+ output.printError(errorMessage);
450
+ }
451
+ return { success: false, exitCode: 1 };
452
+ }
453
+ },
454
+ };
455
+ export default statusCommand;
456
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../../src/commands/ruvector/status.ts"],"names":[],"mappings":"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"}