@aiready/context-analyzer 0.21.1 → 0.21.6

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 (153) hide show
  1. package/.aiready/aiready-report-20260314-222254.json +39216 -0
  2. package/.aiready/aiready-report-20260314-223947.json +3413 -0
  3. package/.aiready/aiready-report-20260314-224112.json +3413 -0
  4. package/.aiready/aiready-report-20260314-224302.json +2973 -0
  5. package/.aiready/aiready-report-20260314-224939.json +3092 -0
  6. package/.aiready/aiready-report-20260314-225154.json +3092 -0
  7. package/.turbo/turbo-build.log +13 -12
  8. package/.turbo/turbo-test.log +32 -341
  9. package/dist/__tests__/analyzer.test.js +55 -14
  10. package/dist/__tests__/analyzer.test.js.map +1 -1
  11. package/dist/__tests__/cluster-detector.test.d.ts +2 -0
  12. package/dist/__tests__/cluster-detector.test.d.ts.map +1 -0
  13. package/dist/__tests__/cluster-detector.test.js +121 -0
  14. package/dist/__tests__/cluster-detector.test.js.map +1 -0
  15. package/dist/__tests__/contract.test.d.ts +2 -0
  16. package/dist/__tests__/contract.test.d.ts.map +1 -0
  17. package/dist/__tests__/contract.test.js +59 -0
  18. package/dist/__tests__/contract.test.js.map +1 -0
  19. package/dist/__tests__/enhanced-cohesion.test.js +12 -2
  20. package/dist/__tests__/enhanced-cohesion.test.js.map +1 -1
  21. package/dist/__tests__/file-classification.test.d.ts +2 -0
  22. package/dist/__tests__/file-classification.test.d.ts.map +1 -0
  23. package/dist/__tests__/file-classification.test.js +749 -0
  24. package/dist/__tests__/file-classification.test.js.map +1 -0
  25. package/dist/__tests__/fragmentation-advanced.test.js +2 -8
  26. package/dist/__tests__/fragmentation-advanced.test.js.map +1 -1
  27. package/dist/__tests__/fragmentation-coupling.test.js +2 -2
  28. package/dist/__tests__/fragmentation-coupling.test.js.map +1 -1
  29. package/dist/__tests__/fragmentation-log.test.js +3 -7
  30. package/dist/__tests__/fragmentation-log.test.js.map +1 -1
  31. package/dist/__tests__/provider.test.d.ts +2 -0
  32. package/dist/__tests__/provider.test.d.ts.map +1 -0
  33. package/dist/__tests__/provider.test.js +72 -0
  34. package/dist/__tests__/provider.test.js.map +1 -0
  35. package/dist/__tests__/remediation.test.d.ts +2 -0
  36. package/dist/__tests__/remediation.test.d.ts.map +1 -0
  37. package/dist/__tests__/remediation.test.js +61 -0
  38. package/dist/__tests__/remediation.test.js.map +1 -0
  39. package/dist/__tests__/scoring.test.js +196 -16
  40. package/dist/__tests__/scoring.test.js.map +1 -1
  41. package/dist/__tests__/structural-cohesion.test.js +8 -2
  42. package/dist/__tests__/structural-cohesion.test.js.map +1 -1
  43. package/dist/analyzer.d.ts +31 -94
  44. package/dist/analyzer.d.ts.map +1 -1
  45. package/dist/analyzer.js +260 -678
  46. package/dist/analyzer.js.map +1 -1
  47. package/dist/analyzers/python-context.d.ts.map +1 -1
  48. package/dist/analyzers/python-context.js +10 -8
  49. package/dist/analyzers/python-context.js.map +1 -1
  50. package/dist/ast-utils.d.ts +16 -0
  51. package/dist/ast-utils.d.ts.map +1 -0
  52. package/dist/ast-utils.js +81 -0
  53. package/dist/ast-utils.js.map +1 -0
  54. package/dist/chunk-64U3PNO3.mjs +94 -0
  55. package/dist/chunk-CDIVYADN.mjs +2110 -0
  56. package/dist/chunk-D3SIHB2V.mjs +2118 -0
  57. package/dist/chunk-FNPSK3CG.mjs +1760 -0
  58. package/dist/chunk-GXTGOLZT.mjs +92 -0
  59. package/dist/chunk-LERPI33Y.mjs +2060 -0
  60. package/dist/chunk-MZP3G7TF.mjs +2118 -0
  61. package/dist/chunk-NOHK5DLU.mjs +2173 -0
  62. package/dist/chunk-ORLC5Y4J.mjs +1787 -0
  63. package/dist/chunk-OTCQL7DY.mjs +2045 -0
  64. package/dist/chunk-OUYSZZ7X.mjs +1846 -0
  65. package/dist/chunk-SFK6XTJE.mjs +2110 -0
  66. package/dist/chunk-U5R2FTCR.mjs +1803 -0
  67. package/dist/chunk-UU4HZ7ZT.mjs +1849 -0
  68. package/dist/chunk-W2KNBN6W.mjs +1849 -0
  69. package/dist/chunk-WKOZOHOU.mjs +2060 -0
  70. package/dist/chunk-XIXAWCMS.mjs +1760 -0
  71. package/dist/classifier.d.ts +114 -0
  72. package/dist/classifier.d.ts.map +1 -0
  73. package/dist/classifier.js +439 -0
  74. package/dist/classifier.js.map +1 -0
  75. package/dist/cli.js +591 -1057
  76. package/dist/cli.js.map +1 -1
  77. package/dist/cli.mjs +63 -533
  78. package/dist/cluster-detector.d.ts +8 -0
  79. package/dist/cluster-detector.d.ts.map +1 -0
  80. package/dist/cluster-detector.js +70 -0
  81. package/dist/cluster-detector.js.map +1 -0
  82. package/dist/defaults.d.ts +7 -0
  83. package/dist/defaults.d.ts.map +1 -0
  84. package/dist/defaults.js +54 -0
  85. package/dist/defaults.js.map +1 -0
  86. package/dist/graph-builder.d.ts +33 -0
  87. package/dist/graph-builder.d.ts.map +1 -0
  88. package/dist/graph-builder.js +225 -0
  89. package/dist/graph-builder.js.map +1 -0
  90. package/dist/index.d.mts +24 -31
  91. package/dist/index.d.ts +24 -31
  92. package/dist/index.d.ts.map +1 -1
  93. package/dist/index.js +822 -588
  94. package/dist/index.js.map +1 -1
  95. package/dist/index.mjs +265 -8
  96. package/dist/metrics.d.ts +34 -0
  97. package/dist/metrics.d.ts.map +1 -0
  98. package/dist/metrics.js +170 -0
  99. package/dist/metrics.js.map +1 -0
  100. package/dist/provider.d.ts +6 -0
  101. package/dist/provider.d.ts.map +1 -0
  102. package/dist/provider.js +48 -0
  103. package/dist/provider.js.map +1 -0
  104. package/dist/python-context-3GZKN3LR.mjs +162 -0
  105. package/dist/python-context-O2EN3M6Z.mjs +162 -0
  106. package/dist/remediation.d.ts +25 -0
  107. package/dist/remediation.d.ts.map +1 -0
  108. package/dist/remediation.js +98 -0
  109. package/dist/remediation.js.map +1 -0
  110. package/dist/scoring.d.ts +3 -7
  111. package/dist/scoring.d.ts.map +1 -1
  112. package/dist/scoring.js +57 -48
  113. package/dist/scoring.js.map +1 -1
  114. package/dist/semantic-analysis.d.ts +12 -23
  115. package/dist/semantic-analysis.d.ts.map +1 -1
  116. package/dist/semantic-analysis.js +172 -110
  117. package/dist/semantic-analysis.js.map +1 -1
  118. package/dist/summary.d.ts +6 -0
  119. package/dist/summary.d.ts.map +1 -0
  120. package/dist/summary.js +92 -0
  121. package/dist/summary.js.map +1 -0
  122. package/dist/types.d.ts +9 -2
  123. package/dist/types.d.ts.map +1 -1
  124. package/dist/utils/output-formatter.d.ts +14 -0
  125. package/dist/utils/output-formatter.d.ts.map +1 -0
  126. package/dist/utils/output-formatter.js +338 -0
  127. package/dist/utils/output-formatter.js.map +1 -0
  128. package/package.json +2 -2
  129. package/src/__tests__/analyzer.test.ts +1 -1
  130. package/src/__tests__/auto-detection.test.ts +1 -1
  131. package/src/__tests__/contract.test.ts +1 -1
  132. package/src/__tests__/enhanced-cohesion.test.ts +1 -1
  133. package/src/__tests__/file-classification.test.ts +1 -1
  134. package/src/__tests__/fragmentation-advanced.test.ts +1 -1
  135. package/src/__tests__/fragmentation-coupling.test.ts +1 -1
  136. package/src/__tests__/fragmentation-log.test.ts +1 -1
  137. package/src/__tests__/provider.test.ts +1 -1
  138. package/src/__tests__/scoring.test.ts +217 -9
  139. package/src/__tests__/structural-cohesion.test.ts +1 -1
  140. package/src/analyzer.ts +96 -309
  141. package/src/analyzers/python-context.ts +7 -76
  142. package/src/cli-action.ts +103 -0
  143. package/src/cli.ts +12 -693
  144. package/src/cluster-detector.ts +1 -1
  145. package/src/graph-builder.ts +9 -85
  146. package/src/index.ts +6 -0
  147. package/src/issue-analyzer.ts +143 -0
  148. package/src/scoring.ts +40 -20
  149. package/src/semantic-analysis.ts +1 -14
  150. package/src/summary.ts +62 -106
  151. package/src/utils/dependency-graph-utils.ts +126 -0
  152. package/src/utils/output-formatter.ts +411 -0
  153. package/src/utils/string-utils.ts +17 -0
