@vyuhlabs/dxkit 2.4.5 → 2.4.7

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 (356) hide show
  1. package/CHANGELOG.md +1022 -0
  2. package/README.md +160 -45
  3. package/dist/analysis-result.d.ts +112 -0
  4. package/dist/analysis-result.d.ts.map +1 -0
  5. package/dist/analysis-result.js +52 -0
  6. package/dist/analysis-result.js.map +1 -0
  7. package/dist/analyzers/bom/detailed.d.ts.map +1 -1
  8. package/dist/analyzers/bom/detailed.js +19 -0
  9. package/dist/analyzers/bom/detailed.js.map +1 -1
  10. package/dist/analyzers/bom/gather.d.ts +27 -26
  11. package/dist/analyzers/bom/gather.d.ts.map +1 -1
  12. package/dist/analyzers/bom/gather.js +26 -87
  13. package/dist/analyzers/bom/gather.js.map +1 -1
  14. package/dist/analyzers/bom/index.d.ts +0 -7
  15. package/dist/analyzers/bom/index.d.ts.map +1 -1
  16. package/dist/analyzers/bom/index.js +98 -48
  17. package/dist/analyzers/bom/index.js.map +1 -1
  18. package/dist/analyzers/bom/types.d.ts +11 -13
  19. package/dist/analyzers/bom/types.d.ts.map +1 -1
  20. package/dist/analyzers/cache.d.ts +95 -0
  21. package/dist/analyzers/cache.d.ts.map +1 -0
  22. package/dist/analyzers/cache.js +309 -0
  23. package/dist/analyzers/cache.js.map +1 -0
  24. package/dist/analyzers/coverage-runner.d.ts +56 -0
  25. package/dist/analyzers/coverage-runner.d.ts.map +1 -0
  26. package/dist/analyzers/coverage-runner.js +72 -0
  27. package/dist/analyzers/coverage-runner.js.map +1 -0
  28. package/dist/analyzers/dashboard/index.d.ts +24 -0
  29. package/dist/analyzers/dashboard/index.d.ts.map +1 -0
  30. package/dist/analyzers/dashboard/index.js +666 -0
  31. package/dist/analyzers/dashboard/index.js.map +1 -0
  32. package/dist/analyzers/developer/gather.d.ts.map +1 -1
  33. package/dist/analyzers/developer/gather.js +205 -37
  34. package/dist/analyzers/developer/gather.js.map +1 -1
  35. package/dist/analyzers/developer/index.d.ts +1 -1
  36. package/dist/analyzers/developer/index.d.ts.map +1 -1
  37. package/dist/analyzers/developer/index.js +19 -8
  38. package/dist/analyzers/developer/index.js.map +1 -1
  39. package/dist/analyzers/dispatcher.d.ts +37 -0
  40. package/dist/analyzers/dispatcher.d.ts.map +1 -1
  41. package/dist/analyzers/dispatcher.js +56 -9
  42. package/dist/analyzers/dispatcher.js.map +1 -1
  43. package/dist/analyzers/docs/shallow.d.ts +17 -5
  44. package/dist/analyzers/docs/shallow.d.ts.map +1 -1
  45. package/dist/analyzers/docs/shallow.js +65 -2
  46. package/dist/analyzers/docs/shallow.js.map +1 -1
  47. package/dist/analyzers/dx/shallow.d.ts +17 -5
  48. package/dist/analyzers/dx/shallow.d.ts.map +1 -1
  49. package/dist/analyzers/dx/shallow.js +66 -2
  50. package/dist/analyzers/dx/shallow.js.map +1 -1
  51. package/dist/analyzers/health/actions.d.ts +1 -1
  52. package/dist/analyzers/health/actions.d.ts.map +1 -1
  53. package/dist/analyzers/health/actions.js +27 -9
  54. package/dist/analyzers/health/actions.js.map +1 -1
  55. package/dist/analyzers/health/detailed.d.ts +2 -1
  56. package/dist/analyzers/health/detailed.d.ts.map +1 -1
  57. package/dist/analyzers/health/detailed.js +11 -7
  58. package/dist/analyzers/health/detailed.js.map +1 -1
  59. package/dist/analyzers/health.d.ts +27 -0
  60. package/dist/analyzers/health.d.ts.map +1 -1
  61. package/dist/analyzers/health.js +271 -33
  62. package/dist/analyzers/health.js.map +1 -1
  63. package/dist/analyzers/licenses/gather.d.ts +35 -8
  64. package/dist/analyzers/licenses/gather.d.ts.map +1 -1
  65. package/dist/analyzers/licenses/gather.js +70 -13
  66. package/dist/analyzers/licenses/gather.js.map +1 -1
  67. package/dist/analyzers/licenses/index.d.ts +1 -1
  68. package/dist/analyzers/licenses/index.d.ts.map +1 -1
  69. package/dist/analyzers/licenses/index.js +52 -11
  70. package/dist/analyzers/licenses/index.js.map +1 -1
  71. package/dist/analyzers/licenses/types.d.ts +15 -0
  72. package/dist/analyzers/licenses/types.d.ts.map +1 -1
  73. package/dist/analyzers/maintainability/shallow.d.ts +17 -5
  74. package/dist/analyzers/maintainability/shallow.d.ts.map +1 -1
  75. package/dist/analyzers/maintainability/shallow.js +80 -2
  76. package/dist/analyzers/maintainability/shallow.js.map +1 -1
  77. package/dist/analyzers/quality/detailed.d.ts.map +1 -1
  78. package/dist/analyzers/quality/detailed.js +4 -6
  79. package/dist/analyzers/quality/detailed.js.map +1 -1
  80. package/dist/analyzers/quality/gather.d.ts +1 -14
  81. package/dist/analyzers/quality/gather.d.ts.map +1 -1
  82. package/dist/analyzers/quality/gather.js +48 -137
  83. package/dist/analyzers/quality/gather.js.map +1 -1
  84. package/dist/analyzers/quality/index.d.ts +9 -2
  85. package/dist/analyzers/quality/index.d.ts.map +1 -1
  86. package/dist/analyzers/quality/index.js +189 -117
  87. package/dist/analyzers/quality/index.js.map +1 -1
  88. package/dist/analyzers/quality/shallow.d.ts +50 -5
  89. package/dist/analyzers/quality/shallow.d.ts.map +1 -1
  90. package/dist/analyzers/quality/shallow.js +155 -2
  91. package/dist/analyzers/quality/shallow.js.map +1 -1
  92. package/dist/analyzers/quality/types.d.ts +14 -0
  93. package/dist/analyzers/quality/types.d.ts.map +1 -1
  94. package/dist/analyzers/security/actions.d.ts +11 -4
  95. package/dist/analyzers/security/actions.d.ts.map +1 -1
  96. package/dist/analyzers/security/actions.js +87 -37
  97. package/dist/analyzers/security/actions.js.map +1 -1
  98. package/dist/analyzers/security/aggregator.d.ts +236 -0
  99. package/dist/analyzers/security/aggregator.d.ts.map +1 -0
  100. package/dist/analyzers/security/aggregator.js +347 -0
  101. package/dist/analyzers/security/aggregator.js.map +1 -0
  102. package/dist/analyzers/security/detailed.d.ts +2 -2
  103. package/dist/analyzers/security/detailed.d.ts.map +1 -1
  104. package/dist/analyzers/security/detailed.js +10 -9
  105. package/dist/analyzers/security/detailed.js.map +1 -1
  106. package/dist/analyzers/security/gather.d.ts +103 -1
  107. package/dist/analyzers/security/gather.d.ts.map +1 -1
  108. package/dist/analyzers/security/gather.js +281 -9
  109. package/dist/analyzers/security/gather.js.map +1 -1
  110. package/dist/analyzers/security/index.d.ts +15 -0
  111. package/dist/analyzers/security/index.d.ts.map +1 -1
  112. package/dist/analyzers/security/index.js +463 -50
  113. package/dist/analyzers/security/index.js.map +1 -1
  114. package/dist/analyzers/security/shallow.d.ts +50 -6
  115. package/dist/analyzers/security/shallow.d.ts.map +1 -1
  116. package/dist/analyzers/security/shallow.js +154 -2
  117. package/dist/analyzers/security/shallow.js.map +1 -1
  118. package/dist/analyzers/security/types.d.ts +51 -0
  119. package/dist/analyzers/security/types.d.ts.map +1 -1
  120. package/dist/analyzers/tests/detailed.d.ts.map +1 -1
  121. package/dist/analyzers/tests/detailed.js +2 -3
  122. package/dist/analyzers/tests/detailed.js.map +1 -1
  123. package/dist/analyzers/tests/gather.d.ts +2 -1
  124. package/dist/analyzers/tests/gather.d.ts.map +1 -1
  125. package/dist/analyzers/tests/gather.js +98 -69
  126. package/dist/analyzers/tests/gather.js.map +1 -1
  127. package/dist/analyzers/tests/index.d.ts +11 -2
  128. package/dist/analyzers/tests/index.d.ts.map +1 -1
  129. package/dist/analyzers/tests/index.js +85 -18
  130. package/dist/analyzers/tests/index.js.map +1 -1
  131. package/dist/analyzers/tests/shallow.d.ts +19 -5
  132. package/dist/analyzers/tests/shallow.d.ts.map +1 -1
  133. package/dist/analyzers/tests/shallow.js +89 -2
  134. package/dist/analyzers/tests/shallow.js.map +1 -1
  135. package/dist/analyzers/tests/types.d.ts +41 -1
  136. package/dist/analyzers/tests/types.d.ts.map +1 -1
  137. package/dist/analyzers/tools/autogen-header.d.ts +8 -0
  138. package/dist/analyzers/tools/autogen-header.d.ts.map +1 -0
  139. package/dist/analyzers/tools/autogen-header.js +107 -0
  140. package/dist/analyzers/tools/autogen-header.js.map +1 -0
  141. package/dist/analyzers/tools/cloc.d.ts.map +1 -1
  142. package/dist/analyzers/tools/cloc.js +36 -5
  143. package/dist/analyzers/tools/cloc.js.map +1 -1
  144. package/dist/analyzers/tools/coverage.d.ts +1 -1
  145. package/dist/analyzers/tools/coverage.d.ts.map +1 -1
  146. package/dist/analyzers/tools/coverage.js.map +1 -1
  147. package/dist/analyzers/tools/debug-statements.d.ts +17 -0
  148. package/dist/analyzers/tools/debug-statements.d.ts.map +1 -0
  149. package/dist/analyzers/tools/debug-statements.js +58 -0
  150. package/dist/analyzers/tools/debug-statements.js.map +1 -0
  151. package/dist/analyzers/tools/default-exclusions.gitignore +28 -0
  152. package/dist/analyzers/tools/exclusions.d.ts +33 -6
  153. package/dist/analyzers/tools/exclusions.d.ts.map +1 -1
  154. package/dist/analyzers/tools/exclusions.js +95 -26
  155. package/dist/analyzers/tools/exclusions.js.map +1 -1
  156. package/dist/analyzers/tools/generic.d.ts +17 -2
  157. package/dist/analyzers/tools/generic.d.ts.map +1 -1
  158. package/dist/analyzers/tools/generic.js +206 -109
  159. package/dist/analyzers/tools/generic.js.map +1 -1
  160. package/dist/analyzers/tools/gitleaks.d.ts.map +1 -1
  161. package/dist/analyzers/tools/gitleaks.js +48 -1
  162. package/dist/analyzers/tools/gitleaks.js.map +1 -1
  163. package/dist/analyzers/tools/graphify.d.ts +30 -2
  164. package/dist/analyzers/tools/graphify.d.ts.map +1 -1
  165. package/dist/analyzers/tools/graphify.js +131 -15
  166. package/dist/analyzers/tools/graphify.js.map +1 -1
  167. package/dist/analyzers/tools/jscpd.d.ts +12 -2
  168. package/dist/analyzers/tools/jscpd.d.ts.map +1 -1
  169. package/dist/analyzers/tools/jscpd.js +129 -6
  170. package/dist/analyzers/tools/jscpd.js.map +1 -1
  171. package/dist/analyzers/tools/minified-detection.d.ts +9 -0
  172. package/dist/analyzers/tools/minified-detection.d.ts.map +1 -0
  173. package/dist/analyzers/tools/minified-detection.js +147 -0
  174. package/dist/analyzers/tools/minified-detection.js.map +1 -0
  175. package/dist/analyzers/tools/nuget-package-reference.d.ts +131 -0
  176. package/dist/analyzers/tools/nuget-package-reference.d.ts.map +1 -0
  177. package/dist/analyzers/tools/nuget-package-reference.js +175 -0
  178. package/dist/analyzers/tools/nuget-package-reference.js.map +1 -0
  179. package/dist/analyzers/tools/osv-scanner-deps.d.ts +48 -0
  180. package/dist/analyzers/tools/osv-scanner-deps.d.ts.map +1 -0
  181. package/dist/analyzers/tools/{osv-scanner-maven.js → osv-scanner-deps.js} +78 -46
  182. package/dist/analyzers/tools/osv-scanner-deps.js.map +1 -0
  183. package/dist/analyzers/tools/osv.d.ts +36 -0
  184. package/dist/analyzers/tools/osv.d.ts.map +1 -1
  185. package/dist/analyzers/tools/osv.js +26 -0
  186. package/dist/analyzers/tools/osv.js.map +1 -1
  187. package/dist/analyzers/tools/parallel.d.ts +1 -1
  188. package/dist/analyzers/tools/parallel.d.ts.map +1 -1
  189. package/dist/analyzers/tools/parallel.js +2 -2
  190. package/dist/analyzers/tools/parallel.js.map +1 -1
  191. package/dist/analyzers/tools/risk-score.d.ts +7 -0
  192. package/dist/analyzers/tools/risk-score.d.ts.map +1 -1
  193. package/dist/analyzers/tools/risk-score.js +9 -2
  194. package/dist/analyzers/tools/risk-score.js.map +1 -1
  195. package/dist/analyzers/tools/run-tests-helper.d.ts +43 -0
  196. package/dist/analyzers/tools/run-tests-helper.d.ts.map +1 -0
  197. package/dist/analyzers/tools/run-tests-helper.js +156 -0
  198. package/dist/analyzers/tools/run-tests-helper.js.map +1 -0
  199. package/dist/analyzers/tools/runner.d.ts.map +1 -1
  200. package/dist/analyzers/tools/runner.js +75 -12
  201. package/dist/analyzers/tools/runner.js.map +1 -1
  202. package/dist/analyzers/tools/semgrep.d.ts +39 -2
  203. package/dist/analyzers/tools/semgrep.d.ts.map +1 -1
  204. package/dist/analyzers/tools/semgrep.js +131 -9
  205. package/dist/analyzers/tools/semgrep.js.map +1 -1
  206. package/dist/analyzers/tools/timing.d.ts +17 -3
  207. package/dist/analyzers/tools/timing.d.ts.map +1 -1
  208. package/dist/analyzers/tools/timing.js +36 -14
  209. package/dist/analyzers/tools/timing.js.map +1 -1
  210. package/dist/analyzers/tools/tool-registry.d.ts +10 -0
  211. package/dist/analyzers/tools/tool-registry.d.ts.map +1 -1
  212. package/dist/analyzers/tools/tool-registry.js +120 -1
  213. package/dist/analyzers/tools/tool-registry.js.map +1 -1
  214. package/dist/analyzers/tools/tools-unavailable-prose.d.ts +18 -0
  215. package/dist/analyzers/tools/tools-unavailable-prose.d.ts.map +1 -0
  216. package/dist/analyzers/tools/tools-unavailable-prose.js +69 -0
  217. package/dist/analyzers/tools/tools-unavailable-prose.js.map +1 -0
  218. package/dist/analyzers/tools/upgrade-plan-resolver.d.ts.map +1 -1
  219. package/dist/analyzers/tools/upgrade-plan-resolver.js +7 -0
  220. package/dist/analyzers/tools/upgrade-plan-resolver.js.map +1 -1
  221. package/dist/analyzers/tools/vendored-advisor.d.ts +43 -0
  222. package/dist/analyzers/tools/vendored-advisor.d.ts.map +1 -0
  223. package/dist/analyzers/tools/vendored-advisor.js +107 -0
  224. package/dist/analyzers/tools/vendored-advisor.js.map +1 -0
  225. package/dist/analyzers/tools/walk-paths.d.ts +78 -0
  226. package/dist/analyzers/tools/walk-paths.d.ts.map +1 -0
  227. package/dist/analyzers/tools/walk-paths.js +150 -0
  228. package/dist/analyzers/tools/walk-paths.js.map +1 -0
  229. package/dist/analyzers/tools/walk-source-files.d.ts +70 -0
  230. package/dist/analyzers/tools/walk-source-files.d.ts.map +1 -0
  231. package/dist/analyzers/tools/walk-source-files.js +369 -0
  232. package/dist/analyzers/tools/walk-source-files.js.map +1 -0
  233. package/dist/analyzers/types.d.ts +204 -4
  234. package/dist/analyzers/types.d.ts.map +1 -1
  235. package/dist/analyzers/xlsx/bom.d.ts.map +1 -1
  236. package/dist/analyzers/xlsx/bom.js +8 -1
  237. package/dist/analyzers/xlsx/bom.js.map +1 -1
  238. package/dist/cli.d.ts.map +1 -1
  239. package/dist/cli.js +557 -189
  240. package/dist/cli.js.map +1 -1
  241. package/dist/constants.d.ts +1 -0
  242. package/dist/constants.d.ts.map +1 -1
  243. package/dist/detect.d.ts.map +1 -1
  244. package/dist/detect.js +24 -7
  245. package/dist/detect.js.map +1 -1
  246. package/dist/doctor.d.ts.map +1 -1
  247. package/dist/doctor.js +103 -53
  248. package/dist/doctor.js.map +1 -1
  249. package/dist/languages/capabilities/provider.d.ts +130 -1
  250. package/dist/languages/capabilities/provider.d.ts.map +1 -1
  251. package/dist/languages/capabilities/types.d.ts +68 -7
  252. package/dist/languages/capabilities/types.d.ts.map +1 -1
  253. package/dist/languages/csharp.d.ts +15 -1
  254. package/dist/languages/csharp.d.ts.map +1 -1
  255. package/dist/languages/csharp.js +624 -146
  256. package/dist/languages/csharp.js.map +1 -1
  257. package/dist/languages/go.d.ts.map +1 -1
  258. package/dist/languages/go.js +89 -11
  259. package/dist/languages/go.js.map +1 -1
  260. package/dist/languages/index.d.ts +131 -2
  261. package/dist/languages/index.d.ts.map +1 -1
  262. package/dist/languages/index.js +208 -0
  263. package/dist/languages/index.js.map +1 -1
  264. package/dist/languages/java.d.ts.map +1 -1
  265. package/dist/languages/java.js +121 -32
  266. package/dist/languages/java.js.map +1 -1
  267. package/dist/languages/kotlin.d.ts.map +1 -1
  268. package/dist/languages/kotlin.js +140 -32
  269. package/dist/languages/kotlin.js.map +1 -1
  270. package/dist/languages/python.d.ts.map +1 -1
  271. package/dist/languages/python.js +149 -44
  272. package/dist/languages/python.js.map +1 -1
  273. package/dist/languages/ruby.d.ts +115 -0
  274. package/dist/languages/ruby.d.ts.map +1 -0
  275. package/dist/languages/ruby.js +665 -0
  276. package/dist/languages/ruby.js.map +1 -0
  277. package/dist/languages/rust.d.ts.map +1 -1
  278. package/dist/languages/rust.js +103 -16
  279. package/dist/languages/rust.js.map +1 -1
  280. package/dist/languages/types.d.ts +228 -5
  281. package/dist/languages/types.d.ts.map +1 -1
  282. package/dist/languages/typescript.d.ts.map +1 -1
  283. package/dist/languages/typescript.js +201 -14
  284. package/dist/languages/typescript.js.map +1 -1
  285. package/dist/scoring/dimensions/documentation.d.ts +53 -0
  286. package/dist/scoring/dimensions/documentation.d.ts.map +1 -0
  287. package/dist/scoring/dimensions/documentation.js +106 -0
  288. package/dist/scoring/dimensions/documentation.js.map +1 -0
  289. package/dist/scoring/dimensions/dx.d.ts +53 -0
  290. package/dist/scoring/dimensions/dx.d.ts.map +1 -0
  291. package/dist/scoring/dimensions/dx.js +105 -0
  292. package/dist/scoring/dimensions/dx.js.map +1 -0
  293. package/dist/scoring/dimensions/maintainability.d.ts +53 -0
  294. package/dist/scoring/dimensions/maintainability.d.ts.map +1 -0
  295. package/dist/scoring/dimensions/maintainability.js +101 -0
  296. package/dist/scoring/dimensions/maintainability.js.map +1 -0
  297. package/dist/scoring/dimensions/quality.d.ts +108 -0
  298. package/dist/scoring/dimensions/quality.d.ts.map +1 -0
  299. package/dist/scoring/dimensions/quality.js +174 -0
  300. package/dist/scoring/dimensions/quality.js.map +1 -0
  301. package/dist/scoring/dimensions/security.d.ts +84 -0
  302. package/dist/scoring/dimensions/security.d.ts.map +1 -0
  303. package/dist/scoring/dimensions/security.js +135 -0
  304. package/dist/scoring/dimensions/security.js.map +1 -0
  305. package/dist/scoring/dimensions/testing.d.ts +56 -0
  306. package/dist/scoring/dimensions/testing.d.ts.map +1 -0
  307. package/dist/scoring/dimensions/testing.js +98 -0
  308. package/dist/scoring/dimensions/testing.js.map +1 -0
  309. package/dist/scoring/evaluator.d.ts +27 -0
  310. package/dist/scoring/evaluator.d.ts.map +1 -0
  311. package/dist/scoring/evaluator.js +124 -0
  312. package/dist/scoring/evaluator.js.map +1 -0
  313. package/dist/scoring/format.d.ts +34 -0
  314. package/dist/scoring/format.d.ts.map +1 -0
  315. package/dist/scoring/format.js +63 -0
  316. package/dist/scoring/format.js.map +1 -0
  317. package/dist/scoring/index.d.ts +37 -0
  318. package/dist/scoring/index.d.ts.map +1 -0
  319. package/dist/scoring/index.js +57 -0
  320. package/dist/scoring/index.js.map +1 -0
  321. package/dist/scoring/overall.d.ts +54 -0
  322. package/dist/scoring/overall.d.ts.map +1 -0
  323. package/dist/scoring/overall.js +76 -0
  324. package/dist/scoring/overall.js.map +1 -0
  325. package/dist/scoring/result.d.ts +111 -0
  326. package/dist/scoring/result.d.ts.map +1 -0
  327. package/dist/scoring/result.js +14 -0
  328. package/dist/scoring/result.js.map +1 -0
  329. package/dist/scoring/spec.d.ts +76 -0
  330. package/dist/scoring/spec.d.ts.map +1 -0
  331. package/dist/scoring/spec.js +22 -0
  332. package/dist/scoring/spec.js.map +1 -0
  333. package/dist/scoring/thresholds.d.ts +56 -0
  334. package/dist/scoring/thresholds.d.ts.map +1 -0
  335. package/dist/scoring/thresholds.js +75 -0
  336. package/dist/scoring/thresholds.js.map +1 -0
  337. package/dist/tools-cli.d.ts.map +1 -1
  338. package/dist/tools-cli.js +21 -2
  339. package/dist/tools-cli.js.map +1 -1
  340. package/dist/types.d.ts +17 -1
  341. package/dist/types.d.ts.map +1 -1
  342. package/package.json +1 -1
  343. package/templates/.claude/commands/dashboard.md +17 -9
  344. package/templates/.claude/rules/ruby.md +11 -0
  345. package/templates/configs/ruby/README.md +6 -0
  346. package/dist/analyzers/scoring.d.ts +0 -49
  347. package/dist/analyzers/scoring.d.ts.map +0 -1
  348. package/dist/analyzers/scoring.js +0 -422
  349. package/dist/analyzers/scoring.js.map +0 -1
  350. package/dist/analyzers/security/scoring.d.ts +0 -29
  351. package/dist/analyzers/security/scoring.d.ts.map +0 -1
  352. package/dist/analyzers/security/scoring.js +0 -40
  353. package/dist/analyzers/security/scoring.js.map +0 -1
  354. package/dist/analyzers/tools/osv-scanner-maven.d.ts +0 -42
  355. package/dist/analyzers/tools/osv-scanner-maven.d.ts.map +0 -1
  356. package/dist/analyzers/tools/osv-scanner-maven.js.map +0 -1
