@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 ast-utils.ts</title>
6
+ <title>Code coverage report for src/ast-utils.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,34 +19,34 @@
19
19
  <body>
20
20
  <div class='wrapper'>
21
21
  <div class='pad1'>
22
- <h1><a href="index.html">All files</a> ast-utils.ts</h1>
22
+ <h1><a href="../index.html">All files</a> / <a href="index.html">src</a> ast-utils.ts</h1>
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">26.92% </span>
26
+ <span class="strong">34.61% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>7/26</span>
28
+ <span class='fraction'>18/52</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">65.21% </span>
33
+ <span class="strong">69.56% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>15/23</span>
35
+ <span class='fraction'>32/46</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
40
  <span class="strong">42.85% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>3/7</span>
42
+ <span class='fraction'>6/14</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">30% </span>
47
+ <span class="strong">38.46% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>6/20</span>
49
+ <span class='fraction'>15/39</span>
50
50
  </div>
51
51
 
52
52
 
@@ -162,7 +162,17 @@
162
162
  <a name='L97'></a><a href='#L97'>97</a>
163
163
  <a name='L98'></a><a href='#L98'>98</a>
164
164
  <a name='L99'></a><a href='#L99'>99</a>
165
- <a name='L100'></a><a href='#L100'>100</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
165
+ <a name='L100'></a><a href='#L100'>100</a>
166
+ <a name='L101'></a><a href='#L101'>101</a>
167
+ <a name='L102'></a><a href='#L102'>102</a>
168
+ <a name='L103'></a><a href='#L103'>103</a>
169
+ <a name='L104'></a><a href='#L104'>104</a>
170
+ <a name='L105'></a><a href='#L105'>105</a>
171
+ <a name='L106'></a><a href='#L106'>106</a>
172
+ <a name='L107'></a><a href='#L107'>107</a>
173
+ <a name='L108'></a><a href='#L108'>108</a>
174
+ <a name='L109'></a><a href='#L109'>109</a>
175
+ <a name='L110'></a><a href='#L110'>110</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
166
176
  <span class="cline-any cline-neutral">&nbsp;</span>
167
177
  <span class="cline-any cline-neutral">&nbsp;</span>
168
178
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -175,18 +185,23 @@
175
185
  <span class="cline-any cline-neutral">&nbsp;</span>
176
186
  <span class="cline-any cline-neutral">&nbsp;</span>
177
187
  <span class="cline-any cline-neutral">&nbsp;</span>
178
- <span class="cline-any cline-yes">34x</span>
179
- <span class="cline-any cline-yes">34x</span>
188
+ <span class="cline-any cline-yes">33x</span>
189
+ <span class="cline-any cline-yes">33x</span>
180
190
  <span class="cline-any cline-neutral">&nbsp;</span>
181
- <span class="cline-any cline-yes">34x</span>
191
+ <span class="cline-any cline-yes">33x</span>
182
192
  <span class="cline-any cline-neutral">&nbsp;</span>
183
193
  <span class="cline-any cline-neutral">&nbsp;</span>
184
194
  <span class="cline-any cline-no">&nbsp;</span>
195
+ <span class="cline-any cline-yes">39x</span>
196
+ <span class="cline-any cline-yes">72x</span>
197
+ <span class="cline-any cline-yes">90x</span>
198
+ <span class="cline-any cline-yes">72x</span>
185
199
  <span class="cline-any cline-neutral">&nbsp;</span>
186
200
  <span class="cline-any cline-neutral">&nbsp;</span>
187
- <span class="cline-any cline-yes">52x</span>
201
+ <span class="cline-any cline-yes">33x</span>
188
202
  <span class="cline-any cline-neutral">&nbsp;</span>
189
203
  <span class="cline-any cline-neutral">&nbsp;</span>
204
+ <span class="cline-any cline-yes">57x</span>
190
205
  <span class="cline-any cline-neutral">&nbsp;</span>
191
206
  <span class="cline-any cline-neutral">&nbsp;</span>
192
207
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -194,24 +209,26 @@
194
209
  <span class="cline-any cline-neutral">&nbsp;</span>
195
210
  <span class="cline-any cline-neutral">&nbsp;</span>
