@cdxgen/cdxgen 0.0.1 → 13.0.1

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 (722) hide show
  1. package/README.md +921 -87
  2. package/bin/audit.js +239 -0
  3. package/bin/cdxgen.js +2335 -0
  4. package/bin/convert.js +220 -0
  5. package/bin/evinse.js +353 -0
  6. package/bin/hbom.js +504 -0
  7. package/bin/repl.js +2224 -0
  8. package/bin/sign.js +195 -0
  9. package/bin/tracebom.js +303 -0
  10. package/bin/validate.js +268 -0
  11. package/bin/verify.js +189 -0
  12. package/data/README.md +307 -0
  13. package/data/bom-1.4.schema.json +1605 -0
  14. package/data/bom-1.5.schema.json +3660 -0
  15. package/data/bom-1.6.schema.json +5511 -0
  16. package/data/bom-1.7.schema.json +6700 -0
  17. package/data/cbomosdb-queries.json +68 -0
  18. package/data/component-tags.json +339 -0
  19. package/data/container-knowledge-index.json +125 -0
  20. package/data/cosdb-queries.json +17 -0
  21. package/data/crypto-oid.json +1998 -0
  22. package/data/cryptography-defs.json +3793 -0
  23. package/data/cryptography-defs.schema.json +576 -0
  24. package/data/cyclonedx-2.0-bundled.schema.json +7182 -0
  25. package/data/frameworks-list.json +219 -0
  26. package/data/glibc-stdlib.json +117 -0
  27. package/data/gtfobins-index.json +6296 -0
  28. package/data/helpers/init.gradle +71 -0
  29. package/data/jsf-0.82.schema.json +211 -0
  30. package/data/known-licenses.json +82 -0
  31. package/data/lic-mapping.json +338 -0
  32. package/data/license-aliases.json +6624 -0
  33. package/data/license-db.json +39059 -0
  34. package/data/license-deprecations.json +302 -0
  35. package/data/lolbas-index.json +150 -0
  36. package/data/predictive-audit-allowlist.json +11 -0
  37. package/data/pypi-pkg-aliases.json +1199 -0
  38. package/data/python-stdlib.json +308 -0
  39. package/data/queries-darwin.json +193 -0
  40. package/data/queries-win.json +257 -0
  41. package/data/queries.json +268 -0
  42. package/data/ruby-known-modules.json +281 -0
  43. package/data/rules/ai-agent-governance.yaml +323 -0
  44. package/data/rules/ai-bom.yaml +268 -0
  45. package/data/rules/ai-oversight.yaml +186 -0
  46. package/data/rules/ai-provenance.yaml +92 -0
  47. package/data/rules/asar-archives.yaml +150 -0
  48. package/data/rules/cbom-security.yaml +165 -0
  49. package/data/rules/chrome-extensions.yaml +248 -0
  50. package/data/rules/ci-permissions.yaml +802 -0
  51. package/data/rules/container-risk.yaml +353 -0
  52. package/data/rules/dependency-sources.yaml +236 -0
  53. package/data/rules/golem-go.yaml +229 -0
  54. package/data/rules/hbom-compliance.yaml +325 -0
  55. package/data/rules/hbom-performance.yaml +307 -0
  56. package/data/rules/hbom-security.yaml +248 -0
  57. package/data/rules/host-topology.yaml +165 -0
  58. package/data/rules/mcp-servers.yaml +388 -0
  59. package/data/rules/obom-runtime.yaml +1776 -0
  60. package/data/rules/package-integrity.yaml +364 -0
  61. package/data/rules/rootfs-hardening.yaml +179 -0
  62. package/data/rules/vscode-extensions.yaml +237 -0
  63. package/data/spdx-export.schema.json +6794 -0
  64. package/data/spdx-license-list.json +7449 -0
  65. package/data/spdx-licenses.json +759 -0
  66. package/data/spdx.schema.json +819 -0
  67. package/data/templates/README.md +3 -0
  68. package/data/templates/asvs-4.0.3.cdx.json +2943 -0
  69. package/data/templates/asvs-5.0.cdx.json +3046 -0
  70. package/data/templates/bsimm-v13.cdx.json +1008 -0
  71. package/data/templates/masvs-2.0.0.cdx.json +225 -0
  72. package/data/templates/nist-ssdf-1.1.cdx.json +828 -0
  73. package/data/templates/pcissc-secure-slc-1.1.cdx.json +1027 -0
  74. package/data/templates/scvs-1.0.0.cdx.json +813 -0
  75. package/data/templates/ssaf-DRAFT-2023-11.cdx.json +127 -0
  76. package/data/vendor-alias.json +41967 -0
  77. package/data/wrapdb-releases.json +4227 -0
  78. package/index.cjs +15 -0
  79. package/lib/audit/index.js +2800 -0
  80. package/lib/audit/progress.js +114 -0
  81. package/lib/audit/reporters.js +937 -0
  82. package/lib/audit/scoring.js +560 -0
  83. package/lib/audit/targets.js +798 -0
  84. package/lib/cli/bomAssembly.js +1882 -0
  85. package/lib/cli/cliOptions.js +543 -0
  86. package/lib/cli/index.js +2759 -0
  87. package/lib/cli/jsBom.js +2087 -0
  88. package/lib/cli/jvmBom.js +1858 -0
  89. package/lib/cli/managedBom.js +2083 -0
  90. package/lib/cli/nativeBom.js +2125 -0
  91. package/lib/core/activity.js +1087 -0
  92. package/lib/core/env.js +719 -0
  93. package/lib/core/fs.js +1058 -0
  94. package/lib/core/httpClient.js +730 -0
  95. package/lib/core/logger.js +280 -0
  96. package/lib/core/parallel.js +323 -0
  97. package/lib/core/paths.js +70 -0
  98. package/lib/core/projectConfig.js +122 -0
  99. package/lib/core/propertySanitizer.js +174 -0
  100. package/lib/core/spdx.js +5 -0
  101. package/lib/core/state.js +59 -0
  102. package/lib/core/text.js +207 -0
  103. package/lib/core/ui.js +920 -0
  104. package/lib/core/urls.js +84 -0
  105. package/lib/ecosystems/asarutils.js +1636 -0
  106. package/lib/ecosystems/bunutils.js +402 -0
  107. package/lib/ecosystems/caxa.js +77 -0
  108. package/lib/ecosystems/chromextutils.js +1174 -0
  109. package/lib/ecosystems/cmakeResolver.js +587 -0
  110. package/lib/ecosystems/cppEvidence.js +305 -0
  111. package/lib/ecosystems/denoutils.js +1094 -0
  112. package/lib/ecosystems/dotnetutils.js +132 -0
  113. package/lib/ecosystems/ecosystems.js +2772 -0
  114. package/lib/ecosystems/golem.js +1807 -0
  115. package/lib/ecosystems/gradleutils.js +1048 -0
  116. package/lib/ecosystems/jsEvidence.js +317 -0
  117. package/lib/ecosystems/npmutils.js +586 -0
  118. package/lib/ecosystems/parsers-bazel.js +875 -0
  119. package/lib/ecosystems/parsers-dotnet.js +1430 -0
  120. package/lib/ecosystems/parsers-gleam.js +302 -0
  121. package/lib/ecosystems/parsers-go.js +818 -0
  122. package/lib/ecosystems/parsers-js.js +4222 -0
  123. package/lib/ecosystems/parsers-jvm.js +948 -0
  124. package/lib/ecosystems/parsers-misc.js +3191 -0
  125. package/lib/ecosystems/parsers-python.js +2070 -0
  126. package/lib/ecosystems/parsers-rust.js +1294 -0
  127. package/lib/ecosystems/parsers-zig.js +861 -0
  128. package/lib/ecosystems/pep770.js +341 -0
  129. package/lib/ecosystems/pylockutils.js +427 -0
  130. package/lib/ecosystems/pythonutils.js +1281 -0
  131. package/lib/ecosystems/registryProvenance.js +1003 -0
  132. package/lib/ecosystems/remote/huggingface.js +1343 -0
  133. package/lib/ecosystems/rubyutils.js +1629 -0
  134. package/lib/ecosystems/rusi.js +820 -0
  135. package/lib/ecosystems/sbtutils.js +972 -0
  136. package/lib/ecosystems/tea.js +607 -0
  137. package/lib/ecosystems/utils.js +583 -0
  138. package/lib/ecosystems/zigResolver.js +410 -0
  139. package/lib/evinser/db.js +145 -0
  140. package/lib/evinser/evinser.js +2362 -0
  141. package/lib/evinser/scalasem.js +65 -0
  142. package/lib/evinser/swiftsem.js +767 -0
  143. package/lib/helpers/annotationFormatter.js +84 -0
  144. package/lib/helpers/bomSigner.js +312 -0
  145. package/lib/helpers/exportUtils.js +160 -0
  146. package/lib/helpers/remote/dependency-track.js +117 -0
  147. package/lib/helpers/versutils.js +202 -0
  148. package/lib/helpers/vsixutils.js +1069 -0
  149. package/lib/inventory/agentFormulationParser.js +322 -0
  150. package/lib/inventory/aiCollector.js +2140 -0
  151. package/lib/inventory/aiInventory.js +414 -0
  152. package/lib/inventory/aiModelVariants.js +121 -0
  153. package/lib/inventory/aiOversightCollector.js +661 -0
  154. package/lib/inventory/aiProvenanceCollector.js +822 -0
  155. package/lib/inventory/analyzer.js +6089 -0
  156. package/lib/inventory/analyzerScope.js +807 -0
  157. package/lib/inventory/astWorker.js +20 -0
  158. package/lib/inventory/atomUtils.js +1092 -0
  159. package/lib/inventory/auditCategories.js +192 -0
  160. package/lib/inventory/bomUtils.js +369 -0
  161. package/lib/inventory/cacheCommands.js +182 -0
  162. package/lib/inventory/cacheDir.js +104 -0
  163. package/lib/inventory/cbomutils.js +590 -0
  164. package/lib/inventory/cdxrs.js +434 -0
  165. package/lib/inventory/ciParsers/azurePipelines.js +295 -0
  166. package/lib/inventory/ciParsers/circleCi.js +286 -0
  167. package/lib/inventory/ciParsers/common.js +24 -0
  168. package/lib/inventory/ciParsers/githubActions.js +2434 -0
  169. package/lib/inventory/ciParsers/gitlabCi.js +213 -0
  170. package/lib/inventory/ciParsers/jenkins.js +180 -0
  171. package/lib/inventory/citations.js +234 -0
  172. package/lib/inventory/communityAiConfigParser.js +756 -0
  173. package/lib/inventory/containerRisk.js +204 -0
  174. package/lib/inventory/cryptoAlgorithmFamily.js +258 -0
  175. package/lib/inventory/deps.js +807 -0
  176. package/lib/inventory/depsUtils.js +588 -0
  177. package/lib/inventory/display.js +2128 -0
  178. package/lib/inventory/dosai.js +601 -0
  179. package/lib/inventory/dosaiParsers.js +154 -0
  180. package/lib/inventory/dynamic.js +145 -0
  181. package/lib/inventory/envcontext.js +1793 -0
  182. package/lib/inventory/evidenceUtils.js +774 -0
  183. package/lib/inventory/fetchBatch.js +779 -0
  184. package/lib/inventory/fetchRate.js +255 -0
  185. package/lib/inventory/forgeEnricher.js +300 -0
  186. package/lib/inventory/formulationParsers.js +422 -0
  187. package/lib/inventory/gtfobins.js +339 -0
  188. package/lib/inventory/hbom.js +719 -0
  189. package/lib/inventory/hbomAnalysis.js +310 -0
  190. package/lib/inventory/hbomLoader.js +35 -0
  191. package/lib/inventory/hostTopology.js +835 -0
  192. package/lib/inventory/inventoryStats.js +100 -0
  193. package/lib/inventory/jsonLike.js +121 -0
  194. package/lib/inventory/licenseEnhancer.js +918 -0
  195. package/lib/inventory/lolbas.js +285 -0
  196. package/lib/inventory/mcp.js +253 -0
  197. package/lib/inventory/mcpConfigParser.js +683 -0
  198. package/lib/inventory/mcpDiscovery.js +112 -0
  199. package/lib/inventory/mcpPinning.js +209 -0
  200. package/lib/inventory/osPackageResolver.js +493 -0
  201. package/lib/inventory/osinfo.js +383 -0
  202. package/lib/inventory/osqueryTransform.js +274 -0
  203. package/lib/inventory/plugins.js +466 -0
  204. package/lib/inventory/protobom.js +231 -0
  205. package/lib/inventory/protobomLoader.js +43 -0
  206. package/lib/inventory/provenanceUtils.js +224 -0
  207. package/lib/inventory/purl.js +749 -0
  208. package/lib/inventory/rustFormulationParser.js +339 -0
  209. package/lib/inventory/sbomDocument.js +340 -0
  210. package/lib/inventory/source.js +1488 -0
  211. package/lib/inventory/spdx.js +361 -0
  212. package/lib/inventory/spdxExpression.js +512 -0
  213. package/lib/inventory/spdxUtils.js +107 -0
  214. package/lib/inventory/table.js +267 -0
  215. package/lib/inventory/traceRunner.js +439 -0
  216. package/lib/inventory/unicodeScan.js +147 -0
  217. package/lib/managers/binary.js +3459 -0
  218. package/lib/managers/containerutils.js +125 -0
  219. package/lib/managers/docker.js +2145 -0
  220. package/lib/managers/dockerConnection.js +162 -0
  221. package/lib/managers/oci.js +704 -0
  222. package/lib/managers/piptree.js +267 -0
  223. package/lib/parsers/cmakeCache.js +199 -0
  224. package/lib/parsers/gguf.js +492 -0
  225. package/lib/parsers/gitAiNotes.js +233 -0
  226. package/lib/parsers/gitmodules.js +239 -0
  227. package/lib/parsers/htmlExtract.js +610 -0
  228. package/lib/parsers/huggingfaceManifest.js +551 -0
  229. package/lib/parsers/huggingfaceUtils.js +506 -0
  230. package/lib/parsers/iri.js +618 -0
  231. package/lib/parsers/npmrc.js +99 -0
  232. package/lib/parsers/ollama.js +101 -0
  233. package/lib/parsers/xml.js +841 -0
  234. package/lib/server/openapi.yaml +433 -0
  235. package/lib/server/server.js +616 -0
  236. package/lib/stages/postgen/annotator.js +977 -0
  237. package/lib/stages/postgen/auditBom.js +468 -0
  238. package/lib/stages/postgen/postgen.js +1239 -0
  239. package/lib/stages/postgen/ruleEngine.js +731 -0
  240. package/lib/stages/postgen/sortBom.js +195 -0
  241. package/lib/stages/postgen/spdxConverter.js +796 -0
  242. package/lib/stages/postgen/specVersionCompat.js +703 -0
  243. package/lib/stages/pregen/envAudit.js +388 -0
  244. package/lib/stages/pregen/pregen.js +637 -0
  245. package/lib/third-party/README.md +9 -0
  246. package/lib/third-party/arborist/CHANGELOG.md +1109 -0
  247. package/lib/third-party/arborist/LICENSE.md +20 -0
  248. package/lib/third-party/arborist/README.md +315 -0
  249. package/lib/third-party/arborist/lib/arborist/index.js +258 -0
  250. package/lib/third-party/arborist/lib/arborist/load-actual.js +605 -0
  251. package/lib/third-party/arborist/lib/arborist/load-virtual.js +300 -0
  252. package/lib/third-party/arborist/lib/bin-links.js +120 -0
  253. package/lib/third-party/arborist/lib/calc-dep-flags.js +130 -0
  254. package/lib/third-party/arborist/lib/case-insensitive-map.js +51 -0
  255. package/lib/third-party/arborist/lib/consistent-resolve.js +42 -0
  256. package/lib/third-party/arborist/lib/debug.js +50 -0
  257. package/lib/third-party/arborist/lib/dep-valid.js +190 -0
  258. package/lib/third-party/arborist/lib/edge.js +417 -0
  259. package/lib/third-party/arborist/lib/from-path.js +36 -0
  260. package/lib/third-party/arborist/lib/gather-dep-set.js +43 -0
  261. package/lib/third-party/arborist/lib/index.js +22 -0
  262. package/lib/third-party/arborist/lib/inventory.js +138 -0
  263. package/lib/third-party/arborist/lib/link.js +169 -0
  264. package/lib/third-party/arborist/lib/node.js +1673 -0
  265. package/lib/third-party/arborist/lib/npm-extension.js +45 -0
  266. package/lib/third-party/arborist/lib/override-resolves.js +11 -0
  267. package/lib/third-party/arborist/lib/override-set.js +319 -0
  268. package/lib/third-party/arborist/lib/package-extensions.js +289 -0
  269. package/lib/third-party/arborist/lib/printable.js +210 -0
  270. package/lib/third-party/arborist/lib/proc-log.js +30 -0
  271. package/lib/third-party/arborist/lib/realpath.js +100 -0
  272. package/lib/third-party/arborist/lib/relpath.js +4 -0
  273. package/lib/third-party/arborist/lib/shrinkwrap.js +1291 -0
  274. package/lib/third-party/arborist/lib/spec-from-lock.js +34 -0
  275. package/lib/third-party/arborist/lib/tree-check.js +165 -0
  276. package/lib/third-party/arborist/lib/validate-npm-package-name.js +107 -0
  277. package/lib/third-party/arborist/lib/version-from-tgz.js +51 -0
  278. package/lib/third-party/arborist/lib/yarn-lock.js +397 -0
  279. package/lib/validator/bomValidator.js +985 -0
  280. package/lib/validator/complianceEngine.js +241 -0
  281. package/lib/validator/complianceRules.js +1680 -0
  282. package/lib/validator/generated/runtime.mjs +17 -0
  283. package/lib/validator/generated/validate-1.6.mjs +21258 -0
  284. package/lib/validator/generated/validate-1.7.mjs +24803 -0
  285. package/lib/validator/generated/validate-2.0.mjs +22931 -0
  286. package/lib/validator/index.js +246 -0
  287. package/lib/validator/reporters/annotations.js +142 -0
  288. package/lib/validator/reporters/console.js +160 -0
  289. package/lib/validator/reporters/index.js +41 -0
  290. package/lib/validator/reporters/json.js +37 -0
  291. package/lib/validator/reporters/sarif.js +184 -0
  292. package/package.json +209 -26
  293. package/types/bin/audit.d.ts +3 -0
  294. package/types/bin/audit.d.ts.map +1 -0
  295. package/types/bin/cdxgen.d.ts +3 -0
  296. package/types/bin/cdxgen.d.ts.map +1 -0
  297. package/types/bin/convert.d.ts +3 -0
  298. package/types/bin/convert.d.ts.map +1 -0
  299. package/types/bin/evinse.d.ts +3 -0
  300. package/types/bin/evinse.d.ts.map +1 -0
  301. package/types/bin/hbom.d.ts +3 -0
  302. package/types/bin/hbom.d.ts.map +1 -0
  303. package/types/bin/repl.d.ts +3 -0
  304. package/types/bin/repl.d.ts.map +1 -0
  305. package/types/bin/sign.d.ts +3 -0
  306. package/types/bin/sign.d.ts.map +1 -0
  307. package/types/bin/tracebom.d.ts +3 -0
  308. package/types/bin/tracebom.d.ts.map +1 -0
  309. package/types/bin/validate.d.ts +14 -0
  310. package/types/bin/validate.d.ts.map +1 -0
  311. package/types/bin/verify.d.ts +3 -0
  312. package/types/bin/verify.d.ts.map +1 -0
  313. package/types/lib/audit/index.d.ts +153 -0
  314. package/types/lib/audit/index.d.ts.map +1 -0
  315. package/types/lib/audit/progress.d.ts +31 -0
  316. package/types/lib/audit/progress.d.ts.map +1 -0
  317. package/types/lib/audit/reporters.d.ts +62 -0
  318. package/types/lib/audit/reporters.d.ts.map +1 -0
  319. package/types/lib/audit/scoring.d.ts +36 -0
  320. package/types/lib/audit/scoring.d.ts.map +1 -0
  321. package/types/lib/audit/targets.d.ts +77 -0
  322. package/types/lib/audit/targets.d.ts.map +1 -0
  323. package/types/lib/cli/bomAssembly.d.ts +329 -0
  324. package/types/lib/cli/bomAssembly.d.ts.map +1 -0
  325. package/types/lib/cli/cliOptions.d.ts +156 -0
  326. package/types/lib/cli/cliOptions.d.ts.map +1 -0
  327. package/types/lib/cli/index.d.ts +107 -0
  328. package/types/lib/cli/index.d.ts.map +1 -0
  329. package/types/lib/cli/jsBom.d.ts +94 -0
  330. package/types/lib/cli/jsBom.d.ts.map +1 -0
  331. package/types/lib/cli/jvmBom.d.ts +54 -0
  332. package/types/lib/cli/jvmBom.d.ts.map +1 -0
  333. package/types/lib/cli/managedBom.d.ts +105 -0
  334. package/types/lib/cli/managedBom.d.ts.map +1 -0
  335. package/types/lib/cli/nativeBom.d.ts +143 -0
  336. package/types/lib/cli/nativeBom.d.ts.map +1 -0
  337. package/types/lib/core/activity.d.ts +178 -0
  338. package/types/lib/core/activity.d.ts.map +1 -0
  339. package/types/lib/core/env.d.ts +192 -0
  340. package/types/lib/core/env.d.ts.map +1 -0
  341. package/types/lib/core/fs.d.ts +158 -0
  342. package/types/lib/core/fs.d.ts.map +1 -0
  343. package/types/lib/core/httpClient.d.ts +149 -0
  344. package/types/lib/core/httpClient.d.ts.map +1 -0
  345. package/types/lib/core/logger.d.ts +50 -0
  346. package/types/lib/core/logger.d.ts.map +1 -0
  347. package/types/lib/core/parallel.d.ts +95 -0
  348. package/types/lib/core/parallel.d.ts.map +1 -0
  349. package/types/lib/core/paths.d.ts +36 -0
  350. package/types/lib/core/paths.d.ts.map +1 -0
  351. package/types/lib/core/projectConfig.d.ts +23 -0
  352. package/types/lib/core/projectConfig.d.ts.map +1 -0
  353. package/types/lib/core/propertySanitizer.d.ts +23 -0
  354. package/types/lib/core/propertySanitizer.d.ts.map +1 -0
  355. package/types/lib/core/spdx.d.ts +5 -0
  356. package/types/lib/core/spdx.d.ts.map +1 -0
  357. package/types/lib/core/state.d.ts +20 -0
  358. package/types/lib/core/state.d.ts.map +1 -0
  359. package/types/lib/core/text.d.ts +78 -0
  360. package/types/lib/core/text.d.ts.map +1 -0
  361. package/types/lib/core/ui.d.ts +87 -0
  362. package/types/lib/core/ui.d.ts.map +1 -0
  363. package/types/lib/core/urls.d.ts +43 -0
  364. package/types/lib/core/urls.d.ts.map +1 -0
  365. package/types/lib/ecosystems/asarutils.d.ts +71 -0
  366. package/types/lib/ecosystems/asarutils.d.ts.map +1 -0
  367. package/types/lib/ecosystems/bunutils.d.ts +38 -0
  368. package/types/lib/ecosystems/bunutils.d.ts.map +1 -0
  369. package/types/lib/ecosystems/caxa.d.ts +8 -0
  370. package/types/lib/ecosystems/caxa.d.ts.map +1 -0
  371. package/types/lib/ecosystems/chromextutils.d.ts +97 -0
  372. package/types/lib/ecosystems/chromextutils.d.ts.map +1 -0
  373. package/types/lib/ecosystems/cmakeResolver.d.ts +176 -0
  374. package/types/lib/ecosystems/cmakeResolver.d.ts.map +1 -0
  375. package/types/lib/ecosystems/cppEvidence.d.ts +35 -0
  376. package/types/lib/ecosystems/cppEvidence.d.ts.map +1 -0
  377. package/types/lib/ecosystems/denoutils.d.ts +76 -0
  378. package/types/lib/ecosystems/denoutils.d.ts.map +1 -0
  379. package/types/lib/ecosystems/dotnetutils.d.ts +45 -0
  380. package/types/lib/ecosystems/dotnetutils.d.ts.map +1 -0
  381. package/types/lib/ecosystems/ecosystems.d.ts +279 -0
  382. package/types/lib/ecosystems/ecosystems.d.ts.map +1 -0
  383. package/types/lib/ecosystems/golem.d.ts +60 -0
  384. package/types/lib/ecosystems/golem.d.ts.map +1 -0
  385. package/types/lib/ecosystems/gradleutils.d.ts +139 -0
  386. package/types/lib/ecosystems/gradleutils.d.ts.map +1 -0
  387. package/types/lib/ecosystems/jsEvidence.d.ts +17 -0
  388. package/types/lib/ecosystems/jsEvidence.d.ts.map +1 -0
  389. package/types/lib/ecosystems/npmutils.d.ts +183 -0
  390. package/types/lib/ecosystems/npmutils.d.ts.map +1 -0
  391. package/types/lib/ecosystems/parsers-bazel.d.ts +36 -0
  392. package/types/lib/ecosystems/parsers-bazel.d.ts.map +1 -0
  393. package/types/lib/ecosystems/parsers-dotnet.d.ts +116 -0
  394. package/types/lib/ecosystems/parsers-dotnet.d.ts.map +1 -0
  395. package/types/lib/ecosystems/parsers-gleam.d.ts +33 -0
  396. package/types/lib/ecosystems/parsers-gleam.d.ts.map +1 -0
  397. package/types/lib/ecosystems/parsers-go.d.ts +92 -0
  398. package/types/lib/ecosystems/parsers-go.d.ts.map +1 -0
  399. package/types/lib/ecosystems/parsers-js.d.ts +242 -0
  400. package/types/lib/ecosystems/parsers-js.d.ts.map +1 -0
  401. package/types/lib/ecosystems/parsers-jvm.d.ts +100 -0
  402. package/types/lib/ecosystems/parsers-jvm.d.ts.map +1 -0
  403. package/types/lib/ecosystems/parsers-misc.d.ts +450 -0
  404. package/types/lib/ecosystems/parsers-misc.d.ts.map +1 -0
  405. package/types/lib/ecosystems/parsers-python.d.ts +145 -0
  406. package/types/lib/ecosystems/parsers-python.d.ts.map +1 -0
  407. package/types/lib/ecosystems/parsers-rust.d.ts +56 -0
  408. package/types/lib/ecosystems/parsers-rust.d.ts.map +1 -0
  409. package/types/lib/ecosystems/parsers-zig.d.ts +83 -0
  410. package/types/lib/ecosystems/parsers-zig.d.ts.map +1 -0
  411. package/types/lib/ecosystems/pep770.d.ts +38 -0
  412. package/types/lib/ecosystems/pep770.d.ts.map +1 -0
  413. package/types/lib/ecosystems/pylockutils.d.ts +68 -0
  414. package/types/lib/ecosystems/pylockutils.d.ts.map +1 -0
  415. package/types/lib/ecosystems/pythonutils.d.ts +70 -0
  416. package/types/lib/ecosystems/pythonutils.d.ts.map +1 -0
  417. package/types/lib/ecosystems/registryProvenance.d.ts +26 -0
  418. package/types/lib/ecosystems/registryProvenance.d.ts.map +1 -0
  419. package/types/lib/ecosystems/remote/huggingface.d.ts +31 -0
  420. package/types/lib/ecosystems/remote/huggingface.d.ts.map +1 -0
  421. package/types/lib/ecosystems/rubyutils.d.ts +182 -0
  422. package/types/lib/ecosystems/rubyutils.d.ts.map +1 -0
  423. package/types/lib/ecosystems/rusi.d.ts +40 -0
  424. package/types/lib/ecosystems/rusi.d.ts.map +1 -0
  425. package/types/lib/ecosystems/sbtutils.d.ts +179 -0
  426. package/types/lib/ecosystems/sbtutils.d.ts.map +1 -0
  427. package/types/lib/ecosystems/tea.d.ts +180 -0
  428. package/types/lib/ecosystems/tea.d.ts.map +1 -0
  429. package/types/lib/ecosystems/utils.d.ts +41 -0
  430. package/types/lib/ecosystems/utils.d.ts.map +1 -0
  431. package/types/lib/ecosystems/zigResolver.d.ts +70 -0
  432. package/types/lib/ecosystems/zigResolver.d.ts.map +1 -0
  433. package/types/lib/evinser/db.d.ts +17 -0
  434. package/types/lib/evinser/db.d.ts.map +1 -0
  435. package/types/lib/evinser/evinser.d.ts +354 -0
  436. package/types/lib/evinser/evinser.d.ts.map +1 -0
  437. package/types/lib/evinser/scalasem.d.ts +15 -0
  438. package/types/lib/evinser/scalasem.d.ts.map +1 -0
  439. package/types/lib/evinser/swiftsem.d.ts +103 -0
  440. package/types/lib/evinser/swiftsem.d.ts.map +1 -0
  441. package/types/lib/helpers/annotationFormatter.d.ts +23 -0
  442. package/types/lib/helpers/annotationFormatter.d.ts.map +1 -0
  443. package/types/lib/helpers/bomSigner.d.ts +28 -0
  444. package/types/lib/helpers/bomSigner.d.ts.map +1 -0
  445. package/types/lib/helpers/exportUtils.d.ts +52 -0
  446. package/types/lib/helpers/exportUtils.d.ts.map +1 -0
  447. package/types/lib/helpers/remote/dependency-track.d.ts +23 -0
  448. package/types/lib/helpers/remote/dependency-track.d.ts.map +1 -0
  449. package/types/lib/helpers/versutils.d.ts +8 -0
  450. package/types/lib/helpers/versutils.d.ts.map +1 -0
  451. package/types/lib/helpers/vsixutils.d.ts +130 -0
  452. package/types/lib/helpers/vsixutils.d.ts.map +1 -0
  453. package/types/lib/inventory/agentFormulationParser.d.ts +21 -0
  454. package/types/lib/inventory/agentFormulationParser.d.ts.map +1 -0
  455. package/types/lib/inventory/aiCollector.d.ts +61 -0
  456. package/types/lib/inventory/aiCollector.d.ts.map +1 -0
  457. package/types/lib/inventory/aiInventory.d.ts +103 -0
  458. package/types/lib/inventory/aiInventory.d.ts.map +1 -0
  459. package/types/lib/inventory/aiModelVariants.d.ts +31 -0
  460. package/types/lib/inventory/aiModelVariants.d.ts.map +1 -0
  461. package/types/lib/inventory/aiOversightCollector.d.ts +28 -0
  462. package/types/lib/inventory/aiOversightCollector.d.ts.map +1 -0
  463. package/types/lib/inventory/aiProvenanceCollector.d.ts +13 -0
  464. package/types/lib/inventory/aiProvenanceCollector.d.ts.map +1 -0
  465. package/types/lib/inventory/analyzer.d.ts +157 -0
  466. package/types/lib/inventory/analyzer.d.ts.map +1 -0
  467. package/types/lib/inventory/analyzerScope.d.ts +106 -0
  468. package/types/lib/inventory/analyzerScope.d.ts.map +1 -0
  469. package/types/lib/inventory/astWorker.d.ts +9 -0
  470. package/types/lib/inventory/astWorker.d.ts.map +1 -0
  471. package/types/lib/inventory/atomUtils.d.ts +159 -0
  472. package/types/lib/inventory/atomUtils.d.ts.map +1 -0
  473. package/types/lib/inventory/auditCategories.d.ts +80 -0
  474. package/types/lib/inventory/auditCategories.d.ts.map +1 -0
  475. package/types/lib/inventory/bomUtils.d.ts +145 -0
  476. package/types/lib/inventory/bomUtils.d.ts.map +1 -0
  477. package/types/lib/inventory/cacheCommands.d.ts +28 -0
  478. package/types/lib/inventory/cacheCommands.d.ts.map +1 -0
  479. package/types/lib/inventory/cacheDir.d.ts +55 -0
  480. package/types/lib/inventory/cacheDir.d.ts.map +1 -0
  481. package/types/lib/inventory/cbomutils.d.ts +37 -0
  482. package/types/lib/inventory/cbomutils.d.ts.map +1 -0
  483. package/types/lib/inventory/cdxrs.d.ts +90 -0
  484. package/types/lib/inventory/cdxrs.d.ts.map +1 -0
  485. package/types/lib/inventory/ciParsers/azurePipelines.d.ts +27 -0
  486. package/types/lib/inventory/ciParsers/azurePipelines.d.ts.map +1 -0
  487. package/types/lib/inventory/ciParsers/circleCi.d.ts +27 -0
  488. package/types/lib/inventory/ciParsers/circleCi.d.ts.map +1 -0
  489. package/types/lib/inventory/ciParsers/common.d.ts +11 -0
  490. package/types/lib/inventory/ciParsers/common.d.ts.map +1 -0
  491. package/types/lib/inventory/ciParsers/githubActions.d.ts +38 -0
  492. package/types/lib/inventory/ciParsers/githubActions.d.ts.map +1 -0
  493. package/types/lib/inventory/ciParsers/gitlabCi.d.ts +26 -0
  494. package/types/lib/inventory/ciParsers/gitlabCi.d.ts.map +1 -0
  495. package/types/lib/inventory/ciParsers/jenkins.d.ts +26 -0
  496. package/types/lib/inventory/ciParsers/jenkins.d.ts.map +1 -0
  497. package/types/lib/inventory/citations.d.ts +90 -0
  498. package/types/lib/inventory/citations.d.ts.map +1 -0
  499. package/types/lib/inventory/communityAiConfigParser.d.ts +14 -0
  500. package/types/lib/inventory/communityAiConfigParser.d.ts.map +1 -0
  501. package/types/lib/inventory/containerRisk.d.ts +20 -0
  502. package/types/lib/inventory/containerRisk.d.ts.map +1 -0
  503. package/types/lib/inventory/cryptoAlgorithmFamily.d.ts +37 -0
  504. package/types/lib/inventory/cryptoAlgorithmFamily.d.ts.map +1 -0
  505. package/types/lib/inventory/deps.d.ts +140 -0
  506. package/types/lib/inventory/deps.d.ts.map +1 -0
  507. package/types/lib/inventory/depsUtils.d.ts +74 -0
  508. package/types/lib/inventory/depsUtils.d.ts.map +1 -0
  509. package/types/lib/inventory/display.d.ts +227 -0
  510. package/types/lib/inventory/display.d.ts.map +1 -0
  511. package/types/lib/inventory/dosai.d.ts +130 -0
  512. package/types/lib/inventory/dosai.d.ts.map +1 -0
  513. package/types/lib/inventory/dosaiParsers.d.ts +59 -0
  514. package/types/lib/inventory/dosaiParsers.d.ts.map +1 -0
  515. package/types/lib/inventory/dynamic.d.ts +25 -0
  516. package/types/lib/inventory/dynamic.d.ts.map +1 -0
  517. package/types/lib/inventory/envcontext.d.ts +377 -0
  518. package/types/lib/inventory/envcontext.d.ts.map +1 -0
  519. package/types/lib/inventory/evidenceUtils.d.ts +74 -0
  520. package/types/lib/inventory/evidenceUtils.d.ts.map +1 -0
  521. package/types/lib/inventory/fetchBatch.d.ts +127 -0
  522. package/types/lib/inventory/fetchBatch.d.ts.map +1 -0
  523. package/types/lib/inventory/fetchRate.d.ts +118 -0
  524. package/types/lib/inventory/fetchRate.d.ts.map +1 -0
  525. package/types/lib/inventory/forgeEnricher.d.ts +31 -0
  526. package/types/lib/inventory/forgeEnricher.d.ts.map +1 -0
  527. package/types/lib/inventory/formulationParsers.d.ts +50 -0
  528. package/types/lib/inventory/formulationParsers.d.ts.map +1 -0
  529. package/types/lib/inventory/gtfobins.d.ts +27 -0
  530. package/types/lib/inventory/gtfobins.d.ts.map +1 -0
  531. package/types/lib/inventory/hbom.d.ts +58 -0
  532. package/types/lib/inventory/hbom.d.ts.map +1 -0
  533. package/types/lib/inventory/hbomAnalysis.d.ts +56 -0
  534. package/types/lib/inventory/hbomAnalysis.d.ts.map +1 -0
  535. package/types/lib/inventory/hbomLoader.d.ts +7 -0
  536. package/types/lib/inventory/hbomLoader.d.ts.map +1 -0
  537. package/types/lib/inventory/hostTopology.d.ts +47 -0
  538. package/types/lib/inventory/hostTopology.d.ts.map +1 -0
  539. package/types/lib/inventory/inventoryStats.d.ts +42 -0
  540. package/types/lib/inventory/inventoryStats.d.ts.map +1 -0
  541. package/types/lib/inventory/jsonLike.d.ts +23 -0
  542. package/types/lib/inventory/jsonLike.d.ts.map +1 -0
  543. package/types/lib/inventory/licenseEnhancer.d.ts +70 -0
  544. package/types/lib/inventory/licenseEnhancer.d.ts.map +1 -0
  545. package/types/lib/inventory/lolbas.d.ts +16 -0
  546. package/types/lib/inventory/lolbas.d.ts.map +1 -0
  547. package/types/lib/inventory/mcp.d.ts +29 -0
  548. package/types/lib/inventory/mcp.d.ts.map +1 -0
  549. package/types/lib/inventory/mcpConfigParser.d.ts +20 -0
  550. package/types/lib/inventory/mcpConfigParser.d.ts.map +1 -0
  551. package/types/lib/inventory/mcpDiscovery.d.ts +33 -0
  552. package/types/lib/inventory/mcpDiscovery.d.ts.map +1 -0
  553. package/types/lib/inventory/mcpPinning.d.ts +11 -0
  554. package/types/lib/inventory/mcpPinning.d.ts.map +1 -0
  555. package/types/lib/inventory/osPackageResolver.d.ts +49 -0
  556. package/types/lib/inventory/osPackageResolver.d.ts.map +1 -0
  557. package/types/lib/inventory/osinfo.d.ts +201 -0
  558. package/types/lib/inventory/osinfo.d.ts.map +1 -0
  559. package/types/lib/inventory/osqueryTransform.d.ts +84 -0
  560. package/types/lib/inventory/osqueryTransform.d.ts.map +1 -0
  561. package/types/lib/inventory/plugins.d.ts +58 -0
  562. package/types/lib/inventory/plugins.d.ts.map +1 -0
  563. package/types/lib/inventory/protobom.d.ts +71 -0
  564. package/types/lib/inventory/protobom.d.ts.map +1 -0
  565. package/types/lib/inventory/protobomLoader.d.ts +17 -0
  566. package/types/lib/inventory/protobomLoader.d.ts.map +1 -0
  567. package/types/lib/inventory/provenanceUtils.d.ts +98 -0
  568. package/types/lib/inventory/provenanceUtils.d.ts.map +1 -0
  569. package/types/lib/inventory/purl.d.ts +313 -0
  570. package/types/lib/inventory/purl.d.ts.map +1 -0
  571. package/types/lib/inventory/rustFormulationParser.d.ts +17 -0
  572. package/types/lib/inventory/rustFormulationParser.d.ts.map +1 -0
  573. package/types/lib/inventory/sbomDocument.d.ts +59 -0
  574. package/types/lib/inventory/sbomDocument.d.ts.map +1 -0
  575. package/types/lib/inventory/source.d.ts +163 -0
  576. package/types/lib/inventory/source.d.ts.map +1 -0
  577. package/types/lib/inventory/spdx.d.ts +66 -0
  578. package/types/lib/inventory/spdx.d.ts.map +1 -0
  579. package/types/lib/inventory/spdxExpression.d.ts +58 -0
  580. package/types/lib/inventory/spdxExpression.d.ts.map +1 -0
  581. package/types/lib/inventory/spdxUtils.d.ts +12 -0
  582. package/types/lib/inventory/spdxUtils.d.ts.map +1 -0
  583. package/types/lib/inventory/table.d.ts +22 -0
  584. package/types/lib/inventory/table.d.ts.map +1 -0
  585. package/types/lib/inventory/traceRunner.d.ts +80 -0
  586. package/types/lib/inventory/traceRunner.d.ts.map +1 -0
  587. package/types/lib/inventory/unicodeScan.d.ts +46 -0
  588. package/types/lib/inventory/unicodeScan.d.ts.map +1 -0
  589. package/types/lib/managers/binary.d.ts +147 -0
  590. package/types/lib/managers/binary.d.ts.map +1 -0
  591. package/types/lib/managers/containerutils.d.ts +30 -0
  592. package/types/lib/managers/containerutils.d.ts.map +1 -0
  593. package/types/lib/managers/docker.d.ts +157 -0
  594. package/types/lib/managers/docker.d.ts.map +1 -0
  595. package/types/lib/managers/dockerConnection.d.ts +42 -0
  596. package/types/lib/managers/dockerConnection.d.ts.map +1 -0
  597. package/types/lib/managers/oci.d.ts +21 -0
  598. package/types/lib/managers/oci.d.ts.map +1 -0
  599. package/types/lib/managers/piptree.d.ts +13 -0
  600. package/types/lib/managers/piptree.d.ts.map +1 -0
  601. package/types/lib/parsers/cmakeCache.d.ts +70 -0
  602. package/types/lib/parsers/cmakeCache.d.ts.map +1 -0
  603. package/types/lib/parsers/gguf.d.ts +39 -0
  604. package/types/lib/parsers/gguf.d.ts.map +1 -0
  605. package/types/lib/parsers/gitAiNotes.d.ts +15 -0
  606. package/types/lib/parsers/gitAiNotes.d.ts.map +1 -0
  607. package/types/lib/parsers/gitmodules.d.ts +88 -0
  608. package/types/lib/parsers/gitmodules.d.ts.map +1 -0
  609. package/types/lib/parsers/htmlExtract.d.ts +34 -0
  610. package/types/lib/parsers/htmlExtract.d.ts.map +1 -0
  611. package/types/lib/parsers/huggingfaceManifest.d.ts +153 -0
  612. package/types/lib/parsers/huggingfaceManifest.d.ts.map +1 -0
  613. package/types/lib/parsers/huggingfaceUtils.d.ts +155 -0
  614. package/types/lib/parsers/huggingfaceUtils.d.ts.map +1 -0
  615. package/types/lib/parsers/iri.d.ts +68 -0
  616. package/types/lib/parsers/iri.d.ts.map +1 -0
  617. package/types/lib/parsers/npmrc.d.ts +33 -0
  618. package/types/lib/parsers/npmrc.d.ts.map +1 -0
  619. package/types/lib/parsers/ollama.d.ts +22 -0
  620. package/types/lib/parsers/ollama.d.ts.map +1 -0
  621. package/types/lib/parsers/xml.d.ts +47 -0
  622. package/types/lib/parsers/xml.d.ts.map +1 -0
  623. package/types/lib/server/server.d.ts +51 -0
  624. package/types/lib/server/server.d.ts.map +1 -0
  625. package/types/lib/stages/postgen/annotator.d.ts +36 -0
  626. package/types/lib/stages/postgen/annotator.d.ts.map +1 -0
  627. package/types/lib/stages/postgen/auditBom.d.ts +92 -0
  628. package/types/lib/stages/postgen/auditBom.d.ts.map +1 -0
  629. package/types/lib/stages/postgen/postgen.d.ts +59 -0
  630. package/types/lib/stages/postgen/postgen.d.ts.map +1 -0
  631. package/types/lib/stages/postgen/ruleEngine.d.ts +18 -0
  632. package/types/lib/stages/postgen/ruleEngine.d.ts.map +1 -0
  633. package/types/lib/stages/postgen/sortBom.d.ts +34 -0
  634. package/types/lib/stages/postgen/sortBom.d.ts.map +1 -0
  635. package/types/lib/stages/postgen/spdxConverter.d.ts +11 -0
  636. package/types/lib/stages/postgen/spdxConverter.d.ts.map +1 -0
  637. package/types/lib/stages/postgen/specVersionCompat.d.ts +71 -0
  638. package/types/lib/stages/postgen/specVersionCompat.d.ts.map +1 -0
  639. package/types/lib/stages/pregen/envAudit.d.ts +14 -0
  640. package/types/lib/stages/pregen/envAudit.d.ts.map +1 -0
  641. package/types/lib/stages/pregen/pregen.d.ts +59 -0
  642. package/types/lib/stages/pregen/pregen.d.ts.map +1 -0
  643. package/types/lib/third-party/arborist/lib/arborist/index.d.ts +47 -0
  644. package/types/lib/third-party/arborist/lib/arborist/index.d.ts.map +1 -0
  645. package/types/lib/third-party/arborist/lib/arborist/load-actual.d.ts +4 -0
  646. package/types/lib/third-party/arborist/lib/arborist/load-actual.d.ts.map +1 -0
  647. package/types/lib/third-party/arborist/lib/arborist/load-virtual.d.ts +4 -0
  648. package/types/lib/third-party/arborist/lib/arborist/load-virtual.d.ts.map +1 -0
  649. package/types/lib/third-party/arborist/lib/bin-links.d.ts +18 -0
  650. package/types/lib/third-party/arborist/lib/bin-links.d.ts.map +1 -0
  651. package/types/lib/third-party/arborist/lib/calc-dep-flags.d.ts +3 -0
  652. package/types/lib/third-party/arborist/lib/calc-dep-flags.d.ts.map +1 -0
  653. package/types/lib/third-party/arborist/lib/case-insensitive-map.d.ts +9 -0
  654. package/types/lib/third-party/arborist/lib/case-insensitive-map.d.ts.map +1 -0
  655. package/types/lib/third-party/arborist/lib/consistent-resolve.d.ts +3 -0
  656. package/types/lib/third-party/arborist/lib/consistent-resolve.d.ts.map +1 -0
  657. package/types/lib/third-party/arborist/lib/debug.d.ts +3 -0
  658. package/types/lib/third-party/arborist/lib/debug.d.ts.map +1 -0
  659. package/types/lib/third-party/arborist/lib/dep-valid.d.ts +3 -0
  660. package/types/lib/third-party/arborist/lib/dep-valid.d.ts.map +1 -0
  661. package/types/lib/third-party/arborist/lib/edge.d.ts +46 -0
  662. package/types/lib/third-party/arborist/lib/edge.d.ts.map +1 -0
  663. package/types/lib/third-party/arborist/lib/from-path.d.ts +3 -0
  664. package/types/lib/third-party/arborist/lib/from-path.d.ts.map +1 -0
  665. package/types/lib/third-party/arborist/lib/gather-dep-set.d.ts +3 -0
  666. package/types/lib/third-party/arborist/lib/gather-dep-set.d.ts.map +1 -0
  667. package/types/lib/third-party/arborist/lib/index.d.ts +3 -0
  668. package/types/lib/third-party/arborist/lib/index.d.ts.map +1 -0
  669. package/types/lib/third-party/arborist/lib/inventory.d.ts +14 -0
  670. package/types/lib/third-party/arborist/lib/inventory.d.ts.map +1 -0
  671. package/types/lib/third-party/arborist/lib/link.d.ts +18 -0
  672. package/types/lib/third-party/arborist/lib/link.d.ts.map +1 -0
  673. package/types/lib/third-party/arborist/lib/node.d.ts +112 -0
  674. package/types/lib/third-party/arborist/lib/node.d.ts.map +1 -0
  675. package/types/lib/third-party/arborist/lib/npm-extension.d.ts +18 -0
  676. package/types/lib/third-party/arborist/lib/npm-extension.d.ts.map +1 -0
  677. package/types/lib/third-party/arborist/lib/override-resolves.d.ts +3 -0
  678. package/types/lib/third-party/arborist/lib/override-resolves.d.ts.map +1 -0
  679. package/types/lib/third-party/arborist/lib/override-set.d.ts +27 -0
  680. package/types/lib/third-party/arborist/lib/override-set.d.ts.map +1 -0
  681. package/types/lib/third-party/arborist/lib/package-extensions.d.ts +36 -0
  682. package/types/lib/third-party/arborist/lib/package-extensions.d.ts.map +1 -0
  683. package/types/lib/third-party/arborist/lib/printable.d.ts +3 -0
  684. package/types/lib/third-party/arborist/lib/printable.d.ts.map +1 -0
  685. package/types/lib/third-party/arborist/lib/proc-log.d.ts +20 -0
  686. package/types/lib/third-party/arborist/lib/proc-log.d.ts.map +1 -0
  687. package/types/lib/third-party/arborist/lib/realpath.d.ts +3 -0
  688. package/types/lib/third-party/arborist/lib/realpath.d.ts.map +1 -0
  689. package/types/lib/third-party/arborist/lib/relpath.d.ts +3 -0
  690. package/types/lib/third-party/arborist/lib/relpath.d.ts.map +1 -0
  691. package/types/lib/third-party/arborist/lib/shrinkwrap.d.ts +54 -0
  692. package/types/lib/third-party/arborist/lib/shrinkwrap.d.ts.map +1 -0
  693. package/types/lib/third-party/arborist/lib/spec-from-lock.d.ts +3 -0
  694. package/types/lib/third-party/arborist/lib/spec-from-lock.d.ts.map +1 -0
  695. package/types/lib/third-party/arborist/lib/tree-check.d.ts +3 -0
  696. package/types/lib/third-party/arborist/lib/tree-check.d.ts.map +1 -0
  697. package/types/lib/third-party/arborist/lib/validate-npm-package-name.d.ts +13 -0
  698. package/types/lib/third-party/arborist/lib/validate-npm-package-name.d.ts.map +1 -0
  699. package/types/lib/third-party/arborist/lib/version-from-tgz.d.ts +6 -0
  700. package/types/lib/third-party/arborist/lib/version-from-tgz.d.ts.map +1 -0
  701. package/types/lib/third-party/arborist/lib/yarn-lock.d.ts +35 -0
  702. package/types/lib/third-party/arborist/lib/yarn-lock.d.ts.map +1 -0
  703. package/types/lib/validator/bomValidator.d.ts +40 -0
  704. package/types/lib/validator/bomValidator.d.ts.map +1 -0
  705. package/types/lib/validator/complianceEngine.d.ts +72 -0
  706. package/types/lib/validator/complianceEngine.d.ts.map +1 -0
  707. package/types/lib/validator/complianceRules.d.ts +61 -0
  708. package/types/lib/validator/complianceRules.d.ts.map +1 -0
  709. package/types/lib/validator/index.d.ts +101 -0
  710. package/types/lib/validator/index.d.ts.map +1 -0
  711. package/types/lib/validator/reporters/annotations.d.ts +37 -0
  712. package/types/lib/validator/reporters/annotations.d.ts.map +1 -0
  713. package/types/lib/validator/reporters/console.d.ts +34 -0
  714. package/types/lib/validator/reporters/console.d.ts.map +1 -0
  715. package/types/lib/validator/reporters/index.d.ts +30 -0
  716. package/types/lib/validator/reporters/index.d.ts.map +1 -0
  717. package/types/lib/validator/reporters/json.d.ts +11 -0
  718. package/types/lib/validator/reporters/json.d.ts.map +1 -0
  719. package/types/lib/validator/reporters/sarif.d.ts +22 -0
  720. package/types/lib/validator/reporters/sarif.d.ts.map +1 -0
  721. package/mod.d.ts +0 -7
  722. package/mod.js +0 -22
