@aiready/context-analyzer 0.9.4 → 0.9.5

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 (75) hide show
  1. package/.turbo/turbo-build.log +10 -10
  2. package/.turbo/turbo-test.log +21 -9
  3. package/README.md +8 -0
  4. package/dist/__tests__/analyzer.test.d.ts +2 -0
  5. package/dist/__tests__/analyzer.test.d.ts.map +1 -0
  6. package/dist/__tests__/analyzer.test.js +157 -0
  7. package/dist/__tests__/analyzer.test.js.map +1 -0
  8. package/dist/__tests__/auto-detection.test.d.ts +2 -0
  9. package/dist/__tests__/auto-detection.test.d.ts.map +1 -0
  10. package/dist/__tests__/auto-detection.test.js +132 -0
  11. package/dist/__tests__/auto-detection.test.js.map +1 -0
  12. package/dist/__tests__/enhanced-cohesion.test.d.ts +2 -0
  13. package/dist/__tests__/enhanced-cohesion.test.d.ts.map +1 -0
  14. package/dist/__tests__/enhanced-cohesion.test.js +109 -0
  15. package/dist/__tests__/enhanced-cohesion.test.js.map +1 -0
  16. package/dist/__tests__/fragmentation-advanced.test.d.ts +2 -0
  17. package/dist/__tests__/fragmentation-advanced.test.d.ts.map +1 -0
  18. package/dist/__tests__/fragmentation-advanced.test.js +50 -0
  19. package/dist/__tests__/fragmentation-advanced.test.js.map +1 -0
  20. package/dist/__tests__/fragmentation-coupling.test.d.ts +2 -0
  21. package/dist/__tests__/fragmentation-coupling.test.d.ts.map +1 -0
  22. package/dist/__tests__/fragmentation-coupling.test.js +52 -0
  23. package/dist/__tests__/fragmentation-coupling.test.js.map +1 -0
  24. package/dist/__tests__/fragmentation-log.test.d.ts +2 -0
  25. package/dist/__tests__/fragmentation-log.test.d.ts.map +1 -0
  26. package/dist/__tests__/fragmentation-log.test.js +33 -0
  27. package/dist/__tests__/fragmentation-log.test.js.map +1 -0
  28. package/dist/__tests__/scoring.test.d.ts +2 -0
  29. package/dist/__tests__/scoring.test.d.ts.map +1 -0
  30. package/dist/__tests__/scoring.test.js +118 -0
  31. package/dist/__tests__/scoring.test.js.map +1 -0
  32. package/dist/__tests__/structural-cohesion.test.d.ts +2 -0
  33. package/dist/__tests__/structural-cohesion.test.d.ts.map +1 -0
  34. package/dist/__tests__/structural-cohesion.test.js +29 -0
  35. package/dist/__tests__/structural-cohesion.test.js.map +1 -0
  36. package/dist/analyzer.d.ts +100 -0
  37. package/dist/analyzer.d.ts.map +1 -0
  38. package/dist/analyzer.js +701 -0
  39. package/dist/analyzer.js.map +1 -0
  40. package/dist/analyzers/python-context.d.ts +38 -0
  41. package/dist/analyzers/python-context.d.ts.map +1 -0
  42. package/dist/analyzers/python-context.js +232 -0
  43. package/dist/analyzers/python-context.js.map +1 -0
  44. package/dist/chunk-BD4NWUVG.mjs +1242 -0
  45. package/dist/cli.d.ts.map +1 -0
  46. package/dist/cli.js +139 -13
  47. package/dist/cli.js.map +1 -0
  48. package/dist/cli.mjs +1 -1
  49. package/dist/index.d.mts +3 -0
  50. package/dist/index.d.ts +3 -0
  51. package/dist/index.d.ts.map +1 -0
  52. package/dist/index.js +139 -13
  53. package/dist/index.js.map +1 -0
  54. package/dist/index.mjs +1 -1
  55. package/dist/scoring.d.ts +13 -0
  56. package/dist/scoring.d.ts.map +1 -0
  57. package/dist/scoring.js +133 -0
  58. package/dist/scoring.js.map +1 -0
  59. package/dist/semantic-analysis.d.ts +44 -0
  60. package/dist/semantic-analysis.d.ts.map +1 -0
  61. package/dist/semantic-analysis.js +241 -0
  62. package/dist/semantic-analysis.js.map +1 -0
  63. package/dist/types.d.ts +117 -0
  64. package/dist/types.d.ts.map +1 -0
  65. package/dist/types.js +2 -0
  66. package/dist/types.js.map +1 -0
  67. package/package.json +2 -2
  68. package/src/__tests__/fragmentation-advanced.test.ts +60 -0
  69. package/src/__tests__/fragmentation-coupling.test.ts +62 -0
  70. package/src/__tests__/fragmentation-log.test.ts +38 -0
  71. package/src/__tests__/structural-cohesion.test.ts +32 -0
  72. package/src/analyzer.ts +193 -18
  73. package/src/index.ts +34 -2
  74. package/src/types.ts +3 -0
  75. package/tsconfig.tsbuildinfo +1 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/dist/cli.js CHANGED
