@matperez/coderag 0.1.24

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 (147) hide show
  1. package/README.md +154 -0
  2. package/dist/.tsbuildinfo +1 -0
  3. package/dist/ast-chunking.d.ts +40 -0
  4. package/dist/ast-chunking.d.ts.map +1 -0
  5. package/dist/ast-chunking.js +88 -0
  6. package/dist/ast-chunking.js.map +1 -0
  7. package/dist/ast-chunking.test.d.ts +5 -0
  8. package/dist/ast-chunking.test.d.ts.map +1 -0
  9. package/dist/ast-chunking.test.js +173 -0
  10. package/dist/ast-chunking.test.js.map +1 -0
  11. package/dist/code-tokenizer.d.ts +62 -0
  12. package/dist/code-tokenizer.d.ts.map +1 -0
  13. package/dist/code-tokenizer.js +129 -0
  14. package/dist/code-tokenizer.js.map +1 -0
  15. package/dist/code-tokenizer.test.d.ts +5 -0
  16. package/dist/code-tokenizer.test.d.ts.map +1 -0
  17. package/dist/code-tokenizer.test.js +96 -0
  18. package/dist/code-tokenizer.test.js.map +1 -0
  19. package/dist/db/client-pg.d.ts +16 -0
  20. package/dist/db/client-pg.d.ts.map +1 -0
  21. package/dist/db/client-pg.js +38 -0
  22. package/dist/db/client-pg.js.map +1 -0
  23. package/dist/db/client.d.ts +36 -0
  24. package/dist/db/client.d.ts.map +1 -0
  25. package/dist/db/client.js +81 -0
  26. package/dist/db/client.js.map +1 -0
  27. package/dist/db/migrations-pg.d.ts +6 -0
  28. package/dist/db/migrations-pg.d.ts.map +1 -0
  29. package/dist/db/migrations-pg.js +88 -0
  30. package/dist/db/migrations-pg.js.map +1 -0
  31. package/dist/db/migrations.d.ts +9 -0
  32. package/dist/db/migrations.d.ts.map +1 -0
  33. package/dist/db/migrations.js +164 -0
  34. package/dist/db/migrations.js.map +1 -0
  35. package/dist/db/schema-pg.d.ts +611 -0
  36. package/dist/db/schema-pg.d.ts.map +1 -0
  37. package/dist/db/schema-pg.js +66 -0
  38. package/dist/db/schema-pg.js.map +1 -0
  39. package/dist/db/schema.d.ts +630 -0
  40. package/dist/db/schema.d.ts.map +1 -0
  41. package/dist/db/schema.js +85 -0
  42. package/dist/db/schema.js.map +1 -0
  43. package/dist/embeddings.d.ts +92 -0
  44. package/dist/embeddings.d.ts.map +1 -0
  45. package/dist/embeddings.js +275 -0
  46. package/dist/embeddings.js.map +1 -0
  47. package/dist/embeddings.test.d.ts +5 -0
  48. package/dist/embeddings.test.d.ts.map +1 -0
  49. package/dist/embeddings.test.js +255 -0
  50. package/dist/embeddings.test.js.map +1 -0
  51. package/dist/hybrid-search.d.ts +47 -0
  52. package/dist/hybrid-search.d.ts.map +1 -0
  53. package/dist/hybrid-search.js +215 -0
  54. package/dist/hybrid-search.js.map +1 -0
  55. package/dist/hybrid-search.test.d.ts +5 -0
  56. package/dist/hybrid-search.test.d.ts.map +1 -0
  57. package/dist/hybrid-search.test.js +252 -0
  58. package/dist/hybrid-search.test.js.map +1 -0
  59. package/dist/incremental-tfidf.d.ts +77 -0
  60. package/dist/incremental-tfidf.d.ts.map +1 -0
  61. package/dist/incremental-tfidf.js +248 -0
  62. package/dist/incremental-tfidf.js.map +1 -0
  63. package/dist/incremental-tfidf.test.d.ts +5 -0
  64. package/dist/incremental-tfidf.test.d.ts.map +1 -0
  65. package/dist/incremental-tfidf.test.js +276 -0
  66. package/dist/incremental-tfidf.test.js.map +1 -0
  67. package/dist/index.d.ts +18 -0
  68. package/dist/index.d.ts.map +1 -0
  69. package/dist/index.js +19 -0
  70. package/dist/index.js.map +1 -0
  71. package/dist/indexer.d.ts +205 -0
  72. package/dist/indexer.d.ts.map +1 -0
  73. package/dist/indexer.js +1331 -0
  74. package/dist/indexer.js.map +1 -0
  75. package/dist/indexer.test.d.ts +12 -0
  76. package/dist/indexer.test.d.ts.map +1 -0
  77. package/dist/indexer.test.js +471 -0
  78. package/dist/indexer.test.js.map +1 -0
  79. package/dist/language-config.d.ts +54 -0
  80. package/dist/language-config.d.ts.map +1 -0
  81. package/dist/language-config.js +75 -0
  82. package/dist/language-config.js.map +1 -0
  83. package/dist/search-cache.d.ts +63 -0
  84. package/dist/search-cache.d.ts.map +1 -0
  85. package/dist/search-cache.js +118 -0
  86. package/dist/search-cache.js.map +1 -0
  87. package/dist/search-cache.test.d.ts +5 -0
  88. package/dist/search-cache.test.d.ts.map +1 -0
  89. package/dist/search-cache.test.js +194 -0
  90. package/dist/search-cache.test.js.map +1 -0
  91. package/dist/storage-factory.d.ts +11 -0
  92. package/dist/storage-factory.d.ts.map +1 -0
  93. package/dist/storage-factory.js +17 -0
  94. package/dist/storage-factory.js.map +1 -0
  95. package/dist/storage-persistent-pg.d.ts +75 -0
  96. package/dist/storage-persistent-pg.d.ts.map +1 -0
  97. package/dist/storage-persistent-pg.js +579 -0
  98. package/dist/storage-persistent-pg.js.map +1 -0
  99. package/dist/storage-persistent-pg.test.d.ts +7 -0
  100. package/dist/storage-persistent-pg.test.d.ts.map +1 -0
  101. package/dist/storage-persistent-pg.test.js +90 -0
  102. package/dist/storage-persistent-pg.test.js.map +1 -0
  103. package/dist/storage-persistent-types.d.ts +110 -0
  104. package/dist/storage-persistent-types.d.ts.map +1 -0
  105. package/dist/storage-persistent-types.js +5 -0
  106. package/dist/storage-persistent-types.js.map +1 -0
  107. package/dist/storage-persistent.d.ts +231 -0
  108. package/dist/storage-persistent.d.ts.map +1 -0
  109. package/dist/storage-persistent.js +897 -0
  110. package/dist/storage-persistent.js.map +1 -0
  111. package/dist/storage-persistent.test.d.ts +5 -0
  112. package/dist/storage-persistent.test.d.ts.map +1 -0
  113. package/dist/storage-persistent.test.js +325 -0
  114. package/dist/storage-persistent.test.js.map +1 -0
  115. package/dist/storage.d.ts +63 -0
  116. package/dist/storage.d.ts.map +1 -0
  117. package/dist/storage.js +67 -0
  118. package/dist/storage.js.map +1 -0
  119. package/dist/storage.test.d.ts +5 -0
  120. package/dist/storage.test.d.ts.map +1 -0
  121. package/dist/storage.test.js +157 -0
  122. package/dist/storage.test.js.map +1 -0
  123. package/dist/tfidf.d.ts +97 -0
  124. package/dist/tfidf.d.ts.map +1 -0
  125. package/dist/tfidf.js +308 -0
  126. package/dist/tfidf.js.map +1 -0
  127. package/dist/tfidf.test.d.ts +5 -0
  128. package/dist/tfidf.test.d.ts.map +1 -0
  129. package/dist/tfidf.test.js +181 -0
  130. package/dist/tfidf.test.js.map +1 -0
  131. package/dist/utils.d.ts +61 -0
  132. package/dist/utils.d.ts.map +1 -0
  133. package/dist/utils.js +264 -0
  134. package/dist/utils.js.map +1 -0
  135. package/dist/utils.test.d.ts +5 -0
  136. package/dist/utils.test.d.ts.map +1 -0
  137. package/dist/utils.test.js +94 -0
  138. package/dist/utils.test.js.map +1 -0
  139. package/dist/vector-storage.d.ts +120 -0
  140. package/dist/vector-storage.d.ts.map +1 -0
  141. package/dist/vector-storage.js +264 -0
  142. package/dist/vector-storage.js.map +1 -0
  143. package/dist/vector-storage.test.d.ts +5 -0
  144. package/dist/vector-storage.test.d.ts.map +1 -0
  145. package/dist/vector-storage.test.js +345 -0
  146. package/dist/vector-storage.test.js.map +1 -0
  147. package/package.json +85 -0
