@equinor/fusion-framework-cli-plugin-ai-index 2.0.1 → 3.0.0

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 (78) hide show
  1. package/CHANGELOG.md +66 -0
  2. package/dist/esm/bin/apply-metadata.js +15 -5
  3. package/dist/esm/bin/apply-metadata.js.map +1 -1
  4. package/dist/esm/bin/apply-schema.js +64 -0
  5. package/dist/esm/bin/apply-schema.js.map +1 -0
  6. package/dist/esm/bin/apply-schema.test.js +143 -0
  7. package/dist/esm/bin/apply-schema.test.js.map +1 -0
  8. package/dist/esm/bin/delete-removed-files.js +1 -1
  9. package/dist/esm/bin/delete-removed-files.js.map +1 -1
  10. package/dist/esm/bin/embed.js +265 -55
  11. package/dist/esm/bin/embed.js.map +1 -1
  12. package/dist/esm/bin/get-diff.js +5 -0
  13. package/dist/esm/bin/get-diff.js.map +1 -1
  14. package/dist/esm/create-command.js +186 -0
  15. package/dist/esm/create-command.js.map +1 -0
  16. package/dist/esm/delete-command.js +14 -2
  17. package/dist/esm/delete-command.js.map +1 -1
  18. package/dist/esm/delete-command.options.js +7 -31
  19. package/dist/esm/delete-command.options.js.map +1 -1
  20. package/dist/esm/delete-index-command.js +94 -0
  21. package/dist/esm/delete-index-command.js.map +1 -0
  22. package/dist/esm/embed-command.js +30 -0
  23. package/dist/esm/embed-command.js.map +1 -0
  24. package/dist/esm/embeddings-command.js +14 -17
  25. package/dist/esm/embeddings-command.js.map +1 -1
  26. package/dist/esm/embeddings-command.options.js +12 -43
  27. package/dist/esm/embeddings-command.options.js.map +1 -1
  28. package/dist/esm/index.js +12 -3
  29. package/dist/esm/index.js.map +1 -1
  30. package/dist/esm/schema.js +41 -0
  31. package/dist/esm/schema.js.map +1 -0
  32. package/dist/esm/search-command.js +17 -5
  33. package/dist/esm/search-command.js.map +1 -1
  34. package/dist/esm/utils/embedding-dimensions.js +37 -0
  35. package/dist/esm/utils/embedding-dimensions.js.map +1 -0
  36. package/dist/esm/utils/zod-to-azure-fields.js +120 -0
  37. package/dist/esm/utils/zod-to-azure-fields.js.map +1 -0
  38. package/dist/esm/utils/zod-to-azure-fields.test.js +112 -0
  39. package/dist/esm/utils/zod-to-azure-fields.test.js.map +1 -0
  40. package/dist/esm/version.js +1 -1
  41. package/dist/tsconfig.tsbuildinfo +1 -1
  42. package/dist/types/bin/apply-metadata.d.ts +2 -1
  43. package/dist/types/bin/apply-schema.d.ts +22 -0
  44. package/dist/types/bin/apply-schema.test.d.ts +1 -0
  45. package/dist/types/config.d.ts +14 -0
  46. package/dist/types/create-command.d.ts +6 -0
  47. package/dist/types/delete-command.options.d.ts +10 -23
  48. package/dist/types/delete-index-command.d.ts +6 -0
  49. package/dist/types/embed-command.d.ts +12 -0
  50. package/dist/types/embeddings-command.options.d.ts +10 -28
  51. package/dist/types/index.d.ts +1 -0
  52. package/dist/types/schema.d.ts +137 -0
  53. package/dist/types/utils/embedding-dimensions.d.ts +13 -0
  54. package/dist/types/utils/zod-to-azure-fields.d.ts +61 -0
  55. package/dist/types/utils/zod-to-azure-fields.test.d.ts +1 -0
  56. package/dist/types/version.d.ts +1 -1
  57. package/package.json +5 -5
  58. package/src/bin/apply-metadata.ts +20 -4
  59. package/src/bin/apply-schema.test.ts +170 -0
  60. package/src/bin/apply-schema.ts +86 -0
  61. package/src/bin/delete-removed-files.ts +1 -1
  62. package/src/bin/embed.ts +325 -77
  63. package/src/bin/get-diff.ts +5 -0
  64. package/src/config.ts +15 -0
  65. package/src/create-command.ts +218 -0
  66. package/src/delete-command.options.ts +7 -37
  67. package/src/delete-command.ts +19 -2
  68. package/src/delete-index-command.ts +121 -0
  69. package/src/embed-command.ts +44 -0
  70. package/src/embeddings-command.options.ts +12 -50
  71. package/src/embeddings-command.ts +18 -18
  72. package/src/index.ts +12 -3
  73. package/src/schema.ts +149 -0
  74. package/src/search-command.ts +22 -5
  75. package/src/utils/embedding-dimensions.ts +39 -0
  76. package/src/utils/zod-to-azure-fields.test.ts +136 -0
  77. package/src/utils/zod-to-azure-fields.ts +177 -0
  78. package/src/version.ts +1 -1
