codebase-context 1.0.1 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -8,6 +8,7 @@ export interface LibraryUsageStats {
8
8
  examples: string[];
9
9
  };
10
10
  }
11
+ export type PatternTrend = 'Rising' | 'Declining' | 'Stable';
11
12
  export interface PatternUsageStats {
12
13
  [patternName: string]: {
13
14
  primary: {
@@ -19,11 +20,19 @@ export interface PatternUsageStats {
19
20
  file: string;
20
21
  snippet: string;
21
22
  };
23
+ newestFileDate?: string;
24
+ trend?: PatternTrend;
25
+ /** Actionable guidance: "USE: X" or "CAUTION: Y" */
26
+ guidance?: string;
22
27
  };
23
28
  alsoDetected?: Array<{
24
29
  name: string;
25
30
  count: number;
26
31
  frequency: string;
32
+ newestFileDate?: string;
33
+ trend?: PatternTrend;
34
+ /** Actionable guidance for alternative patterns */
35
+ guidance?: string;
27
36
  }>;
28
37
  };
29
38
  }
@@ -88,13 +97,14 @@ export interface GoldenFile {
88
97
  export declare class PatternDetector {
89
98
  private patterns;
90
99
  private canonicalExamples;
100
+ private patternFileDates;
91
101
  private goldenFiles;
92
102
  private testFrameworkConfigs;
93
103
  constructor(customConfigs?: TestFrameworkConfig[]);
94
104
  track(category: string, patternName: string, example?: {
95
105
  file: string;
96
106
  snippet: string;
97
- }): void;
107
+ }, fileDate?: Date): void;
98
108
  /**
99
109
  * Track a file as a potential "Golden File" - a file that demonstrates multiple modern patterns
100
110
  */
@@ -103,6 +113,23 @@ export declare class PatternDetector {
103
113
  * Get top N Golden Files - files that best demonstrate all modern patterns together
104
114
  */
105
115
  getGoldenFiles(n?: number): GoldenFile[];
116
+ /**
117
+ * Generate actionable guidance from percentage + trend.
118
+ * This is what AI agents can directly consume.
119
+ *
120
+ * Examples:
121
+ * - "USE: inject() – 97% adoption, stable"
122
+ * - "CAUTION: constructor DI – 3%, declining"
123
+ * - "AVOID: BehaviorSubject – legacy pattern, declining"
124
+ */
125
+ private generateGuidance;
126
+ /**
127
+ * Get robust date for a pattern (P90 percentile) to avoid "single file edit" skew
128
+ * This means we take the date of the 10th percentile newest file.
129
+ * For example, if there are 100 files, we take the 10th newest file's date.
130
+ * This allows ~10% of legacy files to be edited without resetting the trend.
131
+ */
132
+ private getRobustDate;
106
133
  getConsensus(category: string): PatternUsageStats[string] | null;
107
134
  getAllPatterns(): PatternUsageStats;
108
135
  /**
@@ -116,5 +143,87 @@ export declare class PatternDetector {
116
143
  */
117
144
  detectFromCode(content: string, filePath: string): void;
118
145
  }
