@vyuhlabs/dxkit 2.4.5 → 2.4.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (356) hide show
  1. package/CHANGELOG.md +1022 -0
  2. package/README.md +160 -45
  3. package/dist/analysis-result.d.ts +112 -0
  4. package/dist/analysis-result.d.ts.map +1 -0
  5. package/dist/analysis-result.js +52 -0
  6. package/dist/analysis-result.js.map +1 -0
  7. package/dist/analyzers/bom/detailed.d.ts.map +1 -1
  8. package/dist/analyzers/bom/detailed.js +19 -0
  9. package/dist/analyzers/bom/detailed.js.map +1 -1
  10. package/dist/analyzers/bom/gather.d.ts +27 -26
  11. package/dist/analyzers/bom/gather.d.ts.map +1 -1
  12. package/dist/analyzers/bom/gather.js +26 -87
  13. package/dist/analyzers/bom/gather.js.map +1 -1
  14. package/dist/analyzers/bom/index.d.ts +0 -7
  15. package/dist/analyzers/bom/index.d.ts.map +1 -1
  16. package/dist/analyzers/bom/index.js +98 -48
  17. package/dist/analyzers/bom/index.js.map +1 -1
  18. package/dist/analyzers/bom/types.d.ts +11 -13
  19. package/dist/analyzers/bom/types.d.ts.map +1 -1
  20. package/dist/analyzers/cache.d.ts +95 -0
  21. package/dist/analyzers/cache.d.ts.map +1 -0
  22. package/dist/analyzers/cache.js +309 -0
  23. package/dist/analyzers/cache.js.map +1 -0
  24. package/dist/analyzers/coverage-runner.d.ts +56 -0
  25. package/dist/analyzers/coverage-runner.d.ts.map +1 -0
  26. package/dist/analyzers/coverage-runner.js +72 -0
  27. package/dist/analyzers/coverage-runner.js.map +1 -0
  28. package/dist/analyzers/dashboard/index.d.ts +24 -0
  29. package/dist/analyzers/dashboard/index.d.ts.map +1 -0
  30. package/dist/analyzers/dashboard/index.js +666 -0
  31. package/dist/analyzers/dashboard/index.js.map +1 -0
  32. package/dist/analyzers/developer/gather.d.ts.map +1 -1
  33. package/dist/analyzers/developer/gather.js +205 -37
  34. package/dist/analyzers/developer/gather.js.map +1 -1
  35. package/dist/analyzers/developer/index.d.ts +1 -1
  36. package/dist/analyzers/developer/index.d.ts.map +1 -1
  37. package/dist/analyzers/developer/index.js +19 -8
  38. package/dist/analyzers/developer/index.js.map +1 -1
  39. package/dist/analyzers/dispatcher.d.ts +37 -0
  40. package/dist/analyzers/dispatcher.d.ts.map +1 -1
  41. package/dist/analyzers/dispatcher.js +56 -9
  42. package/dist/analyzers/dispatcher.js.map +1 -1
  43. package/dist/analyzers/docs/shallow.d.ts +17 -5
  44. package/dist/analyzers/docs/shallow.d.ts.map +1 -1
  45. package/dist/analyzers/docs/shallow.js +65 -2
  46. package/dist/analyzers/docs/shallow.js.map +1 -1
  47. package/dist/analyzers/dx/shallow.d.ts +17 -5
  48. package/dist/analyzers/dx/shallow.d.ts.map +1 -1
  49. package/dist/analyzers/dx/shallow.js +66 -2
  50. package/dist/analyzers/dx/shallow.js.map +1 -1
  51. package/dist/analyzers/health/actions.d.ts +1 -1
  52. package/dist/analyzers/health/actions.d.ts.map +1 -1
  53. package/dist/analyzers/health/actions.js +27 -9
  54. package/dist/analyzers/health/actions.js.map +1 -1
  55. package/dist/analyzers/health/detailed.d.ts +2 -1
  56. package/dist/analyzers/health/detailed.d.ts.map +1 -1
  57. package/dist/analyzers/health/detailed.js +11 -7
  58. package/dist/analyzers/health/detailed.js.map +1 -1
  59. package/dist/analyzers/health.d.ts +27 -0
  60. package/dist/analyzers/health.d.ts.map +1 -1
  61. package/dist/analyzers/health.js +271 -33
  62. package/dist/analyzers/health.js.map +1 -1
  63. package/dist/analyzers/licenses/gather.d.ts +35 -8
  64. package/dist/analyzers/licenses/gather.d.ts.map +1 -1
  65. package/dist/analyzers/licenses/gather.js +70 -13
  66. package/dist/analyzers/licenses/gather.js.map +1 -1
  67. package/dist/analyzers/licenses/index.d.ts +1 -1
  68. package/dist/analyzers/licenses/index.d.ts.map +1 -1
  69. package/dist/analyzers/licenses/index.js +52 -11
  70. package/dist/analyzers/licenses/index.js.map +1 -1
  71. package/dist/analyzers/licenses/types.d.ts +15 -0
  72. package/dist/analyzers/licenses/types.d.ts.map +1 -1
  73. package/dist/analyzers/maintainability/shallow.d.ts +17 -5
  74. package/dist/analyzers/maintainability/shallow.d.ts.map +1 -1
  75. package/dist/analyzers/maintainability/shallow.js +80 -2
  76. package/dist/analyzers/maintainability/shallow.js.map +1 -1
  77. package/dist/analyzers/quality/detailed.d.ts.map +1 -1
  78. package/dist/analyzers/quality/detailed.js +4 -6
  79. package/dist/analyzers/quality/detailed.js.map +1 -1
  80. package/dist/analyzers/quality/gather.d.ts +1 -14
  81. package/dist/analyzers/quality/gather.d.ts.map +1 -1
  82. package/dist/analyzers/quality/gather.js +48 -137
  83. package/dist/analyzers/quality/gather.js.map +1 -1
  84. package/dist/analyzers/quality/index.d.ts +9 -2
  85. package/dist/analyzers/quality/index.d.ts.map +1 -1
  86. package/dist/analyzers/quality/index.js +189 -117
  87. package/dist/analyzers/quality/index.js.map +1 -1
  88. package/dist/analyzers/quality/shallow.d.ts +50 -5
  89. package/dist/analyzers/quality/shallow.d.ts.map +1 -1
  90. package/dist/analyzers/quality/shallow.js +155 -2
  91. package/dist/analyzers/quality/shallow.js.map +1 -1
  92. package/dist/analyzers/quality/types.d.ts +14 -0
  93. package/dist/analyzers/quality/types.d.ts.map +1 -1
  94. package/dist/analyzers/security/actions.d.ts +11 -4
  95. package/dist/analyzers/security/actions.d.ts.map +1 -1
  96. package/dist/analyzers/security/actions.js +87 -37
  97. package/dist/analyzers/security/actions.js.map +1 -1
  98. package/dist/analyzers/security/aggregator.d.ts +236 -0
  99. package/dist/analyzers/security/aggregator.d.ts.map +1 -0
  100. package/dist/analyzers/security/aggregator.js +347 -0
  101. package/dist/analyzers/security/aggregator.js.map +1 -0
  102. package/dist/analyzers/security/detailed.d.ts +2 -2
  103. package/dist/analyzers/security/detailed.d.ts.map +1 -1
  104. package/dist/analyzers/security/detailed.js +10 -9
  105. package/dist/analyzers/security/detailed.js.map +1 -1
  106. package/dist/analyzers/security/gather.d.ts +103 -1
  107. package/dist/analyzers/security/gather.d.ts.map +1 -1
  108. package/dist/analyzers/security/gather.js +281 -9
  109. package/dist/analyzers/security/gather.js.map +1 -1
  110. package/dist/analyzers/security/index.d.ts +15 -0
  111. package/dist/analyzers/security/index.d.ts.map +1 -1
  112. package/dist/analyzers/security/index.js +463 -50
  113. package/dist/analyzers/security/index.js.map +1 -1
  114. package/dist/analyzers/security/shallow.d.ts +50 -6
  115. package/dist/analyzers/security/shallow.d.ts.map +1 -1
  116. package/dist/analyzers/security/shallow.js +154 -2
  117. package/dist/analyzers/security/shallow.js.map +1 -1
  118. package/dist/analyzers/security/types.d.ts +51 -0
  119. package/dist/analyzers/security/types.d.ts.map +1 -1
  120. package/dist/analyzers/tests/detailed.d.ts.map +1 -1
  121. package/dist/analyzers/tests/detailed.js +2 -3
  122. package/dist/analyzers/tests/detailed.js.map +1 -1
  123. package/dist/analyzers/tests/gather.d.ts +2 -1
  124. package/dist/analyzers/tests/gather.d.ts.map +1 -1
  125. package/dist/analyzers/tests/gather.js +98 -69
  126. package/dist/analyzers/tests/gather.js.map +1 -1
  127. package/dist/analyzers/tests/index.d.ts +11 -2
  128. package/dist/analyzers/tests/index.d.ts.map +1 -1
  129. package/dist/analyzers/tests/index.js +85 -18
  130. package/dist/analyzers/tests/index.js.map +1 -1
  131. package/dist/analyzers/tests/shallow.d.ts +19 -5
  132. package/dist/analyzers/tests/shallow.d.ts.map +1 -1
  133. package/dist/analyzers/tests/shallow.js +89 -2
  134. package/dist/analyzers/tests/shallow.js.map +1 -1
  135. package/dist/analyzers/tests/types.d.ts +41 -1
  136. package/dist/analyzers/tests/types.d.ts.map +1 -1
  137. package/dist/analyzers/tools/autogen-header.d.ts +8 -0
  138. package/dist/analyzers/tools/autogen-header.d.ts.map +1 -0
  139. package/dist/analyzers/tools/autogen-header.js +107 -0
  140. package/dist/analyzers/tools/autogen-header.js.map +1 -0
  141. package/dist/analyzers/tools/cloc.d.ts.map +1 -1
  142. package/dist/analyzers/tools/cloc.js +36 -5
  143. package/dist/analyzers/tools/cloc.js.map +1 -1
  144. package/dist/analyzers/tools/coverage.d.ts +1 -1
  145. package/dist/analyzers/tools/coverage.d.ts.map +1 -1
  146. package/dist/analyzers/tools/coverage.js.map +1 -1
  147. package/dist/analyzers/tools/debug-statements.d.ts +17 -0
  148. package/dist/analyzers/tools/debug-statements.d.ts.map +1 -0
  149. package/dist/analyzers/tools/debug-statements.js +58 -0
  150. package/dist/analyzers/tools/debug-statements.js.map +1 -0
  151. package/dist/analyzers/tools/default-exclusions.gitignore +28 -0
  152. package/dist/analyzers/tools/exclusions.d.ts +33 -6
  153. package/dist/analyzers/tools/exclusions.d.ts.map +1 -1
  154. package/dist/analyzers/tools/exclusions.js +95 -26
  155. package/dist/analyzers/tools/exclusions.js.map +1 -1
  156. package/dist/analyzers/tools/generic.d.ts +17 -2
  157. package/dist/analyzers/tools/generic.d.ts.map +1 -1
  158. package/dist/analyzers/tools/generic.js +206 -109
  159. package/dist/analyzers/tools/generic.js.map +1 -1
  160. package/dist/analyzers/tools/gitleaks.d.ts.map +1 -1
  161. package/dist/analyzers/tools/gitleaks.js +48 -1
  162. package/dist/analyzers/tools/gitleaks.js.map +1 -1
  163. package/dist/analyzers/tools/graphify.d.ts +30 -2
  164. package/dist/analyzers/tools/graphify.d.ts.map +1 -1
  165. package/dist/analyzers/tools/graphify.js +131 -15
  166. package/dist/analyzers/tools/graphify.js.map +1 -1
  167. package/dist/analyzers/tools/jscpd.d.ts +12 -2
  168. package/dist/analyzers/tools/jscpd.d.ts.map +1 -1
  169. package/dist/analyzers/tools/jscpd.js +129 -6
  170. package/dist/analyzers/tools/jscpd.js.map +1 -1
  171. package/dist/analyzers/tools/minified-detection.d.ts +9 -0
  172. package/dist/analyzers/tools/minified-detection.d.ts.map +1 -0
  173. package/dist/analyzers/tools/minified-detection.js +147 -0
  174. package/dist/analyzers/tools/minified-detection.js.map +1 -0
  175. package/dist/analyzers/tools/nuget-package-reference.d.ts +131 -0
  176. package/dist/analyzers/tools/nuget-package-reference.d.ts.map +1 -0
  177. package/dist/analyzers/tools/nuget-package-reference.js +175 -0
  178. package/dist/analyzers/tools/nuget-package-reference.js.map +1 -0
  179. package/dist/analyzers/tools/osv-scanner-deps.d.ts +48 -0
  180. package/dist/analyzers/tools/osv-scanner-deps.d.ts.map +1 -0
  181. package/dist/analyzers/tools/{osv-scanner-maven.js → osv-scanner-deps.js} +78 -46
  182. package/dist/analyzers/tools/osv-scanner-deps.js.map +1 -0
  183. package/dist/analyzers/tools/osv.d.ts +36 -0
  184. package/dist/analyzers/tools/osv.d.ts.map +1 -1
  185. package/dist/analyzers/tools/osv.js +26 -0
  186. package/dist/analyzers/tools/osv.js.map +1 -1
  187. package/dist/analyzers/tools/parallel.d.ts +1 -1
  188. package/dist/analyzers/tools/parallel.d.ts.map +1 -1
  189. package/dist/analyzers/tools/parallel.js +2 -2
  190. package/dist/analyzers/tools/parallel.js.map +1 -1
  191. package/dist/analyzers/tools/risk-score.d.ts +7 -0
  192. package/dist/analyzers/tools/risk-score.d.ts.map +1 -1
  193. package/dist/analyzers/tools/risk-score.js +9 -2
  194. package/dist/analyzers/tools/risk-score.js.map +1 -1
  195. package/dist/analyzers/tools/run-tests-helper.d.ts +43 -0
  196. package/dist/analyzers/tools/run-tests-helper.d.ts.map +1 -0
  197. package/dist/analyzers/tools/run-tests-helper.js +156 -0
  198. package/dist/analyzers/tools/run-tests-helper.js.map +1 -0
  199. package/dist/analyzers/tools/runner.d.ts.map +1 -1
  200. package/dist/analyzers/tools/runner.js +75 -12
  201. package/dist/analyzers/tools/runner.js.map +1 -1
  202. package/dist/analyzers/tools/semgrep.d.ts +39 -2
  203. package/dist/analyzers/tools/semgrep.d.ts.map +1 -1
  204. package/dist/analyzers/tools/semgrep.js +131 -9
  205. package/dist/analyzers/tools/semgrep.js.map +1 -1
  206. package/dist/analyzers/tools/timing.d.ts +17 -3
  207. package/dist/analyzers/tools/timing.d.ts.map +1 -1
  208. package/dist/analyzers/tools/timing.js +36 -14
  209. package/dist/analyzers/tools/timing.js.map +1 -1
  210. package/dist/analyzers/tools/tool-registry.d.ts +10 -0
  211. package/dist/analyzers/tools/tool-registry.d.ts.map +1 -1
  212. package/dist/analyzers/tools/tool-registry.js +120 -1
  213. package/dist/analyzers/tools/tool-registry.js.map +1 -1
  214. package/dist/analyzers/tools/tools-unavailable-prose.d.ts +18 -0
  215. package/dist/analyzers/tools/tools-unavailable-prose.d.ts.map +1 -0
  216. package/dist/analyzers/tools/tools-unavailable-prose.js +69 -0
  217. package/dist/analyzers/tools/tools-unavailable-prose.js.map +1 -0
  218. package/dist/analyzers/tools/upgrade-plan-resolver.d.ts.map +1 -1
  219. package/dist/analyzers/tools/upgrade-plan-resolver.js +7 -0
  220. package/dist/analyzers/tools/upgrade-plan-resolver.js.map +1 -1
  221. package/dist/analyzers/tools/vendored-advisor.d.ts +43 -0
  222. package/dist/analyzers/tools/vendored-advisor.d.ts.map +1 -0
  223. package/dist/analyzers/tools/vendored-advisor.js +107 -0
  224. package/dist/analyzers/tools/vendored-advisor.js.map +1 -0
  225. package/dist/analyzers/tools/walk-paths.d.ts +78 -0
  226. package/dist/analyzers/tools/walk-paths.d.ts.map +1 -0
  227. package/dist/analyzers/tools/walk-paths.js +150 -0
  228. package/dist/analyzers/tools/walk-paths.js.map +1 -0
  229. package/dist/analyzers/tools/walk-source-files.d.ts +70 -0
  230. package/dist/analyzers/tools/walk-source-files.d.ts.map +1 -0
  231. package/dist/analyzers/tools/walk-source-files.js +369 -0
  232. package/dist/analyzers/tools/walk-source-files.js.map +1 -0
  233. package/dist/analyzers/types.d.ts +204 -4
  234. package/dist/analyzers/types.d.ts.map +1 -1
  235. package/dist/analyzers/xlsx/bom.d.ts.map +1 -1
  236. package/dist/analyzers/xlsx/bom.js +8 -1
  237. package/dist/analyzers/xlsx/bom.js.map +1 -1
  238. package/dist/cli.d.ts.map +1 -1
  239. package/dist/cli.js +557 -189
  240. package/dist/cli.js.map +1 -1
  241. package/dist/constants.d.ts +1 -0
  242. package/dist/constants.d.ts.map +1 -1
  243. package/dist/detect.d.ts.map +1 -1
  244. package/dist/detect.js +24 -7
  245. package/dist/detect.js.map +1 -1
  246. package/dist/doctor.d.ts.map +1 -1
  247. package/dist/doctor.js +103 -53
  248. package/dist/doctor.js.map +1 -1
  249. package/dist/languages/capabilities/provider.d.ts +130 -1
  250. package/dist/languages/capabilities/provider.d.ts.map +1 -1
  251. package/dist/languages/capabilities/types.d.ts +68 -7
  252. package/dist/languages/capabilities/types.d.ts.map +1 -1
  253. package/dist/languages/csharp.d.ts +15 -1
  254. package/dist/languages/csharp.d.ts.map +1 -1
  255. package/dist/languages/csharp.js +624 -146
  256. package/dist/languages/csharp.js.map +1 -1
  257. package/dist/languages/go.d.ts.map +1 -1
  258. package/dist/languages/go.js +89 -11
  259. package/dist/languages/go.js.map +1 -1
  260. package/dist/languages/index.d.ts +131 -2
  261. package/dist/languages/index.d.ts.map +1 -1
  262. package/dist/languages/index.js +208 -0
  263. package/dist/languages/index.js.map +1 -1
  264. package/dist/languages/java.d.ts.map +1 -1
  265. package/dist/languages/java.js +121 -32
  266. package/dist/languages/java.js.map +1 -1
  267. package/dist/languages/kotlin.d.ts.map +1 -1
  268. package/dist/languages/kotlin.js +140 -32
  269. package/dist/languages/kotlin.js.map +1 -1
  270. package/dist/languages/python.d.ts.map +1 -1
  271. package/dist/languages/python.js +149 -44
  272. package/dist/languages/python.js.map +1 -1
  273. package/dist/languages/ruby.d.ts +115 -0
  274. package/dist/languages/ruby.d.ts.map +1 -0
  275. package/dist/languages/ruby.js +665 -0
  276. package/dist/languages/ruby.js.map +1 -0
  277. package/dist/languages/rust.d.ts.map +1 -1
  278. package/dist/languages/rust.js +103 -16
  279. package/dist/languages/rust.js.map +1 -1
  280. package/dist/languages/types.d.ts +228 -5
  281. package/dist/languages/types.d.ts.map +1 -1
  282. package/dist/languages/typescript.d.ts.map +1 -1
  283. package/dist/languages/typescript.js +201 -14
  284. package/dist/languages/typescript.js.map +1 -1
  285. package/dist/scoring/dimensions/documentation.d.ts +53 -0
  286. package/dist/scoring/dimensions/documentation.d.ts.map +1 -0
  287. package/dist/scoring/dimensions/documentation.js +106 -0
  288. package/dist/scoring/dimensions/documentation.js.map +1 -0
  289. package/dist/scoring/dimensions/dx.d.ts +53 -0
  290. package/dist/scoring/dimensions/dx.d.ts.map +1 -0
  291. package/dist/scoring/dimensions/dx.js +105 -0
  292. package/dist/scoring/dimensions/dx.js.map +1 -0
  293. package/dist/scoring/dimensions/maintainability.d.ts +53 -0
  294. package/dist/scoring/dimensions/maintainability.d.ts.map +1 -0
  295. package/dist/scoring/dimensions/maintainability.js +101 -0
  296. package/dist/scoring/dimensions/maintainability.js.map +1 -0
  297. package/dist/scoring/dimensions/quality.d.ts +108 -0
  298. package/dist/scoring/dimensions/quality.d.ts.map +1 -0
  299. package/dist/scoring/dimensions/quality.js +174 -0
  300. package/dist/scoring/dimensions/quality.js.map +1 -0
  301. package/dist/scoring/dimensions/security.d.ts +84 -0
  302. package/dist/scoring/dimensions/security.d.ts.map +1 -0
  303. package/dist/scoring/dimensions/security.js +135 -0
  304. package/dist/scoring/dimensions/security.js.map +1 -0
  305. package/dist/scoring/dimensions/testing.d.ts +56 -0
  306. package/dist/scoring/dimensions/testing.d.ts.map +1 -0
  307. package/dist/scoring/dimensions/testing.js +98 -0
  308. package/dist/scoring/dimensions/testing.js.map +1 -0
  309. package/dist/scoring/evaluator.d.ts +27 -0
  310. package/dist/scoring/evaluator.d.ts.map +1 -0
  311. package/dist/scoring/evaluator.js +124 -0
  312. package/dist/scoring/evaluator.js.map +1 -0
  313. package/dist/scoring/format.d.ts +34 -0
  314. package/dist/scoring/format.d.ts.map +1 -0
  315. package/dist/scoring/format.js +63 -0
  316. package/dist/scoring/format.js.map +1 -0
  317. package/dist/scoring/index.d.ts +37 -0
  318. package/dist/scoring/index.d.ts.map +1 -0
  319. package/dist/scoring/index.js +57 -0
  320. package/dist/scoring/index.js.map +1 -0
  321. package/dist/scoring/overall.d.ts +54 -0
  322. package/dist/scoring/overall.d.ts.map +1 -0
  323. package/dist/scoring/overall.js +76 -0
  324. package/dist/scoring/overall.js.map +1 -0
  325. package/dist/scoring/result.d.ts +111 -0
  326. package/dist/scoring/result.d.ts.map +1 -0
  327. package/dist/scoring/result.js +14 -0
  328. package/dist/scoring/result.js.map +1 -0
  329. package/dist/scoring/spec.d.ts +76 -0
  330. package/dist/scoring/spec.d.ts.map +1 -0
  331. package/dist/scoring/spec.js +22 -0
  332. package/dist/scoring/spec.js.map +1 -0
  333. package/dist/scoring/thresholds.d.ts +56 -0
  334. package/dist/scoring/thresholds.d.ts.map +1 -0
  335. package/dist/scoring/thresholds.js +75 -0
  336. package/dist/scoring/thresholds.js.map +1 -0
  337. package/dist/tools-cli.d.ts.map +1 -1
  338. package/dist/tools-cli.js +21 -2
  339. package/dist/tools-cli.js.map +1 -1
  340. package/dist/types.d.ts +17 -1
  341. package/dist/types.d.ts.map +1 -1
  342. package/package.json +1 -1
  343. package/templates/.claude/commands/dashboard.md +17 -9
  344. package/templates/.claude/rules/ruby.md +11 -0
  345. package/templates/configs/ruby/README.md +6 -0
  346. package/dist/analyzers/scoring.d.ts +0 -49
  347. package/dist/analyzers/scoring.d.ts.map +0 -1
  348. package/dist/analyzers/scoring.js +0 -422
  349. package/dist/analyzers/scoring.js.map +0 -1
  350. package/dist/analyzers/security/scoring.d.ts +0 -29
  351. package/dist/analyzers/security/scoring.d.ts.map +0 -1
  352. package/dist/analyzers/security/scoring.js +0 -40
  353. package/dist/analyzers/security/scoring.js.map +0 -1
  354. package/dist/analyzers/tools/osv-scanner-maven.d.ts +0 -42
  355. package/dist/analyzers/tools/osv-scanner-maven.d.ts.map +0 -1
  356. package/dist/analyzers/tools/osv-scanner-maven.js.map +0 -1
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ // Renderer-side prose split for the `toolsUnavailable` list.
3
+ //
4
+ // `pushUnavailable` (in health.ts) builds entries shaped `<tool>
5
+ // (<reason>)`, where `<reason>` comes from the provider's outcome
6
+ // channel — `not installed` / `timed out at <N>s` / `exit code N
7
+ // (stderr: ...)` / `no output (stderr: ...)` / `no output` /
8
+ // `parse error` / etc. The reason text is honest; the historical
9
+ // renderer header "Tools unavailable" wasn't — a reader reasonably
10
+ // concluded the tool needed installing, when in fact it was attempted
11
+ // and failed at runtime.
12
+ //
13
+ // This module categorizes entries by reading the suffix and routes
14
+ // them to two honest headers:
15
+ //
16
+ // - "Tools not installed" → reason `(not installed)`
17
+ // → user action: `tools install`
18
+ // - "Tools that failed at runtime" → any other reason
19
+ // → user action: investigate the run
20
+ // (e.g. narrow scan scope, raise
21
+ // memory, check stderr first line)
22
+ //
23
+ // Every renderer prose surface that previously printed
24
+ // `**Tools unavailable:** <flat list>` now calls
25
+ // `renderToolsUnavailableLines` so the prose split is applied
26
+ // uniformly across cli, tests, security, quality, bom, health/detailed.
27
+ // The xlsx BoM emits two worksheet rows via `splitToolsUnavailable`
28
+ // for the same effect.
29
+ Object.defineProperty(exports, "__esModule", { value: true });
30
+ exports.splitToolsUnavailable = splitToolsUnavailable;
31
+ exports.renderToolsUnavailableLines = renderToolsUnavailableLines;
32
+ /**
33
+ * Split a flat `toolsUnavailable` list into the two honesty categories.
34
+ * Entries shaped `<tool> (not installed)` route to `notInstalled` with
35
+ * the suffix stripped; everything else (including bare tool names with
36
+ * no `(<reason>)` suffix at all) routes to `failedAtRuntime` unchanged.
37
+ */
38
+ function splitToolsUnavailable(entries) {
39
+ const notInstalled = [];
40
+ const failedAtRuntime = [];
41
+ for (const entry of entries) {
42
+ if (/ \(not installed\)\s*$/.test(entry)) {
43
+ notInstalled.push(entry.replace(/ \(not installed\)\s*$/, ''));
44
+ }
45
+ else {
46
+ failedAtRuntime.push(entry);
47
+ }
48
+ }
49
+ return { notInstalled, failedAtRuntime };
50
+ }
51
+ /**
52
+ * Render the two honest header lines for markdown renderers. Returns
53
+ * an empty array when both categories are empty (so callers can spread
54
+ * the result into a `lines.push(...)` without an explicit length guard).
55
+ */
56
+ function renderToolsUnavailableLines(entries) {
57
+ if (entries.length === 0)
58
+ return [];
59
+ const { notInstalled, failedAtRuntime } = splitToolsUnavailable(entries);
60
+ const lines = [];
61
+ if (notInstalled.length > 0) {
62
+ lines.push(`**Tools not installed:** ${notInstalled.join(', ')}`);
63
+ }
64
+ if (failedAtRuntime.length > 0) {
65
+ lines.push(`**Tools that failed at runtime:** ${failedAtRuntime.join(', ')}`);
66
+ }
67
+ return lines;
68
+ }
69
+ //# sourceMappingURL=tools-unavailable-prose.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools-unavailable-prose.js","sourceRoot":"","sources":["../../../src/analyzers/tools/tools-unavailable-prose.ts"],"names":[],"mappings":";AAAA,6DAA6D;AAC7D,EAAE;AACF,iEAAiE;AACjE,kEAAkE;AAClE,iEAAiE;AACjE,6DAA6D;AAC7D,iEAAiE;AACjE,mEAAmE;AACnE,sEAAsE;AACtE,yBAAyB;AACzB,EAAE;AACF,mEAAmE;AACnE,8BAA8B;AAC9B,EAAE;AACF,+DAA+D;AAC/D,sEAAsE;AACtE,wDAAwD;AACxD,0EAA0E;AAC1E,wEAAwE;AACxE,0EAA0E;AAC1E,EAAE;AACF,uDAAuD;AACvD,iDAAiD;AACjD,8DAA8D;AAC9D,wEAAwE;AACxE,oEAAoE;AACpE,uBAAuB;;AAavB,sDAWC;AAOD,kEAWC;AAnCD;;;;;GAKG;AACH,SAAgB,qBAAqB,CAAC,OAAiB;IACrD,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,MAAM,eAAe,GAAa,EAAE,CAAC;IACrC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACzC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,wBAAwB,EAAE,EAAE,CAAC,CAAC,CAAC;QACjE,CAAC;aAAM,CAAC;YACN,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IACD,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,CAAC;AAC3C,CAAC;AAED;;;;GAIG;AACH,SAAgB,2BAA2B,CAAC,OAAiB;IAC3D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACpC,MAAM,EAAE,YAAY,EAAE,eAAe,EAAE,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;IACzE,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,4BAA4B,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpE,CAAC;IACD,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,qCAAqC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChF,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"upgrade-plan-resolver.d.ts","sourceRoot":"","sources":["../../../src/analyzers/tools/upgrade-plan-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAsB,MAAM,oCAAoC,CAAC;AAS7F;mEACmE;AACnE,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;GAIG;AACH,wBAAgB,6BAA6B,CAAC,QAAQ,EAAE,cAAc,EAAE,GAAG,aAAa,CAKvF;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,cAAc,EAAE,GAAG,MAAM,CAkCxE;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,cAAc,EAAE,GAAG,MAAM,CAgB1E"}
1
+ {"version":3,"file":"upgrade-plan-resolver.d.ts","sourceRoot":"","sources":["../../../src/analyzers/tools/upgrade-plan-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAsB,MAAM,oCAAoC,CAAC;AAS7F;mEACmE;AACnE,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;GAIG;AACH,wBAAgB,6BAA6B,CAAC,QAAQ,EAAE,cAAc,EAAE,GAAG,aAAa,CAKvF;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,cAAc,EAAE,GAAG,MAAM,CAkCxE;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,cAAc,EAAE,GAAG,MAAM,CAsB1E"}
@@ -114,6 +114,13 @@ function stampFromFreeTextAdvice(findings) {
114
114
  const m = f.upgradeAdvice.match(TRANSITIVE_ADVICE_RE);
115
115
  if (!m)
116
116
  continue;
117
+ // Defensive: skip the 0.0.0 sentinel that some upstream tools emit
118
+ // when no real transitive target exists. Producers should normally
119
+ // gate this at their own emission site (see the TS pack), but
120
+ // catching it here keeps the resolver honest if another producer
121
+ // adopts the same template without the guard.
122
+ if (m[2] === '0.0.0')
123
+ continue;
117
124
  f.upgradePlan = {
118
125
  parent: m[1],
119
126
  parentVersion: m[2],
@@ -1 +1 @@
1
- {"version":3,"file":"upgrade-plan-resolver.js","sourceRoot":"","sources":["../../../src/analyzers/tools/upgrade-plan-resolver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"upgrade-plan-resolver.js","sourceRoot":"","sources":["../../../src/analyzers/tools/upgrade-plan-resolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Advisory detection for files that *look* vendored / external but
3
+ * fell through the dxkit exclusion chain.
4
+ *
5
+ * The bundled `default-exclusions.gitignore` covers the common
6
+ * conventions (`vendor/`, `third_party/`, `third-party/`, `vendored/`,
7
+ * `playground/`, `lexical-playground/`, `node_modules/`, `dist/`, ...)
8
+ * but no curated list can capture every customer's vendored-code
9
+ * organization. A common case the bundled defaults deliberately do
10
+ * NOT exclude is `libs/` — many real codebases (Lerna monorepos, Nx
11
+ * workspaces, npm workspaces) host first-party packages under that
12
+ * directory, so blanket-excluding it would silently hide legitimate
13
+ * source.
14
+ *
15
+ * Instead of forcing a choice between "false-positive exclusions"
16
+ * and "vendored files distorting metrics," this module surfaces
17
+ * customer-visible guidance: when a path that LOOKS vendored slips
18
+ * into a metric like `largestFiles`, the renderer appends a tip
19
+ * pointing at the `.dxkit-ignore` escape hatch. Customers keep
20
+ * authority over what's in scope; we keep the report honest by
21
+ * naming what looks suspicious.
22
+ *
23
+ * Detection is conservative — only path segments that strongly
24
+ * signal vendored code in the wild trigger the advisory. False-
25
+ * positives are acceptable (the tip is advisory, not an action);
26
+ * false-negatives just leave the metric as-is.
27
+ */
28
+ /**
29
+ * Check if a relative POSIX path contains a suspect-vendored token.
30
+ * Anchors the check with leading slash so `/libs/` matches a directory
31
+ * boundary, not a filename like `libs-helper.ts`.
32
+ */
33
+ export declare function looksVendored(relPath: string): boolean;
34
+ /**
35
+ * Filter a `largestFiles`-shaped list to entries that look vendored.
36
+ * Used by report renderers to emit a single advisory block ("these
37
+ * files look vendored; consider `.dxkit-ignore`") when the top-N
38
+ * leaks suspect paths through.
39
+ */
40
+ export declare function suspectVendoredEntries<T extends {
41
+ path: string;
42
+ }>(files: ReadonlyArray<T>): T[];
43
+ //# sourceMappingURL=vendored-advisor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vendored-advisor.d.ts","sourceRoot":"","sources":["../../../src/analyzers/tools/vendored-advisor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AA6DH;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAGtD;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,SAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAE/F"}
@@ -0,0 +1,107 @@
1
+ "use strict";
2
+ /**
3
+ * Advisory detection for files that *look* vendored / external but
4
+ * fell through the dxkit exclusion chain.
5
+ *
6
+ * The bundled `default-exclusions.gitignore` covers the common
7
+ * conventions (`vendor/`, `third_party/`, `third-party/`, `vendored/`,
8
+ * `playground/`, `lexical-playground/`, `node_modules/`, `dist/`, ...)
9
+ * but no curated list can capture every customer's vendored-code
10
+ * organization. A common case the bundled defaults deliberately do
11
+ * NOT exclude is `libs/` — many real codebases (Lerna monorepos, Nx
12
+ * workspaces, npm workspaces) host first-party packages under that
13
+ * directory, so blanket-excluding it would silently hide legitimate
14
+ * source.
15
+ *
16
+ * Instead of forcing a choice between "false-positive exclusions"
17
+ * and "vendored files distorting metrics," this module surfaces
18
+ * customer-visible guidance: when a path that LOOKS vendored slips
19
+ * into a metric like `largestFiles`, the renderer appends a tip
20
+ * pointing at the `.dxkit-ignore` escape hatch. Customers keep
21
+ * authority over what's in scope; we keep the report honest by
22
+ * naming what looks suspicious.
23
+ *
24
+ * Detection is conservative — only path segments that strongly
25
+ * signal vendored code in the wild trigger the advisory. False-
26
+ * positives are acceptable (the tip is advisory, not an action);
27
+ * false-negatives just leave the metric as-is.
28
+ */
29
+ Object.defineProperty(exports, "__esModule", { value: true });
30
+ exports.looksVendored = looksVendored;
31
+ exports.suspectVendoredEntries = suspectVendoredEntries;
32
+ /**
33
+ * Path tokens that strongly suggest a file is vendored / external in
34
+ * its containing directory's role. Matched as case-insensitive path
35
+ * segments (`/libs/` matches `public/snapXReditor/libs/colorpicker/`
36
+ * but not a file named `libs-utils.ts`).
37
+ *
38
+ * Keep this list tight — only patterns we've observed in real
39
+ * customer audits as the dominant signal that a path is vendored
40
+ * code the project team doesn't maintain. Patterns that ALSO
41
+ * frequently host first-party source (e.g. `assets/`, `data/`,
42
+ * `examples/`) are deliberately omitted.
43
+ */
44
+ const SUSPECT_VENDORED_TOKENS = [
45
+ '/libs/',
46
+ '/colorpicker/',
47
+ '/playground/',
48
+ '/lexical-playground/',
49
+ '/bundled/',
50
+ '/external/',
51
+ '/_vendor/',
52
+ '/third_party/',
53
+ '/third-party/',
54
+ '/vendored/',
55
+ // Map-rendering libraries (mapbox-gl, leaflet, cesium) commonly
56
+ // shipped as pre-built JS bundles into public/. Customer-authored
57
+ // map UI lives in src/; vendored copies land under public/map/.
58
+ '/mapbox-gl/',
59
+ '/leaflet/',
60
+ '/cesium/',
61
+ '/map/js/',
62
+ '/map/lib/',
63
+ // SAP Business One / ByDesign SDK proxy classes. Reverse-engineered
64
+ // from the ERP data model — property-bag DTOs with hundreds of
65
+ // classes and zero method bodies, indistinguishable from human
66
+ // code by extension alone. Project-team doesn't author them.
67
+ '/sapb1/',
68
+ '/sapbyd/',
69
+ '/odata/',
70
+ // WCF "Connected Services" + gRPC + protobuf generated proxy code.
71
+ // Tooling regenerates these wholesale; they should not surface in
72
+ // largest-files or densest-file rankings.
73
+ '/connectedservices/',
74
+ '/connectedservice/',
75
+ '/grpcgenerated/',
76
+ '/protogenerated/',
77
+ ];
78
+ // The token list above is a tactical interim — every entry was
79
+ // added in response to a specific customer audit, and the pattern
80
+ // of "find a new vendored convention, hardcode another token" doesn't
81
+ // converge. Pre-3.0.0 plan: replace this whole module with an
82
+ // agent / skill that runs at `vyuh-dxkit init` / `update` time,
83
+ // analyzes the customer's repo via graphify (looking for files with
84
+ // proxy-shape signatures — high class:method ratio, no autogen
85
+ // header, anomalous file size), and proposes `.dxkit-ignore`
86
+ // entries. Scoped in the next graphify session per user direction
87
+ // 2026-05-17 — see `tmp/next-session-graphify-deep-dive.md` and
88
+ // `tmp/graphify-capabilities-expansion.md`.
89
+ /**
90
+ * Check if a relative POSIX path contains a suspect-vendored token.
91
+ * Anchors the check with leading slash so `/libs/` matches a directory
92
+ * boundary, not a filename like `libs-helper.ts`.
93
+ */
94
+ function looksVendored(relPath) {
95
+ const anchored = ('/' + relPath).toLowerCase();
96
+ return SUSPECT_VENDORED_TOKENS.some((t) => anchored.includes(t));
97
+ }
98
+ /**
99
+ * Filter a `largestFiles`-shaped list to entries that look vendored.
100
+ * Used by report renderers to emit a single advisory block ("these
101
+ * files look vendored; consider `.dxkit-ignore`") when the top-N
102
+ * leaks suspect paths through.
103
+ */
104
+ function suspectVendoredEntries(files) {
105
+ return files.filter((f) => looksVendored(f.path));
106
+ }
107
+ //# sourceMappingURL=vendored-advisor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vendored-advisor.js","sourceRoot":"","sources":["../../../src/analyzers/tools/vendored-advisor.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;;AAkEH,sCAGC;AAQD,wDAEC;AA7ED;;;;;;;;;;;GAWG;AACH,MAAM,uBAAuB,GAAG;IAC9B,QAAQ;IACR,eAAe;IACf,cAAc;IACd,sBAAsB;IACtB,WAAW;IACX,YAAY;IACZ,WAAW;IACX,eAAe;IACf,eAAe;IACf,YAAY;IACZ,gEAAgE;IAChE,kEAAkE;IAClE,gEAAgE;IAChE,aAAa;IACb,WAAW;IACX,UAAU;IACV,UAAU;IACV,WAAW;IACX,oEAAoE;IACpE,+DAA+D;IAC/D,+DAA+D;IAC/D,6DAA6D;IAC7D,SAAS;IACT,UAAU;IACV,SAAS;IACT,mEAAmE;IACnE,kEAAkE;IAClE,0CAA0C;IAC1C,qBAAqB;IACrB,oBAAoB;IACpB,iBAAiB;IACjB,kBAAkB;CACnB,CAAC;AAEF,+DAA+D;AAC/D,kEAAkE;AAClE,sEAAsE;AACtE,8DAA8D;AAC9D,gEAAgE;AAChE,oEAAoE;AACpE,+DAA+D;AAC/D,6DAA6D;AAC7D,kEAAkE;AAClE,gEAAgE;AAChE,4CAA4C;AAE5C;;;;GAIG;AACH,SAAgB,aAAa,CAAC,OAAe;IAC3C,MAAM,QAAQ,GAAG,CAAC,GAAG,GAAG,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;IAC/C,OAAO,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AACnE,CAAC;AAED;;;;;GAKG;AACH,SAAgB,sBAAsB,CAA6B,KAAuB;IACxF,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACpD,CAAC"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Canonical depth-unlimited path walker for language packs.
3
+ *
4
+ * Every pack that needs to discover its manifest files (`.csproj` /
5
+ * `.sln` for C#, `pyproject.toml` / `setup.py` for Python,
6
+ * `build.gradle.kts` for Kotlin, `pom.xml` for Java, `Gemfile` for
7
+ * Ruby, etc.) routes through `walkPaths`. ONE walker — no per-pack
8
+ * recursive readdir reimplementations, no hardcoded depth caps that
9
+ * silently miss deep monorepo structures.
10
+ *
11
+ * Why a separate primitive from `walk-source-files.ts`:
12
+ *
13
+ * - `walkSourceFiles` resolves auto-generated patterns + test
14
+ * patterns + default extensions from the language registry
15
+ * (`LANGUAGES.flatMap(...)`). Language pack modules that need
16
+ * manifest discovery during their own initialization can't import
17
+ * that — circular dependency, partially-loaded registry entries
18
+ * surface as `undefined`-property reads at module-eval time.
19
+ *
20
+ * - This walker is the foundational layer: pure FS traversal +
21
+ * `isExcludedPath` (gitignore + bundled defaults) + extension
22
+ * filter. No LANGUAGES touch, no autogen/test heuristics. Safe to
23
+ * call from any pack at any point in the load order.
24
+ *
25
+ * Behavioral contract:
26
+ *
27
+ * - **Depth-unlimited.** The single largest class of latent bugs
28
+ * the previous per-pack walkers shipped: `maxDepth = 2/3/4/5`
29
+ * caps chosen by each pack author based on their idea of "deep
30
+ * enough." Real customer monorepos routinely exceed every one of
31
+ * those values (dpl-studio: 6–9). This walker walks the whole
32
+ * tree minus exclusions, period.
33
+ *
34
+ * - **Exclusion-aware.** Honors the bundled exclusion list
35
+ * (`node_modules`, `bin`, `obj`, `vendor`, `dist`, `target`, …)
36
+ * plus the project's `.gitignore` + `.dxkit-ignore` via the
37
+ * canonical `isExcludedPath`. Same answer the rest of dxkit
38
+ * uses.
39
+ *
40
+ * - **Dot-directory pruning.** `.git`, `.vscode`, `.idea`,
41
+ * `.dxkit`, etc. are universally skipped even when not in
42
+ * `.gitignore`.
43
+ *
44
+ * - **POSIX paths, relative to cwd, sorted.** Deterministic for
45
+ * test fixtures and snapshot comparisons.
46
+ */
47
+ export interface WalkPathsOpts {
48
+ /**
49
+ * File extensions to include (e.g., `['.csproj', '.sln']`). Matched
50
+ * against `path.extname(file)`, so values must include the leading
51
+ * dot. An empty list returns no files.
52
+ */
53
+ extensions: string[];
54
+ /**
55
+ * Apply `.gitignore` + `.dxkit-ignore` + bundled default
56
+ * exclusions? Default `true`. Set `false` only when the caller
57
+ * genuinely needs a raw FS view (rare).
58
+ */
59
+ respectIgnore?: boolean;
60
+ /**
61
+ * Restrict to specific basename matches in ADDITION to the
62
+ * extension filter (e.g., `['Gemfile', 'Gemfile.lock']` for
63
+ * extensionless manifest files). When provided, a file passes
64
+ * if EITHER its extension is in `extensions` OR its basename is
65
+ * in `basenames`. Defaults to `[]` (extension-only matching).
66
+ */
67
+ basenames?: string[];
68
+ }
69
+ export declare function clearWalkPathsCache(): void;
70
+ /**
71
+ * Walk the tree rooted at `cwd` and return every file matching the
72
+ * extension or basename filter, depth-unlimited, exclusion-aware.
73
+ * Returns POSIX-style relative paths, sorted. Never throws —
74
+ * unreadable directories are skipped and the partial result is
75
+ * returned.
76
+ */
77
+ export declare function walkPaths(cwd: string, opts: WalkPathsOpts): string[];
78
+ //# sourceMappingURL=walk-paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"walk-paths.d.ts","sourceRoot":"","sources":["../../../src/analyzers/tools/walk-paths.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AAMH,MAAM,WAAW,aAAa;IAC5B;;;;OAIG;IACH,UAAU,EAAE,MAAM,EAAE,CAAC;IAErB;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAOD,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,MAAM,EAAE,CAapE"}
@@ -0,0 +1,150 @@
1
+ "use strict";
2
+ /**
3
+ * Canonical depth-unlimited path walker for language packs.
4
+ *
5
+ * Every pack that needs to discover its manifest files (`.csproj` /
6
+ * `.sln` for C#, `pyproject.toml` / `setup.py` for Python,
7
+ * `build.gradle.kts` for Kotlin, `pom.xml` for Java, `Gemfile` for
8
+ * Ruby, etc.) routes through `walkPaths`. ONE walker — no per-pack
9
+ * recursive readdir reimplementations, no hardcoded depth caps that
10
+ * silently miss deep monorepo structures.
11
+ *
12
+ * Why a separate primitive from `walk-source-files.ts`:
13
+ *
14
+ * - `walkSourceFiles` resolves auto-generated patterns + test
15
+ * patterns + default extensions from the language registry
16
+ * (`LANGUAGES.flatMap(...)`). Language pack modules that need
17
+ * manifest discovery during their own initialization can't import
18
+ * that — circular dependency, partially-loaded registry entries
19
+ * surface as `undefined`-property reads at module-eval time.
20
+ *
21
+ * - This walker is the foundational layer: pure FS traversal +
22
+ * `isExcludedPath` (gitignore + bundled defaults) + extension
23
+ * filter. No LANGUAGES touch, no autogen/test heuristics. Safe to
24
+ * call from any pack at any point in the load order.
25
+ *
26
+ * Behavioral contract:
27
+ *
28
+ * - **Depth-unlimited.** The single largest class of latent bugs
29
+ * the previous per-pack walkers shipped: `maxDepth = 2/3/4/5`
30
+ * caps chosen by each pack author based on their idea of "deep
31
+ * enough." Real customer monorepos routinely exceed every one of
32
+ * those values (dpl-studio: 6–9). This walker walks the whole
33
+ * tree minus exclusions, period.
34
+ *
35
+ * - **Exclusion-aware.** Honors the bundled exclusion list
36
+ * (`node_modules`, `bin`, `obj`, `vendor`, `dist`, `target`, …)
37
+ * plus the project's `.gitignore` + `.dxkit-ignore` via the
38
+ * canonical `isExcludedPath`. Same answer the rest of dxkit
39
+ * uses.
40
+ *
41
+ * - **Dot-directory pruning.** `.git`, `.vscode`, `.idea`,
42
+ * `.dxkit`, etc. are universally skipped even when not in
43
+ * `.gitignore`.
44
+ *
45
+ * - **POSIX paths, relative to cwd, sorted.** Deterministic for
46
+ * test fixtures and snapshot comparisons.
47
+ */
48
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
49
+ if (k2 === undefined) k2 = k;
50
+ var desc = Object.getOwnPropertyDescriptor(m, k);
51
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
52
+ desc = { enumerable: true, get: function() { return m[k]; } };
53
+ }
54
+ Object.defineProperty(o, k2, desc);
55
+ }) : (function(o, m, k, k2) {
56
+ if (k2 === undefined) k2 = k;
57
+ o[k2] = m[k];
58
+ }));
59
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
60
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
61
+ }) : function(o, v) {
62
+ o["default"] = v;
63
+ });
64
+ var __importStar = (this && this.__importStar) || (function () {
65
+ var ownKeys = function(o) {
66
+ ownKeys = Object.getOwnPropertyNames || function (o) {
67
+ var ar = [];
68
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
69
+ return ar;
70
+ };
71
+ return ownKeys(o);
72
+ };
73
+ return function (mod) {
74
+ if (mod && mod.__esModule) return mod;
75
+ var result = {};
76
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
77
+ __setModuleDefault(result, mod);
78
+ return result;
79
+ };
80
+ })();
81
+ Object.defineProperty(exports, "__esModule", { value: true });
82
+ exports.clearWalkPathsCache = clearWalkPathsCache;
83
+ exports.walkPaths = walkPaths;
84
+ const fs = __importStar(require("fs"));
85
+ const path = __importStar(require("path"));
86
+ const exclusions_1 = require("./exclusions");
87
+ // Memoization keyed by `(cwd, opts-fingerprint)`. Mirrors
88
+ // `walk-source-files`'s cache pattern so repeat callers within one
89
+ // process pay the walk cost once.
90
+ const walkCache = new Map();
91
+ function clearWalkPathsCache() {
92
+ walkCache.clear();
93
+ }
94
+ /**
95
+ * Walk the tree rooted at `cwd` and return every file matching the
96
+ * extension or basename filter, depth-unlimited, exclusion-aware.
97
+ * Returns POSIX-style relative paths, sorted. Never throws —
98
+ * unreadable directories are skipped and the partial result is
99
+ * returned.
100
+ */
101
+ function walkPaths(cwd, opts) {
102
+ const respectIgnore = opts.respectIgnore ?? true;
103
+ const extensions = new Set(opts.extensions.map((e) => (e.startsWith('.') ? e : `.${e}`)));
104
+ const basenames = new Set(opts.basenames ?? []);
105
+ const cacheKey = `${cwd}\0${[...extensions].sort().join(',')}\0${[...basenames].sort().join(',')}\0${respectIgnore}`;
106
+ const hit = walkCache.get(cacheKey);
107
+ if (hit)
108
+ return hit;
109
+ const out = [];
110
+ walkDir(cwd, '', { extensions, basenames, respectIgnore }, out);
111
+ out.sort();
112
+ walkCache.set(cacheKey, out);
113
+ return out;
114
+ }
115
+ function walkDir(cwd, relDir, opts, out) {
116
+ const absDir = relDir ? path.join(cwd, relDir) : cwd;
117
+ let entries;
118
+ try {
119
+ entries = fs.readdirSync(absDir, { withFileTypes: true });
120
+ }
121
+ catch {
122
+ return;
123
+ }
124
+ for (const ent of entries) {
125
+ const relPath = relDir ? `${relDir}/${ent.name}` : ent.name;
126
+ if (ent.isDirectory()) {
127
+ // Always skip dot-directories — universal noise (.git, .vscode,
128
+ // .idea, .dxkit, .ci, …). Many aren't in `.gitignore` but no
129
+ // sane manifest discovery wants them.
130
+ if (ent.name.startsWith('.'))
131
+ continue;
132
+ // Bundled excludes (node_modules, bin, obj, vendor, target,
133
+ // dist, …) + project `.gitignore`/`.dxkit-ignore`.
134
+ if (opts.respectIgnore && (0, exclusions_1.isExcludedPath)(cwd, relPath))
135
+ continue;
136
+ walkDir(cwd, relPath, opts, out);
137
+ continue;
138
+ }
139
+ if (!ent.isFile())
140
+ continue;
141
+ const ext = path.extname(ent.name);
142
+ const matches = opts.extensions.has(ext) || opts.basenames.has(ent.name);
143
+ if (!matches)
144
+ continue;
145
+ if (opts.respectIgnore && (0, exclusions_1.isExcludedPath)(cwd, relPath))
146
+ continue;
147
+ out.push(relPath);
148
+ }
149
+ }
150
+ //# sourceMappingURL=walk-paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"walk-paths.js","sourceRoot":"","sources":["../../../src/analyzers/tools/walk-paths.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,70 @@
1
+ import type { LanguageId } from '../../types';
2
+ export interface WalkOpts {
3
+ /** Restrict to specific extensions (e.g. `['.ts', '.tsx']`). Default:
4
+ * union across every registered language pack. */
5
+ extensions?: string[];
6
+ /** Include test files? Default: false. Test files are matched by
7
+ * `allTestFilePatterns()` — basename globs (`*.test.ts`) and
8
+ * path-anchored patterns (`tests/*.rs`). */
9
+ includeTests?: boolean;
10
+ /** Include auto-generated files (basename glob + 2KB header marker)?
11
+ * Default: false. Matches the post-D028 canonical "counted source
12
+ * file" predicate. */
13
+ includeAutogen?: boolean;
14
+ /** Apply `.gitignore` + `.dxkit-ignore` + bundled defaults? Default:
15
+ * true. Set false only for paths that genuinely need a raw FS view. */
16
+ respectIgnore?: boolean;
17
+ /** Restrict to one language pack's `sourceExtensions`. Default: all. */
18
+ packId?: LanguageId;
19
+ }
20
+ export declare function clearWalkCache(): void;
21
+ /**
22
+ * Walk the source tree rooted at `cwd` and return relative POSIX paths
23
+ * (no leading `./`) sorted for determinism. Returns `[]` for non-
24
+ * existent or non-directory roots — never throws.
25
+ */
26
+ export declare function walkSourceFiles(cwd: string, opts?: WalkOpts): string[];
27
+ export interface CountOpts {
28
+ /** 'files' = count of files with ≥1 match. 'lines' = total match
29
+ * count across all lines. Default: 'lines'. */
30
+ mode?: 'files' | 'lines';
31
+ /** Skip lines whose match falls on a comment line. Default: false.
32
+ * D074 closure — pre-fix, line-counters matched a commented-out
33
+ * occurrence of a target call the same as a live one and inflated
34
+ * counts 2x+ on commented-code-heavy codebases (platform: 1578
35
+ * reported / 733 active for the JS print-statement family).
36
+ *
37
+ * Per-file comment marker chosen by extension:
38
+ * .ts/.tsx/.js/.jsx/.go/.rs/.java/.kt/.kts/.cs/.cpp/.c/.h/.hpp/.swift -> slash-style
39
+ * .py/.rb/.sh/.yml/.yaml/.toml -> hash-style
40
+ * Files with no known mapping are scanned as-is (no comment filter). */
41
+ skipComments?: boolean;
42
+ /** Return top-N (by match count) offender list. Default: 0 (skip). */
43
+ perFileTopN?: number;
44
+ }
45
+ export interface CountResult {
46
+ /** Sum of matches across all walked files. */
47
+ lines: number;
48
+ /** Count of files with ≥1 match. */
49
+ files: number;
50
+ /** Top-N offenders. Empty unless `perFileTopN > 0`. */
51
+ perFile: Array<{
52
+ file: string;
53
+ count: number;
54
+ }>;
55
+ }
56
+ /**
57
+ * Read each file once, scan in-process. Pass `patterns` as compiled
58
+ * regexes for repeated use, or as strings (compiled here with global
59
+ * flag). Each line is tested against the alternation; multiple
60
+ * patterns are unioned via `RegExp` `|` — pass them pre-merged for
61
+ * best performance.
62
+ */
63
+ export declare function countLineMatches(cwd: string, files: string[], patterns: RegExp[] | string[], opts?: CountOpts): CountResult;
64
+ export type CommentSyntax = 'slash' | 'hash' | 'none';
65
+ export declare function commentSyntaxFor(relPath: string): CommentSyntax;
66
+ export declare function isCommentLine(rawLine: string, syntax: CommentSyntax): boolean;
67
+ /** Surface the pack-aware `sourceExtensions` for a given packId. Used
68
+ * when callers want to walk one pack's files but bypass the registry. */
69
+ export declare function packSourceExtensions(packId: LanguageId): string[];
70
+ //# sourceMappingURL=walk-source-files.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"walk-source-files.d.ts","sourceRoot":"","sources":["../../../src/analyzers/tools/walk-source-files.ts"],"names":[],"mappings":"AAoCA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAI9C,MAAM,WAAW,QAAQ;IACvB;uDACmD;IACnD,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IAEtB;;iDAE6C;IAC7C,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;2BAEuB;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;4EACwE;IACxE,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB,wEAAwE;IACxE,MAAM,CAAC,EAAE,UAAU,CAAC;CACrB;AAeD,wBAAgB,cAAc,IAAI,IAAI,CAErC;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,QAAa,GAAG,MAAM,EAAE,CAe1E;AAoJD,MAAM,WAAW,SAAS;IACxB;oDACgD;IAChD,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;IAEzB;;;;;;;;;6EASyE;IACzE,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB,sEAAsE;IACtE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,8CAA8C;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,uDAAuD;IACvD,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjD;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EAAE,EACf,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,EAC7B,IAAI,GAAE,SAAc,GACnB,WAAW,CAqDb;AAmBD,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AAEtD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,CAqC/D;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAQ7E;AAID;0EAC0E;AAC1E,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,EAAE,CAEjE"}