@@ -1,44 +1,33 @@
1
- import type { DependencyGraph, CoUsageData, DomainAssignment, DomainSignals } from './types';
1
+ import type { DependencyGraph, CoUsageData, DomainAssignment, DomainSignals, ExportInfo } from './types';
2
2
  /**
3
3
  * Build co-usage matrix: track which files are imported together
4
- *
5
- * Files frequently imported together likely belong to the same semantic domain
6
4
  */
7
5
  export declare function buildCoUsageMatrix(graph: DependencyGraph): Map<string, Map<string, number>>;
8
6
  /**
9
7
  * Extract type dependencies from AST exports
10
- *
11
- * Files that share types are semantically related
12
8
  */
13
9
  export declare function buildTypeGraph(graph: DependencyGraph): Map<string, Set<string>>;
14
10
  /**
15
11
  * Find semantic clusters using co-usage patterns
16
- *
17
- * Files with high co-usage counts belong in the same cluster
18
12
  */
19
13
  export declare function findSemanticClusters(coUsageMatrix: Map<string, Map<string, number>>, minCoUsage?: number): Map<string, string[]>;
20
- /**
21
- * Calculate confidence score for domain assignment based on multiple signals
22
- */
23
- export declare function calculateDomainConfidence(signals: DomainSignals): number;
24
14
  /**
25
15
  * Infer domain from semantic analysis (co-usage + types)
26
- *
27
- * This replaces the folder-based heuristic with actual code relationships
28
16
  */