@@ -1,22 +1,158 @@
1
1
  import { globbyStream } from 'globby';
2
2
  import { relative } from 'node:path';
3
3
  import multimatch from 'multimatch';
4
- import { concat, from, merge, timer } from 'rxjs';
5
- import { concatMap, filter, map, mergeMap, retry, shareReplay, toArray } from 'rxjs/operators';
4
+ import { from, merge, timer } from 'rxjs';
5
+ import { bufferCount, bufferTime, concatMap, filter, finalize, map, mergeMap, retry, shareReplay, tap, } from 'rxjs/operators';
6
6
  import { isMarkdownFile, parseMarkdownFile } from '../utils/markdown/index.js';
7
7
  import { getFileStatus, resolveProjectRoot } from '../utils/git/index.js';
8
8
  import { isTypescriptFile, parseTsDocFromFileSync } from '../utils/ts-doc/index.js';
9
9
  import { getDiff } from './get-diff.js';
10
10
  import { createDeleteRemovedFilesStream } from './delete-removed-files.js';
11
11
  import { applyMetadata } from './apply-metadata.js';
12
+ import { applySchema } from './apply-schema.js';
12
13
  import { readFileSync } from 'node:fs';
13
14
  import { generateChunkId } from '../utils/generate-chunk-id.js';
