@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,72 @@
1
+ import { glob } from "glob";
2
+ import { loadConfig, GitTracker, ConfigError } from "@vivantel/virage-core";
3
+ import { detectFileExtensions } from "./file-detect.js";
4
+ export async function runValidate(configPath) {
5
+ const cwd = process.cwd();
6
+ console.log(`\nπŸ” Validating RAG config: ${configPath}\n`);
7
+ let config;
8
+ try {
9
+ process.stdout.write("πŸ“¦ Loading config... ");
10
+ config = await loadConfig(configPath);
11
+ console.log("βœ…");
12
+ }
13
+ catch (err) {
14
+ console.log("❌");
15
+ throw new ConfigError(`Failed to load config: ${err instanceof Error ? err.message : String(err)}`, {
16
+ suggestion: "Run `virage init` to generate a new config file.",
17
+ cause: err,
18
+ });
19
+ }
20
+ console.log("\nπŸ“‚ Scanning files...\n");
21
+ let hasWarnings = false;
22
+ for (const chunker of config.chunkers) {
23
+ const files = await glob(chunker.patterns, { nodir: true });
24
+ const unique = [...new Set(files)];
25
+ const patternsDisplay = chunker.patterns.join(", ");
26
+ console.log(` Chunker: ${chunker.name} (patterns: ${patternsDisplay})`);
27
+ if (unique.length === 0) {
28
+ console.log(` ⚠️ No files matched β€” check your patterns\n`);
29
+ hasWarnings = true;
30
+ }
31
+ else {
32
+ console.log(` βœ… Found ${unique.length} matching file(s)\n`);
33
+ }
34
+ }
35
+ const gitTracker = new GitTracker(config.chunkers);
36
+ const allFiles = await gitTracker.getAllTrackedFiles();
37
+ console.log(` Total: ${allFiles.length} file(s) tracked across ${config.chunkers.length} chunker(s)`);
38
+ console.log("\nπŸ”Œ Checking vector store...");
39
+ try {
40
+ await config.vectorStore.initialize();
41
+ console.log(" βœ… Vector store connected");
42
+ }
43
+ catch {
44
+ console.log(" ⚠️ Could not connect β€” check credentials");
45
+ hasWarnings = true;
46
+ }
47
+ console.log("\nπŸ“ Checking file type coverage...");
48
+ const detectedGroups = await detectFileExtensions(cwd);
49
+ if (detectedGroups.length === 0) {
50
+ console.log(" ℹ️ No known file types detected in project");
51
+ }
52
+ else {
53
+ const allPatterns = config.chunkers.flatMap((c) => c.patterns);
54
+ for (const group of detectedGroups) {
55
+ const covered = group.exts.some((ext) => allPatterns.some((p) => p.includes(`*${ext}`) || p.includes(`${ext}`)));
56
+ if (covered) {
57
+ console.log(` βœ… ${group.name} (${group.exts.join(", ")}) β€” covered`);
58
+ }
59
+ else {
60
+ console.log(` ⚠️ ${group.name} (${group.exts.join(", ")}) β€” not covered by any chunker`);
61
+ hasWarnings = true;
62
+ }
63
+ }
64
+ }
65
+ if (hasWarnings) {
66
+ console.log("\n⚠️ Config loaded with warnings.");
67
+ }
68
+ else {
69
+ console.log("\nβœ… Config is valid!");
70
+ }
71
+ }
72
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/cli/validate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export interface VizEmbeddingsOptions {
2
+ dbPath: string;
3
+ output: string;
4
+ projection: "umap" | "tsne";
5
+ }
6
+ export declare function runVizEmbeddings(opts: VizEmbeddingsOptions): Promise<void>;
7
+ //# sourceMappingURL=viz.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"viz.d.ts","sourceRoot":"","sources":["../../src/cli/viz.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC;CAC7B;AA4DD,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,oBAAoB,GACzB,OAAO,CAAC,IAAI,CAAC,CAmDf"}
@@ -0,0 +1,163 @@
1
+ import { writeFile } from "fs/promises";
2
+ import { extname } from "path";
3
+ import { EmbeddingsDb } from "@vivantel/virage-core";
4
+ // ---------------------------------------------------------------------------
5
+ // Minimal PCA-based 2-D projection (no external deps)
6
+ // ---------------------------------------------------------------------------
7
+ function mean(vectors) {
8
+ const d = vectors[0].length;
9
+ const m = new Array(d).fill(0);
10
+ for (const v of vectors) {
11
+ for (let i = 0; i < d; i++)
12
+ m[i] += v[i];
13
+ }
14
+ return m.map((x) => x / vectors.length);
15
+ }
16
+ function subtract(v, m) {
17
+ return v.map((x, i) => x - m[i]);
18
+ }
19
+ function dot(a, b) {
20
+ let s = 0;
21
+ for (let i = 0; i < a.length; i++)
22
+ s += a[i] * b[i];
23
+ return s;
24
+ }
25
+ function normalize(v) {
26
+ const n = Math.sqrt(dot(v, v));
27
+ return n === 0 ? v : v.map((x) => x / n);
28
+ }
29
+ /** Power iteration to find the top-2 principal components. */
30
+ function pca2d(vectors, iterations = 100) {
31
+ const centered = vectors.map((v) => subtract(v, mean(vectors)));
32
+ const d = centered[0].length;
33
+ const powerIterate = (excludes) => {
34
+ let w = Array.from({ length: d }, () => Math.random() - 0.5);
35
+ for (let iter = 0; iter < iterations; iter++) {
36
+ // Compute A^T * A * w (covariance-like)
37
+ const Aw = new Array(d).fill(0);
38
+ for (const c of centered) {
39
+ const proj = dot(c, w);
40
+ for (let i = 0; i < d; i++)
41
+ Aw[i] += proj * c[i];
42
+ }
43
+ // Deflate by excluded components
44
+ for (const ex of excludes) {
45
+ const p = dot(Aw, ex);
46
+ for (let i = 0; i < d; i++)
47
+ Aw[i] -= p * ex[i];
48
+ }
49
+ w = normalize(Aw);
50
+ }
51
+ return w;
52
+ };
53
+ const pc1 = powerIterate([]);
54
+ const pc2 = powerIterate([pc1]);
55
+ return centered.map((c) => [dot(c, pc1), dot(c, pc2)]);
56
+ }
57
+ export async function runVizEmbeddings(opts) {
58
+ console.log(`πŸ“‚ Reading embeddings from "${opts.dbPath}"...`);
59
+ const db = new EmbeddingsDb(opts.dbPath);
60
+ const chunks = db.getAll();
61
+ db.close();
62
+ if (chunks.length === 0) {
63
+ console.error("❌ No embeddings found.");
64
+ process.exit(1);
65
+ }
66
+ console.log(` Found ${chunks.length} embeddings`);
67
+ // Try umap-js if installed; fall back to PCA
68
+ let points;
69
+ if (opts.projection === "umap") {
70
+ try {
71
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
72
+ // @ts-ignore β€” umap-js is an optional peer dependency
73
+ const { UMAP } = (await import("umap-js"));
74
+ console.log("πŸ—ΊοΈ Computing UMAP projection...");
75
+ const umap = new UMAP({ nComponents: 2, nNeighbors: 15, minDist: 0.1 });
76
+ const result = await umap.fitAsync(chunks.map((c) => c.embedding));
77
+ points = result.map((p) => [p[0], p[1]]);
78
+ }
79
+ catch {
80
+ console.log(" umap-js not installed β€” falling back to PCA projection");
81
+ points = pca2d(chunks.map((c) => c.embedding));
82
+ }
83
+ }
84
+ else {
85
+ console.log("πŸ—ΊοΈ Computing PCA projection...");
86
+ points = pca2d(chunks.map((c) => c.embedding));
87
+ }
88
+ // Build plot data
89
+ const plotData = chunks.map((c, i) => ({
90
+ x: points[i][0],
91
+ y: points[i][1],
92
+ label: c.sourceFile,
93
+ ext: extname(c.sourceFile) || "unknown",
94
+ preview: c.content.slice(0, 100).replace(/"/g, "'"),
95
+ }));
96
+ const html = buildHtml(plotData, opts.dbPath, opts.projection);
97
+ await writeFile(opts.output, html, "utf-8");
98
+ console.log(`βœ… Visualization saved to "${opts.output}"`);
99
+ }
100
+ function buildHtml(points, source, projection) {
101
+ const extensions = [...new Set(points.map((p) => p.ext))];
102
+ const colors = [
103
+ "#4e79a7",
104
+ "#f28e2b",
105
+ "#e15759",
106
+ "#76b7b2",
107
+ "#59a14f",
108
+ "#edc948",
109
+ "#b07aa1",
110
+ "#ff9da7",
111
+ "#9c755f",
112
+ "#bab0ac",
113
+ ];
114
+ const colorMap = {};
115
+ extensions.forEach((ext, i) => {
116
+ colorMap[ext] = colors[i % colors.length];
117
+ });
118
+ const traces = extensions.map((ext) => {
119
+ const pts = points.filter((p) => p.ext === ext);
120
+ return {
121
+ x: pts.map((p) => p.x),
122
+ y: pts.map((p) => p.y),
123
+ text: pts.map((p) => `${p.label}<br>${p.preview}`),
124
+ mode: "markers",
125
+ type: "scatter",
126
+ name: ext,
127
+ marker: { color: colorMap[ext], size: 6, opacity: 0.7 },
128
+ };
129
+ });
130
+ const dataJson = JSON.stringify(traces);
131
+ const title = `Embedding Space β€” ${projection.toUpperCase()} (${points.length} chunks from ${source})`;
132
+ return `<!DOCTYPE html>
133
+ <html>
134
+ <head>
135
+ <meta charset="utf-8">
136
+ <title>RAG Embedding Visualization</title>
137
+ <script src="https://cdn.plot.ly/plotly-2.32.0.min.js"></script>
138
+ <style>
139
+ body { margin: 0; font-family: sans-serif; background: #1a1a2e; color: #eee; }
140
+ #chart { width: 100vw; height: 100vh; }
141
+ h1 { text-align: center; font-size: 14px; padding: 8px; margin: 0; }
142
+ </style>
143
+ </head>
144
+ <body>
145
+ <div id="chart"></div>
146
+ <script>
147
+ const data = ${dataJson};
148
+ const layout = {
149
+ title: ${JSON.stringify(title)},
150
+ paper_bgcolor: '#1a1a2e',
151
+ plot_bgcolor: '#16213e',
152
+ font: { color: '#eee' },
153
+ legend: { bgcolor: 'rgba(0,0,0,0.5)' },
154
+ xaxis: { title: 'Component 1', gridcolor: '#333' },
155
+ yaxis: { title: 'Component 2', gridcolor: '#333' },
156
+ hovermode: 'closest',
157
+ };
158
+ Plotly.newPlot('chart', data, layout, { responsive: true });
159
+ </script>
160
+ </body>
161
+ </html>`;
162
+ }
163
+ //# sourceMappingURL=viz.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"viz.js","sourceRoot":"","sources":["../../src/cli/viz.ts"],"names":[],"mappings":"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"}