@@ -0,0 +1,369 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.clearWalkCache = clearWalkCache;
37
+ exports.walkSourceFiles = walkSourceFiles;
38
+ exports.countLineMatches = countLineMatches;
39
+ exports.commentSyntaxFor = commentSyntaxFor;
40
+ exports.isCommentLine = isCommentLine;
41
+ exports.packSourceExtensions = packSourceExtensions;
42
+ /**
43
+ * G_v4_7 (2.4.7) — canonical source-file walker + line-match counter.
44
+ *
45
+ * Every consumer that needs "the list of source files in this repo"
46
+ * routes through `walkSourceFiles`. Every consumer that needs "how
47
+ * many lines match pattern P across source files" routes through
48
+ * `countLineMatches`. ONE walker, ONE counter — replaces the four
49
+ * site-specific implementations that were drifting (D075, D079).
50
+ *
51
+ * NEVER shells out. Pre-fix `grep -rEf <pat> --include=*.js .` on
52
+ * web-client produced 67MB of stdout (matched minified .js content)
53
+ * and silently failed with ENOBUFS — `run()`'s 64MB ceiling truncated
54
+ * to empty string, `consoleLogCount` reported 0 when reality was ~1370
55
+ * (D082/D083). Walking the curated set in JS and scanning each file's
56
+ * lines in-process eliminates the maxBuffer ceiling entirely.
57
+ *
58
+ * Filter pipeline (per file encountered):
59
+ * 1. Directory prune at entry: `isExcludedPath(cwd, relDir)` → never descend.
60
+ * 2. Extension filter (default `allSourceExtensions()`).
61
+ * 3. Path-pattern filter: `isExcludedPath(cwd, relPath)`.
62
+ * 4. Autogen basename glob (`*.designer.cs`, `*.pb.go`, …).
63
+ * 5. Autogen header marker (first 2KB).
64
+ * 6. Test-file filter (skip unless `includeTests: true`).
65
+ * 7. Pack scoping (when `opts.packId` set).
66
+ */
67
+ const fs = __importStar(require("fs"));
68
+ const path = __importStar(require("path"));
69
+ const exclusions_1 = require("./exclusions");
70
+ const autogen_header_1 = require("./autogen-header");
71
+ const minified_detection_1 = require("./minified-detection");
72
+ const languages_1 = require("../../languages");
73
+ /** Cache: one entry per (cwd, opts-fingerprint). Cleared via
74
+ * `clearWalkCache()`. Same memo pattern as `loadExclusions`. */
75
+ const walkCache = new Map();
76
+ function clearWalkCache() {
77
+ walkCache.clear();
78
+ }
79
+ /**
80
+ * Walk the source tree rooted at `cwd` and return relative POSIX paths
81
+ * (no leading `./`) sorted for determinism. Returns `[]` for non-
82
+ * existent or non-directory roots — never throws.
83
+ */
84
+ function walkSourceFiles(cwd, opts = {}) {
85
+ const resolved = resolveOpts(opts);
86
+ const cacheKey = `${cwd}\0${cacheKeyFor(opts)}`;
87
+ const hit = walkCache.get(cacheKey);
88
+ if (hit)
89
+ return hit;
90
+ const out = [];
91
+ try {
92
+ walkDir(cwd, '', resolved, out);
93
+ }
94
+ catch {
95
+ // I/O error mid-walk: surface what we found so far.
96
+ }
97
+ out.sort();
98
+ walkCache.set(cacheKey, out);
99
+ return out;
100
+ }
101
+ function resolveOpts(opts) {
102
+ // Precedence: explicit `extensions` > pack-scoped extensions > all packs.
103
+ let exts;
104
+ if (opts.extensions) {
105
+ exts = opts.extensions;
106
+ }
107
+ else if (opts.packId) {
108
+ exts = (0, languages_1.getLanguage)(opts.packId)?.sourceExtensions ?? [];
109
+ }
110
+ else {
111
+ exts = (0, languages_1.allSourceExtensions)();
112
+ }
113
+ return {
114
+ extensions: new Set(exts.map((e) => (e.startsWith('.') ? e : `.${e}`))),
115
+ includeTests: opts.includeTests ?? false,
116
+ includeAutogen: opts.includeAutogen ?? false,
117
+ respectIgnore: opts.respectIgnore ?? true,
118
+ autogenBasenamePatterns: opts.includeAutogen ? [] : (0, languages_1.allAutogenSourcePatterns)(),
119
+ testFilePatterns: splitTestPatterns((0, languages_1.allTestFilePatterns)()),
120
+ };
121
+ }
122
+ function cacheKeyFor(opts) {
123
+ return JSON.stringify([
124
+ opts.extensions ?? null,
125
+ opts.includeTests ?? false,
126
+ opts.includeAutogen ?? false,
127
+ opts.respectIgnore ?? true,
128
+ opts.packId ?? null,
129
+ ]);
130
+ }
131
+ function walkDir(cwd, relDir, opts, out) {
132
+ const absDir = relDir ? path.join(cwd, relDir) : cwd;
133
+ let entries;
134
+ try {
135
+ entries = fs.readdirSync(absDir, { withFileTypes: true });
136
+ }
137
+ catch {
138
+ return;
139
+ }
140
+ for (const ent of entries) {
141
+ const relPath = relDir ? `${relDir}/${ent.name}` : ent.name;
142
+ if (ent.isDirectory()) {
143
+ // Prune at directory boundary so node_modules/ etc. are never
144
+ // descended into. Massive perf win on minified-JS-heavy repos.
145
+ if (opts.respectIgnore && (0, exclusions_1.isExcludedPath)(cwd, relPath))
146
+ continue;
147
+ // Skip dot-directories ALWAYS (.git, .vscode, .idea, .dxkit…).
148
+ // These rarely appear in `.gitignore` but are universally noise.
149
+ if (ent.name.startsWith('.'))
150
+ continue;
151
+ walkDir(cwd, relPath, opts, out);
152
+ continue;
153
+ }
154
+ if (!ent.isFile())
155
+ continue;
156
+ // Extension gate first (cheap).
157
+ const ext = path.extname(ent.name);
158
+ if (!opts.extensions.has(ext))
159
+ continue;
160
+ // Pack scoping (cheap — done after extension because packId is rare).
161
+ if (opts.respectIgnore && (0, exclusions_1.isExcludedPath)(cwd, relPath))
162
+ continue;
163
+ // Test-file filter.
164
+ if (!opts.includeTests && isTestFile(relPath, ent.name, opts.testFilePatterns))
165
+ continue;
166
+ // Autogen basename glob.
167
+ if (!opts.includeAutogen && matchesAnyBasenameGlob(ent.name, opts.autogenBasenamePatterns)) {
168
+ continue;
169
+ }
170
+ // Autogen header marker (most expensive — reads first 2KB).
171
+ if (!opts.includeAutogen && (0, autogen_header_1.isAutogeneratedByHeader)(path.join(absDir, ent.name)))
172
+ continue;
173
+ // Minified / bundled output detection — catches webpack/vite/esbuild
174
+ // hash-suffixed chunks, CDN-downloaded vendor libs dropped into
175
+ // public/, and pre-minified vendored editors that slip past the
176
+ // standard exclusion list. Same opt-in shape as the autogen
177
+ // checks — `includeAutogen: true` keeps them. Cheap: only fires
178
+ // on .js/.jsx/.mjs/.cjs/.css/.scss/.sass/.less and reads 4KB.
179
+ if (!opts.includeAutogen && (0, minified_detection_1.isLikelyMinified)(path.join(absDir, ent.name)))
180
+ continue;
181
+ out.push(relPath);
182
+ }
183
+ }
184
+ function isTestFile(relPath, basename, patterns) {
185
+ for (const pat of patterns.nameOnly) {
186
+ if (matchesBasenameGlob(pat, basename))
187
+ return true;
188
+ }
189
+ for (const pat of patterns.pathAnchored) {
190
+ // Path-anchored patterns like `tests/*.rs` — match against the
191
+ // relative path. Convert glob to regex (path-segment aware).
192
+ if (matchesPathGlob(pat, relPath))
193
+ return true;
194
+ }
195
+ return false;
196
+ }
197
+ function matchesAnyBasenameGlob(basename, patterns) {
198
+ for (const pat of patterns) {
199
+ if (matchesBasenameGlob(pat, basename))
200
+ return true;
201
+ }
202
+ return false;
203
+ }
204
+ function matchesBasenameGlob(pat, base) {
205
+ if (!pat.includes('*') && !pat.includes('?'))
206
+ return pat === base;
207
+ const regex = globToRegex(pat, false);
208
+ return regex.test(base);
209
+ }
210
+ function matchesPathGlob(pat, relPath) {
211
+ // `tests/*.rs` should match `tests/foo.rs` AND `crate/tests/foo.rs`
212
+ // (path-anchored "anywhere in tree"). Mirrors find's `-path "*/x"`.
213
+ const regex = globToRegex(pat, true);
214
+ return regex.test(relPath);
215
+ }
216
+ function globToRegex(pat, allowSlash) {
217
+ const star = allowSlash ? '.*' : '[^/]*';
218
+ const body = pat
219
+ .replace(/[.+^${}()|[\]\\]/g, '\\$&')
220
+ .replace(/\*/g, star)
221
+ .replace(/\?/g, allowSlash ? '.' : '[^/]');
222
+ // Path-anchored: allow optional leading directory segments.
223
+ return new RegExp(allowSlash ? `(?:^|/)${body}$` : `^${body}$`, 'i');
224
+ }
225
+ function splitTestPatterns(patterns) {
226
+ const nameOnly = [];
227
+ const pathAnchored = [];
228
+ for (const p of patterns) {
229
+ if (p.includes('/'))
230
+ pathAnchored.push(p);
231
+ else
232
+ nameOnly.push(p);
233
+ }
234
+ return { nameOnly, pathAnchored };
235
+ }
236
+ /**
237
+ * Read each file once, scan in-process. Pass `patterns` as compiled
238
+ * regexes for repeated use, or as strings (compiled here with global
239
+ * flag). Each line is tested against the alternation; multiple
240
+ * patterns are unioned via `RegExp` `|` — pass them pre-merged for
241
+ * best performance.
242
+ */
243
+ function countLineMatches(cwd, files, patterns, opts = {}) {
244
+ const mode = opts.mode ?? 'lines';
245
+ const skipComments = opts.skipComments ?? false;
246
+ const topN = opts.perFileTopN ?? 0;
247
+ const compiled = compilePatterns(patterns);
248
+ if (compiled.length === 0)
249
+ return { lines: 0, files: 0, perFile: [] };
250
+ let totalLines = 0;
251
+ let totalFiles = 0;
252
+ const perFile = [];
253
+ for (const relPath of files) {
254
+ let content;
255
+ try {
256
+ content = fs.readFileSync(path.join(cwd, relPath), 'utf-8');
257
+ }
258
+ catch {
259
+ continue;
260
+ }
261
+ const commentSyntax = skipComments ? commentSyntaxFor(relPath) : null;
262
+ let fileCount = 0;
263
+ for (const rawLine of content.split('\n')) {
264
+ if (commentSyntax && isCommentLine(rawLine, commentSyntax))
265
+ continue;
266
+ let matched = false;
267
+ for (const re of compiled) {
268
+ // Reset lastIndex on `g` flag patterns to avoid stateful skips.
269
+ re.lastIndex = 0;
270
+ if (re.test(rawLine)) {
271
+ matched = true;
272
+ break;
273
+ }
274
+ }
275
+ if (matched)
276
+ fileCount++;
277
+ }
278
+ if (fileCount > 0) {
279
+ totalFiles++;
280
+ totalLines += fileCount;
281
+ if (topN > 0)
282
+ perFile.push({ file: relPath, count: fileCount });
283
+ }
284
+ }
285
+ let topOffenders = [];
286
+ if (topN > 0) {
287
+ perFile.sort((a, b) => b.count - a.count);
288
+ topOffenders = perFile.slice(0, topN);
289
+ }
290
+ return {
291
+ lines: mode === 'lines' ? totalLines : totalFiles,
292
+ files: totalFiles,
293
+ perFile: topOffenders,
294
+ };
295
+ }
296
+ function compilePatterns(patterns) {
297
+ const out = [];
298
+ for (const p of patterns) {
299
+ if (p instanceof RegExp) {
300
+ out.push(p);
301
+ }
302
+ else if (typeof p === 'string' && p.length > 0) {
303
+ try {
304
+ out.push(new RegExp(p));
305
+ }
306
+ catch {
307
+ // Skip un-compilable patterns rather than throwing — matches
308
+ // grep's behaviour of warning and continuing.
309
+ }
310
+ }
311
+ }
312
+ return out;
313
+ }
314
+ function commentSyntaxFor(relPath) {
315
+ const ext = path.extname(relPath).toLowerCase();
316
+ switch (ext) {
317
+ case '.ts':
318
+ case '.tsx':
319
+ case '.js':
320
+ case '.jsx':
321
+ case '.mjs':
322
+ case '.cjs':
323
+ case '.go':
324
+ case '.rs':
325
+ case '.java':
326
+ case '.kt':
327
+ case '.kts':
328
+ case '.cs':
329
+ case '.cpp':
330
+ case '.cxx':
331
+ case '.cc':
332
+ case '.c':
333
+ case '.h':
334
+ case '.hpp':
335
+ case '.swift':
336
+ case '.scala':
337
+ return 'slash';
338
+ case '.py':
339
+ case '.rb':
340
+ case '.sh':
341
+ case '.bash':
342
+ case '.zsh':
343
+ case '.yml':
344
+ case '.yaml':
345
+ case '.toml':
346
+ case '.r':
347
+ return 'hash';
348
+ default:
349
+ return 'none';
350
+ }
351
+ }
352
+ function isCommentLine(rawLine, syntax) {
353
+ if (syntax === 'none')
354
+ return false;
355
+ const trimmed = rawLine.trimStart();
356
+ if (!trimmed)
357
+ return false;
358
+ if (syntax === 'slash') {
359
+ return trimmed.startsWith('//') || trimmed.startsWith('/*') || trimmed.startsWith('*');
360
+ }
361
+ return trimmed.startsWith('#');
362
+ }
363
+ // ─── Re-exports for test convenience ────────────────────────────────────────
364
+ /** Surface the pack-aware `sourceExtensions` for a given packId. Used
365
+ * when callers want to walk one pack's files but bypass the registry. */
366
+ function packSourceExtensions(packId) {
367
+ return (0, languages_1.getLanguage)(packId)?.sourceExtensions ?? [];
368
+ }
369
+ //# sourceMappingURL=walk-source-files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"walk-source-files.js","sourceRoot":"","sources":["../../../src/analyzers/tools/walk-source-files.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,9 @@
6
6
  * - Scores come from formulas, not judgment