196
211
  <span class="cline-any cline-neutral">&nbsp;</span>
212
+ <span class="cline-any cline-yes">39x</span>
197
213
  <span class="cline-any cline-neutral">&nbsp;</span>
198
214
  <span class="cline-any cline-neutral">&nbsp;</span>
199
215
  <span class="cline-any cline-neutral">&nbsp;</span>
200
216
  <span class="cline-any cline-neutral">&nbsp;</span>
201
217
  <span class="cline-any cline-neutral">&nbsp;</span>
202
- <span class="cline-any cline-no">&nbsp;</span>
203
- <span class="cline-any cline-neutral">&nbsp;</span>
204
218
  <span class="cline-any cline-neutral">&nbsp;</span>
219
+ <span class="cline-any cline-no">&nbsp;</span>
220
+ <span class="cline-any cline-yes">44x</span>
221
+ <span class="cline-any cline-yes">5x</span>
205
222
  <span class="cline-any cline-neutral">&nbsp;</span>
206
223
  <span class="cline-any cline-neutral">&nbsp;</span>
207
224
  <span class="cline-any cline-neutral">&nbsp;</span>
208
225
  <span class="cline-any cline-neutral">&nbsp;</span>
209
226
  <span class="cline-any cline-neutral">&nbsp;</span>
210
- <span class="cline-any cline-yes">5x</span>
211
- <span class="cline-any cline-yes">5x</span>
212
227
  <span class="cline-any cline-neutral">&nbsp;</span>
213
228
  <span class="cline-any cline-neutral">&nbsp;</span>
214
229
  <span class="cline-any cline-neutral">&nbsp;</span>
230
+ <span class="cline-any cline-yes">10x</span>
231
+ <span class="cline-any cline-yes">5x</span>
215
232
  <span class="cline-any cline-neutral">&nbsp;</span>
216
233
  <span class="cline-any cline-neutral">&nbsp;</span>
217
234
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -222,10 +239,13 @@
222
239
  <span class="cline-any cline-neutral">&nbsp;</span>
223
240
  <span class="cline-any cline-neutral">&nbsp;</span>
224
241
  <span class="cline-any cline-neutral">&nbsp;</span>
242
+ <span class="cline-any cline-yes">5x</span>
225
243
  <span class="cline-any cline-neutral">&nbsp;</span>
244
+ <span class="cline-any cline-no">&nbsp;</span>
226
245
  <span class="cline-any cline-neutral">&nbsp;</span>
227
246
  <span class="cline-any cline-neutral">&nbsp;</span>
228
247
  <span class="cline-any cline-neutral">&nbsp;</span>
248
+ <span class="cline-any cline-no">&nbsp;</span>
229
249
  <span class="cline-any cline-neutral">&nbsp;</span>
230
250
  <span class="cline-any cline-neutral">&nbsp;</span>
231
251
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -234,22 +254,22 @@
234
254
  <span class="cline-any cline-no">&nbsp;</span>
235
255
  <span class="cline-any cline-neutral">&nbsp;</span>
236
256
  <span class="cline-any cline-neutral">&nbsp;</span>
237
- <span class="cline-any cline-neutral">&nbsp;</span>
238
257
  <span class="cline-any cline-no">&nbsp;</span>
239
- <span class="cline-any cline-neutral">&nbsp;</span>
240
- <span class="cline-any cline-neutral">&nbsp;</span>
241
- <span class="cline-any cline-neutral">&nbsp;</span>
242
- <span class="cline-any cline-neutral">&nbsp;</span>
243
- <span class="cline-any cline-neutral">&nbsp;</span>
258
+ <span class="cline-any cline-no">&nbsp;</span>
259
+ <span class="cline-any cline-no">&nbsp;</span>
260
+ <span class="cline-any cline-no">&nbsp;</span>
244
261
  <span class="cline-any cline-neutral">&nbsp;</span>
245
262
  <span class="cline-any cline-neutral">&nbsp;</span>
246
263
  <span class="cline-any cline-neutral">&nbsp;</span>
247
264
  <span class="cline-any cline-no">&nbsp;</span>
