@vyuhlabs/dxkit 2.4.6 → 2.4.8

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 (357) hide show
  1. package/CHANGELOG.md +1076 -0
  2. package/README.md +132 -27
  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 +667 -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 +21 -9
  38. package/dist/analyzers/developer/index.js.map +1 -1
  39. package/dist/analyzers/dispatcher.d.ts +52 -0
  40. package/dist/analyzers/dispatcher.d.ts.map +1 -1
  41. package/dist/analyzers/dispatcher.js +92 -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 +282 -34
  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 +86 -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 +197 -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 +349 -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 +104 -1
  107. package/dist/analyzers/security/gather.d.ts.map +1 -1
  108. package/dist/analyzers/security/gather.js +299 -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 +83 -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/deadline.d.ts +67 -0
  145. package/dist/analyzers/tools/deadline.d.ts.map +1 -0
  146. package/dist/analyzers/tools/deadline.js +81 -0
  147. package/dist/analyzers/tools/deadline.js.map +1 -0
  148. package/dist/analyzers/tools/debug-statements.d.ts +17 -0
  149. package/dist/analyzers/tools/debug-statements.d.ts.map +1 -0
  150. package/dist/analyzers/tools/debug-statements.js +58 -0
  151. package/dist/analyzers/tools/debug-statements.js.map +1 -0
  152. package/dist/analyzers/tools/default-exclusions.gitignore +28 -0
  153. package/dist/analyzers/tools/exclusions.d.ts +33 -6
  154. package/dist/analyzers/tools/exclusions.d.ts.map +1 -1
  155. package/dist/analyzers/tools/exclusions.js +95 -26
  156. package/dist/analyzers/tools/exclusions.js.map +1 -1
  157. package/dist/analyzers/tools/generic.d.ts +17 -2
  158. package/dist/analyzers/tools/generic.d.ts.map +1 -1
  159. package/dist/analyzers/tools/generic.js +206 -109
  160. package/dist/analyzers/tools/generic.js.map +1 -1
  161. package/dist/analyzers/tools/gitleaks.d.ts.map +1 -1
  162. package/dist/analyzers/tools/gitleaks.js +48 -1
  163. package/dist/analyzers/tools/gitleaks.js.map +1 -1
  164. package/dist/analyzers/tools/graphify.d.ts +30 -2
  165. package/dist/analyzers/tools/graphify.d.ts.map +1 -1
  166. package/dist/analyzers/tools/graphify.js +131 -15
  167. package/dist/analyzers/tools/graphify.js.map +1 -1
  168. package/dist/analyzers/tools/jscpd.d.ts +12 -2
  169. package/dist/analyzers/tools/jscpd.d.ts.map +1 -1
  170. package/dist/analyzers/tools/jscpd.js +129 -6
  171. package/dist/analyzers/tools/jscpd.js.map +1 -1
  172. package/dist/analyzers/tools/lint-label.d.ts +29 -0
  173. package/dist/analyzers/tools/lint-label.d.ts.map +1 -0
  174. package/dist/analyzers/tools/lint-label.js +23 -0
  175. package/dist/analyzers/tools/lint-label.js.map +1 -0
  176. package/dist/analyzers/tools/minified-detection.d.ts +9 -0
  177. package/dist/analyzers/tools/minified-detection.d.ts.map +1 -0
  178. package/dist/analyzers/tools/minified-detection.js +147 -0
  179. package/dist/analyzers/tools/minified-detection.js.map +1 -0
  180. package/dist/analyzers/tools/nuget-package-reference.d.ts +133 -0
  181. package/dist/analyzers/tools/nuget-package-reference.d.ts.map +1 -0
  182. package/dist/analyzers/tools/nuget-package-reference.js +177 -0
  183. package/dist/analyzers/tools/nuget-package-reference.js.map +1 -0
  184. package/dist/analyzers/tools/osv-scanner-deps.d.ts +3 -2
  185. package/dist/analyzers/tools/osv-scanner-deps.d.ts.map +1 -1
  186. package/dist/analyzers/tools/osv-scanner-deps.js +32 -14
  187. package/dist/analyzers/tools/osv-scanner-deps.js.map +1 -1
  188. package/dist/analyzers/tools/osv.d.ts +36 -0
  189. package/dist/analyzers/tools/osv.d.ts.map +1 -1
  190. package/dist/analyzers/tools/osv.js +26 -0
  191. package/dist/analyzers/tools/osv.js.map +1 -1
  192. package/dist/analyzers/tools/parallel.d.ts +1 -1
  193. package/dist/analyzers/tools/parallel.d.ts.map +1 -1
  194. package/dist/analyzers/tools/parallel.js +2 -2
  195. package/dist/analyzers/tools/parallel.js.map +1 -1
  196. package/dist/analyzers/tools/report-date.d.ts +17 -0
  197. package/dist/analyzers/tools/report-date.d.ts.map +1 -0
  198. package/dist/analyzers/tools/report-date.js +26 -0
  199. package/dist/analyzers/tools/report-date.js.map +1 -0
  200. package/dist/analyzers/tools/risk-score.d.ts +7 -0
  201. package/dist/analyzers/tools/risk-score.d.ts.map +1 -1
  202. package/dist/analyzers/tools/risk-score.js +9 -2
  203. package/dist/analyzers/tools/risk-score.js.map +1 -1
  204. package/dist/analyzers/tools/run-tests-helper.d.ts +43 -0
  205. package/dist/analyzers/tools/run-tests-helper.d.ts.map +1 -0
  206. package/dist/analyzers/tools/run-tests-helper.js +156 -0
  207. package/dist/analyzers/tools/run-tests-helper.js.map +1 -0
  208. package/dist/analyzers/tools/runner.d.ts.map +1 -1
  209. package/dist/analyzers/tools/runner.js +75 -12
  210. package/dist/analyzers/tools/runner.js.map +1 -1
  211. package/dist/analyzers/tools/semgrep.d.ts +39 -2
  212. package/dist/analyzers/tools/semgrep.d.ts.map +1 -1
  213. package/dist/analyzers/tools/semgrep.js +131 -9
  214. package/dist/analyzers/tools/semgrep.js.map +1 -1
  215. package/dist/analyzers/tools/timing.d.ts +17 -3
  216. package/dist/analyzers/tools/timing.d.ts.map +1 -1
  217. package/dist/analyzers/tools/timing.js +36 -14
  218. package/dist/analyzers/tools/timing.js.map +1 -1
  219. package/dist/analyzers/tools/tool-registry.d.ts.map +1 -1
  220. package/dist/analyzers/tools/tool-registry.js +11 -1
  221. package/dist/analyzers/tools/tool-registry.js.map +1 -1
  222. package/dist/analyzers/tools/tools-unavailable-prose.d.ts +18 -0
  223. package/dist/analyzers/tools/tools-unavailable-prose.d.ts.map +1 -0
  224. package/dist/analyzers/tools/tools-unavailable-prose.js +69 -0
  225. package/dist/analyzers/tools/tools-unavailable-prose.js.map +1 -0
  226. package/dist/analyzers/tools/upgrade-plan-resolver.d.ts.map +1 -1
  227. package/dist/analyzers/tools/upgrade-plan-resolver.js +7 -0
  228. package/dist/analyzers/tools/upgrade-plan-resolver.js.map +1 -1
  229. package/dist/analyzers/tools/vendored-advisor.d.ts +43 -0
  230. package/dist/analyzers/tools/vendored-advisor.d.ts.map +1 -0
  231. package/dist/analyzers/tools/vendored-advisor.js +107 -0
  232. package/dist/analyzers/tools/vendored-advisor.js.map +1 -0
  233. package/dist/analyzers/tools/walk-paths.d.ts +78 -0
  234. package/dist/analyzers/tools/walk-paths.d.ts.map +1 -0
  235. package/dist/analyzers/tools/walk-paths.js +150 -0
  236. package/dist/analyzers/tools/walk-paths.js.map +1 -0
  237. package/dist/analyzers/tools/walk-source-files.d.ts +70 -0
  238. package/dist/analyzers/tools/walk-source-files.d.ts.map +1 -0
  239. package/dist/analyzers/tools/walk-source-files.js +369 -0
  240. package/dist/analyzers/tools/walk-source-files.js.map +1 -0
  241. package/dist/analyzers/types.d.ts +204 -4
  242. package/dist/analyzers/types.d.ts.map +1 -1
  243. package/dist/analyzers/xlsx/bom.d.ts.map +1 -1
  244. package/dist/analyzers/xlsx/bom.js +8 -1
  245. package/dist/analyzers/xlsx/bom.js.map +1 -1
  246. package/dist/cli.d.ts.map +1 -1
  247. package/dist/cli.js +581 -189
  248. package/dist/cli.js.map +1 -1
  249. package/dist/detect.d.ts.map +1 -1
  250. package/dist/detect.js +24 -7
  251. package/dist/detect.js.map +1 -1
  252. package/dist/doctor.d.ts.map +1 -1
  253. package/dist/doctor.js +103 -53
  254. package/dist/doctor.js.map +1 -1
  255. package/dist/languages/capabilities/provider.d.ts +130 -1
  256. package/dist/languages/capabilities/provider.d.ts.map +1 -1
  257. package/dist/languages/capabilities/types.d.ts +68 -7
  258. package/dist/languages/capabilities/types.d.ts.map +1 -1
  259. package/dist/languages/csharp.d.ts +15 -1
  260. package/dist/languages/csharp.d.ts.map +1 -1
  261. package/dist/languages/csharp.js +624 -146
  262. package/dist/languages/csharp.js.map +1 -1
  263. package/dist/languages/go.d.ts.map +1 -1
  264. package/dist/languages/go.js +89 -11
  265. package/dist/languages/go.js.map +1 -1
  266. package/dist/languages/index.d.ts +132 -2
  267. package/dist/languages/index.d.ts.map +1 -1
  268. package/dist/languages/index.js +207 -0
  269. package/dist/languages/index.js.map +1 -1
  270. package/dist/languages/java.d.ts.map +1 -1
  271. package/dist/languages/java.js +113 -26
  272. package/dist/languages/java.js.map +1 -1
  273. package/dist/languages/kotlin.d.ts.map +1 -1
  274. package/dist/languages/kotlin.js +132 -26
  275. package/dist/languages/kotlin.js.map +1 -1
  276. package/dist/languages/python.d.ts.map +1 -1
  277. package/dist/languages/python.js +149 -44
  278. package/dist/languages/python.js.map +1 -1
  279. package/dist/languages/ruby.d.ts +39 -1
  280. package/dist/languages/ruby.d.ts.map +1 -1
  281. package/dist/languages/ruby.js +178 -44
  282. package/dist/languages/ruby.js.map +1 -1
  283. package/dist/languages/rust.d.ts.map +1 -1
  284. package/dist/languages/rust.js +103 -16
  285. package/dist/languages/rust.js.map +1 -1
  286. package/dist/languages/types.d.ts +228 -5
  287. package/dist/languages/types.d.ts.map +1 -1
  288. package/dist/languages/typescript.d.ts.map +1 -1
  289. package/dist/languages/typescript.js +201 -14
  290. package/dist/languages/typescript.js.map +1 -1
  291. package/dist/scoring/dimensions/documentation.d.ts +53 -0
  292. package/dist/scoring/dimensions/documentation.d.ts.map +1 -0
  293. package/dist/scoring/dimensions/documentation.js +106 -0
  294. package/dist/scoring/dimensions/documentation.js.map +1 -0
  295. package/dist/scoring/dimensions/dx.d.ts +53 -0
  296. package/dist/scoring/dimensions/dx.d.ts.map +1 -0
  297. package/dist/scoring/dimensions/dx.js +105 -0
  298. package/dist/scoring/dimensions/dx.js.map +1 -0
  299. package/dist/scoring/dimensions/maintainability.d.ts +53 -0
  300. package/dist/scoring/dimensions/maintainability.d.ts.map +1 -0
  301. package/dist/scoring/dimensions/maintainability.js +101 -0
  302. package/dist/scoring/dimensions/maintainability.js.map +1 -0
  303. package/dist/scoring/dimensions/quality.d.ts +108 -0
  304. package/dist/scoring/dimensions/quality.d.ts.map +1 -0
  305. package/dist/scoring/dimensions/quality.js +174 -0
  306. package/dist/scoring/dimensions/quality.js.map +1 -0
  307. package/dist/scoring/dimensions/security.d.ts +84 -0
  308. package/dist/scoring/dimensions/security.d.ts.map +1 -0
  309. package/dist/scoring/dimensions/security.js +135 -0
  310. package/dist/scoring/dimensions/security.js.map +1 -0
  311. package/dist/scoring/dimensions/testing.d.ts +56 -0
  312. package/dist/scoring/dimensions/testing.d.ts.map +1 -0
  313. package/dist/scoring/dimensions/testing.js +98 -0
  314. package/dist/scoring/dimensions/testing.js.map +1 -0
  315. package/dist/scoring/evaluator.d.ts +27 -0
  316. package/dist/scoring/evaluator.d.ts.map +1 -0
  317. package/dist/scoring/evaluator.js +124 -0
  318. package/dist/scoring/evaluator.js.map +1 -0
  319. package/dist/scoring/format.d.ts +34 -0
  320. package/dist/scoring/format.d.ts.map +1 -0
  321. package/dist/scoring/format.js +63 -0
  322. package/dist/scoring/format.js.map +1 -0
  323. package/dist/scoring/index.d.ts +37 -0
  324. package/dist/scoring/index.d.ts.map +1 -0
  325. package/dist/scoring/index.js +57 -0
  326. package/dist/scoring/index.js.map +1 -0
  327. package/dist/scoring/overall.d.ts +54 -0
  328. package/dist/scoring/overall.d.ts.map +1 -0
  329. package/dist/scoring/overall.js +76 -0
  330. package/dist/scoring/overall.js.map +1 -0
  331. package/dist/scoring/result.d.ts +111 -0
  332. package/dist/scoring/result.d.ts.map +1 -0
  333. package/dist/scoring/result.js +14 -0
  334. package/dist/scoring/result.js.map +1 -0
  335. package/dist/scoring/spec.d.ts +76 -0
  336. package/dist/scoring/spec.d.ts.map +1 -0
  337. package/dist/scoring/spec.js +22 -0
  338. package/dist/scoring/spec.js.map +1 -0
  339. package/dist/scoring/thresholds.d.ts +56 -0
  340. package/dist/scoring/thresholds.d.ts.map +1 -0
  341. package/dist/scoring/thresholds.js +75 -0
  342. package/dist/scoring/thresholds.js.map +1 -0
  343. package/dist/tools-cli.d.ts.map +1 -1
  344. package/dist/tools-cli.js +21 -2
  345. package/dist/tools-cli.js.map +1 -1
  346. package/dist/types.d.ts +16 -0
  347. package/dist/types.d.ts.map +1 -1
  348. package/package.json +1 -1
  349. package/templates/.claude/commands/dashboard.md +17 -9
  350. package/dist/analyzers/scoring.d.ts +0 -49
  351. package/dist/analyzers/scoring.d.ts.map +0 -1
  352. package/dist/analyzers/scoring.js +0 -422
  353. package/dist/analyzers/scoring.js.map +0 -1
  354. package/dist/analyzers/security/scoring.d.ts +0 -29
  355. package/dist/analyzers/security/scoring.d.ts.map +0 -1
  356. package/dist/analyzers/security/scoring.js +0 -40
  357. package/dist/analyzers/security/scoring.js.map +0 -1
