@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
@@ -41,9 +41,11 @@ const fs = __importStar(require("fs"));
41
41
  const os = __importStar(require("os"));
42
42
  const path = __importStar(require("path"));
43
43
  const jacoco_1 = require("../analyzers/tools/jacoco");
44
- const osv_scanner_maven_1 = require("../analyzers/tools/osv-scanner-maven");
44
+ const osv_scanner_deps_1 = require("../analyzers/tools/osv-scanner-deps");
45
+ const walk_paths_1 = require("../analyzers/tools/walk-paths");
45
46
  const exclusions_1 = require("../analyzers/tools/exclusions");
46
47
  const runner_1 = require("../analyzers/tools/runner");
48
+ const run_tests_helper_1 = require("../analyzers/tools/run-tests-helper");
47
49
  const tool_registry_1 = require("../analyzers/tools/tool-registry");
48
50
  // ─── Detection ──────────────────────────────────────────────────────────────
49
51
  /**
@@ -52,30 +54,11 @@ const tool_registry_1 = require("../analyzers/tools/tool-registry");
52
54
  * (rare but possible for libraries vendored as plain `src/` trees) and
53
55
  * mixed JVM monorepos where Kotlin sits beside Java/Scala.
54
56
  */
55
- function hasKotlinSourceWithinDepth(cwd, maxDepth = 3) {
56
- function search(dir, depth) {
57
- if (depth > maxDepth)
58
- return false;
59
- let entries;
60
- try {
61
- entries = fs.readdirSync(dir, { withFileTypes: true });
62
- }
63
- catch {
64
- return false;
65
- }
66
- for (const e of entries) {
67
- if (e.name.startsWith('.') ||
68
- ['node_modules', 'build', '.gradle', 'target'].includes(e.name)) {
69
- continue;
70
- }
71
- if (e.isFile() && (e.name.endsWith('.kt') || e.name.endsWith('.kts')))
72
- return true;
73
- if (e.isDirectory() && search(path.join(dir, e.name), depth + 1))
74
- return true;
75
- }
76
- return false;
77
- }
78
- return search(cwd, 0);
57
+ function hasKotlinSource(cwd) {
58
+ // Depth-unlimited via the canonical walker. The previous depth-3
59
+ // cap missed deep mixed-JVM monorepos. Honors `.gitignore` +
60
+ // bundled excludes (`build`, `.gradle`, `target`, …).
61
+ return (0, walk_paths_1.walkPaths)(cwd, { extensions: ['.kt', '.kts'] }).length > 0;
79
62
  }
80
63
  function detectKotlin(cwd) {
81
64
  return ((0, runner_1.fileExists)(cwd, 'build.gradle.kts') ||
@@ -83,7 +66,7 @@ function detectKotlin(cwd) {
83
66
  (0, runner_1.fileExists)(cwd, 'build.gradle') ||
84
67
  (0, runner_1.fileExists)(cwd, 'settings.gradle') ||
85
68
  (0, runner_1.fileExists)(cwd, 'gradlew') ||
86
- hasKotlinSourceWithinDepth(cwd, 3));
69
+ hasKotlinSource(cwd));
87
70
  }
88
71
  /**
89
72
  * Manifest gate for capability providers. detectKotlin() activates the
@@ -175,7 +158,7 @@ function parseDetektCheckstyleXml(raw) {
175
158
  * a missing/unparseable XML is treated as `unavailable`.
176
159
  */
177
160
  function gatherKotlinLintResult(cwd) {
178
- if (!hasKotlinBuildManifest(cwd) && !hasKotlinSourceWithinDepth(cwd, 3)) {
161
+ if (!hasKotlinBuildManifest(cwd) && !hasKotlinSource(cwd)) {
179
162
  return { kind: 'unavailable', reason: 'no kotlin source' };
180
163
  }
181
164
  const detekt = (0, tool_registry_1.findTool)(tool_registry_1.TOOL_DEFS.detekt, cwd);
@@ -220,24 +203,98 @@ const kotlinLintProvider = {
220
203
  // Parser, finder, and gather glue all live in `src/analyzers/tools/jacoco.ts`
221
204
  // — language-agnostic SSOT (CLAUDE.md rule #2). The kotlin pack just
222
205
  // declares its provider and delegates. Java pack does the same.
206
+ /**
207
+ * Locate the JaCoCo XML report after a test run (D021). Gradle's
208
+ * default emits to `build/reports/jacoco/test/jacocoTestReport.xml`,
209
+ * Maven's to `target/site/jacoco/jacoco.xml`. The function-form
210
+ * `artifact` param lets us check both; whichever path the build tool
211
+ * wrote to is the one `gatherJaCoCoCoverageResult` will pick up on
212
+ * the next dispatcher pass (it already knows both candidate paths).
213
+ */
214
+ function findJacocoXmlArtifact(cwd) {
215
+ const candidates = [
216
+ 'build/reports/jacoco/test/jacocoTestReport.xml',
217
+ 'target/site/jacoco/jacoco.xml',
218
+ 'target/site/jacoco-aggregate/jacoco.xml',
219
+ ];
220
+ for (const c of candidates) {
221
+ if ((0, runner_1.fileExists)(cwd, c))
222
+ return c;
223
+ }
224
+ return null;
225
+ }
226
+ /**
227
+ * Run the JVM build tool's "test + JaCoCo report" cycle from cwd (D021).
228
+ *
229
+ * Picks the command by build manifest, preferring Gradle when both are
230
+ * present (modern Kotlin projects are Gradle-first; the Maven path is
231
+ * here for fixture parity with the java pack and for the rare Kotlin-
232
+ * on-Maven layouts seen in older codebases):
233
+ *
234
+ * - `gradlew` or `build.gradle{,.kts}` → `./gradlew jacocoTestReport`
235
+ * - `pom.xml` → `mvn test jacoco:report`
236
+ *
237
+ * Preflight: require at least one of the above. Without a build
238
+ * manifest, there's no canonical command to run.
239
+ *
240
+ * The JaCoCo plugin must be wired into the build (`apply plugin: 'jacoco'`
241
+ * for Gradle, the `jacoco-maven-plugin` in `pom.xml` for Maven). When
242
+ * it isn't, the command succeeds but no XML is produced — that surfaces
243
+ * as `failed` with the helper's "tests succeeded but no coverage
244
+ * artifact was produced" framing, which is the right hint.
245
+ */
246
+ function runKotlinTestsWithCoverage(cwd) {
247
+ return Promise.resolve((0, run_tests_helper_1.runTestsWithCoverage)({
248
+ pack: 'kotlin',
249
+ cmd: (() => {
250
+ if ((0, runner_1.fileExists)(cwd, 'gradlew') ||
251
+ (0, runner_1.fileExists)(cwd, 'build.gradle.kts') ||
252
+ (0, runner_1.fileExists)(cwd, 'build.gradle')) {
253
+ const gradle = (0, runner_1.fileExists)(cwd, 'gradlew') ? './gradlew' : 'gradle';
254
+ return `${gradle} jacocoTestReport`;
255
+ }
256
+ return 'mvn test jacoco:report';
257
+ })(),
258
+ cwd,
259
+ artifact: (cwd) => findJacocoXmlArtifact(cwd),
260
+ preflight: (cwd) => {
261
+ const hasGradle = (0, runner_1.fileExists)(cwd, 'build.gradle') ||
262
+ (0, runner_1.fileExists)(cwd, 'build.gradle.kts') ||
263
+ (0, runner_1.fileExists)(cwd, 'gradlew');
264
+ const hasMaven = (0, runner_1.fileExists)(cwd, 'pom.xml');
265
+ if (!hasGradle && !hasMaven) {
266
+ return 'no Gradle/Maven build manifest — cannot run JaCoCo coverage';
267
+ }
268
+ return null;
269
+ },
270
+ }));
271
+ }
223
272
  const kotlinCoverageProvider = {
224
273
  source: 'kotlin',
225
274
  async gather(cwd) {
226
275
  return (0, jacoco_1.gatherJaCoCoCoverageResult)(cwd);
227
276
  },
277
+ async runTests(cwd) {
278
+ return runKotlinTestsWithCoverage(cwd);
279
+ },
228
280
  };
229
281
  // ─── DepVulns (osv-scanner against Maven manifests) ─────────────────────────
230
282
  //
231
- // Parser + gather glue live in `src/analyzers/tools/osv-scanner-maven.ts`
232
- // — language-agnostic SSOT (CLAUDE.md rule #2). Both kotlin and java
233
- // packs delegate. parseOsvScannerMavenFindings is exported there for
234
- // unit tests.
283
+ // Parser + gather glue live in `src/analyzers/tools/osv-scanner-deps.ts`
284
+ // — language-agnostic SSOT (CLAUDE.md rule #2). Kotlin/Java/Ruby packs
285
+ // all delegate to the same module, parameterized by ecosystem string +
286
+ // manifest candidate list. parseOsvScannerFindings is exported there
287
+ // for unit tests.
288
+ const KOTLIN_DEP_MANIFESTS = ['gradle.lockfile', 'pom.xml', 'gradle/verification-metadata.xml'];
235
289
  const kotlinDepVulnsProvider = {
236
290
  source: 'kotlin',
237
291
  async gather(cwd) {
238
- const outcome = await (0, osv_scanner_maven_1.gatherOsvScannerMavenDepVulnsResult)(cwd, 'kotlin');
292
+ const outcome = await (0, osv_scanner_deps_1.gatherOsvScannerDepVulnsResult)(cwd, 'kotlin', 'Maven', KOTLIN_DEP_MANIFESTS);
239
293
  return outcome.kind === 'success' ? outcome.envelope : null;
240
294
  },
295
+ async gatherOutcome(cwd) {
296
+ return (0, osv_scanner_deps_1.gatherOsvScannerDepVulnsResult)(cwd, 'kotlin', 'Maven', KOTLIN_DEP_MANIFESTS);
297
+ },
241
298
  };
242
299
  // ─── Imports (regex extraction, no resolver) ────────────────────────────────
243
300
  /**
@@ -366,6 +423,57 @@ exports.kotlin = {
366
423
  // `.gradle` = Gradle daemon/cache state,
367
424
  // `out` = IntelliJ IDE build output.
368
425
  extraExcludes: ['build', '.gradle', 'out'],
426
+ // D027 (2.4.7): KDoc uses the JSDoc-style `/**` block opener.
427
+ docCommentPatterns: ['/\\*\\*'],
428
+ // D034 (2.4.7): JVM TLS-bypass idioms. Shared with the java pack
429
+ // since Kotlin uses the same SSL APIs. Tokens are class/method
430
+ // names that exist solely for permissive/insecure variants:
431
+ // - TrustAllX509TrustManager / NaiveTrustManager — custom
432
+ // "trust everything" implementations
433
+ // - NoopHostnameVerifier — Apache HttpClient's no-op verifier
434
+ // - ALLOW_ALL_HOSTNAME_VERIFIER — legacy SSLConnectionSocketFactory
435
+ // constant for accepting any hostname
436
+ tlsBypassPatterns: [
437
+ 'TrustAllX509TrustManager',
438
+ 'NaiveTrustManager',
439
+ 'NoopHostnameVerifier',
440
+ 'ALLOW_ALL_HOSTNAME_VERIFIER',
441
+ ],
442
+ upgradeCommand(name, version) {
443
+ return `# Edit build.gradle(.kts): bump ${name} to ${version}, then \`./gradlew build\``;
444
+ },
445
+ // Kotlin spans Spring Boot / Ktor server-side (controllers,
446
+ // services, repositories) and Android client (activities,
447
+ // fragments, viewmodels, screens). Both are first-class — an
448
+ // Android app's primary surface IS its Activity / Fragment /
449
+ // ViewModel layer, regardless of whether HTTP route handlers exist
450
+ // anywhere in the codebase. routePaths narrows so the "Add API
451
+ // documentation" action stays silent on a pure-Android project.
452
+ architecturalShape: {
453
+ primaryComponentPaths: [
454
+ '/controllers/',
455
+ '/services/',
456
+ '/repositories/',
457
+ '/handlers/',
458
+ '/activities/',
459
+ '/fragments/',
460
+ '/viewmodels/',
461
+ '/screens/',
462
+ '/usecases/',
463
+ ],
464
+ routePaths: ['/controllers/', '/handlers/', '/routes/'],
465
+ modelPaths: ['/models/', '/entities/', '/dto/', '/dtos/', '/data/'],
466
+ vocabulary: {
467
+ components: 'controllers/activities',
468
+ models: 'models',
469
+ routes: 'routes',
470
+ },
471
+ testGapPriority: {
472
+ high: ['/controllers/', '/services/', '/handlers/', '/usecases/'],
473
+ medium: ['/repositories/', '/activities/', '/fragments/', '/viewmodels/', '/screens/'],
474
+ },
475
+ },
476
+ clocLanguageNames: ['Kotlin'],
369
477
  detect: detectKotlin,
370
478
  tools: ['detekt', 'osv-scanner'],
371
479
  // Semgrep's Kotlin ruleset (`p/kotlin`) is sparse compared to Python/JS
@@ -1 +1 @@
1
- {"version":3,"file":"kotlin.js","sourceRoot":"","sources":["../../src/languages/kotlin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"kotlin.js","sourceRoot":"","sources":["../../src/languages/kotlin.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"python.d.ts","sourceRoot":"","sources":["../../src/languages/python.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,QAAQ,EAAyC,MAAM,6BAA6B,CAAC;AAoBnG,OAAO,KAAK,EAAE,eAAe,EAAgB,MAAM,SAAS,CAAC;AAyF7D;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,GACV,GAAG,CAAC,MAAM,EAAE;IAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CA6B3D;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE;IAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,GAC/D,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CA0BvB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAoBnE;AAoBD,wFAAwF;AACxF,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,QAAQ,CAsCtF;AAmSD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAqB7D;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAqB7F;AAuHD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA8BlE;AAkFD,eAAO,MAAM,MAAM,EAAE,eAmDpB,CAAC"}
1
+ {"version":3,"file":"python.d.ts","sourceRoot":"","sources":["../../src/languages/python.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,QAAQ,EAAyC,MAAM,6BAA6B,CAAC;AA6BnG,OAAO,KAAK,EAAE,eAAe,EAAgB,MAAM,SAAS,CAAC;AAwF7D;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,GACV,GAAG,CAAC,MAAM,EAAE;IAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CA6B3D;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE;IAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,GAC/D,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CA0BvB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAoBnE;AAoBD,wFAAwF;AACxF,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,QAAQ,CAsCtF;AA6VD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAqB7D;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAqB7F;AAuHD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA8BlE;AAkGD,eAAO,MAAM,MAAM,EAAE,eAkGpB,CAAC"}
@@ -47,6 +47,8 @@ const coverage_1 = require("../analyzers/tools/coverage");
47
47
  const exclusions_1 = require("../analyzers/tools/exclusions");
48
48
  const osv_1 = require("../analyzers/tools/osv");
49
49
  const runner_1 = require("../analyzers/tools/runner");
50
+ const walk_paths_1 = require("../analyzers/tools/walk-paths");
51
+ const run_tests_helper_1 = require("../analyzers/tools/run-tests-helper");
50
52
  const semver_bump_1 = require("../analyzers/tools/semver-bump");
51
53
  const tool_registry_1 = require("../analyzers/tools/tool-registry");
52
54
  function stripPyComments(src) {
@@ -63,30 +65,27 @@ function isFile(p) {
63
65
  function toRel(abs, cwd) {
64
66
  return path.relative(cwd, abs).split(path.sep).join('/');
65
67
  }
66
- function hasPyFileWithinDepth(cwd, maxDepth = 2) {
67
- function search(dir, depth) {
68
- if (depth > maxDepth)
69
- return false;
70
- let entries;
71
- try {
72
- entries = fs.readdirSync(dir, { withFileTypes: true });
73
- }
74
- catch {
75
- return false;
76
- }
77
- for (const e of entries) {
78
- if (e.name.startsWith('.') ||
79
- ['node_modules', 'vendor', 'bin', 'obj', 'target'].includes(e.name)) {
80
- continue;
81
- }
82
- if (e.isFile() && e.name.endsWith('.py'))
83
- return true;
84
- if (e.isDirectory() && search(path.join(dir, e.name), depth + 1))
85
- return true;
86
- }
87
- return false;
88
- }
89
- return search(cwd, 0);
68
+ function hasPyFile(cwd) {
69
+ // Depth-unlimited via the canonical walker. The previous depth-2
70
+ // cap missed real Python monorepos (e.g. `services/<svc>/src/*.py`
71
+ // layouts).
72
+ //
73
+ // Requires >=3 `.py` files when no Python manifest is present.
74
+ // The earlier "any .py file anywhere" threshold over-activated on
75
+ // polyglot repos where a single build-output artifact (e.g. a
76
+ // WinForms desktop app shipping one staging `.py` under
77
+ // `StagingArea/Debug/net9.0-windows/`) would otherwise flip the
78
+ // python pack on. With the pack active, `dominantVocabulary`
79
+ // would then pick its Django/Flask-shaped words over the actual
80
+ // dominant language pack's vocabulary — surfaces as wrong-stack
81
+ // prose ("0 views/services, 0 models" on a 2,995-file C# repo).
82
+ //
83
+ // Real Python codebases without a manifest (small scripts, ad-hoc
84
+ // analysis dirs, learning projects) still activate above the
85
+ // threshold — the bar moved from "any" to "non-trivial," not to
86
+ // "requires manifest." Manifest-bearing repos always activate
87
+ // regardless of file count via the caller's `fileExists` checks.
88
+ return (0, walk_paths_1.walkPaths)(cwd, { extensions: ['.py'] }).length >= 3;
90
89
  }
91
90
  /**
92
91
  * Build the pip-audit invocation for the project at `cwd`. Returns null
@@ -331,14 +330,16 @@ function loadPyTopLevelDepIndex(cwd) {
331
330
  */
332
331
  async function gatherPyDepVulnsResult(cwd) {
333
332
  const pipAudit = (0, tool_registry_1.findTool)(tool_registry_1.TOOL_DEFS['pip-audit'], cwd);
334
- if (!pipAudit.available || !pipAudit.path)
335
- return { kind: 'tool-missing' };
333
+ if (!pipAudit.available || !pipAudit.path) {
334
+ return { kind: 'unavailable', reason: 'pip-audit not installed' };
335
+ }
336
336
  const cmd = buildPipAuditCommand(cwd, pipAudit.path);
337
- if (!cmd)
338
- return { kind: 'tool-missing' };
337
+ if (!cmd) {
338
+ return { kind: 'no-manifest', reason: 'no pyproject.toml / setup.py / requirements.txt' };
339
+ }
339
340
  const raw = (0, runner_1.run)(cmd, cwd, 120000);
340
341
  if (!raw)
341
- return { kind: 'no-output' };
342
+ return { kind: 'unavailable', reason: 'pip-audit produced no output' };
342
343
  try {
343
344
  const data = JSON.parse(raw);
344
345
  const vulnIds = [];
@@ -413,6 +414,7 @@ async function gatherPyDepVulnsResult(cwd) {
413
414
  package: dep.name ?? 'unknown',
414
415
  installedVersion: dep.version,
415
416
  tool: 'pip-audit',
417
+ packId: 'python',
416
418
  severity,
417
419
  };
418
420
  // Embedded score from the primary enrichment pass; alias-fallback
@@ -479,8 +481,8 @@ async function gatherPyDepVulnsResult(cwd) {
479
481
  };
480
482
  return { kind: 'success', envelope };
481
483
  }
482
- catch {
483
- return { kind: 'parse-error' };
484
+ catch (err) {
485
+ return { kind: 'unavailable', reason: `pip-audit parse error: ${err.message}` };
484
486
  }
485
487
  }
486
488
  const pyDepVulnsProvider = {
@@ -489,6 +491,9 @@ const pyDepVulnsProvider = {
489
491
  const outcome = await gatherPyDepVulnsResult(cwd);
490
492
  return outcome.kind === 'success' ? outcome.envelope : null;
491
493
  },
494
+ async gatherOutcome(cwd) {
495
+ return gatherPyDepVulnsResult(cwd);
496
+ },
492
497
  };
493
498
  function mapRuffSeverity(code) {
494
499
  const prefix = code.match(/^[A-Z]+/)?.[0] ?? '';
@@ -542,6 +547,9 @@ const pyLintProvider = {
542
547
  const outcome = gatherPyLintResult(cwd);
543
548
  return outcome.kind === 'success' ? outcome.envelope : null;
544
549
  },
550
+ async gatherOutcome(cwd) {
551
+ return gatherPyLintResult(cwd);
552
+ },
545
553
  };
546
554
  /**
547
555
  * Single source of truth for the python pack's coverage gathering.
@@ -564,11 +572,54 @@ function gatherPyCoverageResult(cwd) {
564
572
  return null;
565
573
  }
566
574
  }
575
+ /**
576
+ * Run `python -m pytest --cov --cov-report=json:coverage.json` from cwd
577
+ * (D021). Prefer the project's own venv python (`.venv`, poetry, pipenv)
578
+ * when resolvable so the test run uses the env that has pytest +
579
+ * pytest-cov installed — falling back to the user's PATH `python`
580
+ * otherwise.
581
+ *
582
+ * Preflight: require at least one Python manifest (pyproject.toml,
583
+ * setup.py, requirements.txt, Pipfile). Without one, this is almost
584
+ * certainly not a Python project (or it's a script-only directory that
585
+ * would need explicit `--lang python` to opt in).
586
+ *
587
+ * Note: pytest-cov plugin presence is NOT preflighted — there is no
588
+ * TOOL_DEFS entry for it, and the spawn outcome is sufficiently clear
589
+ * when it's missing (`pytest: unrecognized arguments: --cov`). The
590
+ * `coverage-py` tool is registry-tracked but the design-doc command
591
+ * uses pytest-cov, not standalone coverage.py.
592
+ */
593
+ function runPyTestsWithCoverage(cwd) {
594
+ return Promise.resolve((0, run_tests_helper_1.runTestsWithCoverage)({
595
+ pack: 'python',
596
+ cmd: (() => {
597
+ const venvPython = findPyProjectVenvPython(cwd);
598
+ const py = venvPython ?? 'python';
599
+ return `${py} -m pytest --cov --cov-report=json:coverage.json`;
600
+ })(),
601
+ cwd,
602
+ artifact: 'coverage.json',
603
+ preflight: (cwd) => {
604
+ const hasManifest = (0, runner_1.fileExists)(cwd, 'pyproject.toml') ||
605
+ (0, runner_1.fileExists)(cwd, 'setup.py') ||
606
+ (0, runner_1.fileExists)(cwd, 'requirements.txt') ||
607
+ (0, runner_1.fileExists)(cwd, 'Pipfile');
608
+ if (!hasManifest) {
609
+ return 'no Python project manifest (pyproject.toml/setup.py/requirements.txt/Pipfile) in this directory';
610
+ }
611
+ return null;
612
+ },
613
+ }));
614
+ }
567
615
  const pyCoverageProvider = {
568
616
  source: 'python',
569
617
  async gather(cwd) {
570
618
  return gatherPyCoverageResult(cwd);
571
619
  },
620
+ async runTests(cwd) {
621
+ return runPyTestsWithCoverage(cwd);
622
+ },
572
623
  };
573
624
  /**
574
625
  * Capture Python module specifiers from source text. Handles both
@@ -799,26 +850,33 @@ function gatherPyLicensesResult(cwd) {
799
850
  (0, runner_1.fileExists)(cwd, 'setup.py') ||
800
851
  (0, runner_1.fileExists)(cwd, 'requirements.txt') ||
801
852
  (0, runner_1.fileExists)(cwd, 'Pipfile');
802
- if (!hasManifest)
803
- return null;
853
+ if (!hasManifest) {
854
+ return {
855
+ kind: 'no-manifest',
856
+ reason: 'no pyproject.toml / setup.py / requirements.txt / Pipfile',
857
+ };
858
+ }
804
859
  const venvPython = findPyProjectVenvPython(cwd);
805
- if (!venvPython)
806
- return null;
860
+ if (!venvPython) {
861
+ return { kind: 'unavailable', reason: 'no resolvable project venv python' };
862
+ }
807
863
  const status = (0, tool_registry_1.findTool)(tool_registry_1.TOOL_DEFS['pip-licenses'], cwd);
808
- if (!status.available || !status.path)
809
- return null;
864
+ if (!status.available || !status.path) {
865
+ return { kind: 'unavailable', reason: 'pip-licenses not installed' };
866
+ }
810
867
  const raw = (0, runner_1.run)(`${status.path} --python ${venvPython} --format=json --with-license-file --no-license-path --with-description --with-urls --with-authors 2>/dev/null`, cwd, 120000);
811
868
  if (!raw)
812
- return null;
869
+ return { kind: 'unavailable', reason: 'pip-licenses produced no output' };
813
870
  let data;
814
871
  try {
815
872
  data = JSON.parse(raw);
816
873
  }
817
- catch {
818
- return null;
874
+ catch (err) {
875
+ return { kind: 'unavailable', reason: `pip-licenses parse error: ${err.message}` };
876
+ }
877
+ if (!Array.isArray(data)) {
878
+ return { kind: 'unavailable', reason: 'pip-licenses output was not a JSON array' };
819
879
  }
820
- if (!Array.isArray(data))
821
- return null;
822
880
  // Top-level attribution reuses the same pip-show-graph BFS the
823
881
  // depVulns path builds. Self-parent invariant (`index[top]` contains
824
882
  // `top`) classifies every row without a second `pip show` pass.
@@ -842,15 +900,20 @@ function gatherPyLicensesResult(cwd) {
842
900
  isTopLevel: hasIndex ? (parents?.includes(entry.Name) ?? false) : undefined,
843
901
  });
844
902
  }
845
- return {
903
+ const envelope = {
846
904
  schemaVersion: 1,
847
905
  tool: 'pip-licenses',
848
906
  findings,
849
907
  };
908
+ return { kind: 'success', envelope };
850
909
  }
851
910
  const pyLicensesProvider = {
852
911
  source: 'python',
853
912
  async gather(cwd) {
913
+ const outcome = gatherPyLicensesResult(cwd);
914
+ return outcome.kind === 'success' ? outcome.envelope : null;
915
+ },
916
+ async gatherOutcome(cwd) {
854
917
  return gatherPyLicensesResult(cwd);
855
918
  },
856
919
  };
@@ -860,12 +923,54 @@ exports.python = {
860
923
  sourceExtensions: ['.py'],
861
924
  testFilePatterns: ['test_*.py', '*_test.py'],
862
925
  extraExcludes: ['__pycache__', '.pytest_cache', '.ruff_cache', '.venv', 'venv', '.mypy_cache'],
926
+ // D027 (2.4.7): Python module/class/function docstrings use either
927
+ // triple-double or triple-single quotes. Match the docstring opener
928
+ // at the start of a (possibly indented) line.
929
+ docCommentPatterns: ['^[[:space:]]*"""', "^[[:space:]]*'''"],
930
+ // D034 (2.4.7): `requests` and `urllib3` TLS-bypass idioms.
931
+ // `verify=False` is the canonical opt-out on every `requests` call;
932
+ // `disable_warnings(InsecureRequestWarning)` typically accompanies it
933
+ // to silence the runtime warning. `VERIFY_SSL=false` is a common
934
+ // env-var convention in Django/Flask configs.
935
+ tlsBypassPatterns: ['verify[[:space:]]*=[[:space:]]*False', 'VERIFY_SSL.*[Ff]alse'],
936
+ upgradeCommand(name, version) {
937
+ return `pip install '${name}==${version}'`;
938
+ },
939
+ // Django (views/viewsets/serializers), Flask/FastAPI (routers, api
940
+ // endpoints), Celery (tasks) — declarations cover the dominant
941
+ // server-side Python patterns. Plain library / data-science code
942
+ // (where `services/` is rare) simply doesn't match anything and
943
+ // the analyzer degrades to "no primary architecture detected" —
944
+ // exactly the pre-extension behavior.
945
+ architecturalShape: {
946
+ primaryComponentPaths: [
947
+ '/views/',
948
+ '/viewsets/',
949
+ '/handlers/',
950
+ '/services/',
951
+ '/api/',
952
+ '/routers/',
953
+ '/tasks/',
954
+ ],
955
+ routePaths: ['/views/', '/viewsets/', '/routers/', '/api/', '/urls.py'],
956
+ modelPaths: ['/models/', '/schemas/', '/serializers/'],
957
+ vocabulary: {
958
+ components: 'views/services',
959
+ models: 'models',
960
+ routes: 'routes',
961
+ },
962
+ testGapPriority: {
963
+ high: ['/views/', '/services/', '/handlers/', '/tasks/'],
964
+ medium: ['/viewsets/', '/routers/', '/api/', '/serializers/'],
965
+ },
966
+ },
967
+ clocLanguageNames: ['Python'],
863
968
  detect(cwd) {
864
969
  return ((0, runner_1.fileExists)(cwd, 'pyproject.toml') ||
865
970
  (0, runner_1.fileExists)(cwd, 'setup.py') ||
866
971
  (0, runner_1.fileExists)(cwd, 'requirements.txt') ||
867
972
  (0, runner_1.fileExists)(cwd, 'Pipfile') ||
868
- hasPyFileWithinDepth(cwd, 2));
973
+ hasPyFile(cwd));
869
974
  },
870
975
  tools: ['ruff', 'pip-audit', 'coverage-py', 'pip-licenses'],
871
976
  semgrepRulesets: ['p/python'],