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,29 @@
1
+ /**
2
+ * Language Detection Utilities
3
+ * Determines file types and languages based on extension and content
4
+ */
5
+ /**
6
+ * Detect language from file path
7
+ */
8
+ export declare function detectLanguage(filePath: string): string;
9
+ /**
10
+ * Check if a file is a code file
11
+ */
12
+ export declare function isCodeFile(filePath: string): boolean;
13
+ /**
14
+ * Check if a file is binary
15
+ */
16
+ export declare function isBinaryFile(filePath: string): boolean;
17
+ /**
18
+ * Check if file is a test file
19
+ */
20
+ export declare function isTestFile(filePath: string): boolean;
21
+ /**
22
+ * Check if file is a style guide or documentation
23
+ */
24
+ export declare function isDocumentationFile(filePath: string): boolean;
25
+ /**
26
+ * Get all supported extensions
27
+ */
28
+ export declare function getSupportedExtensions(): string[];
29
+ //# sourceMappingURL=language-detection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"language-detection.d.ts","sourceRoot":"","sources":["../../src/utils/language-detection.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA+EH;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGvD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAGpD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAGtD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CASpD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAc7D;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,EAAE,CAEjD"}
@@ -0,0 +1,127 @@
1
+ /**
2
+ * Language Detection Utilities
3
+ * Determines file types and languages based on extension and content
4
+ */
5
+ import path from 'path';
6
+ // Map of file extensions to languages
7
+ const extensionToLanguage = {
8
+ // JavaScript/TypeScript
9
+ '.js': 'javascript',
10
+ '.mjs': 'javascript',
11
+ '.cjs': 'javascript',
12
+ '.jsx': 'javascriptreact',
13
+ '.ts': 'typescript',
14
+ '.tsx': 'typescriptreact',
15
+ '.mts': 'typescript',
16
+ '.cts': 'typescript',
17
+ // Web
18
+ '.html': 'html',
19
+ '.htm': 'html',
20
+ '.css': 'css',
21
+ '.scss': 'scss',
22
+ '.sass': 'sass',
23
+ '.less': 'less',
24
+ // Data/Config
25
+ '.json': 'json',
26
+ '.jsonc': 'jsonc',
27
+ '.yaml': 'yaml',
28
+ '.yml': 'yaml',
29
+ '.toml': 'toml',
30
+ '.xml': 'xml',
31
+ // Markdown
32
+ '.md': 'markdown',
33
+ '.mdx': 'mdx',
34
+ // Other
35
+ '.graphql': 'graphql',
36
+ '.gql': 'graphql',
37
+ '.sql': 'sql',
38
+ '.sh': 'shellscript',
39
+ '.bash': 'shellscript',
40
+ '.zsh': 'shellscript',
41
+ '.ps1': 'powershell',
42
+ '.py': 'python',
43
+ '.rb': 'ruby',
44
+ '.java': 'java',
45
+ '.go': 'go',
46
+ '.rs': 'rust',
47
+ '.c': 'c',
48
+ '.cpp': 'cpp',
49
+ '.h': 'c',
50
+ '.hpp': 'cpp',
51
+ };
52
+ // Binary file extensions to skip
53
+ const binaryExtensions = new Set([
54
+ '.png', '.jpg', '.jpeg', '.gif', '.ico', '.svg', '.webp', '.bmp',
55
+ '.woff', '.woff2', '.ttf', '.eot', '.otf',
56
+ '.mp3', '.mp4', '.wav', '.avi', '.mov', '.webm',
57
+ '.pdf', '.doc', '.docx', '.xls', '.xlsx', '.ppt', '.pptx',
58
+ '.zip', '.tar', '.gz', '.rar', '.7z',
59
+ '.exe', '.dll', '.so', '.dylib',
60
+ '.lock', '.map',
61
+ ]);
62
+ // Code file extensions
63
+ const codeExtensions = new Set([
64
+ '.js', '.mjs', '.cjs', '.jsx',
65
+ '.ts', '.tsx', '.mts', '.cts',
66
+ '.html', '.htm',
67
+ '.css', '.scss', '.sass', '.less',
68
+ '.json', '.jsonc',
69
+ '.yaml', '.yml',
70
+ '.md', '.mdx',
71
+ '.graphql', '.gql',
72
+ '.py', '.rb', '.java', '.go', '.rs', '.c', '.cpp', '.h', '.hpp',
73
+ ]);
74
+ /**
75
+ * Detect language from file path
76
+ */
77
+ export function detectLanguage(filePath) {
78
+ const ext = path.extname(filePath).toLowerCase();
79
+ return extensionToLanguage[ext] || 'plaintext';
80
+ }
81
+ /**
82
+ * Check if a file is a code file
83
+ */
84
+ export function isCodeFile(filePath) {
85
+ const ext = path.extname(filePath).toLowerCase();
86
+ return codeExtensions.has(ext);
87
+ }
88
+ /**
89
+ * Check if a file is binary
90
+ */
91
+ export function isBinaryFile(filePath) {
92
+ const ext = path.extname(filePath).toLowerCase();
93
+ return binaryExtensions.has(ext);
94
+ }
95
+ /**
96
+ * Check if file is a test file
97
+ */
98
+ export function isTestFile(filePath) {
99
+ const lowerPath = filePath.toLowerCase();
100
+ return (lowerPath.includes('.spec.') ||
101
+ lowerPath.includes('.test.') ||
102
+ lowerPath.includes('__tests__') ||
103
+ lowerPath.includes('/test/') ||
104
+ lowerPath.includes('/tests/'));
105
+ }
106
+ /**
107
+ * Check if file is a style guide or documentation
108
+ */
109
+ export function isDocumentationFile(filePath) {
110
+ const lowerPath = filePath.toLowerCase();
111
+ const fileName = path.basename(lowerPath);
112
+ return (fileName === 'readme.md' ||
113
+ fileName === 'contributing.md' ||
114
+ fileName === 'changelog.md' ||
115
+ fileName === 'license.md' ||
116
+ fileName === 'style_guide.md' ||
117
+ fileName === 'style-guide.md' ||
118
+ fileName === 'architecture.md' ||
119
+ lowerPath.includes('/docs/'));
120
+ }
121
+ /**
122
+ * Get all supported extensions
123
+ */
124
+ export function getSupportedExtensions() {
125
+ return Array.from(codeExtensions);
126
+ }
127
+ //# sourceMappingURL=language-detection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"language-detection.js","sourceRoot":"","sources":["../../src/utils/language-detection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Pattern detection and team alignment utilities for Phase 1.5
3
+ */
4
+ export interface TeamPatterns {
5
+ dependencyInjection?: PatternConsensus;
6
+ stateManagement?: PatternConsensus;
7
+ componentInputs?: PatternConsensus;
8
+ [key: string]: PatternConsensus | undefined;
9
+ }
10
+ export interface PatternConsensus {
11
+ primary: {
12
+ name: string;
13
+ count: number;
14
+ frequency: string;
15
+ };
16
+ alternatives?: Array<{
17
+ name: string;
18
+ count: number;
19
+ frequency: string;
20
+ }>;
21
+ }
22
+ export interface CodebaseIntelligence {
23
+ libraryUsage: Record<string, any>;
24
+ patterns: TeamPatterns;
25
+ generatedAt: string;
26
+ }
27
+ export declare class PatternDetector {
28
+ private intelligence;
29
+ private rootPath;
30
+ constructor(rootPath: string);
31
+ loadIntelligence(): Promise<void>;
32
+ /**
33
+ * Detect patterns in code chunk content
34
+ */
35
+ detectPatterns(content: string, componentType?: string): string[];
36
+ /**
37
+ * Calculate team alignment percentage based on detected patterns
38
+ */
39
+ calculateTeamAlignment(detectedPatterns: string[]): string;
40
+ }
41
+ //# sourceMappingURL=pattern-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pattern-detector.d.ts","sourceRoot":"","sources":["../../src/utils/pattern-detector.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,MAAM,WAAW,YAAY;IACzB,mBAAmB,CAAC,EAAE,gBAAgB,CAAC;IACvC,eAAe,CAAC,EAAE,gBAAgB,CAAC;IACnC,eAAe,CAAC,EAAE,gBAAgB,CAAC;IACnC,CAAC,GAAG,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAAC;CAC/C;AAED,MAAM,WAAW,gBAAgB;IAC7B,OAAO,EAAE;QACL,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,YAAY,CAAC,EAAE,KAAK,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,MAAM,CAAC;KACrB,CAAC,CAAC;CACN;AAED,MAAM,WAAW,oBAAoB;IACjC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAClC,QAAQ,EAAE,YAAY,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,eAAe;IACxB,OAAO,CAAC,YAAY,CAAqC;IACzD,OAAO,CAAC,QAAQ,CAAS;gBAEb,QAAQ,EAAE,MAAM;IAItB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAWvC;;OAEG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE;IAoCjE;;OAEG;IACH,sBAAsB,CAAC,gBAAgB,EAAE,MAAM,EAAE,GAAG,MAAM;CA2C7D"}
@@ -0,0 +1,101 @@
1
+ /**
2
+ * Pattern detection and team alignment utilities for Phase 1.5
3
+ */
4
+ import path from 'path';
5
+ import { promises as fs } from 'fs';
6
+ export class PatternDetector {
7
+ intelligence = null;
8
+ rootPath;
9
+ constructor(rootPath) {
10
+ this.rootPath = rootPath;
11
+ }
12
+ async loadIntelligence() {
13
+ try {
14
+ const intelligencePath = path.join(this.rootPath, '.codebase-intelligence.json');
15
+ const content = await fs.readFile(intelligencePath, 'utf-8');
16
+ this.intelligence = JSON.parse(content);
17
+ }
18
+ catch (error) {
19
+ console.warn('No codebase intelligence file found');
20
+ this.intelligence = null;
21
+ }
22
+ }
23
+ /**
24
+ * Detect patterns in code chunk content
25
+ */
26
+ detectPatterns(content, componentType) {
27
+ const patterns = [];
28
+ // DI patterns
29
+ if (content.includes('inject(')) {
30
+ patterns.push('inject() DI');
31
+ }
32
+ else if (content.match(/constructor\s*\(/)) {
33
+ patterns.push('constructor injection');
34
+ }
35
+ // State management
36
+ if (content.includes('signal(') || content.includes('signal<')) {
37
+ patterns.push('Signals');
38
+ }
39
+ if (content.includes('BehaviorSubject') || content.includes('Subject<')) {
40
+ patterns.push('RxJS');
41
+ }
42
+ // Lifecycle
43
+ if (content.includes('OnDestroy') && content.includes('destroyed$')) {
44
+ patterns.push('OnDestroy cleanup');
45
+ }
46
+ // Component patterns
47
+ if (componentType === 'component') {
48
+ if (content.includes('standalone: true')) {
49
+ patterns.push('standalone component');
50
+ }
51
+ if (content.includes('OnPush')) {
52
+ patterns.push('OnPush strategy');
53
+ }
54
+ }
55
+ return patterns;
56
+ }
57
+ /**
58
+ * Calculate team alignment percentage based on detected patterns
59
+ */
60
+ calculateTeamAlignment(detectedPatterns) {
61
+ if (!this.intelligence || !this.intelligence.patterns) {
62
+ return 'unknown';
63
+ }
64
+ let matchScore = 0;
65
+ let totalChecks = 0;
66
+ // Check DI alignment
67
+ if (detectedPatterns.includes('inject() DI')) {
68
+ const diPattern = this.intelligence.patterns.dependencyInjection;
69
+ if (diPattern?.primary.name === 'inject() function') {
70
+ matchScore += parseInt(diPattern.primary.frequency) || 0;
71
+ }
72
+ totalChecks++;
73
+ }
74
+ else if (detectedPatterns.includes('constructor injection')) {
75
+ totalChecks++;
76
+ // Low score for non-consensus pattern
77
+ matchScore += 5;
78
+ }
79
+ // Check state management alignment
80
+ if (detectedPatterns.includes('Signals')) {
81
+ const statePattern = this.intelligence.patterns.stateManagement;
82
+ if (statePattern?.primary.name === 'Angular Signals') {
83
+ matchScore += parseInt(statePattern.primary.frequency) || 0;
84
+ }
85
+ totalChecks++;
86
+ }
87
+ else if (detectedPatterns.includes('RxJS')) {
88
+ const statePattern = this.intelligence.patterns.stateManagement;
89
+ if (statePattern?.alternatives?.[0]?.name === 'RxJS Subjects') {
90
+ matchScore += parseInt(statePattern.alternatives[0].frequency) || 0;
91
+ }
92
+ totalChecks++;
93
+ }
94
+ if (totalChecks === 0) {
95
+ return 'no patterns detected';
96
+ }
97
+ const avgAlignment = Math.round(matchScore / totalChecks);
98
+ return `${avgAlignment}% match`;
99
+ }
100
+ }
101
+ //# sourceMappingURL=pattern-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pattern-detector.js","sourceRoot":"","sources":["../../src/utils/pattern-detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,120 @@
1
+ /**
2
+ * Library Usage Tracker & Pattern Detector
3
+ * Tracks what libraries are used and detects common coding patterns
4
+ */
5
+ export interface LibraryUsageStats {
6
+ [libraryPath: string]: {
7
+ count: number;
8
+ examples: string[];
9
+ };
10
+ }
11
+ export interface PatternUsageStats {
12
+ [patternName: string]: {
13
+ primary: {
14
+ name: string;
15
+ count: number;
16
+ frequency: string;
17
+ examples: string[];
18
+ canonicalExample?: {
19
+ file: string;
20
+ snippet: string;
21
+ };
22
+ };
23
+ alsoDetected?: Array<{
24
+ name: string;
25
+ count: number;
26
+ frequency: string;
27
+ }>;
28
+ };
29
+ }
30
+ export interface ImportUsage {
31
+ file: string;
32
+ line: number;
33
+ }
34
+ export interface ComponentUsageInfo {
35
+ definedIn?: string;
36
+ usedIn: ImportUsage[];
37
+ usageCount: number;
38
+ }
39
+ export declare class ImportGraph {
40
+ private usages;
41
+ private exports;
42
+ trackImport(importSource: string, importingFile: string, line?: number): void;
43
+ trackExport(filePath: string, exportName: string): void;
44
+ private normalizeSource;
45
+ private toRelativePath;
46
+ /**
47
+ * Find all files that import a given source
48
+ * This is "Find Usages" - the key value
49
+ */
50
+ getUsages(importSource: string): ComponentUsageInfo;
51
+ /**
52
+ * Get full usage stats for all tracked imports
53
+ */
54
+ getAllUsages(): Record<string, ComponentUsageInfo>;
55
+ /**
56
+ * Get top N most-used imports
57
+ */
58
+ getTopUsed(n?: number): Array<{
59
+ source: string;
60
+ count: number;
61
+ }>;
62
+ }
63
+ export declare class LibraryUsageTracker {
64
+ private usage;
65
+ track(importSource: string, filePath: string, line?: number): void;
66
+ private normalizeImportSource;
67
+ getStats(): LibraryUsageStats;
68
+ getTopLibraries(n?: number): Array<[string, number]>;
69
+ }
70
+ interface TestFrameworkConfig {
71
+ name: string;
72
+ type: 'unit' | 'e2e';
73
+ indicators: string[];
74
+ priority: number;
75
+ }
76
+ export interface GoldenFile {
77
+ file: string;
78
+ score: number;
79
+ patterns: {
80
+ inject: boolean;
81
+ signals: boolean;
82
+ computed: boolean;
83
+ effect: boolean;
84
+ standalone: boolean;
85
+ signalInputs: boolean;
86
+ };
87
+ }
88
+ export declare class PatternDetector {
89
+ private patterns;
90
+ private canonicalExamples;
91
+ private goldenFiles;
92
+ private testFrameworkConfigs;
93
+ constructor(customConfigs?: TestFrameworkConfig[]);
94
+ track(category: string, patternName: string, example?: {
95
+ file: string;
96
+ snippet: string;
97
+ }): void;
98
+ /**
99
+ * Track a file as a potential "Golden File" - a file that demonstrates multiple modern patterns
100
+ */
101
+ trackGoldenFile(file: string, score: number, patterns: GoldenFile['patterns']): void;
102
+ /**
103
+ * Get top N Golden Files - files that best demonstrate all modern patterns together
104
+ */
105
+ getGoldenFiles(n?: number): GoldenFile[];
106
+ getConsensus(category: string): PatternUsageStats[string] | null;
107
+ getAllPatterns(): PatternUsageStats;
108
+ /**
109
+ * Detect test framework from content using config-driven matching
110
+ * Returns detected framework with confidence based on priority scoring
111
+ */
112
+ private detectTestFramework;
113
+ /**
114
+ * Detect patterns from code - FRAMEWORK-AGNOSTIC
115
+ * Framework-specific patterns should be detected by framework analyzers
116
+ */
117
+ detectFromCode(content: string, filePath: string): void;
118
+ }
119
+ export {};
120
+ //# sourceMappingURL=usage-tracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usage-tracker.d.ts","sourceRoot":"","sources":["../../src/utils/usage-tracker.ts"],"names":[],"mappings":"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"}