15
+ /** Braille spinner frames (same as ora's default). */
16
+ const SPINNER_FRAMES = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
17
+ /** Whether the process is running in a non-interactive environment (CI). */
18
+ const IS_CI = !process.stdout.isTTY || Boolean(process.env.CI);
19
+ /**
20
+ * Manages a fixed block of sticky progress lines with per-line spinners.
21
+ * Each line can be updated independently without overwriting the others.
22
+ *
23
+ * In non-interactive environments (CI) the ANSI cursor-movement dance is
24
+ * replaced with simple `console.log` lines so the output is readable in
25
+ * plain-text log viewers.
26
+ * @internal
27
+ */
28
+ class ProgressDisplay {
29
+ lines = [];
30
+ spinning = [];
31
+ started = false;
32
+ frame = 0;
33
+ timer;
34
+ /** Tracks last CI log time per line to throttle output. */
35
+ lastCiLog = [];
36
+ /** Minimum interval (ms) between CI progress lines for the same line slot. */
37
+ static CI_LOG_INTERVAL_MS = 15_000;
38
+ /** Register the line labels up front and print empty placeholders. */
39
+ start(count) {
40
+ this.lines = new Array(count).fill('');
41
+ this.spinning = new Array(count).fill(false);
42
+ this.lastCiLog = new Array(count).fill(0);
43
+ if (!IS_CI) {
44
+ // Print placeholder lines so the cursor block exists
45
+ for (let i = 0; i < count; i++) {
46
+ process.stdout.write('\n');
47
+ }
48
+ // Tick spinner at 80ms (same cadence as ora)
49
+ this.timer = setInterval(() => this.tick(), 80);
50
+ }
51
+ this.started = true;
52
+ }
53
+ /** Update a specific line (0-indexed) without touching the others. */
54
+ update(line, message) {
55
+ if (!this.started)
56
+ return;
57
+ this.lines[line] = message;
58
+ this.spinning[line] = true;
59
+ if (IS_CI) {
60
+ const now = Date.now();
61
+ if (now - this.lastCiLog[line] >= ProgressDisplay.CI_LOG_INTERVAL_MS) {
62
+ this.lastCiLog[line] = now;
63
+ console.log(`⏳ ${message}`);
64
+ }
65
+ return;
66
+ }
67
+ this.render(line);
68
+ }
69
+ /** Mark a line as completed — stops its spinner and shows a checkmark. */
70
+ succeed(line, message) {
71
+ if (!this.started)
72
+ return;
73
+ const text = `✅ ${message}`;
74
+ this.lines[line] = text;
75
+ this.spinning[line] = false;
76
+ if (IS_CI) {
77
+ console.log(text);
78
+ return;
79
+ }
80
+ this.render(line);
81
+ }
82
+ /** Clear all progress lines and leave the cursor on a clean line. */
83
+ clear() {
84
+ if (!this.started)
85
+ return;
86
+ if (this.timer)
87
+ clearInterval(this.timer);
88
+ if (!IS_CI) {
89
+ // Move up to the first progress line and clear each one
90
+ for (let i = 0; i < this.lines.length; i++) {
91
+ const linesUp = this.lines.length - i;
92
+ process.stdout.write(`\x1b[${linesUp}A\x1b[2K\r\x1b[${linesUp}B\r`);
93
+ }
94
+ // Move cursor up past the now-empty block
95
+ process.stdout.write(`\x1b[${this.lines.length}A\r`);
96
+ }
97
+ this.started = false;
98
+ }
99
+ /** Advance the spinner frame and re-render all spinning lines. */
100
+ tick() {
101
+ this.frame = (this.frame + 1) % SPINNER_FRAMES.length;
102
+ for (let i = 0; i < this.lines.length; i++) {
103
+ if (this.spinning[i] && this.lines[i]) {
104
+ this.render(i);
105
+ }
106
+ }
107
+ }
108
+ /** Render a single line at its position. */
109
+ render(line) {
110
+ const linesUp = this.lines.length - line;
111
+ const prefix = this.spinning[line] ? SPINNER_FRAMES[this.frame] : '';
112
+ const text = this.spinning[line] ? `${prefix} ${this.lines[line]}` : this.lines[line];
113
+ process.stdout.write(`\x1b[${linesUp}A\x1b[2K\r${text}\x1b[${linesUp}B\r`);
114
+ }
115
+ }
116
+ /** Progress line indices */
117
+ const LINE_PARSE = 0;
118
+ const LINE_META = 1;
119
+ const LINE_EMBED = 2;
120
+ const LINE_INDEX = 3;
14
121
  /**
15
122
  * Default directories to skip before expensive git operations.
16
123
  * These are common build artifacts and dependencies that should be ignored.
17
124
  * @internal
18
125
  */
19
126
  const defaultIgnore = ['node_modules', '**/node_modules/**', 'dist', '**/dist/**', '.git'];