@@ -538,19 +538,72 @@ function detectCircularDependencies(graph) {
538
538
  }
539
539
  return cycles;
540
540
  }
541
- function calculateCohesion(exports2, filePath) {
542
- return calculateEnhancedCohesion(exports2, filePath);
541
+ function calculateCohesion(exports2, filePath, options) {
542
+ return calculateEnhancedCohesion(exports2, filePath, options);
543
543
  }
544
544
  function isTestFile(filePath) {
545
545
  const lower = filePath.toLowerCase();
546
546
  return lower.includes("test") || lower.includes("spec") || lower.includes("mock") || lower.includes("fixture") || lower.includes("__tests__") || lower.includes(".test.") || lower.includes(".spec.");
547
547
  }
548
- function calculateFragmentation(files, domain) {
548
+ function calculateFragmentation(files, domain, options) {
549
549
  if (files.length <= 1) return 0;
550
550
  const directories = new Set(files.map((f) => f.split("/").slice(0, -1).join("/")));
551
- return (directories.size - 1) / (files.length - 1);
551
+ const uniqueDirs = directories.size;
552
+ if (options?.useLogScale) {
553
+ if (uniqueDirs <= 1) return 0;
554
+ const total = files.length;
555
+ const base = options.logBase || Math.E;
556
+ const num = Math.log(uniqueDirs) / Math.log(base);
557
+ const den = Math.log(total) / Math.log(base);
558
+ return den > 0 ? num / den : 0;
559
+ }
560
+ return (uniqueDirs - 1) / (files.length - 1);
552
561
  }
553
- function detectModuleClusters(graph) {
562
+ function calculatePathEntropy(files) {
563
+ if (!files || files.length === 0) return 0;
564
+ const dirCounts = /* @__PURE__ */ new Map();
565
+ for (const f of files) {
566
+ const dir = f.split("/").slice(0, -1).join("/") || ".";
567
+ dirCounts.set(dir, (dirCounts.get(dir) || 0) + 1);
568
+ }
569
+ const counts = Array.from(dirCounts.values());
570
+ if (counts.length <= 1) return 0;
571
+ const total = counts.reduce((s, v) => s + v, 0);
572
+ let entropy = 0;
573
+ for (const c of counts) {
574
+ const p = c / total;
575
+ entropy -= p * Math.log2(p);
576
+ }
577
+ const maxEntropy = Math.log2(counts.length);
578
+ return maxEntropy > 0 ? entropy / maxEntropy : 0;
579
+ }
580
+ function calculateDirectoryDistance(files) {
581
+ if (!files || files.length <= 1) return 0;
582
+ function pathSegments(p) {
583
+ return p.split("/").filter(Boolean);
584
+ }
585
+ function commonAncestorDepth(a, b) {
586
+ const minLen = Math.min(a.length, b.length);
587
+ let i = 0;
588
+ while (i < minLen && a[i] === b[i]) i++;
589
+ return i;
590
+ }
591
+ let totalNormalized = 0;
592
+ let comparisons = 0;
593
+ for (let i = 0; i < files.length; i++) {
594
+ for (let j = i + 1; j < files.length; j++) {
595
+ const segA = pathSegments(files[i]);
596
+ const segB = pathSegments(files[j]);
597
+ const shared = commonAncestorDepth(segA, segB);
598
+ const maxDepth = Math.max(segA.length, segB.length);
599
+ const normalizedShared = maxDepth > 0 ? shared / maxDepth : 0;
600
+ totalNormalized += 1 - normalizedShared;
601
+ comparisons++;
602
+ }
603
+ }
604
+ return comparisons > 0 ? totalNormalized / comparisons : 0;
605
+ }
606
+ function detectModuleClusters(graph, options) {
554
607
  const domainMap = /* @__PURE__ */ new Map();
555
608
  for (const [file, node] of graph.nodes.entries()) {
556
609
  const domains = node.exports.map((e) => e.inferredDomain || "unknown");
@@ -567,10 +620,28 @@ function detectModuleClusters(graph) {
567
620
  const node = graph.nodes.get(file);
568
621
  return sum + (node?.tokenCost || 0);
569
622
  }, 0);
570
- const fragmentationScore = calculateFragmentation(files, domain);
623
+ const baseFragmentation = calculateFragmentation(files, domain, { useLogScale: !!options?.useLogScale });
624
+ let importSimilarityTotal = 0;
625
+ let importComparisons = 0;
626
+ for (let i = 0; i < files.length; i++) {
627
+ for (let j = i + 1; j < files.length; j++) {
628
+ const f1 = files[i];
629
+ const f2 = files[j];
630
+ const n1 = graph.nodes.get(f1)?.imports || [];
631
+ const n2 = graph.nodes.get(f2)?.imports || [];
632
+ const similarity = n1.length === 0 && n2.length === 0 ? 0 : calculateJaccardSimilarity(n1, n2);
633
+ importSimilarityTotal += similarity;
634
+ importComparisons++;
635
+ }
636
+ }
637
+ const importCohesion = importComparisons > 0 ? importSimilarityTotal / importComparisons : 0;
638
+ const couplingDiscountFactor = 1 - 0.2 * importCohesion;
639
+ const fragmentationScore = baseFragmentation * couplingDiscountFactor;
640
+ const pathEntropy = calculatePathEntropy(files);
641
+ const directoryDistance = calculateDirectoryDistance(files);
571
642
  const avgCohesion = files.reduce((sum, file) => {
572
643
  const node = graph.nodes.get(file);
573
- return sum + (node ? calculateCohesion(node.exports, file) : 0);
644
+ return sum + (node ? calculateCohesion(node.exports, file, { coUsageMatrix: graph.coUsageMatrix }) : 0);
574
645
  }, 0) / files.length;
575
646
  const targetFiles = Math.max(1, Math.ceil(files.length / 3));
576
647
  const consolidationPlan = generateConsolidationPlan(
@@ -583,6 +654,9 @@ function detectModuleClusters(graph) {
583
654
  files,
584
655
  totalTokens,
585
656
  fragmentationScore,
657
+ pathEntropy,
658
+ directoryDistance,
659
+ importCohesion,
586
660
  avgCohesion,
587
661
  suggestedStructure: {
588
662
  targetFiles,
@@ -731,7 +805,7 @@ function extractExportsWithAST(content, filePath, domainOptions, fileImports) {
731
805
  return extractExports(content, filePath, domainOptions, fileImports);
732
806
  }
733
807
  }
734
- function calculateEnhancedCohesion(exports2, filePath) {
808
+ function calculateEnhancedCohesion(exports2, filePath, options) {
735
809
  if (exports2.length === 0) return 1;
736
810
  if (exports2.length === 1) return 1;
737
811
  if (filePath && isTestFile(filePath)) {
@@ -739,11 +813,38 @@ function calculateEnhancedCohesion(exports2, filePath) {
739
813
  }
740
814
  const domainCohesion = calculateDomainCohesion(exports2);
741
815
  const hasImportData = exports2.some((e) => e.imports && e.imports.length > 0);
742
- if (!hasImportData) {
743
- return domainCohesion;
816
+ const importCohesion = hasImportData ? calculateImportBasedCohesion(exports2) : void 0;
817
+ const coUsageMatrix = options?.coUsageMatrix;
818
+ const structuralCohesion = filePath && coUsageMatrix ? calculateStructuralCohesionFromCoUsage(filePath, coUsageMatrix) : void 0;
819
+ const defaultWeights = { importBased: 0.5, structural: 0.3, domainBased: 0.2 };
820
+ const weights = { ...defaultWeights, ...options?.weights || {} };
821
+ const signals = [];
822
+ if (importCohesion !== void 0) signals.push({ score: importCohesion, weight: weights.importBased });
823
+ if (structuralCohesion !== void 0) signals.push({ score: structuralCohesion, weight: weights.structural });
824
+ signals.push({ score: domainCohesion, weight: weights.domainBased });
825
+ const totalWeight = signals.reduce((s, el) => s + el.weight, 0);
826
+ if (totalWeight === 0) return domainCohesion;
827
+ const combined = signals.reduce((sum, el) => sum + el.score * (el.weight / totalWeight), 0);
828
+ return combined;
829
+ }
830
+ function calculateStructuralCohesionFromCoUsage(file, coUsageMatrix) {
831
+ if (!coUsageMatrix) return 1;
832
+ const coUsages = coUsageMatrix.get(file);
833
+ if (!coUsages || coUsages.size === 0) return 1;
834
+ let total = 0;
835
+ for (const count of coUsages.values()) total += count;
836
+ if (total === 0) return 1;
837
+ const probs = [];
838
+ for (const count of coUsages.values()) {
839
+ if (count > 0) probs.push(count / total);
840
+ }
841
+ if (probs.length <= 1) return 1;
842
+ let entropy = 0;
843
+ for (const p of probs) {
844
+ entropy -= p * Math.log2(p);
744
845
  }
745
- const importCohesion = calculateImportBasedCohesion(exports2);
746
- return importCohesion * 0.6 + domainCohesion * 0.4;
846
+ const maxEntropy = Math.log2(probs.length);
847
+ return maxEntropy > 0 ? 1 - entropy / maxEntropy : 1;
747
848
  }
748
849
  function calculateImportBasedCohesion(exports2) {
749
850
  const exportsWithImports = exports2.filter((e) => e.imports && e.imports.length > 0);
@@ -859,7 +960,8 @@ async function analyzeContext(options) {
859
960
  });
860
961
  }
861
962
  const circularDeps = detectCircularDependencies(graph);
862
- const clusters = detectModuleClusters(graph);
963
+ const useLogScale = files.length >= 500;
964
+ const clusters = detectModuleClusters(graph, { useLogScale });
863
965
  const fragmentationMap = /* @__PURE__ */ new Map();
864
966
  for (const cluster of clusters) {
865
967
  for (const file of cluster.files) {
@@ -971,17 +1073,41 @@ function generateSummary(results) {
971
1073
  }
972
1074
  const fragmentedModules = [];
973
1075
  for (const [domain, files] of moduleMap.entries()) {
1076
+ let jaccard2 = function(a, b) {
1077
+ const s1 = new Set(a || []);
1078
+ const s2 = new Set(b || []);
1079
+ if (s1.size === 0 && s2.size === 0) return 0;
1080
+ const inter = new Set([...s1].filter((x) => s2.has(x)));
1081
+ const uni = /* @__PURE__ */ new Set([...s1, ...s2]);
1082
+ return uni.size === 0 ? 0 : inter.size / uni.size;
1083
+ };
1084
+ var jaccard = jaccard2;
974
1085
  if (files.length < 2) continue;
975
1086
  const fragmentationScore = files.reduce((sum, f) => sum + f.fragmentationScore, 0) / files.length;
976
1087
  if (fragmentationScore < 0.3) continue;
977
1088
  const totalTokens2 = files.reduce((sum, f) => sum + f.tokenCost, 0);
978
1089
  const avgCohesion2 = files.reduce((sum, f) => sum + f.cohesionScore, 0) / files.length;
979
1090
  const targetFiles = Math.max(1, Math.ceil(files.length / 3));
1091
+ const filePaths = files.map((f) => f.file);
1092
+ const pathEntropy = calculatePathEntropy(filePaths);
1093
+ const directoryDistance = calculateDirectoryDistance(filePaths);
1094
+ let importSimTotal = 0;
1095
+ let importPairs = 0;
1096
+ for (let i = 0; i < files.length; i++) {
1097
+ for (let j = i + 1; j < files.length; j++) {
1098
+ importSimTotal += jaccard2(files[i].dependencyList || [], files[j].dependencyList || []);
1099
+ importPairs++;
1100
+ }
1101
+ }
1102
+ const importCohesion = importPairs > 0 ? importSimTotal / importPairs : 0;
980
1103
  fragmentedModules.push({
981
1104
  domain,
982
1105
  files: files.map((f) => f.file),
983
1106
  totalTokens: totalTokens2,
984
1107
  fragmentationScore,
1108
+ pathEntropy,
1109
+ directoryDistance,
1110
+ importCohesion,
985
1111
  avgCohesion: avgCohesion2,
986
1112
  suggestedStructure: {
987
1113
  targetFiles,
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
package/dist/cli.mjs CHANGED
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  analyzeContext,
4
4
  generateSummary
5
- } from "./chunk-JZ2SE4DB.mjs";
5
+ } from "./chunk-BD4NWUVG.mjs";
6
6
  import "./chunk-Y6FXYEAI.mjs";
7
7
 
8
8
  // src/cli.ts
package/dist/index.d.mts CHANGED
@@ -32,6 +32,9 @@ interface ModuleCluster {
32
32
  files: string[];
33
33
  totalTokens: number;
34
34
  fragmentationScore: number;
35
+ pathEntropy?: number;
36
+ directoryDistance?: number;
37
+ importCohesion?: number;
35
38
  avgCohesion: number;
36
39
  suggestedStructure: {
37
40
  targetFiles: number;
package/dist/index.d.ts CHANGED
@@ -32,6 +32,9 @@ interface ModuleCluster {
32
32
  files: string[];
33
33
  totalTokens: number;
34
34
  fragmentationScore: number;
35
+ pathEntropy?: number;
36
+ directoryDistance?: number;
37
+ importCohesion?: number;
35
38
  avgCohesion: number;
36
39
  suggestedStructure: {
37
40
  targetFiles: number;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,KAAK,EACV,sBAAsB,EACtB,qBAAqB,EACrB,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,aAAa,EACb,WAAW,EACX,cAAc,EACf,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,oBAAoB,EACpB,yBAAyB,EACzB,wBAAwB,EACxB,cAAc,EACd,2BAA2B,EAC5B,MAAM,qBAAqB,CAAC;AAE7B,YAAY,EACV,sBAAsB,EACtB,qBAAqB,EACrB,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,aAAa,EACb,WAAW,EACX,cAAc,GACf,CAAC;AAEF,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,oBAAoB,EACpB,yBAAyB,EACzB,wBAAwB,EACxB,cAAc,EACd,2BAA2B,GAC5B,CAAC;AAEF;;;GAGG;AACH,iBAAe,gBAAgB,CAC7B,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,OAAO,CAAC,sBAAsB,CAAC,GAC3C,OAAO,CAAC,sBAAsB,CAAC,CAuDjC;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,qBAAqB,EAAE,CAAC,CA8LlC;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,qBAAqB,EAAE,GAC/B,cAAc,CAgKhB;AAkHD,OAAO,EAAE,gBAAgB,EAAE,CAAC;AAgC5B,OAAO,EAAE,qBAAqB,EAAE,CAAC"}
package/dist/index.js CHANGED
@@ -611,19 +611,72 @@ function detectCircularDependencies(graph) {
611
611
  }
612
612
  return cycles;
613
613
  }
614
- function calculateCohesion(exports2, filePath) {
615
- return calculateEnhancedCohesion(exports2, filePath);
614
+ function calculateCohesion(exports2, filePath, options) {
615
+ return calculateEnhancedCohesion(exports2, filePath, options);
616
616
  }
617
617
  function isTestFile(filePath) {
618
618
  const lower = filePath.toLowerCase();
619
619
  return lower.includes("test") || lower.includes("spec") || lower.includes("mock") || lower.includes("fixture") || lower.includes("__tests__") || lower.includes(".test.") || lower.includes(".spec.");
620
620
  }
621
- function calculateFragmentation(files, domain) {
621
+ function calculateFragmentation(files, domain, options) {
622
622
  if (files.length <= 1) return 0;
623
623
  const directories = new Set(files.map((f) => f.split("/").slice(0, -1).join("/")));
624
- return (directories.size - 1) / (files.length - 1);
624
+ const uniqueDirs = directories.size;
625
+ if (options?.useLogScale) {
626
+ if (uniqueDirs <= 1) return 0;
627
+ const total = files.length;
628
+ const base = options.logBase || Math.E;
629
+ const num = Math.log(uniqueDirs) / Math.log(base);
630
+ const den = Math.log(total) / Math.log(base);
631
+ return den > 0 ? num / den : 0;
632
+ }
633
+ return (uniqueDirs - 1) / (files.length - 1);
625
634
  }
626
- function detectModuleClusters(graph) {
635
+ function calculatePathEntropy(files) {
636
+ if (!files || files.length === 0) return 0;
637
+ const dirCounts = /* @__PURE__ */ new Map();
638
+ for (const f of files) {
639
+ const dir = f.split("/").slice(0, -1).join("/") || ".";
640
+ dirCounts.set(dir, (dirCounts.get(dir) || 0) + 1);
641
+ }
642
+ const counts = Array.from(dirCounts.values());
643
+ if (counts.length <= 1) return 0;
644
+ const total = counts.reduce((s, v) => s + v, 0);
645
+ let entropy = 0;
646
+ for (const c of counts) {
647
+ const p = c / total;
648
+ entropy -= p * Math.log2(p);
649
+ }
650
+ const maxEntropy = Math.log2(counts.length);
651
+ return maxEntropy > 0 ? entropy / maxEntropy : 0;
652
+ }
653
+ function calculateDirectoryDistance(files) {
654
+ if (!files || files.length <= 1) return 0;
655
+ function pathSegments(p) {
656
+ return p.split("/").filter(Boolean);
657
+ }
658
+ function commonAncestorDepth(a, b) {
659
+ const minLen = Math.min(a.length, b.length);
660
+ let i = 0;
661
+ while (i < minLen && a[i] === b[i]) i++;
662
+ return i;
663
+ }
664
+ let totalNormalized = 0;
665
+ let comparisons = 0;
666
+ for (let i = 0; i < files.length; i++) {
667
+ for (let j = i + 1; j < files.length; j++) {
668
+ const segA = pathSegments(files[i]);
669
+ const segB = pathSegments(files[j]);
670
+ const shared = commonAncestorDepth(segA, segB);
671
+ const maxDepth = Math.max(segA.length, segB.length);
672
+ const normalizedShared = maxDepth > 0 ? shared / maxDepth : 0;
673
+ totalNormalized += 1 - normalizedShared;
674
+ comparisons++;
675
+ }
676
+ }
677
+ return comparisons > 0 ? totalNormalized / comparisons : 0;
678
+ }
679
+ function detectModuleClusters(graph, options) {
627
680
  const domainMap = /* @__PURE__ */ new Map();
628
681
  for (const [file, node] of graph.nodes.entries()) {
629
682
  const domains = node.exports.map((e) => e.inferredDomain || "unknown");
@@ -640,10 +693,28 @@ function detectModuleClusters(graph) {
640
693
  const node = graph.nodes.get(file);
641
694
  return sum + (node?.tokenCost || 0);
642
695
  }, 0);
643
- const fragmentationScore = calculateFragmentation(files, domain);
696
+ const baseFragmentation = calculateFragmentation(files, domain, { useLogScale: !!options?.useLogScale });
697
+ let importSimilarityTotal = 0;
698
+ let importComparisons = 0;
699
+ for (let i = 0; i < files.length; i++) {
700
+ for (let j = i + 1; j < files.length; j++) {
701
+ const f1 = files[i];
702
+ const f2 = files[j];
703
+ const n1 = graph.nodes.get(f1)?.imports || [];
704
+ const n2 = graph.nodes.get(f2)?.imports || [];
705
+ const similarity = n1.length === 0 && n2.length === 0 ? 0 : calculateJaccardSimilarity(n1, n2);
706
+ importSimilarityTotal += similarity;
707
+ importComparisons++;
708
+ }
709
+ }
710
+ const importCohesion = importComparisons > 0 ? importSimilarityTotal / importComparisons : 0;
711
+ const couplingDiscountFactor = 1 - 0.2 * importCohesion;
712
+ const fragmentationScore = baseFragmentation * couplingDiscountFactor;
713
+ const pathEntropy = calculatePathEntropy(files);
714
+ const directoryDistance = calculateDirectoryDistance(files);
644
715
  const avgCohesion = files.reduce((sum, file) => {
645
716
  const node = graph.nodes.get(file);
646
- return sum + (node ? calculateCohesion(node.exports, file) : 0);
717
+ return sum + (node ? calculateCohesion(node.exports, file, { coUsageMatrix: graph.coUsageMatrix }) : 0);
647
718
  }, 0) / files.length;
648
719
  const targetFiles = Math.max(1, Math.ceil(files.length / 3));
649
720
  const consolidationPlan = generateConsolidationPlan(
@@ -656,6 +727,9 @@ function detectModuleClusters(graph) {
656
727
  files,
657
728
  totalTokens,
658
729
  fragmentationScore,
730
+ pathEntropy,
731
+ directoryDistance,
732
+ importCohesion,
659
733
  avgCohesion,
660
734
  suggestedStructure: {
661
735
  targetFiles,
@@ -804,7 +878,7 @@ function extractExportsWithAST(content, filePath, domainOptions, fileImports) {
804
878
  return extractExports(content, filePath, domainOptions, fileImports);
805
879
  }
806
880
  }
807
- function calculateEnhancedCohesion(exports2, filePath) {
881
+ function calculateEnhancedCohesion(exports2, filePath, options) {
808
882
  if (exports2.length === 0) return 1;
809
883
  if (exports2.length === 1) return 1;
810
884
  if (filePath && isTestFile(filePath)) {
@@ -812,11 +886,38 @@ function calculateEnhancedCohesion(exports2, filePath) {
812
886
  }
813
887
  const domainCohesion = calculateDomainCohesion(exports2);
814
888
  const hasImportData = exports2.some((e) => e.imports && e.imports.length > 0);
815
- if (!hasImportData) {
816
- return domainCohesion;
889
+ const importCohesion = hasImportData ? calculateImportBasedCohesion(exports2) : void 0;
890
+ const coUsageMatrix = options?.coUsageMatrix;
891
+ const structuralCohesion = filePath && coUsageMatrix ? calculateStructuralCohesionFromCoUsage(filePath, coUsageMatrix) : void 0;
892
+ const defaultWeights = { importBased: 0.5, structural: 0.3, domainBased: 0.2 };
893
+ const weights = { ...defaultWeights, ...options?.weights || {} };
894
+ const signals = [];
895
+ if (importCohesion !== void 0) signals.push({ score: importCohesion, weight: weights.importBased });
896
+ if (structuralCohesion !== void 0) signals.push({ score: structuralCohesion, weight: weights.structural });
897
+ signals.push({ score: domainCohesion, weight: weights.domainBased });
898
+ const totalWeight = signals.reduce((s, el) => s + el.weight, 0);
899
+ if (totalWeight === 0) return domainCohesion;
900
+ const combined = signals.reduce((sum, el) => sum + el.score * (el.weight / totalWeight), 0);
901
+ return combined;
902
+ }
903
+ function calculateStructuralCohesionFromCoUsage(file, coUsageMatrix) {
904
+ if (!coUsageMatrix) return 1;
905
+ const coUsages = coUsageMatrix.get(file);
906
+ if (!coUsages || coUsages.size === 0) return 1;
907
+ let total = 0;
908
+ for (const count of coUsages.values()) total += count;
909
+ if (total === 0) return 1;
910
+ const probs = [];
911
+ for (const count of coUsages.values()) {
912
+ if (count > 0) probs.push(count / total);
913
+ }
914
+ if (probs.length <= 1) return 1;
915
+ let entropy = 0;
916
+ for (const p of probs) {
917
+ entropy -= p * Math.log2(p);
817
918
  }
818
- const importCohesion = calculateImportBasedCohesion(exports2);
819
- return importCohesion * 0.6 + domainCohesion * 0.4;
919
+ const maxEntropy = Math.log2(probs.length);
920
+ return maxEntropy > 0 ? 1 - entropy / maxEntropy : 1;
820
921
  }
821
922
  function calculateImportBasedCohesion(exports2) {
822
923
  const exportsWithImports = exports2.filter((e) => e.imports && e.imports.length > 0);
@@ -1083,7 +1184,8 @@ async function analyzeContext(options) {
1083
1184
  });
1084
1185
  }
1085
1186
  const circularDeps = detectCircularDependencies(graph);
1086
- const clusters = detectModuleClusters(graph);
1187
+ const useLogScale = files.length >= 500;
1188
+ const clusters = detectModuleClusters(graph, { useLogScale });
1087
1189
  const fragmentationMap = /* @__PURE__ */ new Map();
1088
1190
  for (const cluster of clusters) {
1089
1191
  for (const file of cluster.files) {
@@ -1195,17 +1297,41 @@ function generateSummary(results) {
1195
1297
  }
1196
1298
  const fragmentedModules = [];
1197
1299
  for (const [domain, files] of moduleMap.entries()) {
1300
+ let jaccard2 = function(a, b) {
1301
+ const s1 = new Set(a || []);
1302
+ const s2 = new Set(b || []);
1303
+ if (s1.size === 0 && s2.size === 0) return 0;
1304
+ const inter = new Set([...s1].filter((x) => s2.has(x)));
1305
+ const uni = /* @__PURE__ */ new Set([...s1, ...s2]);
1306
+ return uni.size === 0 ? 0 : inter.size / uni.size;
1307
+ };
1308
+ var jaccard = jaccard2;
1198
1309
  if (files.length < 2) continue;
1199
1310
  const fragmentationScore = files.reduce((sum, f) => sum + f.fragmentationScore, 0) / files.length;
1200
1311
  if (fragmentationScore < 0.3) continue;
1201
1312
  const totalTokens2 = files.reduce((sum, f) => sum + f.tokenCost, 0);
1202
1313
  const avgCohesion2 = files.reduce((sum, f) => sum + f.cohesionScore, 0) / files.length;
1203
1314
  const targetFiles = Math.max(1, Math.ceil(files.length / 3));
1315
+ const filePaths = files.map((f) => f.file);
1316
+ const pathEntropy = calculatePathEntropy(filePaths);
1317
+ const directoryDistance = calculateDirectoryDistance(filePaths);
1318
+ let importSimTotal = 0;
1319
+ let importPairs = 0;
1320
+ for (let i = 0; i < files.length; i++) {
1321
+ for (let j = i + 1; j < files.length; j++) {
1322
+ importSimTotal += jaccard2(files[i].dependencyList || [], files[j].dependencyList || []);
1323
+ importPairs++;
1324
+ }
1325
+ }
1326
+ const importCohesion = importPairs > 0 ? importSimTotal / importPairs : 0;
1204
1327
  fragmentedModules.push({
1205
1328
  domain,
1206
1329
  files: files.map((f) => f.file),
1207
1330
  totalTokens: totalTokens2,
1208
1331
  fragmentationScore,
1332
+ pathEntropy,
1333
+ directoryDistance,
1334
+ importCohesion,
1209
1335
  avgCohesion: avgCohesion2,
1210
1336
  suggestedStructure: {
1211
1337
  targetFiles,
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.mjs CHANGED
@@ -10,7 +10,7 @@ import {
10
10
  getCoUsageData,
11
11
  getSmartDefaults,
12
12
  inferDomainFromSemantics
13
- } from "./chunk-JZ2SE4DB.mjs";
13
+ } from "./chunk-BD4NWUVG.mjs";
14
14
  import "./chunk-Y6FXYEAI.mjs";
15
15
  export {
16
16
  analyzeContext,
@@ -0,0 +1,13 @@
1
+ import type { ToolScoringOutput } from '@aiready/core';
2
+ import type { ContextSummary } from './types';
3
+ /**
4
+ * Calculate AI Readiness Score for context efficiency (0-100)
5
+ *
6
+ * Based on:
7
+ * - Average context budget (tokens needed to understand files)
8
+ * - Import depth (dependency chain length)
9
+ * - Fragmentation score (code organization)
10
+ * - Critical/major issues
11
+ */
12
+ export declare function calculateContextScore(summary: ContextSummary): ToolScoringOutput;
13
+ //# sourceMappingURL=scoring.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scoring.d.ts","sourceRoot":"","sources":["../src/scoring.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,cAAc,GACtB,iBAAiB,CAmJnB"}