rag-lite-ts 1.0.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 (123) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +240 -0
  3. package/dist/api-errors.d.ts +90 -0
  4. package/dist/api-errors.d.ts.map +1 -0
  5. package/dist/api-errors.js +320 -0
  6. package/dist/api-errors.js.map +1 -0
  7. package/dist/chunker.d.ts +47 -0
  8. package/dist/chunker.d.ts.map +1 -0
  9. package/dist/chunker.js +256 -0
  10. package/dist/chunker.js.map +1 -0
  11. package/dist/cli/indexer.d.ts +11 -0
  12. package/dist/cli/indexer.d.ts.map +1 -0
  13. package/dist/cli/indexer.js +272 -0
  14. package/dist/cli/indexer.js.map +1 -0
  15. package/dist/cli/search.d.ts +7 -0
  16. package/dist/cli/search.d.ts.map +1 -0
  17. package/dist/cli/search.js +206 -0
  18. package/dist/cli/search.js.map +1 -0
  19. package/dist/cli.d.ts +3 -0
  20. package/dist/cli.d.ts.map +1 -0
  21. package/dist/cli.js +362 -0
  22. package/dist/cli.js.map +1 -0
  23. package/dist/config.d.ts +90 -0
  24. package/dist/config.d.ts.map +1 -0
  25. package/dist/config.js +281 -0
  26. package/dist/config.js.map +1 -0
  27. package/dist/db.d.ts +90 -0
  28. package/dist/db.d.ts.map +1 -0
  29. package/dist/db.js +340 -0
  30. package/dist/db.js.map +1 -0
  31. package/dist/embedder.d.ts +101 -0
  32. package/dist/embedder.d.ts.map +1 -0
  33. package/dist/embedder.js +323 -0
  34. package/dist/embedder.js.map +1 -0
  35. package/dist/error-handler.d.ts +91 -0
  36. package/dist/error-handler.d.ts.map +1 -0
  37. package/dist/error-handler.js +196 -0
  38. package/dist/error-handler.js.map +1 -0
  39. package/dist/file-processor.d.ts +59 -0
  40. package/dist/file-processor.d.ts.map +1 -0
  41. package/dist/file-processor.js +312 -0
  42. package/dist/file-processor.js.map +1 -0
  43. package/dist/index-manager.d.ts +99 -0
  44. package/dist/index-manager.d.ts.map +1 -0
  45. package/dist/index-manager.js +444 -0
  46. package/dist/index-manager.js.map +1 -0
  47. package/dist/index.d.ts +13 -0
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.js +21 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/indexer.d.ts +7 -0
  52. package/dist/indexer.d.ts.map +1 -0
  53. package/dist/indexer.js +51 -0
  54. package/dist/indexer.js.map +1 -0
  55. package/dist/ingestion.d.ts +175 -0
  56. package/dist/ingestion.d.ts.map +1 -0
  57. package/dist/ingestion.js +705 -0
  58. package/dist/ingestion.js.map +1 -0
  59. package/dist/mcp-server.d.ts +14 -0
  60. package/dist/mcp-server.d.ts.map +1 -0
  61. package/dist/mcp-server.js +680 -0
  62. package/dist/mcp-server.js.map +1 -0
  63. package/dist/path-manager.d.ts +42 -0
  64. package/dist/path-manager.d.ts.map +1 -0
  65. package/dist/path-manager.js +66 -0
  66. package/dist/path-manager.js.map +1 -0
  67. package/dist/preprocess.d.ts +19 -0
  68. package/dist/preprocess.d.ts.map +1 -0
  69. package/dist/preprocess.js +203 -0
  70. package/dist/preprocess.js.map +1 -0
  71. package/dist/preprocessors/index.d.ts +17 -0
  72. package/dist/preprocessors/index.d.ts.map +1 -0
  73. package/dist/preprocessors/index.js +38 -0
  74. package/dist/preprocessors/index.js.map +1 -0
  75. package/dist/preprocessors/mdx.d.ts +25 -0
  76. package/dist/preprocessors/mdx.d.ts.map +1 -0
  77. package/dist/preprocessors/mdx.js +101 -0
  78. package/dist/preprocessors/mdx.js.map +1 -0
  79. package/dist/preprocessors/mermaid.d.ts +68 -0
  80. package/dist/preprocessors/mermaid.d.ts.map +1 -0
  81. package/dist/preprocessors/mermaid.js +329 -0
  82. package/dist/preprocessors/mermaid.js.map +1 -0
  83. package/dist/preprocessors/registry.d.ts +56 -0
  84. package/dist/preprocessors/registry.d.ts.map +1 -0
  85. package/dist/preprocessors/registry.js +179 -0
  86. package/dist/preprocessors/registry.js.map +1 -0
  87. package/dist/reranker.d.ts +40 -0
  88. package/dist/reranker.d.ts.map +1 -0
  89. package/dist/reranker.js +212 -0
  90. package/dist/reranker.js.map +1 -0
  91. package/dist/resource-manager-demo.d.ts +7 -0
  92. package/dist/resource-manager-demo.d.ts.map +1 -0
  93. package/dist/resource-manager-demo.js +52 -0
  94. package/dist/resource-manager-demo.js.map +1 -0
  95. package/dist/resource-manager.d.ts +129 -0
  96. package/dist/resource-manager.d.ts.map +1 -0
  97. package/dist/resource-manager.js +389 -0
  98. package/dist/resource-manager.js.map +1 -0
  99. package/dist/search-standalone.d.ts +7 -0
  100. package/dist/search-standalone.d.ts.map +1 -0
  101. package/dist/search-standalone.js +117 -0
  102. package/dist/search-standalone.js.map +1 -0
  103. package/dist/search.d.ts +92 -0
  104. package/dist/search.d.ts.map +1 -0
  105. package/dist/search.js +454 -0
  106. package/dist/search.js.map +1 -0
  107. package/dist/test-utils.d.ts +36 -0
  108. package/dist/test-utils.d.ts.map +1 -0
  109. package/dist/test-utils.js +27 -0
  110. package/dist/test-utils.js.map +1 -0
  111. package/dist/tokenizer.d.ts +21 -0
  112. package/dist/tokenizer.d.ts.map +1 -0
  113. package/dist/tokenizer.js +59 -0
  114. package/dist/tokenizer.js.map +1 -0
  115. package/dist/types.d.ts +44 -0
  116. package/dist/types.d.ts.map +1 -0
  117. package/dist/types.js +3 -0
  118. package/dist/types.js.map +1 -0
  119. package/dist/vector-index.d.ts +64 -0
  120. package/dist/vector-index.d.ts.map +1 -0
  121. package/dist/vector-index.js +308 -0
  122. package/dist/vector-index.js.map +1 -0
  123. package/package.json +80 -0