127
+ /** Concurrency limit for git subprocess operations (status, log, etc.). */
128
+ const GIT_CONCURRENCY = 20;
129
+ /** Maximum parallel upsert requests to the vector store. */
130
+ const UPSERT_CONCURRENCY = 10;
131
+ /**
132
+ * Number of texts to embed per API request.
133
+ *
134
+ * Azure OpenAI accepts up to 2 048 inputs per embedding call.
135
+ * LangChain's `batchSize` default is 1 (!) so we also set it on the
136
+ * client constructor. This outer batch controls how many documents
137
+ * are grouped before handing them to the embed client.
138
+ */
139
+ const EMBED_BATCH_SIZE = 500;
140
+ /**
141
+ * Number of concurrent embedding API requests in flight.
142
+ *
143
+ * Each request now carries EMBED_BATCH_SIZE texts in a single HTTP call
144
+ * (LangChain batchSize is aligned), so 2 concurrent requests already
145
+ * saturate most Azure OpenAI TPM quotas.
146
+ */
147
+ const EMBED_BATCH_CONCURRENCY = 2;
148
+ /**
149
+ * Maximum time (ms) to wait before flushing a partial embedding batch.
150
+ * Without this, `bufferCount` waits indefinitely for a full batch, which
151
+ * starves `mergeMap` concurrency when upstream document throughput is slow.
152
+ */
153
+ const EMBED_BUFFER_FLUSH_MS = 500;
154
+ /** Maximum retry attempts for transient / rate-limit errors per chunk. */
155
+ const MAX_RETRIES = 4;
20
156
  /**
21
157
  * Main entry point for the embeddings bin.
22
158
  * Orchestrates the entire embeddings generation pipeline.
@@ -24,9 +160,21 @@ const defaultIgnore = ['node_modules', '**/node_modules/**', 'dist', '**/dist/**
24
160
  */
25
161
  export async function embed(binOptions) {
26
162
  const { framework, options, config, filePatterns } = binOptions;
27
- console.log(`📇 Index: ${options.azureSearchIndexName}`);
163
+ const debug = options.debug ?? false;
164
+ console.log(`📇 Index: ${options.indexName}`);
165
+ if (debug) {
166
+ console.debug('[debug] Embed model:', options.embedModel);
167
+ console.debug('[debug] File patterns:', filePatterns);
168
+ console.debug('[debug] Allowed patterns:', config.index?.patterns ?? ['**/*.ts', '**/*.tsx', '**/*.md', '**/*.mdx']);
169
+ console.debug('[debug] Raw patterns:', config.index?.rawPatterns ?? []);
170
+ console.debug('[debug] Ignore patterns:', config.index?.ignore ?? defaultIgnore);
171
+ console.debug('[debug] Diff mode:', options.diff);
172
+ console.debug('[debug] Dry run:', options.dryRun);
173
+ console.debug('[debug] Clean:', options.clean);
174
+ }
175
+ const progress = new ProgressDisplay();
28
176
  // Handle clean operation (destructive - deletes all existing documents)
29
- const vectorStoreService = framework.ai.getService('search', options.azureSearchIndexName);
177
+ const vectorStoreService = framework.ai.useIndex(options.indexName);
30
178
  if (options.clean && !options.dryRun) {
31
179
  console.log('🧹 Cleaning vector store: deleting all existing documents...');
32
180
  // OData filter: delete all documents with non-empty source (all indexed docs)
@@ -55,8 +203,8 @@ export async function embed(binOptions) {
55
203
  gitignore,
56
204
  absolute: true,
57
205
  })).pipe(
58
- // Get git status concurrently, then flatten array results
59
- mergeMap((path) => getFileStatus(path)), concatMap((files) => from(files)),
206
+ // Get git status concurrently (capped to avoid spawning too many git processes)
207
+ mergeMap((path) => getFileStatus(path), GIT_CONCURRENCY), concatMap((files) => from(files)),
60
208
  // Share stream for multiple subscribers (removedFiles$ and indexFiles$)
61
209
  shareReplay({ refCount: true }));
62
210
  })();
@@ -68,6 +216,7 @@ export async function embed(binOptions) {
68
216
  '**/*.mdx',
69
217
  ];
70
218
  // Process files: enrich with metadata and filter by allowed patterns
