@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,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=virage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"virage.d.ts","sourceRoot":"","sources":["../../src/bin/virage.ts"],"names":[],"mappings":""}
@@ -0,0 +1,366 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from "commander";
3
+ import { config } from "dotenv";
4
+ import { loadConfig, Orchestrator, RagError, defaultChunksFile, defaultEmbeddingsDb, getVirageDir, } from "@vivantel/virage-core";
5
+ import { createLogger } from "../logger/index.js";
6
+ import { createProgressBar } from "../progress/progress-bar.js";
7
+ import { runInit } from "../cli/init.js";
8
+ import { runValidate } from "../cli/validate.js";
9
+ import { runEvaluate } from "../cli/evaluate.js";
10
+ import { runExperimentRun, runExperimentCompare, runExperimentList, } from "../cli/experiment.js";
11
+ import { runBenchmarkEmbedder } from "../cli/benchmark.js";
12
+ import { runStoreStats, runStorePerf } from "../cli/store-cmd.js";
13
+ import { runReport } from "../cli/report.js";
14
+ import { runChunksReport } from "../cli/chunks-report.js";
15
+ import { runVizEmbeddings } from "../cli/viz.js";
16
+ import { runDashboard } from "../cli/dashboard.js";
17
+ config({ quiet: true });
18
+ // Expand -vvv etc. into individual -v flags before commander parses
19
+ const argv = process.argv.flatMap((arg) => /^-v+$/.test(arg)
20
+ ? arg
21
+ .slice(1)
22
+ .split("")
23
+ .map((c) => `-${c}`)
24
+ : [arg]);
25
+ const program = new Command();
26
+ function handleError(error) {
27
+ console.error("āŒ Error:", error instanceof Error ? error.message : error);
28
+ if (error instanceof RagError && error.suggestion) {
29
+ console.error(" šŸ’”", error.suggestion);
30
+ }
31
+ process.exit(1);
32
+ }
33
+ async function runOnce(options) {
34
+ const cfg = await loadConfig(options.config, options.logger);
35
+ const bars = { chunk: null, embed: null, upload: null };
36
+ try {
37
+ const orchestrator = new Orchestrator({
38
+ ...cfg,
39
+ options: {
40
+ ...cfg.options,
41
+ force: options.force || cfg.options?.force,
42
+ skipUpload: options.noUpload || cfg.options?.skipUpload,
43
+ dryRun: options.dryRun || cfg.options?.dryRun,
44
+ chunksFile: options.chunksOut || cfg.options?.chunksFile,
45
+ embeddingsFile: options.embeddingsOut || cfg.options?.embeddingsFile,
46
+ logger: options.logger,
47
+ onChunkProgress: (done, total) => {
48
+ if (!bars.chunk)
49
+ bars.chunk = createProgressBar("Chunking", total);
50
+ bars.chunk.update(done);
51
+ },
52
+ onEmbedProgress: (done, total) => {
53
+ if (!bars.embed)
54
+ bars.embed = createProgressBar("Embedding", total);
55
+ bars.embed.update(done);
56
+ },
57
+ onUploadProgress: (done, total) => {
58
+ if (!bars.upload)
59
+ bars.upload = createProgressBar("Uploading", total);
60
+ bars.upload.update(done);
61
+ },
62
+ },
63
+ });
64
+ await orchestrator.run();
65
+ }
66
+ finally {
67
+ bars.chunk?.stop();
68
+ bars.embed?.stop();
69
+ bars.upload?.stop();
70
+ }
71
+ }
72
+ program
73
+ .name("virage")
74
+ .description("RAG pipeline CLI — run 'virage update' to index, or a subcommand for diagnostics")
75
+ .version("2.0.0")
76
+ .option("-v, --verbose", "Increase verbosity (stackable: -v, -vv … -vvvvv)", (_, prev) => prev + 1, 0)
77
+ .action(() => program.outputHelp());
78
+ program
79
+ .command("update")
80
+ .description("Run the RAG indexing pipeline")
81
+ .option("-c, --config <path>", "Path to config file", "./virage.config.json")
82
+ .option("-f, --force", "Force full rebuild", false)
83
+ .option("--no-upload", "Skip upload to vector store")
84
+ .option("--dry-run", "Show what would change without uploading", false)
85
+ .option("--chunks-out <path>", "Output path for chunks.json")
86
+ .option("--embeddings-out <path>", "Output path for embeddings.json")
87
+ .option("--watch", "Re-run pipeline on file changes", false)
88
+ .action(async (cmdOpts) => {
89
+ const verbose = program.opts().verbose;
90
+ const logger = createLogger(verbose);
91
+ const runOptions = {
92
+ config: cmdOpts.config,
93
+ force: cmdOpts.force,
94
+ noUpload: !cmdOpts.upload,
95
+ dryRun: cmdOpts.dryRun,
96
+ chunksOut: cmdOpts.chunksOut,
97
+ embeddingsOut: cmdOpts.embeddingsOut,
98
+ logger,
99
+ };
100
+ logger.info("šŸš€ Virage");
101
+ try {
102
+ await runOnce(runOptions);
103
+ }
104
+ catch (error) {
105
+ handleError(error);
106
+ }
107
+ if (!cmdOpts.watch)
108
+ return;
109
+ // Watch mode
110
+ const { default: chokidar } = await import("chokidar");
111
+ const cfg = await loadConfig(cmdOpts.config, logger).catch(() => null);
112
+ const patterns = cfg
113
+ ? cfg.chunkers.flatMap((c) => c.patterns)
114
+ : [];
115
+ const watched = [cmdOpts.config, ...patterns];
116
+ logger.info("šŸ‘ļø Watching for changes...");
117
+ let debounce = null;
118
+ chokidar
119
+ .watch(watched, { ignoreInitial: true })
120
+ .on("all", (event, path) => {
121
+ if (debounce)
122
+ clearTimeout(debounce);
123
+ debounce = setTimeout(async () => {
124
+ logger.info(`šŸ”„ Change detected (${event}: ${path}), re-running...`);
125
+ try {
126
+ await runOnce(runOptions);
127
+ }
128
+ catch (error) {
129
+ logger.error(error instanceof Error ? error.message : String(error));
130
+ }
131
+ }, 500);
132
+ });
133
+ });
134
+ program
135
+ .command("init")
136
+ .description("Generate a virage.config.json template interactively")
137
+ .action(async () => {
138
+ try {
139
+ await runInit();
140
+ }
141
+ catch (error) {
142
+ if (error.name === "ExitPromptError") {
143
+ console.log("\nCancelled.");
144
+ process.exit(0);
145
+ }
146
+ handleError(error);
147
+ }
148
+ });
149
+ program
150
+ .command("validate")
151
+ .description("Validate config without running the pipeline")
152
+ .option("-c, --config <path>", "Path to config file", "./virage.config.json")
153
+ .action(async (opts) => {
154
+ try {
155
+ await runValidate(opts.config);
156
+ }
157
+ catch (error) {
158
+ handleError(error);
159
+ }
160
+ });
161
+ program
162
+ .command("evaluate")
163
+ .description("Evaluate retrieval quality against an eval dataset")
164
+ .option("-c, --config <path>", "Path to config file", "./virage.config.json")
165
+ .option("-d, --dataset <path>", "Eval dataset path", "./eval/queries.json")
166
+ .option("--with-llm-judge", "Enable RAGAS LLM-as-judge metrics")
167
+ .option("--threshold-mrr <n>", "Fail if MRR is below this threshold", parseFloat)
168
+ .option("--ci", "Exit with code 1 if quality gate fails")
169
+ .action(async (opts) => {
170
+ try {
171
+ await runEvaluate({
172
+ config: opts.config,
173
+ dataset: opts.dataset,
174
+ withLlmJudge: opts.withLlmJudge ?? false,
175
+ thresholdMrr: opts.thresholdMrr,
176
+ ci: opts.ci ?? false,
177
+ });
178
+ }
179
+ catch (error) {
180
+ handleError(error);
181
+ }
182
+ });
183
+ program
184
+ .command("report")
185
+ .description("Show observability report from telemetry files")
186
+ .option("--dir <path>", "Directory containing telemetry.json files", getVirageDir())
187
+ .action(async (opts) => {
188
+ try {
189
+ await runReport(opts.dir);
190
+ }
191
+ catch (error) {
192
+ handleError(error);
193
+ }
194
+ });
195
+ program
196
+ .command("eval-generate")
197
+ .description("Generate an eval dataset from existing chunks")
198
+ .option("--chunks <path>", "Chunks file path", defaultChunksFile())
199
+ .option("--output <path>", "Output dataset path", "./eval/queries.json")
200
+ .option("--include-negatives", "Add negative examples")
201
+ .option("--paraphrase-ratio <n>", "Fraction of queries to paraphrase (requires LLM judge)", parseFloat, 0)
202
+ .action(async (opts) => {
203
+ try {
204
+ const { readFile } = await import("fs/promises");
205
+ const raw = JSON.parse(await readFile(opts.chunks, "utf-8"));
206
+ const chunks = Array.isArray(raw)
207
+ ? raw
208
+ : (raw.chunks ?? []);
209
+ const { generateEvalDataset } = await import("@vivantel/virage-core");
210
+ await generateEvalDataset(chunks, {
211
+ includeNegatives: opts.includeNegatives ?? false,
212
+ paraphraseRatio: opts.paraphraseRatio,
213
+ }, opts.output);
214
+ }
215
+ catch (error) {
216
+ handleError(error);
217
+ }
218
+ });
219
+ const viz = program.command("viz").description("Visualization tools");
220
+ viz
221
+ .command("embeddings")
222
+ .description("Generate a 2D visualization of the embedding space")
223
+ .option("--embeddings <path>", "Embeddings DB path", defaultEmbeddingsDb())
224
+ .option("--output <path>", "Output HTML file", "umap.html")
225
+ .option("--projection <type>", "Projection type: umap or tsne", "umap")
226
+ .action(async (opts) => {
227
+ try {
228
+ await runVizEmbeddings({
229
+ dbPath: opts.embeddings,
230
+ output: opts.output,
231
+ projection: opts.projection,
232
+ });
233
+ }
234
+ catch (error) {
235
+ handleError(error);
236
+ }
237
+ });
238
+ const chunks = program.command("chunks").description("Chunk analysis tools");
239
+ chunks
240
+ .command("report")
241
+ .description("Show chunk cohesion report")
242
+ .option("--file <path>", "Chunks file path", defaultChunksFile())
243
+ .action(async (opts) => {
244
+ try {
245
+ await runChunksReport(opts.file);
246
+ }
247
+ catch (error) {
248
+ handleError(error);
249
+ }
250
+ });
251
+ program
252
+ .command("dashboard")
253
+ .description("Start a local RAG monitoring dashboard")
254
+ .option("--port <n>", "Port to serve on", parseInt, 3000)
255
+ .option("--chunks <path>", "Chunks file path", defaultChunksFile())
256
+ .option("--embeddings <path>", "Embeddings DB path", defaultEmbeddingsDb())
257
+ .action(async (opts) => {
258
+ try {
259
+ await runDashboard({
260
+ port: opts.port,
261
+ chunksFile: opts.chunks,
262
+ dbPath: opts.embeddings,
263
+ });
264
+ }
265
+ catch (error) {
266
+ handleError(error);
267
+ }
268
+ });
269
+ const benchmark = program
270
+ .command("benchmark")
271
+ .description("Performance benchmarking tools");
272
+ benchmark
273
+ .command("embedder")
274
+ .description("Benchmark a local HuggingFace embedding model")
275
+ .option("--model <id>", "HuggingFace model ID", "Xenova/all-MiniLM-L6-v2")
276
+ .option("--device <device>", "'cpu' or 'webgpu'", "cpu")
277
+ .action(async (opts) => {
278
+ try {
279
+ await runBenchmarkEmbedder({
280
+ model: opts.model,
281
+ device: opts.device,
282
+ });
283
+ }
284
+ catch (error) {
285
+ handleError(error);
286
+ }
287
+ });
288
+ const store = program.command("store").description("Vector store diagnostics");
289
+ store
290
+ .command("stats")
291
+ .description("Show vector index quality metrics")
292
+ .option("-c, --config <path>", "Path to config file", "./virage.config.json")
293
+ .action(async (opts) => {
294
+ try {
295
+ await runStoreStats({ config: opts.config });
296
+ }
297
+ catch (error) {
298
+ handleError(error);
299
+ }
300
+ });
301
+ store
302
+ .command("perf")
303
+ .description("Show query performance report")
304
+ .option("-c, --config <path>", "Path to config file", "./virage.config.json")
305
+ .option("--timeframe <hours>", "Timeframe in hours", parseInt, 24)
306
+ .action(async (opts) => {
307
+ try {
308
+ await runStorePerf({
309
+ config: opts.config,
310
+ timeframeHours: opts.timeframe,
311
+ });
312
+ }
313
+ catch (error) {
314
+ handleError(error);
315
+ }
316
+ });
317
+ const experiment = program
318
+ .command("experiment")
319
+ .description("Experiment tracking and statistical comparison");
320
+ experiment
321
+ .command("run")
322
+ .description("Run an experiment and save results")
323
+ .requiredOption("--name <name>", "Experiment name")
324
+ .option("-c, --config <path>", "Path to config file", "./virage.config.json")
325
+ .option("-d, --dataset <path>", "Eval dataset path", "./eval/queries.json")
326
+ .action(async (opts) => {
327
+ try {
328
+ await runExperimentRun({
329
+ name: opts.name,
330
+ config: opts.config,
331
+ dataset: opts.dataset,
332
+ });
333
+ }
334
+ catch (error) {
335
+ handleError(error);
336
+ }
337
+ });
338
+ experiment
339
+ .command("list")
340
+ .description("List saved experiment runs")
341
+ .action(async () => {
342
+ try {
343
+ await runExperimentList();
344
+ }
345
+ catch (error) {
346
+ handleError(error);
347
+ }
348
+ });
349
+ experiment
350
+ .command("compare")
351
+ .description("Compare two experiment runs with bootstrap significance test")
352
+ .requiredOption("--baseline <id>", "Baseline run name or id")
353
+ .requiredOption("--candidate <id>", "Candidate run name or id")
354
+ .action(async (opts) => {
355
+ try {
356
+ await runExperimentCompare({
357
+ baseline: opts.baseline,
358
+ candidate: opts.candidate,
359
+ });
360
+ }
361
+ catch (error) {
362
+ handleError(error);
363
+ }
364
+ });
365
+ program.parse(argv);
366
+ //# sourceMappingURL=virage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"virage.js","sourceRoot":"","sources":["../../src/bin/virage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export interface BenchmarkEmbedderOptions {
2
+ model: string;
3
+ device: "cpu" | "webgpu";
4
+ }
5
+ export declare function runBenchmarkEmbedder(opts: BenchmarkEmbedderOptions): Promise<void>;
6
+ //# sourceMappingURL=benchmark.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"benchmark.d.ts","sourceRoot":"","sources":["../../src/cli/benchmark.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,KAAK,GAAG,QAAQ,CAAC;CAC1B;AAED,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,wBAAwB,GAC7B,OAAO,CAAC,IAAI,CAAC,CAyCf"}
@@ -0,0 +1,26 @@
1
+ export async function runBenchmarkEmbedder(opts) {
2
+ console.log(`šŸ”¬ Benchmarking embedder: ${opts.model}`);
3
+ console.log(` Device: ${opts.device}`);
4
+ let benchmarkEmbedder;
5
+ try {
6
+ const pkg = "@vivantel/virage-embedder-transformers";
7
+ const mod = await import(pkg);
8
+ benchmarkEmbedder = mod.benchmarkEmbedder;
9
+ }
10
+ catch {
11
+ console.error("āŒ @vivantel/virage-embedder-transformers is not installed.\n" +
12
+ " Install it with: npm install @vivantel/virage-embedder-transformers");
13
+ process.exit(1);
14
+ }
15
+ console.log("ā³ Running benchmark (this may take a moment for model download)...\n");
16
+ const result = await benchmarkEmbedder(opts.model, { device: opts.device });
17
+ console.log("šŸ“Š Benchmark Results");
18
+ console.log("─".repeat(40));
19
+ console.log(` Model : ${result.model}`);
20
+ console.log(` Dimensions : ${result.dimensions}`);
21
+ console.log(` Tokens/sec : ${result.tokensPerSec.toLocaleString()}`);
22
+ console.log(` Memory delta : ${result.memoryMB} MB`);
23
+ console.log(` First query latency: ${result.firstQueryLatencyMs} ms`);
24
+ console.log("─".repeat(40));
25
+ }
26
+ //# sourceMappingURL=benchmark.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"benchmark.js","sourceRoot":"","sources":["../../src/cli/benchmark.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,IAA8B;IAE9B,OAAO,CAAC,GAAG,CAAC,6BAA6B,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAEzC,IAAI,iBASF,CAAC;IAEH,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,wCAAwC,CAAC;QACrD,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,CAAC;QAC9B,iBAAiB,GAAG,GAAG,CAAC,iBAA6C,CAAC;IACxE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,KAAK,CACX,8DAA8D;YAC5D,wEAAwE,CAC3E,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,GAAG,CACT,sEAAsE,CACvE,CAAC;IAEF,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAE5E,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;IACpC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5B,OAAO,CAAC,GAAG,CAAC,0BAA0B,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,0BAA0B,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;IAC3D,OAAO,CAAC,GAAG,CAAC,0BAA0B,MAAM,CAAC,YAAY,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;IAC9E,OAAO,CAAC,GAAG,CAAC,0BAA0B,MAAM,CAAC,QAAQ,KAAK,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,CAAC,0BAA0B,MAAM,CAAC,mBAAmB,KAAK,CAAC,CAAC;IACvE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function runChunksReport(chunksFile: string): Promise<void>;
2
+ //# sourceMappingURL=chunks-report.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunks-report.d.ts","sourceRoot":"","sources":["../../src/cli/chunks-report.ts"],"names":[],"mappings":"AAmCA,wBAAsB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA+DvE"}
@@ -0,0 +1,74 @@
1
+ import { readFile } from "fs/promises";
2
+ function isChunkArray(val) {
3
+ return (Array.isArray(val) &&
4
+ val.length > 0 &&
5
+ typeof val[0].content === "string");
6
+ }
7
+ function computeCohesion(chunks) {
8
+ const sentenceEnd = /[.!?\n]\s*$/;
9
+ const midSentence = chunks.filter((c) => !sentenceEnd.test(c.content));
10
+ const cohesion = 1 - midSentence.length / chunks.length;
11
+ const suggestion = cohesion < 0.5
12
+ ? `Low cohesion — consider switching to 'semantic' strategy for better sentence boundaries`
13
+ : cohesion < 0.8
14
+ ? `Moderate cohesion — increase maxTokens or use 'markdown-headers' for structured content`
15
+ : "Good cohesion";
16
+ return { cohesion, midSentenceCuts: midSentence.length, suggestion };
17
+ }
18
+ export async function runChunksReport(chunksFile) {
19
+ let raw;
20
+ try {
21
+ raw = await readFile(chunksFile, "utf-8");
22
+ }
23
+ catch {
24
+ console.error(`āŒ Could not read chunks file "${chunksFile}".\n` +
25
+ ` Run the pipeline first to generate chunks.`);
26
+ process.exit(1);
27
+ }
28
+ let parsed;
29
+ try {
30
+ parsed = JSON.parse(raw);
31
+ }
32
+ catch {
33
+ console.error(`āŒ "${chunksFile}" is not valid JSON`);
34
+ process.exit(1);
35
+ }
36
+ // chunks.json can be a bare array or an object with a chunks property
37
+ let chunks;
38
+ if (isChunkArray(parsed)) {
39
+ chunks = parsed;
40
+ }
41
+ else if (parsed &&
42
+ typeof parsed === "object" &&
43
+ "chunks" in parsed &&
44
+ isChunkArray(parsed.chunks)) {
45
+ chunks = parsed.chunks;
46
+ }
47
+ else {
48
+ console.error(`āŒ Unexpected chunks file format in "${chunksFile}"`);
49
+ process.exit(1);
50
+ }
51
+ // Group by strategy
52
+ const byStrategy = new Map();
53
+ for (const chunk of chunks) {
54
+ const strategy = chunk.metadata?.strategy ?? "unknown";
55
+ const group = byStrategy.get(strategy) ?? [];
56
+ group.push(chunk);
57
+ byStrategy.set(strategy, group);
58
+ }
59
+ console.log(`\nšŸ“Š Chunk Cohesion Report (${chunks.length} total chunks)`);
60
+ console.log("─".repeat(60));
61
+ for (const [strategy, group] of byStrategy) {
62
+ const sizes = group.map((c) => c.content.length);
63
+ const avgSize = Math.round(sizes.reduce((s, v) => s + v, 0) / sizes.length);
64
+ const { cohesion, midSentenceCuts, suggestion } = computeCohesion(group);
65
+ console.log(`\n Strategy: ${strategy}`);
66
+ console.log(` Chunks : ${group.length}`);
67
+ console.log(` Avg size : ${avgSize} chars`);
68
+ console.log(` Cohesion : ${(cohesion * 100).toFixed(1)}%`);
69
+ console.log(` Mid-sentence cuts: ${midSentenceCuts}`);
70
+ console.log(` šŸ’” ${suggestion}`);
71
+ }
72
+ console.log("\n" + "─".repeat(60));
73
+ }
74
+ //# sourceMappingURL=chunks-report.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunks-report.js","sourceRoot":"","sources":["../../src/cli/chunks-report.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export interface DashboardOptions {
2
+ port: number;
3
+ chunksFile: string;
4
+ dbPath: string;
5
+ }
6
+ export declare function runDashboard(opts: DashboardOptions): Promise<void>;
7
+ //# sourceMappingURL=dashboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../src/cli/dashboard.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AA6CD,wBAAsB,YAAY,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwDxE"}