@aiready/context-analyzer 0.21.22 → 0.21.23

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 (61) hide show
  1. package/.turbo/turbo-build.log +26 -25
  2. package/.turbo/turbo-lint.log +5 -5
  3. package/.turbo/turbo-test.log +104 -41
  4. package/coverage/clover.xml +2615 -1242
  5. package/coverage/coverage-final.json +30 -13
  6. package/coverage/dist/chunk-64U3PNO3.mjs.html +367 -0
  7. package/coverage/dist/chunk-J3MUOWHC.mjs.html +5326 -0
  8. package/coverage/dist/index.html +146 -0
  9. package/coverage/{classifier.ts.html → dist/index.mjs.html} +537 -912
  10. package/coverage/index.html +84 -189
  11. package/coverage/src/analyzer.ts.html +88 -0
  12. package/coverage/src/analyzers/index.html +116 -0
  13. package/coverage/src/analyzers/python-context.ts.html +910 -0
  14. package/coverage/{ast-utils.ts.html → src/ast-utils.ts.html} +84 -54
  15. package/coverage/src/classifier.ts.html +892 -0
  16. package/coverage/src/classify/classification-patterns.ts.html +307 -0
  17. package/coverage/src/classify/file-classifiers.ts.html +973 -0
  18. package/coverage/src/classify/index.html +131 -0
  19. package/coverage/{cluster-detector.ts.html → src/cluster-detector.ts.html} +154 -91
  20. package/coverage/{defaults.ts.html → src/defaults.ts.html} +74 -65
  21. package/coverage/{graph-builder.ts.html → src/graph-builder.ts.html} +268 -229
  22. package/coverage/src/index.html +341 -0
  23. package/coverage/{index.ts.html → src/index.ts.html} +70 -13
  24. package/coverage/{scoring.ts.html → src/issue-analyzer.ts.html} +201 -261
  25. package/coverage/src/mapper.ts.html +439 -0
  26. package/coverage/{metrics.ts.html → src/metrics.ts.html} +201 -132
  27. package/coverage/src/orchestrator.ts.html +493 -0
  28. package/coverage/{provider.ts.html → src/provider.ts.html} +21 -21
  29. package/coverage/{remediation.ts.html → src/remediation.ts.html} +112 -52
  30. package/coverage/src/report/console-report.ts.html +415 -0
  31. package/coverage/src/report/html-report.ts.html +361 -0
  32. package/coverage/src/report/index.html +146 -0
  33. package/coverage/src/report/interactive-setup.ts.html +373 -0
  34. package/coverage/src/scoring.ts.html +895 -0
  35. package/coverage/src/semantic/co-usage.ts.html +340 -0
  36. package/coverage/src/semantic/consolidation.ts.html +223 -0
  37. package/coverage/src/semantic/domain-inference.ts.html +859 -0
  38. package/coverage/src/semantic/index.html +161 -0
  39. package/coverage/src/semantic/type-graph.ts.html +163 -0
  40. package/coverage/{summary.ts.html → src/summary.ts.html} +155 -275
  41. package/coverage/{types.ts.html → src/types.ts.html} +133 -31
  42. package/coverage/src/utils/dependency-graph-utils.ts.html +463 -0
  43. package/coverage/src/utils/index.html +131 -0
  44. package/coverage/src/utils/string-utils.ts.html +148 -0
  45. package/dist/chunk-J3MUOWHC.mjs +1747 -0
  46. package/dist/cli.js +59 -171
  47. package/dist/cli.mjs +1 -1
  48. package/dist/index.js +55 -167
  49. package/dist/index.mjs +1 -1
  50. package/package.json +2 -2
  51. package/src/__tests__/consolidation.test.ts +247 -0
  52. package/src/__tests__/defaults.test.ts +121 -0
  53. package/src/__tests__/domain-inference.test.ts +420 -0
  54. package/src/__tests__/issue-analyzer.test.ts +155 -0
  55. package/src/__tests__/orchestrator.test.ts +143 -0
  56. package/src/__tests__/python-context.test.ts +98 -0
  57. package/src/__tests__/report/console-report.test.ts +292 -0
  58. package/src/__tests__/report/html-report.test.ts +232 -0
  59. package/src/report/html-report.ts +58 -174
  60. package/coverage/analyzer.ts.html +0 -1369
  61. package/coverage/semantic-analysis.ts.html +0 -1201
@@ -3,15 +3,15 @@
3
3
  <html lang="en">
4
4
 
5
5
  <head>
