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.
- package/LICENSE +21 -0
- package/README.md +74 -0
- package/dist/analyzers/angular/index.d.ts +44 -0
- package/dist/analyzers/angular/index.d.ts.map +1 -0
- package/dist/analyzers/angular/index.js +922 -0
- package/dist/analyzers/angular/index.js.map +1 -0
- package/dist/analyzers/generic/index.d.ts +23 -0
- package/dist/analyzers/generic/index.d.ts.map +1 -0
- package/dist/analyzers/generic/index.js +354 -0
- package/dist/analyzers/generic/index.js.map +1 -0
- package/dist/core/analyzer-registry.d.ts +36 -0
- package/dist/core/analyzer-registry.d.ts.map +1 -0
- package/dist/core/analyzer-registry.js +78 -0
- package/dist/core/analyzer-registry.js.map +1 -0
- package/dist/core/file-watcher.d.ts +63 -0
- package/dist/core/file-watcher.d.ts.map +1 -0
- package/dist/core/file-watcher.js +210 -0
- package/dist/core/file-watcher.js.map +1 -0
- package/dist/core/indexer.d.ts +29 -0
- package/dist/core/indexer.d.ts.map +1 -0
- package/dist/core/indexer.js +507 -0
- package/dist/core/indexer.js.map +1 -0
- package/dist/core/search.d.ts +31 -0
- package/dist/core/search.d.ts.map +1 -0
- package/dist/core/search.js +307 -0
- package/dist/core/search.js.map +1 -0
- package/dist/embeddings/index.d.ts +5 -0
- package/dist/embeddings/index.d.ts.map +1 -0
- package/dist/embeddings/index.js +33 -0
- package/dist/embeddings/index.js.map +1 -0
- package/dist/embeddings/openai.d.ts +19 -0
- package/dist/embeddings/openai.d.ts.map +1 -0
- package/dist/embeddings/openai.js +59 -0
- package/dist/embeddings/openai.js.map +1 -0
- package/dist/embeddings/transformers.d.ts +17 -0
- package/dist/embeddings/transformers.d.ts.map +1 -0
- package/dist/embeddings/transformers.js +83 -0
- package/dist/embeddings/transformers.js.map +1 -0
- package/dist/embeddings/types.d.ts +20 -0
- package/dist/embeddings/types.d.ts.map +1 -0
- package/dist/embeddings/types.js +9 -0
- package/dist/embeddings/types.js.map +1 -0
- package/dist/index.d.ts +41 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +790 -0
- package/dist/index.js.map +1 -0
- package/dist/lib.d.ts +58 -0
- package/dist/lib.d.ts.map +1 -0
- package/dist/lib.js +81 -0
- package/dist/lib.js.map +1 -0
- package/dist/storage/index.d.ts +12 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +18 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/lancedb.d.ts +24 -0
- package/dist/storage/lancedb.d.ts.map +1 -0
- package/dist/storage/lancedb.js +197 -0
- package/dist/storage/lancedb.js.map +1 -0
- package/dist/storage/types.d.ts +45 -0
- package/dist/storage/types.d.ts.map +1 -0
- package/dist/storage/types.js +8 -0
- package/dist/storage/types.js.map +1 -0
- package/dist/types/index.d.ts +367 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +6 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/chunking.d.ts +23 -0
- package/dist/utils/chunking.d.ts.map +1 -0
- package/dist/utils/chunking.js +226 -0
- package/dist/utils/chunking.js.map +1 -0
- package/dist/utils/language-detection.d.ts +29 -0
- package/dist/utils/language-detection.d.ts.map +1 -0
- package/dist/utils/language-detection.js +127 -0
- package/dist/utils/language-detection.js.map +1 -0
- package/dist/utils/pattern-detector.d.ts +41 -0
- package/dist/utils/pattern-detector.d.ts.map +1 -0
- package/dist/utils/pattern-detector.js +101 -0
- package/dist/utils/pattern-detector.js.map +1 -0
- package/dist/utils/usage-tracker.d.ts +120 -0
- package/dist/utils/usage-tracker.d.ts.map +1 -0
- package/dist/utils/usage-tracker.js +336 -0
- package/dist/utils/usage-tracker.js.map +1 -0
- 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"}
|