codebase-context 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +74 -0
  3. package/dist/analyzers/angular/index.d.ts +44 -0
  4. package/dist/analyzers/angular/index.d.ts.map +1 -0
  5. package/dist/analyzers/angular/index.js +922 -0
  6. package/dist/analyzers/angular/index.js.map +1 -0
  7. package/dist/analyzers/generic/index.d.ts +23 -0
  8. package/dist/analyzers/generic/index.d.ts.map +1 -0
  9. package/dist/analyzers/generic/index.js +354 -0
  10. package/dist/analyzers/generic/index.js.map +1 -0
  11. package/dist/core/analyzer-registry.d.ts +36 -0
  12. package/dist/core/analyzer-registry.d.ts.map +1 -0
  13. package/dist/core/analyzer-registry.js +78 -0
  14. package/dist/core/analyzer-registry.js.map +1 -0
  15. package/dist/core/file-watcher.d.ts +63 -0
  16. package/dist/core/file-watcher.d.ts.map +1 -0
  17. package/dist/core/file-watcher.js +210 -0
  18. package/dist/core/file-watcher.js.map +1 -0
  19. package/dist/core/indexer.d.ts +29 -0
  20. package/dist/core/indexer.d.ts.map +1 -0
  21. package/dist/core/indexer.js +507 -0
  22. package/dist/core/indexer.js.map +1 -0
  23. package/dist/core/search.d.ts +31 -0
  24. package/dist/core/search.d.ts.map +1 -0
  25. package/dist/core/search.js +307 -0
  26. package/dist/core/search.js.map +1 -0
  27. package/dist/embeddings/index.d.ts +5 -0
  28. package/dist/embeddings/index.d.ts.map +1 -0
  29. package/dist/embeddings/index.js +33 -0
  30. package/dist/embeddings/index.js.map +1 -0
  31. package/dist/embeddings/openai.d.ts +19 -0
  32. package/dist/embeddings/openai.d.ts.map +1 -0
  33. package/dist/embeddings/openai.js +59 -0
  34. package/dist/embeddings/openai.js.map +1 -0
  35. package/dist/embeddings/transformers.d.ts +17 -0
  36. package/dist/embeddings/transformers.d.ts.map +1 -0
  37. package/dist/embeddings/transformers.js +83 -0
  38. package/dist/embeddings/transformers.js.map +1 -0
  39. package/dist/embeddings/types.d.ts +20 -0
  40. package/dist/embeddings/types.d.ts.map +1 -0
  41. package/dist/embeddings/types.js +9 -0
  42. package/dist/embeddings/types.js.map +1 -0
  43. package/dist/index.d.ts +41 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +790 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/lib.d.ts +58 -0
  48. package/dist/lib.d.ts.map +1 -0
  49. package/dist/lib.js +81 -0
  50. package/dist/lib.js.map +1 -0
  51. package/dist/storage/index.d.ts +12 -0
  52. package/dist/storage/index.d.ts.map +1 -0
  53. package/dist/storage/index.js +18 -0
  54. package/dist/storage/index.js.map +1 -0
  55. package/dist/storage/lancedb.d.ts +24 -0
  56. package/dist/storage/lancedb.d.ts.map +1 -0
  57. package/dist/storage/lancedb.js +197 -0
  58. package/dist/storage/lancedb.js.map +1 -0
  59. package/dist/storage/types.d.ts +45 -0
  60. package/dist/storage/types.d.ts.map +1 -0
  61. package/dist/storage/types.js +8 -0
  62. package/dist/storage/types.js.map +1 -0
  63. package/dist/types/index.d.ts +367 -0
  64. package/dist/types/index.d.ts.map +1 -0
  65. package/dist/types/index.js +6 -0
  66. package/dist/types/index.js.map +1 -0
  67. package/dist/utils/chunking.d.ts +23 -0
  68. package/dist/utils/chunking.d.ts.map +1 -0
  69. package/dist/utils/chunking.js +226 -0
  70. package/dist/utils/chunking.js.map +1 -0
  71. package/dist/utils/language-detection.d.ts +29 -0
  72. package/dist/utils/language-detection.d.ts.map +1 -0
  73. package/dist/utils/language-detection.js +127 -0
  74. package/dist/utils/language-detection.js.map +1 -0
  75. package/dist/utils/pattern-detector.d.ts +41 -0
  76. package/dist/utils/pattern-detector.d.ts.map +1 -0
  77. package/dist/utils/pattern-detector.js +101 -0
  78. package/dist/utils/pattern-detector.js.map +1 -0
  79. package/dist/utils/usage-tracker.d.ts +120 -0
  80. package/dist/utils/usage-tracker.d.ts.map +1 -0
  81. package/dist/utils/usage-tracker.js +336 -0
  82. package/dist/utils/usage-tracker.js.map +1 -0
  83. package/package.json +98 -0