6
- <title>Code coverage report for types.ts</title>
6
+ <title>Code coverage report for src/types.ts</title>
7
7
  <meta charset="utf-8" />
8
- <link rel="stylesheet" href="prettify.css" />
9
- <link rel="stylesheet" href="base.css" />
10
- <link rel="shortcut icon" type="image/x-icon" href="favicon.png" />
8
+ <link rel="stylesheet" href="../prettify.css" />
9
+ <link rel="stylesheet" href="../base.css" />
10
+ <link rel="shortcut icon" type="image/x-icon" href="../favicon.png" />
11
11
  <meta name="viewport" content="width=device-width, initial-scale=1" />
12
12
  <style type='text/css'>
13
13
  .coverage-summary .sorter {
14
- background-image: url(sort-arrow-sprite.png);
14
+ background-image: url(../sort-arrow-sprite.png);
15
15
  }
16
16
  </style>
17
17
  </head>
@@ -19,7 +19,7 @@
19
19
  <body>
20
20
  <div class='wrapper'>
21
21
  <div class='pad1'>
22
- <h1><a href="index.html">All files</a> types.ts</h1>
22
+ <h1><a href="../index.html">All files</a> / <a href="index.html">src</a> types.ts</h1>
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
@@ -225,7 +225,75 @@
225
225
  <a name='L160'></a><a href='#L160'>160</a>
226
226
  <a name='L161'></a><a href='#L161'>161</a>
227
227
  <a name='L162'></a><a href='#L162'>162</a>
228
- <a name='L163'></a><a href='#L163'>163</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
228
+ <a name='L163'></a><a href='#L163'>163</a>
229
+ <a name='L164'></a><a href='#L164'>164</a>
230
+ <a name='L165'></a><a href='#L165'>165</a>
231
+ <a name='L166'></a><a href='#L166'>166</a>
232
+ <a name='L167'></a><a href='#L167'>167</a>
233
+ <a name='L168'></a><a href='#L168'>168</a>
234
+ <a name='L169'></a><a href='#L169'>169</a>
235
+ <a name='L170'></a><a href='#L170'>170</a>
236
+ <a name='L171'></a><a href='#L171'>171</a>
237
+ <a name='L172'></a><a href='#L172'>172</a>
238
+ <a name='L173'></a><a href='#L173'>173</a>
239
+ <a name='L174'></a><a href='#L174'>174</a>
240
+ <a name='L175'></a><a href='#L175'>175</a>
241
+ <a name='L176'></a><a href='#L176'>176</a>
242
+ <a name='L177'></a><a href='#L177'>177</a>
243
+ <a name='L178'></a><a href='#L178'>178</a>
244
+ <a name='L179'></a><a href='#L179'>179</a>
245
+ <a name='L180'></a><a href='#L180'>180</a>
246
+ <a name='L181'></a><a href='#L181'>181</a>
247
+ <a name='L182'></a><a href='#L182'>182</a>
248
+ <a name='L183'></a><a href='#L183'>183</a>
249
+ <a name='L184'></a><a href='#L184'>184</a>
250
+ <a name='L185'></a><a href='#L185'>185</a>
251
+ <a name='L186'></a><a href='#L186'>186</a>
252
+ <a name='L187'></a><a href='#L187'>187</a>
253
+ <a name='L188'></a><a href='#L188'>188</a>
254
+ <a name='L189'></a><a href='#L189'>189</a>
255
+ <a name='L190'></a><a href='#L190'>190</a>
256
+ <a name='L191'></a><a href='#L191'>191</a>
257
+ <a name='L192'></a><a href='#L192'>192</a>
258
+ <a name='L193'></a><a href='#L193'>193</a>
259
+ <a name='L194'></a><a href='#L194'>194</a>
260
+ <a name='L195'></a><a href='#L195'>195</a>
261
+ <a name='L196'></a><a href='#L196'>196</a>
262
+ <a name='L197'></a><a href='#L197'>197</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
263
+ <span class="cline-any cline-neutral">&nbsp;</span>
264
+ <span class="cline-any cline-neutral">&nbsp;</span>
265
+ <span class="cline-any cline-neutral">&nbsp;</span>
266
+ <span class="cline-any cline-neutral">&nbsp;</span>
267
+ <span class="cline-any cline-neutral">&nbsp;</span>
268
+ <span class="cline-any cline-neutral">&nbsp;</span>
269
+ <span class="cline-any cline-neutral">&nbsp;</span>
270
+ <span class="cline-any cline-neutral">&nbsp;</span>
271
+ <span class="cline-any cline-neutral">&nbsp;</span>
272
+ <span class="cline-any cline-neutral">&nbsp;</span>
273
+ <span class="cline-any cline-neutral">&nbsp;</span>
274
+ <span class="cline-any cline-neutral">&nbsp;</span>
275
+ <span class="cline-any cline-neutral">&nbsp;</span>
276
+ <span class="cline-any cline-neutral">&nbsp;</span>
277
+ <span class="cline-any cline-neutral">&nbsp;</span>
278
+ <span class="cline-any cline-neutral">&nbsp;</span>
279
+ <span class="cline-any cline-neutral">&nbsp;</span>
280
+ <span class="cline-any cline-neutral">&nbsp;</span>
281
+ <span class="cline-any cline-neutral">&nbsp;</span>
282
+ <span class="cline-any cline-neutral">&nbsp;</span>
283
+ <span class="cline-any cline-neutral">&nbsp;</span>
284
+ <span class="cline-any cline-neutral">&nbsp;</span>
285
+ <span class="cline-any cline-neutral">&nbsp;</span>
286
+ <span class="cline-any cline-neutral">&nbsp;</span>
287
+ <span class="cline-any cline-neutral">&nbsp;</span>
288
+ <span class="cline-any cline-neutral">&nbsp;</span>
289
+ <span class="cline-any cline-neutral">&nbsp;</span>
290
+ <span class="cline-any cline-neutral">&nbsp;</span>
291
+ <span class="cline-any cline-neutral">&nbsp;</span>
292
+ <span class="cline-any cline-neutral">&nbsp;</span>
293
+ <span class="cline-any cline-neutral">&nbsp;</span>
294
+ <span class="cline-any cline-neutral">&nbsp;</span>
295
+ <span class="cline-any cline-neutral">&nbsp;</span>
296
+ <span class="cline-any cline-neutral">&nbsp;</span>
229
297
  <span class="cline-any cline-neutral">&nbsp;</span>