@@ -0,0 +1,444 @@
1
+ import { VectorIndex } from './vector-index.js';
2
+ import { openDatabase, getModelVersion, setModelVersion, getStoredModelInfo, setStoredModelInfo } from './db.js';
3
+ import { config, getModelDefaults } from './config.js';
4
+ export class IndexManager {
5
+ modelName;
6
+ vectorIndex;
7
+ db = null;
8
+ indexPath;
9
+ dbPath;
10
+ isInitialized = false;
11
+ hashToEmbeddingId = new Map();
12
+ embeddingIdToHash = new Map();
13
+ constructor(indexPath, dbPath, dimensions, modelName) {
14
+ this.modelName = modelName;
15
+ this.indexPath = indexPath;
16
+ this.dbPath = dbPath;
17
+ // Initialize with provided dimensions from config
18
+ this.vectorIndex = new VectorIndex(indexPath, {
19
+ dimensions: dimensions,
20
+ maxElements: 100000, // Start with 100k capacity
21
+ efConstruction: 200,
22
+ M: 16
23
+ });
24
+ }
25
+ /**
26
+ * Initialize the index manager and load existing index if available
27
+ * @param skipModelCheck - Skip model compatibility check (used for rebuilds)
28
+ */
29
+ async initialize(skipModelCheck = false) {
30
+ if (this.isInitialized) {
31
+ return;
32
+ }
33
+ try {
34
+ // Open database connection
35
+ this.db = await openDatabase(this.dbPath);
36
+ // Check model compatibility BEFORE trying to load the vector index
37
+ // This prevents WebAssembly exceptions when dimensions don't match
38
+ if (!skipModelCheck) {
39
+ await this.checkModelCompatibility();
40
+ }
41
+ if (this.vectorIndex.indexExists()) {
42
+ console.log('Loading existing vector index...');
43
+ await this.vectorIndex.loadIndex();
44
+ }
45
+ else {
46
+ console.log('Creating new vector index...');
47
+ await this.vectorIndex.initialize();
48
+ }
49
+ // Always populate the embedding ID mapping from existing database entries
50
+ // This is needed both for new and existing indexes
51
+ const existingChunks = await this.db.all('SELECT embedding_id FROM chunks ORDER BY id');
52
+ for (const chunk of existingChunks) {
53
+ this.hashEmbeddingId(chunk.embedding_id); // This will populate the mapping
54
+ }
55
+ this.isInitialized = true;
56
+ console.log(`Index manager initialized with ${this.vectorIndex.getCurrentCount()} vectors`);
57
+ }
58
+ catch (error) {
59
+ throw new Error(`Failed to initialize index manager: ${error}`);
60
+ }
61
+ }
62
+ /**
63
+ * Check model compatibility between stored and current configuration
64
+ * Requirements: 2.1, 2.2, 2.4, 5.1, 5.2, 5.3, 5.4
65
+ */
66
+ async checkModelCompatibility() {
67
+ if (!this.db) {
68
+ throw new Error('Database not initialized');
69
+ }
70
+ try {
71
+ // Get stored model information
72
+ const storedModel = await getStoredModelInfo(this.db);
73
+ const currentModel = this.modelName || config.embedding_model;
74
+ const currentDefaults = getModelDefaults(currentModel);
75
+ if (storedModel) {
76
+ // Check if models match
77
+ if (storedModel.modelName !== currentModel) {
78
+ throw new Error(`Model mismatch detected!\n` +
79
+ `Current model: ${currentModel} (${currentDefaults.dimensions} dimensions)\n` +
80
+ `Index model: ${storedModel.modelName} (${storedModel.dimensions} dimensions)\n` +
81
+ `\n` +
82
+ `The embedding model has changed since the index was created.\n` +
83
+ `This requires a full index rebuild to maintain consistency.\n` +
84
+ `\n` +
85
+ `To fix this issue:\n` +
86
+ `1. Run: npm run rebuild\n` +
87
+ `2. Or run: node dist/cli.js rebuild\n` +
88
+ `\n` +
89
+ `This will regenerate all embeddings with the new model.`);
90
+ }
91
+ // Check if dimensions match (additional safety check)
92
+ if (storedModel.dimensions !== currentDefaults.dimensions) {
93
+ throw new Error(`Model dimension mismatch detected!\n` +
94
+ `Current model dimensions: ${currentDefaults.dimensions}\n` +
95
+ `Index model dimensions: ${storedModel.dimensions}\n` +
96
+ `\n` +
97
+ `This indicates a configuration inconsistency.\n` +
98
+ `Please run: npm run rebuild`);
99
+ }
100
+ console.log(`Model compatibility verified: ${currentModel} (${currentDefaults.dimensions} dimensions)`);
101
+ }
102
+ else {
103
+ // First run - store the model info
104
+ console.log(`No model info stored yet - storing current model info: ${currentModel}`);
105
+ await setStoredModelInfo(this.db, currentModel, currentDefaults.dimensions);
106
+ }
107
+ }
108
+ catch (error) {
109
+ if (error instanceof Error) {
110
+ throw error; // Re-throw our formatted errors
111
+ }
112
+ throw new Error(`Failed to check model compatibility: ${error}`);
113
+ }
114
+ }
115
+ /**
116
+ * Add vectors to the index with corresponding metadata (incremental addition)
117
+ * Requirements: 5.3 - When new documents are added THEN system SHALL append new chunks and vectors without rebuilding existing index
118
+ */
119
+ async addVectors(embeddings) {
120
+ if (!this.isInitialized) {
121
+ throw new Error('Index manager not initialized');
122
+ }
123
+ if (embeddings.length === 0) {
124
+ return;
125
+ }
126
+ try {
127
+ // Convert embedding IDs to numeric IDs for hnswlib
128
+ const vectors = embeddings.map((embedding) => ({
129
+ id: this.hashEmbeddingId(embedding.embedding_id),
130
+ vector: embedding.vector
131
+ }));
132
+ // Check if we need to resize the index before adding
133
+ const currentCount = this.vectorIndex.getCurrentCount();
134
+ const newCount = currentCount + vectors.length;
135
+ const currentCapacity = 100000; // This should match the initial capacity
136
+ if (newCount > currentCapacity * 0.9) {
137
+ const newCapacity = Math.ceil(newCount * 1.5);
138
+ console.log(`Resizing index from ${currentCapacity} to ${newCapacity} to accommodate new vectors`);
139
+ this.vectorIndex.resizeIndex(newCapacity);
140
+ }
141
+ // Add vectors incrementally (this is the key requirement - no rebuild needed)
142
+ this.vectorIndex.addVectors(vectors);
143
+ console.log(`Incrementally added ${embeddings.length} vectors to index (total: ${this.vectorIndex.getCurrentCount()})`);
144
+ // Save the updated index
145
+ await this.saveIndex();
146
+ }
147
+ catch (error) {
148
+ throw new Error(`Failed to add vectors to index: ${error instanceof Error ? error.message : 'Unknown error'}`);
149
+ }
150
+ }
151
+ /**
152
+ * Rebuild the entire index from scratch
153
+ * Requirements: 5.2, 5.4 - Create full index rebuild functionality for model changes or document deletions
154
+ */
155
+ async rebuildIndex(newModelVersion) {
156
+ if (!this.db) {
157
+ throw new Error('Database not initialized');
158
+ }
159
+ console.log('Starting full index rebuild...');
160
+ try {
161
+ // Initialize new empty index (this will overwrite existing index)
162
+ await this.vectorIndex.initialize();
163
+ // Get all chunk embedding IDs from database (we'll need to regenerate embeddings)
164
+ const chunkData = await this.getAllChunksFromDB();
165
+ if (chunkData.length === 0) {
166
+ console.log('No chunks found in database - index rebuild complete with 0 vectors');
167
+ // Update model version if provided
168
+ if (newModelVersion) {
169
+ await this.updateModelVersion(newModelVersion);
170
+ }
171
+ await this.saveIndex();
172
+ return;
173
+ }
174
+ console.log(`Found ${chunkData.length} chunks in database that need re-embedding`);
175
+ // Note: In a complete implementation, we would need to:
176
+ // 1. Re-generate embeddings for all chunks using the new model
177
+ // 2. Add the new vectors to the index
178
+ // For now, we'll create a placeholder implementation that shows the structure
179
+ console.warn('WARNING: Full rebuild requires re-generating embeddings for all chunks.');
180
+ console.warn('This implementation requires integration with the EmbeddingEngine.');
181
+ console.warn('The index has been reset but vectors need to be regenerated.');
182
+ // Check if we need to resize index based on chunk count
183
+ const currentCapacity = 100000; // Default capacity
184
+ if (chunkData.length > currentCapacity * 0.8) {
185
+ const newCapacity = Math.ceil(chunkData.length * 1.5);
186
+ this.vectorIndex.resizeIndex(newCapacity);
187
+ console.log(`Resized index capacity to ${newCapacity} for ${chunkData.length} chunks`);
188
+ }
189
+ // Update model version if provided
190
+ if (newModelVersion) {
191
+ await this.updateModelVersion(newModelVersion);
192
+ }
193
+ // Save the (empty) rebuilt index structure
194
+ await this.saveIndex();
195
+ console.log(`Index rebuild structure complete. ${chunkData.length} chunks need re-embedding.`);
196
+ }
197
+ catch (error) {
198
+ throw new Error(`Failed to rebuild index: ${error instanceof Error ? error.message : 'Unknown error'}`);
199
+ }
200
+ }
201
+ /**
202
+ * Trigger a full rebuild when documents are modified or deleted
203
+ * Requirements: 5.4 - When documents are modified or deleted THEN system SHALL trigger full index rebuild
204
+ */
205
+ async triggerRebuildForDocumentChanges(reason) {
206
+ console.log(`Triggering index rebuild due to: ${reason}`);
207
+ await this.rebuildIndex();
208
+ }
209
+ /**
210
+ * Complete rebuild workflow with embedding regeneration
211
+ * This method should be called by higher-level components that have access to the EmbeddingEngine
212
+ * Requirements: 5.2, 5.4 - Full index rebuild functionality
213
+ */
214
+ async rebuildWithEmbeddings(embeddingEngine) {
215
+ if (!this.db) {
216
+ throw new Error('Database not initialized');
217
+ }
218
+ console.log('Starting complete index rebuild with embedding regeneration...');
219
+ try {
220
+ // Get all chunks that need re-embedding
221
+ const chunkData = await this.getAllChunksFromDB();
222
+ if (chunkData.length === 0) {
223
+ console.log('No chunks found - initializing empty index');
224
+ await this.vectorIndex.initialize();
225
+ await this.updateModelVersion(embeddingEngine.getModelVersion());
226
+ // Store model info for the new model
227
+ const currentModel = this.modelName || config.embedding_model;
228
+ const currentDefaults = getModelDefaults(currentModel);
229
+ await setStoredModelInfo(this.db, currentModel, currentDefaults.dimensions);
230
+ await this.saveIndex();
231
+ return;
232
+ }
233
+ // Initialize new empty index
234
+ await this.vectorIndex.initialize();
235
+ // Check if we need to resize index
236
+ const currentCapacity = 100000;
237
+ if (chunkData.length > currentCapacity * 0.8) {
238
+ const newCapacity = Math.ceil(chunkData.length * 1.5);
239
+ this.vectorIndex.resizeIndex(newCapacity);
240
+ console.log(`Resized index capacity to ${newCapacity}`);
241
+ }
242
+ // Re-generate embeddings for all chunks
243
+ console.log(`Re-generating embeddings for ${chunkData.length} chunks...`);
244
+ const texts = chunkData.map(chunk => chunk.text);
245
+ const newEmbeddings = await embeddingEngine.embedDocumentBatch(texts);
246
+ if (newEmbeddings.length === 0) {
247
+ throw new Error('Failed to generate any embeddings during rebuild');
248
+ }
249
+ // Add all vectors to the new index
250
+ const vectors = newEmbeddings.map((embedding) => ({
251
+ id: this.hashEmbeddingId(embedding.embedding_id),
252
+ vector: embedding.vector
253
+ }));
254
+ this.vectorIndex.addVectors(vectors);
255
+ console.log(`Added ${vectors.length} vectors to rebuilt index`);
256
+ // Update model version
257
+ await this.updateModelVersion(embeddingEngine.getModelVersion());
258
+ // Store model info for the new model
259
+ const currentModel = this.modelName || config.embedding_model;
260
+ const currentDefaults = getModelDefaults(currentModel);
261
+ await setStoredModelInfo(this.db, currentModel, currentDefaults.dimensions);
262
+ // Save the rebuilt index
263
+ await this.saveIndex();
264
+ console.log(`Index rebuild complete: ${vectors.length} vectors with new model version`);
265
+ }
266
+ catch (error) {
267
+ throw new Error(`Failed to rebuild index with embeddings: ${error instanceof Error ? error.message : 'Unknown error'}`);
268
+ }
269
+ }
270
+ /**
271
+ * Check if the current model version matches stored version
272
+ * Requirements: 5.1, 5.2 - Compare current embedding model version with stored version
273
+ */
274
+ async checkModelVersion(currentVersion) {
275
+ if (!this.db) {
276
+ throw new Error('Database not initialized');
277
+ }
278
+ try {
279
+ const storedVersion = await getModelVersion(this.db);
280
+ if (!storedVersion || storedVersion === "") {
281
+ // No version stored yet, this is first run - store current version
282
+ await setModelVersion(this.db, currentVersion);
283
+ console.log(`Stored initial model version: ${currentVersion}`);
284
+ return true;
285
+ }
286
+ const matches = storedVersion === currentVersion;
287
+ if (!matches) {
288
+ console.error(`Model version mismatch detected!`);
289
+ console.error(`Stored version: ${storedVersion}`);
290
+ console.error(`Current version: ${currentVersion}`);
291
+ console.error(`A full index rebuild is required before the system can continue.`);
292
+ }
293
+ return matches;
294
+ }
295
+ catch (error) {
296
+ throw new Error(`Failed to check model version: ${error instanceof Error ? error.message : 'Unknown error'}`);
297
+ }
298
+ }
299
+ /**
300
+ * Update the stored model version after successful rebuild
301
+ * Requirements: 5.5 - Save model name and hash in SQLite for version tracking
302
+ */
303
+ async updateModelVersion(version) {
304
+ if (!this.db) {
305
+ throw new Error('Database not initialized');
306
+ }
307
+ try {
308
+ await setModelVersion(this.db, version);
309
+ console.log(`Updated model version to: ${version}`);
310
+ }
311
+ catch (error) {
312
+ throw new Error(`Failed to update model version: ${error instanceof Error ? error.message : 'Unknown error'}`);
313
+ }
314
+ }
315
+ /**
316
+ * Validate model version and exit if mismatch detected
317
+ * Requirements: 5.2 - System SHALL exit with error message until full index rebuild is completed
318
+ */
319
+ async validateModelVersionOrExit(currentVersion) {
320
+ const isValid = await this.checkModelVersion(currentVersion);
321
+ if (!isValid) {
322
+ console.error('\n=== MODEL VERSION MISMATCH ===');
323
+ console.error('The embedding model version has changed since the last index build.');
324
+ console.error('This requires a full index rebuild to maintain consistency.');
325
+ console.error('\nTo rebuild the index, run:');
326
+ console.error(' npm run rebuild-index');
327
+ console.error(' # or');
328
+ console.error(' node dist/cli.js rebuild');
329
+ console.error('\nThe system will now exit.');
330
+ process.exit(1);
331
+ }
332
+ }
333
+ /**
334
+ * Save the vector index to disk
335
+ */
336
+ async saveIndex() {
337
+ if (!this.isInitialized) {
338
+ throw new Error('Index manager not initialized');
339
+ }
340
+ await this.vectorIndex.saveIndex();
341
+ }
342
+ /**
343
+ * Search for similar vectors
344
+ */
345
+ search(queryVector, k = 5) {
346
+ if (!this.isInitialized) {
347
+ throw new Error('Index manager not initialized');
348
+ }
349
+ const results = this.vectorIndex.search(queryVector, k);
350
+ // Convert numeric IDs back to embedding IDs
351
+ const embeddingIds = results.neighbors.map(id => this.unhashEmbeddingId(id));
352
+ return {
353
+ embeddingIds,
354
+ distances: results.distances
355
+ };
356
+ }
357
+ /**
358
+ * Get index statistics
359
+ */
360
+ async getStats() {
361
+ if (!this.db) {
362
+ throw new Error('Database not initialized');
363
+ }
364
+ const totalVectors = this.vectorIndex.getCurrentCount();
365
+ try {
366
+ const modelVersion = await getModelVersion(this.db);
367
+ return {
368
+ totalVectors,
369
+ modelVersion: modelVersion || 'unknown',
370
+ lastUpdated: new Date() // Could be enhanced to track actual last update time
371
+ };
372
+ }
373
+ catch (error) {
374
+ throw new Error(`Failed to get stats: ${error instanceof Error ? error.message : 'Unknown error'}`);
375
+ }
376
+ }
377
+ /**
378
+ * Get all chunks from database for rebuild (returns chunk data, not embeddings)
379
+ * Note: Embeddings need to be regenerated during rebuild since we don't store vectors in DB
380
+ */
381
+ async getAllChunksFromDB() {
382
+ if (!this.db) {
383
+ throw new Error('Database not initialized');
384
+ }
385
+ try {
386
+ const rows = await this.db.all('SELECT embedding_id, text, document_id FROM chunks ORDER BY id');
387
+ return rows.map(row => ({
388
+ embedding_id: row.embedding_id,
389
+ text: row.text,
390
+ document_id: row.document_id
391
+ }));
392
+ }
393
+ catch (error) {
394
+ throw new Error(`Failed to get chunks from DB: ${error instanceof Error ? error.message : 'Unknown error'}`);
395
+ }
396
+ }
397
+ /**
398
+ * Convert embedding ID string to numeric ID for hnswlib with collision handling
399
+ */
400
+ hashEmbeddingId(embeddingId) {
401
+ // Check if we already have a mapping for this embedding ID
402
+ if (this.embeddingIdToHash.has(embeddingId)) {
403
+ return this.embeddingIdToHash.get(embeddingId);
404
+ }
405
+ let hash = 0;
406
+ for (let i = 0; i < embeddingId.length; i++) {
407
+ const char = embeddingId.charCodeAt(i);
408
+ hash = ((hash << 5) - hash) + char;
409
+ hash = hash & hash; // Convert to 32-bit integer
410
+ }
411
+ hash = Math.abs(hash);
412
+ // Handle hash collisions by incrementing until we find an unused hash
413
+ let finalHash = hash;
414
+ while (this.hashToEmbeddingId.has(finalHash) && this.hashToEmbeddingId.get(finalHash) !== embeddingId) {
415
+ finalHash = (finalHash + 1) & 0x7FFFFFFF; // Keep it positive
416
+ }
417
+ // Store the bidirectional mapping
418
+ this.embeddingIdToHash.set(embeddingId, finalHash);
419
+ this.hashToEmbeddingId.set(finalHash, embeddingId);
420
+ return finalHash;
421
+ }
422
+ /**
423
+ * Convert numeric ID back to embedding ID using the maintained mapping
424
+ */
425
+ unhashEmbeddingId(numericId) {
426
+ const embeddingId = this.hashToEmbeddingId.get(numericId);
427
+ if (!embeddingId) {
428
+ console.warn(`Warning: No embedding ID found for hash ${numericId}. This may indicate index/database synchronization issues.`);
429
+ console.warn('Consider running "raglite rebuild" to fix synchronization problems.');
430
+ throw new Error(`No embedding ID found for hash ${numericId}`);
431
+ }
432
+ return embeddingId;
433
+ }
434
+ /**
435
+ * Close database connection
436
+ */
437
+ async close() {
438
+ if (this.db) {
439
+ await this.db.close();
440
+ this.db = null;
441
+ }
442
+ }
443
+ }
444
+ //# sourceMappingURL=index-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-manager.js","sourceRoot":"","sources":["../src/index-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export { SearchEngine } from './search.js';
2
+ export { IngestionPipeline } from './ingestion.js';
3
+ export { EmbeddingEngine, getEmbeddingEngine, initializeEmbeddingEngine } from './embedder.js';
4
+ export { config, validateConfig, getModelDefaults, type Config } from './config.js';
5
+ export { openDatabase, initializeSchema, insertDocument, insertChunk, getChunksByEmbeddingIds, getModelVersion, setModelVersion, type DatabaseConnection, type ChunkResult } from './db.js';
6
+ export { discoverFiles, processFiles, discoverAndProcessFiles, DEFAULT_FILE_PROCESSOR_OPTIONS, type FileProcessorOptions, type FileDiscoveryResult, type DocumentProcessingResult } from './file-processor.js';
7
+ export { countTokens } from './tokenizer.js';
8
+ export { VectorIndex } from './vector-index.js';
9
+ export { IndexManager } from './index-manager.js';
10
+ export { ResourceManager } from './resource-manager.js';
11
+ export { APIError, IngestionError, SearchError, ResourceError, ModelCompatibilityError, ErrorFactory, CommonErrors, handleAPIError } from './api-errors.js';
12
+ export type { SearchResult, SearchOptions, Chunk, Document, EmbeddingResult, Preprocessor, PreprocessorOptions, PreprocessingConfig } from './types.js';
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAGnD,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,yBAAyB,EAC1B,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,gBAAgB,EAAE,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AAGpF,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,cAAc,EACd,WAAW,EACX,uBAAuB,EACvB,eAAe,EACf,eAAe,EACf,KAAK,kBAAkB,EACvB,KAAK,WAAW,EACjB,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,aAAa,EACb,YAAY,EACZ,uBAAuB,EACvB,8BAA8B,EAC9B,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,EAC9B,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG7C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGxD,OAAO,EACL,QAAQ,EACR,cAAc,EACd,WAAW,EACX,aAAa,EACb,uBAAuB,EACvB,YAAY,EACZ,YAAY,EACZ,cAAc,EACf,MAAM,iBAAiB,CAAC;AAGzB,YAAY,EACV,YAAY,EACZ,aAAa,EACb,KAAK,EACL,QAAQ,EACR,eAAe,EACf,YAAY,EACZ,mBAAmB,EACnB,mBAAmB,EACpB,MAAM,YAAY,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,21 @@
1
+ // Main entry point for rag-lite-ts
2
+ // Core API classes (simple interface matching README)
3
+ export { SearchEngine } from './search.js';
4
+ export { IngestionPipeline } from './ingestion.js';
5
+ // Embedding operations (required for README examples)
6
+ export { EmbeddingEngine, getEmbeddingEngine, initializeEmbeddingEngine } from './embedder.js';
7
+ // Configuration (documented in README API reference)
8
+ export { config, validateConfig, getModelDefaults } from './config.js';
9
+ // Database operations (documented in README API reference)
10
+ export { openDatabase, initializeSchema, insertDocument, insertChunk, getChunksByEmbeddingIds, getModelVersion, setModelVersion } from './db.js';
11
+ // File processing operations (documented in README API reference)
12
+ export { discoverFiles, processFiles, discoverAndProcessFiles, DEFAULT_FILE_PROCESSOR_OPTIONS } from './file-processor.js';
13
+ // Tokenization (documented in README API reference)
14
+ export { countTokens } from './tokenizer.js';
15
+ // Advanced/Internal operations (for backward compatibility and advanced use cases)
16
+ export { VectorIndex } from './vector-index.js';
17
+ export { IndexManager } from './index-manager.js';
18
+ export { ResourceManager } from './resource-manager.js';
19
+ // Error handling
20
+ export { APIError, IngestionError, SearchError, ResourceError, ModelCompatibilityError, ErrorFactory, CommonErrors, handleAPIError } from './api-errors.js';
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,mCAAmC;AAEnC,sDAAsD;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEnD,sDAAsD;AACtD,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,yBAAyB,EAC1B,MAAM,eAAe,CAAC;AAEvB,qDAAqD;AACrD,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,gBAAgB,EAAe,MAAM,aAAa,CAAC;AAEpF,2DAA2D;AAC3D,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,cAAc,EACd,WAAW,EACX,uBAAuB,EACvB,eAAe,EACf,eAAe,EAGhB,MAAM,SAAS,CAAC;AAEjB,kEAAkE;AAClE,OAAO,EACL,aAAa,EACb,YAAY,EACZ,uBAAuB,EACvB,8BAA8B,EAI/B,MAAM,qBAAqB,CAAC;AAE7B,oDAAoD;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,mFAAmF;AACnF,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,iBAAiB;AACjB,OAAO,EACL,QAAQ,EACR,cAAc,EACd,WAAW,EACX,aAAa,EACb,uBAAuB,EACvB,YAAY,EACZ,YAAY,EACZ,cAAc,EACf,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Standalone indexer script for direct node execution
4
+ * Usage: node indexer.js <path>
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=indexer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexer.d.ts","sourceRoot":"","sources":["../src/indexer.ts"],"names":[],"mappings":";AAEA;;;GAGG"}
@@ -0,0 +1,51 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Standalone indexer script for direct node execution
4
+ * Usage: node indexer.js <path>
5
+ */
6
+ import { runIngest } from './cli/indexer.js';
7
+ import { EXIT_CODES, ConfigurationError } from './config.js';
8
+ async function main() {
9
+ const args = process.argv.slice(2);
10
+ if (args.length === 0) {
11
+ console.error('RAG-lite TS Document Indexer');
12
+ console.error('');
13
+ console.error('Usage: node indexer.js <path>');
14
+ console.error('');
15
+ console.error('Arguments:');
16
+ console.error(' <path> File or directory path to ingest (.md and .txt files)');
17
+ console.error('');
18
+ console.error('Examples:');
19
+ console.error(' node indexer.js ./docs/ # Ingest all .md/.txt files in docs/');
20
+ console.error(' node indexer.js ./readme.md # Ingest single file');
21
+ console.error(' node indexer.js ../project/docs/ # Ingest from parent directory');
22
+ console.error('');
23
+ console.error('Supported file types: .md (Markdown), .txt (Plain text)');
24
+ console.error('');
25
+ console.error('After ingestion, use: node search.js "your query"');
26
+ process.exit(EXIT_CODES.INVALID_ARGUMENTS);
27
+ }
28
+ if (args.length > 1) {
29
+ console.error('Error: Too many arguments provided');
30
+ console.error('');
31
+ console.error('Usage: node indexer.js <path>');
32
+ console.error('');
33
+ console.error('If your path contains spaces, wrap it in quotes:');
34
+ console.error(' node indexer.js "my documents folder"');
35
+ process.exit(EXIT_CODES.INVALID_ARGUMENTS);
36
+ }
37
+ const path = args[0];
38
+ await runIngest(path);
39
+ }
40
+ main().catch((error) => {
41
+ if (error instanceof ConfigurationError) {
42
+ console.error('Configuration Error:');
43
+ console.error(error.message);
44
+ process.exit(error.exitCode);
45
+ }
46
+ else {
47
+ console.error('Fatal Error:', error instanceof Error ? error.message : String(error));
48
+ process.exit(EXIT_CODES.GENERAL_ERROR);
49
+ }
50
+ });
51
+ //# sourceMappingURL=indexer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexer.js","sourceRoot":"","sources":["../src/indexer.ts"],"names":[],"mappings":";AAEA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAE7D,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEnC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAC9C,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;QAC/C,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAC5B,OAAO,CAAC,KAAK,CAAC,mEAAmE,CAAC,CAAC;QACnF,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC3B,OAAO,CAAC,KAAK,CAAC,0EAA0E,CAAC,CAAC;QAC1F,OAAO,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC;QAC1E,OAAO,CAAC,KAAK,CAAC,oEAAoE,CAAC,CAAC;QACpF,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,yDAAyD,CAAC,CAAC;QACzE,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;QACnE,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;IAC7C,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACpD,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;QAC/C,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;QAClE,OAAO,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;QACzD,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACrB,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;AACxB,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,IAAI,KAAK,YAAY,kBAAkB,EAAE,CAAC;QACxC,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;QACtC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC7B,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACtF,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;IACzC,CAAC;AACH,CAAC,CAAC,CAAC"}