219
+ let fileCount = 0;
71
220
  const processedFiles$ = files$.pipe(map((file) => {
72
221
  const { filepath, status } = file;
73
222
  const projectRoot = resolveProjectRoot(filepath);
@@ -80,7 +229,14 @@ export async function embed(binOptions) {
80
229
  };
81
230
  }), filter((file) => {
82
231
  const matches = multimatch(file.relativePath, allowedFilePatterns);
232
+ if (debug && matches.length === 0) {
233
+ console.debug('[debug] Skipped (no pattern match):', file.relativePath);
234
+ }
83
235
  return matches.length > 0;
236
+ }), tap((file) => {
237
+ fileCount++;
238
+ const label = file.status === 'removed' ? '🗑️' : '📄';
239
+ progress.update(LINE_PARSE, `${label} Parsing [${fileCount}] ${file.relativePath}`);
84
240
  }),
85
241
  // Share for multiple subscribers (removedFiles$, markdown$, typescript$)
86
242
  shareReplay({ refCount: true }));
@@ -99,6 +255,7 @@ export async function embed(binOptions) {
99
255
  }
100
256
  return false;
101
257
  };
258
+ let docCount = 0;
102
259
  const rawFiles$ = indexFiles$.pipe(filter(isRawFile), map((file) => {
103
260
  const document = {
104
261
  id: generateChunkId(file.relativePath),
@@ -108,64 +265,101 @@ export async function embed(binOptions) {
108
265
  type: 'raw',
109
266
  },
110
267
  };
268
+ docCount++;
269
+ progress.update(LINE_PARSE, `📄 Parsing [${docCount}] ${file.relativePath}`);
111
270
  return { status: file.status, documents: [document] };
112
271
  }));
113
272
  const markdown$ = indexFiles$.pipe(filter((x) => !isRawFile(x)), filter((file) => isMarkdownFile(file.path)), mergeMap(async (file) => {
114
273
  const documents = await parseMarkdownFile(file);
274
+ docCount++;
275
+ if (debug) {
276
+ console.debug(`[debug] Markdown ${file.relativePath} → ${documents.length} chunk(s)`);
277
+ }
278
+ progress.update(LINE_PARSE, `📄 Parsing [${docCount}] ${file.relativePath}`);
115
279
  return { status: file.status, documents };
116
280
  }));
117
281
  const typescript$ = indexFiles$.pipe(filter((x) => !isRawFile(x)), filter((file) => isTypescriptFile(file.path)), map((file) => {
118
282
  const documents = parseTsDocFromFileSync(file);
283
+ docCount++;
284
+ if (debug) {
285
+ console.debug(`[debug] TypeScript ${file.relativePath} → ${documents.length} chunk(s)`);
286
+ }
287
+ progress.update(LINE_PARSE, `📄 Parsing [${docCount}] ${file.relativePath}`);
119
288
  return { status: file.status, documents };
120
289
  }));
290
+ // Merge parsed streams and signal when all parsing is done
291
+ const parsed$ = merge(rawFiles$, markdown$, typescript$).pipe(finalize(() => {
292
+ progress.succeed(LINE_PARSE, `📄 Parsed ${docCount} files`);
293
+ }));
121
294
  // Apply metadata to documents