146
+ /**
147
+ * InternalFileGraph - Tracks file-to-file import relationships for internal files only.
148
+ * Used for:
149
+ * 1. Circular dependency detection (toxic coupling)
150
+ * 2. Unused export detection (dead code identification)
151
+ *
152
+ * Unlike ImportGraph which tracks external package usage, this tracks the internal
153
+ * dependency graph between project files.
154
+ */
155
+ export interface FileExport {
156
+ name: string;
157
+ type: 'class' | 'function' | 'variable' | 'interface' | 'type' | 'default' | 'other';
158
+ }
159
+ export interface CyclePath {
160
+ files: string[];
161
+ length: number;
162
+ }
163
+ export interface UnusedExport {
164
+ file: string;
165
+ exports: string[];
166
+ }
167
+ export declare class InternalFileGraph {
168
+ private imports;
169
+ private exports;
170
+ private importedSymbols;
171
+ private rootPath;
172
+ constructor(rootPath: string);
173
+ /**
174
+ * Normalize a file path to be relative to root and use forward slashes
175
+ */
176
+ private normalizePath;
177
+ /**
178
+ * Track that importingFile imports importedFile
179
+ * Both should be absolute paths; they will be normalized internally.
180
+ */
181
+ trackImport(importingFile: string, importedFile: string, importedSymbols?: string[]): void;
182
+ /**
183
+ * Track exports from a file
184
+ */
185
+ trackExports(filePath: string, fileExports: FileExport[]): void;
186
+ /**
187
+ * Find all circular dependencies in the graph using DFS with recursion stack.
188
+ * Returns unique cycles (avoids duplicates like A->B->A and B->A->B).
189
+ *
190
+ * @param scope Optional path prefix to limit analysis (e.g., 'src/features')
191
+ */
192
+ findCycles(scope?: string): CyclePath[];
193
+ /**
194
+ * Find exports that are never imported anywhere in the codebase.
195
+ * These may indicate dead code or forgotten APIs.
196
+ *
197
+ * @param scope Optional path prefix to limit analysis
198
+ */
199
+ findUnusedExports(scope?: string): UnusedExport[];
200
+ /**
201
+ * Get statistics about the internal dependency graph
202
+ */
203
+ getStats(): {
204
+ files: number;
205
+ edges: number;
206
+ avgDependencies: number;
207
+ };
208
+ /**
209
+ * Serialize for persistence to .codebase-intelligence.json
210
+ */
211
+ toJSON(): {
212
+ imports: Record<string, string[]>;
213
+ exports: Record<string, FileExport[]>;
214
+ stats: {
215
+ files: number;
216
+ edges: number;
217
+ avgDependencies: number;
218
+ };
219
+ };
220
+ /**
221
+ * Restore from JSON (for loading from .codebase-intelligence.json)
222
+ */
223
+ static fromJSON(data: {
224
+ imports?: Record<string, string[]>;
225
+ exports?: Record<string, FileExport[]>;
226
+ }, rootPath: string): InternalFileGraph;
227
+ }
119
228
  export {};
120
229
  //# sourceMappingURL=usage-tracker.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"usage-tracker.d.ts","sourceRoot":"","sources":["../../src/utils/usage-tracker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"usage-tracker.d.ts","sourceRoot":"","sources":["../../src/utils/usage-tracker.ts"],"names":[],"mappings":"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"}
@@ -131,20 +131,33 @@ const DEFAULT_TEST_FRAMEWORK_CONFIGS = [
131
131
  // Generic fallback
132
132
  { name: 'Generic Test', type: 'unit', indicators: ['describe(', 'it(', 'expect('], priority: 10 },
133
133
  ];