@@ -0,0 +1,95 @@
1
+ /**
2
+ * AnalysisResult cache — the cross-process persistence layer for the
3
+ * canonical analysis envelope.
4
+ *
5
+ * Two layers of caching:
6
+ *
7
+ * 1. **In-memory** (`Map<cacheKey, Promise<AnalysisResult>>`).
8
+ * Dedupes concurrent calls within one process. Survives across
9
+ * subcommands that share a Node process; cleared on process exit.
10
+ *
11
+ * 2. **On-disk JSON** under `<cwd>/.dxkit/cache/`. Persists across
12
+ * processes so a second subcommand minutes later can skip the
13
+ * gather entirely. Keyed by short commit SHA.
14
+ *
15
+ * Invalidation triggers (any one forces a rebuild + overwrites the
16
+ * cached file):
17
+ *
18
+ * - Commit SHA differs from the cached file's `commitSha`.
19
+ * - `.dxkit-ignore` mtime differs (changes affect what gets scanned).
20
+ * - Cached file's `dxkitVersion` differs from the running version
21
+ * (new tools or scoring formulas can change metrics).
22
+ * - Cached file's `schemaVersion` differs from
23
+ * `ANALYSIS_RESULT_SCHEMA_VERSION` (incompatible envelope shape).
24
+ * - Caller passes `rescan: true`.
25
+ *
26
+ * Dirty-tree behavior:
27
+ *
28
+ * Working-tree-dirty results are NEVER persisted to disk and are
29
+ * NOT read back from disk. The commit SHA doesn't reflect the on-
30
+ * disk state, so a disk cache keyed by SHA would alias two genuinely-
31
+ * different states. In-memory caching still applies, so multiple
32
+ * subcommands within one process share the rebuild without thrashing.
33
+ *
34
+ * The cache module never invokes a gather itself. Callers supply a
35
+ * `build` function returning `AnalysisResultBody`; the module stamps
36
+ * provenance and handles persistence. This keeps the gather pipeline
37
+ * decoupled from the cache layer and makes both unit-testable in
38
+ * isolation.
39
+ */
40
+ import { type AnalysisResult, type AnalysisResultBody } from '../analysis-result';
41
+ /**
42
+ * Provenance fields the cache resolves before deciding hit vs miss.
43
+ * Separate from `AnalysisResult` so the cache can compute it without
44
+ * a build, then compare against the cached file's persisted shape.
45
+ */
46
+ export interface ResolvedProvenance {
47
+ commitSha: string;
48
+ branch: string;
49
+ cwd: string;
50
+ dxkitVersion: string;
51
+ ignoreFileMtime: number | null;
52
+ workingTreeDirty: boolean;
53
+ }
54
+ /**
55
+ * Builder contract. The cache calls this when it needs to (re)build
56
+ * the body. Implementations live alongside the consumers that
57
+ * orchestrate the gather pipeline (`analyzeHealthInternal` and
58
+ * friends).
59
+ */
60
+ export type AnalysisResultBuilder = (cwd: string) => Promise<AnalysisResultBody>;
61
+ export interface ReadOrBuildOptions {
62
+ /** Force a rebuild even on cache hit. Mirrors the CLI `--rescan` flag. */
63
+ rescan?: boolean;
64
+ /** Override cache directory location. Defaults to `<cwd>/.dxkit/cache`.
65
+ * Tests use this to isolate cache state in a tmpdir; production
66
+ * callers should never set it. */
67
+ cacheDir?: string;
68
+ /** Override the provenance resolver. Tests use this to inject SHA /
69
+ * dirty-flag without spawning git. Production callers should never
70
+ * set it. */
71
+ resolveProvenance?: (cwd: string) => ResolvedProvenance;
72
+ /** Override the wall-clock used for `builtAt`. Tests use this to
73
+ * produce deterministic timestamps. Defaults to `new Date()`. */
74
+ now?: () => Date;
75
+ }
76
+ /**
77
+ * Resolve provenance fields needed to compute the cache key. Reads
78
+ * git state via `git rev-parse` + `git status --porcelain`,
79
+ * `.dxkit-ignore` mtime via `fs.statSync`, and pulls dxkit version
80
+ * from the package constant.
81
+ */
82
+ export declare function resolveProvenance(cwd: string): ResolvedProvenance;
83
+ /**
84
+ * Main entry. Returns a cached `AnalysisResult` when the cache key
85
+ * still matches, or rebuilds via `build` and persists. Dirty trees
86
+ * bypass disk persistence; the in-memory layer still applies.
87
+ */
88
+ export declare function readOrBuildAnalysisResult(args: {
89
+ cwd: string;
90
+ build: AnalysisResultBuilder;
91
+ opts?: ReadOrBuildOptions;
92
+ }): Promise<AnalysisResult>;
93
+ /** Test seam — drop in-memory dedup state between test cases. */
94
+ export declare function clearInMemoryCache(): void;
95
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/analyzers/cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAKH,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACxB,MAAM,oBAAoB,CAAC;AAM5B;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED;;;;;GAKG;AACH,MAAM,MAAM,qBAAqB,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAC;AAEjF,MAAM,WAAW,kBAAkB;IACjC,0EAA0E;IAC1E,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;uCAEmC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;kBAEc;IACd,iBAAiB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,kBAAkB,CAAC;IAExD;sEACkE;IAClE,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAClB;AAOD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB,CASjE;AAED;;;;GAIG;AACH,wBAAsB,yBAAyB,CAAC,IAAI,EAAE;IACpD,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,qBAAqB,CAAC;IAC7B,IAAI,CAAC,EAAE,kBAAkB,CAAC;CAC3B,GAAG,OAAO,CAAC,cAAc,CAAC,CA+C1B;AAED,iEAAiE;AACjE,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC"}
@@ -0,0 +1,309 @@
1
+ "use strict";
2
+ /**
3
+ * AnalysisResult cache — the cross-process persistence layer for the
4
+ * canonical analysis envelope.
5
+ *
6
+ * Two layers of caching:
7
+ *
8
+ * 1. **In-memory** (`Map<cacheKey, Promise<AnalysisResult>>`).
9
+ * Dedupes concurrent calls within one process. Survives across
10
+ * subcommands that share a Node process; cleared on process exit.
11
+ *
12
+ * 2. **On-disk JSON** under `<cwd>/.dxkit/cache/`. Persists across
13
+ * processes so a second subcommand minutes later can skip the
14
+ * gather entirely. Keyed by short commit SHA.
15
+ *
16
+ * Invalidation triggers (any one forces a rebuild + overwrites the
17
+ * cached file):
18
+ *
19
+ * - Commit SHA differs from the cached file's `commitSha`.
20
+ * - `.dxkit-ignore` mtime differs (changes affect what gets scanned).
21
+ * - Cached file's `dxkitVersion` differs from the running version
22
+ * (new tools or scoring formulas can change metrics).
23
+ * - Cached file's `schemaVersion` differs from
24
+ * `ANALYSIS_RESULT_SCHEMA_VERSION` (incompatible envelope shape).
25
+ * - Caller passes `rescan: true`.
26
+ *
27
+ * Dirty-tree behavior:
28
+ *
29
+ * Working-tree-dirty results are NEVER persisted to disk and are
30
+ * NOT read back from disk. The commit SHA doesn't reflect the on-
31
+ * disk state, so a disk cache keyed by SHA would alias two genuinely-
32
+ * different states. In-memory caching still applies, so multiple
33
+ * subcommands within one process share the rebuild without thrashing.
34
+ *
35
+ * The cache module never invokes a gather itself. Callers supply a
36
+ * `build` function returning `AnalysisResultBody`; the module stamps
37
+ * provenance and handles persistence. This keeps the gather pipeline
38
+ * decoupled from the cache layer and makes both unit-testable in
39
+ * isolation.
40
+ */
41
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
42
+ if (k2 === undefined) k2 = k;
43
+ var desc = Object.getOwnPropertyDescriptor(m, k);
44
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
45
+ desc = { enumerable: true, get: function() { return m[k]; } };
46
+ }
47
+ Object.defineProperty(o, k2, desc);
48
+ }) : (function(o, m, k, k2) {
49
+ if (k2 === undefined) k2 = k;
50
+ o[k2] = m[k];
51
+ }));
52
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
53
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
54
+ }) : function(o, v) {
55
+ o["default"] = v;
56
+ });
57
+ var __importStar = (this && this.__importStar) || (function () {
58
+ var ownKeys = function(o) {
59
+ ownKeys = Object.getOwnPropertyNames || function (o) {
60
+ var ar = [];
61
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
62
+ return ar;
63
+ };
64
+ return ownKeys(o);
65
+ };
66
+ return function (mod) {
67
+ if (mod && mod.__esModule) return mod;
68
+ var result = {};
69
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
70
+ __setModuleDefault(result, mod);
71
+ return result;
72
+ };
73
+ })();
74
+ Object.defineProperty(exports, "__esModule", { value: true });
75
+ exports.resolveProvenance = resolveProvenance;
76
+ exports.readOrBuildAnalysisResult = readOrBuildAnalysisResult;
77
+ exports.clearInMemoryCache = clearInMemoryCache;
78
+ const fs = __importStar(require("fs"));
79
+ const path = __importStar(require("path"));
80
+ const child_process_1 = require("child_process");
81
+ const analysis_result_1 = require("../analysis-result");
82
+ const constants_1 = require("../constants");
83
+ const IGNORE_FILE = '.dxkit-ignore';
84
+ const CACHE_SUBDIR = path.join('.dxkit', 'cache');
85
+ // In-memory dedup across subcommands sharing a process. Keyed by the
86
+ // resolved provenance so a SHA change inside one process (rare but
87
+ // possible — e.g. a long-running daemon) correctly misses.
88
+ const inMemoryCache = new Map();
89
+ /**
90
+ * Resolve provenance fields needed to compute the cache key. Reads
91
+ * git state via `git rev-parse` + `git status --porcelain`,
92
+ * `.dxkit-ignore` mtime via `fs.statSync`, and pulls dxkit version
93
+ * from the package constant.
94
+ */
95
+ function resolveProvenance(cwd) {
96
+ return {
97
+ commitSha: gitRevParse(cwd, '--short', 'HEAD'),
98
+ branch: gitRevParse(cwd, '--abbrev-ref', 'HEAD'),
99
+ cwd: path.resolve(cwd),
100
+ dxkitVersion: constants_1.VERSION,
101
+ ignoreFileMtime: readIgnoreFileMtime(cwd),
102
+ workingTreeDirty: isWorkingTreeDirty(cwd),
103
+ };
104
+ }
105
+ /**
106
+ * Main entry. Returns a cached `AnalysisResult` when the cache key
107
+ * still matches, or rebuilds via `build` and persists. Dirty trees
108
+ * bypass disk persistence; the in-memory layer still applies.
109
+ */
110
+ async function readOrBuildAnalysisResult(args) {
111
+ const { cwd, build } = args;
112
+ const opts = args.opts ?? {};
113
+ const provenance = (opts.resolveProvenance ?? resolveProvenance)(cwd);
114
+ const cacheDir = opts.cacheDir ?? path.join(provenance.cwd, CACHE_SUBDIR);
115
+ const cacheKey = buildCacheKey(provenance);
116
+ // In-memory short-circuit. Same provenance, same process: one rebuild.
117
+ if (!opts.rescan) {
118
+ const cached = inMemoryCache.get(cacheKey);
119
+ if (cached)
120
+ return cached;
121
+ }
122
+ const promise = (async () => {
123
+ // Disk read — only when the tree is clean (otherwise the cached SHA
124
+ // doesn't represent the gathered state) and the caller didn't ask
125
+ // for a forced rebuild.
126
+ if (!opts.rescan && !provenance.workingTreeDirty) {
127
+ const fromDisk = readDiskCache(cacheDir, provenance);
128
+ if (fromDisk)
129
+ return fromDisk;
130
+ }
131
+ // Build, stamp provenance, persist (when clean).
132
+ const body = await build(cwd);
133
+ const now = (opts.now ?? (() => new Date()))();
134
+ const result = {
135
+ ...body,
136
+ commitSha: provenance.commitSha,
137
+ branch: provenance.branch,
138
+ cwd: provenance.cwd,
139
+ builtAt: now.toISOString(),
140
+ dxkitVersion: provenance.dxkitVersion,
141
+ schemaVersion: analysis_result_1.ANALYSIS_RESULT_SCHEMA_VERSION,
142
+ ignoreFileMtime: provenance.ignoreFileMtime,
143
+ workingTreeDirty: provenance.workingTreeDirty,
144
+ };
145
+ if (!provenance.workingTreeDirty) {
146
+ writeDiskCache(cacheDir, result);
147
+ }
148
+ return result;
149
+ })();
150
+ inMemoryCache.set(cacheKey, promise);
151
+ // Drop the in-memory entry if the build itself threw — keep the cache
152
+ // honest, don't poison subsequent calls with a rejected Promise.
153
+ promise.catch(() => inMemoryCache.delete(cacheKey));
154
+ return promise;
155
+ }
156
+ /** Test seam — drop in-memory dedup state between test cases. */
157
+ function clearInMemoryCache() {
158
+ inMemoryCache.clear();
159
+ }
160
+ // ─── Internals ────────────────────────────────────────────────────────────
161
+ function buildCacheKey(p) {
162
+ // Including dirty-flag means a dirty rebuild doesn't get reused as a
163
+ // clean-tree hit after the user stashes/commits without restarting
164
+ // the process. Including version + schema keeps long-running daemons
165
+ // honest across an in-place dxkit upgrade.
166
+ return [
167
+ p.cwd,
168
+ p.commitSha || 'no-sha',
169
+ p.workingTreeDirty ? 'dirty' : 'clean',
170
+ p.dxkitVersion,
171
+ String(analysis_result_1.ANALYSIS_RESULT_SCHEMA_VERSION),
172
+ p.ignoreFileMtime ?? 'no-ignore',
173
+ ].join('::');
174
+ }
175
+ function cacheFilePath(cacheDir, commitSha) {
176
+ const sha = commitSha || 'no-sha';
177
+ return path.join(cacheDir, `analysis-result-${sha}.json`);
178
+ }
179
+ function readDiskCache(cacheDir, expected) {
180
+ const file = cacheFilePath(cacheDir, expected.commitSha);
181
+ if (!fs.existsSync(file))
182
+ return null;
183
+ let parsed;
184
+ try {
185
+ parsed = JSON.parse(fs.readFileSync(file, 'utf-8'));
186
+ }
187
+ catch {
188
+ // Corrupt cache file — drop it and force a rebuild rather than
189
+ // crashing the caller. Defensive: a partial write or manual edit
190
+ // shouldn't break dxkit.
191
+ safeUnlink(file);
192
+ return null;
193
+ }
194
+ if (!isCacheStillValid(parsed, expected)) {
195
+ safeUnlink(file);
196
+ return null;
197
+ }
198
+ return parsed;
199
+ }
200
+ function isCacheStillValid(cached, expected) {
201
+ if (cached.schemaVersion !== analysis_result_1.ANALYSIS_RESULT_SCHEMA_VERSION)
202
+ return false;
203
+ if (cached.dxkitVersion !== expected.dxkitVersion)
204
+ return false;
205
+ if (cached.commitSha !== expected.commitSha)
206
+ return false;
207
+ if (cached.ignoreFileMtime !== expected.ignoreFileMtime)
208
+ return false;
209
+ // A persisted result is always clean (we don't write dirty ones).
210
+ // Defensive: refuse to honor any persisted record claiming dirty.
211
+ if (cached.workingTreeDirty)
212
+ return false;
213
+ return true;
214
+ }
215
+ function writeDiskCache(cacheDir, result) {
216
+ try {
217
+ fs.mkdirSync(cacheDir, { recursive: true });
218
+ const file = cacheFilePath(cacheDir, result.commitSha);
219
+ fs.writeFileSync(file, JSON.stringify(result, null, 2), 'utf-8');
220
+ }
221
+ catch {
222
+ // Persistence failure is non-fatal — the caller already has a
223
+ // valid in-memory result. Logging is deferred to a future
224
+ // observability pass; silent failure here matches the broader
225
+ // "cache is best-effort" posture.
226
+ }
227
+ }
228
+ function safeUnlink(file) {
229
+ try {
230
+ fs.unlinkSync(file);
231
+ }
232
+ catch {
233
+ /* file already gone — fine */
234
+ }
235
+ }
236
+ function gitRevParse(cwd, ...args) {
237
+ try {
238
+ return (0, child_process_1.execSync)(`git rev-parse ${args.join(' ')}`, {
239
+ cwd,
240
+ encoding: 'utf-8',
241
+ stdio: ['pipe', 'pipe', 'pipe'],
242
+ timeout: 5000,
243
+ }).trim();
244
+ }
245
+ catch {
246
+ return '';
247
+ }
248
+ }
249
+ function isWorkingTreeDirty(cwd) {
250
+ try {
251
+ // `--untracked-files=all` expands every untracked file to its own
252
+ // line. The default behavior collapses an untracked directory to
253
+ // a single entry for its parent — which would hide a nested
254
+ // `.dxkit/` under a non-dxkit collapsed parent and leak it past
255
+ // the segment filter below. `=all` is also resilient to git's
256
+ // future grouping rules.
257
+ const out = (0, child_process_1.execSync)('git status --porcelain --untracked-files=all', {
258
+ cwd,
259
+ encoding: 'utf-8',
260
+ stdio: ['pipe', 'pipe', 'pipe'],
261
+ timeout: 5000,
262
+ });
263
+ // `.dxkit/` (analysis reports + this cache file + dashboard
264
+ // renders) and `.dxkit-ignore` (dxkit's own config file) are
265
+ // dxkit-owned paths. Untracked entries for either — at ANY depth
266
+ // in the tree — can't invalidate the cache the cache itself
267
+ // populates. Customer repos that haven't added `.dxkit/` to their
268
+ // `.gitignore` would otherwise always look dirty and the cache
269
+ // would never persist across processes. Nested cases matter too:
270
+ // a monorepo may have analysis state at `Code/Source/.dxkit/`
271
+ // alongside the root `.dxkit/`, and both should be filtered.
272
+ //
273
+ // Narrow exclusion — anything else under the tree (new source
274
+ // files, build artifacts, editor state) still flags dirty
275
+ // because it CAN change gather output. We match exact path
276
+ // segments to avoid masking unrelated names that merely contain
277
+ // the substring (e.g. a hypothetical `my.dxkit.json` file would
278
+ // not match the `.dxkit` segment check).
279
+ const lines = out.split('\n').filter((line) => {
280
+ if (!line.trim())
281
+ return false;
282
+ const m = /^\?\? (.+)$/.exec(line);
283
+ if (!m)
284
+ return true;
285
+ const segments = stripTrailingSlash(m[1]).split('/');
286
+ return !segments.some((seg) => seg === '.dxkit' || seg === '.dxkit-ignore');
287
+ });
288
+ return lines.length > 0;
289
+ }
290
+ catch {
291
+ // Not in a git repo (or git missing) — treat as dirty so we never
292
+ // persist a result we can't invalidate by SHA. Same posture as the
293
+ // dirty-tree path: in-memory cache still applies.
294
+ return true;
295
+ }
296
+ }
297
+ function stripTrailingSlash(p) {
298
+ return p.endsWith('/') ? p.slice(0, -1) : p;
299
+ }
300
+ function readIgnoreFileMtime(cwd) {
301
+ try {
302
+ const stat = fs.statSync(path.join(cwd, IGNORE_FILE));
303
+ return stat.mtimeMs;
304
+ }
305
+ catch {
306
+ return null;
307
+ }
308
+ }
309
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/analyzers/cache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Run `test-with-coverage` across every active language pack and
3
+ * collect the outcome rows. Single source of truth shared by:
4
+ * - `vyuh-dxkit coverage` command (cli.ts)
5
+ * - `vyuh-dxkit health --with-coverage` (D021 sub-piece 2)
6
+ * - `vyuh-dxkit test-gaps --with-coverage` (D021 sub-piece 2)
7
+ * - `vyuh-dxkit report` orchestrator (D021 sub-piece 3)
8
+ *
9
+ * The function is provider-driven — each pack's
10
+ * `LanguagePackCapabilities.coverage.runTests` produces the artifact
11
+ * its parser reads back later via `loadCoverage()`. Pre-D021 the
12
+ * orchestration lived inline in cli.ts; extracting it here lets
13
+ * `--with-coverage` reuse the exact flow without duplicating the
14
+ * per-pack iteration / fail-fast / row-shape logic.
15
+ */
16
+ import type { LanguageSupport } from '../languages/types';
17
+ export type CoverageRunStatus = 'success' | 'unavailable' | 'failed' | 'skipped';
18
+ export interface CoverageRunRow {
19
+ pack: string;
20
+ status: CoverageRunStatus;
21
+ durationMs: number;
22
+ artifact: string | null;
23
+ reason: string | null;
24
+ }
25
+ export interface CoverageRunOptions {
26
+ /** Restrict to one pack id (matches `vyuh-dxkit coverage --lang <id>`). */
27
+ langFilter?: string;
28
+ /** Stop at the first `failed` row when true (mirrors the CLI default). */
29
+ failFast?: boolean;
30
+ /**
31
+ * Streaming progress hook. Called once with `start` before each pack
32
+ * runs and once with `done` after, regardless of outcome. CLI hosts
33
+ * use this to print `→ <pack>: running tests with coverage...` lines
34
+ * incrementally — the function itself stays silent.
35
+ */
36
+ onPackStart?: (packId: string) => void;
37
+ onPackEnd?: (row: CoverageRunRow) => void;
38
+ }
39
+ export interface CoverageRunResult {
40
+ rows: CoverageRunRow[];
41
+ /** Packs that detect-active matched but failed the `langFilter` gate. */
42
+ activePacks: LanguageSupport[];
43
+ }
44
+ /**
45
+ * Iterate active packs and invoke each one's
46
+ * `capabilities.coverage.runTests`, returning per-pack outcome rows.
47
+ * Packs without a `runTests` implementation surface as `'skipped'` so
48
+ * the caller can still render the full active-pack matrix.
49
+ *
50
+ * Fail-fast semantics match the legacy `coverage` command: a
51
+ * `failed` outcome stops the iteration (caller handles exit code).
52
+ * `unavailable` and `skipped` keep the loop running because they mean
53
+ * "no artifact this run" rather than "the test run blew up."
54
+ */
55
+ export declare function runCoverageAcrossPacks(cwd: string, opts?: CoverageRunOptions): Promise<CoverageRunResult>;
56
+ //# sourceMappingURL=coverage-runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coverage-runner.d.ts","sourceRoot":"","sources":["../../src/analyzers/coverage-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAG1D,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,aAAa,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEjF,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,iBAAiB,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,kBAAkB;IACjC,2EAA2E;IAC3E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,IAAI,CAAC;CAC3C;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,cAAc,EAAE,CAAC;IACvB,yEAAyE;IACzE,WAAW,EAAE,eAAe,EAAE,CAAC;CAChC;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,kBAAuB,GAC5B,OAAO,CAAC,iBAAiB,CAAC,CAsD5B"}
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runCoverageAcrossPacks = runCoverageAcrossPacks;
4
+ const languages_1 = require("../languages");
5
+ /**
6
+ * Iterate active packs and invoke each one's
7
+ * `capabilities.coverage.runTests`, returning per-pack outcome rows.
8
+ * Packs without a `runTests` implementation surface as `'skipped'` so
9
+ * the caller can still render the full active-pack matrix.
10
+ *
11
+ * Fail-fast semantics match the legacy `coverage` command: a
12
+ * `failed` outcome stops the iteration (caller handles exit code).
13
+ * `unavailable` and `skipped` keep the loop running because they mean
14
+ * "no artifact this run" rather than "the test run blew up."
15
+ */
16
+ async function runCoverageAcrossPacks(cwd, opts = {}) {
17
+ const failFast = opts.failFast ?? true;
18
+ const active = (0, languages_1.detectActiveLanguages)(cwd);
19
+ const candidates = active.filter((p) => !opts.langFilter || p.id === opts.langFilter);
20
+ const rows = [];
21
+ for (const pack of candidates) {
22
+ const provider = pack.capabilities?.coverage;
23
+ if (!provider?.runTests) {
24
+ const row = {
25
+ pack: pack.id,
26
+ status: 'skipped',
27
+ durationMs: 0,
28
+ artifact: null,
29
+ reason: 'no runTests() implementation yet (pack coverage capability is read-only)',
30
+ };
31
+ rows.push(row);
32
+ opts.onPackEnd?.(row);
33
+ continue;
34
+ }
35
+ opts.onPackStart?.(pack.id);
36
+ const outcome = await provider.runTests(cwd);
37
+ let row;
38
+ if (outcome.kind === 'success') {
39
+ row = {
40
+ pack: pack.id,
41
+ status: 'success',
42
+ durationMs: outcome.durationMs,
43
+ artifact: outcome.artifact,
44
+ reason: null,
45
+ };
46
+ }
47
+ else if (outcome.kind === 'unavailable') {
48
+ row = {
49
+ pack: pack.id,
50
+ status: 'unavailable',
51
+ durationMs: 0,
52
+ artifact: null,
53
+ reason: outcome.reason,
54
+ };
55
+ }
56
+ else {
57
+ row = {
58
+ pack: pack.id,
59
+ status: 'failed',
60
+ durationMs: outcome.durationMs,
61
+ artifact: null,
62
+ reason: outcome.reason,
63
+ };
64
+ }
65
+ rows.push(row);
66
+ opts.onPackEnd?.(row);
67
+ if (row.status === 'failed' && failFast)
68
+ break;
69
+ }
70
+ return { rows, activePacks: active };
71
+ }
72
+ //# sourceMappingURL=coverage-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coverage-runner.js","sourceRoot":"","sources":["../../src/analyzers/coverage-runner.ts"],"names":[],"mappings":";;AA4DA,wDAyDC;AArGD,4CAAqD;AAiCrD;;;;;;;;;;GAUG;AACI,KAAK,UAAU,sBAAsB,CAC1C,GAAW,EACX,OAA2B,EAAE;IAE7B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC;IACvC,MAAM,MAAM,GAAG,IAAA,iCAAqB,EAAC,GAAG,CAAC,CAAC;IAC1C,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC;IACtF,MAAM,IAAI,GAAqB,EAAE,CAAC;IAElC,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC;QAC7C,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC;YACxB,MAAM,GAAG,GAAmB;gBAC1B,IAAI,EAAE,IAAI,CAAC,EAAE;gBACb,MAAM,EAAE,SAAS;gBACjB,UAAU,EAAE,CAAC;gBACb,QAAQ,EAAE,IAAI;gBACd,MAAM,EAAE,0EAA0E;aACnF,CAAC;YACF,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACf,IAAI,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC;YACtB,SAAS;QACX,CAAC;QACD,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC5B,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC7C,IAAI,GAAmB,CAAC;QACxB,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC/B,GAAG,GAAG;gBACJ,IAAI,EAAE,IAAI,CAAC,EAAE;gBACb,MAAM,EAAE,SAAS;gBACjB,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,MAAM,EAAE,IAAI;aACb,CAAC;QACJ,CAAC;aAAM,IAAI,OAAO,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;YAC1C,GAAG,GAAG;gBACJ,IAAI,EAAE,IAAI,CAAC,EAAE;gBACb,MAAM,EAAE,aAAa;gBACrB,UAAU,EAAE,CAAC;gBACb,QAAQ,EAAE,IAAI;gBACd,MAAM,EAAE,OAAO,CAAC,MAAM;aACvB,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,GAAG,GAAG;gBACJ,IAAI,EAAE,IAAI,CAAC,EAAE;gBACb,MAAM,EAAE,QAAQ;gBAChB,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,QAAQ,EAAE,IAAI;gBACd,MAAM,EAAE,OAAO,CAAC,MAAM;aACvB,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACf,IAAI,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC;QACtB,IAAI,GAAG,CAAC,MAAM,KAAK,QAAQ,IAAI,QAAQ;YAAE,MAAM;IACjD,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC;AACvC,CAAC"}
@@ -0,0 +1,24 @@
1
+ export interface DashboardOptions {
2
+ /** Where to read markdown reports from. Default: `<cwd>/.dxkit/reports`. */
3
+ reportsDir?: string;
4
+ /** Where to read JSON synthesis data from. Default: same as reportsDir. */
5
+ jsonDir?: string;
6
+ /** Project name shown in the header. Default: derived from package.json or basename(cwd). */
7
+ projectName?: string;
8
+ }
9
+ export interface DashboardResult {
10
+ html: string;
11
+ reportCount: number;
12
+ criticalIssueCount: number;
13
+ /** Best-effort summary numbers, surfaced to the CLI for stderr logging. */
14
+ summary: {
15
+ healthScore: number | null;
16
+ healthGrade: string | null;
17
+ vulnCount: number;
18
+ gapCount: number;
19
+ advisoryCount: number;
20
+ slopScore: number | null;
21
+ };
22
+ }
23
+ export declare function analyzeDashboard(cwd: string, options?: DashboardOptions): DashboardResult;
24
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/analyzers/dashboard/index.ts"],"names":[],"mappings":"AAwDA,MAAM,WAAW,gBAAgB;IAC/B,4EAA4E;IAC5E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2EAA2E;IAC3E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6FAA6F;IAC7F,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,2EAA2E;IAC3E,OAAO,EAAE;QACP,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;QAC3B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;QAC3B,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,aAAa,EAAE,MAAM,CAAC;QACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;KAC1B,CAAC;CACH;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,gBAAqB,GAAG,eAAe,CA8R7F"}