122
- const applyMetadata$ = applyMetadata(merge(rawFiles$, markdown$, typescript$), config.index);
123
- // Generate embeddings with concurrency limit and retry on rate-limit (429) errors
124
- const embeddingService = framework.ai.getService('embeddings', options.openaiEmbeddingDeployment);
125
- /** Maximum parallel embedding requests to avoid hitting Azure OpenAI TPM limits. */
126
- const EMBEDDING_CONCURRENCY = 5;
127
- /** Maximum retry attempts for transient / rate-limit errors per chunk. */
128
- const MAX_RETRIES = 4;
129
- const applyEmbedding$ = applyMetadata$.pipe(mergeMap((documents) => from(documents).pipe(
130
- // Limit concurrency to avoid overwhelming the embedding API
131
- mergeMap((document) => from(embeddingService.embedQuery(document.pageContent)).pipe(retry({
132
- count: MAX_RETRIES,
133
- delay: (error, retryIndex) => {
134
- // Parse Retry-After header when available (Azure sends seconds)
135
- const retryAfterSec = error?.response?.headers?.get?.('retry-after') ??
136
- error?.responseHeaders?.['retry-after'];
137
- const retryAfterMs = retryAfterSec ? Number(retryAfterSec) * 1000 : 0;
138
- // Exponential backoff: 2s, 4s, 8s, 16s — or Retry-After if larger
139
- const backoffMs = 2 ** retryIndex * 1000;
140
- const delayMs = Math.max(backoffMs, retryAfterMs);
141
- console.warn(`⏳ Retry ${retryIndex}/${MAX_RETRIES} for "${document.metadata.source}" in ${delayMs}ms`);
142
- return timer(delayMs);
143
- },
144
- }), map((embeddings) => {
145
- console.log('embedding document', document.metadata.source);
146
- const metadata = { ...document.metadata, embedding: embeddings };
147
- return { ...document, metadata };
148
- })), EMBEDDING_CONCURRENCY), toArray())));
149
- // Update vector store
150
- const upsert$ = applyEmbedding$.pipe(mergeMap(async (documents) => {
151
- const vectorStoreService = framework.ai.getService('search', options.azureSearchIndexName);
295
+ let metadataCount = 0;
296
+ let metadataDone = false;
297
+ const applyMetadata$ = applyMetadata(parsed$, config.index, (source) => {
298
+ metadataCount++;
299
+ progress.update(LINE_META, `🏷️ Metadata [${metadataCount}] ${source}`);
300
+ }).pipe(finalize(() => {
301
+ metadataDone = true;
302
+ progress.succeed(LINE_META, `🏷️ Metadata ${metadataCount} documents`);
303
+ }));
304
+ // Resolve promoted schema fields (if schema is configured) runs after
305
+ // metadata enrichment so the resolver has access to git, package, and
306
+ // custom attributes from attributeProcessor
307
+ const applySchema$ = applySchema(applyMetadata$, config.index?.schema);
308
+ // Generate embeddings in batches with retry on rate-limit (429) errors
309
+ const embeddingService = framework.ai.useEmbed(options.embedModel);
310
+ let embeddedCount = 0;
311
+ let embeddingDone = false;
312
+ const applyEmbedding$ = applySchema$.pipe(
313
+ // Flatten all documents from file-level batches, then re-batch for the API
314
+ concatMap((documents) => from(documents)),
315
+ // Flush when EMBED_BATCH_SIZE docs accumulate OR after EMBED_BUFFER_FLUSH_MS,
316
+ // whichever comes first — prevents upstream starvation from blocking concurrency
317
+ bufferTime(EMBED_BUFFER_FLUSH_MS, null, EMBED_BATCH_SIZE), filter((batch) => batch.length > 0), mergeMap((batch) => {
318
+ if (debug) {
319
+ console.debug(`[debug] Embedding batch of ${batch.length} documents`);
320
+ }
321
+ return from(embeddingService.embedDocuments(batch.map((d) => d.pageContent))).pipe(retry({
322
+ count: MAX_RETRIES,
323
+ delay: (error, retryIndex) => {
324
+ // Auth errors are terminal — abort immediately with actionable message
325
+ if (error?.name === 'NoAccountsError') {
326
+ console.error('\n🔒 Authentication expired. Run `ffc auth login` then retry with `--diff`.');
327
+ throw error;
328
+ }
329
+ const retryAfterSec = error?.response?.headers?.get?.('retry-after') ??
330
+ error?.responseHeaders?.['retry-after'];
331
+ const retryAfterMs = retryAfterSec ? Number(retryAfterSec) * 1000 : 0;
332
+ const backoffMs = 2 ** retryIndex * 1000;
333
+ const delayMs = Math.max(backoffMs, retryAfterMs);
334
+ console.warn(`\n⏳ Retry ${retryIndex}/${MAX_RETRIES} for batch of ${batch.length} in ${delayMs}ms`);
335
+ return timer(delayMs);
336
+ },
337
+ }), map((allEmbeddings) => {
338
+ return batch.map((document, i) => {
339
+ embeddedCount++;
340
+ const total = metadataDone ? metadataCount : 0;
341
+ const pct = total > 0 ? ` ${Math.round((embeddedCount / total) * 100)}%` : '';
342
+ const denominator = total > 0 ? `/${total}` : '';
343
+ progress.update(LINE_EMBED, `🧠 Embedding [${embeddedCount}${denominator}]${pct} — ${document.metadata.source}`);
344
+ const metadata = { ...document.metadata, embedding: allEmbeddings[i] };
345
+ return { ...document, metadata };
346
+ });
347
+ }));
348
+ }, EMBED_BATCH_CONCURRENCY), finalize(() => {
349
+ embeddingDone = true;
350
+ progress.succeed(LINE_EMBED, `🧠 Embedded ${embeddedCount} documents`);
351
+ }));
352
+ // Update vector store — batch documents and upsert concurrently
353
+ const upsert$ = applyEmbedding$.pipe(
354
+ // Flatten file-level batches, then re-batch into groups of 20 for bulk upsert
355
+ concatMap((documents) => from(documents)), bufferCount(20), mergeMap(async (documents) => {
356
+ const vectorStoreService = framework.ai.useIndex(options.indexName);
152
357
  if (documents.length === 0) {
153
358
  return undefined;
154
359
  }
155
- for (const document of documents) {
156
- console.log(`Adding entry [${document.id}] to vector store`, document.metadata.source);
157
- }
158
360
  if (!options.dryRun) {
159
- // For multiple chunks from same file, delete existing chunks first
160
- if (documents.length > 1) {
161
- const sources = documents
162
- .map((document) => document.metadata.source)
163
- .reduce((acc, source) => acc.add(source), new Set());
164
- const filterExpression = Array.from(sources)
165
- .map((source) => `metadata/source eq '${source}'`)
166
- .join(' or ');
167
- // Fire-and-forget deletion (not awaited) - brief gap before new docs are indexed
168
- vectorStoreService.deleteDocuments({ filter: { filterExpression } });
361
+ if (debug) {
362
+ console.debug(`[debug] Upserting batch of ${documents.length} documents:`, documents.map((d) => d.id));
169
363
  }
170
364
  await vectorStoreService.addDocuments(documents);
171
365
  }
@@ -173,16 +367,19 @@ export async function embed(binOptions) {
173
367
  status: 'added',
174
368
  documents,
175
369
  };
176
- }), filter((result) => Boolean(result)));
370
+ }, UPSERT_CONCURRENCY), filter((result) => Boolean(result)));
177
371
  // Execute pipeline
178
372
  // Track indexing results for reporting: deleted file paths and added document IDs
373
+ let indexedCount = 0;
179
374
  const indexingResults = {
180
375
  deleted: [],
181
376
  added: [],
182
377
  };
183
- // Execute pipeline: concat ensures deletions happen before additions
184
- // This subscription triggers lazy RxJS execution and tracks all results
185
- concat(delete$, upsert$).subscribe({
378
+ // Execute pipeline: merge runs deletions and additions concurrently so
379
+ // the embedding pipeline can start as soon as metadata-enriched documents
380
+ // are available, without waiting for all file discovery to complete.
381
+ progress.start(4);
382
+ merge(delete$, upsert$).subscribe({
186
383
  next: (result) => {
187
384
  // Track deleted files by relative path
188
385
  if (result.status === 'deleted') {
@@ -194,6 +391,12 @@ export async function embed(binOptions) {
194
391
  source: document.metadata.source,
195
392
  id: document.id,
196
393
  })));
394
+ indexedCount += result.documents.length;
395
+ // Use embeddedCount as denominator — only show % once embedding is done
396
+ const total = embeddingDone ? embeddedCount : 0;
397
+ const pct = total > 0 ? ` ${Math.round((indexedCount / total) * 100)}%` : '';
398
+ const denominator = total > 0 ? `/${total}` : '';
399
+ progress.update(LINE_INDEX, `📤 Indexed [${indexedCount}${denominator}]${pct}`);
197
400
  }
198
401
  },
199
402
  error: (error) => {
@@ -201,8 +404,15 @@ export async function embed(binOptions) {
201
404
  process.exit(1);
202
405
  },
203
406
  complete: () => {
204
- // Pipeline completed - log results and exit
205
- console.log('🗂️ Indexing results:', indexingResults);
407
+ // Clear the progress block before final output
408
+ progress.clear();
409
+ // Pipeline completed - log summary
410
+ if (indexingResults.deleted.length > 0) {
411
+ console.log(`🗑️ Deleted: ${indexingResults.deleted.length} files`);
412
+ }
413
+ if (indexingResults.added.length > 0) {
414
+ console.log(`📥 Indexed: ${indexingResults.added.length} documents`);
415
+ }
206
416
  console.log('✅ Embeddings generation completed!');
207
417
  process.exit(0);
208
418
  },
@@ -1 +1 @@
1
- {"version":3,"file":"embed.js","sourceRoot":"","sources":["../../../src/bin/embed.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"embed.js","sourceRoot":"","sources":["../../../src/bin/embed.ts"],"names":[],"mappings":"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"}
@@ -19,6 +19,11 @@ export async function getDiff(options) {
19
19
  process.exit(0);
20
20
  }
21
21
  console.log(`📝 Found ${changedFiles.length} changed files matching patterns`);
22
+ if (options.debug) {
23
+ for (const file of changedFiles) {
24
+ console.debug(`[debug] ${file.status}: ${file.filepath}`);
25
+ }
26
+ }
22
27
  return changedFiles;
23
28
  }
24
29
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"get-diff.js","sourceRoot":"","sources":["../../../src/bin/get-diff.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAGtE;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,OAAuB;IACnD,IAAI,CAAC;QACH,kDAAkD;QAClD,MAAM,SAAS,GAAG,MAAM,YAAY,EAAE,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,kBAAkB,SAAS,CAAC,MAAM,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;QACtE,OAAO,CAAC,GAAG,CAAC,eAAe,SAAS,CAAC,WAAW,YAAY,SAAS,CAAC,aAAa,WAAW,CAAC,CAAC;QAEhG,iEAAiE;QACjE,MAAM,YAAY,GAAG,MAAM,eAAe,CAAC;YACzC,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,OAAO,EAAE,OAAO,CAAC,OAAO;SACzB,CAAC,CAAC;QAEH,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC;YACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,YAAY,YAAY,CAAC,MAAM,kCAAkC,CAAC,CAAC;QAC/E,OAAO,YAAY,CAAC;IACtB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,qBAAqB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;QAC/F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"get-diff.js","sourceRoot":"","sources":["../../../src/bin/get-diff.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAGtE;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,OAAuB;IACnD,IAAI,CAAC;QACH,kDAAkD;QAClD,MAAM,SAAS,GAAG,MAAM,YAAY,EAAE,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,kBAAkB,SAAS,CAAC,MAAM,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;QACtE,OAAO,CAAC,GAAG,CAAC,eAAe,SAAS,CAAC,WAAW,YAAY,SAAS,CAAC,aAAa,WAAW,CAAC,CAAC;QAEhG,iEAAiE;QACjE,MAAM,YAAY,GAAG,MAAM,eAAe,CAAC;YACzC,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,OAAO,EAAE,OAAO,CAAC,OAAO;SACzB,CAAC,CAAC;QAEH,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC;YACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,YAAY,YAAY,CAAC,MAAM,kCAAkC,CAAC,CAAC;QAC/E,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;gBAChC,OAAO,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;QACD,OAAO,YAAY,CAAC;IACtB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,qBAAqB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;QAC/F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}