@aiready/context-analyzer 0.21.26 → 0.21.27

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 (78) hide show
  1. package/.turbo/turbo-build.log +32 -25
  2. package/.turbo/turbo-test.log +51 -87
  3. package/coverage/clover.xml +392 -1878
  4. package/coverage/coverage-final.json +15 -19
  5. package/coverage/index.html +48 -63
  6. package/coverage/src/analyzers/index.html +21 -21
  7. package/coverage/src/analyzers/python-context.ts.html +96 -96
  8. package/coverage/src/ast-utils.ts.html +34 -109
  9. package/coverage/src/classifier.ts.html +104 -104
  10. package/coverage/src/classify/classification-patterns.ts.html +1 -1
  11. package/coverage/src/classify/file-classifiers.ts.html +1 -1
  12. package/coverage/src/classify/index.html +1 -1
  13. package/coverage/src/cluster-detector.ts.html +72 -72
  14. package/coverage/src/defaults.ts.html +1 -1
  15. package/coverage/src/graph-builder.ts.html +131 -131
  16. package/coverage/src/index.html +101 -116
  17. package/coverage/src/index.ts.html +2 -2
  18. package/coverage/src/issue-analyzer.ts.html +32 -83
  19. package/coverage/src/mapper.ts.html +20 -2
  20. package/coverage/src/metrics.ts.html +127 -130
  21. package/coverage/src/orchestrator.ts.html +13 -13
  22. package/coverage/src/provider.ts.html +19 -19
  23. package/coverage/src/remediation.ts.html +59 -59
  24. package/coverage/src/report/console-report.ts.html +2 -2
  25. package/coverage/src/report/html-report.ts.html +60 -84
  26. package/coverage/src/report/index.html +7 -7
  27. package/coverage/src/report/interactive-setup.ts.html +1 -1
  28. package/coverage/src/scoring.ts.html +62 -62
  29. package/coverage/src/semantic/co-usage.ts.html +1 -1
  30. package/coverage/src/semantic/consolidation.ts.html +1 -1
  31. package/coverage/src/semantic/domain-inference.ts.html +1 -1
  32. package/coverage/src/semantic/index.html +1 -1
  33. package/coverage/src/semantic/type-graph.ts.html +1 -1
  34. package/coverage/src/summary.ts.html +67 -67
  35. package/coverage/src/types.ts.html +1 -1
  36. package/coverage/src/utils/dependency-graph-utils.ts.html +41 -41
  37. package/coverage/src/utils/index.html +21 -21
  38. package/coverage/src/utils/string-utils.ts.html +1 -1
  39. package/dist/chunk-22ZO4EKZ.mjs +1297 -0
  40. package/dist/chunk-4U4LDWGF.mjs +360 -0
  41. package/dist/chunk-BA7QGUHN.mjs +1722 -0
  42. package/dist/chunk-BCEZGRXI.mjs +1297 -0
  43. package/dist/chunk-BQCISA2F.mjs +91 -0
  44. package/dist/chunk-EMYD7NS6.mjs +137 -0
  45. package/dist/chunk-EWFR366Y.mjs +1740 -0
  46. package/dist/chunk-FO6YT6RG.mjs +1751 -0
  47. package/dist/chunk-J3SZQZNU.mjs +221 -0
  48. package/dist/chunk-OZE3FVZT.mjs +1089 -0
  49. package/dist/chunk-WHB7QI7N.mjs +91 -0
  50. package/dist/cli-action-CXIHOVAC.mjs +95 -0
  51. package/dist/cli-action-SA7SCYNV.mjs +95 -0
  52. package/dist/cli-action-YAJOJCXJ.mjs +95 -0
  53. package/dist/cli.js +688 -566
  54. package/dist/cli.mjs +4 -88
  55. package/dist/index.js +889 -773
  56. package/dist/index.mjs +21 -14
  57. package/dist/orchestrator-3L3NAZYP.mjs +10 -0
  58. package/dist/orchestrator-MONOZHVW.mjs +10 -0
  59. package/dist/orchestrator-ZR7JSKWI.mjs +10 -0
  60. package/dist/summary-7PZVW72O.mjs +7 -0
  61. package/dist/summary-LKUCJAIS.mjs +7 -0
  62. package/package.json +2 -2
  63. package/src/__tests__/analyzer.test.ts +1 -1
  64. package/src/__tests__/enhanced-cohesion.test.ts +4 -1
  65. package/src/__tests__/orchestrator.test.ts +19 -4
  66. package/src/__tests__/python-context.test.ts +6 -0
  67. package/src/__tests__/report/html-report.test.ts +8 -2
  68. package/src/ast-utils.ts +1 -26
  69. package/src/cli-definition.ts +4 -2
  70. package/src/issue-analyzer.ts +4 -19
  71. package/src/metrics.ts +1 -2
  72. package/src/provider.ts +4 -4
  73. package/src/report/html-report.ts +43 -59
  74. package/coverage/dist/chunk-64U3PNO3.mjs.html +0 -367
  75. package/coverage/dist/chunk-J3MUOWHC.mjs.html +0 -5326
  76. package/coverage/dist/index.html +0 -146
  77. package/coverage/dist/index.mjs.html +0 -1396
  78. package/coverage/src/analyzer.ts.html +0 -88
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">34.61% </span>
26
+ <span class="strong">20.83% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>18/52</span>
28
+ <span class='fraction'>5/24</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">69.56% </span>
33
+ <span class="strong">20% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>32/46</span>
35
+ <span class='fraction'>2/10</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">42.85% </span>
40
+ <span class="strong">33.33% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>6/14</span>
42
+ <span class='fraction'>2/6</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">38.46% </span>
47
+ <span class="strong">22.22% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>15/39</span>
49
+ <span class='fraction'>4/18</span>
50
50
  </div>