7
7
  * - Tools are layered: always-available (grep/find/git) -> project tools -> optional tools
8
8
  */
9
- import type { CodePatternsResult, CoverageResult, DepVulnResult, DuplicationResult, ImportsResult, LintResult, SecretsResult, StructuralResult, TestFrameworkResult } from '../languages/capabilities/types';
9
+ import type { CodePatternsResult, CoverageResult, DepVulnResult, DuplicationResult, ImportsResult, LicensesResult, LintResult, SecretsResult, StructuralResult, TestFrameworkResult } from '../languages/capabilities/types';
10
+ import type { CapApplied, Deduction, Rating, TopAction } from '../scoring';
11
+ import type { SecurityAggregate } from './security/aggregator';
10
12
  /**
11
13
  * Raw metrics gathered by tool runners — the non-capability signals that
12
14
  * survive into 2.0. Every capability-owned field (lint, depVulns, coverage,
@@ -29,6 +31,17 @@ export interface HealthMetrics {
29
31
  filesOver500Lines: number;
30
32
  largestFileLines: number;
31
33
  largestFilePath: string;
34
+ /**
35
+ * 2.4.7 — top N largest files by line count, sorted desc. Backing
36
+ * data for the "Top Files by Size" markdown section. Index 0 is the
37
+ * single largest (mirrors `largestFileLines` / `largestFilePath`,
38
+ * kept for back-compat). Capped to top 10 to keep the report
39
+ * compact.
40
+ */
41
+ largestFiles: Array<{
42
+ path: string;
43
+ lines: number;
44
+ }>;
32
45
  consoleLogCount: number;
