@claude-flow/cli 3.0.0-alpha.120 → 3.0.0-alpha.122
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 +163 -3
- package/dist/src/commands/index.d.ts +2 -0
- package/dist/src/commands/index.d.ts.map +1 -1
- package/dist/src/commands/index.js +7 -0
- package/dist/src/commands/index.js.map +1 -1
- package/dist/src/commands/ruvector/backup.d.ts +11 -0
- package/dist/src/commands/ruvector/backup.d.ts.map +1 -0
- package/dist/src/commands/ruvector/backup.js +746 -0
- package/dist/src/commands/ruvector/backup.js.map +1 -0
- package/dist/src/commands/ruvector/benchmark.d.ts +11 -0
- package/dist/src/commands/ruvector/benchmark.d.ts.map +1 -0
- package/dist/src/commands/ruvector/benchmark.js +480 -0
- package/dist/src/commands/ruvector/benchmark.js.map +1 -0
- package/dist/src/commands/ruvector/import.d.ts +18 -0
- package/dist/src/commands/ruvector/import.d.ts.map +1 -0
- package/dist/src/commands/ruvector/import.js +349 -0
- package/dist/src/commands/ruvector/import.js.map +1 -0
- package/dist/src/commands/ruvector/index.d.ts +29 -0
- package/dist/src/commands/ruvector/index.d.ts.map +1 -0
- package/dist/src/commands/ruvector/index.js +129 -0
- package/dist/src/commands/ruvector/index.js.map +1 -0
- package/dist/src/commands/ruvector/init.d.ts +11 -0
- package/dist/src/commands/ruvector/init.d.ts.map +1 -0
- package/dist/src/commands/ruvector/init.js +431 -0
- package/dist/src/commands/ruvector/init.js.map +1 -0
- package/dist/src/commands/ruvector/migrate.d.ts +11 -0
- package/dist/src/commands/ruvector/migrate.d.ts.map +1 -0
- package/dist/src/commands/ruvector/migrate.js +481 -0
- package/dist/src/commands/ruvector/migrate.js.map +1 -0
- package/dist/src/commands/ruvector/optimize.d.ts +11 -0
- package/dist/src/commands/ruvector/optimize.d.ts.map +1 -0
- package/dist/src/commands/ruvector/optimize.js +503 -0
- package/dist/src/commands/ruvector/optimize.js.map +1 -0
- package/dist/src/commands/ruvector/setup.d.ts +18 -0
- package/dist/src/commands/ruvector/setup.d.ts.map +1 -0
- package/dist/src/commands/ruvector/setup.js +765 -0
- package/dist/src/commands/ruvector/setup.js.map +1 -0
- package/dist/src/commands/ruvector/status.d.ts +11 -0
- package/dist/src/commands/ruvector/status.d.ts.map +1 -0
- package/dist/src/commands/ruvector/status.js +456 -0
- package/dist/src/commands/ruvector/status.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,503 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* V3 CLI RuVector Optimize Command
|
|
3
|
+
* Optimization analysis and recommendations
|
|
4
|
+
*/
|
|
5
|
+
import { output } from '../../output.js';
|
|
6
|
+
import { confirm } from '../../prompt.js';
|
|
7
|
+
/**
|
|
8
|
+
* Get PostgreSQL connection config from context
|
|
9
|
+
*/
|
|
10
|
+
function getConnectionConfig(ctx) {
|
|
11
|
+
return {
|
|
12
|
+
host: ctx.flags.host || process.env.PGHOST || 'localhost',
|
|
13
|
+
port: parseInt(ctx.flags.port || process.env.PGPORT || '5432', 10),
|
|
14
|
+
database: ctx.flags.database || process.env.PGDATABASE || '',
|
|
15
|
+
user: ctx.flags.user || process.env.PGUSER || 'postgres',
|
|
16
|
+
password: ctx.flags.password || process.env.PGPASSWORD || '',
|
|
17
|
+
ssl: ctx.flags.ssl || process.env.PGSSLMODE === 'require',
|
|
18
|
+
schema: ctx.flags.schema || 'claude_flow',
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* RuVector optimize command
|
|
23
|
+
*/
|
|
24
|
+
export const optimizeCommand = {
|
|
25
|
+
name: 'optimize',
|
|
26
|
+
description: 'Optimization analysis and recommendations',
|
|
27
|
+
options: [
|
|
28
|
+
{
|
|
29
|
+
name: 'analyze',
|
|
30
|
+
short: 'a',
|
|
31
|
+
description: 'Analyze current performance',
|
|
32
|
+
type: 'boolean',
|
|
33
|
+
default: true,
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
name: 'apply',
|
|
37
|
+
description: 'Apply suggested optimizations',
|
|
38
|
+
type: 'boolean',
|
|
39
|
+
default: false,
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
name: 'index',
|
|
43
|
+
short: 'i',
|
|
44
|
+
description: 'Optimize specific index',
|
|
45
|
+
type: 'string',
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
name: 'vacuum',
|
|
49
|
+
description: 'Run VACUUM ANALYZE',
|
|
50
|
+
type: 'boolean',
|
|
51
|
+
default: false,
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
name: 'reindex',
|
|
55
|
+
description: 'Rebuild indexes',
|
|
56
|
+
type: 'boolean',
|
|
57
|
+
default: false,
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
name: 'host',
|
|
61
|
+
short: 'h',
|
|
62
|
+
description: 'PostgreSQL host',
|
|
63
|
+
type: 'string',
|
|
64
|
+
default: 'localhost',
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
name: 'port',
|
|
68
|
+
short: 'p',
|
|
69
|
+
description: 'PostgreSQL port',
|
|
70
|
+
type: 'number',
|
|
71
|
+
default: 5432,
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
name: 'database',
|
|
75
|
+
description: 'Database name',
|
|
76
|
+
type: 'string',
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
name: 'user',
|
|
80
|
+
short: 'u',
|
|
81
|
+
description: 'Database user',
|
|
82
|
+
type: 'string',
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
name: 'password',
|
|
86
|
+
description: 'Database password',
|
|
87
|
+
type: 'string',
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
name: 'ssl',
|
|
91
|
+
description: 'Enable SSL',
|
|
92
|
+
type: 'boolean',
|
|
93
|
+
default: false,
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
name: 'schema',
|
|
97
|
+
short: 's',
|
|
98
|
+
description: 'Schema name',
|
|
99
|
+
type: 'string',
|
|
100
|
+
default: 'claude_flow',
|
|
101
|
+
},
|
|
102
|
+
],
|
|
103
|
+
examples: [
|
|
104
|
+
{ command: 'claude-flow ruvector optimize --analyze', description: 'Analyze and show recommendations' },
|
|
105
|
+
{ command: 'claude-flow ruvector optimize --apply', description: 'Apply optimizations' },
|
|
106
|
+
{ command: 'claude-flow ruvector optimize --vacuum', description: 'Run VACUUM ANALYZE' },
|
|
107
|
+
{ command: 'claude-flow ruvector optimize --reindex', description: 'Rebuild all indexes' },
|
|
108
|
+
],
|
|
109
|
+
action: async (ctx) => {
|
|
110
|
+
const config = getConnectionConfig(ctx);
|
|
111
|
+
const applyOptimizations = ctx.flags.apply;
|
|
112
|
+
const runVacuum = ctx.flags.vacuum;
|
|
113
|
+
const runReindex = ctx.flags.reindex;
|
|
114
|
+
const specificIndex = ctx.flags.index;
|
|
115
|
+
output.writeln();
|
|
116
|
+
output.writeln(output.bold('RuVector Optimization Analysis'));
|
|
117
|
+
output.writeln(output.dim('='.repeat(60)));
|
|
118
|
+
output.writeln();
|
|
119
|
+
if (!config.database) {
|
|
120
|
+
output.printError('Database name is required. Use --database or -d flag, or set PGDATABASE env.');
|
|
121
|
+
return { success: false, exitCode: 1 };
|
|
122
|
+
}
|
|
123
|
+
const spinner = output.createSpinner({ text: 'Connecting to PostgreSQL...', spinner: 'dots' });
|
|
124
|
+
spinner.start();
|
|
125
|
+
const recommendations = [];
|
|
126
|
+
try {
|
|
127
|
+
// Import pg
|
|
128
|
+
let pg = null;
|
|
129
|
+
try {
|
|
130
|
+
pg = await import('pg');
|
|
131
|
+
}
|
|
132
|
+
catch {
|
|
133
|
+
spinner.fail('PostgreSQL driver not found');
|
|
134
|
+
output.printError('Install pg package: npm install pg');
|
|
135
|
+
return { success: false, exitCode: 1 };
|
|
136
|
+
}
|
|
137
|
+
const client = new pg.Client({
|
|
138
|
+
host: config.host,
|
|
139
|
+
port: config.port,
|
|
140
|
+
database: config.database,
|
|
141
|
+
user: config.user,
|
|
142
|
+
password: config.password,
|
|
143
|
+
ssl: config.ssl ? { rejectUnauthorized: false } : false,
|
|
144
|
+
});
|
|
145
|
+
await client.connect();
|
|
146
|
+
spinner.succeed('Connected to PostgreSQL');
|
|
147
|
+
// Check schema exists
|
|
148
|
+
const schemaResult = await client.query(`
|
|
149
|
+
SELECT schema_name FROM information_schema.schemata WHERE schema_name = $1
|
|
150
|
+
`, [config.schema]);
|
|
151
|
+
if (schemaResult.rows.length === 0) {
|
|
152
|
+
output.printError(`Schema "${config.schema}" not found`);
|
|
153
|
+
await client.end();
|
|
154
|
+
return { success: false, exitCode: 1 };
|
|
155
|
+
}
|
|
156
|
+
// Run VACUUM if requested
|
|
157
|
+
if (runVacuum) {
|
|
158
|
+
spinner.setText('Running VACUUM ANALYZE...');
|
|
159
|
+
spinner.start();
|
|
160
|
+
const tables = await client.query(`
|
|
161
|
+
SELECT table_name FROM information_schema.tables
|
|
162
|
+
WHERE table_schema = $1 AND table_type = 'BASE TABLE'
|
|
163
|
+
`, [config.schema]);
|
|
164
|
+
for (const row of tables.rows) {
|
|
165
|
+
await client.query(`VACUUM ANALYZE ${config.schema}.${row.table_name}`);
|
|
166
|
+
}
|
|
167
|
+
spinner.succeed('VACUUM ANALYZE completed');
|
|
168
|
+
}
|
|
169
|
+
// Rebuild indexes if requested
|
|
170
|
+
if (runReindex) {
|
|
171
|
+
spinner.setText('Rebuilding indexes...');
|
|
172
|
+
spinner.start();
|
|
173
|
+
if (specificIndex) {
|
|
174
|
+
await client.query(`REINDEX INDEX ${config.schema}.${specificIndex}`);
|
|
175
|
+
spinner.succeed(`Index ${specificIndex} rebuilt`);
|
|
176
|
+
}
|
|
177
|
+
else {
|
|
178
|
+
await client.query(`REINDEX SCHEMA ${config.schema}`);
|
|
179
|
+
spinner.succeed('All indexes rebuilt');
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
// Analyze table statistics
|
|
183
|
+
spinner.setText('Analyzing table statistics...');
|
|
184
|
+
spinner.start();
|
|
185
|
+
const tableStatsResult = await client.query(`
|
|
186
|
+
SELECT
|
|
187
|
+
relname as table_name,
|
|
188
|
+
n_live_tup as live_rows,
|
|
189
|
+
n_dead_tup as dead_rows,
|
|
190
|
+
last_vacuum,
|
|
191
|
+
last_autovacuum,
|
|
192
|
+
last_analyze,
|
|
193
|
+
last_autoanalyze
|
|
194
|
+
FROM pg_stat_user_tables
|
|
195
|
+
WHERE schemaname = $1
|
|
196
|
+
`, [config.schema]);
|
|
197
|
+
for (const row of tableStatsResult.rows) {
|
|
198
|
+
const deadRatio = row.live_rows > 0 ? row.dead_rows / row.live_rows : 0;
|
|
199
|
+
// Check for high dead tuple ratio
|
|
200
|
+
if (deadRatio > 0.1) {
|
|
201
|
+
recommendations.push({
|
|
202
|
+
category: 'Table Bloat',
|
|
203
|
+
priority: deadRatio > 0.3 ? 'critical' : 'high',
|
|
204
|
+
issue: `Table "${row.table_name}" has ${(deadRatio * 100).toFixed(1)}% dead tuples`,
|
|
205
|
+
recommendation: 'Run VACUUM to reclaim space',
|
|
206
|
+
sql: `VACUUM ANALYZE ${config.schema}.${row.table_name}`,
|
|
207
|
+
impact: 'Reduces storage and improves query performance',
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
// Check for missing statistics
|
|
211
|
+
if (!row.last_analyze && !row.last_autoanalyze) {
|
|
212
|
+
recommendations.push({
|
|
213
|
+
category: 'Statistics',
|
|
214
|
+
priority: 'medium',
|
|
215
|
+
issue: `Table "${row.table_name}" has never been analyzed`,
|
|
216
|
+
recommendation: 'Run ANALYZE to collect statistics',
|
|
217
|
+
sql: `ANALYZE ${config.schema}.${row.table_name}`,
|
|
218
|
+
impact: 'Improves query planner decisions',
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
spinner.succeed('Table statistics analyzed');
|
|
223
|
+
// Analyze indexes
|
|
224
|
+
spinner.setText('Analyzing index health...');
|
|
225
|
+
spinner.start();
|
|
226
|
+
const indexStatsResult = await client.query(`
|
|
227
|
+
SELECT
|
|
228
|
+
i.relname as index_name,
|
|
229
|
+
t.relname as table_name,
|
|
230
|
+
am.amname as index_type,
|
|
231
|
+
pg_relation_size(i.oid) as index_size,
|
|
232
|
+
idx.indisvalid as is_valid,
|
|
233
|
+
idx.indisready as is_ready,
|
|
234
|
+
idx.indislive as is_live,
|
|
235
|
+
pg_stat_user_indexes.idx_scan as scans,
|
|
236
|
+
pg_stat_user_indexes.idx_tup_read as tuples_read,
|
|
237
|
+
pg_stat_user_indexes.idx_tup_fetch as tuples_fetched
|
|
238
|
+
FROM pg_index idx
|
|
239
|
+
JOIN pg_class i ON i.oid = idx.indexrelid
|
|
240
|
+
JOIN pg_class t ON t.oid = idx.indrelid
|
|
241
|
+
JOIN pg_namespace n ON n.oid = t.relnamespace
|
|
242
|
+
JOIN pg_am am ON am.oid = i.relam
|
|
243
|
+
LEFT JOIN pg_stat_user_indexes ON pg_stat_user_indexes.indexrelid = i.oid
|
|
244
|
+
WHERE n.nspname = $1
|
|
245
|
+
`, [config.schema]);
|
|
246
|
+
for (const row of indexStatsResult.rows) {
|
|
247
|
+
// Check for invalid indexes
|
|
248
|
+
if (!row.is_valid) {
|
|
249
|
+
recommendations.push({
|
|
250
|
+
category: 'Index Health',
|
|
251
|
+
priority: 'critical',
|
|
252
|
+
issue: `Index "${row.index_name}" is invalid`,
|
|
253
|
+
recommendation: 'Rebuild the index',
|
|
254
|
+
sql: `REINDEX INDEX ${config.schema}.${row.index_name}`,
|
|
255
|
+
impact: 'Index is not being used for queries',
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
// Check for unused indexes (skip vector indexes as they may be new)
|
|
259
|
+
if (row.scans === 0 && row.index_type !== 'hnsw' && row.index_type !== 'ivfflat') {
|
|
260
|
+
const sizeKB = parseInt(row.index_size, 10) / 1024;
|
|
261
|
+
if (sizeKB > 100) {
|
|
262
|
+
recommendations.push({
|
|
263
|
+
category: 'Unused Index',
|
|
264
|
+
priority: 'low',
|
|
265
|
+
issue: `Index "${row.index_name}" has never been used (${(sizeKB / 1024).toFixed(2)} MB)`,
|
|
266
|
+
recommendation: 'Consider dropping if not needed',
|
|
267
|
+
sql: `-- DROP INDEX IF EXISTS ${config.schema}.${row.index_name}`,
|
|
268
|
+
impact: 'Reduces storage and write overhead',
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
spinner.succeed('Index health analyzed');
|
|
274
|
+
// Analyze vector index parameters
|
|
275
|
+
spinner.setText('Analyzing vector index configuration...');
|
|
276
|
+
spinner.start();
|
|
277
|
+
const vectorIndexes = indexStatsResult.rows.filter(r => r.index_type === 'hnsw' || r.index_type === 'ivfflat');
|
|
278
|
+
for (const idx of vectorIndexes) {
|
|
279
|
+
// Get index options
|
|
280
|
+
const optionsResult = await client.query(`
|
|
281
|
+
SELECT reloptions FROM pg_class
|
|
282
|
+
WHERE relname = $1 AND relnamespace = (
|
|
283
|
+
SELECT oid FROM pg_namespace WHERE nspname = $2
|
|
284
|
+
)
|
|
285
|
+
`, [idx.index_name, config.schema]);
|
|
286
|
+
const options = optionsResult.rows[0]?.reloptions || [];
|
|
287
|
+
if (idx.index_type === 'hnsw') {
|
|
288
|
+
// Check HNSW parameters
|
|
289
|
+
const m = options.find((o) => o.startsWith('m='));
|
|
290
|
+
const efConstruction = options.find((o) => o.startsWith('ef_construction='));
|
|
291
|
+
const mValue = m ? parseInt(m.split('=')[1], 10) : 16;
|
|
292
|
+
const efValue = efConstruction ? parseInt(efConstruction.split('=')[1], 10) : 64;
|
|
293
|
+
// Get table row count
|
|
294
|
+
const countResult = await client.query(`
|
|
295
|
+
SELECT count(*) as cnt FROM ${config.schema}.${idx.table_name}
|
|
296
|
+
`);
|
|
297
|
+
const rowCount = parseInt(countResult.rows[0].cnt, 10);
|
|
298
|
+
// Recommend higher ef_construction for large datasets
|
|
299
|
+
if (rowCount > 100000 && efValue < 100) {
|
|
300
|
+
recommendations.push({
|
|
301
|
+
category: 'HNSW Tuning',
|
|
302
|
+
priority: 'medium',
|
|
303
|
+
issue: `HNSW index "${idx.index_name}" has ef_construction=${efValue} for ${rowCount.toLocaleString()} vectors`,
|
|
304
|
+
recommendation: 'Consider rebuilding with higher ef_construction for better recall',
|
|
305
|
+
sql: `-- Rebuild with: CREATE INDEX ... WITH (m = ${mValue}, ef_construction = 128)`,
|
|
306
|
+
impact: 'Improves recall at slight build time cost',
|
|
307
|
+
});
|
|
308
|
+
}
|
|
309
|
+
// Recommend higher m for very large datasets
|
|
310
|
+
if (rowCount > 1000000 && mValue < 24) {
|
|
311
|
+
recommendations.push({
|
|
312
|
+
category: 'HNSW Tuning',
|
|
313
|
+
priority: 'medium',
|
|
314
|
+
issue: `HNSW index "${idx.index_name}" has m=${mValue} for ${rowCount.toLocaleString()} vectors`,
|
|
315
|
+
recommendation: 'Consider rebuilding with higher m for better connectivity',
|
|
316
|
+
sql: `-- Rebuild with: CREATE INDEX ... WITH (m = 24, ef_construction = ${efValue})`,
|
|
317
|
+
impact: 'Improves recall and query performance',
|
|
318
|
+
});
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
if (idx.index_type === 'ivfflat') {
|
|
322
|
+
// Check IVFFlat lists parameter
|
|
323
|
+
const lists = options.find((o) => o.startsWith('lists='));
|
|
324
|
+
const listsValue = lists ? parseInt(lists.split('=')[1], 10) : 100;
|
|
325
|
+
// Get table row count
|
|
326
|
+
const countResult = await client.query(`
|
|
327
|
+
SELECT count(*) as cnt FROM ${config.schema}.${idx.table_name}
|
|
328
|
+
`);
|
|
329
|
+
const rowCount = parseInt(countResult.rows[0].cnt, 10);
|
|
330
|
+
// Recommended lists = sqrt(n)
|
|
331
|
+
const recommendedLists = Math.floor(Math.sqrt(rowCount));
|
|
332
|
+
if (Math.abs(listsValue - recommendedLists) / recommendedLists > 0.5) {
|
|
333
|
+
recommendations.push({
|
|
334
|
+
category: 'IVFFlat Tuning',
|
|
335
|
+
priority: 'medium',
|
|
336
|
+
issue: `IVFFlat index "${idx.index_name}" has lists=${listsValue} (recommended: ~${recommendedLists})`,
|
|
337
|
+
recommendation: 'Consider rebuilding with optimal lists parameter',
|
|
338
|
+
sql: `-- Rebuild with: CREATE INDEX ... WITH (lists = ${recommendedLists})`,
|
|
339
|
+
impact: 'Balances query speed and recall',
|
|
340
|
+
});
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
spinner.succeed('Vector index configuration analyzed');
|
|
345
|
+
// Check memory settings
|
|
346
|
+
spinner.setText('Checking PostgreSQL settings...');
|
|
347
|
+
spinner.start();
|
|
348
|
+
const settingsResult = await client.query(`
|
|
349
|
+
SELECT name, setting, unit, context
|
|
350
|
+
FROM pg_settings
|
|
351
|
+
WHERE name IN (
|
|
352
|
+
'shared_buffers', 'effective_cache_size', 'work_mem',
|
|
353
|
+
'maintenance_work_mem', 'max_parallel_workers_per_gather'
|
|
354
|
+
)
|
|
355
|
+
`);
|
|
356
|
+
const settings = {};
|
|
357
|
+
for (const row of settingsResult.rows) {
|
|
358
|
+
settings[row.name] = row.setting + (row.unit || '');
|
|
359
|
+
}
|
|
360
|
+
// Check work_mem for vector operations
|
|
361
|
+
const workMemMB = parseInt(settings.work_mem || '4096', 10) / 1024;
|
|
362
|
+
if (workMemMB < 64) {
|
|
363
|
+
recommendations.push({
|
|
364
|
+
category: 'Memory Settings',
|
|
365
|
+
priority: 'medium',
|
|
366
|
+
issue: `work_mem is ${workMemMB.toFixed(0)}MB (recommended: 64MB+ for vector ops)`,
|
|
367
|
+
recommendation: 'Increase work_mem for better vector search performance',
|
|
368
|
+
sql: `SET work_mem = '64MB'`,
|
|
369
|
+
impact: 'Improves sorting and index build performance',
|
|
370
|
+
});
|
|
371
|
+
}
|
|
372
|
+
// Check maintenance_work_mem for index building
|
|
373
|
+
const maintMemMB = parseInt(settings.maintenance_work_mem || '65536', 10) / 1024;
|
|
374
|
+
if (maintMemMB < 256) {
|
|
375
|
+
recommendations.push({
|
|
376
|
+
category: 'Memory Settings',
|
|
377
|
+
priority: 'low',
|
|
378
|
+
issue: `maintenance_work_mem is ${maintMemMB.toFixed(0)}MB`,
|
|
379
|
+
recommendation: 'Increase for faster index builds',
|
|
380
|
+
sql: `SET maintenance_work_mem = '256MB'`,
|
|
381
|
+
impact: 'Faster VACUUM and index creation',
|
|
382
|
+
});
|
|
383
|
+
}
|
|
384
|
+
spinner.succeed('PostgreSQL settings checked');
|
|
385
|
+
await client.end();
|
|
386
|
+
// Display recommendations
|
|
387
|
+
output.writeln();
|
|
388
|
+
if (recommendations.length === 0) {
|
|
389
|
+
output.printSuccess('No optimization recommendations - your setup looks good!');
|
|
390
|
+
output.writeln();
|
|
391
|
+
output.printBox([
|
|
392
|
+
'All tables have been analyzed',
|
|
393
|
+
'Indexes are valid and properly configured',
|
|
394
|
+
'Memory settings are adequate',
|
|
395
|
+
'',
|
|
396
|
+
'Tips for maintaining performance:',
|
|
397
|
+
' - Run VACUUM ANALYZE regularly',
|
|
398
|
+
' - Monitor dead tuple ratio',
|
|
399
|
+
' - Rebuild indexes after large batch inserts',
|
|
400
|
+
].join('\n'), 'Status: Optimal');
|
|
401
|
+
return { success: true, data: { recommendations: [] } };
|
|
402
|
+
}
|
|
403
|
+
// Group by priority
|
|
404
|
+
const critical = recommendations.filter(r => r.priority === 'critical');
|
|
405
|
+
const high = recommendations.filter(r => r.priority === 'high');
|
|
406
|
+
const medium = recommendations.filter(r => r.priority === 'medium');
|
|
407
|
+
const low = recommendations.filter(r => r.priority === 'low');
|
|
408
|
+
output.writeln(output.bold(`Found ${recommendations.length} optimization recommendations:`));
|
|
409
|
+
output.writeln();
|
|
410
|
+
// Display by priority
|
|
411
|
+
const displayRecommendations = (recs, label, color) => {
|
|
412
|
+
if (recs.length === 0)
|
|
413
|
+
return;
|
|
414
|
+
output.writeln(color(`${label} Priority (${recs.length}):`));
|
|
415
|
+
output.writeln();
|
|
416
|
+
for (const rec of recs) {
|
|
417
|
+
output.writeln(` ${output.bold(rec.category)}: ${rec.issue}`);
|
|
418
|
+
output.writeln(` ${output.dim('Recommendation:')} ${rec.recommendation}`);
|
|
419
|
+
output.writeln(` ${output.dim('Impact:')} ${rec.impact}`);
|
|
420
|
+
if (rec.sql) {
|
|
421
|
+
output.writeln(` ${output.dim('SQL:')} ${output.highlight(rec.sql)}`);
|
|
422
|
+
}
|
|
423
|
+
output.writeln();
|
|
424
|
+
}
|
|
425
|
+
};
|
|
426
|
+
displayRecommendations(critical, 'CRITICAL', output.error.bind(output));
|
|
427
|
+
displayRecommendations(high, 'HIGH', output.warning.bind(output));
|
|
428
|
+
displayRecommendations(medium, 'MEDIUM', output.highlight.bind(output));
|
|
429
|
+
displayRecommendations(low, 'LOW', output.dim.bind(output));
|
|
430
|
+
// Apply optimizations if requested
|
|
431
|
+
if (applyOptimizations && (critical.length > 0 || high.length > 0)) {
|
|
432
|
+
output.writeln(output.dim('-'.repeat(60)));
|
|
433
|
+
output.writeln();
|
|
434
|
+
if (ctx.interactive) {
|
|
435
|
+
const confirmApply = await confirm({
|
|
436
|
+
message: `Apply ${critical.length + high.length} critical/high priority optimizations?`,
|
|
437
|
+
default: false,
|
|
438
|
+
});
|
|
439
|
+
if (confirmApply) {
|
|
440
|
+
const applyClient = new pg.Client({
|
|
441
|
+
host: config.host,
|
|
442
|
+
port: config.port,
|
|
443
|
+
database: config.database,
|
|
444
|
+
user: config.user,
|
|
445
|
+
password: config.password,
|
|
446
|
+
ssl: config.ssl ? { rejectUnauthorized: false } : false,
|
|
447
|
+
});
|
|
448
|
+
await applyClient.connect();
|
|
449
|
+
for (const rec of [...critical, ...high]) {
|
|
450
|
+
if (rec.sql && !rec.sql.startsWith('--')) {
|
|
451
|
+
spinner.setText(`Applying: ${rec.issue}...`);
|
|
452
|
+
spinner.start();
|
|
453
|
+
try {
|
|
454
|
+
await applyClient.query(rec.sql);
|
|
455
|
+
spinner.succeed(`Applied: ${rec.category}`);
|
|
456
|
+
}
|
|
457
|
+
catch (error) {
|
|
458
|
+
spinner.fail(`Failed: ${rec.category}`);
|
|
459
|
+
output.printError(error instanceof Error ? error.message : String(error));
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
await applyClient.end();
|
|
464
|
+
output.writeln();
|
|
465
|
+
output.printSuccess('Optimizations applied');
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
// Summary
|
|
470
|
+
output.printBox([
|
|
471
|
+
`Total Recommendations: ${recommendations.length}`,
|
|
472
|
+
` Critical: ${critical.length}`,
|
|
473
|
+
` High: ${high.length}`,
|
|
474
|
+
` Medium: ${medium.length}`,
|
|
475
|
+
` Low: ${low.length}`,
|
|
476
|
+
'',
|
|
477
|
+
'Quick commands:',
|
|
478
|
+
` claude-flow ruvector optimize --vacuum # Clean up tables`,
|
|
479
|
+
` claude-flow ruvector optimize --reindex # Rebuild indexes`,
|
|
480
|
+
` claude-flow ruvector optimize --apply # Apply critical fixes`,
|
|
481
|
+
].join('\n'), 'Optimization Summary');
|
|
482
|
+
return {
|
|
483
|
+
success: true,
|
|
484
|
+
data: {
|
|
485
|
+
recommendations,
|
|
486
|
+
summary: {
|
|
487
|
+
critical: critical.length,
|
|
488
|
+
high: high.length,
|
|
489
|
+
medium: medium.length,
|
|
490
|
+
low: low.length,
|
|
491
|
+
},
|
|
492
|
+
},
|
|
493
|
+
};
|
|
494
|
+
}
|
|
495
|
+
catch (error) {
|
|
496
|
+
spinner.fail('Optimization analysis failed');
|
|
497
|
+
output.printError(error instanceof Error ? error.message : String(error));
|
|
498
|
+
return { success: false, exitCode: 1 };
|
|
499
|
+
}
|
|
500
|
+
},
|
|
501
|
+
};
|
|
502
|
+
export default optimizeCommand;
|
|
503
|
+
//# sourceMappingURL=optimize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"optimize.js","sourceRoot":"","sources":["../../../../src/commands/ruvector/optimize.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,OAAO,EAAU,MAAM,iBAAiB,CAAC;AAElD;;GAEG;AACH,SAAS,mBAAmB,CAAC,GAAmB;IAC9C,OAAO;QACL,IAAI,EAAG,GAAG,CAAC,KAAK,CAAC,IAAe,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,WAAW;QACrE,IAAI,EAAE,QAAQ,CAAE,GAAG,CAAC,KAAK,CAAC,IAAe,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,MAAM,EAAE,EAAE,CAAC;QAC9E,QAAQ,EAAG,GAAG,CAAC,KAAK,CAAC,QAAmB,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,EAAE;QACxE,IAAI,EAAG,GAAG,CAAC,KAAK,CAAC,IAAe,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,UAAU;QACpE,QAAQ,EAAG,GAAG,CAAC,KAAK,CAAC,QAAmB,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,EAAE;QACxE,GAAG,EAAG,GAAG,CAAC,KAAK,CAAC,GAAe,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,KAAK,SAAS;QACtE,MAAM,EAAG,GAAG,CAAC,KAAK,CAAC,MAAiB,IAAI,aAAa;KACtD,CAAC;AACJ,CAAC;AAcD;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAY;IACtC,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE,2CAA2C;IACxD,OAAO,EAAE;QACP;YACE,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,GAAG;YACV,WAAW,EAAE,6BAA6B;YAC1C,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,IAAI;SACd;QACD;YACE,IAAI,EAAE,OAAO;YACb,WAAW,EAAE,+BAA+B;YAC5C,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,KAAK;SACf;QACD;YACE,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,GAAG;YACV,WAAW,EAAE,yBAAyB;YACtC,IAAI,EAAE,QAAQ;SACf;QACD;YACE,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,oBAAoB;YACjC,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,KAAK;SACf;QACD;YACE,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,iBAAiB;YAC9B,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,KAAK;SACf;QACD;YACE,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,GAAG;YACV,WAAW,EAAE,iBAAiB;YAC9B,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,WAAW;SACrB;QACD;YACE,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,GAAG;YACV,WAAW,EAAE,iBAAiB;YAC9B,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,IAAI;SACd;QACD;YACE,IAAI,EAAE,UAAU;YAChB,WAAW,EAAE,eAAe;YAC5B,IAAI,EAAE,QAAQ;SACf;QACD;YACE,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,GAAG;YACV,WAAW,EAAE,eAAe;YAC5B,IAAI,EAAE,QAAQ;SACf;QACD;YACE,IAAI,EAAE,UAAU;YAChB,WAAW,EAAE,mBAAmB;YAChC,IAAI,EAAE,QAAQ;SACf;QACD;YACE,IAAI,EAAE,KAAK;YACX,WAAW,EAAE,YAAY;YACzB,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,KAAK;SACf;QACD;YACE,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,GAAG;YACV,WAAW,EAAE,aAAa;YAC1B,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,aAAa;SACvB;KACF;IACD,QAAQ,EAAE;QACR,EAAE,OAAO,EAAE,yCAAyC,EAAE,WAAW,EAAE,kCAAkC,EAAE;QACvG,EAAE,OAAO,EAAE,uCAAuC,EAAE,WAAW,EAAE,qBAAqB,EAAE;QACxF,EAAE,OAAO,EAAE,wCAAwC,EAAE,WAAW,EAAE,oBAAoB,EAAE;QACxF,EAAE,OAAO,EAAE,yCAAyC,EAAE,WAAW,EAAE,qBAAqB,EAAE;KAC3F;IACD,MAAM,EAAE,KAAK,EAAE,GAAmB,EAA0B,EAAE;QAC5D,MAAM,MAAM,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;QACxC,MAAM,kBAAkB,GAAG,GAAG,CAAC,KAAK,CAAC,KAAgB,CAAC;QACtD,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,MAAiB,CAAC;QAC9C,MAAM,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,OAAkB,CAAC;QAChD,MAAM,aAAa,GAAG,GAAG,CAAC,KAAK,CAAC,KAAe,CAAC;QAEhD,MAAM,CAAC,OAAO,EAAE,CAAC;QACjB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC,CAAC;QAC9D,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5C,MAAM,CAAC,OAAO,EAAE,CAAC;QAEjB,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACrB,MAAM,CAAC,UAAU,CAAC,8EAA8E,CAAC,CAAC;YAClG,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;QACzC,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,6BAA6B,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QAC/F,OAAO,CAAC,KAAK,EAAE,CAAC;QAEhB,MAAM,eAAe,GAAqB,EAAE,CAAC;QAE7C,IAAI,CAAC;YACH,YAAY;YACZ,IAAI,EAAE,GAA+B,IAAI,CAAC;YAC1C,IAAI,CAAC;gBACH,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;YAC1B,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;gBAC5C,MAAM,CAAC,UAAU,CAAC,oCAAoC,CAAC,CAAC;gBACxD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;YACzC,CAAC;YAED,MAAM,MAAM,GAAG,IAAI,EAAE,CAAC,MAAM,CAAC;gBAC3B,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK;aACxD,CAAC,CAAC;YAEH,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;YACvB,OAAO,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;YAE3C,sBAAsB;YACtB,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;;OAEvC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;YAEpB,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACnC,MAAM,CAAC,UAAU,CAAC,WAAW,MAAM,CAAC,MAAM,aAAa,CAAC,CAAC;gBACzD,MAAM,MAAM,CAAC,GAAG,EAAE,CAAC;gBACnB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;YACzC,CAAC;YAED,0BAA0B;YAC1B,IAAI,SAAS,EAAE,CAAC;gBACd,OAAO,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC;gBAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBAE9D,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;;;SAGjC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;gBAEpB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;oBAC9B,MAAM,MAAM,CAAC,KAAK,CAAC,kBAAkB,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;gBAC1E,CAAC;gBAED,OAAO,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC;YAC9C,CAAC;YAED,+BAA+B;YAC/B,IAAI,UAAU,EAAE,CAAC;gBACf,OAAO,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;gBAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBAE1D,IAAI,aAAa,EAAE,CAAC;oBAClB,MAAM,MAAM,CAAC,KAAK,CAAC,iBAAiB,MAAM,CAAC,MAAM,IAAI,aAAa,EAAE,CAAC,CAAC;oBACtE,OAAO,CAAC,OAAO,CAAC,SAAS,aAAa,UAAU,CAAC,CAAC;gBACpD,CAAC;qBAAM,CAAC;oBACN,MAAM,MAAM,CAAC,KAAK,CAAC,kBAAkB,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;oBACtD,OAAO,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;gBACzC,CAAC;YACH,CAAC;YAED,2BAA2B;YAC3B,OAAO,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAC;YAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YAElE,MAAM,gBAAgB,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;;;;;;;;;;;OAW3C,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;YAEpB,KAAK,MAAM,GAAG,IAAI,gBAAgB,CAAC,IAAI,EAAE,CAAC;gBACxC,MAAM,SAAS,GAAG,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;gBAExE,kCAAkC;gBAClC,IAAI,SAAS,GAAG,GAAG,EAAE,CAAC;oBACpB,eAAe,CAAC,IAAI,CAAC;wBACnB,QAAQ,EAAE,aAAa;wBACvB,QAAQ,EAAE,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM;wBAC/C,KAAK,EAAE,UAAU,GAAG,CAAC,UAAU,SAAS,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;wBACnF,cAAc,EAAE,6BAA6B;wBAC7C,GAAG,EAAE,kBAAkB,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE;wBACxD,MAAM,EAAE,gDAAgD;qBACzD,CAAC,CAAC;gBACL,CAAC;gBAED,+BAA+B;gBAC/B,IAAI,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;oBAC/C,eAAe,CAAC,IAAI,CAAC;wBACnB,QAAQ,EAAE,YAAY;wBACtB,QAAQ,EAAE,QAAQ;wBAClB,KAAK,EAAE,UAAU,GAAG,CAAC,UAAU,2BAA2B;wBAC1D,cAAc,EAAE,mCAAmC;wBACnD,GAAG,EAAE,WAAW,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE;wBACjD,MAAM,EAAE,kCAAkC;qBAC3C,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAED,OAAO,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC;YAE7C,kBAAkB;YAClB,OAAO,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC;YAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YAE9D,MAAM,gBAAgB,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;;OAmB3C,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;YAEpB,KAAK,MAAM,GAAG,IAAI,gBAAgB,CAAC,IAAI,EAAE,CAAC;gBACxC,4BAA4B;gBAC5B,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;oBAClB,eAAe,CAAC,IAAI,CAAC;wBACnB,QAAQ,EAAE,cAAc;wBACxB,QAAQ,EAAE,UAAU;wBACpB,KAAK,EAAE,UAAU,GAAG,CAAC,UAAU,cAAc;wBAC7C,cAAc,EAAE,mBAAmB;wBACnC,GAAG,EAAE,iBAAiB,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE;wBACvD,MAAM,EAAE,qCAAqC;qBAC9C,CAAC,CAAC;gBACL,CAAC;gBAED,oEAAoE;gBACpE,IAAI,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,GAAG,CAAC,UAAU,KAAK,MAAM,IAAI,GAAG,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;oBACjF,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC;oBACnD,IAAI,MAAM,GAAG,GAAG,EAAE,CAAC;wBACjB,eAAe,CAAC,IAAI,CAAC;4BACnB,QAAQ,EAAE,cAAc;4BACxB,QAAQ,EAAE,KAAK;4BACf,KAAK,EAAE,UAAU,GAAG,CAAC,UAAU,0BAA0B,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;4BACzF,cAAc,EAAE,iCAAiC;4BACjD,GAAG,EAAE,2BAA2B,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE;4BACjE,MAAM,EAAE,oCAAoC;yBAC7C,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC;YAED,OAAO,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;YAEzC,kCAAkC;YAClC,OAAO,CAAC,OAAO,CAAC,yCAAyC,CAAC,CAAC;YAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YAE5E,MAAM,aAAa,GAAG,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAChD,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,MAAM,IAAI,CAAC,CAAC,UAAU,KAAK,SAAS,CAC3D,CAAC;YAEF,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;gBAChC,oBAAoB;gBACpB,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;;;;;SAKxC,EAAE,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;gBAEpC,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,UAAU,IAAI,EAAE,CAAC;gBAExD,IAAI,GAAG,CAAC,UAAU,KAAK,MAAM,EAAE,CAAC;oBAC9B,wBAAwB;oBACxB,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;oBAC1D,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC,CAAC;oBAErF,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBACtD,MAAM,OAAO,GAAG,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBAEjF,sBAAsB;oBACtB,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;0CACP,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU;WAC9D,CAAC,CAAC;oBACH,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;oBAEvD,sDAAsD;oBACtD,IAAI,QAAQ,GAAG,MAAM,IAAI,OAAO,GAAG,GAAG,EAAE,CAAC;wBACvC,eAAe,CAAC,IAAI,CAAC;4BACnB,QAAQ,EAAE,aAAa;4BACvB,QAAQ,EAAE,QAAQ;4BAClB,KAAK,EAAE,eAAe,GAAG,CAAC,UAAU,yBAAyB,OAAO,QAAQ,QAAQ,CAAC,cAAc,EAAE,UAAU;4BAC/G,cAAc,EAAE,mEAAmE;4BACnF,GAAG,EAAE,+CAA+C,MAAM,0BAA0B;4BACpF,MAAM,EAAE,2CAA2C;yBACpD,CAAC,CAAC;oBACL,CAAC;oBAED,6CAA6C;oBAC7C,IAAI,QAAQ,GAAG,OAAO,IAAI,MAAM,GAAG,EAAE,EAAE,CAAC;wBACtC,eAAe,CAAC,IAAI,CAAC;4BACnB,QAAQ,EAAE,aAAa;4BACvB,QAAQ,EAAE,QAAQ;4BAClB,KAAK,EAAE,eAAe,GAAG,CAAC,UAAU,WAAW,MAAM,QAAQ,QAAQ,CAAC,cAAc,EAAE,UAAU;4BAChG,cAAc,EAAE,2DAA2D;4BAC3E,GAAG,EAAE,qEAAqE,OAAO,GAAG;4BACpF,MAAM,EAAE,uCAAuC;yBAChD,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;gBAED,IAAI,GAAG,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;oBACjC,gCAAgC;oBAChC,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;oBAClE,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;oBAEnE,sBAAsB;oBACtB,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;0CACP,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU;WAC9D,CAAC,CAAC;oBACH,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;oBAEvD,8BAA8B;oBAC9B,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;oBAEzD,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,gBAAgB,CAAC,GAAG,gBAAgB,GAAG,GAAG,EAAE,CAAC;wBACrE,eAAe,CAAC,IAAI,CAAC;4BACnB,QAAQ,EAAE,gBAAgB;4BAC1B,QAAQ,EAAE,QAAQ;4BAClB,KAAK,EAAE,kBAAkB,GAAG,CAAC,UAAU,eAAe,UAAU,mBAAmB,gBAAgB,GAAG;4BACtG,cAAc,EAAE,kDAAkD;4BAClE,GAAG,EAAE,mDAAmD,gBAAgB,GAAG;4BAC3E,MAAM,EAAE,iCAAiC;yBAC1C,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC;YAED,OAAO,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC;YAEvD,wBAAwB;YACxB,OAAO,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC;YAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YAEpE,MAAM,cAAc,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;;;;;;;OAOzC,CAAC,CAAC;YAEH,MAAM,QAAQ,GAA2B,EAAE,CAAC;YAC5C,KAAK,MAAM,GAAG,IAAI,cAAc,CAAC,IAAI,EAAE,CAAC;gBACtC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;YACtD,CAAC;YAED,uCAAuC;YACvC,MAAM,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAC,QAAQ,IAAI,MAAM,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC;YACnE,IAAI,SAAS,GAAG,EAAE,EAAE,CAAC;gBACnB,eAAe,CAAC,IAAI,CAAC;oBACnB,QAAQ,EAAE,iBAAiB;oBAC3B,QAAQ,EAAE,QAAQ;oBAClB,KAAK,EAAE,eAAe,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,wCAAwC;oBAClF,cAAc,EAAE,wDAAwD;oBACxE,GAAG,EAAE,uBAAuB;oBAC5B,MAAM,EAAE,8CAA8C;iBACvD,CAAC,CAAC;YACL,CAAC;YAED,gDAAgD;YAChD,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAQ,CAAC,oBAAoB,IAAI,OAAO,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC;YACjF,IAAI,UAAU,GAAG,GAAG,EAAE,CAAC;gBACrB,eAAe,CAAC,IAAI,CAAC;oBACnB,QAAQ,EAAE,iBAAiB;oBAC3B,QAAQ,EAAE,KAAK;oBACf,KAAK,EAAE,2BAA2B,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;oBAC3D,cAAc,EAAE,kCAAkC;oBAClD,GAAG,EAAE,oCAAoC;oBACzC,MAAM,EAAE,kCAAkC;iBAC3C,CAAC,CAAC;YACL,CAAC;YAED,OAAO,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC;YAE/C,MAAM,MAAM,CAAC,GAAG,EAAE,CAAC;YAEnB,0BAA0B;YAC1B,MAAM,CAAC,OAAO,EAAE,CAAC;YAEjB,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACjC,MAAM,CAAC,YAAY,CAAC,0DAA0D,CAAC,CAAC;gBAChF,MAAM,CAAC,OAAO,EAAE,CAAC;gBAEjB,MAAM,CAAC,QAAQ,CAAC;oBACd,+BAA+B;oBAC/B,2CAA2C;oBAC3C,8BAA8B;oBAC9B,EAAE;oBACF,mCAAmC;oBACnC,kCAAkC;oBAClC,8BAA8B;oBAC9B,+CAA+C;iBAChD,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,iBAAiB,CAAC,CAAC;gBAEjC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,EAAE,CAAC;YAC1D,CAAC;YAED,oBAAoB;YACpB,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC;YACxE,MAAM,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC;YAChE,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;YACpE,MAAM,GAAG,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC;YAE9D,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,eAAe,CAAC,MAAM,gCAAgC,CAAC,CAAC,CAAC;YAC7F,MAAM,CAAC,OAAO,EAAE,CAAC;YAEjB,sBAAsB;YACtB,MAAM,sBAAsB,GAAG,CAAC,IAAsB,EAAE,KAAa,EAAE,KAA4B,EAAE,EAAE;gBACrG,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;oBAAE,OAAO;gBAE9B,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,cAAc,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;gBAC7D,MAAM,CAAC,OAAO,EAAE,CAAC;gBAEjB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;oBACvB,MAAM,CAAC,OAAO,CAAC,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;oBAC/D,MAAM,CAAC,OAAO,CAAC,OAAO,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,GAAG,CAAC,cAAc,EAAE,CAAC,CAAC;oBAC7E,MAAM,CAAC,OAAO,CAAC,OAAO,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;oBAC7D,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;wBACZ,MAAM,CAAC,OAAO,CAAC,OAAO,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBAC3E,CAAC;oBACD,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,CAAC;YACH,CAAC,CAAC;YAEF,sBAAsB,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;YACxE,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;YAClE,sBAAsB,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;YACxE,sBAAsB,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;YAE5D,mCAAmC;YACnC,IAAI,kBAAkB,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;gBACnE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC3C,MAAM,CAAC,OAAO,EAAE,CAAC;gBAEjB,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;oBACpB,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC;wBACjC,OAAO,EAAE,SAAS,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,wCAAwC;wBACvF,OAAO,EAAE,KAAK;qBACf,CAAC,CAAC;oBAEH,IAAI,YAAY,EAAE,CAAC;wBACjB,MAAM,WAAW,GAAG,IAAI,EAAE,CAAC,MAAM,CAAC;4BAChC,IAAI,EAAE,MAAM,CAAC,IAAI;4BACjB,IAAI,EAAE,MAAM,CAAC,IAAI;4BACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;4BACzB,IAAI,EAAE,MAAM,CAAC,IAAI;4BACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;4BACzB,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK;yBACxD,CAAC,CAAC;wBAEH,MAAM,WAAW,CAAC,OAAO,EAAE,CAAC;wBAE5B,KAAK,MAAM,GAAG,IAAI,CAAC,GAAG,QAAQ,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;4BACzC,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gCACzC,OAAO,CAAC,OAAO,CAAC,aAAa,GAAG,CAAC,KAAK,KAAK,CAAC,CAAC;gCAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gCAC9D,IAAI,CAAC;oCACH,MAAM,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oCACjC,OAAO,CAAC,OAAO,CAAC,YAAY,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;gCAC9C,CAAC;gCAAC,OAAO,KAAK,EAAE,CAAC;oCACf,OAAO,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;oCACxC,MAAM,CAAC,UAAU,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gCAC5E,CAAC;4BACH,CAAC;wBACH,CAAC;wBAED,MAAM,WAAW,CAAC,GAAG,EAAE,CAAC;wBACxB,MAAM,CAAC,OAAO,EAAE,CAAC;wBACjB,MAAM,CAAC,YAAY,CAAC,uBAAuB,CAAC,CAAC;oBAC/C,CAAC;gBACH,CAAC;YACH,CAAC;YAED,UAAU;YACV,MAAM,CAAC,QAAQ,CAAC;gBACd,0BAA0B,eAAe,CAAC,MAAM,EAAE;gBAClD,eAAe,QAAQ,CAAC,MAAM,EAAE;gBAChC,WAAW,IAAI,CAAC,MAAM,EAAE;gBACxB,aAAa,MAAM,CAAC,MAAM,EAAE;gBAC5B,UAAU,GAAG,CAAC,MAAM,EAAE;gBACtB,EAAE;gBACF,iBAAiB;gBACjB,+DAA+D;gBAC/D,8DAA8D;gBAC9D,mEAAmE;aACpE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,sBAAsB,CAAC,CAAC;YAEtC,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE;oBACJ,eAAe;oBACf,OAAO,EAAE;wBACP,QAAQ,EAAE,QAAQ,CAAC,MAAM;wBACzB,IAAI,EAAE,IAAI,CAAC,MAAM;wBACjB,MAAM,EAAE,MAAM,CAAC,MAAM;wBACrB,GAAG,EAAE,GAAG,CAAC,MAAM;qBAChB;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;YAC7C,MAAM,CAAC,UAAU,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAC1E,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;QACzC,CAAC;IACH,CAAC;CACF,CAAC;AAEF,eAAe,eAAe,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* V3 CLI RuVector Setup Command
|
|
3
|
+
* Outputs Docker files and SQL for easy RuVector PostgreSQL setup
|
|
4
|
+
*
|
|
5
|
+
* Usage:
|
|
6
|
+
* npx claude-flow ruvector setup # Output to ./ruvector-postgres/
|
|
7
|
+
* npx claude-flow ruvector setup --output /path/to/dir
|
|
8
|
+
* npx claude-flow ruvector setup --print # Print to stdout only
|
|
9
|
+
*
|
|
10
|
+
* Created with care by ruv.io
|
|
11
|
+
*/
|
|
12
|
+
import type { Command } from '../../types.js';
|
|
13
|
+
/**
|
|
14
|
+
* RuVector Setup command - outputs Docker files and SQL
|
|
15
|
+
*/
|
|
16
|
+
export declare const setupCommand: Command;
|
|
17
|
+
export default setupCommand;
|
|
18
|
+
//# sourceMappingURL=setup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../../src/commands/ruvector/setup.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAiC,MAAM,gBAAgB,CAAC;AAooB7E;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,OAyH1B,CAAC;AAEF,eAAe,YAAY,CAAC"}
|