230
298
  <span class="cline-any cline-neutral">&nbsp;</span>
231
299
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -389,46 +457,78 @@
389
457
  <span class="cline-any cline-neutral">&nbsp;</span>
390
458
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import type { ScanOptions, Severity } from '@aiready/core';
391
459
  &nbsp;
460
+ /**
461
+ * Options for the Context Analyzer tool.
462
+ * Controls thresholds for import depth, context budget, and cohesion.
463
+ */
392
464
  export interface ContextAnalyzerOptions extends ScanOptions {
393
- maxDepth?: number; // Maximum acceptable import depth, default 5
394
- maxContextBudget?: number; // Maximum acceptable token budget, default 10000
395
- minCohesion?: number; // Minimum acceptable cohesion score (0-1), default 0.6
396
- maxFragmentation?: number; // Maximum acceptable fragmentation (0-1), default 0.5
397
- focus?: 'fragmentation' | 'cohesion' | 'depth' | 'all'; // Analysis focus, default 'all'
398
- includeNodeModules?: boolean; // Include node_modules in analysis, default false
465
+ /** Maximum acceptable import depth (default: 5) */
466
+ maxDepth?: number;
467
+ /** Maximum acceptable token budget for a single context (default: 25000) */
468
+ maxContextBudget?: number;
469
+ /** Minimum acceptable cohesion score between 0 and 1 (default: 0.6) */
470
+ minCohesion?: number;
471
+ /** Maximum acceptable fragmentation score between 0 and 1 (default: 0.5) */
472
+ maxFragmentation?: number;
473
+ /** Analysis focus area: fragmentation, cohesion, depth, or all (default: 'all') */
474
+ focus?: 'fragmentation' | 'cohesion' | 'depth' | 'all';
475
+ /** Whether to include node_modules in the analysis (default: false) */
476
+ includeNodeModules?: boolean;
399
477
  }
400
478
  &nbsp;
