@vivantel/virage-cli 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/dist/bin/virage.d.ts +3 -0
  2. package/dist/bin/virage.d.ts.map +1 -0
  3. package/dist/bin/virage.js +366 -0
  4. package/dist/bin/virage.js.map +1 -0
  5. package/dist/cli/benchmark.d.ts +6 -0
  6. package/dist/cli/benchmark.d.ts.map +1 -0
  7. package/dist/cli/benchmark.js +26 -0
  8. package/dist/cli/benchmark.js.map +1 -0
  9. package/dist/cli/chunks-report.d.ts +2 -0
  10. package/dist/cli/chunks-report.d.ts.map +1 -0
  11. package/dist/cli/chunks-report.js +74 -0
  12. package/dist/cli/chunks-report.js.map +1 -0
  13. package/dist/cli/dashboard.d.ts +7 -0
  14. package/dist/cli/dashboard.d.ts.map +1 -0
  15. package/dist/cli/dashboard.js +164 -0
  16. package/dist/cli/dashboard.js.map +1 -0
  17. package/dist/cli/evaluate.d.ts +9 -0
  18. package/dist/cli/evaluate.d.ts.map +1 -0
  19. package/dist/cli/evaluate.js +64 -0
  20. package/dist/cli/evaluate.js.map +1 -0
  21. package/dist/cli/experiment.d.ts +13 -0
  22. package/dist/cli/experiment.d.ts.map +1 -0
  23. package/dist/cli/experiment.js +95 -0
  24. package/dist/cli/experiment.js.map +1 -0
  25. package/dist/cli/file-detect.d.ts +11 -0
  26. package/dist/cli/file-detect.d.ts.map +1 -0
  27. package/dist/cli/file-detect.js +46 -0
  28. package/dist/cli/file-detect.js.map +1 -0
  29. package/dist/cli/init.d.ts +2 -0
  30. package/dist/cli/init.d.ts.map +1 -0
  31. package/dist/cli/init.js +381 -0
  32. package/dist/cli/init.js.map +1 -0
  33. package/dist/cli/report.d.ts +2 -0
  34. package/dist/cli/report.d.ts.map +1 -0
  35. package/dist/cli/report.js +96 -0
  36. package/dist/cli/report.js.map +1 -0
  37. package/dist/cli/store-cmd.d.ts +10 -0
  38. package/dist/cli/store-cmd.d.ts.map +1 -0
  39. package/dist/cli/store-cmd.js +50 -0
  40. package/dist/cli/store-cmd.js.map +1 -0
  41. package/dist/cli/validate.d.ts +2 -0
  42. package/dist/cli/validate.d.ts.map +1 -0
  43. package/dist/cli/validate.js +72 -0
  44. package/dist/cli/validate.js.map +1 -0
  45. package/dist/cli/viz.d.ts +7 -0
  46. package/dist/cli/viz.d.ts.map +1 -0
  47. package/dist/cli/viz.js +163 -0
  48. package/dist/cli/viz.js.map +1 -0
  49. package/dist/dashboard-ui/assets/index-BD53Fj5e.js +40 -0
  50. package/dist/dashboard-ui/assets/index-Boh3NVMF.css +1 -0
  51. package/dist/dashboard-ui/index.html +13 -0
  52. package/dist/logger/consola-logger.d.ts +18 -0
  53. package/dist/logger/consola-logger.d.ts.map +1 -0
  54. package/dist/logger/consola-logger.js +76 -0
  55. package/dist/logger/consola-logger.js.map +1 -0
  56. package/dist/logger/index.d.ts +4 -0
  57. package/dist/logger/index.d.ts.map +1 -0
  58. package/dist/logger/index.js +6 -0
  59. package/dist/logger/index.js.map +1 -0
  60. package/dist/progress/progress-bar.d.ts +6 -0
  61. package/dist/progress/progress-bar.d.ts.map +1 -0
  62. package/dist/progress/progress-bar.js +23 -0
  63. package/dist/progress/progress-bar.js.map +1 -0
  64. package/package.json +75 -0
