@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,276 @@
1
+ /**
2
+ * Tests for Incremental TF-IDF implementation (StarCoder2 tokenizer)
3
+ */
4
+ import { beforeAll, describe, expect, it } from 'vitest';
5
+ import { IncrementalTFIDF } from './incremental-tfidf.js';
6
+ import { buildSearchIndex, initializeTokenizer } from './tfidf.js';
7
+ // Skip if running in CI without model cache
8
+ const shouldSkip = process.env.CI === 'true' && !process.env.HF_HOME;
9
+ describe('IncrementalTFIDF', () => {
10
+ beforeAll(async () => {
11
+ if (shouldSkip)
12
+ return;
13
+ await initializeTokenizer();
14
+ }, 60000);
15
+ describe('initialization', () => {
16
+ it.skipIf(shouldSkip)('should initialize from existing index', async () => {
17
+ const documents = [
18
+ { uri: 'file://doc1.txt', content: 'hello world' },
19
+ { uri: 'file://doc2.txt', content: 'hello there' },
20
+ ];
21
+ const index = await buildSearchIndex(documents);
22
+ const incrementalEngine = new IncrementalTFIDF(index.documents, index.idf);
23
+ const result = incrementalEngine.getIndex();
24
+ expect(result.totalDocuments).toBe(2);
25
+ expect(result.documents.length).toBe(2);
26
+ expect(result.idf.size).toBeGreaterThan(0);
27
+ });
28
+ it('should initialize with empty index', () => {
29
+ const incrementalEngine = new IncrementalTFIDF([], new Map());
30
+ const result = incrementalEngine.getIndex();
31
+ expect(result.totalDocuments).toBe(0);
32
+ expect(result.documents.length).toBe(0);
33
+ });
34
+ });
35
+ describe('add document', () => {
36
+ it.skipIf(shouldSkip)('should add new document and update IDF', async () => {
37
+ const initialDocs = [{ uri: 'file://doc1.txt', content: 'hello world' }];
38
+ const index = await buildSearchIndex(initialDocs);
39
+ const engine = new IncrementalTFIDF(index.documents, index.idf);
40
+ const stats = await engine.applyUpdates([
41
+ {
42
+ type: 'add',
43
+ uri: 'file://doc2.txt',
44
+ newContent: 'hello there world',
45
+ },
46
+ ]);
47
+ expect(stats.affectedDocuments).toBeGreaterThan(0);
48
+ expect(stats.affectedTerms).toBeGreaterThan(0);
49
+ const result = engine.getIndex();
50
+ expect(result.totalDocuments).toBe(2);
51
+ expect(result.documents.length).toBe(2);
52
+ });
53
+ it.skipIf(shouldSkip)('should handle adding multiple documents', async () => {
54
+ const engine = new IncrementalTFIDF([], new Map());
55
+ const stats = await engine.applyUpdates([
56
+ {
57
+ type: 'add',
58
+ uri: 'file://doc1.txt',
59
+ newContent: 'hello world',
60
+ },
61
+ {
62
+ type: 'add',
63
+ uri: 'file://doc2.txt',
64
+ newContent: 'goodbye world',
65
+ },
66
+ ]);
67
+ expect(stats.affectedDocuments).toBe(2);
68
+ const result = engine.getIndex();
69
+ expect(result.totalDocuments).toBe(2);
70
+ expect(result.documents.length).toBe(2);
71
+ });
72
+ });
73
+ describe('update document', () => {
74
+ it.skipIf(shouldSkip)('should update existing document and recalculate IDF', async () => {
75
+ const initialDocs = [
76
+ { uri: 'file://doc1.txt', content: 'hello world' },
77
+ { uri: 'file://doc2.txt', content: 'hello there' },
78
+ ];
79
+ const index = await buildSearchIndex(initialDocs);
80
+ const engine = new IncrementalTFIDF(index.documents, index.idf);
81
+ const oldDoc = index.documents.find((d) => d.uri === 'file://doc1.txt');
82
+ const stats = await engine.applyUpdates([
83
+ {
84
+ type: 'update',
85
+ uri: 'file://doc1.txt',
86
+ oldDocument: oldDoc,
87
+ newContent: 'goodbye universe',
88
+ },
89
+ ]);
90
+ expect(stats.affectedDocuments).toBeGreaterThan(0);
91
+ expect(stats.affectedTerms).toBeGreaterThan(0);
92
+ const result = engine.getIndex();
93
+ expect(result.totalDocuments).toBe(2);
94
+ });
95
+ it.skipIf(shouldSkip)('should update affected documents when term frequencies change', async () => {
96
+ const initialDocs = [
97
+ { uri: 'file://doc1.txt', content: 'rare word' },
98
+ { uri: 'file://doc2.txt', content: 'common word common' },
99
+ ];
100
+ const index = await buildSearchIndex(initialDocs);
101
+ const engine = new IncrementalTFIDF(index.documents, index.idf);
102
+ const oldDoc = index.documents.find((d) => d.uri === 'file://doc1.txt');
103
+ await engine.applyUpdates([
104
+ {
105
+ type: 'update',
106
+ uri: 'file://doc1.txt',
107
+ oldDocument: oldDoc,
108
+ newContent: 'word word word',
109
+ },
110
+ ]);
111
+ const result = engine.getIndex();
112
+ expect(result.totalDocuments).toBe(2);
113
+ });
114
+ });
115
+ describe('delete document', () => {
116
+ it.skipIf(shouldSkip)('should delete document and update IDF', async () => {
117
+ const initialDocs = [
118
+ { uri: 'file://doc1.txt', content: 'hello world' },
119
+ { uri: 'file://doc2.txt', content: 'hello there' },
120
+ ];
121
+ const index = await buildSearchIndex(initialDocs);
122
+ const engine = new IncrementalTFIDF(index.documents, index.idf);
123
+ const oldDoc = index.documents.find((d) => d.uri === 'file://doc1.txt');
124
+ const stats = await engine.applyUpdates([
125
+ {
126
+ type: 'delete',
127
+ uri: 'file://doc1.txt',
128
+ oldDocument: oldDoc,
129
+ },
130
+ ]);
131
+ expect(stats.affectedTerms).toBeGreaterThan(0);
132
+ const result = engine.getIndex();
133
+ expect(result.totalDocuments).toBe(1);
134
+ expect(result.documents.length).toBe(1);
135
+ expect(result.documents.find((d) => d.uri === 'file://doc1.txt')).toBeUndefined();
136
+ });
137
+ it.skipIf(shouldSkip)('should handle deleting last occurrence of terms', async () => {
138
+ const initialDocs = [
139
+ { uri: 'file://doc1.txt', content: 'unique word' },
140
+ { uri: 'file://doc2.txt', content: 'common word' },
141
+ ];
142
+ const index = await buildSearchIndex(initialDocs);
143
+ const engine = new IncrementalTFIDF(index.documents, index.idf);
144
+ const oldDoc = index.documents.find((d) => d.uri === 'file://doc1.txt');
145
+ await engine.applyUpdates([
146
+ {
147
+ type: 'delete',
148
+ uri: 'file://doc1.txt',
149
+ oldDocument: oldDoc,
150
+ },
151
+ ]);
152
+ const result = engine.getIndex();
153
+ expect(result.totalDocuments).toBe(1);
154
+ });
155
+ });
156
+ describe('mixed operations', () => {
157
+ it.skipIf(shouldSkip)('should handle add, update, and delete in single batch', async () => {
158
+ const initialDocs = [
159
+ { uri: 'file://doc1.txt', content: 'hello world' },
160
+ { uri: 'file://doc2.txt', content: 'hello there' },
161
+ ];
162
+ const index = await buildSearchIndex(initialDocs);
163
+ const engine = new IncrementalTFIDF(index.documents, index.idf);
164
+ const doc1 = index.documents.find((d) => d.uri === 'file://doc1.txt');
165
+ const doc2 = index.documents.find((d) => d.uri === 'file://doc2.txt');
166
+ const stats = await engine.applyUpdates([
167
+ {
168
+ type: 'delete',
169
+ uri: 'file://doc1.txt',
170
+ oldDocument: doc1,
171
+ },
172
+ {
173
+ type: 'update',
174
+ uri: 'file://doc2.txt',
175
+ oldDocument: doc2,
176
+ newContent: 'greetings universe',
177
+ },
178
+ {
179
+ type: 'add',
180
+ uri: 'file://doc3.txt',
181
+ newContent: 'new document here',
182
+ },
183
+ ]);
184
+ expect(stats.affectedDocuments).toBeGreaterThan(0);
185
+ expect(stats.affectedTerms).toBeGreaterThan(0);
186
+ const result = engine.getIndex();
187
+ expect(result.totalDocuments).toBe(2); // doc1 deleted, doc3 added
188
+ expect(result.documents.length).toBe(2);
189
+ });
190
+ });
191
+ describe('shouldFullRebuild', () => {
192
+ it.skipIf(shouldSkip)('should recommend full rebuild when >20% of documents change', async () => {
193
+ const initialDocs = Array.from({ length: 100 }, (_, i) => ({
194
+ uri: `file://doc${i}.txt`,
195
+ content: 'hello world',
196
+ }));
197
+ const index = await buildSearchIndex(initialDocs);
198
+ const engine = new IncrementalTFIDF(index.documents, index.idf);
199
+ // Create updates for 25 documents (25%)
200
+ const updates = Array.from({ length: 25 }, (_, i) => ({
201
+ type: 'update',
202
+ uri: `file://doc${i}.txt`,
203
+ oldDocument: index.documents[i],
204
+ newContent: 'updated content',
205
+ }));
206
+ expect(await engine.shouldFullRebuild(updates)).toBe(true);
207
+ });
208
+ it.skipIf(shouldSkip)('should not recommend full rebuild when <20% of documents change', async () => {
209
+ const initialDocs = Array.from({ length: 100 }, (_, i) => ({
210
+ uri: `file://doc${i}.txt`,
211
+ content: 'hello world',
212
+ }));
213
+ const index = await buildSearchIndex(initialDocs);
214
+ const engine = new IncrementalTFIDF(index.documents, index.idf);
215
+ // Create updates for 15 documents (15%)
216
+ const updates = Array.from({ length: 15 }, (_, i) => ({
217
+ type: 'update',
218
+ uri: `file://doc${i}.txt`,
219
+ oldDocument: index.documents[i],
220
+ newContent: 'updated content',
221
+ }));
222
+ expect(await engine.shouldFullRebuild(updates)).toBe(false);
223
+ });
224
+ it.skipIf(shouldSkip)('should recommend full rebuild when adding >1000 new terms', async () => {
225
+ const initialDocs = [{ uri: 'file://doc1.txt', content: 'hello world' }];
226
+ const index = await buildSearchIndex(initialDocs);
227
+ const engine = new IncrementalTFIDF(index.documents, index.idf);
228
+ // Create content with >1000 unique terms
229
+ const newTerms = Array.from({ length: 1100 }, (_, i) => `term${i}`).join(' ');
230
+ const updates = [
231
+ {
232
+ type: 'add',
233
+ uri: 'file://doc2.txt',
234
+ newContent: newTerms,
235
+ },
236
+ ];
237
+ expect(await engine.shouldFullRebuild(updates)).toBe(true);
238
+ });
239
+ });
240
+ describe('TF-IDF calculations', () => {
241
+ it.skipIf(shouldSkip)('should calculate correct TF-IDF values after update', async () => {
242
+ const initialDocs = [
243
+ { uri: 'file://doc1.txt', content: 'word word word' },
244
+ { uri: 'file://doc2.txt', content: 'word other' },
245
+ ];
246
+ const index = await buildSearchIndex(initialDocs);
247
+ const engine = new IncrementalTFIDF(index.documents, index.idf);
248
+ const result = engine.getIndex();
249
+ // IDF values should be computed
250
+ expect(result.idf.size).toBeGreaterThan(0);
251
+ });
252
+ it.skipIf(shouldSkip)('should maintain vector magnitudes', async () => {
253
+ const initialDocs = [{ uri: 'file://doc1.txt', content: 'hello world' }];
254
+ const index = await buildSearchIndex(initialDocs);
255
+ const engine = new IncrementalTFIDF(index.documents, index.idf);
256
+ await engine.applyUpdates([
257
+ {
258
+ type: 'add',
259
+ uri: 'file://doc2.txt',
260
+ newContent: 'hello there',
261
+ },
262
+ ]);
263
+ const result = engine.getIndex();
264
+ for (const doc of result.documents) {
265
+ // Calculate magnitude from terms
266
+ let sumSquares = 0;
267
+ for (const tfidf of doc.terms.values()) {
268
+ sumSquares += tfidf * tfidf;
269
+ }
270
+ const expectedMagnitude = Math.sqrt(sumSquares);
271
+ expect(doc.magnitude).toBeCloseTo(expectedMagnitude, 10);
272
+ }
273
+ });
274
+ });
275
+ });
276
+ //# sourceMappingURL=incremental-tfidf.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"incremental-tfidf.test.js","sourceRoot":"","sources":["../src/incremental-tfidf.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * @codebase-search/core
3
+ * Core library for intelligent codebase search using TF-IDF
4
+ */
5
+ export { type ASTChunkOptions, type ChunkResult, chunkCodeByAST, chunkCodeByASTSimple, getSupportedLanguages, } from './ast-chunking.js';
6
+ export { getCoderagDataDir, type ProjectMetadata } from './db/client.js';
7
+ export { chunkText, composeProviders, cosineSimilarity, createDefaultConfig, createEmbeddingProvider, createMockProvider, createOpenAIProvider, type EmbeddingConfig, type EmbeddingProvider, generateMockEmbedding, getDefaultEmbeddingProvider, normalizeVector, } from './embeddings.js';
8
+ export { type HybridSearchOptions, type HybridSearchResult, hybridSearch, keywordSearch, semanticSearch, } from './hybrid-search.js';
9
+ export { type IncrementalStats, IncrementalTFIDF, type IncrementalUpdate, } from './incremental-tfidf.js';
10
+ export { CodebaseIndexer, type FileChangeEvent, type FileDiff, type IndexerOptions, type IndexingStatus, type SearchResult, } from './indexer.js';
11
+ export { type EmbeddedLanguageConfig, EXTENSION_TO_LANGUAGE, getLanguageConfig, getLanguageConfigByExtension, getLanguageFromPath, getSupportedExtensions, isLanguageSupported, LANGUAGE_REGISTRY, type LanguageConfig, } from './language-config.js';
12
+ export { type CacheEntry, type CacheStats, createCacheKey, LRUCache } from './search-cache.js';
13
+ export { type CodebaseFile, MemoryStorage } from './storage.js';
14
+ export { PersistentStorage } from './storage-persistent.js';
15
+ export { buildSearchIndex, calculateCosineSimilarity, type DocumentVector, processQuery, type SearchIndex, searchDocuments, } from './tfidf.js';
16
+ export { detectLanguage, isTextFile, loadGitignore, type ScanOptions, type ScanResult, scanFiles, simpleHash, } from './utils.js';
17
+ export { type VectorDocument, type VectorSearchResult, VectorStorage, type VectorStorageOptions, type VectorStorageStats, } from './vector-storage.js';
18
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACN,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,cAAc,EACd,oBAAoB,EACpB,qBAAqB,GACrB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,iBAAiB,EAAE,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAA;AACxE,OAAO,EACN,SAAS,EACT,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EACnB,uBAAuB,EACvB,kBAAkB,EAClB,oBAAoB,EACpB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,qBAAqB,EACrB,2BAA2B,EAC3B,eAAe,GACf,MAAM,iBAAiB,CAAA;AACxB,OAAO,EACN,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,YAAY,EACZ,aAAa,EACb,cAAc,GACd,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EACN,KAAK,gBAAgB,EACrB,gBAAgB,EAChB,KAAK,iBAAiB,GACtB,MAAM,wBAAwB,CAAA;AAE/B,OAAO,EACN,eAAe,EACf,KAAK,eAAe,EACpB,KAAK,QAAQ,EACb,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,YAAY,GACjB,MAAM,cAAc,CAAA;AACrB,OAAO,EACN,KAAK,sBAAsB,EAC3B,qBAAqB,EACrB,iBAAiB,EACjB,4BAA4B,EAC5B,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,EACnB,iBAAiB,EACjB,KAAK,cAAc,GACnB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,UAAU,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC9F,OAAO,EAAE,KAAK,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAC3D,OAAO,EACN,gBAAgB,EAChB,yBAAyB,EACzB,KAAK,cAAc,EACnB,YAAY,EACZ,KAAK,WAAW,EAChB,eAAe,GACf,MAAM,YAAY,CAAA;AACnB,OAAO,EACN,cAAc,EACd,UAAU,EACV,aAAa,EACb,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,SAAS,EACT,UAAU,GACV,MAAM,YAAY,CAAA;AACnB,OAAO,EACN,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,aAAa,EACb,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,GACvB,MAAM,qBAAqB,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,19 @@
1
+ /**
2
+ * @codebase-search/core
3
+ * Core library for intelligent codebase search using TF-IDF
4
+ */
5
+ export { chunkCodeByAST, chunkCodeByASTSimple, getSupportedLanguages, } from './ast-chunking.js';
6
+ export { getCoderagDataDir } from './db/client.js';
7
+ export { chunkText, composeProviders, cosineSimilarity, createDefaultConfig, createEmbeddingProvider, createMockProvider, createOpenAIProvider, generateMockEmbedding, getDefaultEmbeddingProvider, normalizeVector, } from './embeddings.js';
8
+ export { hybridSearch, keywordSearch, semanticSearch, } from './hybrid-search.js';
9
+ export { IncrementalTFIDF, } from './incremental-tfidf.js';
10
+ // Re-export main components
11
+ export { CodebaseIndexer, } from './indexer.js';
12
+ export { EXTENSION_TO_LANGUAGE, getLanguageConfig, getLanguageConfigByExtension, getLanguageFromPath, getSupportedExtensions, isLanguageSupported, LANGUAGE_REGISTRY, } from './language-config.js';
13
+ export { createCacheKey, LRUCache } from './search-cache.js';
14
+ export { MemoryStorage } from './storage.js';
15
+ export { PersistentStorage } from './storage-persistent.js';
16
+ export { buildSearchIndex, calculateCosineSimilarity, processQuery, searchDocuments, } from './tfidf.js';
17
+ export { detectLanguage, isTextFile, loadGitignore, scanFiles, simpleHash, } from './utils.js';
18
+ export { VectorStorage, } from './vector-storage.js';
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAGN,cAAc,EACd,oBAAoB,EACpB,qBAAqB,GACrB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,iBAAiB,EAAwB,MAAM,gBAAgB,CAAA;AACxE,OAAO,EACN,SAAS,EACT,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EACnB,uBAAuB,EACvB,kBAAkB,EAClB,oBAAoB,EAGpB,qBAAqB,EACrB,2BAA2B,EAC3B,eAAe,GACf,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAGN,YAAY,EACZ,aAAa,EACb,cAAc,GACd,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAEN,gBAAgB,GAEhB,MAAM,wBAAwB,CAAA;AAC/B,4BAA4B;AAC5B,OAAO,EACN,eAAe,GAMf,MAAM,cAAc,CAAA;AACrB,OAAO,EAEN,qBAAqB,EACrB,iBAAiB,EACjB,4BAA4B,EAC5B,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,EACnB,iBAAiB,GAEjB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAoC,cAAc,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC9F,OAAO,EAAqB,aAAa,EAAE,MAAM,cAAc,CAAA;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAC3D,OAAO,EACN,gBAAgB,EAChB,yBAAyB,EAEzB,YAAY,EAEZ,eAAe,GACf,MAAM,YAAY,CAAA;AACnB,OAAO,EACN,cAAc,EACd,UAAU,EACV,aAAa,EAGb,SAAS,EACT,UAAU,GACV,MAAM,YAAY,CAAA;AACnB,OAAO,EAGN,aAAa,GAGb,MAAM,qBAAqB,CAAA"}
@@ -0,0 +1,205 @@
1
+ /**
2
+ * Codebase indexer service
3
+ * Uses chunk-level indexing for better search granularity
4
+ */
5
+ import type { EmbeddingProvider } from './embeddings.js';
6
+ import { type Storage } from './storage.js';
7
+ import { type SearchIndex } from './tfidf.js';
8
+ import { type FileMetadata } from './utils.js';
9
+ import { VectorStorage } from './vector-storage.js';
10
+ export interface IndexerOptions {
11
+ codebaseRoot?: string;
12
+ maxFileSize?: number;
13
+ storage?: Storage;
14
+ onProgress?: (current: number, total: number, file: string) => void;
15
+ watch?: boolean;
16
+ onFileChange?: (event: FileChangeEvent) => void;
17
+ embeddingProvider?: EmbeddingProvider;
18
+ vectorBatchSize?: number;
19
+ indexingBatchSize?: number;
20
+ lowMemoryMode?: boolean;
21
+ /** Skip files whose hash matches existing (default true). Set false for benchmarking. */
22
+ skipUnchanged?: boolean;
23
+ /** Tokenize chunk contents in parallel sub-batches (default false). Set true to enable. */
24
+ useParallelTokenize?: boolean;
25
+ }
26
+ export interface FileChangeEvent {
27
+ type: 'add' | 'change' | 'unlink';
28
+ path: string;
29
+ timestamp: number;
30
+ }
31
+ export interface IndexingStatus {
32
+ isIndexing: boolean;
33
+ progress: number;
34
+ totalFiles: number;
35
+ processedFiles: number;
36
+ totalChunks: number;
37
+ indexedChunks: number;
38
+ currentFile?: string;
39
+ }
40
+ /**
41
+ * Result of comparing filesystem with database
42
+ */
43
+ export interface FileDiff {
44
+ added: FileMetadata[];
45
+ changed: FileMetadata[];
46
+ deleted: string[];
47
+ unchanged: number;
48
+ }
49
+ export declare class CodebaseIndexer {
50
+ private codebaseRoot;
51
+ private maxFileSize;
52
+ private storage;
53
+ private searchIndex;
54
+ private incrementalEngine;
55
+ private pendingFileChanges;
56
+ private searchCache;
57
+ private watcher;
58
+ private isWatching;
59
+ private onFileChangeCallback?;
60
+ private pendingUpdates;
61
+ private ignoreFilter;
62
+ private status;
63
+ private vectorStorage?;
64
+ private embeddingProvider?;
65
+ private vectorBatchSize;
66
+ private indexingBatchSize;
67
+ private lowMemoryMode;
68
+ constructor(options?: IndexerOptions);
69
+ /**
70
+ * Get current indexing status
71
+ */
72
+ getStatus(): IndexingStatus;
73
+ /**
74
+ * Compare filesystem with database to find changes
75
+ * Used for incremental updates after long periods of inactivity
76
+ */
77
+ private diffFilesystem;
78
+ /**
79
+ * Process incremental changes (add, update, delete files)
80
+ * Uses chunk-level indexing with SQL-based updates
81
+ */
82
+ private processIncrementalChanges;
83
+ /**
84
+ * Get search index
85
+ */
86
+ getSearchIndex(): SearchIndex | null;
87
+ /**
88
+ * Index the codebase
89
+ */
90
+ index(options?: IndexerOptions): Promise<void>;
91
+ /**
92
+ * Start watching for file changes
93
+ * Uses @parcel/watcher which provides native FSEvents on macOS
94
+ */
95
+ startWatch(): Promise<void>;
96
+ /**
97
+ * Check if a file should be ignored
98
+ */
99
+ private shouldIgnore;
100
+ /**
101
+ * Stop watching for file changes
102
+ */
103
+ stopWatch(): Promise<void>;
104
+ /**
105
+ * Close indexer and release all resources
106
+ * Should be called when the indexer is no longer needed
107
+ */
108
+ close(): Promise<void>;
109
+ /**
110
+ * Handle file change events with debouncing
111
+ */
112
+ private handleFileChange;
113
+ /**
114
+ * Process file change and update index
115
+ */
116
+ private processFileChange;
117
+ /**
118
+ * Rebuild search index from current storage
119
+ * Uses incremental update when possible for performance
120
+ */
121
+ private rebuildSearchIndex;
122
+ /**
123
+ * Full rebuild of search index (fallback when incremental not possible)
124
+ * For persistent storage, this rebuilds the chunk-level index
125
+ */
126
+ private fullRebuildSearchIndex;
127
+ /**
128
+ * Persist search index to storage
129
+ * NOTE: For PersistentStorage, chunk-based indexing happens inline during index()
130
+ * This method is only used for in-memory storage fallback
131
+ */
132
+ private persistSearchIndex;
133
+ /**
134
+ * Check if currently watching for changes
135
+ */
136
+ isWatchEnabled(): boolean;
137
+ /**
138
+ * Search the codebase
139
+ * Returns chunk-level results when using persistent storage (SQL-based search)
140
+ */
141
+ search(query: string, options?: {
142
+ limit?: number;
143
+ includeContent?: boolean;
144
+ fileExtensions?: string[];
145
+ pathFilter?: string;
146
+ excludePaths?: string[];
147
+ contextLines?: number;
148
+ maxSnippetChars?: number;
149
+ maxSnippetBlocks?: number;
150
+ }): Promise<SearchResult[]>;
151
+ /**
152
+ * Chunk-based search with BM25 scoring
153
+ * Returns chunk content directly (no separate snippet extraction needed)
154
+ */
155
+ private searchChunks;
156
+ /**
157
+ * Extract code block snippets from content around matched terms
158
+ *
159
+ * Returns the most relevant code blocks (not just lines) with context.
160
+ * Blocks are ranked by term density (more matched terms = higher score).
161
+ */
162
+ private extractSnippet;
163
+ /**
164
+ * Get file content
165
+ */
166
+ getFileContent(filePath: string): Promise<string | null>;
167
+ /**
168
+ * Get total indexed files count
169
+ */
170
+ getIndexedCount(): Promise<number>;
171
+ /**
172
+ * Get vector storage (for hybrid search)
173
+ */
174
+ getVectorStorage(): VectorStorage | undefined;
175
+ /**
176
+ * Get embedding provider (for hybrid search)
177
+ */
178
+ getEmbeddingProvider(): EmbeddingProvider | undefined;
179
+ /**
180
+ * Build vector index from file metadata (Memory optimization)
181
+ * Generates embeddings per CHUNK, not per file
182
+ */
183
+ private buildVectorIndexFromMetadata;
184
+ /**
185
+ * Update vectors for a single file (chunk-level)
186
+ * Deletes old chunks and adds new ones
187
+ */
188
+ private updateFileVector;
189
+ /**
190
+ * Delete vectors for a file (all chunks)
191
+ */
192
+ private deleteFileVector;
193
+ }
194
+ export interface SearchResult {
195
+ path: string;
196
+ score: number;
197
+ matchedTerms: string[];
198
+ language?: string;
199
+ size: number;
200
+ snippet?: string;
201
+ chunkType?: string;
202
+ startLine?: number;
203
+ endLine?: number;
204
+ }
205
+ //# sourceMappingURL=indexer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexer.d.ts","sourceRoot":"","sources":["../src/indexer.ts"],"names":[],"mappings":"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"}