134
+ import { calculateTrend } from "./git-dates.js";
134
135
  export class PatternDetector {
135
136
  patterns = new Map();
136
137
  canonicalExamples = new Map();
138
+ patternFileDates = new Map(); // Track ALL file dates per pattern (timestamps)
137
139
  goldenFiles = [];
138
140
  testFrameworkConfigs;
139
141
  constructor(customConfigs) {
140
142
  this.testFrameworkConfigs = customConfigs || DEFAULT_TEST_FRAMEWORK_CONFIGS;
141
143
  }
142
- track(category, patternName, example) {
144
+ track(category, patternName, example, fileDate) {
143
145
  if (!this.patterns.has(category)) {
144
146
  this.patterns.set(category, new Map());
145
147
  }
146
148
  const categoryPatterns = this.patterns.get(category);
147
149
  categoryPatterns.set(patternName, (categoryPatterns.get(patternName) || 0) + 1);
150
+ // Track file dates for P90 robust trend analysis
151
+ if (fileDate) {
152
+ const dateKey = `${category}:${patternName}`;
153
+ const dates = this.patternFileDates.get(dateKey);
154
+ if (dates) {
155
+ dates.push(fileDate.getTime());
156
+ }
157
+ else {
158
+ this.patternFileDates.set(dateKey, [fileDate.getTime()]);
159
+ }
160
+ }
148
161
  // Smart Canonical Example Selection
149
162
  const exampleKey = `${category}:${patternName}`;
150
163
  if (example) {
@@ -197,17 +210,97 @@ export class PatternDetector {
197
210
  .sort((a, b) => b.score - a.score)
198
211
  .slice(0, n);
199
212
  }
213
+ /**
214
+ * Generate actionable guidance from percentage + trend.
215
+ * This is what AI agents can directly consume.
216
+ *
217
+ * Examples:
218
+ * - "USE: inject() – 97% adoption, stable"
219
+ * - "CAUTION: constructor DI – 3%, declining"
220
+ * - "AVOID: BehaviorSubject – legacy pattern, declining"
221
+ */
222
+ generateGuidance(patternName, percentage, trend, isAlternative = false, hasRisingAlternative = false) {
223
+ const trendLabel = trend ? `, ${trend.toLowerCase()}` : '';
224
+ // Alternative pattern that is rising (migration target)
225
+ if (isAlternative && trend === 'Rising') {
226
+ return `USE: ${patternName} – ${percentage}%, rising (migration target)`;
227
+ }
228
+ // Primary pattern that is declining while an alternative is rising
229
+ if (!isAlternative && trend === 'Declining' && hasRisingAlternative) {
230
+ return `CAUTION: ${patternName} – ${percentage}%, declining (legacy)`;
231
+ }
232
+ // Primary pattern with high adoption
233
+ if (!isAlternative && percentage >= 80) {
234
+ // If primary is declining, downgrade to PREFER
235
+ if (trend === 'Declining')
236
+ return `PREFER: ${patternName} – ${percentage}% adoption, declining`;
237
+ return `USE: ${patternName} – ${percentage}% adoption${trendLabel}`;
238
+ }
239
+ // Primary pattern with moderate adoption
240
+ if (!isAlternative && percentage >= 50) {
241
+ return `PREFER: ${patternName} – ${percentage}% adoption${trendLabel}`;
242
+ }
243
+ // Alternative pattern that is declining
244
+ if (isAlternative && trend === 'Declining') {
245
+ return `AVOID: ${patternName} – ${percentage}%, declining (legacy)`;
246
+ }
247
+ // Alternative with low adoption
248
+ if (isAlternative && percentage < 20) {
249
+ // If it's rising, we already handled it above. If stable/declining, it's a caution.
250
+ return `CAUTION: ${patternName} – ${percentage}% minority pattern${trendLabel}`;
251
+ }
252
+ // Default: just describe it
253
+ return `${patternName} – ${percentage}%${trendLabel}`;
254
+ }
255
+ /**
256
+ * Get robust date for a pattern (P90 percentile) to avoid "single file edit" skew
257
+ * This means we take the date of the 10th percentile newest file.
258
+ * For example, if there are 100 files, we take the 10th newest file's date.
259
+ * This allows ~10% of legacy files to be edited without resetting the trend.
260
+ */
261
+ getRobustDate(category, patternName) {
262
+ const dates = this.patternFileDates.get(`${category}:${patternName}`);
263
+ if (!dates || dates.length === 0)
264
+ return undefined;
265
+ // Sort descending (newest first)
266
+ dates.sort((a, b) => b - a);
267
+ // If few samples, trust the newest (not enough for stats)
268
+ if (dates.length < 5)
269
+ return new Date(dates[0]);
270
+ // Use 90th percentile (exclude top 10% outliers)
271
+ // For 100 files, P90 is index 10 (11th newest file)
272
+ // This allows ~10% of legacy files to be edited without resetting the trend
273
+ const p90Index = Math.floor(dates.length * 0.10);
274
+ return new Date(dates[p90Index]);
275
+ }
200
276
  getConsensus(category) {
201
277
  const categoryPatterns = this.patterns.get(category);
202
278
  if (!categoryPatterns || categoryPatterns.size === 0)
203
279
  return null;
204
- const total = Array.from(categoryPatterns.values()).reduce((sum, count) => sum + count, 0);
280
+ const total = Array.from(categoryPatterns.values()).reduce((a, b) => a + b, 0);
205
281
  const sorted = Array.from(categoryPatterns.entries()).sort((a, b) => b[1] - a[1]);
206
282
  const [primaryName, primaryCount] = sorted[0];
207
283
  const primaryFreq = Math.round((primaryCount / total) * 100);
208
- // Get canonical example for primary pattern
209
284
  const exampleKey = `${category}:${primaryName}`;
210
285
  const canonicalExample = this.canonicalExamples.get(exampleKey);
286
+ // v1.2 Fix: Use P90 robust date instead of raw max date
287
+ const primaryDate = this.getRobustDate(category, primaryName);
288
+ const primaryTrend = calculateTrend(primaryDate);
289
+ // v1.2 Fix: Detect if any alternative is Rising to inform primary guidance
290
+ let hasRisingAlternative = false;
291
+ let alternatives = [];
292
+ if (sorted.length > 1) {
293
+ alternatives = sorted.slice(1, 4).map(([name, count]) => {
294
+ const altDate = this.getRobustDate(category, name);
295
+ const altTrend = calculateTrend(altDate);
296
+ const altFreq = Math.round((count / total) * 100);
297
+ if (altTrend === 'Rising')
298
+ hasRisingAlternative = true;
299
+ return { name, count, frequency: altFreq, date: altDate, trend: altTrend };
300
+ });
301
+ }
302
+ // Generate actionable guidance from percentage + trend, now aware of rising alternatives
303
+ const primaryGuidance = this.generateGuidance(primaryName, primaryFreq, primaryTrend, false, hasRisingAlternative);
211
304
  const result = {
212
305
  primary: {
213
306
  name: primaryName,
@@ -215,13 +308,19 @@ export class PatternDetector {
215
308
  frequency: `${primaryFreq}%`,
216
309
  examples: canonicalExample ? [canonicalExample.file] : [],
217
310
  canonicalExample: canonicalExample,
311
+ newestFileDate: primaryDate?.toISOString(),
312
+ trend: primaryTrend,
313
+ guidance: primaryGuidance,
218
314
  },
219
315
  };
220
- if (sorted.length > 1) {
221
- result.alsoDetected = sorted.slice(1, 3).map(([name, count]) => ({
222
- name,
223
- count,
224
- frequency: `${Math.round((count / total) * 100)}%`,
316
+ if (alternatives.length > 0) {
317
+ result.alsoDetected = alternatives.map(alt => ({
318
+ name: alt.name,
319
+ count: alt.count,
320
+ frequency: `${alt.frequency}%`,
321
+ newestFileDate: alt.date?.toISOString(),
322
+ trend: alt.trend,
323
+ guidance: this.generateGuidance(alt.name, alt.frequency, alt.trend, true),
225
324
  }));
226
325
  }
227
326
  return result;
@@ -333,4 +432,207 @@ export class PatternDetector {
333
432
  }
334
433
  }
335
434
  }
435
+ export class InternalFileGraph {
436
+ // Map: normalized file path -> Set of normalized file paths it imports
437
+ imports = new Map();
438
+ // Map: normalized file path -> exports from that file
439
+ exports = new Map();
440
+ // Map: normalized file path -> Set of what symbols are imported from this file
441
+ importedSymbols = new Map();
442
+ // Root path for relative path conversion
443
+ rootPath;
444
+ constructor(rootPath) {
445
+ this.rootPath = rootPath.replace(/\\/g, '/');
446
+ }
447
+ /**
448
+ * Normalize a file path to be relative to root and use forward slashes
449
+ */
450
+ normalizePath(filePath) {
451
+ // Convert backslashes to forward slashes
452
+ let normalized = filePath.replace(/\\/g, '/');
453
+ // Make relative to root if absolute
454
+ if (normalized.startsWith(this.rootPath)) {
455
+ normalized = normalized.slice(this.rootPath.length);
456
+ if (normalized.startsWith('/')) {
457
+ normalized = normalized.slice(1);
458
+ }
459
+ }
460
+ // Remove leading ./ if present
461
+ if (normalized.startsWith('./')) {
462
+ normalized = normalized.slice(2);
463
+ }
464
+ return normalized;
465
+ }
466
+ /**
467
+ * Track that importingFile imports importedFile
468
+ * Both should be absolute paths; they will be normalized internally.
469
+ */
470
+ trackImport(importingFile, importedFile, importedSymbols) {
471
+ const fromFile = this.normalizePath(importingFile);
472
+ const toFile = this.normalizePath(importedFile);
473
+ // Initialize if needed
474
+ if (!this.imports.has(fromFile)) {
475
+ this.imports.set(fromFile, new Set());
476
+ }
477
+ this.imports.get(fromFile).add(toFile);
478
+ // Track which symbols are imported from the target file
479
+ if (importedSymbols && importedSymbols.length > 0) {
480
+ if (!this.importedSymbols.has(toFile)) {
481
+ this.importedSymbols.set(toFile, new Set());
482
+ }
483
+ for (const sym of importedSymbols) {
484
+ if (sym !== '*' && sym !== 'default') {
485
+ this.importedSymbols.get(toFile).add(sym);
486
+ }
487
+ }
488
+ }
489
+ }
490
+ /**
491
+ * Track exports from a file
492
+ */
493
+ trackExports(filePath, fileExports) {
494
+ const normalized = this.normalizePath(filePath);
495
+ this.exports.set(normalized, fileExports);
496
+ }
497
+ /**
498
+ * Find all circular dependencies in the graph using DFS with recursion stack.
499
+ * Returns unique cycles (avoids duplicates like A->B->A and B->A->B).
500
+ *
501
+ * @param scope Optional path prefix to limit analysis (e.g., 'src/features')
502
+ */
503
+ findCycles(scope) {
504
+ const visited = new Set();
505
+ const recursionStack = new Set();
506
+ const cycles = [];
507
+ const cycleSignatures = new Set(); // To avoid duplicates
508
+ // Get all files to check
509
+ let filesToCheck = Array.from(this.imports.keys());
510
+ if (scope) {
511
+ filesToCheck = filesToCheck.filter(f => f.startsWith(scope));
512
+ }
513
+ const dfs = (node, path) => {
514
+ visited.add(node);
515
+ recursionStack.add(node);
516
+ path.push(node);
517
+ const neighbors = this.imports.get(node) || new Set();
518
+ for (const neighbor of neighbors) {
519
+ // Apply scope filter to neighbors too
520
+ if (scope && !neighbor.startsWith(scope))
521
+ continue;
522
+ if (recursionStack.has(neighbor)) {
523
+ // Found a cycle! Extract just the cycle portion
524
+ const cycleStart = path.indexOf(neighbor);
525
+ if (cycleStart !== -1) {
526
+ const cyclePath = [...path.slice(cycleStart), neighbor];
527
+ // Create a normalized signature to avoid duplicate cycles
528
+ // Sort by the minimum element to create a canonical form
529
+ const normalized = [...cyclePath.slice(0, -1)].sort();
530
+ const signature = normalized.join('|');
531
+ if (!cycleSignatures.has(signature)) {
532
+ cycleSignatures.add(signature);
533
+ cycles.push({
534
+ files: cyclePath,
535
+ length: cyclePath.length - 1, // -1 because last element = first element
536
+ });
537
+ }
538
+ }
539
+ }
540
+ else if (!visited.has(neighbor)) {
541
+ dfs(neighbor, path);
542
+ }
543
+ }
544
+ path.pop();
545
+ recursionStack.delete(node);
546
+ };
547
+ for (const file of filesToCheck) {
548
+ if (!visited.has(file)) {
549
+ dfs(file, []);
550
+ }
551
+ }
552
+ // Sort by cycle length (shorter cycles are often more problematic)
553
+ return cycles.sort((a, b) => a.length - b.length);
554
+ }
555
+ /**
556
+ * Find exports that are never imported anywhere in the codebase.
557
+ * These may indicate dead code or forgotten APIs.
558
+ *
559
+ * @param scope Optional path prefix to limit analysis
560
+ */
561
+ findUnusedExports(scope) {
562
+ const result = [];
563
+ for (const [file, fileExports] of this.exports.entries()) {
564
+ // Apply scope filter
565
+ if (scope && !file.startsWith(scope))
566
+ continue;
567
+ // Skip index/barrel files - they often re-export things
568
+ if (file.endsWith('/index.ts') || file.endsWith('/index.js'))
569
+ continue;
570
+ // Skip test files
571
+ if (file.includes('.spec.') || file.includes('.test.'))
572
+ continue;
573
+ const importedFromThisFile = this.importedSymbols.get(file) || new Set();
574
+ const unusedExports = [];
575
+ for (const exp of fileExports) {
576
+ // Skip default exports (commonly used implicitly)
577
+ if (exp.type === 'default')
578
+ continue;
579
+ // Check if this export is imported anywhere
580
+ if (!importedFromThisFile.has(exp.name)) {
581
+ unusedExports.push(exp.name);
582
+ }
583
+ }
584
+ if (unusedExports.length > 0) {
585
+ result.push({ file, exports: unusedExports });
586
+ }
587
+ }
588
+ // Sort by file path for consistent output
589
+ return result.sort((a, b) => a.file.localeCompare(b.file));
590
+ }
591
+ /**
592
+ * Get statistics about the internal dependency graph
593
+ */
594
+ getStats() {
595
+ const files = this.imports.size;
596
+ let edges = 0;
597
+ for (const deps of this.imports.values()) {
598
+ edges += deps.size;
599
+ }
600
+ return {
601
+ files,
602
+ edges,
603
+ avgDependencies: files > 0 ? Math.round((edges / files) * 10) / 10 : 0,
604
+ };
605
+ }
606
+ /**
607
+ * Serialize for persistence to .codebase-intelligence.json
608
+ */
609
+ toJSON() {
610
+ const imports = {};
611
+ for (const [file, deps] of this.imports.entries()) {
612
+ imports[file] = Array.from(deps);
613
+ }
614
+ const exports = {};
615
+ for (const [file, exps] of this.exports.entries()) {
616
+ exports[file] = exps;
617
+ }
618
+ return { imports, exports, stats: this.getStats() };
619
+ }
620
+ /**
621
+ * Restore from JSON (for loading from .codebase-intelligence.json)
622
+ */
623
+ static fromJSON(data, rootPath) {
624
+ const graph = new InternalFileGraph(rootPath);
625
+ if (data.imports) {
626
+ for (const [file, deps] of Object.entries(data.imports)) {
627
+ graph.imports.set(file, new Set(deps));
628
+ }
629
+ }
630
+ if (data.exports) {
631
+ for (const [file, exps] of Object.entries(data.exports)) {
632
+ graph.exports.set(file, exps);
633
+ }
634
+ }
635
+ return graph;
636
+ }
637
+ }
336
638
  //# sourceMappingURL=usage-tracker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"usage-tracker.js","sourceRoot":"","sources":["../../src/utils/usage-tracker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"usage-tracker.js","sourceRoot":"","sources":["../../src/utils/usage-tracker.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codebase-context",
3
- "version": "1.0.1",
3
+ "version": "1.2.1",
4
4
  "description": "MCP server for semantic codebase indexing and search - gives AI agents real understanding of your codebase",
5
5
  "type": "module",
6
6
  "main": "./dist/lib.js",
@@ -58,12 +58,12 @@
58
58
  ],
59
59
  "repository": {
60
60
  "type": "git",
61
- "url": "git+https://github.com/PatrickSys/codebase-context-mcp.git"
61
+ "url": "git+https://github.com/PatrickSys/codebase-context.git"
62
62
  },
63
63
  "bugs": {
64
- "url": "https://github.com/PatrickSys/codebase-context-mcp/issues"
64
+ "url": "https://github.com/PatrickSys/codebase-context/issues"
65
65
  },
66
- "homepage": "https://github.com/PatrickSys/codebase-context-mcp#readme",
66
+ "homepage": "https://github.com/PatrickSys/codebase-context#readme",
67
67
  "author": {
68
68
  "name": "Patrick Rosselló",
69
69
  "email": "rossellocolompatrick@gmail.com",