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,44 @@
1
+ export interface SearchResult {
2
+ text: string;
3
+ score: number;
4
+ document: {
5
+ id: number;
6
+ source: string;
7
+ title: string;
8
+ };
9
+ }
10
+ export interface SearchOptions {
11
+ top_k?: number;
12
+ rerank?: boolean;
13
+ }
14
+ export interface Chunk {
15
+ text: string;
16
+ chunk_index: number;
17
+ }
18
+ export interface Document {
19
+ source: string;
20
+ title: string;
21
+ content: string;
22
+ }
23
+ export interface EmbeddingResult {
24
+ embedding_id: string;
25
+ vector: Float32Array;
26
+ }
27
+ export interface Preprocessor {
28
+ appliesTo(language: string): boolean;
29
+ process(content: string, options: PreprocessorOptions): string;
30
+ }
31
+ export interface PreprocessorOptions {
32
+ mode: 'strip' | 'keep' | 'placeholder' | 'extract';
33
+ [key: string]: any;
34
+ }
35
+ export interface PreprocessingConfig {
36
+ mode: 'strict' | 'balanced' | 'rich';
37
+ overrides?: {
38
+ mdx?: 'strip' | 'keep' | 'placeholder';
39
+ mermaid?: 'strip' | 'extract' | 'placeholder';
40
+ code?: 'strip' | 'keep' | 'placeholder';
41
+ };
42
+ }
43
+ export type { DatabaseConnection, ChunkResult } from './db.js';
44
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE;QACR,EAAE,EAAE,MAAM,CAAC;QACX,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,YAAY,CAAC;CACtB;AAGD,MAAM,WAAW,YAAY;IAC3B,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IACrC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,GAAG,MAAM,CAAC;CAChE;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,aAAa,GAAG,SAAS,CAAC;IACnD,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,QAAQ,GAAG,UAAU,GAAG,MAAM,CAAC;IACrC,SAAS,CAAC,EAAE;QACV,GAAG,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,aAAa,CAAC;QACvC,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,aAAa,CAAC;QAC9C,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,aAAa,CAAC;KACzC,CAAC;CACH;AAGD,YAAY,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC"}
package/dist/types.js ADDED
@@ -0,0 +1,3 @@
1
+ // Type definitions for rag-lite-ts
2
+ export {};
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,mCAAmC"}
@@ -0,0 +1,64 @@
1
+ export interface VectorIndexOptions {
2
+ dimensions: number;
3
+ maxElements: number;
4
+ efConstruction?: number;
5
+ M?: number;
6
+ seed?: number;
7
+ }
8
+ export interface SearchResult {
9
+ neighbors: number[];
10
+ distances: number[];
11
+ }
12
+ export declare class VectorIndex {
13
+ private index;
14
+ private hnswlib;
15
+ private indexPath;
16
+ private options;
17
+ private currentSize;
18
+ private vectorStorage;
19
+ constructor(indexPath: string, options: VectorIndexOptions);
20
+ /**
21
+ * Initialize the HNSW index with cosine similarity using hnswlib-wasm
22
+ */
23
+ initialize(): Promise<void>;
24
+ /**
25
+ * Load existing index from file using hnswlib-wasm
26
+ */
27
+ loadIndex(): Promise<void>;
28
+ /**
29
+ * Save index to file using JSON format (since IDBFS doesn't work in Node.js)
30
+ */
31
+ saveIndex(): Promise<void>;
32
+ /**
33
+ * Add a single vector to the HNSW index
34
+ */
35
+ addVector(embeddingId: number, vector: Float32Array): void;
36
+ /**
37
+ * Add multiple vectors to the index in batch
38
+ */
39
+ addVectors(vectors: Array<{
40
+ id: number;
41
+ vector: Float32Array;
42
+ }>): void;
43
+ /**
44
+ * Search for k nearest neighbors using hnswlib-wasm
45
+ */
46
+ search(queryVector: Float32Array, k?: number): SearchResult;
47
+ /**
48
+ * Get current number of vectors in the index
49
+ */
50
+ getCurrentCount(): number;
51
+ /**
52
+ * Check if index exists on disk
53
+ */
54
+ indexExists(): boolean;
55
+ /**
56
+ * Set search parameters for query time
57
+ */
58
+ setEf(ef: number): void;
59
+ /**
60
+ * Resize index to accommodate more vectors
61
+ */
62
+ resizeIndex(newMaxElements: number): void;
63
+ }
64
+ //# sourceMappingURL=vector-index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vector-index.d.ts","sourceRoot":"","sources":["../src/vector-index.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AA0BD,qBAAa,WAAW;IACtB,OAAO,CAAC,KAAK,CAAa;IAC1B,OAAO,CAAC,OAAO,CAAa;IAC5B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,aAAa,CAAwC;gBAEjD,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB;IAU1D;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAmEjC;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAwFhC;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IA6BhC;;OAEG;IACH,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI;IAmB1D;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,YAAY,CAAA;KAAE,CAAC,GAAG,IAAI;IAMtE;;OAEG;IACH,MAAM,CAAC,WAAW,EAAE,YAAY,EAAE,CAAC,GAAE,MAAU,GAAG,YAAY;IAwB9D;;OAEG;IACH,eAAe,IAAI,MAAM;IAIzB;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;OAEG;IACH,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAkBvB;;OAEG;IACH,WAAW,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;CAiB1C"}
@@ -0,0 +1,308 @@
1
+ import { readFileSync, writeFileSync, existsSync } from 'fs';
2
+ import { JSDOM } from 'jsdom';
3
+ import { ErrorCategory, ErrorSeverity, safeExecute } from './error-handler.js';
4
+ // Set up browser-like environment for hnswlib-wasm
5
+ if (typeof window === 'undefined') {
6
+ const dom = new JSDOM('<!DOCTYPE html><html><body></body></html>', {
7
+ url: 'http://localhost',
8
+ pretendToBeVisual: true,
9
+ resources: 'usable'
10
+ });
11
+ // Type assertion to avoid TypeScript issues with global polyfills
12
+ global.window = dom.window;
13
+ global.document = dom.window.document;
14
+ global.XMLHttpRequest = dom.window.XMLHttpRequest;
15
+ // Disable IndexedDB to prevent hnswlib-wasm from trying to use it
16
+ global.indexedDB = undefined;
17
+ // Override indexedDB on the window object to return undefined
18
+ Object.defineProperty(dom.window, 'indexedDB', {
19
+ value: undefined,
20
+ writable: false,
21
+ configurable: true
22
+ });
23
+ }
24
+ export class VectorIndex {
25
+ index = null;
26
+ hnswlib = null;
27
+ indexPath;
28
+ options;
29
+ currentSize = 0;
30
+ vectorStorage = new Map(); // For persistence
31
+ constructor(indexPath, options) {
32
+ this.indexPath = indexPath;
33
+ this.options = {
34
+ efConstruction: 200,
35
+ M: 16,
36
+ seed: 100,
37
+ ...options
38
+ };
39
+ }
40
+ /**
41
+ * Initialize the HNSW index with cosine similarity using hnswlib-wasm
42
+ */
43
+ async initialize() {
44
+ await safeExecute(async () => {
45
+ // Load the hnswlib module
46
+ if (!this.hnswlib) {
47
+ // Temporarily suppress stderr output during hnswlib loading to avoid IndexedDB warnings
48
+ const originalStderrWrite = process.stderr.write;
49
+ const originalConsoleError = console.error;
50
+ process.stderr.write = function (chunk, encoding, callback) {
51
+ const message = chunk.toString();
52
+ // Suppress specific IndexedDB/IDBFS related errors and WebAssembly errors
53
+ if (message.includes('IDBFS') || message.includes('indexedDB not supported') ||
54
+ message.includes('EmscriptenFileSystemManager') || message.includes('Aborted') ||
55
+ message.includes('jsFS Error') || message.includes('syncing FS') ||
56
+ message.includes('RuntimeError: unreachable') || message.includes('___trap') ||
57
+ message.includes('abort') || message.includes('assert') ||
58
+ message.includes('hnswlib-wasm/dist/hnswlib')) {
59
+ if (callback)
60
+ callback();
61
+ return true;
62
+ }
63
+ return originalStderrWrite.call(this, chunk, encoding, callback);
64
+ };
65
+ console.error = (...args) => {
66
+ const message = args.join(' ');
67
+ if (message.includes('IDBFS') || message.includes('indexedDB not supported') ||
68
+ message.includes('EmscriptenFileSystemManager') || message.includes('Aborted') ||
69
+ message.includes('jsFS Error') || message.includes('syncing FS') ||
70
+ message.includes('RuntimeError: unreachable') || message.includes('___trap') ||
71
+ message.includes('abort') || message.includes('assert') ||
72
+ message.includes('hnswlib-wasm/dist/hnswlib')) {
73
+ return;
74
+ }
75
+ originalConsoleError.apply(console, args);
76
+ };
77
+ try {
78
+ const { loadHnswlib } = await import('hnswlib-wasm/dist/hnswlib.js');
79
+ this.hnswlib = await loadHnswlib();
80
+ }
81
+ finally {
82
+ // Restore original output streams
83
+ process.stderr.write = originalStderrWrite;
84
+ console.error = originalConsoleError;
85
+ }
86
+ }
87
+ // Create new HNSW index (third parameter is autoSaveFilename, but we'll handle persistence manually)
88
+ this.index = new this.hnswlib.HierarchicalNSW('cosine', this.options.dimensions, '');
89
+ this.index.initIndex(this.options.maxElements, this.options.M || 16, this.options.efConstruction || 200, this.options.seed || 100);
90
+ this.currentSize = 0;
91
+ console.log(`Initialized HNSW index with ${this.options.dimensions} dimensions using hnswlib-wasm`);
92
+ }, 'Vector Index Initialization', {
93
+ category: ErrorCategory.INDEX,
94
+ severity: ErrorSeverity.FATAL
95
+ });
96
+ }
97
+ /**
98
+ * Load existing index from file using hnswlib-wasm
99
+ */
100
+ async loadIndex() {
101
+ if (!existsSync(this.indexPath)) {
102
+ throw new Error(`Index file not found: ${this.indexPath}`);
103
+ }
104
+ try {
105
+ // Load the hnswlib module
106
+ if (!this.hnswlib) {
107
+ // Temporarily suppress stderr output during hnswlib loading to avoid IndexedDB warnings
108
+ const originalStderrWrite = process.stderr.write;
109
+ const originalConsoleError = console.error;
110
+ process.stderr.write = function (chunk, encoding, callback) {
111
+ const message = chunk.toString();
112
+ // Suppress specific IndexedDB/IDBFS related errors and WebAssembly errors
113
+ if (message.includes('IDBFS') || message.includes('indexedDB not supported') ||
114
+ message.includes('EmscriptenFileSystemManager') || message.includes('Aborted') ||
115
+ message.includes('jsFS Error') || message.includes('syncing FS') ||
116
+ message.includes('RuntimeError: unreachable') || message.includes('___trap') ||
117
+ message.includes('abort') || message.includes('assert') ||
118
+ message.includes('hnswlib-wasm/dist/hnswlib')) {
119
+ if (callback)
120
+ callback();
121
+ return true;
122
+ }
123
+ return originalStderrWrite.call(this, chunk, encoding, callback);
124
+ };
125
+ console.error = (...args) => {
126
+ const message = args.join(' ');
127
+ if (message.includes('IDBFS') || message.includes('indexedDB not supported') ||
128
+ message.includes('EmscriptenFileSystemManager') || message.includes('Aborted') ||
129
+ message.includes('jsFS Error') || message.includes('syncing FS') ||
130
+ message.includes('RuntimeError: unreachable') || message.includes('___trap') ||
131
+ message.includes('abort') || message.includes('assert') ||
132
+ message.includes('hnswlib-wasm/dist/hnswlib')) {
133
+ return;
134
+ }
135
+ originalConsoleError.apply(console, args);
136
+ };
137
+ try {
138
+ const { loadHnswlib } = await import('hnswlib-wasm/dist/hnswlib.js');
139
+ this.hnswlib = await loadHnswlib();
140
+ }
141
+ finally {
142
+ // Restore original output streams
143
+ process.stderr.write = originalStderrWrite;
144
+ console.error = originalConsoleError;
145
+ }
146
+ }
147
+ // Create new HNSW index (third parameter is autoSaveFilename, but we'll handle persistence manually)
148
+ this.index = new this.hnswlib.HierarchicalNSW('cosine', this.options.dimensions, '');
149
+ // Load from JSON format since IDBFS doesn't work in Node.js
150
+ const data = readFileSync(this.indexPath, 'utf-8');
151
+ const stored = JSON.parse(data);
152
+ // Update options from stored data
153
+ this.options.maxElements = stored.maxElements || this.options.maxElements;
154
+ this.options.M = stored.M || this.options.M;
155
+ this.options.efConstruction = stored.efConstruction || this.options.efConstruction;
156
+ this.options.seed = stored.seed || this.options.seed;
157
+ // Recreate the index from stored data
158
+ this.index.initIndex(this.options.maxElements, this.options.M || 16, this.options.efConstruction || 200, this.options.seed || 100);
159
+ // Clear and repopulate vector storage
160
+ this.vectorStorage.clear();
161
+ // Add all stored vectors back
162
+ for (const item of stored.vectors || []) {
163
+ const vector = new Float32Array(item.vector);
164
+ this.index.addPoint(vector, item.id, false);
165
+ this.vectorStorage.set(item.id, vector);
166
+ }
167
+ this.currentSize = stored.vectors?.length || 0;
168
+ console.log(`Loaded HNSW index with ${this.currentSize} vectors from ${this.indexPath}`);
169
+ }
170
+ catch (error) {
171
+ throw new Error(`Failed to load index from ${this.indexPath}: ${error}`);
172
+ }
173
+ }
174
+ /**
175
+ * Save index to file using JSON format (since IDBFS doesn't work in Node.js)
176
+ */
177
+ async saveIndex() {
178
+ if (!this.index) {
179
+ throw new Error('Index not initialized');
180
+ }
181
+ try {
182
+ // Convert stored vectors to serializable format
183
+ const vectors = Array.from(this.vectorStorage.entries()).map(([id, vector]) => ({
184
+ id,
185
+ vector: Array.from(vector)
186
+ }));
187
+ const stored = {
188
+ dimensions: this.options.dimensions,
189
+ maxElements: this.options.maxElements,
190
+ M: this.options.M || 16,
191
+ efConstruction: this.options.efConstruction || 200,
192
+ seed: this.options.seed || 100,
193
+ currentSize: this.currentSize,
194
+ vectors: vectors
195
+ };
196
+ writeFileSync(this.indexPath, JSON.stringify(stored, null, 2));
197
+ console.log(`Saved HNSW index with ${this.currentSize} vectors to ${this.indexPath}`);
198
+ }
199
+ catch (error) {
200
+ throw new Error(`Failed to save index to ${this.indexPath}: ${error}`);
201
+ }
202
+ }
203
+ /**
204
+ * Add a single vector to the HNSW index
205
+ */
206
+ addVector(embeddingId, vector) {
207
+ if (!this.index) {
208
+ throw new Error('Index not initialized');
209
+ }
210
+ if (vector.length !== this.options.dimensions) {
211
+ throw new Error(`Vector dimension mismatch: expected ${this.options.dimensions}, got ${vector.length}`);
212
+ }
213
+ try {
214
+ this.index.addPoint(vector, embeddingId, false);
215
+ // Store vector for persistence
216
+ this.vectorStorage.set(embeddingId, new Float32Array(vector));
217
+ this.currentSize++;
218
+ }
219
+ catch (error) {
220
+ throw new Error(`Failed to add vector ${embeddingId}: ${error}`);
221
+ }
222
+ }
223
+ /**
224
+ * Add multiple vectors to the index in batch
225
+ */
226
+ addVectors(vectors) {
227
+ for (const { id, vector } of vectors) {
228
+ this.addVector(id, vector);
229
+ }
230
+ }
231
+ /**
232
+ * Search for k nearest neighbors using hnswlib-wasm
233
+ */
234
+ search(queryVector, k = 5) {
235
+ if (!this.index) {
236
+ throw new Error('Index not initialized');
237
+ }
238
+ if (queryVector.length !== this.options.dimensions) {
239
+ throw new Error(`Query vector dimension mismatch: expected ${this.options.dimensions}, got ${queryVector.length}`);
240
+ }
241
+ if (this.currentSize === 0) {
242
+ return { neighbors: [], distances: [] };
243
+ }
244
+ try {
245
+ const result = this.index.searchKnn(queryVector, Math.min(k, this.currentSize), undefined);
246
+ return {
247
+ neighbors: result.neighbors,
248
+ distances: result.distances
249
+ };
250
+ }
251
+ catch (error) {
252
+ throw new Error(`Search failed: ${error}`);
253
+ }
254
+ }
255
+ /**
256
+ * Get current number of vectors in the index
257
+ */
258
+ getCurrentCount() {
259
+ return this.currentSize;
260
+ }
261
+ /**
262
+ * Check if index exists on disk
263
+ */
264
+ indexExists() {
265
+ return existsSync(this.indexPath);
266
+ }
267
+ /**
268
+ * Set search parameters for query time
269
+ */
270
+ setEf(ef) {
271
+ if (!this.index) {
272
+ throw new Error('Index not initialized');
273
+ }
274
+ try {
275
+ // hnswlib-wasm might not have setEf method, check if it exists
276
+ if (typeof this.index.setEfSearch === 'function') {
277
+ this.index.setEfSearch(ef);
278
+ console.log(`Set efSearch to ${ef}`);
279
+ }
280
+ else {
281
+ console.log(`setEfSearch not available in hnswlib-wasm`);
282
+ }
283
+ }
284
+ catch (error) {
285
+ console.log(`Failed to set ef: ${error}`);
286
+ }
287
+ }
288
+ /**
289
+ * Resize index to accommodate more vectors
290
+ */
291
+ resizeIndex(newMaxElements) {
292
+ if (!this.index) {
293
+ throw new Error('Index not initialized');
294
+ }
295
+ if (newMaxElements <= this.options.maxElements) {
296
+ throw new Error(`New max elements (${newMaxElements}) must be greater than current (${this.options.maxElements})`);
297
+ }
298
+ try {
299
+ this.index.resizeIndex(newMaxElements);
300
+ this.options.maxElements = newMaxElements;
301
+ console.log(`Resized index to accommodate ${newMaxElements} vectors`);
302
+ }
303
+ catch (error) {
304
+ throw new Error(`Failed to resize index: ${error}`);
305
+ }
306
+ }
307
+ }
308
+ //# sourceMappingURL=vector-index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vector-index.js","sourceRoot":"","sources":["../src/vector-index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,80 @@
1
+ {
2
+ "name": "rag-lite-ts",
3
+ "version": "1.0.1",
4
+ "description": "Local-first TypeScript retrieval engine for semantic search over static documents",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "bin": {
9
+ "raglite": "./dist/cli.js",
10
+ "raglite-mcp": "./dist/mcp-server.js"
11
+ },
12
+ "exports": {
13
+ ".": {
14
+ "import": "./dist/index.js",
15
+ "types": "./dist/index.d.ts"
16
+ },
17
+ "./mcp": {
18
+ "import": "./dist/mcp-server.js",
19
+ "types": "./dist/mcp-server.d.ts"
20
+ }
21
+ },
22
+ "files": [
23
+ "dist/**/*",
24
+ "README.md",
25
+ "LICENSE"
26
+ ],
27
+ "scripts": {
28
+ "build": "tsc",
29
+ "build:test": "tsc --project tsconfig.test.json",
30
+ "clean": "rimraf dist",
31
+ "dev": "tsc --watch",
32
+ "test": "npm run build:test && node --test dist/tokenizer.test.js dist/chunker.test.js dist/embedder.test.js dist/vector-index.test.js dist/index-manager.test.js dist/search.test.js dist/file-processor.test.js dist/mcp-server.test.js dist/preprocess.test.js dist/config.test.js dist/preprocessors/integration.test.js",
33
+ "test:integration": "npm run build && npm run build:test && node --test dist/integration.test.js",
34
+ "test:all": "npm run test && npm run test:integration",
35
+ "prepublishOnly": "npm run clean && npm run build"
36
+ },
37
+ "keywords": [
38
+ "rag",
39
+ "retrieval",
40
+ "semantic-search",
41
+ "embeddings",
42
+ "typescript",
43
+ "local-first",
44
+ "mdx",
45
+ "mermaid",
46
+ "preprocessing",
47
+ "pdf",
48
+ "docx",
49
+ "document-processing"
50
+ ],
51
+ "repository": {
52
+ "type": "git",
53
+ "url": "https://github.com/raglite/rag-lite-ts.git"
54
+ },
55
+ "bugs": {
56
+ "url": "https://github.com/raglite/rag-lite-ts/issues"
57
+ },
58
+ "homepage": "https://github.com/raglite/rag-lite-ts#readme",
59
+ "author": "RAG-lite TS Contributors",
60
+ "license": "MIT",
61
+ "engines": {
62
+ "node": ">=18.0.0"
63
+ },
64
+ "dependencies": {
65
+ "@huggingface/transformers": "^3.7.5",
66
+ "@modelcontextprotocol/sdk": "^1.18.2",
67
+ "hnswlib-wasm": "^0.8.2",
68
+ "jsdom": "^27.0.0",
69
+ "mammoth": "^1.11.0",
70
+ "pdf-parse": "^2.1.10",
71
+ "sqlite3": "^5.1.6"
72
+ },
73
+ "devDependencies": {
74
+ "@types/jsdom": "^21.1.7",
75
+ "@types/node": "^20.11.0",
76
+ "js-yaml": "^4.1.0",
77
+ "rimraf": "^5.0.5",
78
+ "typescript": "^5.3.0"
79
+ }
80
+ }