33
46
  anyTypeCount: number;
34
47
  readmeLines: number;
@@ -42,8 +55,37 @@ export interface HealthMetrics {
42
55
  privateKeyFiles: number;
43
56
  envFilesInGit: number;
44
57
  tlsDisabledCount: number;
58
+ todoCount: number;
59
+ fixmeCount: number;
60
+ hackCount: number;
61
+ staleFiles: number;
62
+ mixedLanguages: boolean;
63
+ commentRatio: number | null;
64
+ /**
65
+ * Count of source files matching any active language pack's
66
+ * `architecturalShape.primaryComponentPaths`. The name preserves
67
+ * the original "controllers" identifier for schema continuity, but
68
+ * the semantics are broader than HTTP controllers: a React project
69
+ * counts components/pages here; a WinForms project counts Forms
70
+ * and ViewModels; a Spring Boot project counts controllers and
71
+ * services. The label rendered in prose comes from
72
+ * `dominantVocabulary(stack.languages)`.
73
+ */
45
74
  controllers: number;
75
+ /**
76
+ * Count of source files matching any active language pack's
77
+ * `architecturalShape.modelPaths` (ORM entities, DTOs, schemas).
78
+ * Same schema-continuity note as `controllers`.
79
+ */
46
80
  models: number;
81
+ /**
82
+ * Count of source files matching any active language pack's
83
+ * `architecturalShape.routePaths` — the narrower subset of HTTP
84
+ * route handlers / API endpoints. Gates the "Add API documentation"
85
+ * health action: zero on pure-frontend / desktop apps, so the
86
+ * action stays correctly silenced there.
87
+ */
88
+ routeHandlerFiles: number;
47
89
  directories: number;
48
90
  languages: Array<{
49
91
  name: string;
@@ -68,13 +110,62 @@ export interface HealthMetrics {
68
110
  blank: number;
69
111
  }> | null;
70
112
  }
71
- /** Score for a single dimension (0-100). */
113
+ /**
114
+ * Score for a single dimension (0-100).
115
+ *
116
+ * `rating` is the industry-anchored letter grade derived from `score`
117
+ * via uniform thresholds in `src/scoring/thresholds.ts` (A ≥ 80,
118
+ * B ≥ 60, C ≥ 40, D ≥ 20, E < 20). Same boundaries dxkit has always
119
+ * used; the letter replaces the previous descriptive enum so the
120
+ * customer surface is one concept (a letter) rather than three
121
+ * (number + descriptive status + letter elsewhere).
122
+ *
123
+ * Provenance fields (`rawScore`, `rawPenalty`, `methodology`,
124
+ * `deductions`, `capsApplied`, `topActions`) are populated by
125
+ * dimension adapters that have migrated to declarative spec
126
+ * evaluation in `src/scoring/`. Renderers that consume these
127
+ * structures should treat them as optional and degrade gracefully
128
+ * when absent — the migration lands one dimension at a time. After
129
+ * all six dimensions migrate, the optional markers are tightened in
130
+ * `scripts/check-architecture.sh`.
131
+ */
72
132
  export interface DimensionScore {
73
133
  score: number;
74
134
  maxScore: number;
75
- status: 'critical' | 'poor' | 'fair' | 'good' | 'excellent';
135
+ rating: Rating;
76
136
  metrics: Record<string, number | string | boolean | null>;
77
137
  details: string;
138
+ rawScore?: number;
139
+ rawPenalty?: number;
140
+ methodology?: string;
141
+ deductions?: readonly Deduction[];
142
+ capsApplied?: readonly CapApplied[];
143
+ topActions?: readonly TopAction[];
144
+ }
145
+ /**
146
+ * Bundle of every signal a dimension scorer can read. Health-side
147
+ * adapters (`src/analyzers/<dim>/shallow.ts`) build a `ScoreInput`
148
+ * from gathered data and convert to a per-dimension spec input before
149
+ * calling `evaluateSpec`.
150
+ *
151
+ * Lives here in `types.ts` because `ScoreInput` is the health-side
152
+ * aggregator — it composes `HealthMetrics` (filesystem-derived) +
153
+ * `CapabilityReport` (tool-derived) into one bundle the dimension
154
+ * adapters consume. Not a scoring-system concept; the scoring system
155
+ * receives per-dimension spec inputs (e.g. `SecurityScoreInput`).
156
+ */
157
+ export interface ScoreInput {
158
+ metrics: HealthMetrics;
159
+ capabilities: CapabilityReport;
160
+ /**
161
+ * Active language flags from the detected stack. Dimension scorers
162
+ * use this to pick per-stack vocabulary for prose (Maintainability)
163
+ * and to gate "Add API documentation" recommendations on real
164
+ * route-handler presence. Optional so legacy fixtures + tests that
165
+ * don't construct a stack still typecheck; consumers fall back to
166
+ * generic words / no per-stack behavior when absent.
167
+ */
168
+ languageFlags?: import('../types').DetectedStack['languages'];
78
169
  }
79
170
  /**
80
171
  * Aggregated capability envelopes attached to a HealthReport.
@@ -99,6 +190,97 @@ export interface CapabilityReport {
99
190
  codePatterns?: CodePatternsResult;
100
191
  duplication?: DuplicationResult;
101
192
  structural?: StructuralResult;
193
+ /**
194
+ * Per-pack license inventory, aggregated across active language
195
+ * packs. Populated alongside `licensesAvailability` so consumers
196
+ * can distinguish "0 packages, scan ran cleanly" from "0 packages,
197
+ * scanner not installed." The licenses subcommand and the BoM
198
+ * report both read from this single envelope — same canonical
199
+ * source, so cross-report drift on the package list becomes
200
+ * structurally impossible.
201
+ */
202
+ licenses?: LicensesResult;
203
+ /**
204
+ * Availability metadata for the licenses aggregation. Sibling of
205
+ * `licenses` to match the depVulns shape. `available === false`
206
+ * only when at least one active pack with a licenses provider
207
+ * returned an `'unavailable'` outcome. `'no-manifest'` outcomes do
208
+ * NOT degrade availability — that's a clean "nothing to license"
209
+ * state on polyglot repos where one pack activates but has nothing
210
+ * to scan. `unavailableReason` carries the pack name + reason of
211
+ * the first unavailable outcome for the markdown notice. Empty
212
+ * string when available.
213
+ */
214
+ licensesAvailability?: {
215
+ available: boolean;
216
+ unavailableReason: string;
217
+ };
218
+ /**
219
+ * Availability metadata for the LINT dispatch. Sibling of
220
+ * `lint` so both consumers (health-side scoreQualityDimension +
221
+ * standalone analyzeQuality) can distinguish "no active pack
222
+ * declared a lint capability" (available: true, no envelope —
223
+ * vacuous "clean") from "active packs attempted lint but every
224
+ * provider returned null" (available: false, no envelope —
225
+ * actionable "not run, install deps"). Populated from
226
+ * `gatherWithProvenance.skipped` in the cache builder.
227
+ */
228
+ lintAvailability?: {
229
+ available: boolean;
230
+ unavailableReason: string;
231
+ };
232
+ /** Availability for CODE_PATTERNS (semgrep). Same shape as
233
+ * lintAvailability — distinguishes "no rulesets active"
234
+ * (vacuous) from "semgrep was attempted but every provider
235
+ * returned null" (actionable; tool may have OOM'd or timed
236
+ * out under parallel load). */
237
+ codePatternsAvailability?: {
238
+ available: boolean;
239
+ unavailableReason: string;
240
+ };
241
+ /** Availability for DUPLICATION (jscpd). Same shape. */
242
+ duplicationAvailability?: {
243
+ available: boolean;
244
+ unavailableReason: string;
245
+ };
246
+ /** Availability for STRUCTURAL (graphify). Same shape. */
247
+ structuralAvailability?: {
248
+ available: boolean;
249
+ unavailableReason: string;
250
+ };
251
+ /**
252
+ * D025b (2.4.7): availability metadata for the depVulns aggregation.
253
+ * Sibling field rather than nested into `depVulns` so the envelope
254
+ * shape stays a clean `DepVulnResult` (matches the other capability
255
+ * fields). `available === false` only when at least one active pack
256
+ * returned an `'unavailable'` outcome (tool missing, no output, parse
257
+ * fail). `no-manifest` outcomes do NOT degrade availability — that's
258
+ * a clean "nothing to scan here" state. `unavailableReason` carries
259
+ * the pack name + reason of the first unavailable outcome for the
260
+ * markdown notice (e.g. "csharp: dotnet list package produced no
261
+ * output (see D036)"). Empty when available.
262
+ *
263
+ * Read by the health-side adapter `toSecurityScoreInput` to set
264
+ * `SecurityScoreInput.depVulnsAvailable`, which the security scorer
265
+ * uses to cap the dimension at 65/100. Populated by
266
+ * `gatherDepVulnsWithAvailability` in `analyzers/security/gather.ts`.
267
+ */
268
+ depVulnsAvailability?: {
269
+ available: boolean;
270
+ unavailableReason: string;
271
+ };
272
+ /**
273
+ * G_v4_8 (2.4.7 Phase C1): the canonical `SecurityAggregate` built
274
+ * once per analyzer run from every gathered security envelope
275
+ * (secrets, file findings, code patterns, tls-bypass, dep vulns).
276
+ * Health-side scorers (`security/shallow.ts`) read severity buckets
277
+ * from this field — same source the standalone vuln-scan uses,
278
+ * which closes the D086 class of "two consumers disagree on the
279
+ * same metric." Optional so legacy `ScoreInput` fixtures (no
280
+ * health gather pipeline) still typecheck; consumers fall back to
281
+ * the pre-aggregator path when absent.
282
+ */
283
+ securityAggregate?: SecurityAggregate;
102
284
  }