51
51
 
52
52
 
@@ -147,32 +147,7 @@
147
147
  <a name='L82'></a><a href='#L82'>82</a>
148
148
  <a name='L83'></a><a href='#L83'>83</a>
149
149
  <a name='L84'></a><a href='#L84'>84</a>
150
- <a name='L85'></a><a href='#L85'>85</a>
151
- <a name='L86'></a><a href='#L86'>86</a>
152
- <a name='L87'></a><a href='#L87'>87</a>
153
- <a name='L88'></a><a href='#L88'>88</a>
154
- <a name='L89'></a><a href='#L89'>89</a>
155
- <a name='L90'></a><a href='#L90'>90</a>
156
- <a name='L91'></a><a href='#L91'>91</a>
157
- <a name='L92'></a><a href='#L92'>92</a>
158
- <a name='L93'></a><a href='#L93'>93</a>
159
- <a name='L94'></a><a href='#L94'>94</a>
160
- <a name='L95'></a><a href='#L95'>95</a>
161
- <a name='L96'></a><a href='#L96'>96</a>
162
- <a name='L97'></a><a href='#L97'>97</a>
163
- <a name='L98'></a><a href='#L98'>98</a>
164
- <a name='L99'></a><a href='#L99'>99</a>
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>
150
+ <a name='L85'></a><a href='#L85'>85</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
176
151
  <span class="cline-any cline-neutral">&nbsp;</span>
177
152
  <span class="cline-any cline-neutral">&nbsp;</span>
178
153
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -185,40 +160,25 @@
185
160
  <span class="cline-any cline-neutral">&nbsp;</span>
186
161
  <span class="cline-any cline-neutral">&nbsp;</span>
187
162
  <span class="cline-any cline-neutral">&nbsp;</span>
188
- <span class="cline-any cline-yes">33x</span>
189
- <span class="cline-any cline-yes">33x</span>
190
163
  <span class="cline-any cline-neutral">&nbsp;</span>
191
- <span class="cline-any cline-yes">33x</span>
192
- <span class="cline-any cline-neutral">&nbsp;</span>
193
- <span class="cline-any cline-neutral">&nbsp;</span>
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>
199
- <span class="cline-any cline-neutral">&nbsp;</span>
200
- <span class="cline-any cline-neutral">&nbsp;</span>
201
- <span class="cline-any cline-yes">33x</span>
202
- <span class="cline-any cline-neutral">&nbsp;</span>
203
- <span class="cline-any cline-neutral">&nbsp;</span>
204
- <span class="cline-any cline-yes">57x</span>
205
164
  <span class="cline-any cline-neutral">&nbsp;</span>
206
165
  <span class="cline-any cline-neutral">&nbsp;</span>
207
166
  <span class="cline-any cline-neutral">&nbsp;</span>
208
167
  <span class="cline-any cline-neutral">&nbsp;</span>
209
168
  <span class="cline-any cline-neutral">&nbsp;</span>
210
169
  <span class="cline-any cline-neutral">&nbsp;</span>
170
+ <span class="cline-any cline-yes">39x</span>
171
+ <span class="cline-any cline-yes">39x</span>
211
172
  <span class="cline-any cline-neutral">&nbsp;</span>
212
173
  <span class="cline-any cline-yes">39x</span>
213
174
  <span class="cline-any cline-neutral">&nbsp;</span>
214
175
  <span class="cline-any cline-neutral">&nbsp;</span>
