@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,661 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { join } from "node:path";
3
+
4
+ import { safeExistsSync } from "../core/fs.js";
5
+ import { sanitizeBomPropertyValue } from "../core/propertySanitizer.js";
6
+ import { parseGitAiNote } from "../parsers/gitAiNotes.js";
7
+ import {
8
+ gitAiNotes,
9
+ gitCommitDiffAnalysis,
10
+ gitLogCommitsDetailed,
11
+ gitRevertsAndHotfixes,
12
+ } from "./envcontext.js";
13
+ import { enrichFromForge } from "./forgeEnricher.js";
14
+
15
+ const UNAVAILABLE = "unavailable";
16
+
17
+ /**
18
+ * High-confidence AI-authorship signatures for classifying an individual commit
19
+ * as AI-authored. Deliberately narrower than the broad keyword bucket used by
20
+ * the provenance collector: for per-commit oversight we only trust strong,
21
+ * tool-specific markers (bot authors, co-authored-by trailers, git-ai notes) so
22
+ * we do not misclassify ordinary commits that merely mention "ai" or "gpt".
23
+ */
24
+ const BOT_SIGNATURES = [
25
+ /github-copilot\[bot\]/i,
26
+ /devin-ai\[bot\]/i,
27
+ /devin-ai-integration/i,
28
+ /replit\[bot\]/i,
29
+ /openhands/i,
30
+ /noreply@anthropic\.com/i,
31
+ ];
32
+
33
+ const COMMIT_SIGNATURES = [
34
+ /Co-authored-by:\s*Claude\b/i,
35
+ /noreply@anthropic\.com/i,
36
+ /Generated with \[?Claude Code/i,
37
+ /Co-authored-by:\s*Copilot\b/i,
38
+ /copilot@github\.com/i,
39
+ /Generated by Devin/i,
40
+ /Generated by Replit/i,
41
+ /Replit-Commit-Author:/i,
42
+ /Generated by Codex|codex-cli/i,
43
+ /Co-authored-by:\s*(?:aider|cursor|windsurf)\b/i,
44
+ ];
45
+
46
+ /**
47
+ * Determines whether a parsed git-ai note actually attributes lines to an AI
48
+ * agent. Note presence alone is NOT sufficient: tools such as git-ai annotate
49
+ * every commit (human and AI) with per-line authorship, so we only treat a note
50
+ * as an AI signal when it names an agent/model or carries AI line attribution.
51
+ *
52
+ * @param {Object} parsedNote Result of parseGitAiNote
53
+ * @returns {boolean} True if the note attributes AI authorship
54
+ */
55
+ function noteAttributesAi(parsedNote) {
56
+ if (!parsedNote) {
57
+ return false;
58
+ }
59
+ return Boolean(
60
+ parsedNote.agent ||
61
+ parsedNote.model ||
62
+ (parsedNote.lines && parsedNote.lines.length > 0) ||
63
+ (parsedNote.ranges && parsedNote.ranges.length > 0),
64
+ );
65
+ }
66
+
67
+ /**
68
+ * Validates whether a given commit matches known AI signatures.
69
+ *
70
+ * @param {Object} commit Commit object with author, committer, and message
71
+ * @param {boolean} noteIsAi Whether the git-ai note attributes AI authorship
72
+ * @returns {boolean} True if the commit is AI-authored
73
+ */
74
+ function isCommitAiAuthored(commit, noteIsAi) {
75
+ if (noteIsAi) {
76
+ return true;
77
+ }
78
+ if (
79
+ BOT_SIGNATURES.some(
80
+ (regex) =>
81
+ regex.test(commit.authorName || "") ||
82
+ regex.test(commit.authorEmail || ""),
83
+ )
84
+ ) {
85
+ return true;
86
+ }
87
+ return COMMIT_SIGNATURES.some((regex) => regex.test(commit.message || ""));
88
+ }
89
+
90
+ /**
91
+ * Converts a CODEOWNERS glob pattern into a regex and tests a file path.
92
+ *
93
+ * @param {string} pattern The glob pattern
94
+ * @param {string} filePath The file path to test
95
+ * @returns {boolean} True if the pattern matches the path
96
+ */
97
+ function matchCodeowners(pattern, filePath) {
98
+ // CODEOWNERS files live in the (potentially untrusted) scanned repo, so the
99
+ // pattern is attacker-controlled. Bound complexity and build the regex in a
100
+ // single left-to-right pass that only emits NON-backtracking constructs. A
101
+ // naive `/.+/`-based globstar is exponential (ReDoS) in the number of `**`
102
+ // segments; `(?:[^/]+/)*` is linear because each iteration is anchored by `/`.
103
+ if (
104
+ typeof pattern !== "string" ||
105
+ pattern.length > 512 ||
106
+ (pattern.match(/\*/g) || []).length > 24
107
+ ) {
108
+ return false;
109
+ }
110
+ // Collapse redundant slashes and runs of consecutive globstars.
111
+ const normalized = pattern
112
+ .replace(/\/{2,}/g, "/")
113
+ .replace(/\*\*(?:\/\*\*)+/g, "**");
114
+ const anchoredStart = normalized.startsWith("/");
115
+ const src = anchoredStart ? normalized.slice(1) : normalized;
116
+ let regexStr = anchoredStart ? "^" : "(?:^|/)";
117
+ for (let i = 0; i < src.length; i++) {
118
+ const c = src[i];
119
+ if (c === "*") {
120
+ if (src[i + 1] === "*") {
121
+ if (src[i + 2] === "/") {
122
+ // `/**/` or leading `**/` -> zero or more whole path segments.
123
+ regexStr += "(?:[^/]+/)*";
124
+ i += 2;
125
+ } else {
126
+ // trailing or embedded `**` -> match across segments
127
+ regexStr += ".*";
128
+ i += 1;
129
+ }
130
+ } else {
131
+ // single `*` -> stay within one path segment
132
+ regexStr += "[^/]*";
133
+ }
134
+ } else if (c === "?") {
135
+ regexStr += "[^/]";
136
+ } else if (/[.+^${}()|[\]\\]/.test(c)) {
137
+ regexStr += `\\${c}`;
138
+ } else {
139
+ regexStr += c;
140
+ }
141
+ }
142
+ regexStr += normalized.endsWith("/") ? ".*" : "(?:$|/.*)";
143
+ try {
144
+ return new RegExp(regexStr).test(filePath);
145
+ } catch {
146
+ return false;
147
+ }
148
+ }
149
+
150
+ /**
151
+ * Loads and parses the CODEOWNERS file if present in the repository.
152
+ *
153
+ * @param {string} dir Root directory of the repository
154
+ * @returns {Array<Object>|null} List of parsed rules or null if not found
155
+ */
156
+ function loadCodeowners(dir) {
157
+ const candidatePaths = [
158
+ join(dir, ".github", "CODEOWNERS"),
159
+ join(dir, "CODEOWNERS"),
160
+ join(dir, "docs", "CODEOWNERS"),
161
+ ];
162
+ for (const p of candidatePaths) {
163
+ if (!safeExistsSync(p)) {
164
+ continue;
165
+ }
166
+ try {
167
+ const content = readFileSync(p, "utf-8");
168
+ const rules = [];
169
+ for (const line of content.split("\n")) {
170
+ const trimmed = line.trim();
171
+ if (!trimmed || trimmed.startsWith("#")) {
172
+ continue;
173
+ }
174
+ const parts = trimmed.split(/\s+/);
175
+ const pattern = parts[0];
176
+ const owners = parts.slice(1);
177
+ if (pattern && owners.length > 0) {
178
+ rules.push({ pattern, owners });
179
+ }
180
+ }
181
+ return rules;
182
+ } catch {
183
+ // ignore and try next candidate
184
+ }
185
+ }
186
+ return null;
187
+ }
188
+
189
+ /**
190
+ * Checks if a file path matches any loaded CODEOWNERS rules.
191
+ *
192
+ * @param {string} filePath The path of the file
193
+ * @param {Array<Object>} rules The parsed rules
194
+ * @returns {boolean} True if matched by CODEOWNERS
195
+ */
196
+ function isFileCovered(filePath, rules) {
197
+ return rules.some((rule) => matchCodeowners(rule.pattern, filePath));
198
+ }
199
+
200
+ /**
201
+ * Calculates the median of an array of numbers.
202
+ *
203
+ * @param {Array<number>} values Array of numeric values
204
+ * @returns {number} The median value
205
+ */
206
+ function median(values) {
207
+ if (!values || values.length === 0) {
208
+ return 0;
209
+ }
210
+ const sorted = [...values].sort((a, b) => a - b);
211
+ const half = Math.floor(sorted.length / 2);
212
+ if (sorted.length % 2 !== 0) {
213
+ return sorted[half];
214
+ }
215
+ return (sorted[half - 1] + sorted[half]) / 2;
216
+ }
217
+
218
+ const isNum = (v) => typeof v === "number" && Number.isFinite(v);
219
+
220
+ /**
221
+ * Formats a metric value for a CycloneDX property: numbers are rendered with
222
+ * fixed precision, the sentinel `unavailable` is passed through verbatim.
223
+ *
224
+ * @param {number|string} value Metric value
225
+ * @param {number} [digits] Decimal precision for numbers
226
+ * @returns {string} Property value
227
+ */
228
+ function fmt(value, digits = 4) {
229
+ return isNum(value) ? value.toFixed(digits) : String(value);
230
+ }
231
+
232
+ /**
233
+ * Core collector for AI oversight. Orchestrates the collection of local git
234
+ * signals, optionally enriches with forge (GitHub/GitLab) pull/merge request
235
+ * review data, computes a transparent weighted rigor score, and emits
236
+ * `cdx:ai:oversight:*` CycloneDX properties.
237
+ *
238
+ * When git-ai notes carry AI attribution data, the result also includes
239
+ * `cdx:ai:codegen:models`, `cdx:ai:codegen:agents`, and related properties:
240
+ * model names, agent tool names, note/session counts, and total AI-attributed
241
+ * entry counts.
242
+ *
243
+ * Honesty first: local git cannot observe pull-request reviews/approvals, so
244
+ * review-dependent metrics (reviewCoverage, reviewLatencyVsSize, selfMergeRate,
245
+ * verificationDebtRatio) are reported as `unavailable` unless a forge enricher
246
+ * supplies authoritative data. This prevents a git-only scan from falsely
247
+ * reporting "zero oversight".
248
+ *
249
+ * @param {string} dir Root directory of the repository
250
+ * @param {Object} [options] Oversight evaluation options
251
+ * @param {number} [options.gitMaxCount] Max commits to scan (defaults to 20)
252
+ * @param {string} [options.gitAiNotesRef] Git notes ref (defaults to refs/notes/ai)
253
+ * @returns {Promise<Object>} Oversight metrics, score, band, and properties
254
+ */
255
+ export async function collectAiOversight(dir, options = {}) {
256
+ const maxCount = options.gitMaxCount || 20;
257
+ const notesRef = options.gitAiNotesRef || "refs/notes/ai";
258
+
259
+ const emptyResult = {
260
+ score: 1.0,
261
+ band: "strong",
262
+ properties: [],
263
+ evidence: {},
264
+ };
265
+
266
+ const commits = gitLogCommitsDetailed(dir, maxCount);
267
+ if (commits.length === 0) {
268
+ return emptyResult;
269
+ }
270
+
271
+ // git-ai notes (line-level attribution), parsed once and keyed by commit hash.
272
+ // Note: tools like git-ai annotate every commit; a note only counts as an AI
273
+ // signal when it actually attributes lines to an agent (see noteAttributesAi).
274
+ const notes = gitAiNotes(dir, { ref: notesRef, maxCount });
275
+ const parsedNotesMap = new Map(
276
+ notes.map((n) => [n.hash, parseGitAiNote(n.note)]),
277
+ );
278
+ const aiNoteCount = [...parsedNotesMap.values()].filter(
279
+ noteAttributesAi,
280
+ ).length;
281
+
282
+ // Identify AI-authored commits and cache their diff analysis
283
+ const aiCommits = [];
284
+ const aiCommitsDiffs = [];
285
+ const allCommitsDiffs = [];
286
+ for (const commit of commits) {
287
+ const diffAnalysis = gitCommitDiffAnalysis(dir, commit.hash);
288
+ allCommitsDiffs.push({ commit, diffAnalysis });
289
+ const noteIsAi = noteAttributesAi(parsedNotesMap.get(commit.hash));
290
+ if (isCommitAiAuthored(commit, noteIsAi)) {
291
+ aiCommits.push(commit);
292
+ aiCommitsDiffs.push({ commit, diffAnalysis });
293
+ }
294
+ }
295
+
296
+ // No AI authorship => stay silent (no properties, no noise)
297
+ if (aiCommits.length === 0) {
298
+ return emptyResult;
299
+ }
300
+
301
+ const dataSources = ["git"];
302
+ if (aiNoteCount > 0) {
303
+ dataSources.push("git-ai-notes");
304
+ }
305
+
306
+ // Optional authoritative forge enrichment (GITHUB_TOKEN / GITLAB_TOKEN)
307
+ const forgeResult = await enrichFromForge(dir, aiCommits, options);
308
+ for (const ds of forgeResult.dataSources) {
309
+ if (!dataSources.includes(ds)) {
310
+ dataSources.push(ds);
311
+ }
312
+ }
313
+ const forgeReviewsMap = new Map(
314
+ forgeResult.prReviews.map((r) => [r.commitHash, r]),
315
+ );
316
+ const forgeCovered = aiCommits.filter((c) => forgeReviewsMap.has(c.hash));
317
+ const hasForgeData = forgeCovered.length > 0;
318
+
319
+ // --- Review-dependent metrics (authoritative only via forge) ---
320
+ let reviewCoverage = UNAVAILABLE;
321
+ let reviewLatencyVsSize = UNAVAILABLE;
322
+ let selfMergeRate = UNAVAILABLE;
323
+ let verificationDebtRatio = UNAVAILABLE;
324
+
325
+ if (hasForgeData) {
326
+ let reviewedCount = 0;
327
+ let selfMergeCount = 0;
328
+ let unreviewedCount = 0;
329
+ let totalLatency = 0;
330
+ let latencyCount = 0;
331
+ for (const commit of forgeCovered) {
332
+ const r = forgeReviewsMap.get(commit.hash);
333
+ if (r.hasIndependentApproval) {
334
+ reviewedCount++;
335
+ } else {
336
+ unreviewedCount++;
337
+ }
338
+ if (r.selfApproved) {
339
+ selfMergeCount++;
340
+ }
341
+ if (
342
+ r.reviewLatencySeconds !== null &&
343
+ r.reviewLatencySeconds !== undefined
344
+ ) {
345
+ totalLatency += r.reviewLatencySeconds;
346
+ latencyCount++;
347
+ }
348
+ }
349
+ reviewCoverage = reviewedCount / forgeCovered.length;
350
+ selfMergeRate = selfMergeCount / forgeCovered.length;
351
+ verificationDebtRatio = unreviewedCount / forgeCovered.length;
352
+ const avgLatency = latencyCount > 0 ? totalLatency / latencyCount : 0;
353
+ const sizes = aiCommitsDiffs.map(
354
+ (d) => d.diffAnalysis.addedLinesCount + d.diffAnalysis.deletedLinesCount,
355
+ );
356
+ const medianSize = median(sizes) || 1;
357
+ reviewLatencyVsSize = avgLatency / medianSize;
358
+ }
359
+
360
+ // --- Batch size (context) ---
361
+ const aiSizes = aiCommitsDiffs.map(
362
+ (d) => d.diffAnalysis.addedLinesCount + d.diffAnalysis.deletedLinesCount,
363
+ );
364
+ const batchSizeMedian = median(aiSizes);
365
+
366
+ // --- Unique AI-touched files ---
367
+ const aiTouchedFiles = new Set();
368
+ for (const d of aiCommitsDiffs) {
369
+ for (const f of d.diffAnalysis.touchedFiles) {
370
+ aiTouchedFiles.add(f);
371
+ }
372
+ }
373
+
374
+ // --- Revert / hotfix rate touching AI work ---
375
+ const aiHashes = new Set(aiCommits.map((c) => c.hash));
376
+ const reverts = gitRevertsAndHotfixes(dir, maxCount).filter(
377
+ (r) => !aiHashes.has(r.hash),
378
+ );
379
+ let revertCount = 0;
380
+ for (const rev of reverts) {
381
+ let matchesAi = [...aiHashes].some((hash) => rev.message.includes(hash));
382
+ if (!matchesAi && aiTouchedFiles.size > 0) {
383
+ const revDiff = gitCommitDiffAnalysis(dir, rev.hash);
384
+ matchesAi = revDiff.touchedFiles.some((f) => aiTouchedFiles.has(f));
385
+ }
386
+ if (matchesAi) {
387
+ revertCount++;
388
+ }
389
+ }
390
+ const revertHotfixRate = revertCount / aiCommits.length;
391
+
392
+ // --- CI weakening events (test deletions + weakening tokens) ---
393
+ let ciWeakeningEvents = 0;
394
+ for (const d of aiCommitsDiffs) {
395
+ ciWeakeningEvents += d.diffAnalysis.testFilesDeleted.length;
396
+ ciWeakeningEvents += d.diffAnalysis.weakeningTokens.length;
397
+ }
398
+
399
+ // --- Sign-off coverage (always local) ---
400
+ let signedCount = 0;
401
+ for (const commit of aiCommits) {
402
+ if (["G", "U"].includes(commit.signatureStatus) || commit.hasSignedOff) {
403
+ signedCount++;
404
+ }
405
+ }
406
+ const signoffCoverage = signedCount / aiCommits.length;
407
+
408
+ // --- CODEOWNERS coverage (unavailable when no CODEOWNERS file) ---
409
+ const codeownersRules = loadCodeowners(dir);
410
+ let codeownersCoverage = UNAVAILABLE;
411
+ if (
412
+ codeownersRules &&
413
+ codeownersRules.length > 0 &&
414
+ aiTouchedFiles.size > 0
415
+ ) {
416
+ let covered = 0;
417
+ for (const f of aiTouchedFiles) {
418
+ if (isFileCovered(f, codeownersRules)) {
419
+ covered++;
420
+ }
421
+ }
422
+ codeownersCoverage = covered / aiTouchedFiles.size;
423
+ }
424
+
425
+ // --- AI line ratio (precise from git-ai notes when parseable; else coarse
426
+ // heuristic). Only note-attributed line counts feed the precise ratio; when
427
+ // the note schema is not understood we fall back to the commit-level
428
+ // heuristic rather than over-claiming precision. ---
429
+ let aiLinesCount = 0;
430
+ let hasParsedAiLines = false;
431
+ let totalLinesInAiCommits = 0;
432
+ for (const d of aiCommitsDiffs) {
433
+ const linesChanged =
434
+ d.diffAnalysis.addedLinesCount + d.diffAnalysis.deletedLinesCount;
435
+ totalLinesInAiCommits += linesChanged;
436
+ const parsedNote = parsedNotesMap.get(d.commit.hash);
437
+ if (!parsedNote) {
438
+ continue;
439
+ }
440
+ if (parsedNote.lines && parsedNote.lines.length > 0) {
441
+ aiLinesCount += parsedNote.lines.length;
442
+ hasParsedAiLines = true;
443
+ } else if (parsedNote.ranges && parsedNote.ranges.length > 0) {
444
+ for (const range of parsedNote.ranges) {
445
+ if (typeof range === "string" && range.includes("-")) {
446
+ const [a, b] = range.split("-").map(Number);
447
+ if (!Number.isNaN(a) && !Number.isNaN(b)) {
448
+ aiLinesCount += Math.abs(b - a) + 1;
449
+ hasParsedAiLines = true;
450
+ }
451
+ } else {
452
+ aiLinesCount++;
453
+ hasParsedAiLines = true;
454
+ }
455
+ }
456
+ }
457
+ }
458
+ let totalLinesInAllCommits = 0;
459
+ for (const d of allCommitsDiffs) {
460
+ totalLinesInAllCommits +=
461
+ d.diffAnalysis.addedLinesCount + d.diffAnalysis.deletedLinesCount;
462
+ }
463
+ let aiLineRatio;
464
+ if (hasParsedAiLines) {
465
+ aiLineRatio =
466
+ totalLinesInAiCommits > 0
467
+ ? Math.min(1.0, aiLinesCount / totalLinesInAiCommits)
468
+ : 0.0;
469
+ } else {
470
+ aiLineRatio =
471
+ totalLinesInAllCommits > 0
472
+ ? totalLinesInAiCommits / totalLinesInAllCommits
473
+ : 0.0;
474
+ }
475
+
476
+ // --- Git-ai note detail aggregation (model names, agents, attribution) ---
477
+ const allModels = new Set();
478
+ const allAgents = new Set();
479
+ let totalAiNotes = 0;
480
+ let totalSessions = 0;
481
+ let totalPrompts = 0;
482
+ let totalAttribution = 0;
483
+ for (const { hash } of aiCommits) {
484
+ const parsedNote = parsedNotesMap.get(hash);
485
+ if (!parsedNote || !noteAttributesAi(parsedNote)) {
486
+ continue;
487
+ }
488
+ totalAiNotes++;
489
+ totalAttribution += parsedNote.aiAttributionCount || 0;
490
+ if (parsedNote.models && parsedNote.models.length > 0) {
491
+ for (const m of parsedNote.models) {
492
+ if (m) allModels.add(m);
493
+ }
494
+ } else if (parsedNote.model) {
495
+ allModels.add(parsedNote.model);
496
+ }
497
+ if (parsedNote.agents && parsedNote.agents.length > 0) {
498
+ for (const a of parsedNote.agents) {
499
+ if (a) allAgents.add(a);
500
+ }
501
+ } else if (parsedNote.agent) {
502
+ allAgents.add(parsedNote.agent);
503
+ }
504
+ totalSessions += Object.keys(parsedNote.sessions || {}).length;
505
+ totalPrompts += Object.keys(parsedNote.prompts || {}).length;
506
+ }
507
+
508
+ // --- Transparent weighted scoring over available signals ---
509
+ const ciWeakeningScore = Math.max(0.0, 1.0 - ciWeakeningEvents * 0.25);
510
+ const revertScore = Math.max(0.0, 1.0 - Math.min(1.0, revertHotfixRate));
511
+
512
+ const contributions = {};
513
+ const addContribution = (key, value, weight) => {
514
+ if (isNum(value)) {
515
+ contributions[key] = { value, weight };
516
+ }
517
+ };
518
+ addContribution(
519
+ "verificationDebt",
520
+ isNum(verificationDebtRatio) ? 1.0 - verificationDebtRatio : undefined,
521
+ 0.3,
522
+ );
523
+ addContribution(
524
+ "reviewCoverage",
525
+ isNum(reviewCoverage) ? reviewCoverage : undefined,
526
+ 0.25,
527
+ );
528
+ addContribution(
529
+ "selfMerge",
530
+ isNum(selfMergeRate) ? 1.0 - selfMergeRate : undefined,
531
+ 0.15,
532
+ );
533
+ addContribution("ciWeakening", ciWeakeningScore, 0.15);
534
+ addContribution("revert", revertScore, 0.05);
535
+ addContribution("signoff", signoffCoverage, 0.05);
536
+ addContribution(
537
+ "codeowners",
538
+ isNum(codeownersCoverage) ? codeownersCoverage : undefined,
539
+ 0.05,
540
+ );
541
+
542
+ let weightedSum = 0.0;
543
+ let weightTotal = 0.0;
544
+ for (const c of Object.values(contributions)) {
545
+ weightedSum += c.value * c.weight;
546
+ weightTotal += c.weight;
547
+ }
548
+ let finalScore = weightTotal > 0 ? weightedSum / weightTotal : 1.0;
549
+
550
+ // Hard penalty for quality-gate weakening on AI commits
551
+ if (ciWeakeningEvents > 0) {
552
+ finalScore = Math.max(
553
+ 0.0,
554
+ finalScore - Math.min(0.5, ciWeakeningEvents * 0.1),
555
+ );
556
+ }
557
+ finalScore = Number(finalScore.toFixed(4));
558
+
559
+ let band = "weak";
560
+ if (finalScore >= 0.75) {
561
+ band = "strong";
562
+ } else if (finalScore >= 0.5) {
563
+ band = "moderate";
564
+ }
565
+
566
+ const evidence = {
567
+ aiCommitCount: aiCommits.length,
568
+ selfMergeRate,
569
+ reviewCoverage,
570
+ reviewLatencyVsSize,
571
+ batchSizeMedian,
572
+ revertHotfixRate,
573
+ ciWeakeningEvents,
574
+ signoffCoverage,
575
+ codeownersCoverage,
576
+ aiLineRatio,
577
+ verificationDebtRatio,
578
+ score: finalScore,
579
+ band,
580
+ dataSources,
581
+ contributions,
582
+ aiNotesCount: totalAiNotes,
583
+ giModels: [...allModels],
584
+ giAgents: [...allAgents],
585
+ giSessionCount: totalSessions,
586
+ giPromptCount: totalPrompts,
587
+ giAttributionCount: totalAttribution,
588
+ };
589
+
590
+ const properties = [
591
+ { name: "cdx:ai:oversight:reviewCoverage", value: fmt(reviewCoverage) },
592
+ { name: "cdx:ai:oversight:selfMergeRate", value: fmt(selfMergeRate) },
593
+ {
594
+ name: "cdx:ai:oversight:reviewLatencyVsSize",
595
+ value: fmt(reviewLatencyVsSize, 2),
596
+ },
597
+ {
598
+ name: "cdx:ai:oversight:batchSizeMedian",
599
+ value: fmt(batchSizeMedian, 1),
600
+ },
601
+ { name: "cdx:ai:oversight:revertHotfixRate", value: fmt(revertHotfixRate) },
602
+ {
603
+ name: "cdx:ai:oversight:ciWeakeningEvents",
604
+ value: String(ciWeakeningEvents),
605
+ },
606
+ { name: "cdx:ai:oversight:signoffCoverage", value: fmt(signoffCoverage) },
607
+ {
608
+ name: "cdx:ai:oversight:codeownersCoverage",
609
+ value: fmt(codeownersCoverage),
610
+ },
611
+ { name: "cdx:ai:oversight:aiLineRatio", value: fmt(aiLineRatio) },
612
+ {
613
+ name: "cdx:ai:oversight:verificationDebtRatio",
614
+ value: fmt(verificationDebtRatio),
615
+ },
616
+ { name: "cdx:ai:oversight:score", value: finalScore.toFixed(4) },
617
+ { name: "cdx:ai:oversight:band", value: band },
618
+ { name: "cdx:ai:oversight:dataSources", value: dataSources.join(",") },
619
+ { name: "cdx:ai:oversight:evidence:json", value: JSON.stringify(evidence) },
620
+ ];
621
+
622
+ // Append git-ai derived detail properties when git-ai attribution data exists.
623
+ if (totalAiNotes > 0) {
624
+ if (allModels.size > 0) {
625
+ properties.push({
626
+ name: "cdx:ai:codegen:models",
627
+ value: [...allModels].sort().join(","),
628
+ });
629
+ }
630
+ if (allAgents.size > 0) {
631
+ properties.push({
632
+ name: "cdx:ai:codegen:agents",
633
+ value: [...allAgents].sort().join(","),
634
+ });
635
+ }
636
+ properties.push({
637
+ name: "cdx:ai:codegen:noteCount",
638
+ value: String(totalAiNotes),
639
+ });
640
+ properties.push({
641
+ name: "cdx:ai:codegen:sessionCount",
642
+ value: String(totalSessions),
643
+ });
644
+ properties.push({
645
+ name: "cdx:ai:codegen:attributionCount",
646
+ value: String(totalAttribution),
647
+ });
648
+ }
649
+
650
+ const sanitizedProperties = properties.map(({ name, value }) => ({
651
+ name,
652
+ value: sanitizeBomPropertyValue(name, value),
653
+ }));
654
+
655
+ return {
656
+ score: finalScore,
657
+ band,
658
+ properties: sanitizedProperties,
659
+ evidence,
660
+ };
661
+ }