@@ -0,0 +1,345 @@
1
+ /**
2
+ * Vector Storage Tests (LanceDB)
3
+ */
4
+ import fs from 'node:fs';
5
+ import { afterEach, beforeEach, describe, expect, it } from 'vitest';
6
+ import { VectorStorage } from './vector-storage.js';
7
+ describe('VectorStorage', () => {
8
+ let storage;
9
+ let testDbPath;
10
+ beforeEach(() => {
11
+ // Use unique path for each test to avoid conflicts
12
+ testDbPath = `/tmp/test-vector-db-${process.pid}-${Date.now()}-${Math.random().toString(36).slice(2)}`;
13
+ storage = new VectorStorage({ dimensions: 128, dbPath: testDbPath });
14
+ });
15
+ afterEach(async () => {
16
+ await storage.close();
17
+ // Clean up test database
18
+ if (fs.existsSync(testDbPath)) {
19
+ fs.rmSync(testDbPath, { recursive: true, force: true });
20
+ }
21
+ });
22
+ describe('addDocument', () => {
23
+ it('should add a document', async () => {
24
+ const doc = {
25
+ id: 'doc1',
26
+ embedding: Array(128).fill(1),
27
+ metadata: { type: 'code', language: 'typescript' },
28
+ };
29
+ await storage.addDocument(doc);
30
+ expect(await storage.hasDocument('doc1')).toBe(true);
31
+ expect((await storage.getStats()).totalDocuments).toBe(1);
32
+ });
33
+ it('should throw error for duplicate document ID', async () => {
34
+ const doc = {
35
+ id: 'doc1',
36
+ embedding: Array(128).fill(1),
37
+ metadata: { type: 'code' },
38
+ };
39
+ await storage.addDocument(doc);
40
+ await expect(storage.addDocument(doc)).rejects.toThrow('already exists');
41
+ });
42
+ it('should throw error for wrong dimensions', async () => {
43
+ const doc = {
44
+ id: 'doc1',
45
+ embedding: Array(64).fill(1), // Wrong dimensions
46
+ metadata: { type: 'code' },
47
+ };
48
+ await expect(storage.addDocument(doc)).rejects.toThrow("don't match");
49
+ });
50
+ });
51
+ describe('addDocuments', () => {
52
+ it('should add multiple documents', async () => {
53
+ const docs = [
54
+ {
55
+ id: 'doc1',
56
+ embedding: Array(128).fill(1),
57
+ metadata: { type: 'code' },
58
+ },
59
+ {
60
+ id: 'doc2',
61
+ embedding: Array(128).fill(0.5),
62
+ metadata: { type: 'code' },
63
+ },
64
+ {
65
+ id: 'doc3',
66
+ embedding: Array(128).fill(0.25),
67
+ metadata: { type: 'knowledge' },
68
+ },
69
+ ];
70
+ await storage.addDocuments(docs);
71
+ expect((await storage.getStats()).totalDocuments).toBe(3);
72
+ expect(await storage.hasDocument('doc1')).toBe(true);
73
+ expect(await storage.hasDocument('doc2')).toBe(true);
74
+ expect(await storage.hasDocument('doc3')).toBe(true);
75
+ });
76
+ });
77
+ describe('search', () => {
78
+ beforeEach(async () => {
79
+ // Add test documents with different embeddings
80
+ await storage.addDocument({
81
+ id: 'doc1',
82
+ embedding: Array(128).fill(1),
83
+ metadata: { type: 'code', language: 'typescript' },
84
+ });
85
+ await storage.addDocument({
86
+ id: 'doc2',
87
+ embedding: Array(128).fill(0.5),
88
+ metadata: { type: 'code', language: 'javascript' },
89
+ });
90
+ await storage.addDocument({
91
+ id: 'doc3',
92
+ embedding: Array(128).fill(0.1),
93
+ metadata: { type: 'knowledge' },
94
+ });
95
+ });
96
+ it('should find most similar documents', async () => {
97
+ const queryVector = Array(128).fill(1);
98
+ const results = await storage.search(queryVector, { k: 2 });
99
+ expect(results).toHaveLength(2);
100
+ expect(results[0].doc.id).toBe('doc1');
101
+ });
102
+ it('should respect k parameter', async () => {
103
+ const queryVector = Array(128).fill(1);
104
+ const results = await storage.search(queryVector, { k: 1 });
105
+ expect(results).toHaveLength(1);
106
+ });
107
+ it('should filter by minimum score', async () => {
108
+ const queryVector = Array(128).fill(1);
109
+ const results = await storage.search(queryVector, { minScore: 0.5 });
110
+ expect(results.every((r) => r.similarity >= 0.5)).toBe(true);
111
+ });
112
+ it('should apply custom filter', async () => {
113
+ const queryVector = Array(128).fill(1);
114
+ const results = await storage.search(queryVector, {
115
+ k: 10,
116
+ filter: (doc) => doc.metadata.type === 'code',
117
+ });
118
+ expect(results.length).toBeLessThanOrEqual(2);
119
+ expect(results.every((r) => r.doc.metadata.type === 'code')).toBe(true);
120
+ });
121
+ it('should return empty array for empty storage', async () => {
122
+ const emptyDbPath = `/tmp/test-empty-${Date.now()}-${Math.random().toString(36).slice(2)}`;
123
+ const emptyStorage = new VectorStorage({ dimensions: 128, dbPath: emptyDbPath });
124
+ const results = await emptyStorage.search(Array(128).fill(1));
125
+ expect(results).toHaveLength(0);
126
+ await emptyStorage.close();
127
+ if (fs.existsSync(emptyDbPath)) {
128
+ fs.rmSync(emptyDbPath, { recursive: true, force: true });
129
+ }
130
+ });
131
+ it('should throw error for wrong query dimensions', async () => {
132
+ const queryVector = Array(64).fill(1); // Wrong dimensions
133
+ await expect(storage.search(queryVector)).rejects.toThrow("don't match");
134
+ });
135
+ });
136
+ describe('getDocument', () => {
137
+ it('should retrieve document by ID', async () => {
138
+ const doc = {
139
+ id: 'doc1',
140
+ embedding: Array(128).fill(1),
141
+ metadata: { type: 'code', language: 'typescript' },
142
+ };
143
+ await storage.addDocument(doc);
144
+ const retrieved = await storage.getDocument('doc1');
145
+ expect(retrieved).toBeDefined();
146
+ expect(retrieved?.id).toBe('doc1');
147
+ expect(retrieved?.metadata.language).toBe('typescript');
148
+ });
149
+ it('should return undefined for non-existent document', async () => {
150
+ const retrieved = await storage.getDocument('nonexistent');
151
+ expect(retrieved).toBeUndefined();
152
+ });
153
+ });
154
+ describe('deleteDocument', () => {
155
+ it('should delete document', async () => {
156
+ const doc = {
157
+ id: 'doc1',
158
+ embedding: Array(128).fill(1),
159
+ metadata: { type: 'code' },
160
+ };
161
+ await storage.addDocument(doc);
162
+ expect(await storage.hasDocument('doc1')).toBe(true);
163
+ const deleted = await storage.deleteDocument('doc1');
164
+ expect(deleted).toBe(true);
165
+ expect(await storage.hasDocument('doc1')).toBe(false);
166
+ expect(await storage.getDocument('doc1')).toBeUndefined();
167
+ });
168
+ it('should return false for non-existent document', async () => {
169
+ const deleted = await storage.deleteDocument('nonexistent');
170
+ expect(deleted).toBe(false);
171
+ });
172
+ it('should not return deleted documents in search', async () => {
173
+ await storage.addDocument({
174
+ id: 'doc1',
175
+ embedding: Array(128).fill(1),
176
+ metadata: { type: 'code' },
177
+ });
178
+ await storage.addDocument({
179
+ id: 'doc2',
180
+ embedding: Array(128).fill(0.5),
181
+ metadata: { type: 'code' },
182
+ });
183
+ await storage.deleteDocument('doc1');
184
+ const results = await storage.search(Array(128).fill(1), { k: 10 });
185
+ expect(results.every((r) => r.doc.id !== 'doc1')).toBe(true);
186
+ });
187
+ });
188
+ describe('updateDocument', () => {
189
+ it('should update existing document', async () => {
190
+ const doc = {
191
+ id: 'doc1',
192
+ embedding: Array(128).fill(1),
193
+ metadata: { type: 'code', language: 'javascript' },
194
+ };
195
+ await storage.addDocument(doc);
196
+ const updated = {
197
+ id: 'doc1',
198
+ embedding: Array(128).fill(0.5),
199
+ metadata: { type: 'code', language: 'typescript' },
200
+ };
201
+ await storage.updateDocument(updated);
202
+ const retrieved = await storage.getDocument('doc1');
203
+ expect(retrieved?.metadata.language).toBe('typescript');
204
+ });
205
+ it('should add new document if not exists', async () => {
206
+ const doc = {
207
+ id: 'doc1',
208
+ embedding: Array(128).fill(1),
209
+ metadata: { type: 'code' },
210
+ };
211
+ await storage.updateDocument(doc);
212
+ expect(await storage.hasDocument('doc1')).toBe(true);
213
+ });
214
+ });
215
+ describe('getAllDocuments', () => {
216
+ it('should return all documents', async () => {
217
+ const docs = [
218
+ { id: 'doc1', embedding: Array(128).fill(1), metadata: { type: 'code' } },
219
+ { id: 'doc2', embedding: Array(128).fill(0.5), metadata: { type: 'code' } },
220
+ ];
221
+ await storage.addDocuments(docs);
222
+ const allDocs = await storage.getAllDocuments();
223
+ expect(allDocs).toHaveLength(2);
224
+ });
225
+ it('should return empty array for empty storage', async () => {
226
+ const allDocs = await storage.getAllDocuments();
227
+ expect(allDocs).toHaveLength(0);
228
+ });
229
+ });
230
+ describe('persistence', () => {
231
+ it('should persist data to disk', async () => {
232
+ const persistDbPath = `/tmp/test-persist-${Date.now()}-${Math.random().toString(36).slice(2)}`;
233
+ const persistentStorage = new VectorStorage({
234
+ dimensions: 128,
235
+ dbPath: persistDbPath,
236
+ });
237
+ const docs = [
238
+ {
239
+ id: 'doc1',
240
+ embedding: Array(128).fill(1),
241
+ metadata: { type: 'code', language: 'typescript' },
242
+ },
243
+ {
244
+ id: 'doc2',
245
+ embedding: Array(128).fill(0.5),
246
+ metadata: { type: 'code', language: 'javascript' },
247
+ },
248
+ ];
249
+ await persistentStorage.addDocuments(docs);
250
+ await persistentStorage.close();
251
+ // Verify directory exists
252
+ expect(fs.existsSync(persistDbPath)).toBe(true);
253
+ // Load in new instance
254
+ const storage2 = new VectorStorage({
255
+ dimensions: 128,
256
+ dbPath: persistDbPath,
257
+ });
258
+ expect((await storage2.getStats()).totalDocuments).toBe(2);
259
+ expect(await storage2.hasDocument('doc1')).toBe(true);
260
+ expect(await storage2.hasDocument('doc2')).toBe(true);
261
+ const doc = await storage2.getDocument('doc1');
262
+ expect(doc).toBeDefined();
263
+ expect(doc?.metadata.language).toBe('typescript');
264
+ await storage2.close();
265
+ fs.rmSync(persistDbPath, { recursive: true, force: true });
266
+ });
267
+ it('should maintain search functionality after reload', async () => {
268
+ const persistDbPath = `/tmp/test-persist-search-${Date.now()}-${Math.random().toString(36).slice(2)}`;
269
+ const persistentStorage = new VectorStorage({
270
+ dimensions: 128,
271
+ dbPath: persistDbPath,
272
+ });
273
+ const docs = [
274
+ { id: 'doc1', embedding: Array(128).fill(1), metadata: { type: 'code' } },
275
+ { id: 'doc2', embedding: Array(128).fill(0.5), metadata: { type: 'code' } },
276
+ ];
277
+ await persistentStorage.addDocuments(docs);
278
+ await persistentStorage.close();
279
+ const storage2 = new VectorStorage({
280
+ dimensions: 128,
281
+ dbPath: persistDbPath,
282
+ });
283
+ const results = await storage2.search(Array(128).fill(1), { k: 2 });
284
+ expect(results).toHaveLength(2);
285
+ expect(results[0].doc.id).toBe('doc1');
286
+ await storage2.close();
287
+ fs.rmSync(persistDbPath, { recursive: true, force: true });
288
+ });
289
+ });
290
+ describe('clear', () => {
291
+ it('should clear all data', async () => {
292
+ const docs = [
293
+ { id: 'doc1', embedding: Array(128).fill(1), metadata: { type: 'code' } },
294
+ { id: 'doc2', embedding: Array(128).fill(0.5), metadata: { type: 'code' } },
295
+ ];
296
+ await storage.addDocuments(docs);
297
+ expect((await storage.getStats()).totalDocuments).toBe(2);
298
+ await storage.clear();
299
+ expect((await storage.getStats()).totalDocuments).toBe(0);
300
+ expect(await storage.hasDocument('doc1')).toBe(false);
301
+ expect(await storage.hasDocument('doc2')).toBe(false);
302
+ });
303
+ });
304
+ describe('getStats', () => {
305
+ it('should return correct statistics', async () => {
306
+ const docs = [
307
+ { id: 'doc1', embedding: Array(128).fill(1), metadata: { type: 'code' } },
308
+ { id: 'doc2', embedding: Array(128).fill(0.5), metadata: { type: 'code' } },
309
+ ];
310
+ await storage.addDocuments(docs);
311
+ const stats = await storage.getStats();
312
+ expect(stats.totalDocuments).toBe(2);
313
+ expect(stats.dimensions).toBe(128);
314
+ expect(stats.indexSize).toBe(2);
315
+ });
316
+ });
317
+ describe('performance', () => {
318
+ it('should handle large number of documents', async () => {
319
+ const numDocs = 1000;
320
+ const docs = [];
321
+ for (let i = 0; i < numDocs; i++) {
322
+ // Create random-ish embeddings
323
+ const embedding = Array(128)
324
+ .fill(0)
325
+ .map(() => Math.sin(i) + Math.cos(i * 0.5));
326
+ docs.push({
327
+ id: `doc${i}`,
328
+ embedding,
329
+ metadata: { type: 'code', index: i },
330
+ });
331
+ }
332
+ const startAdd = Date.now();
333
+ await storage.addDocuments(docs);
334
+ const addTime = Date.now() - startAdd;
335
+ console.error(`[PERF] Added ${numDocs} documents in ${addTime}ms`);
336
+ const startSearch = Date.now();
337
+ const results = await storage.search(Array(128).fill(1), { k: 10 });
338
+ const searchTime = Date.now() - startSearch;
339
+ console.error(`[PERF] Searched in ${searchTime}ms`);
340
+ expect(results).toHaveLength(10);
341
+ expect(searchTime).toBeLessThan(500); // Should be fast (<500ms)
342
+ });
343
+ });
344
+ });
345
+ //# sourceMappingURL=vector-storage.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vector-storage.test.js","sourceRoot":"","sources":["../src/vector-storage.test.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,85 @@
1
+ {
2
+ "name": "@matperez/coderag",
3
+ "version": "0.1.24",
4
+ "description": "Semantic code search with vector embeddings - RAG-ready for AI assistants",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js"
12
+ },
13
+ "./indexer": {
14
+ "types": "./dist/indexer.d.ts",
15
+ "import": "./dist/indexer.js"
16
+ },
17
+ "./tfidf": {
18
+ "types": "./dist/tfidf.d.ts",
19
+ "import": "./dist/tfidf.js"
20
+ },
21
+ "./storage": {
22
+ "types": "./dist/storage.d.ts",
23
+ "import": "./dist/storage.js"
24
+ },
25
+ "./utils": {
26
+ "types": "./dist/utils.d.ts",
27
+ "import": "./dist/utils.js"
28
+ }
29
+ },
30
+ "files": [
31
+ "dist",
32
+ "README.md"
33
+ ],
34
+ "scripts": {
35
+ "build": "tsc",
36
+ "prepack": "bun run build",
37
+ "dev": "tsc --watch",
38
+ "test": "vitest run",
39
+ "test:watch": "vitest",
40
+ "type-check": "tsc --noEmit",
41
+ "clean": "rm -rf dist",
42
+ "bench:indexing": "bun run scripts/bench-indexing.ts",
43
+ "db:generate": "drizzle-kit generate",
44
+ "db:migrate": "drizzle-kit migrate",
45
+ "db:studio": "drizzle-kit studio"
46
+ },
47
+ "dependencies": {
48
+ "@ai-sdk/openai": "^1.0.11",
49
+ "@huggingface/transformers": "^3.7.6",
50
+ "@libsql/client": "^0.14.0",
51
+ "@parcel/watcher": "^2.5.1",
52
+ "ai": "^4.0.35",
53
+ "code-chunk": "^0.1.13",
54
+ "drizzle-orm": "^0.36.4",
55
+ "ignore": "^7.0.5"
56
+ },
57
+ "optionalDependencies": {
58
+ "@lancedb/lancedb": "^0.22.3"
59
+ },
60
+ "devDependencies": {
61
+ "@sylphx/doctor": "^1.25.0",
62
+ "@types/node": "^24.9.2",
63
+ "drizzle-kit": "^0.28.1",
64
+ "typescript": "^5.9.3",
65
+ "vitest": "^4.0.14"
66
+ },
67
+ "keywords": [
68
+ "rag",
69
+ "code-search",
70
+ "retrieval-augmented-generation",
71
+ "vector-search",
72
+ "embeddings",
73
+ "tfidf",
74
+ "semantic-search",
75
+ "code-indexing",
76
+ "mcp"
77
+ ],
78
+ "author": "SylphxAI",
79
+ "license": "MIT",
80
+ "repository": {
81
+ "type": "git",
82
+ "url": "https://github.com/SylphxAI/coderag.git",
83
+ "directory": "packages/core"
84
+ }
85
+ }