176
+ <span class="cline-any cline-no">&nbsp;</span>
215
177
  <span class="cline-any cline-neutral">&nbsp;</span>
216
178
  <span class="cline-any cline-neutral">&nbsp;</span>
179
+ <span class="cline-any cline-yes">57x</span>
217
180
  <span class="cline-any cline-neutral">&nbsp;</span>
218
181
  <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>
222
182
  <span class="cline-any cline-neutral">&nbsp;</span>
223
183
  <span class="cline-any cline-neutral">&nbsp;</span>
224
184
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -227,50 +187,40 @@
227
187
  <span class="cline-any cline-neutral">&nbsp;</span>
228
188
  <span class="cline-any cline-neutral">&nbsp;</span>
229
189
  <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>
232
190
  <span class="cline-any cline-neutral">&nbsp;</span>
233
191
  <span class="cline-any cline-neutral">&nbsp;</span>
234
192
  <span class="cline-any cline-neutral">&nbsp;</span>
235
193
  <span class="cline-any cline-neutral">&nbsp;</span>
194
+ <span class="cline-any cline-no">&nbsp;</span>
236
195
  <span class="cline-any cline-neutral">&nbsp;</span>
237
196
  <span class="cline-any cline-neutral">&nbsp;</span>
238
197
  <span class="cline-any cline-neutral">&nbsp;</span>
239
198
  <span class="cline-any cline-neutral">&nbsp;</span>
240
199
  <span class="cline-any cline-neutral">&nbsp;</span>
241
200
  <span class="cline-any cline-neutral">&nbsp;</span>
242
- <span class="cline-any cline-yes">5x</span>
243
201
  <span class="cline-any cline-neutral">&nbsp;</span>
244
202
  <span class="cline-any cline-no">&nbsp;</span>
245
203
  <span class="cline-any cline-neutral">&nbsp;</span>
246
- <span class="cline-any cline-neutral">&nbsp;</span>
247
- <span class="cline-any cline-neutral">&nbsp;</span>
248
204
  <span class="cline-any cline-no">&nbsp;</span>
249
205
  <span class="cline-any cline-neutral">&nbsp;</span>
250
206
  <span class="cline-any cline-neutral">&nbsp;</span>
251
207
  <span class="cline-any cline-neutral">&nbsp;</span>
252
208
  <span class="cline-any cline-no">&nbsp;</span>
253
209
  <span class="cline-any cline-neutral">&nbsp;</span>
254
- <span class="cline-any cline-no">&nbsp;</span>
255
210
  <span class="cline-any cline-neutral">&nbsp;</span>
256
211
  <span class="cline-any cline-neutral">&nbsp;</span>
257
- <span class="cline-any cline-no">&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>
261
212
  <span class="cline-any cline-neutral">&nbsp;</span>
262
213
  <span class="cline-any cline-neutral">&nbsp;</span>
263
214
  <span class="cline-any cline-neutral">&nbsp;</span>
264
- <span class="cline-any cline-no">&nbsp;</span>
265
- <span class="cline-any cline-no">&nbsp;</span>
215
+ <span class="cline-any cline-neutral">&nbsp;</span>
266
216
  <span class="cline-any cline-neutral">&nbsp;</span>
267
217
  <span class="cline-any cline-no">&nbsp;</span>
268
- <span class="cline-any cline-no">&nbsp;</span>
269
- <span class="cline-any cline-no">&nbsp;</span>
270
- <span class="cline-any cline-no">&nbsp;</span>
218
+ <span class="cline-any cline-neutral">&nbsp;</span>
271
219
  <span class="cline-any cline-no">&nbsp;</span>
272
220
  <span class="cline-any cline-no">&nbsp;</span>
273
221
  <span class="cline-any cline-neutral">&nbsp;</span>
222
+ <span class="cline-any cline-neutral">&nbsp;</span>
223
+ <span class="cline-any cline-neutral">&nbsp;</span>
274
224
  <span class="cline-any cline-no">&nbsp;</span>
275
225
  <span class="cline-any cline-no">&nbsp;</span>
276
226
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -281,7 +231,7 @@
281
231
  <span class="cline-any cline-no">&nbsp;</span>
282
232
  <span class="cline-any cline-no">&nbsp;</span>
283
233
  <span class="cline-any cline-neutral">&nbsp;</span>
284
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { parseFileExports } from '@aiready/core';
234
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { parseFileExports, isTestFile } from '@aiready/core';
285
235
  import type { ExportInfo } from './types';
286
236
  import { inferDomain, extractExports } from './semantic/domain-inference';
287
237
  &nbsp;