265
+ <span class="cline-any cline-no">&nbsp;</span>
248
266
  <span class="cline-any cline-neutral">&nbsp;</span>
249
267
  <span class="cline-any cline-no">&nbsp;</span>
250
268
  <span class="cline-any cline-no">&nbsp;</span>
251
- <span class="cline-any cline-neutral">&nbsp;</span>
252
- <span class="cline-any cline-neutral">&nbsp;</span>
269
+ <span class="cline-any cline-no">&nbsp;</span>
270
+ <span class="cline-any cline-no">&nbsp;</span>
271
+ <span class="cline-any cline-no">&nbsp;</span>
272
+ <span class="cline-any cline-no">&nbsp;</span>
253
273
  <span class="cline-any cline-neutral">&nbsp;</span>
254
274
  <span class="cline-any cline-no">&nbsp;</span>
255
275
  <span class="cline-any cline-no">&nbsp;</span>
@@ -262,25 +282,32 @@
262
282
  <span class="cline-any cline-no">&nbsp;</span>
263
283
  <span class="cline-any cline-neutral">&nbsp;</span>
264
284
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { parseFileExports } from '@aiready/core';
265
- import type { ExportInfo, DependencyNode, FileClassification } from './types';
266
- import { inferDomain, extractExports } from './semantic-analysis';
285
+ import type { ExportInfo } from './types';
286
+ import { inferDomain, extractExports } from './semantic/domain-inference';
267
287
  &nbsp;
268
288
  /**
269
- * Extract exports using high-fidelity AST parsing across 5+ languages
289
+ * Extract exports using high-fidelity AST parsing across 5+ languages.
290
+ *
291
+ * @param content - File contents to parse.
292
+ * @param filePath - Path to the file for language detection and context.
293
+ * @param domainOptions - Optional configuration for domain detection.
294
+ * @param fileImports - Optional array of strings for resolving imports.
295
+ * @returns Array of high-fidelity export metadata.
296
+ * @lastUpdated 2026-03-18
270
297
  */