103
285
  /** Complete health report. */
104
286
  export interface HealthReport {
@@ -108,7 +290,15 @@ export interface HealthReport {
108
290
  branch: string;
109
291
  summary: {
110
292
  overallScore: number;
111
- grade: 'A' | 'B' | 'C' | 'D' | 'F';
293
+ /**
294
+ * Letter rating derived from `overallScore` via the uniform
295
+ * thresholds in `src/scoring/thresholds.ts`. Matches each
296
+ * dimension's `DimensionScore.rating` semantics: A ≥ 80, B ≥ 60,
297
+ * C ≥ 40, D ≥ 20, E < 20. (Pre-2.4.7 this field was named
298
+ * `grade` and used 'F' for failing; unified to 'E' for one
299
+ * consistent letter taxonomy across dimensions + overall.)
300
+ */
301
+ rating: Rating;
112
302
  };
113
303
  dimensions: {
114
304
  testing: DimensionScore;
@@ -124,6 +314,16 @@ export interface HealthReport {
124
314
  lines: number;
125
315
  percentage: number;
126
316
  }>;
317
+ /**
318
+ * 2.4.7 — top 10 largest source files by line count (post-autogen
319
+ * exclusion). Surfaced verbatim from `HealthMetrics.largestFiles`
320
+ * so consumers (markdown report, dashboard, AI agent) don't have
321
+ * to re-derive. Empty array when no source files were counted.
322
+ */
323
+ largestFiles: Array<{
324
+ path: string;
325
+ lines: number;
326
+ }>;
127
327
  toolsUsed: string[];
128
328
  toolsUnavailable: string[];
129
329
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/analyzers/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/analyzers/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,kBAAkB,EAClB,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,aAAa,EACb,cAAc,EACd,UAAU,EACV,aAAa,EACb,gBAAgB,EAChB,mBAAmB,EACpB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC3E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE/D;;;;;;;;;GASG;AACH,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,OAAO,GAAG,IAAI,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,oBAAoB,EAAE,OAAO,CAAC;IAE9B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAE1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB;;;;;;OAMG;IACH,YAAY,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrD,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IAErB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,OAAO,CAAC;IACtB,qBAAqB,EAAE,OAAO,CAAC;IAC/B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,eAAe,EAAE,OAAO,CAAC;IAEzB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IAQzB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,OAAO,CAAC;IACxB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAE5B;;;;;;;;;OASG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;;;;;OAMG;IACH,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrF,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IAEjC,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,cAAc,EAAE,OAAO,CAAC;IACxB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IAExB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAG3B,aAAa,EAAE,KAAK,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC,GAAG,IAAI,CAAC;CACX;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC;IAC1D,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,SAAS,SAAS,EAAE,CAAC;IAClC,WAAW,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;IACpC,UAAU,CAAC,EAAE,SAAS,SAAS,EAAE,CAAC;CACnC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,aAAa,CAAC;IACvB,YAAY,EAAE,gBAAgB,CAAC;IAC/B;;;;;;;OAOG;IACH,aAAa,CAAC,EAAE,OAAO,UAAU,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;CAC/D;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,aAAa,CAAC,EAAE,mBAAmB,CAAC;IACpC,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAClC,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B;;;;;;;;OAQG;IACH,QAAQ,CAAC,EAAE,cAAc,CAAC;IAE1B;;;;;;;;;;OAUG;IACH,oBAAoB,CAAC,EAAE;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,iBAAiB,EAAE,MAAM,CAAA;KAAE,CAAC;IAEzE;;;;;;;;;OASG;IACH,gBAAgB,CAAC,EAAE;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,iBAAiB,EAAE,MAAM,CAAA;KAAE,CAAC;IAErE;;;;oCAIgC;IAChC,wBAAwB,CAAC,EAAE;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,iBAAiB,EAAE,MAAM,CAAA;KAAE,CAAC;IAE7E,wDAAwD;IACxD,uBAAuB,CAAC,EAAE;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,iBAAiB,EAAE,MAAM,CAAA;KAAE,CAAC;IAE5E,0DAA0D;IAC1D,sBAAsB,CAAC,EAAE;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,iBAAiB,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3E;;;;;;;;;;;;;;;;OAgBG;IACH,oBAAoB,CAAC,EAAE;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,iBAAiB,EAAE,MAAM,CAAA;KAAE,CAAC;IAEzE;;;;;;;;;;OAUG;IACH,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;CACvC;AAED,8BAA8B;AAC9B,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE;QACP,YAAY,EAAE,MAAM,CAAC;QACrB;;;;;;;WAOG;QACH,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,UAAU,EAAE;QACV,OAAO,EAAE,cAAc,CAAC;QACxB,OAAO,EAAE,cAAc,CAAC;QACxB,aAAa,EAAE,cAAc,CAAC;QAC9B,QAAQ,EAAE,cAAc,CAAC;QACzB,eAAe,EAAE,cAAc,CAAC;QAChC,mBAAmB,EAAE,cAAc,CAAC;KACrC,CAAC;IACF,SAAS,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrF;;;;;OAKG;IACH,YAAY,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrD,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B;;;;;OAKG;IACH,YAAY,CAAC,EAAE,gBAAgB,CAAC;CACjC"}
@@ -1 +1 @@
1
- {"version":3,"file":"bom.d.ts","sourceRoot":"","sources":["../../../src/analyzers/xlsx/bom.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAIH,OAAO,KAAK,EAAY,SAAS,EAAe,MAAM,cAAc,CAAC;AAoHrE;;GAEG;AACH,wBAAsB,SAAS,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAYlE"}
1
+ {"version":3,"file":"bom.d.ts","sourceRoot":"","sources":["../../../src/analyzers/xlsx/bom.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAIH,OAAO,KAAK,EAAY,SAAS,EAAe,MAAM,cAAc,CAAC;AAqHrE;;GAEG;AACH,wBAAsB,SAAS,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAYlE"}