29
17
  export declare function inferDomainFromSemantics(file: string, exportName: string, graph: DependencyGraph, coUsageMatrix: Map<string, Map<string, number>>, typeGraph: Map<string, Set<string>>, exportTypeRefs?: string[]): DomainAssignment[];
18
+ export declare function calculateDomainConfidence(signals: DomainSignals): number;
30
19
  /**
31
- * Get co-usage data for a specific file
20
+ * Regex-based export extraction (legacy/fallback)
32
21
  */
33
- export declare function getCoUsageData(file: string, coUsageMatrix: Map<string, Map<string, number>>): CoUsageData;
22
+ export declare function extractExports(content: string, filePath?: string, domainOptions?: {
23
+ domainKeywords?: string[];
24
+ }, fileImports?: string[]): ExportInfo[];
34
25
  /**
35
- * Find files that should be consolidated based on semantic similarity
36
- *
37
- * High co-usage + shared types = strong consolidation candidate
26
+ * Infer domain from name, path, or imports
38
27
  */
39
- export declare function findConsolidationCandidates(graph: DependencyGraph, coUsageMatrix: Map<string, Map<string, number>>, typeGraph: Map<string, Set<string>>, minCoUsage?: number, minSharedTypes?: number): Array<{
40
- files: string[];
41
- reason: string;
42
- strength: number;
43
- }>;
28
+ export declare function inferDomain(name: string, filePath?: string, domainOptions?: {
29
+ domainKeywords?: string[];
30
+ }, fileImports?: string[]): string;
31
+ export declare function getCoUsageData(file: string, coUsageMatrix: Map<string, Map<string, number>>): CoUsageData;
32
+ export declare function findConsolidationCandidates(graph: DependencyGraph, coUsageMatrix: Map<string, Map<string, number>>, typeGraph: Map<string, Set<string>>, minCoUsage?: number, minSharedTypes?: number): any[];
44
33
  //# sourceMappingURL=semantic-analysis.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"semantic-analysis.d.ts","sourceRoot":"","sources":["../src/semantic-analysis.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAkB,gBAAgB,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7G;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,eAAe,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAgC3F;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,eAAe,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAiB/E;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAC/C,UAAU,GAAE,MAAU,GACrB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CA0BvB;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAiBxE;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,eAAe,EACtB,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAC/C,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,EACnC,cAAc,CAAC,EAAE,MAAM,EAAE,GACxB,gBAAgB,EAAE,CA2EpB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAC9C,WAAW,CAYb;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,eAAe,EACtB,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAC/C,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,EACnC,UAAU,GAAE,MAAU,EACtB,cAAc,GAAE,MAAU,GACzB,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CA2C9D"}
