@aiready/context-analyzer 0.21.22 → 0.21.24
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.
- package/.turbo/turbo-build.log +26 -25
- package/.turbo/turbo-lint.log +5 -5
- package/.turbo/turbo-test.log +91 -41
- package/coverage/clover.xml +2615 -1242
- package/coverage/coverage-final.json +30 -13
- package/coverage/dist/chunk-64U3PNO3.mjs.html +367 -0
- package/coverage/dist/chunk-J3MUOWHC.mjs.html +5326 -0
- package/coverage/dist/index.html +146 -0
- package/coverage/{classifier.ts.html → dist/index.mjs.html} +537 -912
- package/coverage/index.html +84 -189
- package/coverage/src/analyzer.ts.html +88 -0
- package/coverage/src/analyzers/index.html +116 -0
- package/coverage/src/analyzers/python-context.ts.html +910 -0
- package/coverage/{ast-utils.ts.html → src/ast-utils.ts.html} +84 -54
- package/coverage/src/classifier.ts.html +892 -0
- package/coverage/src/classify/classification-patterns.ts.html +307 -0
- package/coverage/src/classify/file-classifiers.ts.html +973 -0
- package/coverage/src/classify/index.html +131 -0
- package/coverage/{cluster-detector.ts.html → src/cluster-detector.ts.html} +154 -91
- package/coverage/{defaults.ts.html → src/defaults.ts.html} +74 -65
- package/coverage/{graph-builder.ts.html → src/graph-builder.ts.html} +268 -229
- package/coverage/src/index.html +341 -0
- package/coverage/{index.ts.html → src/index.ts.html} +70 -13
- package/coverage/{scoring.ts.html → src/issue-analyzer.ts.html} +201 -261
- package/coverage/src/mapper.ts.html +439 -0
- package/coverage/{metrics.ts.html → src/metrics.ts.html} +201 -132
- package/coverage/src/orchestrator.ts.html +493 -0
- package/coverage/{provider.ts.html → src/provider.ts.html} +21 -21
- package/coverage/{remediation.ts.html → src/remediation.ts.html} +112 -52
- package/coverage/src/report/console-report.ts.html +415 -0
- package/coverage/src/report/html-report.ts.html +361 -0
- package/coverage/src/report/index.html +146 -0
- package/coverage/src/report/interactive-setup.ts.html +373 -0
- package/coverage/src/scoring.ts.html +895 -0
- package/coverage/src/semantic/co-usage.ts.html +340 -0
- package/coverage/src/semantic/consolidation.ts.html +223 -0
- package/coverage/src/semantic/domain-inference.ts.html +859 -0
- package/coverage/src/semantic/index.html +161 -0
- package/coverage/src/semantic/type-graph.ts.html +163 -0
- package/coverage/{summary.ts.html → src/summary.ts.html} +155 -275
- package/coverage/{types.ts.html → src/types.ts.html} +133 -31
- package/coverage/src/utils/dependency-graph-utils.ts.html +463 -0
- package/coverage/src/utils/index.html +131 -0
- package/coverage/src/utils/string-utils.ts.html +148 -0
- package/dist/chunk-AMPK6SWS.mjs +1754 -0
- package/dist/chunk-BHCRDEE4.mjs +1745 -0
- package/dist/chunk-IKRP7ECY.mjs +1754 -0
- package/dist/chunk-J3MUOWHC.mjs +1747 -0
- package/dist/chunk-TWWPY7FD.mjs +1754 -0
- package/dist/chunk-Z5WY6A4P.mjs +1754 -0
- package/dist/cli.js +77 -185
- package/dist/cli.mjs +1 -1
- package/dist/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +73 -181
- package/dist/index.mjs +1 -1
- package/dist/python-context-BWDC4E5Z.mjs +162 -0
- package/package.json +3 -3
- package/src/__tests__/analyzer.test.ts +14 -14
- package/src/__tests__/auto-detection.test.ts +16 -16
- package/src/__tests__/consolidation.test.ts +247 -0
- package/src/__tests__/defaults.test.ts +121 -0
- package/src/__tests__/domain-inference.test.ts +420 -0
- package/src/__tests__/fragmentation-coupling.test.ts +4 -4
- package/src/__tests__/issue-analyzer.test.ts +155 -0
- package/src/__tests__/orchestrator.test.ts +143 -0
- package/src/__tests__/python-context.test.ts +100 -0
- package/src/__tests__/report/console-report.test.ts +292 -0
- package/src/__tests__/report/html-report.test.ts +243 -0
- package/src/__tests__/scoring.test.ts +17 -11
- package/src/analyzers/python-context.ts +2 -2
- package/src/ast-utils.ts +3 -3
- package/src/graph-builder.ts +4 -4
- package/src/mapper.ts +6 -0
- package/src/orchestrator.ts +1 -1
- package/src/report/html-report.ts +73 -181
- package/coverage/analyzer.ts.html +0 -1369
- 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 summary.ts</title>
|
|
6
|
+
<title>Code coverage report for src/summary.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> summary.ts</h1>
|
|
22
|
+
<h1><a href="../index.html">All files</a> / <a href="index.html">src</a> summary.ts</h1>
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">
|
|
26
|
+
<span class="strong">61.32% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>65/106</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">
|
|
33
|
+
<span class="strong">30.76% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>12/39</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">
|
|
40
|
+
<span class="strong">82.97% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>
|
|
42
|
+
<span class='fraction'>39/47</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">
|
|
47
|
+
<span class="strong">62.16% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>46/74</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -203,47 +203,7 @@
|
|
|
203
203
|
<a name='L138'></a><a href='#L138'>138</a>
|
|
204
204
|
<a name='L139'></a><a href='#L139'>139</a>
|
|
205
205
|
<a name='L140'></a><a href='#L140'>140</a>
|
|
206
|
-
<a name='L141'></a><a href='#L141'>141</a>
|
|
207
|
-
<a name='L142'></a><a href='#L142'>142</a>
|
|
208
|
-
<a name='L143'></a><a href='#L143'>143</a>
|
|
209
|
-
<a name='L144'></a><a href='#L144'>144</a>
|
|
210
|
-
<a name='L145'></a><a href='#L145'>145</a>
|
|
211
|
-
<a name='L146'></a><a href='#L146'>146</a>
|
|
212
|
-
<a name='L147'></a><a href='#L147'>147</a>
|
|
213
|
-
<a name='L148'></a><a href='#L148'>148</a>
|
|
214
|
-
<a name='L149'></a><a href='#L149'>149</a>
|
|
215
|
-
<a name='L150'></a><a href='#L150'>150</a>
|
|
216
|
-
<a name='L151'></a><a href='#L151'>151</a>
|
|
217
|
-
<a name='L152'></a><a href='#L152'>152</a>
|
|
218
|
-
<a name='L153'></a><a href='#L153'>153</a>
|
|
219
|
-
<a name='L154'></a><a href='#L154'>154</a>
|
|
220
|
-
<a name='L155'></a><a href='#L155'>155</a>
|
|
221
|
-
<a name='L156'></a><a href='#L156'>156</a>
|
|
222
|
-
<a name='L157'></a><a href='#L157'>157</a>
|
|
223
|
-
<a name='L158'></a><a href='#L158'>158</a>
|
|
224
|
-
<a name='L159'></a><a href='#L159'>159</a>
|
|
225
|
-
<a name='L160'></a><a href='#L160'>160</a>
|
|
226
|
-
<a name='L161'></a><a href='#L161'>161</a>
|
|
227
|
-
<a name='L162'></a><a href='#L162'>162</a>
|
|
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></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
|
|
206
|
+
<a name='L141'></a><a href='#L141'>141</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
|
|
247
207
|
<span class="cline-any cline-neutral"> </span>
|
|
248
208
|
<span class="cline-any cline-neutral"> </span>
|
|
249
209
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -258,157 +218,117 @@
|
|
|
258
218
|
<span class="cline-any cline-neutral"> </span>
|
|
259
219
|
<span class="cline-any cline-neutral"> </span>
|
|
260
220
|
<span class="cline-any cline-neutral"> </span>
|
|
261
|
-
<span class="cline-any cline-yes">2x</span>
|
|
262
|
-
<span class="cline-any cline-neutral"> </span>
|
|
263
|
-
<span class="cline-any cline-neutral"> </span>
|
|
264
|
-
<span class="cline-any cline-yes">1x</span>
|
|
265
|
-
<span class="cline-any cline-neutral"> </span>
|
|
266
|
-
<span class="cline-any cline-neutral"> </span>
|
|
267
|
-
<span class="cline-any cline-neutral"> </span>
|
|
268
|
-
<span class="cline-any cline-neutral"> </span>
|
|
269
|
-
<span class="cline-any cline-yes">2x</span>
|
|
270
221
|
<span class="cline-any cline-no"> </span>
|
|
271
222
|
<span class="cline-any cline-neutral"> </span>
|
|
272
223
|
<span class="cline-any cline-neutral"> </span>
|
|
273
|
-
<span class="cline-any cline-neutral"> </span>
|
|
274
|
-
<span class="cline-any cline-neutral"> </span>
|
|
275
|
-
<span class="cline-any cline-neutral"> </span>
|
|
276
|
-
<span class="cline-any cline-neutral"> </span>
|
|
277
|
-
<span class="cline-any cline-neutral"> </span>
|
|
278
|
-
<span class="cline-any cline-neutral"> </span>
|
|
279
|
-
<span class="cline-any cline-neutral"> </span>
|
|
280
|
-
<span class="cline-any cline-neutral"> </span>
|
|
281
|
-
<span class="cline-any cline-neutral"> </span>
|
|
282
|
-
<span class="cline-any cline-neutral"> </span>
|
|
283
|
-
<span class="cline-any cline-neutral"> </span>
|
|
284
|
-
<span class="cline-any cline-neutral"> </span>
|
|
285
|
-
<span class="cline-any cline-neutral"> </span>
|
|
286
|
-
<span class="cline-any cline-neutral"> </span>
|
|
287
|
-
<span class="cline-any cline-neutral"> </span>
|
|
288
|
-
<span class="cline-any cline-neutral"> </span>
|
|
289
|
-
<span class="cline-any cline-neutral"> </span>
|
|
290
|
-
<span class="cline-any cline-neutral"> </span>
|
|
291
|
-
<span class="cline-any cline-yes">2x</span>
|
|
292
|
-
<span class="cline-any cline-yes">2x</span>
|
|
293
|
-
<span class="cline-any cline-yes">2x</span>
|
|
294
|
-
<span class="cline-any cline-yes">2x</span>
|
|
295
|
-
<span class="cline-any cline-neutral"> </span>
|
|
296
|
-
<span class="cline-any cline-neutral"> </span>
|
|
297
|
-
<span class="cline-any cline-yes">2x</span>
|
|
298
|
-
<span class="cline-any cline-yes">2x</span>
|
|
299
|
-
<span class="cline-any cline-neutral"> </span>
|
|
300
|
-
<span class="cline-any cline-neutral"> </span>
|
|
301
|
-
<span class="cline-any cline-yes">2x</span>
|
|
302
|
-
<span class="cline-any cline-yes">2x</span>
|
|
303
|
-
<span class="cline-any cline-neutral"> </span>
|
|
304
|
-
<span class="cline-any cline-yes">2x</span>
|
|
305
|
-
<span class="cline-any cline-yes">2x</span>
|
|
306
224
|
<span class="cline-any cline-no"> </span>
|
|
307
|
-
<span class="cline-any cline-
|
|
308
|
-
<span class="cline-any cline-neutral"> </span>
|
|
309
|
-
<span class="cline-any cline-neutral"> </span>
|
|
310
|
-
<span class="cline-any cline-neutral"> </span>
|
|
311
|
-
<span class="cline-any cline-yes">2x</span>
|
|
312
|
-
<span class="cline-any cline-neutral"> </span>
|
|
313
|
-
<span class="cline-any cline-yes">2x</span>
|
|
314
|
-
<span class="cline-any cline-yes">2x</span>
|
|
315
|
-
<span class="cline-any cline-yes">2x</span>
|
|
316
|
-
<span class="cline-any cline-yes">2x</span>
|
|
317
|
-
<span class="cline-any cline-yes">2x</span>
|
|
318
|
-
<span class="cline-any cline-neutral"> </span>
|
|
319
|
-
<span class="cline-any cline-neutral"> </span>
|
|
320
|
-
<span class="cline-any cline-neutral"> </span>
|
|
321
|
-
<span class="cline-any cline-yes">2x</span>
|
|
322
|
-
<span class="cline-any cline-yes">2x</span>
|
|
323
|
-
<span class="cline-any cline-yes">2x</span>
|
|
225
|
+
<span class="cline-any cline-yes">1x</span>
|
|
324
226
|
<span class="cline-any cline-neutral"> </span>
|
|
325
|
-
<span class="cline-any cline-no"> </span>
|
|
326
|
-
<span class="cline-any cline-no"> </span>
|
|
327
227
|
<span class="cline-any cline-neutral"> </span>
|
|
328
228
|
<span class="cline-any cline-no"> </span>
|
|
229
|
+
<span class="cline-any cline-yes">1x</span>
|
|
230
|
+
<span class="cline-any cline-yes">1x</span>
|
|
329
231
|
<span class="cline-any cline-neutral"> </span>
|
|
330
232
|
<span class="cline-any cline-no"> </span>
|
|
233
|
+
<span class="cline-any cline-yes">1x</span>
|
|
234
|
+
<span class="cline-any cline-yes">1x</span>
|
|
331
235
|
<span class="cline-any cline-no"> </span>
|
|
236
|
+
<span class="cline-any cline-yes">1x</span>
|
|
237
|
+
<span class="cline-any cline-yes">1x</span>
|
|
332
238
|
<span class="cline-any cline-neutral"> </span>
|
|
333
239
|
<span class="cline-any cline-no"> </span>
|
|
334
|
-
<span class="cline-any cline-no"> </span>
|
|
335
|
-
<span class="cline-any cline-no"> </span>
|
|
336
240
|
<span class="cline-any cline-neutral"> </span>
|
|
337
|
-
<span class="cline-any cline-yes">
|
|
338
|
-
<span class="cline-any cline-
|
|
339
|
-
<span class="cline-any cline-no"> </span>
|
|
340
|
-
<span class="cline-any cline-no"> </span>
|
|
341
|
-
<span class="cline-any cline-no"> </span>
|
|
241
|
+
<span class="cline-any cline-yes">1x</span>
|
|
242
|
+
<span class="cline-any cline-yes">1x</span>
|
|
342
243
|
<span class="cline-any cline-no"> </span>
|
|
343
244
|
<span class="cline-any cline-no"> </span>
|
|
344
|
-
<span class="cline-any cline-
|
|
345
|
-
<span class="cline-any cline-neutral"> </span>
|
|
346
|
-
<span class="cline-any cline-no"> </span>
|
|
245
|
+
<span class="cline-any cline-yes">1x</span>
|
|
347
246
|
<span class="cline-any cline-no"> </span>
|
|
348
247
|
<span class="cline-any cline-no"> </span>
|
|
248
|
+
<span class="cline-any cline-yes">1x</span>
|
|
249
|
+
<span class="cline-any cline-yes">1x</span>
|
|
250
|
+
<span class="cline-any cline-yes">1x</span>
|
|
251
|
+
<span class="cline-any cline-yes">1x</span>
|
|
252
|
+
<span class="cline-any cline-yes">1x</span>
|
|
253
|
+
<span class="cline-any cline-yes">1x</span>
|
|
349
254
|
<span class="cline-any cline-no"> </span>
|
|
350
255
|
<span class="cline-any cline-no"> </span>
|
|
256
|
+
<span class="cline-any cline-yes">1x</span>
|
|
257
|
+
<span class="cline-any cline-yes">1x</span>
|
|
258
|
+
<span class="cline-any cline-yes">1x</span>
|
|
351
259
|
<span class="cline-any cline-neutral"> </span>
|
|
260
|
+
<span class="cline-any cline-yes">1x</span>
|
|
261
|
+
<span class="cline-any cline-yes">1x</span>
|
|
262
|
+
<span class="cline-any cline-yes">1x</span>
|
|
263
|
+
<span class="cline-any cline-yes">1x</span>
|
|
264
|
+
<span class="cline-any cline-yes">1x</span>
|
|
265
|
+
<span class="cline-any cline-yes">1x</span>
|
|
266
|
+
<span class="cline-any cline-yes">1x</span>
|
|
352
267
|
<span class="cline-any cline-neutral"> </span>
|
|
268
|
+
<span class="cline-any cline-yes">1x</span>
|
|
353
269
|
<span class="cline-any cline-neutral"> </span>
|
|
270
|
+
<span class="cline-any cline-yes">1x</span>
|
|
354
271
|
<span class="cline-any cline-no"> </span>
|
|
355
272
|
<span class="cline-any cline-neutral"> </span>
|
|
356
273
|
<span class="cline-any cline-neutral"> </span>
|
|
357
274
|
<span class="cline-any cline-neutral"> </span>
|
|
358
275
|
<span class="cline-any cline-no"> </span>
|
|
359
276
|
<span class="cline-any cline-neutral"> </span>
|
|
360
|
-
<span class="cline-any cline-yes">2x</span>
|
|
361
|
-
<span class="cline-any cline-neutral"> </span>
|
|
362
277
|
<span class="cline-any cline-no"> </span>
|
|
363
|
-
<span class="cline-any cline-
|
|
364
|
-
<span class="cline-any cline-
|
|
365
|
-
<span class="cline-any cline-neutral"> </span>
|
|
366
|
-
<span class="cline-any cline-neutral"> </span>
|
|
278
|
+
<span class="cline-any cline-no"> </span>
|
|
279
|
+
<span class="cline-any cline-no"> </span>
|
|
367
280
|
<span class="cline-any cline-neutral"> </span>
|
|
368
281
|
<span class="cline-any cline-neutral"> </span>
|
|
369
282
|
<span class="cline-any cline-neutral"> </span>
|
|
370
283
|
<span class="cline-any cline-neutral"> </span>
|
|
371
284
|
<span class="cline-any cline-neutral"> </span>
|
|
372
285
|
<span class="cline-any cline-no"> </span>
|
|
286
|
+
<span class="cline-any cline-yes">1x</span>
|
|
373
287
|
<span class="cline-any cline-neutral"> </span>
|
|
288
|
+
<span class="cline-any cline-yes">1x</span>
|
|
374
289
|
<span class="cline-any cline-neutral"> </span>
|
|
290
|
+
<span class="cline-any cline-no"> </span>
|
|
291
|
+
<span class="cline-any cline-yes">1x</span>
|
|
292
|
+
<span class="cline-any cline-yes">1x</span>
|
|
375
293
|
<span class="cline-any cline-neutral"> </span>
|
|
376
294
|
<span class="cline-any cline-neutral"> </span>
|
|
377
|
-
<span class="cline-any cline-neutral"> </span>
|
|
378
|
-
<span class="cline-any cline-neutral"> </span>
|
|
379
|
-
<span class="cline-any cline-neutral"> </span>
|
|
380
|
-
<span class="cline-any cline-yes">2x</span>
|
|
381
|
-
<span class="cline-any cline-yes">2x</span>
|
|
382
|
-
<span class="cline-any cline-yes">2x</span>
|
|
383
295
|
<span class="cline-any cline-no"> </span>
|
|
384
296
|
<span class="cline-any cline-no"> </span>
|
|
297
|
+
<span class="cline-any cline-no"> </span>
|
|
298
|
+
<span class="cline-any cline-yes">1x</span>
|
|
299
|
+
<span class="cline-any cline-no"> </span>
|
|
300
|
+
<span class="cline-any cline-yes">1x</span>
|
|
301
|
+
<span class="cline-any cline-yes">1x</span>
|
|
302
|
+
<span class="cline-any cline-no"> </span>
|
|
385
303
|
<span class="cline-any cline-neutral"> </span>
|
|
304
|
+
<span class="cline-any cline-no"> </span>
|
|
305
|
+
<span class="cline-any cline-yes">1x</span>
|
|
306
|
+
<span class="cline-any cline-yes">1x</span>
|
|
307
|
+
<span class="cline-any cline-no"> </span>
|
|
308
|
+
<span class="cline-any cline-yes">1x</span>
|
|
309
|
+
<span class="cline-any cline-yes">1x</span>
|
|
386
310
|
<span class="cline-any cline-neutral"> </span>
|
|
387
|
-
<span class="cline-any cline-yes">
|
|
388
|
-
<span class="cline-any cline-yes">
|
|
389
|
-
<span class="cline-any cline-
|
|
390
|
-
<span class="cline-any cline-yes">2x</span>
|
|
391
|
-
<span class="cline-any cline-yes">2x</span>
|
|
392
|
-
<span class="cline-any cline-yes">2x</span>
|
|
393
|
-
<span class="cline-any cline-yes">2x</span>
|
|
394
|
-
<span class="cline-any cline-neutral"> </span>
|
|
311
|
+
<span class="cline-any cline-yes">1x</span>
|
|
312
|
+
<span class="cline-any cline-yes">1x</span>
|
|
313
|
+
<span class="cline-any cline-no"> </span>
|
|
395
314
|
<span class="cline-any cline-neutral"> </span>
|
|
396
315
|
<span class="cline-any cline-neutral"> </span>
|
|
397
|
-
<span class="cline-any cline-yes">
|
|
316
|
+
<span class="cline-any cline-yes">1x</span>
|
|
398
317
|
<span class="cline-any cline-no"> </span>
|
|
399
318
|
<span class="cline-any cline-neutral"> </span>
|
|
400
|
-
<span class="cline-any cline-yes">
|
|
401
|
-
<span class="cline-any cline-neutral"> </span>
|
|
319
|
+
<span class="cline-any cline-yes">1x</span>
|
|
402
320
|
<span class="cline-any cline-neutral"> </span>
|
|
403
321
|
<span class="cline-any cline-neutral"> </span>
|
|
404
322
|
<span class="cline-any cline-neutral"> </span>
|
|
405
323
|
<span class="cline-any cline-neutral"> </span>
|
|
406
|
-
<span class="cline-any cline-yes">2x</span>
|
|
407
324
|
<span class="cline-any cline-neutral"> </span>
|
|
325
|
+
<span class="cline-any cline-yes">1x</span>
|
|
408
326
|
<span class="cline-any cline-neutral"> </span>
|
|
409
327
|
<span class="cline-any cline-neutral"> </span>
|
|
410
328
|
<span class="cline-any cline-neutral"> </span>
|
|
329
|
+
<span class="cline-any cline-yes">1x</span>
|
|
411
330
|
<span class="cline-any cline-neutral"> </span>
|
|
331
|
+
<span class="cline-any cline-yes">1x</span>
|
|
412
332
|
<span class="cline-any cline-neutral"> </span>
|
|
413
333
|
<span class="cline-any cline-neutral"> </span>
|
|
414
334
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -428,153 +348,112 @@
|
|
|
428
348
|
ContextSummary,
|
|
429
349
|
ModuleCluster,
|
|
430
350
|
} from './types';
|
|
431
|
-
import { calculatePathEntropy, calculateDirectoryDistance } from './analyzer';
|
|
432
351
|
import { GLOBAL_SCAN_OPTIONS } from '@aiready/core';
|
|
352
|
+
import { calculatePathEntropy } from './metrics';
|
|
433
353
|
|
|
434
354
|
/**
|
|
435
355
|
* Generate summary of context analysis results
|
|
356
|
+
*
|
|
357
|
+
* @param result<span class="fstat-no" title="function not covered" >s - Array of ind</span>ividual file analysis results.
|
|
358
|
+
* @param options - Optional scan configuration for context extraction.
|
|
359
|
+
* @returns A consolidated summary of the entire context scan.
|
|
436
360
|
*/
|
|
437
|
-
export function
|
|
361
|
+
export function g<span class="cstat-no" title="statement not covered" >enerateSummary(</span>
|
|
438
362
|
results: ContextAnalysisResult[],
|
|
439
|
-
options
|
|
440
|
-
): ContextSummary {
|
|
363
|
+
options: any = {}
|
|
364
|
+
): ContextSummary {<span class="cstat-no" title="statement not covered" ></span>
|
|
441
365
|
const config = options
|
|
442
366
|
? Object.fromEntries(
|
|
443
367
|
Object.entries(options).filter(
|
|
444
|
-
([key]) =>
|
|
368
|
+
<span class="fstat-no" title="function not covered" > ([</span>key]) => <span class="cstat-no" title="statement not covered" >!GLOBAL_SCAN_OPTIONS.includes(key) || key === 'rootDir'</span>
|
|
445
369
|
)
|
|
446
370
|
)
|
|
447
|
-
:
|
|
448
|
-
|
|
449
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (results.length === 0) {
|
|
450
|
-
<span class="cstat-no" title="statement not covered" > return {</span>
|
|
451
|
-
totalFiles: 0,
|
|
452
|
-
totalTokens: 0,
|
|
453
|
-
avgContextBudget: 0,
|
|
454
|
-
maxContextBudget: 0,
|
|
455
|
-
avgImportDepth: 0,
|
|
456
|
-
maxImportDepth: 0,
|
|
457
|
-
deepFiles: [],
|
|
458
|
-
avgFragmentation: 0,
|
|
459
|
-
fragmentedModules: [],
|
|
460
|
-
avgCohesion: 0,
|
|
461
|
-
lowCohesionFiles: [],
|
|
462
|
-
criticalIssues: 0,
|
|
463
|
-
majorIssues: 0,
|
|
464
|
-
minorIssues: 0,
|
|
465
|
-
totalPotentialSavings: 0,
|
|
466
|
-
topExpensiveFiles: [],
|
|
467
|
-
config,
|
|
468
|
-
};
|
|
469
|
-
}
|
|
470
|
-
|
|
371
|
+
: <span class="branch-1 cbranch-no" title="branch not covered" >{};</span>
|
|
372
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
471
373
|
const totalFiles = results.length;
|
|
472
374
|
const totalTokens = results.reduce((sum, r) => sum + r.tokenCost, 0);
|
|
473
|
-
const
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
const avgImportDepth =
|
|
481
|
-
results.reduce((sum, r) => sum + r.importDepth, 0) / totalFiles;
|
|
482
|
-
const maxImportDepth = Math.max(...results.map((r) => r.importDepth));
|
|
483
|
-
|
|
375
|
+
const avgContextBu<span class="cstat-no" title="statement not covered" >dget =</span>
|
|
376
|
+
totalFiles > 0
|
|
377
|
+
? results.reduce((sum, r) => sum + r.contextBudget, 0) / totalFiles
|
|
378
|
+
: <span class="branch-1 cbranch-no" title="branch not covered" >0;</span>
|
|
379
|
+
<span class="cstat-no" title="statement not covered" ><span class="cstat-no" title="statement not covered" ></span></span>
|
|
380
|
+
// Find deep files
|
|
484
381
|
const deepFiles = results
|
|
485
|
-
.filter((r) => r.importDepth >
|
|
486
|
-
.map(<span class="fstat-no" title="function not covered" >(r</span>) => (<span class="cstat-no" title="statement not covered" >{ file: r.file, depth: r.importDepth }))</span>
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
}
|
|
499
|
-
|
|
382
|
+
.filter((r) => r.importDepth > 5)
|
|
383
|
+
<span class="cstat-no" title="statement not covered" > .map(<span class="fstat-no" title="function not covered" >(r</span>) => (<span class="cstat-no" title="statement not covered" >{ file: r.file, depth: r.importDepth }))</span>;</span>
|
|
384
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
385
|
+
const maxImportDepth = Math.max(0, ...results.map((r) => r.importDepth));
|
|
386
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
387
|
+
//<span class="cstat-no" title="statement not covered" > Find fragmented modules (clusters)</span>
|
|
388
|
+
cons<span class="cstat-no" title="statement not covered" >t moduleMap = new Map<string, ContextAnalysisResult[]>();</span>
|
|
389
|
+
results.forEach((r) => {
|
|
390
|
+
const parts = r.file.split('/');
|
|
391
|
+
// Try to identify domain/module (e.g., packages/core, src/utils)
|
|
392
|
+
let domain = 'root';
|
|
393
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (parts.length > 2) {
|
|
394
|
+
<span class="cstat-no" title="statement not covered" > domain = parts.slice(0, 2).join('/');<span class="cstat-no" title="statement not covered" ></span></span>
|
|
395
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
396
|
+
<span class="missing-if-branch" title="else path not taken" >E</span>if (!moduleMap.has(domain)) moduleMap.set(domain, []);
|
|
397
|
+
moduleMap.get(domain)!.push(r);
|
|
398
|
+
});<span class="cstat-no" title="statement not covered" ></span>
|
|
500
399
|
|
|
501
400
|
const fragmentedModules: ModuleCluster[] = [];
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
const
|
|
505
|
-
|
|
506
|
-
<span class="cstat-no" title="statement not covered" > if (fragmentationScore < 0.3) <span class="cstat-no" title="statement not covered" >continue;</span></span>
|
|
507
|
-
|
|
508
|
-
const totalTokens = <span class="cstat-no" title="statement not covered" >files.reduce(<span class="fstat-no" title="function not covered" >(s</span>um, f) => <span class="cstat-no" title="statement not covered" >sum + f.tokenCost, 0</span>);</span>
|
|
509
|
-
const avgCohesion =
|
|
510
|
-
<span class="cstat-no" title="statement not covered" > files.reduce(<span class="fstat-no" title="function not covered" >(s</span>um, f) => <span class="cstat-no" title="statement not covered" >sum + f.cohesionScore, 0</span>) / files.length;</span>
|
|
511
|
-
const targetFiles = <span class="cstat-no" title="statement not covered" >Math.max(1, Math.ceil(files.length / 3));</span>
|
|
401
|
+
moduleMap.forEach((files, domain) => {
|
|
402
|
+
const clusterTokens = files.reduce((sum, f) => sum + f.tokenCost, 0);
|
|
403
|
+
const filePaths = files.map((f) => f.file);
|
|
404
|
+
const avgEntropy = calculatePathEntropy(filePaths);
|
|
512
405
|
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
const
|
|
406
|
+
// A module is fragmented if it has many files with high directory distance
|
|
407
|
+
// and relatively low cohesion
|
|
408
|
+
const fragmentationScore = Math.min(1, avgEntropy * (files.length / 10));
|
|
516
409
|
|
|
517
|
-
<span class="
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
410
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (fragmentationScore > 0.4) {
|
|
411
|
+
<span class="cstat-no" title="statement not covered" > fragmentedModules.push({</span>
|
|
412
|
+
domain,
|
|
413
|
+
files: filePaths,
|
|
414
|
+
fragmentationScore,
|
|
415
|
+
<span class="cstat-no" title="statement not covered" > totalTokens: clusterTokens,<span class="cstat-no" title="statement not covered" ></span></span>
|
|
416
|
+
avgCohesion:
|
|
417
|
+
files.reduce(<span class="fstat-no" title="function not covered" >(s</span>um, f) => <span class="cstat-no" title="statement not covered" >sum + f.cohesionScore, 0</span>) / files.length,
|
|
418
|
+
<span class="cstat-no" title="statement not covered" > suggestedStructure: {</span>
|
|
419
|
+
<span class="branch-0 cbranch-no" title="branch not covered" > targetFiles: Math.ceil(files.length<span class="cstat-no" title="statement not covered" > / 2),</span></span>
|
|
420
|
+
consolidationPlan: [
|
|
421
|
+
`Consolidate ${files.length} files in ${domain} into fewer modules`,
|
|
422
|
+
],
|
|
423
|
+
},
|
|
424
|
+
});
|
|
425
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
426
|
+
});
|
|
525
427
|
|
|
526
|
-
|
|
527
|
-
let importPairs = <span class="cstat-no" title="statement not covered" >0;</span>
|
|
528
|
-
<span class="cstat-no" title="statement not covered" > for (let i = <span class="cstat-no" title="statement not covered" >0; i</span> < files.length; i++) {</span>
|
|
529
|
-
<span class="cstat-no" title="statement not covered" > for (let j = <span class="cstat-no" title="statement not covered" >i + 1; j</span> < files.length; j++) {</span>
|
|
530
|
-
<span class="cstat-no" title="statement not covered" > importSimTotal += jaccard(</span>
|
|
531
|
-
files[i].dependencyList || [],
|
|
532
|
-
files[j].dependencyList || []
|
|
533
|
-
);
|
|
534
|
-
<span class="cstat-no" title="statement not covered" > importPairs++;</span>
|
|
535
|
-
}
|
|
536
|
-
}
|
|
428
|
+
fragmentedModules.sort(<span class="fstat-no" title="function not covered" >(a</span>, b) => <span class="cstat-no" title="statement not covered" >b.fragmentationScore - a.fragmentationScore)</span>;
|
|
537
429
|
|
|
538
|
-
|
|
539
|
-
&
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
suggestedStructure: {
|
|
550
|
-
targetFiles,
|
|
551
|
-
consolidationPlan: [
|
|
552
|
-
`Consolidate ${files.length} files across ${new Set(files.map(<span class="fstat-no" title="function not covered" >(f</span>) => <span class="cstat-no" title="statement not covered" >f.file.split('/').slice(0, -1).join('/'))</span>).size} directories`,
|
|
553
|
-
`Target ~${targetFiles} core modules to reduce context switching`,
|
|
554
|
-
],
|
|
555
|
-
},
|
|
556
|
-
});
|
|
557
|
-
}
|
|
558
|
-
|
|
559
|
-
const avgCohesion =
|
|
560
|
-
results.reduce((sum, r) => sum + r.cohesionScore, 0) / totalFiles;
|
|
561
|
-
const lowCohesionFiles = results
|
|
430
|
+
const avgFragmentation =<span class="cstat-no" title="statement not covered" ></span>
|
|
431
|
+
fragmentedModules.length > 0
|
|
432
|
+
? <span class="branch-0 cbranch-no" title="branch not covered" >fragmentedModules.reduce(<span class="fstat-no" title="function not covered" >(s</span>um, m) => <span class="cstat-no" title="statement not covered" >sum + m.fragmentationScore, 0</span>) /</span>
|
|
433
|
+
fragmentedModules.length
|
|
434
|
+
: 0;
|
|
435
|
+
<span class="cstat-no" title="statement not covered" ><span class="cstat-no" title="statement not covered" ></span></span>
|
|
436
|
+
// Cohesion<span class="cstat-no" title="statement not covered" ><span class="cstat-no" title="statement not covered" ></span></span>
|
|
437
|
+
const avgCohesion =<span class="cstat-no" title="statement not covered" ><span class="cstat-no" title="statement not covered" ></span></span>
|
|
438
|
+
results.reduce((sum, r) => sum + r.cohesionScore, 0) / (totalFiles || <span class="branch-1 cbranch-no" title="branch not covered" >1);</span>
|
|
439
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
440
|
+
const lowCohes<span class="cstat-no" title="statement not covered" >ionFiles = results</span>
|
|
562
441
|
.filter((r) => r.cohesionScore < 0.4)
|
|
563
|
-
.map(<span class="fstat-no" title="function not covered" >(r</span>) => (<span class="cstat-no" title="statement not covered" >{ file: r.file, score: r.cohesionScore }))</span
|
|
564
|
-
.sort(<span class="fstat-no" title="function not covered" >(a</span>, b) => <span class="cstat-no" title="statement not covered" >a.score - b.score)</span>
|
|
565
|
-
.slice(0, 10);
|
|
442
|
+
.map(<span class="fstat-no" title="function not covered" >(r</span>) => (<span class="cstat-no" title="statement not covered" >{ file: r.file, score: r.cohesionScore }))</span>;
|
|
566
443
|
|
|
567
|
-
|
|
444
|
+
// Issues<span class="cstat-no" title="statement not covered" ></span>
|
|
445
|
+
const criticalIssu<span class="cstat-no" title="statement not covered" >es = results.filter(</span>
|
|
568
446
|
(r) => r.severity === 'critical'
|
|
569
|
-
).length
|
|
447
|
+
).length;<span class="cstat-no" title="statement not covered" ></span>
|
|
570
448
|
const majorIssues = results.filter((r) => r.severity === 'major').length;
|
|
571
449
|
const minorIssues = results.filter((r) => r.severity === 'minor').length;
|
|
450
|
+
|
|
572
451
|
const totalPotentialSavings = results.reduce(
|
|
573
|
-
(sum, r) => sum + r.potentialSavings,
|
|
574
|
-
0
|
|
452
|
+
(sum, r) => sum + (r.potentialSavings || 0),
|
|
453
|
+
<span class="cstat-no" title="statement not covered" > 0</span>
|
|
575
454
|
);
|
|
576
455
|
|
|
577
|
-
const topExpensiveFiles = results
|
|
456
|
+
const topExpensiveFiles = [...results]
|
|
578
457
|
.sort(<span class="fstat-no" title="function not covered" >(a</span>, b) => <span class="cstat-no" title="statement not covered" >b.contextBudget - a.contextBudget)</span>
|
|
579
458
|
.slice(0, 10)
|
|
580
459
|
.map((r) => ({
|
|
@@ -587,8 +466,9 @@ export function generateSummary(
|
|
|
587
466
|
totalFiles,
|
|
588
467
|
totalTokens,
|
|
589
468
|
avgContextBudget,
|
|
590
|
-
maxContextBudget,
|
|
591
|
-
avgImportDepth
|
|
469
|
+
maxContextBudget: Math.max(0, ...results.map((r) => r.contextBudget)),
|
|
470
|
+
avgImportDepth:
|
|
471
|
+
results.reduce((sum, r) => sum + r.importDepth, 0) / (totalFiles || <span class="branch-1 cbranch-no" title="branch not covered" >1),</span>
|
|
592
472
|
maxImportDepth,
|
|
593
473
|
deepFiles,
|
|
594
474
|
avgFragmentation,
|
|
@@ -610,16 +490,16 @@ export function generateSummary(
|
|
|
610
490
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
611
491
|
Code coverage generated by
|
|
612
492
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
613
|
-
at 2026-03-
|
|
493
|
+
at 2026-03-21T12:52:37.698Z
|
|
614
494
|
</div>
|
|
615
|
-
<script src="prettify.js"></script>
|
|
495
|
+
<script src="../prettify.js"></script>
|
|
616
496
|
<script>
|
|
617
497
|
window.onload = function () {
|
|
618
498
|
prettyPrint();
|
|
619
499
|
};
|
|
620
500
|
</script>
|
|
621
|
-
<script src="sorter.js"></script>
|
|
622
|
-
<script src="block-navigation.js"></script>
|
|
501
|
+
<script src="../sorter.js"></script>
|
|
502
|
+
<script src="../block-navigation.js"></script>
|
|
623
503
|
</body>
|
|
624
504
|
</html>
|
|
625
505
|
|