479
+ /**
480
+ * The result of a context analysis for a single file or module.
481
+ * Includes metrics for tokens, dependencies, cohesion, and AI impact.
482
+ */
401
483
  export interface ContextAnalysisResult {
484
+ /** The file path being analyzed */
402
485
  file: string;
403
486
  &nbsp;
404
487
  // Basic metrics
405
- tokenCost: number; // Total tokens in this file
488
+ /** Total number of tokens in this file */
489
+ tokenCost: number;
490
+ /** Total lines of code in the file */
406
491
  linesOfCode: number;
407
492
  &nbsp;
408
493
  // Dependency analysis
409
- importDepth: number; // Max depth of import tree
410
- dependencyCount: number; // Total transitive dependencies
411
- dependencyList: string[]; // All files in dependency tree
412
- circularDeps: string[][]; // Circular dependency chains if any
494
+ /** Maximum depth of the import tree for this file */
495
+ importDepth: number;
496
+ /** Total number of transitive dependencies */
497
+ dependencyCount: number;
498
+ /** List of all files in the dependency tree */
499
+ dependencyList: string[];
500
+ /** Detected circular dependency chains */
501
+ circularDeps: string[][];
413
502
  &nbsp;
414
503
  // Cohesion analysis
415
- cohesionScore: number; // 0-1, how related are exports (1 = perfect cohesion)
416
- domains: string[]; // Detected domain categories (e.g., ['user', 'auth'])
504
+ /** Cohesion score from 0 to 1 (1 is perfect cohesion) */
505
+ cohesionScore: number;
506
+ /** Detected domain categories for the module */
507
+ domains: string[];
508
+ /** Number of exported symbols */
417
509
  exportCount: number;
418
510
  &nbsp;
419
511
  // AI context impact
420
- contextBudget: number; // Total tokens to understand this file (includes all deps)
421
- fragmentationScore: number; // 0-1, how scattered is this domain (0 = well-grouped)
422
- relatedFiles: string[]; // Files that should be loaded together
512
+ /** Total tokens required to understand this file and all its dependencies */
513
+ contextBudget: number;
514
+ /** Fragmentation score from 0 to 1 (0 is well-grouped) */
515
+ fragmentationScore: number;
516
+ /** List of files that should be loaded together for full context */
517
+ relatedFiles: string[];
423
518
  &nbsp;
424
519
  // File classification (NEW)
425
- fileClassification: FileClassification; // Type of file for analysis context
520
+ /** The semantic classification of the file (e.g. 'barrel-export', 'service-file') */
521
+ fileClassification: FileClassification;
426
522
  &nbsp;
427
523
  // Recommendations
524
+ /** Overall severity of identified issues */
428
525
  severity: Severity | 'critical' | 'major' | 'minor' | 'info';
429
- issues: string[]; // List of specific problems
430
- recommendations: string[]; // Actionable suggestions
431
- potentialSavings: number; // Estimated token savings if fixed
526
+ /** List of specific structural problems found */
527
+ issues: string[];
528
+ /** Actionable suggestions for improving context readiness */
529
+ recommendations: string[];
530
+ /** Estimated tokens that could be saved by following recommendations */
531
+ potentialSavings: number;
432
532
  }
433
533
  &nbsp;
434
534
  /**
@@ -437,6 +537,7 @@ export interface ContextAnalysisResult {
437
537
  */
438
538
  export type FileClassification =
439
539
  | 'barrel-export' // Re-exports from other modules (index.ts files)
540
+ | 'boilerplate-barrel' // Redundant barrel file with no added value (architectural theater)
440
541
  | 'type-definition' // Primarily type/interface definitions
441
542
  | 'cohesive-module' // Single domain, high cohesion (acceptable large files)
442
543
  | 'utility-module' // Utility/helper files with cohesive purpose despite multi-domain
@@ -445,6 +546,7 @@ export type FileClassification =
445
546
  | 'email-template' // Email templates/layouts with structural cohesion
446
547
  | 'parser-file' // Parser/transformer files with single transformation purpose
447
548
  | 'nextjs-page' // Next.js App Router page with SEO/structured data exports
549
+ | 'spoke-module' // Intentional monorepo spoke package file
448
550
  | 'mixed-concerns' // Multiple domains, potential refactoring candidate
449
551
  | 'unknown'; // Unable to classify
450
552
  &nbsp;
@@ -556,16 +658,16 @@ export interface TypeDependency {
556
658
  <div class='footer quiet pad2 space-top1 center small'>
557
659
  Code coverage generated by
558
660
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
559
- at 2026-03-09T02:34:18.551Z
661
+ at 2026-03-21T12:52:37.698Z
560
662
  </div>
561
- <script src="prettify.js"></script>
663
+ <script src="../prettify.js"></script>
562
664
  <script>
563
665
  window.onload = function () {
564
666
  prettyPrint();
565
667
  };
566
668
  </script>
567
- <script src="sorter.js"></script>
568
- <script src="block-navigation.js"></script>
669
+ <script src="../sorter.js"></script>
670
+ <script src="../block-navigation.js"></script>
569
671
  </body>
570
672
  </html>
571
673