271
298
  export function extractExportsWithAST(
272
299
  content: string,
273
- filePath: string,
300
+ fi<span class="missing-if-branch" title="if path not taken" >I</span>lePath: string,<span class="branch-1 cbranch-no" title="branch not covered" ></span>
274
301
  domainOptions?: { domainKeywords?: string[] },
275
302
  fileImports?: string[]
276
- ): ExportInfo[] {
303
+ ): Exp<span class="cstat-no" title="statement not covered" >ortInfo[] {</span>
277
304
  try {
278
305
  const { exports: astExports } = parseFileExports(content, filePath);
279
306
  &nbsp;
280
307
  <span class="missing-if-branch" title="if path not taken" >I</span>if (astExports.length === 0 &amp;&amp; <span class="branch-1 cbranch-no" title="branch not covered" >!isTestFile(filePath)) {</span>
281
308
  // If AST fails to find anything, we still use regex as a last resort
282
309
  // ONLY for unknown file types or very complex macros
283
- <span class="cstat-no" title="statement not covered" > return extractExports(content, filePath, domainOptions, fileImports);</span>
310
+ return extractExports(content, filePath, domainOptions, fileImports);
284
311
  }
285
312
  &nbsp;
286
313
  return astExports.map((exp) =&gt; ({
@@ -296,14 +323,17 @@ export function extractExportsWithAST(
296
323
  dependencies: exp.dependencies,
297
324
  typeReferences: (exp as any).typeReferences,
298
325
  }));
299
- } catch (error) {
326
+ } catch {
300
327
  // Ultimate fallback
301
328
  <span class="cstat-no" title="statement not covered" > return extractExports(content, filePath, domainOptions, fileImports);</span>
302
329
  }
303
330
  }
304
331
  &nbsp;
305
332
  /**
306
- * Check if a file is a test, mock, or fixture file
333
+ * Check if a file is a test, mock, or fixture file.
334
+ *
335
+ * @param filePath - The path to the file to check.
336
+ * @returns True if the file matches test/mock patterns.
307
337
  */
308
338
  export function isTestFile(filePath: string): boolean {
309
339
  const lower = filePath.toLowerCase();
@@ -317,14 +347,14 @@ export function isTestFile(filePath: string): boolean {
317
347
  lower.includes('-test') ||
318
348
  lower.includes('/__mocks__/') ||
319
349
  lower.includes('/mocks/') ||
320
- lower.includes('/fixtures/') ||
350
+ lower.includ<span class="fstat-no" title="function not covered" >es('/fixtures/') ||</span>
321
351
  lower.includes('.mock.') ||
322
352
  lower.includes('.fixture.') ||
323
- lower.includes('/test-utils/')
353
+ lower.includes('/tes<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >t-</span>utils/')</span>
324
354
  );
325
355
  }
326
356
  &nbsp;
327
- /**
357
+ /**<span class="cstat-no" title="statement not covered" ></span>
328
358
  * Heuristic to check if all exports share a common entity noun
329
359
  */
330
360
  export function <span class="fstat-no" title="function not covered" >allExportsShareEntityNoun(e</span>xports: ExportInfo[]): boolean {
@@ -333,22 +363,22 @@ export function <span class="fstat-no" title="function not covered" >allExportsS
333
363
  const getEntityNoun = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >(n</span>ame: string): string | null =&gt; {</span>
334
364
  // Basic heuristic: last part of camelCase name often is the entity
335
365
  // e.g. createOrder -&gt; order, getUserProfile -&gt; profile
336
- // But we also look for common domain nouns in the middle
366
+ // But we also<span class="cstat-no" title="statement not covered" > look for common do</span>main nouns in the middle
337
367
  const commonNouns = <span class="cstat-no" title="statement not covered" >[</span>
338
- 'user',
339
- 'order',
368
+ <span class="cstat-no" title="statement not covered" > 'user',</span>
369
+ <span class="cstat-no" title="statement not covered" > 'order',<span class="cstat-no" title="statement not covered" ></span></span>
340
370
  'product',
341
371
  'session',
342
372
  'account',
343
- 'receipt',
344
- 'token',
373
+ 'receipt',<span class="cstat-no" title="statement not covered" ></span>
374
+ <span class="cstat-no" title="statement not covered" > 'token',</span>
345
375
  ];
346
376
  const lower = <span class="cstat-no" title="statement not covered" >name.toLowerCase();</span>
347
- &nbsp;
348
- <span class="cstat-no" title="statement not covered" > for (const noun of commonNouns) {</span>
377
+ <span class="cstat-no" title="statement not covered" ><span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ></span></span></span>
378
+ <span class="cstat-no" title="statement not covered" ><span class="cstat-no" title="statement not covered" > for (const noun of commonNouns) {<span class="cstat-no" title="statement not covered" ></span></span></span>
349
379
  <span class="cstat-no" title="statement not covered" > if (lower.includes(noun)) <span class="cstat-no" title="statement not covered" >return noun;</span></span>
350
- }
351
- &nbsp;
380
+ }<span class="cstat-no" title="statement not covered" ></span>
381
+ <span class="cstat-no" title="statement not covered" ><span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ></span></span></span>
352
382
  // Fallback: split by capital letters and take the last part
353
383
  const parts = <span class="cstat-no" title="statement not covered" >name.split(/(?=[A-Z])/);</span>
354
384
  <span class="cstat-no" title="statement not covered" > return parts[parts.length - 1].toLowerCase();</span>
@@ -367,16 +397,16 @@ export function <span class="fstat-no" title="function not covered" >allExportsS
367
397
  <div class='footer quiet pad2 space-top1 center small'>
368
398
  Code coverage generated by
369
399
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
370
- at 2026-03-09T02:34:18.551Z
400
+ at 2026-03-21T12:52:37.698Z
371
401
  </div>
372
- <script src="prettify.js"></script>
402
+ <script src="../prettify.js"></script>
373
403
  <script>
374
404
  window.onload = function () {
375
405
  prettyPrint();
376
406
  };
377
407
  </script>
378
- <script src="sorter.js"></script>
379
- <script src="block-navigation.js"></script>
408
+ <script src="../sorter.js"></script>
409
+ <script src="../block-navigation.js"></script>
380
410
  </body>
381
411
  </html>
382
412