1
+ {"version":3,"file":"semantic-analysis.d.ts","sourceRoot":"","sources":["../src/semantic-analysis.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,WAAW,EACX,gBAAgB,EAChB,aAAa,EACb,UAAU,EACX,MAAM,SAAS,CAAC;AAEjB;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,eAAe,GACrB,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAuBlC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,eAAe,GACrB,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAe1B;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAC/C,UAAU,GAAE,MAAU,GACrB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAqBvB;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,eAAe,EACtB,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAC/C,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,EACnC,cAAc,CAAC,EAAE,MAAM,EAAE,GACxB,gBAAgB,EAAE,CAkEpB;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAexE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,MAAM,EACjB,aAAa,CAAC,EAAE;IAAE,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,EAC7C,WAAW,CAAC,EAAE,MAAM,EAAE,GACrB,UAAU,EAAE,CAoCd;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,QAAQ,CAAC,EAAE,MAAM,EACjB,aAAa,CAAC,EAAE;IAAE,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,EAC7C,WAAW,CAAC,EAAE,MAAM,EAAE,GACrB,MAAM,CA0ER;AAgBD,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAC9C,WAAW,CAMb;AAED,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,eAAe,EACtB,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAC/C,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,EACnC,UAAU,GAAE,MAAU,EACtB,cAAc,GAAE,MAAU,SA2B3B"}
@@ -1,27 +1,20 @@
1
1
  /**
2
2
  * Build co-usage matrix: track which files are imported together
3
- *
4
- * Files frequently imported together likely belong to the same semantic domain
5
3
  */
6
4
  export function buildCoUsageMatrix(graph) {
7
5
  const coUsageMatrix = new Map();
8
- // For each file, track which other files are imported alongside it
9
- for (const [sourceFile, node] of graph.nodes) {
6
+ for (const [, node] of graph.nodes) {
10
7
  const imports = node.imports;
11
- // For each pair of imports in this file, increment their co-usage count
12
8
  for (let i = 0; i < imports.length; i++) {
13
9
  const fileA = imports[i];
14
- if (!coUsageMatrix.has(fileA)) {
10
+ if (!coUsageMatrix.has(fileA))
15
11
  coUsageMatrix.set(fileA, new Map());
16
- }
17
12
  for (let j = i + 1; j < imports.length; j++) {
18
13
  const fileB = imports[j];
19
- // Increment bidirectional co-usage count
20
14
  const fileAUsage = coUsageMatrix.get(fileA);
21
15
  fileAUsage.set(fileB, (fileAUsage.get(fileB) || 0) + 1);
22
- if (!coUsageMatrix.has(fileB)) {
16
+ if (!coUsageMatrix.has(fileB))
23
17
  coUsageMatrix.set(fileB, new Map());
24
- }
25
18
  const fileBUsage = coUsageMatrix.get(fileB);
26
19
  fileBUsage.set(fileA, (fileBUsage.get(fileA) || 0) + 1);
27
20
  }
@@ -31,8 +24,6 @@ export function buildCoUsageMatrix(graph) {
31
24
  }
32
25
  /**
33
26
  * Extract type dependencies from AST exports
34
- *
35
- * Files that share types are semantically related
36
27
  */
37
28
  export function buildTypeGraph(graph) {
38
29
  const typeGraph = new Map();
@@ -40,9 +31,8 @@ export function buildTypeGraph(graph) {
40
31
  for (const exp of node.exports) {
41
32
  if (exp.typeReferences) {
42
33
  for (const typeRef of exp.typeReferences) {
43
- if (!typeGraph.has(typeRef)) {
34
+ if (!typeGraph.has(typeRef))
44
35
  typeGraph.set(typeRef, new Set());
45
- }
46
36
  typeGraph.get(typeRef).add(file);
47
37
  }
48
38
  }
@@ -52,70 +42,35 @@ export function buildTypeGraph(graph) {
52
42
  }
53
43
  /**
54
44
  * Find semantic clusters using co-usage patterns
55
- *
56
- * Files with high co-usage counts belong in the same cluster
57
45
  */
58
46
  export function findSemanticClusters(coUsageMatrix, minCoUsage = 3) {
59
47
  const clusters = new Map();
60
48
  const visited = new Set();
61
- // Simple clustering: group files with high co-usage
62
49
  for (const [file, coUsages] of coUsageMatrix) {
63
50
  if (visited.has(file))
64
51
  continue;
65
52
  const cluster = [file];
66
53
  visited.add(file);
67
- // Find strongly related files (co-imported >= minCoUsage times)
68
54
  for (const [relatedFile, count] of coUsages) {
69
55
  if (count >= minCoUsage && !visited.has(relatedFile)) {
70
56
  cluster.push(relatedFile);
71
57
  visited.add(relatedFile);
72
58
  }
73
59
  }
74
- if (cluster.length > 1) {
75
- // Use first file as cluster ID
60
+ if (cluster.length > 1)
76
61
  clusters.set(file, cluster);
77
- }
78
62
  }
79
63
  return clusters;
80
64
  }
81
- /**
82
- * Calculate confidence score for domain assignment based on multiple signals
83
- */
84
- export function calculateDomainConfidence(signals) {
85
- const weights = {
86
- coUsage: 0.35, // Strongest signal: actual usage patterns
87
- typeReference: 0.30, // Strong signal: shared types
88
- exportName: 0.15, // Medium signal: identifier semantics
89
- importPath: 0.10, // Weaker signal: path structure
90
- folderStructure: 0.10 // Weakest signal: organization convention
91
- };
92
- let confidence = 0;
93
- if (signals.coUsage)
94
- confidence += weights.coUsage;
95
- if (signals.typeReference)
96
- confidence += weights.typeReference;
97
- if (signals.exportName)
98
- confidence += weights.exportName;
99
- if (signals.importPath)
100
- confidence += weights.importPath;
101
- if (signals.folderStructure)
102
- confidence += weights.folderStructure;
103
- return confidence;
104
- }
105
65
  /**
106
66
  * Infer domain from semantic analysis (co-usage + types)
107
- *
108
- * This replaces the folder-based heuristic with actual code relationships
109
67
  */
110
68
  export function inferDomainFromSemantics(file, exportName, graph, coUsageMatrix, typeGraph, exportTypeRefs) {
111
- const assignments = [];
112
69
  const domainSignals = new Map();
113
- // 1. Check co-usage patterns
114
70
  const coUsages = coUsageMatrix.get(file) || new Map();
115
71
  const strongCoUsages = Array.from(coUsages.entries())
116
- .filter(([_, count]) => count >= 3)
72
+ .filter(([, count]) => count >= 3)
117
73
  .map(([coFile]) => coFile);
118
- // Extract domains from frequently co-imported files
119
74
  for (const coFile of strongCoUsages) {
120
75
  const coNode = graph.nodes.get(coFile);
121
76
  if (coNode) {
@@ -128,7 +83,7 @@ export function inferDomainFromSemantics(file, exportName, graph, coUsageMatrix,
128
83
  typeReference: false,
129
84
  exportName: false,
130
85
  importPath: false,
131
- folderStructure: false
86
+ folderStructure: false,
132
87
  });
133
88
  }
134
89
  domainSignals.get(domain).coUsage = true;
@@ -136,29 +91,28 @@ export function inferDomainFromSemantics(file, exportName, graph, coUsageMatrix,
136
91
  }
137
92
  }
138
93
  }
139
- // 2. Check type references
140
94
  if (exportTypeRefs) {
141
95
  for (const typeRef of exportTypeRefs) {
142
96
  const filesWithType = typeGraph.get(typeRef);
143
97
  if (filesWithType) {
144
98
  for (const typeFile of filesWithType) {
145
- if (typeFile !== file) {
146
- const typeNode = graph.nodes.get(typeFile);
147
- if (typeNode) {
148
- for (const exp of typeNode.exports) {
149
- if (exp.inferredDomain && exp.inferredDomain !== 'unknown') {
150
- const domain = exp.inferredDomain;
151
- if (!domainSignals.has(domain)) {
152
- domainSignals.set(domain, {
153
- coUsage: false,
154
- typeReference: false,
155
- exportName: false,
156
- importPath: false,
157
- folderStructure: false
158
- });
159
- }
160
- domainSignals.get(domain).typeReference = true;
99
+ if (typeFile === file)
100
+ continue;
101
+ const typeNode = graph.nodes.get(typeFile);
102
+ if (typeNode) {
103
+ for (const exp of typeNode.exports) {
104
+ if (exp.inferredDomain && exp.inferredDomain !== 'unknown') {
105
+ const domain = exp.inferredDomain;
106
+ if (!domainSignals.has(domain)) {
107
+ domainSignals.set(domain, {
108
+ coUsage: false,
109
+ typeReference: false,
110
+ exportName: false,
111
+ importPath: false,
112
+ folderStructure: false,
113
+ });
161
114
  }
115
+ domainSignals.get(domain).typeReference = true;
162
116
  }
163
117
  }
164
118
  }
@@ -166,76 +120,184 @@ export function inferDomainFromSemantics(file, exportName, graph, coUsageMatrix,
166
120
  }
167
121
  }
168
122
  }
169
- // 3. Build domain assignments with confidence scores
123
+ const assignments = [];
170
124
  for (const [domain, signals] of domainSignals) {
171
125
  const confidence = calculateDomainConfidence(signals);
172
- if (confidence >= 0.3) { // Minimum confidence threshold
126
+ if (confidence >= 0.3)
173
127
  assignments.push({ domain, confidence, signals });
174
- }
175
128
  }
176
- // Sort by confidence (highest first)
177
129
  assignments.sort((a, b) => b.confidence - a.confidence);
178
130
  return assignments;
179
131
  }
132
+ export function calculateDomainConfidence(signals) {
133
+ const weights = {
134
+ coUsage: 0.35,
135
+ typeReference: 0.3,
136
+ exportName: 0.15,
137
+ importPath: 0.1,
138
+ folderStructure: 0.1,
139
+ };
140
+ let confidence = 0;
141
+ if (signals.coUsage)
142
+ confidence += weights.coUsage;
143
+ if (signals.typeReference)
144
+ confidence += weights.typeReference;
145
+ if (signals.exportName)
146
+ confidence += weights.exportName;
147
+ if (signals.importPath)
148
+ confidence += weights.importPath;
149
+ if (signals.folderStructure)
150
+ confidence += weights.folderStructure;
151
+ return confidence;
152
+ }
153
+ /**
154
+ * Regex-based export extraction (legacy/fallback)
155
+ */
156
+ export function extractExports(content, filePath, domainOptions, fileImports) {
157
+ const exports = [];
158
+ const patterns = [
159
+ /export\s+function\s+(\w+)/g,
160
+ /export\s+class\s+(\w+)/g,
161
+ /export\s+const\s+(\w+)/g,
162
+ /export\s+type\s+(\w+)/g,
163
+ /export\s+interface\s+(\w+)/g,
164
+ /export\s+default/g,
165
+ ];
166
+ const types = [
167
+ 'function',
168
+ 'class',
169
+ 'const',
170
+ 'type',
171
+ 'interface',
172
+ 'default',
173
+ ];
174
+ patterns.forEach((pattern, index) => {
175
+ let match;
176
+ while ((match = pattern.exec(content)) !== null) {
177
+ const name = match[1] || 'default';
178
+ const type = types[index];
179
+ const inferredDomain = inferDomain(name, filePath, domainOptions, fileImports);
180
+ exports.push({ name, type, inferredDomain });
181
+ }
182
+ });
183
+ return exports;
184
+ }
180
185
  /**
181
- * Get co-usage data for a specific file
186
+ * Infer domain from name, path, or imports
182
187
  */
188
+ export function inferDomain(name, filePath, domainOptions, fileImports) {
189
+ const lower = name.toLowerCase();
190
+ const tokens = Array.from(new Set(lower
191
+ .replace(/([a-z0-9])([A-Z])/g, '$1 $2')
192
+ .replace(/[^a-z0-9]+/gi, ' ')
193
+ .split(' ')
194
+ .filter(Boolean)));
195
+ const defaultKeywords = [
196
+ 'authentication',
197
+ 'authorization',
198
+ 'payment',
199
+ 'invoice',
200
+ 'customer',
201
+ 'product',
202
+ 'order',
203
+ 'cart',
204
+ 'user',
205
+ 'admin',
206
+ 'repository',
207
+ 'controller',
208
+ 'service',
209
+ 'config',
210
+ 'model',
211
+ 'view',
212
+ 'auth',
213
+ ];
214
+ const domainKeywords = domainOptions?.domainKeywords?.length
215
+ ? [...domainOptions.domainKeywords, ...defaultKeywords]
216
+ : defaultKeywords;
217
+ for (const keyword of domainKeywords) {
218
+ if (tokens.includes(keyword))
219
+ return keyword;
220
+ }
221
+ for (const keyword of domainKeywords) {
222
+ if (lower.includes(keyword))
223
+ return keyword;
224
+ }
225
+ if (fileImports) {
226
+ for (const importPath of fileImports) {
227
+ const segments = importPath.split('/');
228
+ for (const segment of segments) {
229
+ const segLower = segment.toLowerCase();
230
+ const singularSegment = singularize(segLower);
231
+ for (const keyword of domainKeywords) {
232
+ if (singularSegment === keyword ||
233
+ segLower === keyword ||
234
+ segLower.includes(keyword))
235
+ return keyword;
236
+ }
237
+ }
238
+ }
239
+ }
240
+ if (filePath) {
241
+ const segments = filePath.split('/');
242
+ for (const segment of segments) {
243
+ const segLower = segment.toLowerCase();
244
+ const singularSegment = singularize(segLower);
245
+ for (const keyword of domainKeywords) {
246
+ if (singularSegment === keyword || segLower === keyword)
247
+ return keyword;
248
+ }
249
+ }
250
+ }
251
+ return 'unknown';
252
+ }
253
+ function singularize(word) {
254
+ const irregulars = {
255
+ people: 'person',
256
+ children: 'child',
257
+ men: 'man',
258
+ women: 'woman',
259
+ };
260
+ if (irregulars[word])
261
+ return irregulars[word];
262
+ if (word.endsWith('ies'))
263
+ return word.slice(0, -3) + 'y';
264
+ if (word.endsWith('ses'))
265
+ return word.slice(0, -2);
266
+ if (word.endsWith('s') && word.length > 3)
267
+ return word.slice(0, -1);
268
+ return word;
269
+ }
183
270
  export function getCoUsageData(file, coUsageMatrix) {
184
- const coImportedWith = coUsageMatrix.get(file) || new Map();
185
- // Find files that import both this file and others
186
- const sharedImporters = [];
187
- // This would require inverse mapping from imports, simplified for now
188
271
  return {
189
272
  file,
190
- coImportedWith,
191
- sharedImporters
273
+ coImportedWith: coUsageMatrix.get(file) || new Map(),
274
+ sharedImporters: [],
192
275
  };
193
276
  }
194
- /**
195
- * Find files that should be consolidated based on semantic similarity
196
- *
197
- * High co-usage + shared types = strong consolidation candidate
198
- */
199
277
  export function findConsolidationCandidates(graph, coUsageMatrix, typeGraph, minCoUsage = 5, minSharedTypes = 2) {
200
278
  const candidates = [];
201
- // Find file pairs with both high co-usage AND shared types
202
279
  for (const [fileA, coUsages] of coUsageMatrix) {
203
280
  const nodeA = graph.nodes.get(fileA);
204
281
  if (!nodeA)
205
282
  continue;
206
- for (const [fileB, coUsageCount] of coUsages) {
207
- if (fileB <= fileA)
208
- continue; // Avoid duplicates
209
- if (coUsageCount < minCoUsage)
283
+ for (const [fileB, count] of coUsages) {
284
+ if (fileB <= fileA || count < minCoUsage)
210
285
  continue;
211
286
  const nodeB = graph.nodes.get(fileB);
212
287
  if (!nodeB)
213
288
  continue;
214
- // Count shared types
215
- const typesA = new Set(nodeA.exports.flatMap(e => e.typeReferences || []));
216
- const typesB = new Set(nodeB.exports.flatMap(e => e.typeReferences || []));
217
- const sharedTypes = Array.from(typesA).filter(t => typesB.has(t));
218
- if (sharedTypes.length >= minSharedTypes) {
219
- const strength = (coUsageCount / 10) + (sharedTypes.length / 5);
220
- candidates.push({
221
- files: [fileA, fileB],
222
- reason: `High co-usage (${coUsageCount}x) and ${sharedTypes.length} shared types`,
223
- strength
224
- });
225
- }
226
- else if (coUsageCount >= minCoUsage * 2) {
227
- // Very high co-usage alone is enough
228
- const strength = coUsageCount / 10;
289
+ const typesA = new Set(nodeA.exports.flatMap((e) => e.typeReferences || []));
290
+ const typesB = new Set(nodeB.exports.flatMap((e) => e.typeReferences || []));
291
+ const sharedTypes = Array.from(typesA).filter((t) => typesB.has(t));
292
+ if (sharedTypes.length >= minSharedTypes || count >= minCoUsage * 2) {
229
293
  candidates.push({
230
294
  files: [fileA, fileB],
231
- reason: `Very high co-usage (${coUsageCount}x)`,
232
- strength
295
+ reason: `High co-usage (${count}x)`,
296
+ strength: count / 10,
233
297
  });
234
298
  }
235
299
  }
236
300
  }
237
- // Sort by strength (highest first)
238
- candidates.sort((a, b) => b.strength - a.strength);
239
- return candidates;
301
+ return candidates.sort((a, b) => b.strength - a.strength);
240
302
  }
241
303
  //# sourceMappingURL=semantic-analysis.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"semantic-analysis.js","sourceRoot":"","sources":["../src/semantic-analysis.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"semantic-analysis.js","sourceRoot":"","sources":["../src/semantic-analysis.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { ContextAnalysisResult, ContextSummary } from './types';
2
+ /**
3
+ * Generate summary of context analysis results
4
+ */
5
+ export declare function generateSummary(results: ContextAnalysisResult[], options: any): ContextSummary;
6
+ //# sourceMappingURL=summary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summary.d.ts","sourceRoot":"","sources":["../src/summary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EACrB,cAAc,EAEf,MAAM,SAAS,CAAC;AAIjB;;GAEG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,qBAAqB,EAAE,EAChC,OAAO,EAAE,GAAG,GACX,cAAc,CA8GhB"}
@@ -0,0 +1,92 @@
1
+ import { calculatePathEntropy, calculateDirectoryDistance } from './analyzer';
2
+ import { GLOBAL_SCAN_OPTIONS } from '@aiready/core';
3
+ /**
4
+ * Generate summary of context analysis results
5
+ */
6
+ export function generateSummary(results, options) {
7
+ const config = options
8
+ ? Object.fromEntries(Object.entries(options).filter(([key]) => !GLOBAL_SCAN_OPTIONS.includes(key) || key === 'rootDir'))
9
+ : {};
10
+ const totalFiles = results.length;
11
+ const totalTokens = results.reduce((sum, r) => sum + r.tokens, 0);
12
+ const avgContextBudget = totalFiles > 0 ? totalTokens / totalFiles : 0;
13
+ // Find deep files
14
+ const deepFiles = results
15
+ .filter((r) => r.maxDepth > 5)
16
+ .map((r) => ({ file: r.file, depth: r.maxDepth }));
17
+ const maxImportDepth = Math.max(0, ...results.map((r) => r.maxDepth));
18
+ // Find fragmented modules (clusters)
19
+ const moduleMap = new Map();
20
+ results.forEach((r) => {
21
+ const parts = r.file.split('/');
22
+ // Try to identify domain/module (e.g., packages/core, src/utils)
23
+ let domain = 'root';
24
+ if (parts.length > 2) {
25
+ domain = parts.slice(0, 2).join('/');
26
+ }
27
+ if (!moduleMap.has(domain))
28
+ moduleMap.set(domain, []);
29
+ moduleMap.get(domain).push(r);
30
+ });
31
+ const fragmentedModules = [];
32
+ moduleMap.forEach((files, domain) => {
33
+ const totalTokens = files.reduce((sum, f) => sum + f.tokens, 0);
34
+ const avgEntropy = files.reduce((sum, f) => sum + calculatePathEntropy(f.file), 0) /
35
+ files.length;
36
+ // A module is fragmented if it has many files with high directory distance
37
+ // and relatively low cohesion
38
+ const fragmentationScore = Math.min(1, avgEntropy * (files.length / 10));
39
+ if (fragmentationScore > 0.4) {
40
+ fragmentedModules.push({
41
+ domain,
42
+ files: files.map((f) => f.file),
43
+ fragmentationScore,
44
+ totalTokens,
45
+ });
46
+ }
47
+ });
48
+ fragmentedModules.sort((a, b) => b.fragmentationScore - a.fragmentationScore);
49
+ const avgFragmentation = fragmentedModules.length > 0
50
+ ? fragmentedModules.reduce((sum, m) => sum + m.fragmentationScore, 0) /
51
+ fragmentedModules.length
52
+ : 0;
53
+ // Cohesion (dummy for now, uses directory distance)
54
+ const avgCohesion = 1 -
55
+ results.reduce((sum, r) => sum + calculateDirectoryDistance(r.file), 0) /
56
+ (totalFiles || 1) /
57
+ 10;
58
+ const lowCohesionFiles = results
59
+ .filter((r) => calculateDirectoryDistance(r.file) > 5)
60
+ .map((r) => r.file);
61
+ // Issues
62
+ const criticalIssues = results.filter((r) => r.severity === 'critical').length;
63
+ const majorIssues = results.filter((r) => r.severity === 'major').length;
64
+ const minorIssues = results.filter((r) => r.severity === 'minor').length;
65
+ const totalPotentialSavings = results.reduce((sum, r) => sum + (r.potentialSavings || 0), 0);
66
+ const topExpensiveFiles = results
67
+ .sort((a, b) => b.tokens - a.tokens)
68
+ .slice(0, 10)
69
+ .map((r) => ({
70
+ file: r.file,
71
+ contextBudget: r.tokens,
72
+ severity: r.severity,
73
+ }));
74
+ return {
75
+ totalFiles,
76
+ totalTokens,
77
+ avgContextBudget,
78
+ maxImportDepth,
79
+ deepFiles,
80
+ avgFragmentation,
81
+ fragmentedModules,
82
+ avgCohesion,
83
+ lowCohesionFiles,
84
+ criticalIssues,
85
+ majorIssues,
86
+ minorIssues,
87
+ totalPotentialSavings,
88
+ topExpensiveFiles,
89
+ config,
90
+ };
91
+ }
92
+ //# sourceMappingURL=summary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summary.js","sourceRoot":"","sources":["../src/summary.ts"],"names":[],"mappings":"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"}