@@ -0,0 +1,381 @@
1
+ import { checkbox, input, select } from "@inquirer/prompts";
2
+ import { existsSync } from "fs";
3
+ import { readFile, rename, writeFile } from "fs/promises";
4
+ import { join } from "path";
5
+ import { spawn } from "child_process";
6
+ import { loadRegistry, defaultChunksFile, defaultEmbeddingsFile, getVirageDir, } from "@vivantel/virage-core";
7
+ import { EXT_GROUPS, detectFileExtensions, } from "./file-detect.js";
8
+ // ─── Back-navigation support ──────────────────────────────────────────────────
9
+ const BACK_VALUE = "__back__";
10
+ function withBack(choices) {
11
+ return [
12
+ ...choices,
13
+ { name: "← Back", value: BACK_VALUE },
14
+ ];
15
+ }
16
+ function isBack(value) {
17
+ return value === BACK_VALUE;
18
+ }
19
+ // ─── Package helpers ──────────────────────────────────────────────────────────
20
+ function getRequiredPackages(state, registry) {
21
+ const embedderEntry = registry.embedders.find((e) => e.key === state.embedder);
22
+ const storeEntry = registry.stores.find((s) => s.key === state.vectorStore);
23
+ const pkgs = new Set();
24
+ if (embedderEntry && embedderEntry.key !== "custom")
25
+ pkgs.add(embedderEntry.package);
26
+ if (storeEntry && storeEntry.key !== "custom")
27
+ pkgs.add(storeEntry.package);
28
+ return Array.from(pkgs);
29
+ }
30
+ async function detectPackageManager(projectRoot) {
31
+ if (existsSync(join(projectRoot, "bun.lockb")))
32
+ return "bun";
33
+ if (existsSync(join(projectRoot, "pnpm-lock.yaml")))
34
+ return "pnpm";
35
+ if (existsSync(join(projectRoot, "yarn.lock")))
36
+ return "yarn";
37
+ return "npm";
38
+ }
39
+ function buildInstallCommand(pm, packages) {
40
+ switch (pm) {
41
+ case "yarn":
42
+ return { cmd: "yarn", args: ["add", ...packages] };
43
+ case "pnpm":
44
+ return { cmd: "pnpm", args: ["add", ...packages] };
45
+ case "bun":
46
+ return { cmd: "bun", args: ["add", ...packages] };
47
+ default:
48
+ return { cmd: "npm", args: ["install", ...packages] };
49
+ }
50
+ }
51
+ function buildGlobalInstallCommand(pm, packages) {
52
+ switch (pm) {
53
+ case "yarn":
54
+ return { cmd: "yarn", args: ["global", "add", ...packages] };
55
+ case "pnpm":
56
+ return { cmd: "pnpm", args: ["add", "-g", ...packages] };
57
+ case "bun":
58
+ return { cmd: "bun", args: ["add", "-g", ...packages] };
59
+ default:
60
+ return { cmd: "npm", args: ["install", "-g", ...packages] };
61
+ }
62
+ }
63
+ async function rotateConfigBackups(configPath) {
64
+ const bak = (n) => `${configPath}.bak.${n}`;
65
+ // Delete oldest backup if present
66
+ try {
67
+ await rename(bak(5), bak(5) + ".del");
68
+ const { unlink } = await import("fs/promises");
69
+ await unlink(bak(5) + ".del");
70
+ }
71
+ catch {
72
+ // No .bak.5 to remove
73
+ }
74
+ // Shift .bak.4 → .bak.5, .bak.3 → .bak.4, ... .bak.1 → .bak.2
75
+ for (let i = 4; i >= 1; i--) {
76
+ try {
77
+ await rename(bak(i), bak(i + 1));
78
+ }
79
+ catch {
80
+ // No backup at this slot
81
+ }
82
+ }
83
+ // Rename current file to .bak.1
84
+ if (existsSync(configPath)) {
85
+ await rename(configPath, bak(1));
86
+ }
87
+ }
88
+ function runInstall(cmd, args) {
89
+ return new Promise((resolve, reject) => {
90
+ const proc = spawn(cmd, args, {
91
+ stdio: "inherit",
92
+ shell: process.platform === "win32",
93
+ });
94
+ proc.on("close", (code) => code === 0
95
+ ? resolve()
96
+ : reject(new Error(`Install failed with exit code ${code}`)));
97
+ proc.on("error", reject);
98
+ });
99
+ }
100
+ // ─── Config generation ────────────────────────────────────────────────────────
101
+ const STRATEGY_FN_TO_JSON = {
102
+ markdownHeadersStrategy: "markdownHeaders",
103
+ tokenStrategy: "token",
104
+ wholeFileStrategy: "wholeFile",
105
+ semanticStrategy: "semantic",
106
+ };
107
+ function generateJsonConfig(state, registry) {
108
+ const effectiveGroups = state.groups.length > 0
109
+ ? state.groups
110
+ : [EXT_GROUPS.find((g) => g.name === "typescript")];
111
+ const chunkers = effectiveGroups.map((g) => ({
112
+ name: g.name,
113
+ patterns: g.exts.map((e) => `**/*${e}`),
114
+ strategy: STRATEGY_FN_TO_JSON[g.strategyFn] ?? g.strategyFn,
115
+ }));
116
+ const embedderEntry = registry.embedders.find((e) => e.key === state.embedder);
117
+ const storeEntry = registry.stores.find((s) => s.key === state.vectorStore);
118
+ // For local file-based stores, resolve paths relative to the virage dir so
119
+ // the VIRAGE_DIR env var override is respected at config generation time
120
+ // (same pattern as chunksFile/embeddingsFile).
121
+ const resolvedStoreConfig = storeEntry.key === "lancedb"
122
+ ? { ...storeEntry.defaultConfig, uri: `${getVirageDir()}/lancedb` }
123
+ : storeEntry.defaultConfig;
124
+ const config = {
125
+ $schema: "./node_modules/@vivantel/virage-core/schemas/virage.config.schema.json",
126
+ chunkers,
127
+ embedder: {
128
+ package: embedderEntry.package,
129
+ config: embedderEntry.defaultConfig,
130
+ },
131
+ vectorStore: {
132
+ package: storeEntry.package,
133
+ config: resolvedStoreConfig,
134
+ },
135
+ options: {
136
+ chunksFile: defaultChunksFile(),
137
+ embeddingsFile: defaultEmbeddingsFile(),
138
+ },
139
+ };
140
+ return JSON.stringify(config, null, 2) + "\n";
141
+ }
142
+ // ─── .env writing ─────────────────────────────────────────────────────────────
143
+ async function writeEnvVars(envPath, vars) {
144
+ let existing = "";
145
+ if (existsSync(envPath)) {
146
+ existing = await readFile(envPath, "utf-8");
147
+ }
148
+ const written = [];
149
+ const skipped = [];
150
+ const lines = existing.endsWith("\n")
151
+ ? [existing]
152
+ : existing
153
+ ? [existing, ""]
154
+ : [];
155
+ for (const [key, value] of Object.entries(vars)) {
156
+ const alreadyDefined = existing
157
+ .split("\n")
158
+ .some((line) => line.startsWith(`${key}=`) || line.startsWith(`${key} =`));
159
+ if (alreadyDefined) {
160
+ skipped.push(key);
161
+ }
162
+ else {
163
+ lines.push(`${key}=${value}`);
164
+ written.push(key);
165
+ }
166
+ }
167
+ if (written.length > 0) {
168
+ await writeFile(envPath, lines.join("\n").trimStart() + "\n", "utf-8");
169
+ }
170
+ return { written, skipped };
171
+ }
172
+ // ─── Main wizard ──────────────────────────────────────────────────────────────
173
+ export async function runInit() {
174
+ console.log("\nVirage Config Generator\n");
175
+ const defaultConfigPath = "./virage.config.json";
176
+ if (existsSync(defaultConfigPath)) {
177
+ const overwrite = await select({
178
+ message: `Config file ${defaultConfigPath} already exists. Overwrite?`,
179
+ choices: [
180
+ { name: "Yes (backup & overwrite)", value: true },
181
+ { name: "No, cancel", value: false },
182
+ ],
183
+ });
184
+ if (!overwrite) {
185
+ console.log("\nCancelled.");
186
+ return;
187
+ }
188
+ }
189
+ const cwd = process.cwd();
190
+ console.log("Scanning project for file types...");
191
+ const detectedGroups = await detectFileExtensions(cwd);
192
+ const registry = await loadRegistry(cwd);
193
+ const state = {};
194
+ let step = 0;
195
+ while (step < 4) {
196
+ switch (step) {
197
+ // ── Step 0: chunker selection ──
198
+ case 0: {
199
+ if (detectedGroups.length > 0) {
200
+ const confirmed = await checkbox({
201
+ message: "Detected file types — select which to index:",
202
+ choices: [
203
+ ...detectedGroups.map((g) => ({
204
+ name: `${g.name} (${g.exts.join(", ")}) → ${g.strategyFn}`,
205
+ value: g.name,
206
+ checked: true,
207
+ })),
208
+ { name: "← Back (cancel init)", value: "__back__" },
209
+ ],
210
+ });
211
+ if (confirmed.includes("__back__")) {
212
+ console.log("\nCancelled.");
213
+ return;
214
+ }
215
+ state.groups = detectedGroups.filter((g) => confirmed.includes(g.name));
216
+ }
217
+ else {
218
+ console.log("No known file types detected. Choose strategies manually:");
219
+ const chosen = await checkbox({
220
+ message: "Which chunking strategies do you need?",
221
+ choices: [
222
+ ...EXT_GROUPS.map((g) => ({
223
+ name: `${g.name} (${g.strategyFn})`,
224
+ value: g.name,
225
+ })),
226
+ { name: "← Back (cancel init)", value: "__back__" },
227
+ ],
228
+ });
229
+ if (chosen.includes("__back__")) {
230
+ console.log("\nCancelled.");
231
+ return;
232
+ }
233
+ state.groups = EXT_GROUPS.filter((g) => chosen.includes(g.name));
234
+ }
235
+ step++;
236
+ break;
237
+ }
238
+ // ── Step 1: embedder selection ──
239
+ case 1: {
240
+ const choice = await select({
241
+ message: "Which embedding provider?",
242
+ choices: withBack(registry.embedders.map((e) => ({ name: e.label, value: e.key }))),
243
+ });
244
+ if (isBack(choice)) {
245
+ step--;
246
+ break;
247
+ }
248
+ state.embedder = choice;
249
+ step++;
250
+ break;
251
+ }
252
+ // ── Step 2: vector store selection ──
253
+ case 2: {
254
+ const choice = await select({
255
+ message: "Which vector store?",
256
+ choices: withBack(registry.stores.map((s) => ({ name: s.label, value: s.key }))),
257
+ });
258
+ if (isBack(choice)) {
259
+ step--;
260
+ break;
261
+ }
262
+ state.vectorStore = choice;
263
+ step++;
264
+ break;
265
+ }
266
+ // ── Step 3: output path ──
267
+ case 3: {
268
+ const defaultOutput = "./virage.config.json";
269
+ const outputPath = await input({
270
+ message: "Output path for the config file? (leave blank to go back)",
271
+ default: defaultOutput,
272
+ });
273
+ if (outputPath.trim() === "") {
274
+ step--;
275
+ break;
276
+ }
277
+ state.outputPath = outputPath.trim();
278
+ step++;
279
+ break;
280
+ }
281
+ }
282
+ }
283
+ const finalState = state;
284
+ // ── Overwrite safety net for custom output path ──
285
+ if (finalState.outputPath !== defaultConfigPath &&
286
+ existsSync(finalState.outputPath)) {
287
+ const overwrite = await select({
288
+ message: `${finalState.outputPath} already exists. What would you like to do?`,
289
+ choices: [
290
+ { name: "Yes (backup & overwrite)", value: true },
291
+ { name: "No, cancel (keep existing file)", value: false },
292
+ ],
293
+ });
294
+ if (!overwrite) {
295
+ console.log("\nCancelled.");
296
+ return;
297
+ }
298
+ }
299
+ // ── Write config ──
300
+ await rotateConfigBackups(finalState.outputPath);
301
+ const configContent = generateJsonConfig(finalState, registry);
302
+ await writeFile(finalState.outputPath, configContent, "utf-8");
303
+ console.log(`\nCreated ${finalState.outputPath}`);
304
+ // ── Secrets step ──
305
+ const embedderEntry = registry.embedders.find((e) => e.key === finalState.embedder);
306
+ const storeEntry = registry.stores.find((s) => s.key === finalState.vectorStore);
307
+ const requiredVars = [
308
+ ...(embedderEntry?.envVars ?? []),
309
+ ...(storeEntry?.envVars ?? []),
310
+ ];
311
+ if (requiredVars.length > 0) {
312
+ console.log("\nThis configuration requires the following secrets:");
313
+ const envValues = {};
314
+ for (const varName of requiredVars) {
315
+ const value = await input({
316
+ message: `Enter value for ${varName} (leave blank to skip):`,
317
+ default: "",
318
+ });
319
+ if (value.trim()) {
320
+ envValues[varName] = value.trim();
321
+ }
322
+ }
323
+ if (Object.keys(envValues).length > 0) {
324
+ const envPath = "./.env";
325
+ const { written, skipped } = await writeEnvVars(envPath, envValues);
326
+ if (written.length > 0) {
327
+ console.log(`\nWrote to ${envPath}: ${written.join(", ")}`);
328
+ }
329
+ if (skipped.length > 0) {
330
+ console.log(`Already defined (skipped): ${skipped.join(", ")}`);
331
+ }
332
+ }
333
+ else {
334
+ console.log("\nNo secrets entered — add them to your .env file manually.");
335
+ }
336
+ }
337
+ else {
338
+ console.log("\nNo secrets required for this combination.");
339
+ }
340
+ // ── Auto-install ──
341
+ const pkgs = getRequiredPackages(finalState, registry);
342
+ if (pkgs.length > 0) {
343
+ const pm = await detectPackageManager(cwd);
344
+ const localCmd = buildInstallCommand(pm, pkgs);
345
+ const globalCmd = buildGlobalInstallCommand(pm, pkgs);
346
+ const installChoice = await select({
347
+ message: `Install ${pkgs.join(", ")} using ${pm}?`,
348
+ choices: [
349
+ {
350
+ name: "Yes, install in current folder (recommended)",
351
+ value: "local",
352
+ },
353
+ { name: "Yes, install globally", value: "global" },
354
+ { name: "No, I'll install manually", value: "manual" },
355
+ ],
356
+ });
357
+ if (installChoice === "local" || installChoice === "global") {
358
+ const { cmd, args } = installChoice === "global" ? globalCmd : localCmd;
359
+ try {
360
+ await runInstall(cmd, args);
361
+ console.log("\nPackages installed successfully.");
362
+ }
363
+ catch {
364
+ console.log(`\nInstall failed. Run manually:\n ${cmd} ${args.join(" ")}`);
365
+ }
366
+ }
367
+ else {
368
+ console.log(`\nRun manually:\n ${localCmd.cmd} ${localCmd.args.join(" ")}`);
369
+ }
370
+ }
371
+ // ── Next steps ──
372
+ console.log("\nNext steps:");
373
+ let nextStep = 1;
374
+ if (finalState.vectorStore === "qdrant") {
375
+ console.log(` ${nextStep++}. Qdrant local: docker run -p 6333:6333 qdrant/qdrant`);
376
+ console.log(` Set QDRANT_URL=http://localhost:6333 (local) or your cluster URL (cloud).`);
377
+ }
378
+ console.log(` ${nextStep++}. Run \`virage validate\` to check the config`);
379
+ console.log(` ${nextStep}. Run \`virage\` to start indexing\n`);
380
+ }
381
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function runReport(dir: string): Promise<void>;
2
+ //# sourceMappingURL=report.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/cli/report.ts"],"names":[],"mappings":"AA2CA,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgG1D"}
@@ -0,0 +1,96 @@
1
+ import { readdir, readFile } from "fs/promises";
2
+ import { join } from "path";
3
+ function percentile(sorted, p) {
4
+ if (sorted.length === 0)
5
+ return 0;
6
+ const idx = Math.floor((p / 100) * sorted.length);
7
+ return sorted[Math.min(idx, sorted.length - 1)];
8
+ }
9
+ function fmt(ms) {
10
+ if (ms < 1000)
11
+ return `${ms}ms`;
12
+ return `${(ms / 1000).toFixed(2)}s`;
13
+ }
14
+ export async function runReport(dir) {
15
+ let files;
16
+ try {
17
+ files = (await readdir(dir)).filter((f) => f.endsWith(".json"));
18
+ }
19
+ catch {
20
+ console.error(`❌ Could not read telemetry directory "${dir}".\n` +
21
+ ` Run the pipeline first to generate telemetry files.`);
22
+ process.exit(1);
23
+ }
24
+ if (files.length === 0) {
25
+ console.log(`ℹ️ No telemetry files found in "${dir}".`);
26
+ return;
27
+ }
28
+ const records = [];
29
+ for (const file of files) {
30
+ try {
31
+ const raw = await readFile(join(dir, file), "utf-8");
32
+ records.push(JSON.parse(raw));
33
+ }
34
+ catch {
35
+ // Skip malformed files
36
+ }
37
+ }
38
+ if (records.length === 0) {
39
+ console.log("ℹ️ No valid telemetry records found.");
40
+ return;
41
+ }
42
+ // Sort by runAt
43
+ records.sort((a, b) => a.runAt.localeCompare(b.runAt));
44
+ const latest = records[records.length - 1];
45
+ console.log(`\n📊 Observability Report (${records.length} runs)`);
46
+ console.log("─".repeat(50));
47
+ console.log(` Latest run : ${latest.runAt}`);
48
+ console.log(` Total duration : ${fmt(latest.durationMs)}`);
49
+ const s = latest.stages;
50
+ if (s.gitTracking) {
51
+ console.log(`\n Git tracking : ${fmt(s.gitTracking.durationMs)}`);
52
+ console.log(` Files scanned : ${s.gitTracking.filesScanned}`);
53
+ console.log(` To process : ${s.gitTracking.toProcess}`);
54
+ console.log(` To delete : ${s.gitTracking.toDelete}`);
55
+ }
56
+ if (s.chunking) {
57
+ console.log(`\n Chunking : ${fmt(s.chunking.durationMs)}`);
58
+ console.log(` Files processed : ${s.chunking.filesProcessed}`);
59
+ console.log(` Chunks generated: ${s.chunking.chunksGenerated}`);
60
+ if (s.chunking.errors > 0) {
61
+ console.log(` Errors : ${s.chunking.errors}`);
62
+ }
63
+ }
64
+ if (s.embedding) {
65
+ const e = s.embedding;
66
+ const total = e.chunksEmbedded + e.chunksSkipped;
67
+ const hitRate = total > 0 ? e.chunksSkipped / total : 0;
68
+ console.log(`\n Embedding : ${fmt(e.durationMs)}`);
69
+ console.log(` Chunks embedded : ${e.chunksEmbedded}`);
70
+ console.log(` Chunks skipped : ${e.chunksSkipped} (cache hit rate: ${(hitRate * 100).toFixed(1)}%)`);
71
+ if (e.rateLimitEvents !== undefined && e.rateLimitEvents > 0) {
72
+ console.log(` Rate limit events: ${e.rateLimitEvents}`);
73
+ }
74
+ if (e.latencySamples && e.latencySamples.length > 0) {
75
+ const sorted = [...e.latencySamples].sort((a, b) => a - b);
76
+ console.log(` API latency p50 : ${fmt(percentile(sorted, 50))}`);
77
+ console.log(` API latency p95 : ${fmt(percentile(sorted, 95))}`);
78
+ console.log(` API latency p99 : ${fmt(percentile(sorted, 99))}`);
79
+ }
80
+ }
81
+ if (s.upload) {
82
+ console.log(`\n Upload : ${fmt(s.upload.durationMs)}`);
83
+ console.log(` Uploaded : ${s.upload.uploaded}`);
84
+ console.log(` Deleted : ${s.upload.deleted}`);
85
+ }
86
+ // Trend across all runs
87
+ if (records.length > 1) {
88
+ const durations = records.map((r) => r.durationMs);
89
+ const avgDuration = durations.reduce((s, v) => s + v, 0) / durations.length;
90
+ console.log(`\n Average run time : ${fmt(Math.round(avgDuration))}`);
91
+ console.log(` Fastest run : ${fmt(Math.min(...durations))}`);
92
+ console.log(` Slowest run : ${fmt(Math.max(...durations))}`);
93
+ }
94
+ console.log("─".repeat(50));
95
+ }
96
+ //# sourceMappingURL=report.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/cli/report.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export interface StoreStatsOptions {
2
+ config: string;
3
+ }
4
+ export interface StorePerfOptions {
5
+ config: string;
6
+ timeframeHours: number;
7
+ }
8
+ export declare function runStoreStats(opts: StoreStatsOptions): Promise<void>;
9
+ export declare function runStorePerf(opts: StorePerfOptions): Promise<void>;
10
+ //# sourceMappingURL=store-cmd.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store-cmd.d.ts","sourceRoot":"","sources":["../../src/cli/store-cmd.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmC1E;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqCxE"}
@@ -0,0 +1,50 @@
1
+ import { loadConfig } from "@vivantel/virage-core";
2
+ export async function runStoreStats(opts) {
3
+ console.log("📂 Loading config...");
4
+ const cfg = await loadConfig(opts.config);
5
+ const store = cfg.vectorStore;
6
+ if (!store.getIndexStats) {
7
+ console.error(`❌ The configured vector store "${store.name}" does not support index stats.`);
8
+ process.exit(1);
9
+ }
10
+ console.log("🔍 Fetching index stats...");
11
+ await store.initialize();
12
+ const stats = await store.getIndexStats();
13
+ console.log("\n📊 Vector Index Stats");
14
+ console.log("─".repeat(40));
15
+ console.log(` Total vectors : ${stats.totalVectors.toLocaleString()}`);
16
+ console.log(` Index type : ${stats.indexType}`);
17
+ console.log(` ANN recall@10 : ${stats.annRecallAt10 >= 0 ? (stats.annRecallAt10 * 100).toFixed(1) + "%" : "N/A"}`);
18
+ console.log(` Index age : ${stats.indexAgeHours >= 0 ? stats.indexAgeHours + " hours" : "unknown"}`);
19
+ console.log(` Dead tuple frac. : ${(stats.deadTupleFraction * 100).toFixed(1)}%`);
20
+ console.log("\n💡 Suggestions:");
21
+ for (const s of stats.suggestions) {
22
+ console.log(` • ${s}`);
23
+ }
24
+ console.log("─".repeat(40));
25
+ }
26
+ export async function runStorePerf(opts) {
27
+ console.log("📂 Loading config...");
28
+ const cfg = await loadConfig(opts.config);
29
+ const store = cfg.vectorStore;
30
+ if (!store.getQueryPerfReport) {
31
+ console.error(`❌ The configured vector store "${store.name}" does not support query performance reports.`);
32
+ process.exit(1);
33
+ }
34
+ console.log(`🔍 Fetching query perf for last ${opts.timeframeHours}h...`);
35
+ await store.initialize();
36
+ const report = await store.getQueryPerfReport(opts.timeframeHours);
37
+ console.log("\n📊 Query Performance Report");
38
+ console.log("─".repeat(40));
39
+ console.log(` Timeframe : last ${report.timeframeHours}h`);
40
+ console.log(` p50 latency : ${report.p50LatencyMs >= 0 ? report.p50LatencyMs + " ms" : "N/A"}`);
41
+ console.log(` p95 latency : ${report.p95LatencyMs >= 0 ? report.p95LatencyMs + " ms" : "N/A"}`);
42
+ console.log(` p99 latency : ${report.p99LatencyMs >= 0 ? report.p99LatencyMs + " ms" : "N/A"}`);
43
+ console.log(` Slow queries : ${report.slowQueryCount >= 0 ? report.slowQueryCount : "N/A"}`);
44
+ console.log("\n💡 Suggestions:");
45
+ for (const s of report.suggestedIndexes) {
46
+ console.log(` • ${s}`);
47
+ }
48
+ console.log("─".repeat(40));
49
+ }
50
+ //# sourceMappingURL=store-cmd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store-cmd.js","sourceRoot":"","sources":["../../src/cli/store-cmd.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function runValidate(configPath: string): Promise<void>;
2
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/cli/validate.ts"],"names":[],"mappings":"AAIA,wBAAsB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA8EnE"}