@@ -0,0 +1,507 @@
1
+ /**
2
+ * Core Indexer - Orchestrates codebase indexing
3
+ * Scans files, delegates to analyzers, creates embeddings, stores in vector DB
4
+ */
5
+ import { promises as fs } from "fs";
6
+ import path from "path";
7
+ import { glob } from "glob";
8
+ import ignore from "ignore";
9
+ import { analyzerRegistry } from "./analyzer-registry.js";
10
+ import { isCodeFile, isBinaryFile } from "../utils/language-detection.js";
11
+ import { getEmbeddingProvider, } from "../embeddings/index.js";
12
+ import { getStorageProvider, } from "../storage/index.js";
13
+ import { LibraryUsageTracker, PatternDetector, ImportGraph } from "../utils/usage-tracker.js";
14
+ export class CodebaseIndexer {
15
+ rootPath;
16
+ config;
17
+ progress;
18
+ onProgressCallback;
19
+ constructor(options) {
20
+ this.rootPath = path.resolve(options.rootPath);
21
+ this.config = this.mergeConfig(options.config);
22
+ this.onProgressCallback = options.onProgress;
23
+ this.progress = {
24
+ phase: "initializing",
25
+ percentage: 0,
26
+ filesProcessed: 0,
27
+ totalFiles: 0,
28
+ chunksCreated: 0,
29
+ errors: [],
30
+ startedAt: new Date(),
31
+ };
32
+ }
33
+ mergeConfig(userConfig) {
34
+ const defaultConfig = {
35
+ analyzers: {
36
+ angular: { enabled: true, priority: 100 },
37
+ react: { enabled: false, priority: 90 },
38
+ vue: { enabled: false, priority: 90 },
39
+ generic: { enabled: true, priority: 10 },
40
+ },
41
+ include: ["**/*.{ts,tsx,js,jsx,html,css,scss,sass,less}"],
42
+ exclude: [
43
+ "node_modules/**",
44
+ "dist/**",
45
+ "build/**",
46
+ ".git/**",
47
+ "coverage/**",
48
+ ],
49
+ respectGitignore: true,
50
+ parsing: {
51
+ maxFileSize: 1048576, // 1MB
52
+ chunkSize: 100,
53
+ chunkOverlap: 10,
54
+ parseTests: true,
55
+ parseNodeModules: false,
56
+ },
57
+ styleGuides: {
58
+ autoDetect: true,
59
+ paths: ["STYLE_GUIDE.md", "docs/style-guide.md", "ARCHITECTURE.md"],
60
+ parseMarkdown: true,
61
+ },
62
+ documentation: {
63
+ autoDetect: true,
64
+ includeReadmes: true,
65
+ includeChangelogs: false,
66
+ },
67
+ embedding: {
68
+ provider: "transformers",
69
+ model: "Xenova/bge-base-en-v1.5",
70
+ batchSize: 100,
71
+ },
72
+ skipEmbedding: false,
73
+ storage: {
74
+ provider: "lancedb",
75
+ path: "./codebase-index",
76
+ },
77
+ };
78
+ return {
79
+ ...defaultConfig,
80
+ ...userConfig,
81
+ analyzers: { ...defaultConfig.analyzers, ...userConfig?.analyzers },
82
+ parsing: { ...defaultConfig.parsing, ...userConfig?.parsing },
83
+ styleGuides: { ...defaultConfig.styleGuides, ...userConfig?.styleGuides },
84
+ documentation: {
85
+ ...defaultConfig.documentation,
86
+ ...userConfig?.documentation,
87
+ },
88
+ embedding: { ...defaultConfig.embedding, ...userConfig?.embedding },
89
+ storage: { ...defaultConfig.storage, ...userConfig?.storage },
90
+ };
91
+ }
92
+ async index() {
93
+ const startTime = Date.now();
94
+ const stats = {
95
+ totalFiles: 0,
96
+ indexedFiles: 0,
97
+ skippedFiles: 0,
98
+ totalChunks: 0,
99
+ totalLines: 0,
100
+ duration: 0,
101
+ avgChunkSize: 0,
102
+ componentsByType: {},
103
+ componentsByLayer: {
104
+ presentation: 0,
105
+ business: 0,
106
+ data: 0,
107
+ state: 0,
108
+ core: 0,
109
+ shared: 0,
110
+ feature: 0,
111
+ infrastructure: 0,
112
+ unknown: 0,
113
+ },
114
+ errors: [],
115
+ startedAt: new Date(),
116
+ };
117
+ try {
118
+ // Phase 1: Scanning
119
+ this.updateProgress("scanning", 0);
120
+ let files = await this.scanFiles();
121
+ // Memory safety: limit total files to prevent heap exhaustion
122
+ const MAX_FILES = 10000;
123
+ if (files.length > MAX_FILES) {
124
+ console.warn(`WARNING: Found ${files.length} files, limiting to ${MAX_FILES} to prevent memory issues.`);
125
+ console.warn(`Consider using more specific include patterns or excluding large directories.`);
126
+ files = files.slice(0, MAX_FILES);
127
+ }
128
+ stats.totalFiles = files.length;
129
+ this.progress.totalFiles = files.length;
130
+ console.error(`Found ${files.length} files to index`);
131
+ // Phase 2: Analyzing & Parsing
132
+ this.updateProgress("analyzing", 0);
133
+ const allChunks = [];
134
+ const libraryTracker = new LibraryUsageTracker();
135
+ const patternDetector = new PatternDetector();
136
+ const importGraph = new ImportGraph();
137
+ for (let i = 0; i < files.length; i++) {
138
+ const file = files[i];
139
+ this.progress.currentFile = file;
140
+ this.progress.filesProcessed = i + 1;
141
+ this.progress.percentage = Math.round(((i + 1) / files.length) * 100);
142
+ try {
143
+ // Normalize line endings to \n for consistent cross-platform output
144
+ const rawContent = await fs.readFile(file, "utf-8");
145
+ const content = rawContent.replace(/\r\n/g, "\n");
146
+ const result = await analyzerRegistry.analyzeFile(file, content);
147
+ if (result) {
148
+ allChunks.push(...result.chunks);
149
+ stats.indexedFiles++;
150
+ stats.totalLines += content.split("\n").length;
151
+ // Track library usage AND import graph from imports
152
+ for (const imp of result.imports) {
153
+ libraryTracker.track(imp.source, file);
154
+ importGraph.trackImport(imp.source, file, imp.line || 1);
155
+ }
156
+ // Detect generic patterns from code
157
+ patternDetector.detectFromCode(content, file);
158
+ // Helper to extract code snippet around a pattern
159
+ const extractSnippet = (pattern, linesBefore = 1, linesAfter = 3) => {
160
+ const match = content.match(pattern);
161
+ if (!match)
162
+ return undefined;
163
+ const lines = content.split('\n');
164
+ const matchIndex = content.substring(0, match.index).split('\n').length - 1;
165
+ const start = Math.max(0, matchIndex - linesBefore);
166
+ const end = Math.min(lines.length, matchIndex + linesAfter + 1);
167
+ return lines.slice(start, end).join('\n').trim();
168
+ };
169
+ const relPath = file.split(/[\\/]/).slice(-3).join('/');
170
+ // GENERIC PATTERN FORWARDING
171
+ // Framework analyzers return detectedPatterns in metadata - we just forward them
172
+ // This keeps the indexer framework-agnostic
173
+ if (result.metadata?.detectedPatterns) {
174
+ for (const pattern of result.metadata.detectedPatterns) {
175
+ // Try to extract a relevant snippet for the pattern
176
+ const snippetPattern = this.getSnippetPatternFor(pattern.category, pattern.name);
177
+ const snippet = snippetPattern ? extractSnippet(snippetPattern) : undefined;
178
+ patternDetector.track(pattern.category, pattern.name, snippet ? { file: relPath, snippet } : undefined);
179
+ }
180
+ }
181
+ // Track file for Golden File scoring (framework-agnostic based on patterns)
182
+ const detectedPatterns = result.metadata?.detectedPatterns || [];
183
+ const hasPattern = (category, name) => detectedPatterns.some((p) => p.category === category && p.name === name);
184
+ const patternScore = ((hasPattern('dependencyInjection', 'inject() function') ? 1 : 0) +
185
+ (hasPattern('stateManagement', 'Signals') ? 1 : 0) +
186
+ (hasPattern('reactivity', 'Computed') ? 1 : 0) +
187
+ (hasPattern('reactivity', 'Effect') ? 1 : 0) +
188
+ (hasPattern('componentStyle', 'Standalone') ? 1 : 0) +
189
+ (hasPattern('componentInputs', 'Signal-based inputs') ? 1 : 0));
190
+ if (patternScore >= 3) {
191
+ patternDetector.trackGoldenFile(relPath, patternScore, {
192
+ inject: hasPattern('dependencyInjection', 'inject() function'),
193
+ signals: hasPattern('stateManagement', 'Signals'),
194
+ computed: hasPattern('reactivity', 'Computed'),
195
+ effect: hasPattern('reactivity', 'Effect'),
196
+ standalone: hasPattern('componentStyle', 'Standalone'),
197
+ signalInputs: hasPattern('componentInputs', 'Signal-based inputs'),
198
+ });
199
+ }
200
+ // Update component statistics
201
+ for (const component of result.components) {
202
+ if (component.componentType) {
203
+ stats.componentsByType[component.componentType] =
204
+ (stats.componentsByType[component.componentType] || 0) + 1;
205
+ }
206
+ if (component.layer) {
207
+ stats.componentsByLayer[component.layer]++;
208
+ }
209
+ }
210
+ }
211
+ else {
212
+ stats.skippedFiles++;
213
+ }
214
+ }
215
+ catch (error) {
216
+ stats.skippedFiles++;
217
+ stats.errors.push({
218
+ filePath: file,
219
+ error: error instanceof Error ? error.message : String(error),
220
+ phase: "analyzing",
221
+ timestamp: new Date(),
222
+ });
223
+ }
224
+ if (this.onProgressCallback) {
225
+ this.onProgressCallback(this.progress);
226
+ }
227
+ }
228
+ stats.totalChunks = allChunks.length;
229
+ stats.avgChunkSize =
230
+ allChunks.length > 0
231
+ ? Math.round(allChunks.reduce((sum, c) => sum + c.content.length, 0) /
232
+ allChunks.length)
233
+ : 0;
234
+ // Memory safety: limit chunks to prevent embedding memory issues
235
+ const MAX_CHUNKS = 5000;
236
+ let chunksToEmbed = allChunks;
237
+ if (allChunks.length > MAX_CHUNKS) {
238
+ console.warn(`WARNING: ${allChunks.length} chunks exceed limit. Indexing first ${MAX_CHUNKS} chunks.`);
239
+ chunksToEmbed = allChunks.slice(0, MAX_CHUNKS);
240
+ }
241
+ // Phase 3: Embedding
242
+ let chunksWithEmbeddings = [];
243
+ if (!this.config.skipEmbedding) {
244
+ this.updateProgress("embedding", 50);
245
+ console.error(`Creating embeddings for ${chunksToEmbed.length} chunks...`);
246
+ // Initialize embedding provider
247
+ const embeddingProvider = await getEmbeddingProvider(this.config.embedding);
248
+ // Generate embeddings for all chunks
249
+ const batchSize = this.config.embedding?.batchSize || 32;
250
+ for (let i = 0; i < chunksToEmbed.length; i += batchSize) {
251
+ const batch = chunksToEmbed.slice(i, i + batchSize);
252
+ const texts = batch.map((chunk) => {
253
+ // Create a searchable text representation
254
+ const parts = [chunk.content];
255
+ if (chunk.metadata?.componentName) {
256
+ parts.unshift(`Component: ${chunk.metadata.componentName}`);
257
+ }
258
+ if (chunk.componentType) {
259
+ parts.unshift(`Type: ${chunk.componentType}`);
260
+ }
261
+ return parts.join("\n");
262
+ });
263
+ const embeddings = await embeddingProvider.embedBatch(texts);
264
+ for (let j = 0; j < batch.length; j++) {
265
+ chunksWithEmbeddings.push({
266
+ ...batch[j],
267
+ embedding: embeddings[j],
268
+ });
269
+ }
270
+ // Update progress
271
+ const embeddingProgress = 50 + Math.round((i / chunksToEmbed.length) * 25);
272
+ this.updateProgress("embedding", embeddingProgress);
273
+ if ((i + batchSize) % 100 === 0 ||
274
+ i + batchSize >= chunksToEmbed.length) {
275
+ console.error(`Embedded ${Math.min(i + batchSize, chunksToEmbed.length)}/${chunksToEmbed.length} chunks`);
276
+ }
277
+ }
278
+ }
279
+ else {
280
+ console.error("Skipping embedding generation (skipEmbedding=true)");
281
+ }
282
+ // Phase 4: Storing
283
+ this.updateProgress("storing", 75);
284
+ if (!this.config.skipEmbedding) {
285
+ console.error(`Storing ${chunksToEmbed.length} chunks...`);
286
+ // Store in LanceDB for vector search
287
+ const storagePath = path.join(this.rootPath, ".codebase-index");
288
+ const storageProvider = await getStorageProvider({ path: storagePath });
289
+ await storageProvider.clear(); // Clear existing index
290
+ await storageProvider.store(chunksWithEmbeddings);
291
+ }
292
+ // Also save JSON for keyword search (Fuse.js) - use chunksToEmbed for consistency
293
+ const indexPath = path.join(this.rootPath, ".codebase-index.json");
294
+ // Write without pretty-printing to save memory
295
+ await fs.writeFile(indexPath, JSON.stringify(chunksToEmbed));
296
+ // Save library usage and pattern stats
297
+ const intelligencePath = path.join(this.rootPath, ".codebase-intelligence.json");
298
+ const libraryStats = libraryTracker.getStats();
299
+ // Extract tsconfig paths for AI to understand import aliases
300
+ let tsconfigPaths;
301
+ try {
302
+ const tsconfigPath = path.join(this.rootPath, "tsconfig.json");
303
+ const tsconfigContent = await fs.readFile(tsconfigPath, "utf-8");
304
+ const tsconfig = JSON.parse(tsconfigContent);
305
+ if (tsconfig.compilerOptions?.paths) {
306
+ tsconfigPaths = tsconfig.compilerOptions.paths;
307
+ console.error(`Found ${Object.keys(tsconfigPaths).length} path aliases in tsconfig.json`);
308
+ }
309
+ }
310
+ catch (error) {
311
+ // No tsconfig.json or no paths defined
312
+ }
313
+ const intelligence = {
314
+ libraryUsage: libraryStats,
315
+ patterns: patternDetector.getAllPatterns(),
316
+ goldenFiles: patternDetector.getGoldenFiles(5),
317
+ // tsconfig paths help AI understand import aliases (e.g., @mycompany/* -> libs/*)
318
+ // This reveals which @scoped packages are internal vs external
319
+ tsconfigPaths,
320
+ importGraph: {
321
+ usages: importGraph.getAllUsages(),
322
+ topUsed: importGraph.getTopUsed(30),
323
+ },
324
+ generatedAt: new Date().toISOString(),
325
+ };
326
+ await fs.writeFile(intelligencePath, JSON.stringify(intelligence, null, 2));
327
+ // Phase 5: Complete
328
+ this.updateProgress("complete", 100);
329
+ stats.duration = Date.now() - startTime;
330
+ stats.completedAt = new Date();
331
+ console.error(`Indexing complete in ${stats.duration}ms`);
332
+ console.error(`Indexed ${stats.indexedFiles} files, ${stats.totalChunks} chunks`);
333
+ return stats;
334
+ }
335
+ catch (error) {
336
+ this.progress.phase = "error";
337
+ stats.errors.push({
338
+ filePath: this.rootPath,
339
+ error: error instanceof Error ? error.message : String(error),
340
+ phase: this.progress.phase,
341
+ timestamp: new Date(),
342
+ });
343
+ throw error;
344
+ }
345
+ }
346
+ async scanFiles() {
347
+ const files = [];
348
+ // Read .gitignore if respecting it
349
+ let ig = null;
350
+ if (this.config.respectGitignore) {
351
+ try {
352
+ const gitignorePath = path.join(this.rootPath, ".gitignore");
353
+ const gitignoreContent = await fs.readFile(gitignorePath, "utf-8");
354
+ ig = ignore.default().add(gitignoreContent);
355
+ }
356
+ catch (error) {
357
+ // No .gitignore or couldn't read it
358
+ }
359
+ }
360
+ // Scan with glob
361
+ const includePatterns = this.config.include || ["**/*"];
362
+ const excludePatterns = this.config.exclude || [];
363
+ for (const pattern of includePatterns) {
364
+ const matches = await glob(pattern, {
365
+ cwd: this.rootPath,
366
+ absolute: true,
367
+ ignore: excludePatterns,
368
+ nodir: true,
369
+ });
370
+ for (const file of matches) {
371
+ const relativePath = path.relative(this.rootPath, file);
372
+ // Check gitignore
373
+ if (ig && ig.ignores(relativePath)) {
374
+ continue;
375
+ }
376
+ // Check if it's a code file
377
+ if (!isCodeFile(file) || isBinaryFile(file)) {
378
+ continue;
379
+ }
380
+ // Check file size
381
+ try {
382
+ const stats = await fs.stat(file);
383
+ if (stats.size > (this.config.parsing?.maxFileSize || 1048576)) {
384
+ console.warn(`Skipping large file: ${file} (${stats.size} bytes)`);
385
+ continue;
386
+ }
387
+ }
388
+ catch (error) {
389
+ continue;
390
+ }
391
+ files.push(file);
392
+ }
393
+ }
394
+ return files;
395
+ }
396
+ updateProgress(phase, percentage) {
397
+ this.progress.phase = phase;
398
+ this.progress.percentage = percentage;
399
+ if (this.onProgressCallback) {
400
+ this.onProgressCallback(this.progress);
401
+ }
402
+ }
403
+ async detectMetadata() {
404
+ // Try to use the most specific analyzer for metadata detection
405
+ const primaryAnalyzer = analyzerRegistry.getAll()[0]; // Highest priority
406
+ let metadata;
407
+ if (primaryAnalyzer) {
408
+ metadata = await primaryAnalyzer.detectCodebaseMetadata(this.rootPath);
409
+ }
410
+ else {
411
+ // Fallback metadata
412
+ metadata = {
413
+ name: path.basename(this.rootPath),
414
+ rootPath: this.rootPath,
415
+ languages: [],
416
+ dependencies: [],
417
+ architecture: {
418
+ type: "mixed",
419
+ layers: {
420
+ presentation: 0,
421
+ business: 0,
422
+ data: 0,
423
+ state: 0,
424
+ core: 0,
425
+ shared: 0,
426
+ feature: 0,
427
+ infrastructure: 0,
428
+ unknown: 0,
429
+ },
430
+ patterns: [],
431
+ },
432
+ styleGuides: [],
433
+ documentation: [],
434
+ projectStructure: {
435
+ type: "single-app",
436
+ },
437
+ statistics: {
438
+ totalFiles: 0,
439
+ totalLines: 0,
440
+ totalComponents: 0,
441
+ componentsByType: {},
442
+ componentsByLayer: {
443
+ presentation: 0,
444
+ business: 0,
445
+ data: 0,
446
+ state: 0,
447
+ core: 0,
448
+ shared: 0,
449
+ feature: 0,
450
+ infrastructure: 0,
451
+ unknown: 0,
452
+ },
453
+ },
454
+ customMetadata: {},
455
+ };
456
+ }
457
+ // Load intelligence data if available
458
+ try {
459
+ const intelligencePath = path.join(this.rootPath, ".codebase-intelligence.json");
460
+ const intelligenceContent = await fs.readFile(intelligencePath, "utf-8");
461
+ const intelligence = JSON.parse(intelligenceContent);
462
+ metadata.customMetadata = {
463
+ ...metadata.customMetadata,
464
+ libraryUsage: intelligence.libraryUsage,
465
+ patterns: intelligence.patterns,
466
+ intelligenceGeneratedAt: intelligence.generatedAt,
467
+ };
468
+ }
469
+ catch (error) {
470
+ // Intelligence file doesn't exist yet (indexing not run)
471
+ }
472
+ return metadata;
473
+ }
474
+ /**
475
+ * Get regex pattern for extracting code snippets based on pattern category and name
476
+ * This maps abstract pattern names to actual code patterns
477
+ */
478
+ getSnippetPatternFor(category, name) {
479
+ const patterns = {
480
+ dependencyInjection: {
481
+ 'inject() function': /\binject\s*[<(]/,
482
+ 'Constructor injection': /constructor\s*\(/,
483
+ },
484
+ stateManagement: {
485
+ 'RxJS': /BehaviorSubject|ReplaySubject|Subject|Observable/,
486
+ 'Signals': /\bsignal\s*[<(]/,
487
+ },
488
+ reactivity: {
489
+ 'Effect': /\beffect\s*\(/,
490
+ 'Computed': /\bcomputed\s*[<(]/,
491
+ },
492
+ componentStyle: {
493
+ 'Standalone': /standalone\s*:\s*true/,
494
+ 'NgModule-based': /@(?:Component|Directive|Pipe)\s*\(/,
495
+ },
496
+ componentInputs: {
497
+ 'Signal-based inputs': /\binput\s*[<(]/,
498
+ 'Decorator-based @Input': /@Input\(\)/,
499
+ },
500
+ };
501
+ return patterns[category]?.[name] || null;
502
+ }
503
+ getProgress() {
504
+ return { ...this.progress };
505
+ }
506
+ }
507
+ //# sourceMappingURL=indexer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexer.js","sourceRoot":"","sources":["../../src/core/indexer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Hybrid search combining semantic vector search with keyword matching
3
+ */
4
+ import { SearchResult, SearchFilters } from "../types/index.js";
5
+ export interface SearchOptions {
6
+ useSemanticSearch?: boolean;
7
+ useKeywordSearch?: boolean;
8
+ semanticWeight?: number;
9
+ keywordWeight?: number;
10
+ }
11
+ export declare class CodebaseSearcher {
12
+ private rootPath;
13
+ private storagePath;
14
+ private fuseIndex;
15
+ private chunks;
16
+ private embeddingProvider;
17
+ private storageProvider;
18
+ private initialized;
19
+ constructor(rootPath: string);
20
+ initialize(): Promise<void>;
21
+ private loadKeywordIndex;
22
+ search(query: string, limit?: number, filters?: SearchFilters, options?: SearchOptions): Promise<SearchResult[]>;
23
+ private generateSummary;
24
+ private generateSnippet;
25
+ private semanticSearch;
26
+ private keywordSearch;
27
+ private generateRelevanceReason;
28
+ getChunkCount(): Promise<number>;
29
+ isReady(): boolean;
30
+ }
31
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/core/search.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,EAAa,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAQ3E,MAAM,WAAW,aAAa;IAC5B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AASD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,WAAW,CAAS;IAE5B,OAAO,CAAC,SAAS,CAAgC;IACjD,OAAO,CAAC,MAAM,CAAmB;IAEjC,OAAO,CAAC,iBAAiB,CAAkC;IAC3D,OAAO,CAAC,eAAe,CAAsC;IAE7D,OAAO,CAAC,WAAW,CAAS;gBAEhB,QAAQ,EAAE,MAAM;IAKtB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;YAkBnB,gBAAgB;IA4BxB,MAAM,CACV,KAAK,EAAE,MAAM,EACb,KAAK,GAAE,MAAU,EACjB,OAAO,CAAC,EAAE,aAAa,EACvB,OAAO,GAAE,aAAsC,GAC9C,OAAO,CAAC,YAAY,EAAE,CAAC;IAiH1B,OAAO,CAAC,eAAe;IAuDvB,OAAO,CAAC,eAAe;YAWT,cAAc;YAuBd,aAAa;IA+E3B,OAAO,CAAC,uBAAuB;IAsBzB,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;IAOtC,OAAO,IAAI,OAAO;CAGnB"}