@@ -0,0 +1,937 @@
1
+ import { getTimestamp } from "../core/fs.js";
2
+ import { buildAnnotationText } from "../helpers/annotationFormatter.js";
3
+ import { table } from "../inventory/table.js";
4
+ import { renderBomAuditConsoleReport } from "../stages/postgen/auditBom.js";
5
+ import { severityMeetsThreshold } from "./scoring.js";
6
+
7
+ const SARIF_VERSION = "2.1.0";
8
+ const SARIF_SCHEMA =
9
+ "https://raw.githubusercontent.com/oasis-tcs/sarif-spec/main/Schemata/sarif-schema-2.1.0.json";
10
+ const AUDIT_ERROR_RULE_ID = "AUDIT-ERROR";
11
+
12
+ /**
13
+ * Filter results by final severity threshold.
14
+ *
15
+ * @param {object[]} results results list
16
+ * @param {string} minSeverity threshold severity
17
+ * @returns {object[]} filtered results
18
+ */
19
+ function filterResults(results, minSeverity) {
20
+ return results.filter((result) =>
21
+ severityMeetsThreshold(result?.assessment?.severity || "none", minSeverity),
22
+ );
23
+ }
24
+
25
+ function filterDirectFindingEntries(report, minSeverity) {
26
+ const entries = [];
27
+ for (const result of report?.results || []) {
28
+ for (const finding of result?.findings || []) {
29
+ if (severityMeetsThreshold(finding?.severity || "none", minSeverity)) {
30
+ entries.push({ finding, result });
31
+ }
32
+ }
33
+ }
34
+ return entries;
35
+ }
36
+
37
+ function effectiveResults(report) {
38
+ return report.groupedResults?.length
39
+ ? report.groupedResults
40
+ : report.results || [];
41
+ }
42
+
43
+ function formatAnalysisErrorCounts(summary) {
44
+ const entries = Object.entries(summary?.analysisErrorCounts || {});
45
+ if (!entries.length) {
46
+ return undefined;
47
+ }
48
+ return entries
49
+ .sort(([left], [right]) => left.localeCompare(right))
50
+ .map(([errorType, count]) => `${errorType}: ${count}`)
51
+ .join(", ");
52
+ }
53
+
54
+ function severityToSarifLevel(severity) {
55
+ switch (severity) {
56
+ case "critical":
57
+ case "high":
58
+ return "error";
59
+ case "medium":
60
+ return "warning";
61
+ default:
62
+ return "note";
63
+ }
64
+ }
65
+
66
+ function directBomFindingLocations(finding, result) {
67
+ const bomRef =
68
+ finding?.location?.bomRef ||
69
+ finding?.location?.purl ||
70
+ result?.serialNumber ||
71
+ result?.source;
72
+ if (finding?.location?.file) {
73
+ return [
74
+ {
75
+ physicalLocation: {
76
+ artifactLocation: {
77
+ uri: finding.location.file,
78
+ },
79
+ },
80
+ logicalLocations: bomRef
81
+ ? [{ fullyQualifiedName: bomRef, kind: "package" }]
82
+ : undefined,
83
+ },
84
+ ];
85
+ }
86
+ if (bomRef) {
87
+ return [
88
+ {
89
+ logicalLocations: [{ fullyQualifiedName: bomRef, kind: "package" }],
90
+ },
91
+ ];
92
+ }
93
+ return [
94
+ {
95
+ logicalLocations: [{ fullyQualifiedName: "cdx-audit", kind: "tool" }],
96
+ },
97
+ ];
98
+ }
99
+
100
+ function deriveDirectBomSarifRules(entries) {
101
+ const rulesById = new Map();
102
+ for (const { finding } of entries) {
103
+ if (rulesById.has(finding.ruleId)) {
104
+ continue;
105
+ }
106
+ rulesById.set(finding.ruleId, {
107
+ id: finding.ruleId,
108
+ name: finding.name || finding.ruleId,
109
+ shortDescription: {
110
+ text: finding.name || finding.ruleId,
111
+ },
112
+ fullDescription: {
113
+ text: finding.description || finding.name || finding.ruleId,
114
+ },
115
+ defaultConfiguration: {
116
+ level: severityToSarifLevel(finding.severity),
117
+ },
118
+ help: finding.mitigation
119
+ ? {
120
+ markdown: `**Remediation:** ${finding.mitigation}`,
121
+ text: finding.mitigation,
122
+ }
123
+ : undefined,
124
+ properties: {
125
+ attackTactics: finding.attackTactics,
126
+ attackTechniques: finding.attackTechniques,
127
+ category: finding.category,
128
+ engine: "cdx-audit-direct-bom",
129
+ tags: attackTags(finding),
130
+ },
131
+ });
132
+ }
133
+ return [...rulesById.values()];
134
+ }
135
+
136
+ function directBomFindingToSarifResult(finding, result) {
137
+ return {
138
+ level: severityToSarifLevel(finding?.severity),
139
+ locations: directBomFindingLocations(finding, result),
140
+ message: {
141
+ text: finding?.message || finding?.description || finding?.ruleId,
142
+ },
143
+ properties: {
144
+ attackTactics: finding?.attackTactics,
145
+ attackTechniques: finding?.attackTechniques,
146
+ category: finding?.category,
147
+ description: finding?.description,
148
+ evidence: finding?.evidence,
149
+ inputBom: result?.source,
150
+ mitigation: finding?.mitigation,
151
+ severity: finding?.severity,
152
+ },
153
+ ruleId: finding?.ruleId || AUDIT_ERROR_RULE_ID,
154
+ };
155
+ }
156
+
157
+ function splitCsv(value) {
158
+ return String(value || "")
159
+ .split(",")
160
+ .map((entry) => entry.trim())
161
+ .filter(Boolean);
162
+ }
163
+
164
+ function extractLocalDispatchEdge(finding) {
165
+ const senderFile = finding?.location?.file;
166
+ const receiverFiles = splitCsv(finding?.evidence?.localReceiverWorkflowFiles);
167
+ const receiverNames = splitCsv(finding?.evidence?.localReceiverWorkflowNames);
168
+ const matchBasis = splitCsv(finding?.evidence?.localReceiverMatchBasis);
169
+ const hasLocalDispatchReceiver =
170
+ finding?.evidence?.hasLocalDispatchReceiver === "true" ||
171
+ receiverFiles.length > 0 ||
172
+ receiverNames.length > 0;
173
+ if (!senderFile || !hasLocalDispatchReceiver) {
174
+ return undefined;
175
+ }
176
+ return {
177
+ matchBasis,
178
+ receiverFiles,
179
+ receiverNames,
180
+ senderFile,
181
+ };
182
+ }
183
+
184
+ function formatLocalDispatchEdge(edge) {
185
+ if (!edge) {
186
+ return undefined;
187
+ }
188
+ const receiverLabel = edge.receiverNames[0] || edge.receiverFiles[0];
189
+ if (!receiverLabel) {
190
+ return undefined;
191
+ }
192
+ return `${edge.senderFile} -> ${receiverLabel}`;
193
+ }
194
+
195
+ function targetSarifLocations(result, findingLocation) {
196
+ const bomRef =
197
+ findingLocation?.bomRef ||
198
+ result?.target?.bomRefs?.[0] ||
199
+ result?.target?.purl ||
200
+ result?.grouping?.label;
201
+ if (findingLocation?.file) {
202
+ return [
203
+ {
204
+ physicalLocation: {
205
+ artifactLocation: {
206
+ uri: findingLocation.file,
207
+ },
208
+ },
209
+ logicalLocations: bomRef
210
+ ? [{ fullyQualifiedName: bomRef, kind: "package" }]
211
+ : undefined,
212
+ },
213
+ ];
214
+ }
215
+ if (bomRef) {
216
+ return [
217
+ {
218
+ logicalLocations: [{ fullyQualifiedName: bomRef, kind: "package" }],
219
+ },
220
+ ];
221
+ }
222
+ return [
223
+ {
224
+ logicalLocations: [{ fullyQualifiedName: "cdx-audit", kind: "tool" }],
225
+ },
226
+ ];
227
+ }
228
+
229
+ function resultProperties(result) {
230
+ const properties = {
231
+ auditSeverity: result?.assessment?.severity || "none",
232
+ confidence: result?.assessment?.confidenceLabel,
233
+ reasons: result?.assessment?.reasons || [],
234
+ score: result?.assessment?.score,
235
+ status: result?.status,
236
+ target: {
237
+ bomRefs: result?.target?.bomRefs || [],
238
+ name: result?.target?.name,
239
+ namespace: result?.target?.namespace,
240
+ purl: result?.target?.purl,
241
+ type: result?.target?.type,
242
+ version: result?.target?.version,
243
+ },
244
+ };
245
+ if (result?.grouping) {
246
+ properties.grouping = result.grouping;
247
+ }
248
+ if (result?.repoUrl) {
249
+ properties.repoUrl = result.repoUrl;
250
+ }
251
+ if (result?.sourceDirectoryConfidence) {
252
+ properties.sourceDirectoryConfidence = result.sourceDirectoryConfidence;
253
+ }
254
+ return properties;
255
+ }
256
+
257
+ function findingProperties(finding) {
258
+ const properties = {
259
+ attackTactics: finding?.attackTactics,
260
+ attackTechniques: finding?.attackTechniques,
261
+ category: finding?.category,
262
+ mitigation: finding?.mitigation,
263
+ severity: finding?.severity,
264
+ tags: attackTags(finding),
265
+ };
266
+ const localDispatchEdge = extractLocalDispatchEdge(finding);
267
+ if (localDispatchEdge) {
268
+ properties.localDispatchEdge = formatLocalDispatchEdge(localDispatchEdge);
269
+ properties.localDispatchReceiverFiles = localDispatchEdge.receiverFiles;
270
+ properties.localDispatchReceiverNames = localDispatchEdge.receiverNames;
271
+ properties.localDispatchMatchBasis = localDispatchEdge.matchBasis;
272
+ }
273
+ return properties;
274
+ }
275
+
276
+ function sarifRelatedLocations(finding) {
277
+ const localDispatchEdge = extractLocalDispatchEdge(finding);
278
+ if (!localDispatchEdge?.receiverFiles?.length) {
279
+ return undefined;
280
+ }
281
+ return localDispatchEdge.receiverFiles.map((receiverFile, index) => ({
282
+ id: index + 1,
283
+ logicalLocations: localDispatchEdge.receiverNames[index]
284
+ ? [
285
+ {
286
+ fullyQualifiedName: localDispatchEdge.receiverNames[index],
287
+ kind: "function",
288
+ },
289
+ ]
290
+ : undefined,
291
+ message: {
292
+ text: `Local dispatch receiver: ${
293
+ localDispatchEdge.receiverNames[index] || receiverFile
294
+ }`,
295
+ },
296
+ physicalLocation: {
297
+ artifactLocation: {
298
+ uri: receiverFile,
299
+ },
300
+ },
301
+ }));
302
+ }
303
+
304
+ function sarifHelp(finding, result) {
305
+ const helpText = [];
306
+ if (finding?.mitigation) {
307
+ helpText.push(finding.mitigation);
308
+ }
309
+ const upstreamEscalation = summarizeUpstreamEscalation(result);
310
+ if (upstreamEscalation) {
311
+ helpText.push(upstreamEscalation);
312
+ }
313
+ if (!helpText.length) {
314
+ return undefined;
315
+ }
316
+ return {
317
+ markdown: helpText
318
+ .map((entry, index) =>
319
+ index === 0
320
+ ? `**Remediation:** ${entry}`
321
+ : `**External maintainer path:** ${entry}`,
322
+ )
323
+ .join("\n\n"),
324
+ text: helpText.join(" "),
325
+ };
326
+ }
327
+
328
+ function attackTags(finding) {
329
+ return [
330
+ ...(finding?.attackTactics || []),
331
+ ...(finding?.attackTechniques || []),
332
+ ].map((id) => `ATT&CK:${id}`);
333
+ }
334
+
335
+ function deriveSarifRules(entries) {
336
+ const rulesById = new Map();
337
+ for (const entry of entries) {
338
+ const finding = entry.finding;
339
+ const result = entry.result;
340
+ if (rulesById.has(finding.ruleId)) {
341
+ continue;
342
+ }
343
+ rulesById.set(finding.ruleId, {
344
+ id: finding.ruleId,
345
+ name: finding.name || finding.ruleId,
346
+ shortDescription: {
347
+ text: finding.name || finding.ruleId,
348
+ },
349
+ fullDescription: {
350
+ text: finding.description || finding.name || finding.ruleId,
351
+ },
352
+ defaultConfiguration: {
353
+ level: severityToSarifLevel(finding.severity),
354
+ },
355
+ properties: {
356
+ attackTactics: finding.attackTactics,
357
+ attackTechniques: finding.attackTechniques,
358
+ category: finding.category,
359
+ engine: finding.engine || "cdx-audit",
360
+ tags: attackTags(finding),
361
+ },
362
+ help: sarifHelp(finding, result),
363
+ });
364
+ }
365
+ return [...rulesById.values()];
366
+ }
367
+
368
+ function findingToSarifResult(finding, result) {
369
+ const nextAction = summarizeNextAction(result);
370
+ const upstreamEscalation = summarizeUpstreamEscalation(result);
371
+ return {
372
+ level: severityToSarifLevel(
373
+ finding?.severity || result?.assessment?.severity,
374
+ ),
375
+ locations: targetSarifLocations(result, finding?.location),
376
+ message: {
377
+ text: finding?.message || finding?.description || finding?.ruleId,
378
+ },
379
+ properties: {
380
+ ...resultProperties(result),
381
+ ...findingProperties(finding),
382
+ nextAction,
383
+ upstreamEscalation,
384
+ },
385
+ relatedLocations: sarifRelatedLocations(finding),
386
+ ruleId: finding?.ruleId || AUDIT_ERROR_RULE_ID,
387
+ };
388
+ }
389
+
390
+ function errorToSarifEntry(result) {
391
+ const severity = result?.assessment?.severity || "high";
392
+ return {
393
+ category: result?.errorType || "runtime",
394
+ description:
395
+ "cdx-audit could not complete predictive analysis for the resolved target.",
396
+ message: result?.error || "cdx-audit failed to analyze the target.",
397
+ name: "Target analysis error",
398
+ ruleId: AUDIT_ERROR_RULE_ID,
399
+ severity,
400
+ };
401
+ }
402
+
403
+ function consoleTargetLabel(result) {
404
+ if (result?.grouping?.label) {
405
+ return result.grouping.label;
406
+ }
407
+ if (result?.target?.purl) {
408
+ return result.target.purl;
409
+ }
410
+ const namespacePrefix = result?.target?.namespace
411
+ ? `${result.target.namespace}/`
412
+ : "";
413
+ const versionSuffix = result?.target?.version
414
+ ? `@${result.target.version}`
415
+ : "";
416
+ return `${result?.target?.type || "pkg"}:${namespacePrefix}${result?.target?.name || "unknown"}${versionSuffix}`;
417
+ }
418
+
419
+ function topFinding(result) {
420
+ return result?.findings?.[0];
421
+ }
422
+
423
+ function summarizeWhy(result) {
424
+ const finding = topFinding(result);
425
+ const localDispatchEdge = extractLocalDispatchEdge(finding);
426
+ if (finding?.message && localDispatchEdge) {
427
+ return `${finding.ruleId} — ${finding.message} (${formatLocalDispatchEdge(localDispatchEdge)})`;
428
+ }
429
+ if (finding?.message) {
430
+ return `${finding.ruleId} — ${finding.message}`;
431
+ }
432
+ if (result?.error) {
433
+ return result.error;
434
+ }
435
+ return (
436
+ result?.assessment?.reasons?.[0] || "Review the predictive audit details."
437
+ );
438
+ }
439
+
440
+ function groupedPurlPreview(result) {
441
+ if (!result?.grouping?.groupedPurls?.length) {
442
+ return undefined;
443
+ }
444
+ const preview = result.grouping.groupedPurls.slice(0, 2).join(", ");
445
+ return result.grouping.groupedPurls.length > 2 ? `${preview}, …` : preview;
446
+ }
447
+
448
+ function summarizeReviewFocus(result) {
449
+ const finding = topFinding(result);
450
+ const localDispatchEdge = extractLocalDispatchEdge(finding);
451
+ if (localDispatchEdge?.receiverFiles?.length) {
452
+ return `Review sender '${localDispatchEdge.senderFile}' together with receiver '${localDispatchEdge.receiverFiles[0]}' for the flagged workflow-dispatch chain.`;
453
+ }
454
+ if (finding?.location?.file && result?.repoUrl) {
455
+ return `Review '${finding.location.file}' in ${result.repoUrl}.`;
456
+ }
457
+ if (finding?.location?.file) {
458
+ return `Review '${finding.location.file}' for the flagged workflow or release step.`;
459
+ }
460
+ if (result?.grouping?.memberCount > 1) {
461
+ return `Start with ${groupedPurlPreview(result) || result.grouping.label} and inspect the shared repository or workflow pattern.`;
462
+ }
463
+ if (result?.repoUrl) {
464
+ return `Review ${result.repoUrl} for the flagged release workflow, provenance, or publish behavior.`;
465
+ }
466
+ if (finding?.location?.purl) {
467
+ return `Inspect ${finding.location.purl} in your dependency tree and verify its source and release posture.`;
468
+ }
469
+ if (result?.target?.purl) {
470
+ return `Inspect ${result.target.purl} and verify its source repository, release workflow, and provenance signals.`;
471
+ }
472
+ return "Review the reported target and verify the associated repository, workflow, or package metadata.";
473
+ }
474
+
475
+ function summarizeUpstreamEscalation(result) {
476
+ const finding = topFinding(result);
477
+ if (finding?.location?.file && result?.repoUrl) {
478
+ return `If you do not maintain this repository, open an issue or discussion with the upstream maintainers and reference '${finding.location.file}'.`;
479
+ }
480
+ if (result?.grouping?.memberCount > 1) {
481
+ return `If these dependencies are maintained externally, open an issue or discussion with the upstream maintainers and reference ${result.grouping.label}.`;
482
+ }
483
+ if (result?.target?.purl) {
484
+ return `If this dependency is maintained externally, open an issue or discussion with the upstream maintainers and reference ${result.target.purl}.`;
485
+ }
486
+ if (result?.repoUrl) {
487
+ return "If you do not maintain this repository, open an issue or discussion with the upstream maintainers and share the predictive audit finding.";
488
+ }
489
+ return undefined;
490
+ }
491
+
492
+ function summarizeNextAction(result) {
493
+ const finding = topFinding(result);
494
+ if (result?.error) {
495
+ return `${summarizeReviewFocus(result)} Verify repository access, source resolution, and clone permissions before re-running the audit.`;
496
+ }
497
+ const nextSteps = [summarizeReviewFocus(result)];
498
+ if (finding?.mitigation) {
499
+ nextSteps.push(finding.mitigation);
500
+ }
501
+ const upstreamEscalation = summarizeUpstreamEscalation(result);
502
+ if (upstreamEscalation) {
503
+ nextSteps.push(upstreamEscalation);
504
+ }
505
+ return nextSteps.join(" ");
506
+ }
507
+
508
+ /**
509
+ * Render the license policy violations as a standalone table. Returns an empty
510
+ * string when there are no violations to show.
511
+ *
512
+ * @param {object[]} violations license violations
513
+ * @returns {string} rendered table block (with heading) or empty string
514
+ */
515
+ function renderLicenseViolationsTable(violations) {
516
+ if (!violations?.length) {
517
+ return "";
518
+ }
519
+ const alertRank = { error: 3, warning: 2, pass: 1 };
520
+ const sorted = [...violations].sort(
521
+ (a, b) => (alertRank[b.alert] || 0) - (alertRank[a.alert] || 0),
522
+ );
523
+ const rows = [["Alert", "Component", "License", "Category"]];
524
+ for (const violation of sorted) {
525
+ const component = violation.version
526
+ ? `${violation.ref} @ ${violation.version}`
527
+ : violation.ref;
528
+ rows.push([
529
+ (violation.alert || "").toUpperCase(),
530
+ component,
531
+ violation.license || "",
532
+ violation.category || "Unstated License",
533
+ ]);
534
+ }
535
+ const errors = sorted.filter((v) => v.alert === "error").length;
536
+ const warnings = sorted.filter((v) => v.alert === "warning").length;
537
+ const lines = [
538
+ "License policy violations:",
539
+ `Prohibited: ${errors} Warnings: ${warnings}`,
540
+ "",
541
+ table(rows, {
542
+ columns: [{ width: 9 }, { width: 50 }, { width: 32 }, { width: 20 }],
543
+ columnDefault: { wrapWord: false },
544
+ }),
545
+ ];
546
+ return lines.join("\n");
547
+ }
548
+
549
+ function renderActionTable(results) {
550
+ const rows = [
551
+ ["Severity", "Target", "Why this needs action", "What to do next"],
552
+ ];
553
+ results.forEach((result) => {
554
+ rows.push([
555
+ result?.assessment?.severity?.toUpperCase() || "NONE",
556
+ consoleTargetLabel(result),
557
+ summarizeWhy(result),
558
+ summarizeNextAction(result),
559
+ ]);
560
+ });
561
+ return table(rows, {
562
+ columns: [{ width: 10 }, { width: 36 }, { width: 52 }, { width: 68 }],
563
+ columnDefault: { wrapWord: false },
564
+ });
565
+ }
566
+
567
+ /**
568
+ * Render a predictive audit report as a SARIF 2.1.0 document.
569
+ *
570
+ * Converts visible findings (filtered by the configured minimum severity) into
571
+ * SARIF results and derives the rule table, producing a serialised JSON string
572
+ * conforming to the SARIF 2.1.0 schema.
573
+ *
574
+ * @param {object} report Aggregate audit report
575
+ * @param {object} [options={}] Render options including optional `minSeverity`
576
+ * @returns {string} SARIF 2.1.0 JSON document as a string
577
+ */
578
+ export function renderSarifReport(report, options = {}) {
579
+ const minSeverity = options.minSeverity || "low";
580
+ const visibleResults = filterResults(effectiveResults(report), minSeverity);
581
+ const entries = [];
582
+ const sarifResults = [];
583
+ for (const result of visibleResults) {
584
+ if (result?.findings?.length) {
585
+ for (const finding of result.findings) {
586
+ entries.push({ finding, result });
587
+ sarifResults.push(findingToSarifResult(finding, result));
588
+ }
589
+ continue;
590
+ }
591
+ if (result?.error) {
592
+ const errorEntry = errorToSarifEntry(result);
593
+ entries.push({ finding: errorEntry, result });
594
+ sarifResults.push(findingToSarifResult(errorEntry, result));
595
+ }
596
+ }
597
+ const toolName = report?.tool?.name || "cdx-audit";
598
+ const toolVersion = report?.tool?.version || "v13";
599
+ const log = {
600
+ $schema: SARIF_SCHEMA,
601
+ version: SARIF_VERSION,
602
+ runs: [
603
+ {
604
+ tool: {
605
+ driver: {
606
+ informationUri: "https://cdxgen.github.io/cdxgen/",
607
+ name: toolName,
608
+ rules: deriveSarifRules(entries),
609
+ version: toolVersion,
610
+ },
611
+ },
612
+ invocations: [
613
+ {
614
+ executionSuccessful: report?.summary?.erroredTargets === 0,
615
+ },
616
+ ],
617
+ properties: {
618
+ aggregateReportFile: report?.aggregateReportFile,
619
+ generatedAt: report?.generatedAt,
620
+ inputs: report?.inputs || [],
621
+ summary: report?.summary,
622
+ },
623
+ results: sarifResults,
624
+ },
625
+ ],
626
+ };
627
+ return `${JSON.stringify(log, null, 2)}\n`;
628
+ }
629
+
630
+ /**
631
+ * Render an audit report as pretty JSON.
632
+ *
633
+ * @param {object} report aggregate report
634
+ * @returns {string} JSON output
635
+ */
636
+ export function renderJsonReport(report) {
637
+ return `${JSON.stringify(report, null, 2)}\n`;
638
+ }
639
+
640
+ /**
641
+ * Render a direct BOM audit report for terminal output.
642
+ *
643
+ * @param {object} report aggregate direct audit report
644
+ * @param {object} options render options
645
+ * @returns {string} console report text
646
+ */
647
+ export function renderDirectBomConsoleReport(report, options = {}) {
648
+ const minSeverity = options.minSeverity || "low";
649
+ const licenseBlock = renderLicenseViolationsTable(report?.licenseViolations);
650
+ const licenseSuffix = licenseBlock ? `\n${licenseBlock}\n` : "";
651
+ const visibleResults = (report?.results || [])
652
+ .map((result) => ({
653
+ ...result,
654
+ findings: (result.findings || []).filter((finding) =>
655
+ severityMeetsThreshold(finding?.severity || "none", minSeverity),
656
+ ),
657
+ }))
658
+ .filter((result) => result.findings.length > 0);
659
+ if (report?.results?.length === 1) {
660
+ if (visibleResults.length > 0) {
661
+ return `${renderBomAuditConsoleReport(visibleResults[0].findings)}\n${licenseSuffix}`;
662
+ }
663
+ return [
664
+ "cdx-audit — direct BOM policy audit",
665
+ "",
666
+ `Input BOMs: ${report?.summary?.inputBomCount || 0}`,
667
+ `Findings: ${report?.summary?.totalFindings || 0}`,
668
+ "",
669
+ `No direct BOM findings met or exceeded the configured severity threshold ('${minSeverity}').`,
670
+ ]
671
+ .join("\n")
672
+ .concat(`\n${licenseSuffix}`);
673
+ }
674
+ const lines = [];
675
+ lines.push("cdx-audit — direct BOM policy audit");
676
+ lines.push("");
677
+ lines.push(`Input BOMs: ${report?.summary?.inputBomCount || 0}`);
678
+ lines.push(`BOMs with findings: ${report?.summary?.bomsWithFindings || 0}`);
679
+ lines.push(`Findings: ${report?.summary?.totalFindings || 0}`);
680
+ lines.push("");
681
+ if (!visibleResults.length) {
682
+ lines.push(
683
+ `No direct BOM findings met or exceeded the configured severity threshold ('${minSeverity}').`,
684
+ );
685
+ if (licenseBlock) {
686
+ lines.push("");
687
+ lines.push(licenseBlock);
688
+ }
689
+ return `${lines.join("\n")}\n`;
690
+ }
691
+ for (const result of visibleResults) {
692
+ lines.push(`Input BOM: ${result.source}`);
693
+ lines.push(renderBomAuditConsoleReport(result.findings));
694
+ lines.push("");
695
+ }
696
+ if (licenseBlock) {
697
+ lines.push(licenseBlock);
698
+ lines.push("");
699
+ }
700
+ return `${lines.join("\n")}\n`;
701
+ }
702
+
703
+ /**
704
+ * Render a direct BOM audit report as SARIF 2.1.0 output.
705
+ *
706
+ * @param {object} report aggregate direct audit report
707
+ * @param {object} [options] render options
708
+ * @returns {string} SARIF output
709
+ */
710
+ export function renderDirectBomSarifReport(report, options = {}) {
711
+ const minSeverity = options.minSeverity || "low";
712
+ const entries = filterDirectFindingEntries(report, minSeverity);
713
+ const sarifResults = entries.map(({ finding, result }) =>
714
+ directBomFindingToSarifResult(finding, result),
715
+ );
716
+ const toolName = report?.tool?.name || "cdx-audit";
717
+ const toolVersion = report?.tool?.version || "v13";
718
+ const log = {
719
+ $schema: SARIF_SCHEMA,
720
+ version: SARIF_VERSION,
721
+ runs: [
722
+ {
723
+ tool: {
724
+ driver: {
725
+ informationUri: "https://cdxgen.github.io/cdxgen/",
726
+ name: toolName,
727
+ rules: deriveDirectBomSarifRules(entries),
728
+ version: toolVersion,
729
+ },
730
+ },
731
+ invocations: [
732
+ {
733
+ executionSuccessful: true,
734
+ },
735
+ ],
736
+ properties: {
737
+ auditMode: report?.auditMode,
738
+ generatedAt: report?.generatedAt,
739
+ inputs: report?.inputs || [],
740
+ summary: report?.summary,
741
+ },
742
+ results: sarifResults,
743
+ },
744
+ ],
745
+ };
746
+ return `${JSON.stringify(log, null, 2)}\n`;
747
+ }
748
+
749
+ /**
750
+ * Render an audit report for terminal output.
751
+ *
752
+ * @param {object} report aggregate report
753
+ * @param {object} options render options
754
+ * @returns {string} console report text
755
+ */
756
+ export function renderConsoleReport(report, options = {}) {
757
+ const minSeverity = options.minSeverity || "low";
758
+ const visibleResults = filterResults(effectiveResults(report), minSeverity);
759
+ const licenseBlock = renderLicenseViolationsTable(report?.licenseViolations);
760
+ const lines = [];
761
+ lines.push("cdx-audit — predictive supply-chain exposure audit");
762
+ lines.push("");
763
+ lines.push(`Input BOMs: ${report.summary.inputBomCount}`);
764
+ lines.push(`Candidate targets: ${report.summary.totalTargets}`);
765
+ lines.push(`Scanned targets: ${report.summary.scannedTargets}`);
766
+ lines.push(`Errored targets: ${report.summary.erroredTargets}`);
767
+ lines.push(`Skipped targets: ${report.summary.skippedTargets}`);
768
+ const analysisErrorSummary = formatAnalysisErrorCounts(report.summary);
769
+ if (analysisErrorSummary) {
770
+ lines.push(`Analysis error types: ${analysisErrorSummary}`);
771
+ }
772
+ if (report.summary.groupedResultCount) {
773
+ lines.push(
774
+ `Consolidated alert groups: ${report.summary.groupedResultCount}`,
775
+ );
776
+ }
777
+ lines.push("");
778
+ if (!visibleResults.length) {
779
+ lines.push("No dependencies require your attention right now.");
780
+ lines.push(
781
+ `No predictive findings met or exceeded the configured severity threshold ('${minSeverity}').`,
782
+ );
783
+ if (report.summary?.predictiveDryRun) {
784
+ lines.push(
785
+ "Dry-run mode only planned predictive audit targets. Registry metadata fetches, upstream repository cloning, and child SBOM generation were intentionally skipped.",
786
+ );
787
+ if (report.summary.totalTargets > 0) {
788
+ lines.push(
789
+ "Re-run without --dry-run to analyze the planned targets with the predictive dependency audit.",
790
+ );
791
+ }
792
+ }
793
+ if (report.summary.erroredTargets > 0) {
794
+ lines.push(
795
+ "Some targets could not be fully analyzed, so review the recorded analysis errors before treating this rollup as complete.",
796
+ );
797
+ }
798
+ if (licenseBlock) {
799
+ lines.push("");
800
+ lines.push(licenseBlock);
801
+ }
802
+ return `${lines.join("\n")}\n`;
803
+ }
804
+ lines.push("Dependencies requiring your attention:");
805
+ lines.push("");
806
+ lines.push(renderActionTable(visibleResults));
807
+ lines.push("");
808
+ if (report.summary.erroredTargets > 0) {
809
+ lines.push(
810
+ "Note: one or more targets could not be fully analyzed, so the final rollup may be incomplete until those analysis errors are resolved.",
811
+ );
812
+ lines.push("");
813
+ }
814
+ if (licenseBlock) {
815
+ lines.push(licenseBlock);
816
+ lines.push("");
817
+ }
818
+ lines.push(
819
+ "Next step: review the file, repository, or package listed in 'What to do next'. If you maintain it, make the remediation directly; otherwise, open an upstream issue or discussion with the relevant maintainers, then re-run cdx-audit or cdxgen --bom-audit.",
820
+ );
821
+ return `${lines.join("\n")}\n`;
822
+ }
823
+
824
+ /**
825
+ * Render the requested report format.
826
+ *
827
+ * @param {string} reportType format name
828
+ * @param {object} report aggregate report
829
+ * @param {object} options render options
830
+ * @returns {string} rendered report
831
+ */
832
+ export function renderAuditReport(reportType, report, options = {}) {
833
+ if (report?.auditMode === "direct") {
834
+ if ((reportType || "console") === "json") {
835
+ return renderJsonReport(report);
836
+ }
837
+ if ((reportType || "console") === "sarif") {
838
+ return renderDirectBomSarifReport(report, options);
839
+ }
840
+ return renderDirectBomConsoleReport(report, options);
841
+ }
842
+ if ((reportType || "console") === "json") {
843
+ return renderJsonReport(report);
844
+ }
845
+ if ((reportType || "console") === "sarif") {
846
+ return renderSarifReport(report, options);
847
+ }
848
+ return renderConsoleReport(report, options);
849
+ }
850
+
851
+ /**
852
+ * Convert predictive audit results into CycloneDX annotations.
853
+ *
854
+ * @param {object} report aggregate audit report
855
+ * @param {object} bomJson root CycloneDX BOM
856
+ * @param {object} [options] annotation options
857
+ * @returns {object[]} annotations
858
+ */
859
+ export function formatPredictiveAnnotations(report, bomJson, options = {}) {
860
+ const cdxgenAnnotator = bomJson?.metadata?.tools?.components?.find(
861
+ (component) => component.name === "cdxgen",
862
+ );
863
+ if (!cdxgenAnnotator) {
864
+ return [];
865
+ }
866
+ const minSeverity = options.minSeverity || "low";
867
+ const actionableResults = filterResults(
868
+ report.results || [],
869
+ minSeverity,
870
+ ).filter((result) => (result?.assessment?.severity || "none") !== "none");
871
+ return actionableResults.map((result) => {
872
+ const nextAction = summarizeNextAction(result);
873
+ const upstreamEscalation = summarizeUpstreamEscalation(result);
874
+ const properties = [
875
+ { name: "cdx:audit:engine", value: "cdx-audit" },
876
+ { name: "cdx:audit:severity", value: result.assessment.severity },
877
+ {
878
+ name: "cdx:audit:confidence",
879
+ value: result.assessment.confidenceLabel,
880
+ },
881
+ { name: "cdx:audit:score", value: String(result.assessment.score) },
882
+ { name: "cdx:audit:nextAction", value: nextAction },
883
+ { name: "cdx:audit:target:purl", value: result.target.purl },
884
+ ];
885
+ if (upstreamEscalation) {
886
+ properties.push({
887
+ name: "cdx:audit:upstreamGuidance",
888
+ value: upstreamEscalation,
889
+ });
890
+ }
891
+ if (result.repoUrl) {
892
+ properties.push({
893
+ name: "cdx:audit:target:repoUrl",
894
+ value: result.repoUrl,
895
+ });
896
+ }
897
+ if (result.findings?.length) {
898
+ const localDispatchEdge = extractLocalDispatchEdge(result.findings[0]);
899
+ properties.push({
900
+ name: "cdx:audit:topFinding:ruleId",
901
+ value: result.findings[0].ruleId,
902
+ });
903
+ if (localDispatchEdge) {
904
+ properties.push({
905
+ name: "cdx:audit:dispatch:edge",
906
+ value: formatLocalDispatchEdge(localDispatchEdge),
907
+ });
908
+ if (localDispatchEdge.receiverFiles.length) {
909
+ properties.push({
910
+ name: "cdx:audit:dispatch:receiverFiles",
911
+ value: localDispatchEdge.receiverFiles.join(","),
912
+ });
913
+ }
914
+ if (localDispatchEdge.receiverNames.length) {
915
+ properties.push({
916
+ name: "cdx:audit:dispatch:receiverNames",
917
+ value: localDispatchEdge.receiverNames.join(","),
918
+ });
919
+ }
920
+ }
921
+ }
922
+ return {
923
+ annotator: {
924
+ component: cdxgenAnnotator,
925
+ },
926
+ subjects: result.target.bomRefs?.length
927
+ ? result.target.bomRefs
928
+ : [bomJson.serialNumber],
929
+ text: buildAnnotationText(
930
+ `Predictive audit score ${result.assessment.score} (${result.assessment.severity}) for ${result.target.purl}.`,
931
+ properties,
932
+ [result.assessment.reasons?.[0] || "", `Next action: ${nextAction}`],
933
+ ),
934
+ timestamp: getTimestamp(),
935
+ };
936
+ });
937
+ }