@@ -295,19 +245,19 @@ import { inferDomain, extractExports } from './semantic/domain-inference';
295
245
  * @returns Array of high-fidelity export metadata.
296
246
  * @lastUpdated 2026-03-18
297
247
  */
298
- export function extractExportsWithAST(
248
+ export async function extractExportsWithAST(
299
249
  content: 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>
250
+ filePath: string,
301
251
  domainOptions?: { domainKeywords?: string[] },
302
252
  fileImports?: string[]
303
- ): Exp<span class="cstat-no" title="statement not covered" >ortInfo[] {</span>
253
+ ): Promise&lt;ExportInfo[]&gt; {
304
254
  try {
305
- const { exports: astExports } = parseFileExports(content, filePath);
255
+ const { exports: astExports } = await parseFileExports(content, filePath);
306
256
  &nbsp;
307
257
  <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>
308
258
  // If AST fails to find anything, we still use regex as a last resort
309
259
  // ONLY for unknown file types or very complex macros
310
- return extractExports(content, filePath, domainOptions, fileImports);
260
+ <span class="cstat-no" title="statement not covered" > return extractExports(content, filePath, domainOptions, fileImports);</span>
311
261
  }
312
262
  &nbsp;
313
263
  return astExports.map((exp) =&gt; ({
@@ -330,31 +280,6 @@ export function extractExportsWithAST(
330
280
  }
331
281
  &nbsp;
332
282
  /**
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.
337
- */
338
- export function isTestFile(filePath: string): boolean {
339
- const lower = filePath.toLowerCase();
340
- return (
341
- lower.includes('.test.') ||
342
- lower.includes('.spec.') ||
343
- lower.includes('/__tests__/') ||
344
- lower.includes('/tests/') ||
345
- lower.includes('/test/') ||
346
- lower.includes('test-') ||
347
- lower.includes('-test') ||
348
- lower.includes('/__mocks__/') ||
349
- lower.includes('/mocks/') ||
350
- lower.includ<span class="fstat-no" title="function not covered" >es('/fixtures/') ||</span>
351
- lower.includes('.mock.') ||
352
- lower.includes('.fixture.') ||
353
- lower.includes('/tes<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >t-</span>utils/')</span>
354
- );
355
- }
356
- &nbsp;
357
- /**<span class="cstat-no" title="statement not covered" ></span>
358
283
  * Heuristic to check if all exports share a common entity noun
359
284
  */
360
285
  export function <span class="fstat-no" title="function not covered" >allExportsShareEntityNoun(e</span>xports: ExportInfo[]): boolean {
@@ -363,22 +288,22 @@ export function <span class="fstat-no" title="function not covered" >allExportsS
363
288
  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>
364
289
  // Basic heuristic: last part of camelCase name often is the entity
365
290
  // e.g. createOrder -&gt; order, getUserProfile -&gt; profile
366
- // But we also<span class="cstat-no" title="statement not covered" > look for common do</span>main nouns in the middle
291
+ // But we also look for common domain nouns in the middle
367
292
  const commonNouns = <span class="cstat-no" title="statement not covered" >[</span>
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>
293
+ 'user',
294
+ 'order',
370
295
  'product',
371
296
  'session',
372
297
  'account',
373
- 'receipt',<span class="cstat-no" title="statement not covered" ></span>
374
- <span class="cstat-no" title="statement not covered" > 'token',</span>
298
+ 'receipt',
299
+ 'token',
375
300
  ];
376
301
  const lower = <span class="cstat-no" title="statement not covered" >name.toLowerCase();</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>
302
+ &nbsp;
303
+ <span class="cstat-no" title="statement not covered" > for (const noun of commonNouns) {</span>
379
304
  <span class="cstat-no" title="statement not covered" > if (lower.includes(noun)) <span class="cstat-no" title="statement not covered" >return noun;</span></span>
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>
305
+ }
306
+ &nbsp;
382
307
  // Fallback: split by capital letters and take the last part
383
308
  const parts = <span class="cstat-no" title="statement not covered" >name.split(/(?=[A-Z])/);</span>
384
309
  <span class="cstat-no" title="statement not covered" > return parts[parts.length - 1].toLowerCase();</span>
@@ -397,7 +322,7 @@ export function <span class="fstat-no" title="function not covered" >allExportsS
397
322
  <div class='footer quiet pad2 space-top1 center small'>
398
323
  Code coverage generated by
399
324
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
400
- at 2026-03-21T12:52:37.698Z
325
+ at 2026-03-24T11:20:59.666Z
401
326
  </div>
402
327
  <script src="../prettify.js"></script>
403
328
  <script>