@cdxgen/cdxgen 13.5.0 → 13.7.0

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 (380) hide show
  1. package/README.md +17 -10
  2. package/bin/audit.js +7 -4
  3. package/bin/cdxgen.js +260 -37
  4. package/bin/convert.js +146 -22
  5. package/bin/evinse.js +28 -3
  6. package/bin/repl.js +47 -3
  7. package/bin/sign.js +211 -34
  8. package/bin/tracebom.js +18 -6
  9. package/bin/validate.js +24 -3
  10. package/bin/verify.js +113 -5
  11. package/data/behavior-taxonomy.schema.json +1491 -0
  12. package/data/cyclonedx-2.0-bundled.schema.json +18606 -5528
  13. package/data/cyclonedx-2.0-cryptography-defs.schema.json +857 -0
  14. package/data/license-aliases.json +24 -2
  15. package/data/pqc-migration.json +239 -0
  16. package/data/remediations.json +176 -0
  17. package/data/rules/ai-bom.yaml +1 -1
  18. package/data/rules/brotli-decoder.yaml +107 -0
  19. package/data/rules/cbom-security.yaml +4 -3
  20. package/data/rules/package-integrity.yaml +28 -0
  21. package/data/rules/vscode-extensions.yaml +75 -0
  22. package/data/spdx-license-list.json +121 -7
  23. package/data/spdx-licenses.json +69 -0
  24. package/data/spdx.schema.json +845 -2
  25. package/lib/audit/index.js +25 -3
  26. package/lib/cli/bomAssembly.js +172 -4
  27. package/lib/cli/cliOptions.js +121 -17
  28. package/lib/cli/index.js +720 -902
  29. package/lib/cli/jsBom.js +156 -64
  30. package/lib/cli/jvmBom.js +602 -86
  31. package/lib/cli/managedBom.js +161 -19
  32. package/lib/cli/nativeBom.js +52 -5
  33. package/lib/core/boundedFile.js +344 -0
  34. package/lib/core/brotliProbe.js +182 -0
  35. package/lib/core/env.js +34 -0
  36. package/lib/core/fs.js +138 -3
  37. package/lib/core/globPatterns.js +218 -0
  38. package/lib/core/httpClient.js +98 -1
  39. package/lib/core/lockPaths.js +38 -0
  40. package/lib/core/paths.js +24 -1
  41. package/lib/core/processTree.js +100 -8
  42. package/lib/core/projectConfig.js +332 -25
  43. package/lib/core/toolRegistry.js +184 -0
  44. package/lib/ecosystems/cppEvidence.js +263 -106
  45. package/lib/ecosystems/cppIncludeResolver.js +16 -5
  46. package/lib/ecosystems/denoutils.js +2 -2
  47. package/lib/ecosystems/ecosystems.js +25 -10
  48. package/lib/ecosystems/gemHostProbe.js +301 -0
  49. package/lib/ecosystems/golem.js +3 -8
  50. package/lib/ecosystems/gradleutils.js +1909 -229
  51. package/lib/ecosystems/jsEvidence.js +90 -38
  52. package/lib/ecosystems/kosi.js +3 -5
  53. package/lib/ecosystems/npmVersionResolution.js +376 -0
  54. package/lib/ecosystems/parsers-bazel.js +107 -6
  55. package/lib/ecosystems/parsers-js.js +505 -22
  56. package/lib/ecosystems/parsers-misc.js +209 -20
  57. package/lib/ecosystems/parsers-python.js +178 -30
  58. package/lib/ecosystems/parsers-rust.js +117 -15
  59. package/lib/ecosystems/pythonutils.js +128 -2
  60. package/lib/ecosystems/remote/huggingface.js +22 -0
  61. package/lib/ecosystems/rubyutils.js +538 -31
  62. package/lib/ecosystems/rusi.js +2 -4
  63. package/lib/ecosystems/scalacliutils.js +2 -0
  64. package/lib/ecosystems/scalasem.js +798 -152
  65. package/lib/ecosystems/vendoredCode.js +237 -3
  66. package/lib/ecosystems/venvProbe.js +360 -0
  67. package/lib/evinser/evinser.js +536 -71
  68. package/lib/evinser/scalasem.js +5 -1
  69. package/lib/helpers/agenticToolutils.js +525 -94
  70. package/lib/helpers/bomSigner.js +43 -9
  71. package/lib/helpers/jssSigner.js +1276 -0
  72. package/lib/helpers/vsixutils.js +1574 -315
  73. package/lib/inventory/agentBlueprint.js +193 -0
  74. package/lib/inventory/agentToolNames.js +145 -0
  75. package/lib/inventory/aiCollector.js +153 -7
  76. package/lib/inventory/aiInventory.js +44 -8
  77. package/lib/inventory/aiProviders.js +324 -0
  78. package/lib/inventory/atomUtils.js +77 -0
  79. package/lib/inventory/bomUtils.js +8 -1
  80. package/lib/inventory/brotliDecoder.js +142 -0
  81. package/lib/inventory/buildToolRateLimit.js +1 -1
  82. package/lib/inventory/cbomutils.js +56 -7
  83. package/lib/inventory/ciParsers/githubActionsLock.js +821 -0
  84. package/lib/inventory/citations.js +31 -2
  85. package/lib/inventory/communityAiConfigParser.js +978 -80
  86. package/lib/inventory/cyclonedx20.js +152 -0
  87. package/lib/inventory/cyclonedx20Common.js +286 -0
  88. package/lib/inventory/cyclonedx20Derived.js +159 -0
  89. package/lib/inventory/cyclonedx20Parties.js +552 -0
  90. package/lib/inventory/cyclonedx20Read.js +768 -0
  91. package/lib/inventory/cyclonedx20ReadCommon.js +374 -0
  92. package/lib/inventory/cyclonedx20ReadComponents.js +692 -0
  93. package/lib/inventory/cyclonedx20ReadContext.js +380 -0
  94. package/lib/inventory/cyclonedx20ReadEvidence.js +466 -0
  95. package/lib/inventory/cyclonedx20ReadSections.js +599 -0
  96. package/lib/inventory/cyclonedx20Render.js +766 -0
  97. package/lib/inventory/cyclonedx20RenderComponents.js +716 -0
  98. package/lib/inventory/cyclonedx20RenderDefinitions.js +405 -0
  99. package/lib/inventory/cyclonedx20RenderEvidence.js +726 -0
  100. package/lib/inventory/cyclonedx20RenderHardware.js +203 -0
  101. package/lib/inventory/cyclonedx20RenderPatents.js +174 -0
  102. package/lib/inventory/cyclonedx20RenderRefIds.js +314 -0
  103. package/lib/inventory/cyclonedx20RenderSections.js +499 -0
  104. package/lib/inventory/cyclonedx20Tables.js +594 -0
  105. package/lib/inventory/deps.js +141 -13
  106. package/lib/inventory/dosai.js +375 -6
  107. package/lib/inventory/dosaiParsers.js +3 -6
  108. package/lib/inventory/dotnetRuntime.js +367 -0
  109. package/lib/inventory/ecosystemFormulationParsers.js +979 -0
  110. package/lib/inventory/envcontext.js +436 -48
  111. package/lib/inventory/evidenceUtils.js +13 -1
  112. package/lib/inventory/fetchBatch.js +1 -1
  113. package/lib/inventory/formulationParsers.js +124 -14
  114. package/lib/inventory/gtfobins.js +13 -0
  115. package/lib/inventory/hbom.js +45 -6
  116. package/lib/inventory/hbomLoader.js +166 -0
  117. package/lib/inventory/hostRuntimeProbe.js +686 -0
  118. package/lib/inventory/jvmLocalRepos.js +9 -2
  119. package/lib/inventory/jvmToolEnv.js +29 -0
  120. package/lib/inventory/licenseEnhancer.js +12 -0
  121. package/lib/inventory/mavenCentralMirror.js +534 -0
  122. package/lib/inventory/mcpConfigParser.js +5 -0
  123. package/lib/inventory/nodeBuildInfo.js +218 -0
  124. package/lib/inventory/nodeHostProbe.js +202 -0
  125. package/lib/inventory/occurrenceKey.js +90 -0
  126. package/lib/inventory/osPackageResolver.js +182 -0
  127. package/lib/inventory/phpBuildInfo.js +10 -59
  128. package/lib/inventory/phpHostProbe.js +32 -488
  129. package/lib/inventory/pqcMigration.js +426 -0
  130. package/lib/inventory/rubyBuildInfo.js +972 -0
  131. package/lib/inventory/rubyHostProbe.js +218 -0
  132. package/lib/inventory/rustFormulationParser.js +21 -10
  133. package/lib/inventory/scalaCoords.js +4 -3
  134. package/lib/inventory/scalaDedupe.js +440 -0
  135. package/lib/inventory/source.js +114 -8
  136. package/lib/managers/binary.js +337 -3
  137. package/lib/managers/docker.js +79 -0
  138. package/lib/parsers/huggingfaceManifest.js +9 -1
  139. package/lib/parsers/huggingfaceUtils.js +18 -0
  140. package/lib/parsers/kiroPermissions.js +166 -0
  141. package/lib/parsers/largeJson.js +28 -11
  142. package/lib/parsers/vscodeExtensionId.js +183 -0
  143. package/lib/server/server.js +48 -35
  144. package/lib/stages/postgen/postgen.js +41 -1
  145. package/lib/stages/postgen/ruleEngine.js +13 -5
  146. package/lib/stages/postgen/specVersionCompat.js +76 -0
  147. package/lib/stages/pregen/envAudit.js +1 -0
  148. package/lib/stages/pregen/pregen.js +114 -57
  149. package/lib/validator/bomValidator.js +14 -2
  150. package/lib/validator/complianceEngine.js +30 -3
  151. package/lib/validator/complianceRules.js +1416 -4
  152. package/lib/validator/generated/validate-1.6.mjs +1 -1
  153. package/lib/validator/generated/validate-1.7.mjs +1 -1
  154. package/lib/validator/generated/validate-2.0.mjs +57554 -13851
  155. package/lib/validator/index.js +49 -8
  156. package/lib/validator/reporters/json.js +6 -0
  157. package/package.json +11 -10
  158. package/types/bin/repl.d.ts.map +1 -1
  159. package/types/lib/audit/index.d.ts +6 -2
  160. package/types/lib/audit/index.d.ts.map +1 -1
  161. package/types/lib/cli/bomAssembly.d.ts +29 -1
  162. package/types/lib/cli/bomAssembly.d.ts.map +1 -1
  163. package/types/lib/cli/cliOptions.d.ts +6 -0
  164. package/types/lib/cli/cliOptions.d.ts.map +1 -1
  165. package/types/lib/cli/index.d.ts.map +1 -1
  166. package/types/lib/cli/jsBom.d.ts +3 -18
  167. package/types/lib/cli/jsBom.d.ts.map +1 -1
  168. package/types/lib/cli/jvmBom.d.ts +15 -0
  169. package/types/lib/cli/jvmBom.d.ts.map +1 -1
  170. package/types/lib/cli/managedBom.d.ts.map +1 -1
  171. package/types/lib/cli/nativeBom.d.ts.map +1 -1
  172. package/types/lib/core/boundedFile.d.ts +100 -0
  173. package/types/lib/core/boundedFile.d.ts.map +1 -0
  174. package/types/lib/core/brotliProbe.d.ts +37 -0
  175. package/types/lib/core/brotliProbe.d.ts.map +1 -0
  176. package/types/lib/core/env.d.ts +14 -0
  177. package/types/lib/core/env.d.ts.map +1 -1
  178. package/types/lib/core/fs.d.ts +4 -0
  179. package/types/lib/core/fs.d.ts.map +1 -1
  180. package/types/lib/core/globPatterns.d.ts +70 -0
  181. package/types/lib/core/globPatterns.d.ts.map +1 -0
  182. package/types/lib/core/httpClient.d.ts +24 -0
  183. package/types/lib/core/httpClient.d.ts.map +1 -1
  184. package/types/lib/core/lockPaths.d.ts +19 -0
  185. package/types/lib/core/lockPaths.d.ts.map +1 -0
  186. package/types/lib/core/paths.d.ts +9 -0
  187. package/types/lib/core/paths.d.ts.map +1 -1
  188. package/types/lib/core/processTree.d.ts +17 -4
  189. package/types/lib/core/processTree.d.ts.map +1 -1
  190. package/types/lib/core/projectConfig.d.ts +47 -8
  191. package/types/lib/core/projectConfig.d.ts.map +1 -1
  192. package/types/lib/core/toolRegistry.d.ts +36 -0
  193. package/types/lib/core/toolRegistry.d.ts.map +1 -0
  194. package/types/lib/ecosystems/cppEvidence.d.ts +40 -13
  195. package/types/lib/ecosystems/cppEvidence.d.ts.map +1 -1
  196. package/types/lib/ecosystems/cppIncludeResolver.d.ts +2 -1
  197. package/types/lib/ecosystems/cppIncludeResolver.d.ts.map +1 -1
  198. package/types/lib/ecosystems/ecosystems.d.ts.map +1 -1
  199. package/types/lib/ecosystems/gemHostProbe.d.ts +28 -0
  200. package/types/lib/ecosystems/gemHostProbe.d.ts.map +1 -0
  201. package/types/lib/ecosystems/golem.d.ts.map +1 -1
  202. package/types/lib/ecosystems/gradleutils.d.ts +294 -20
  203. package/types/lib/ecosystems/gradleutils.d.ts.map +1 -1
  204. package/types/lib/ecosystems/jsEvidence.d.ts +14 -1
  205. package/types/lib/ecosystems/jsEvidence.d.ts.map +1 -1
  206. package/types/lib/ecosystems/kosi.d.ts.map +1 -1
  207. package/types/lib/ecosystems/npmVersionResolution.d.ts +119 -0
  208. package/types/lib/ecosystems/npmVersionResolution.d.ts.map +1 -0
  209. package/types/lib/ecosystems/parsers-bazel.d.ts.map +1 -1
  210. package/types/lib/ecosystems/parsers-js.d.ts +17 -20
  211. package/types/lib/ecosystems/parsers-js.d.ts.map +1 -1
  212. package/types/lib/ecosystems/parsers-misc.d.ts +19 -0
  213. package/types/lib/ecosystems/parsers-misc.d.ts.map +1 -1
  214. package/types/lib/ecosystems/parsers-python.d.ts +10 -0
  215. package/types/lib/ecosystems/parsers-python.d.ts.map +1 -1
  216. package/types/lib/ecosystems/parsers-rust.d.ts.map +1 -1
  217. package/types/lib/ecosystems/pythonutils.d.ts +19 -1
  218. package/types/lib/ecosystems/pythonutils.d.ts.map +1 -1
  219. package/types/lib/ecosystems/remote/huggingface.d.ts.map +1 -1
  220. package/types/lib/ecosystems/rubyutils.d.ts +144 -12
  221. package/types/lib/ecosystems/rubyutils.d.ts.map +1 -1
  222. package/types/lib/ecosystems/rusi.d.ts.map +1 -1
  223. package/types/lib/ecosystems/scalacliutils.d.ts.map +1 -1
  224. package/types/lib/ecosystems/scalasem.d.ts +58 -16
  225. package/types/lib/ecosystems/scalasem.d.ts.map +1 -1
  226. package/types/lib/ecosystems/vendoredCode.d.ts +26 -0
  227. package/types/lib/ecosystems/vendoredCode.d.ts.map +1 -1
  228. package/types/lib/ecosystems/venvProbe.d.ts +40 -0
  229. package/types/lib/ecosystems/venvProbe.d.ts.map +1 -0
  230. package/types/lib/evinser/evinser.d.ts +120 -13
  231. package/types/lib/evinser/evinser.d.ts.map +1 -1
  232. package/types/lib/evinser/scalasem.d.ts.map +1 -1
  233. package/types/lib/helpers/agenticToolutils.d.ts +53 -19
  234. package/types/lib/helpers/agenticToolutils.d.ts.map +1 -1
  235. package/types/lib/helpers/bomSigner.d.ts +20 -3
  236. package/types/lib/helpers/bomSigner.d.ts.map +1 -1
  237. package/types/lib/helpers/jssSigner.d.ts +288 -0
  238. package/types/lib/helpers/jssSigner.d.ts.map +1 -0
  239. package/types/lib/helpers/vsixutils.d.ts +303 -19
  240. package/types/lib/helpers/vsixutils.d.ts.map +1 -1
  241. package/types/lib/inventory/agentBlueprint.d.ts +70 -0
  242. package/types/lib/inventory/agentBlueprint.d.ts.map +1 -0
  243. package/types/lib/inventory/agentToolNames.d.ts +51 -0
  244. package/types/lib/inventory/agentToolNames.d.ts.map +1 -0
  245. package/types/lib/inventory/aiCollector.d.ts.map +1 -1
  246. package/types/lib/inventory/aiInventory.d.ts.map +1 -1
  247. package/types/lib/inventory/aiProviders.d.ts +85 -0
  248. package/types/lib/inventory/aiProviders.d.ts.map +1 -0
  249. package/types/lib/inventory/atomUtils.d.ts +19 -0
  250. package/types/lib/inventory/atomUtils.d.ts.map +1 -1
  251. package/types/lib/inventory/bomUtils.d.ts.map +1 -1
  252. package/types/lib/inventory/brotliDecoder.d.ts +58 -0
  253. package/types/lib/inventory/brotliDecoder.d.ts.map +1 -0
  254. package/types/lib/inventory/cbomutils.d.ts +17 -0
  255. package/types/lib/inventory/cbomutils.d.ts.map +1 -1
  256. package/types/lib/inventory/ciParsers/githubActionsLock.d.ts +101 -0
  257. package/types/lib/inventory/ciParsers/githubActionsLock.d.ts.map +1 -0
  258. package/types/lib/inventory/citations.d.ts +5 -0
  259. package/types/lib/inventory/citations.d.ts.map +1 -1
  260. package/types/lib/inventory/communityAiConfigParser.d.ts.map +1 -1
  261. package/types/lib/inventory/cyclonedx20.d.ts +99 -0
  262. package/types/lib/inventory/cyclonedx20.d.ts.map +1 -0
  263. package/types/lib/inventory/cyclonedx20Common.d.ts +102 -0
  264. package/types/lib/inventory/cyclonedx20Common.d.ts.map +1 -0
  265. package/types/lib/inventory/cyclonedx20Derived.d.ts +74 -0
  266. package/types/lib/inventory/cyclonedx20Derived.d.ts.map +1 -0
  267. package/types/lib/inventory/cyclonedx20Parties.d.ts +91 -0
  268. package/types/lib/inventory/cyclonedx20Parties.d.ts.map +1 -0
  269. package/types/lib/inventory/cyclonedx20Read.d.ts +51 -0
  270. package/types/lib/inventory/cyclonedx20Read.d.ts.map +1 -0
  271. package/types/lib/inventory/cyclonedx20ReadCommon.d.ts +69 -0
  272. package/types/lib/inventory/cyclonedx20ReadCommon.d.ts.map +1 -0
  273. package/types/lib/inventory/cyclonedx20ReadComponents.d.ts +77 -0
  274. package/types/lib/inventory/cyclonedx20ReadComponents.d.ts.map +1 -0
  275. package/types/lib/inventory/cyclonedx20ReadContext.d.ts +118 -0
  276. package/types/lib/inventory/cyclonedx20ReadContext.d.ts.map +1 -0
  277. package/types/lib/inventory/cyclonedx20ReadEvidence.d.ts +40 -0
  278. package/types/lib/inventory/cyclonedx20ReadEvidence.d.ts.map +1 -0
  279. package/types/lib/inventory/cyclonedx20ReadSections.d.ts +45 -0
  280. package/types/lib/inventory/cyclonedx20ReadSections.d.ts.map +1 -0
  281. package/types/lib/inventory/cyclonedx20Render.d.ts +53 -0
  282. package/types/lib/inventory/cyclonedx20Render.d.ts.map +1 -0
  283. package/types/lib/inventory/cyclonedx20RenderComponents.d.ts +73 -0
  284. package/types/lib/inventory/cyclonedx20RenderComponents.d.ts.map +1 -0
  285. package/types/lib/inventory/cyclonedx20RenderDefinitions.d.ts +29 -0
  286. package/types/lib/inventory/cyclonedx20RenderDefinitions.d.ts.map +1 -0
  287. package/types/lib/inventory/cyclonedx20RenderEvidence.d.ts +110 -0
  288. package/types/lib/inventory/cyclonedx20RenderEvidence.d.ts.map +1 -0
  289. package/types/lib/inventory/cyclonedx20RenderHardware.d.ts +42 -0
  290. package/types/lib/inventory/cyclonedx20RenderHardware.d.ts.map +1 -0
  291. package/types/lib/inventory/cyclonedx20RenderPatents.d.ts +26 -0
  292. package/types/lib/inventory/cyclonedx20RenderPatents.d.ts.map +1 -0
  293. package/types/lib/inventory/cyclonedx20RenderRefIds.d.ts +55 -0
  294. package/types/lib/inventory/cyclonedx20RenderRefIds.d.ts.map +1 -0
  295. package/types/lib/inventory/cyclonedx20RenderSections.d.ts +45 -0
  296. package/types/lib/inventory/cyclonedx20RenderSections.d.ts.map +1 -0
  297. package/types/lib/inventory/cyclonedx20Tables.d.ts +134 -0
  298. package/types/lib/inventory/cyclonedx20Tables.d.ts.map +1 -0
  299. package/types/lib/inventory/deps.d.ts +35 -2
  300. package/types/lib/inventory/deps.d.ts.map +1 -1
  301. package/types/lib/inventory/dosai.d.ts +36 -1
  302. package/types/lib/inventory/dosai.d.ts.map +1 -1
  303. package/types/lib/inventory/dosaiParsers.d.ts.map +1 -1
  304. package/types/lib/inventory/dotnetRuntime.d.ts +91 -0
  305. package/types/lib/inventory/dotnetRuntime.d.ts.map +1 -0
  306. package/types/lib/inventory/ecosystemFormulationParsers.d.ts +73 -0
  307. package/types/lib/inventory/ecosystemFormulationParsers.d.ts.map +1 -0
  308. package/types/lib/inventory/envcontext.d.ts +74 -12
  309. package/types/lib/inventory/envcontext.d.ts.map +1 -1
  310. package/types/lib/inventory/evidenceUtils.d.ts.map +1 -1
  311. package/types/lib/inventory/formulationParsers.d.ts.map +1 -1
  312. package/types/lib/inventory/gtfobins.d.ts.map +1 -1
  313. package/types/lib/inventory/hbom.d.ts +11 -0
  314. package/types/lib/inventory/hbom.d.ts.map +1 -1
  315. package/types/lib/inventory/hbomLoader.d.ts +54 -0
  316. package/types/lib/inventory/hbomLoader.d.ts.map +1 -1
  317. package/types/lib/inventory/hostRuntimeProbe.d.ts +44 -0
  318. package/types/lib/inventory/hostRuntimeProbe.d.ts.map +1 -0
  319. package/types/lib/inventory/jvmLocalRepos.d.ts +5 -1
  320. package/types/lib/inventory/jvmLocalRepos.d.ts.map +1 -1
  321. package/types/lib/inventory/jvmToolEnv.d.ts +12 -0
  322. package/types/lib/inventory/jvmToolEnv.d.ts.map +1 -1
  323. package/types/lib/inventory/licenseEnhancer.d.ts.map +1 -1
  324. package/types/lib/inventory/mavenCentralMirror.d.ts +170 -0
  325. package/types/lib/inventory/mavenCentralMirror.d.ts.map +1 -0
  326. package/types/lib/inventory/mcpConfigParser.d.ts.map +1 -1
  327. package/types/lib/inventory/nodeBuildInfo.d.ts +95 -0
  328. package/types/lib/inventory/nodeBuildInfo.d.ts.map +1 -0
  329. package/types/lib/inventory/nodeHostProbe.d.ts +15 -0
  330. package/types/lib/inventory/nodeHostProbe.d.ts.map +1 -0
  331. package/types/lib/inventory/occurrenceKey.d.ts +52 -0
  332. package/types/lib/inventory/occurrenceKey.d.ts.map +1 -0
  333. package/types/lib/inventory/osPackageResolver.d.ts +38 -0
  334. package/types/lib/inventory/osPackageResolver.d.ts.map +1 -1
  335. package/types/lib/inventory/phpBuildInfo.d.ts.map +1 -1
  336. package/types/lib/inventory/phpHostProbe.d.ts.map +1 -1
  337. package/types/lib/inventory/pqcMigration.d.ts +84 -0
  338. package/types/lib/inventory/pqcMigration.d.ts.map +1 -0
  339. package/types/lib/inventory/rubyBuildInfo.d.ts +271 -0
  340. package/types/lib/inventory/rubyBuildInfo.d.ts.map +1 -0
  341. package/types/lib/inventory/rubyHostProbe.d.ts +47 -0
  342. package/types/lib/inventory/rubyHostProbe.d.ts.map +1 -0
  343. package/types/lib/inventory/rustFormulationParser.d.ts +7 -2
  344. package/types/lib/inventory/rustFormulationParser.d.ts.map +1 -1
  345. package/types/lib/inventory/scalaCoords.d.ts.map +1 -1
  346. package/types/lib/inventory/scalaDedupe.d.ts +43 -0
  347. package/types/lib/inventory/scalaDedupe.d.ts.map +1 -0
  348. package/types/lib/inventory/source.d.ts +25 -0
  349. package/types/lib/inventory/source.d.ts.map +1 -1
  350. package/types/lib/managers/binary.d.ts.map +1 -1
  351. package/types/lib/managers/docker.d.ts +12 -0
  352. package/types/lib/managers/docker.d.ts.map +1 -1
  353. package/types/lib/parsers/huggingfaceManifest.d.ts +10 -1
  354. package/types/lib/parsers/huggingfaceManifest.d.ts.map +1 -1
  355. package/types/lib/parsers/huggingfaceUtils.d.ts +12 -0
  356. package/types/lib/parsers/huggingfaceUtils.d.ts.map +1 -1
  357. package/types/lib/parsers/kiroPermissions.d.ts +62 -0
  358. package/types/lib/parsers/kiroPermissions.d.ts.map +1 -0
  359. package/types/lib/parsers/largeJson.d.ts +4 -3
  360. package/types/lib/parsers/largeJson.d.ts.map +1 -1
  361. package/types/lib/parsers/vscodeExtensionId.d.ts +48 -0
  362. package/types/lib/parsers/vscodeExtensionId.d.ts.map +1 -0
  363. package/types/lib/server/server.d.ts.map +1 -1
  364. package/types/lib/stages/postgen/postgen.d.ts +7 -0
  365. package/types/lib/stages/postgen/postgen.d.ts.map +1 -1
  366. package/types/lib/stages/postgen/ruleEngine.d.ts.map +1 -1
  367. package/types/lib/stages/postgen/specVersionCompat.d.ts +25 -0
  368. package/types/lib/stages/postgen/specVersionCompat.d.ts.map +1 -1
  369. package/types/lib/stages/pregen/envAudit.d.ts.map +1 -1
  370. package/types/lib/stages/pregen/pregen.d.ts +12 -8
  371. package/types/lib/stages/pregen/pregen.d.ts.map +1 -1
  372. package/types/lib/validator/bomValidator.d.ts +5 -1
  373. package/types/lib/validator/bomValidator.d.ts.map +1 -1
  374. package/types/lib/validator/complianceEngine.d.ts +4 -4
  375. package/types/lib/validator/complianceEngine.d.ts.map +1 -1
  376. package/types/lib/validator/complianceRules.d.ts +14 -2
  377. package/types/lib/validator/complianceRules.d.ts.map +1 -1
  378. package/types/lib/validator/index.d.ts +10 -0
  379. package/types/lib/validator/index.d.ts.map +1 -1
  380. package/types/lib/validator/reporters/json.d.ts.map +1 -1
@@ -506,27 +506,55 @@ function resolveCargoWorkspaceDependencyTarget(
506
506
  ) {
507
507
  return workspaceMemberMap.get(resolvedDependencyName);
508
508
  }
509
- const dependencyPath =
510
- dependencyNode &&
511
- typeof dependencyNode === "object" &&
512
- typeof dependencyNode.path === "string" &&
513
- dependencyNode.path
514
- ? resolve(dirname(cargoTomlFile), dependencyNode.path, "Cargo.toml")
515
- : undefined;
516
- if (!dependencyPath || !safeExistsSync(dependencyPath)) {
509
+ if (
510
+ !dependencyNode ||
511
+ typeof dependencyNode !== "object" ||
512
+ typeof dependencyNode.path !== "string" ||
513
+ !dependencyNode.path
514
+ ) {
515
+ return undefined;
516
+ }
517
+ // A member cannot combine `workspace = true` with its own `path`, so a path
518
+ // on such an entry came from [workspace.dependencies], and Cargo reads it
519
+ // relative to the workspace root rather than to the member.
520
+ const pathBaseFile =
521
+ dependencyNode.workspace === true && workspaceContext?.workspaceRootFile
522
+ ? workspaceContext.workspaceRootFile
523
+ : cargoTomlFile;
524
+ const dependencyPath = resolve(
525
+ dirname(pathBaseFile),
526
+ dependencyNode.path,
527
+ "Cargo.toml",
528
+ );
529
+ if (!safeExistsSync(dependencyPath)) {
517
530
  return undefined;
518
531
  }
519
532
  const dependencyCargoData = readCargoTomlData(dependencyPath);
520
- if (!dependencyCargoData) {
533
+ // A path dependency names a package; a virtual workspace root has none.
534
+ if (!dependencyCargoData?.package) {
521
535
  return undefined;
522
536
  }
537
+ // A path crate outside the current workspace inherits `*.workspace = true`
538
+ // fields from its own workspace, which resolveCargoWorkspaceContext finds by
539
+ // walking up from the crate. Handing it the current workspace would give
540
+ // the crate this workspace's version.
541
+ const workspaceRootDir = workspaceContext?.workspaceRootFile
542
+ ? resolve(dirname(workspaceContext.workspaceRootFile))
543
+ : undefined;
544
+ const dependencyDir = dirname(dependencyPath);
545
+ const isInsideWorkspace =
546
+ workspaceRootDir &&
547
+ (dependencyDir === workspaceRootDir ||
548
+ dependencyDir.startsWith(`${workspaceRootDir}${_sep}`));
523
549
  const dependencyIdentity = resolveCargoManifestPackageIdentity(
524
550
  dependencyPath,
525
551
  dependencyCargoData,
526
- {
527
- workspaceRootData: workspaceContext?.workspaceRootData,
528
- workspaceRootFile: workspaceContext?.workspaceRootFile,
529
- },
552
+ isInsideWorkspace
553
+ ? {
554
+ workspaceRootData: workspaceContext.workspaceRootData,
555
+ workspaceRootFile: workspaceContext.workspaceRootFile,
556
+ }
557
+ : {},
530
558
  );
531
559
  if (!dependencyIdentity?.name || !dependencyIdentity?.version) {
532
560
  return undefined;
@@ -656,6 +684,68 @@ function applyCargoDependencySpecMetadata(
656
684
  );
657
685
  }
658
686
 
687
+ /**
688
+ * Version to record for a Cargo.toml dependency whose requirement is the only
689
+ * thing known about it.
690
+ *
691
+ * A Cargo requirement is not a version: `serde = "1.0"` means `^1.0`, and even
692
+ * `"1.0.94"` means `^1.0.94`. The component version is therefore left out
693
+ * unless the whole requirement is an exact `=X.Y.Z` pin (with an optional
694
+ * prerelease and build label), which is the one requirement Cargo resolves to
695
+ * a single version. `=1.0` is not exact, because Cargo reads it as
696
+ * `>=1.0.0,<1.1.0`.
697
+ *
698
+ * When the requirement is not the node's `version` key, it is a `git+`, `path+`
699
+ * or `workspace` fallback from normalizeCargoDependencyVersion, and it is kept
700
+ * as it stands so the dependency stays traceable to its source.
701
+ *
702
+ * @param {Object|String} dependencyNode Dependency entry from the manifest
703
+ * @param {String} requirement Requirement string from normalizeCargoDependencyVersion
704
+ * @returns {String|undefined} The pinned version, or undefined
705
+ */
706
+ function cargoManifestComponentVersion(dependencyNode, requirement) {
707
+ if (
708
+ typeof dependencyNode === "object" &&
709
+ dependencyNode?.version !== requirement
710
+ ) {
711
+ return requirement;
712
+ }
713
+ const pin = requirement
714
+ .trim()
715
+ .match(/^=\s*(\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?)$/);
716
+ return pin ? pin[1] : undefined;
717
+ }
718
+
719
+ /**
720
+ * Version to record for a Cargo.toml dependency component once the dependency
721
+ * has been resolved to a crate on disk.
722
+ *
723
+ * A path dependency or a workspace dependency always builds against the
724
+ * version in the target crate's own `[package]` section; the requirement next
725
+ * to it (`local = { path = "local", version = "0.2" }`) matters only when the
726
+ * crate is published to a registry. Recording the resolved version keeps one
727
+ * component per crate: the manifest entry and the target's own manifest, which
728
+ * a recursive scan parses as well, then describe the same cargo purl and
729
+ * merge, instead of listing the crate once version-less and once resolved
730
+ * (issue #4719). The `cdx:cargo:path` property keeps the dependency
731
+ * traceable to its source.
732
+ *
733
+ * @param {Object|String} dependencyNode Dependency entry from the manifest
734
+ * @param {String} requirement Requirement string from normalizeCargoDependencyVersion
735
+ * @param {Object|undefined} resolvedTarget Identity of the resolved local crate
736
+ * @returns {String|undefined} The resolved version, or cargoManifestComponentVersion's answer
737
+ */
738
+ function cargoManifestDependencyComponentVersion(
739
+ dependencyNode,
740
+ requirement,
741
+ resolvedTarget,
742
+ ) {
743
+ if (resolvedTarget?.version) {
744
+ return resolvedTarget.version;
745
+ }
746
+ return cargoManifestComponentVersion(dependencyNode, requirement);
747
+ }
748
+
659
749
  function collectCargoManifestDependencyComponents(
660
750
  dependencyEntries,
661
751
  addPackageToList,
@@ -689,9 +779,21 @@ function collectCargoManifestDependencyComponents(
689
779
  continue;
690
780
  }
691
781
  const pkg = {
692
- name: dependencyName,
693
- version,
782
+ // A renamed local dependency (`alias = { path = "…", package = "real" }`)
783
+ // is the crate `real`; the alias only names it inside this manifest and
784
+ // stays on cdx:cargo:package. Keeping the alias with the resolved version
785
+ // would describe a crate that does not exist, or a different one on
786
+ // crates.io.
787
+ name: resolvedWorkspaceTarget?.name || dependencyName,
788
+ version: cargoManifestDependencyComponentVersion(
789
+ dependencyNode,
790
+ version,
791
+ resolvedWorkspaceTarget,
792
+ ),
694
793
  };
794
+ if (resolvedWorkspaceTarget?.group) {
795
+ pkg.group = resolvedWorkspaceTarget.group;
796
+ }
695
797
  applyCargoDependencySpecMetadata(
696
798
  pkg,
697
799
  dependencyNode,
@@ -11,6 +11,7 @@ import {
11
11
  import process from "node:process";
12
12
 
13
13
  import { build } from "@cdxgen/cdx-purl";
14
+ import { coerce, gte } from "semver";
14
15
 
15
16
  import {
16
17
  DEBUG_MODE,
@@ -25,6 +26,7 @@ import {
25
26
  PYPI_MODULE_PACKAGE_MAPPING,
26
27
  PYTHON_STD_MODULES,
27
28
  } from "../core/state.js";
29
+ import { parseToml } from "../core/toml.js";
28
30
  import { findAppModules } from "../inventory/atomUtils.js";
29
31
  import { flattenDeps } from "../inventory/deps.js";
30
32
  import { pypiBomRef } from "../inventory/purl.js";
@@ -612,6 +614,128 @@ export function createUVLock(basePath, options) {
612
614
  }
613
615
  }
614
616
 
617
+ const CONSTRAINT_OPERATORS = [">=", "<=", "==", "!=", "~=", ">", "<", "^", "="];
618
+ const LOWER_BOUND_OPERATORS = new Set([">=", ">", "==", "~=", "^", "="]);
619
+
620
+ /**
621
+ * Check whether a single version constraint puts the lower bound at version 2
622
+ * or higher.
623
+ *
624
+ * @param {string} constraint Constraint such as ">=2.0.0" or "<3.0.0"
625
+ * @returns {boolean} true when the constraint requires version 2 or newer
626
+ */
627
+ function requiresVersion2(constraint) {
628
+ let operator = "";
629
+ let version = constraint.trim();
630
+ for (const candidate of CONSTRAINT_OPERATORS) {
631
+ if (version.startsWith(candidate)) {
632
+ operator = candidate;
633
+ version = version.slice(candidate.length).trim();
634
+ break;
635
+ }
636
+ }
637
+ if (!operator || !LOWER_BOUND_OPERATORS.has(operator)) {
638
+ return false;
639
+ }
640
+ const coerced = coerce(version);
641
+ return coerced !== null && gte(coerced, "2.0.0");
642
+ }
643
+
644
+ /**
645
+ * Check whether a build requirement names poetry-core with a lower bound of
646
+ * version 2 or higher.
647
+ *
648
+ * @param {string} requirement Build requirement such as "poetry-core>=2.0.0"
649
+ * @returns {boolean} true when poetry-core 2 or newer is required
650
+ */
651
+ function requiresPoetryCore2(requirement) {
652
+ if (typeof requirement !== "string") {
653
+ return false;
654
+ }
655
+ const entry = requirement.trim().toLowerCase();
656
+ if (!entry.startsWith("poetry-core")) {
657
+ return false;
658
+ }
659
+ let spec = entry.slice("poetry-core".length);
660
+ if (spec.startsWith("[")) {
661
+ const extrasEnd = spec.indexOf("]");
662
+ if (extrasEnd === -1) {
663
+ return false;
664
+ }
665
+ spec = spec.slice(extrasEnd + 1);
666
+ }
667
+ const next = spec.charAt(0);
668
+ if (next && next !== " " && next !== "\t" && !"><=!~^".includes(next)) {
669
+ return false;
670
+ }
671
+ return spec
672
+ .trim()
673
+ .split(",")
674
+ .some((constraint) => requiresVersion2(constraint));
675
+ }
676
+
677
+ /**
678
+ * Check whether a pyproject.toml requires poetry-core 2 or newer to build.
679
+ *
680
+ * @param {string} pyprojectFile Path to pyproject.toml
681
+ * @returns {boolean} true when the project needs Poetry 2 or newer
682
+ */
683
+ export function isPoetry2Project(pyprojectFile) {
684
+ if (!pyprojectFile || !safeExistsSync(pyprojectFile)) {
685
+ return false;
686
+ }
687
+ let config;
688
+ try {
689
+ config = parseToml(readFileSync(pyprojectFile, "utf-8"));
690
+ } catch (_err) {
691
+ return false;
692
+ }
693
+ const requires = config?.["build-system"]?.requires;
694
+ if (!Array.isArray(requires)) {
695
+ return false;
696
+ }
697
+ return requires.some((requirement) => requiresPoetryCore2(requirement));
698
+ }
699
+
700
+ /**
701
+ * Find the pyproject.toml belonging to a poetry trigger file.
702
+ *
703
+ * @param {string} triggerFile pyproject.toml or poetry.lock path
704
+ * @returns {string|null} Path to pyproject.toml, or null when there is none
705
+ */
706
+ function findPoetryPyprojectFile(triggerFile) {
707
+ if (!triggerFile) {
708
+ return null;
709
+ }
710
+ if (triggerFile.endsWith("pyproject.toml")) {
711
+ return triggerFile;
712
+ }
713
+ if (triggerFile.endsWith("poetry.lock")) {
714
+ const sibling = join(dirname(triggerFile), "pyproject.toml");
715
+ return safeExistsSync(sibling) ? sibling : null;
716
+ }
717
+ return null;
718
+ }
719
+
720
+ /**
721
+ * Build the poetry install arguments for a poetry project.
722
+ *
723
+ * Poetry 2 installs only the main dependency group and no extras by default,
724
+ * so projects requiring poetry-core 2 or newer also get --all-groups and
725
+ * --all-extras. Callers prepend the python invocation such as -m poetry.
726
+ *
727
+ * @param {string} pyprojectFile pyproject.toml or poetry.lock path of the project
728
+ * @returns {string[]} poetry install arguments
729
+ */
730
+ export function getPoetryInstallArgs(pyprojectFile) {
731
+ const args = ["install", "-n", "--no-root"];
732
+ const resolvedFile = findPoetryPyprojectFile(pyprojectFile);
733
+ if (resolvedFile && isPoetry2Project(resolvedFile)) {
734
+ args.push("--all-groups", "--all-extras");
735
+ }
736
+ return args;
737
+ }
738
+
615
739
  /**
616
740
  * Execute pip freeze by creating a virtual env in a temp directory and construct the dependency tree
617
741
  *
@@ -742,7 +866,9 @@ export async function getPipFrozenTree(
742
866
  shell: isWin,
743
867
  });
744
868
  thoughtLog("Performing poetry install");
745
- let poetryInstallArgs = ["-m", "poetry", "install", "-n", "--no-root"];
869
+ let poetryInstallArgs = ["-m", "poetry"].concat(
870
+ getPoetryInstallArgs(reqOrSetupFile),
871
+ );
746
872
  if (isSecureMode) {
747
873
  poetryInstallArgs.unshift("-S");
748
874
  }
@@ -756,7 +882,7 @@ export async function getPipFrozenTree(
756
882
  thoughtLog(
757
883
  "Hmm, poetry doesn't seem to be available as a module. Perhaps it was installed directly 🤔?",
758
884
  );
759
- poetryInstallArgs = ["install", "-n", "--no-root"];
885
+ poetryInstallArgs = getPoetryInstallArgs(reqOrSetupFile);
760
886
  // Attempt to perform poetry install
761
887
  result = safeSpawnSync("poetry", poetryInstallArgs, {
762
888
  cwd: basePath,
@@ -10,6 +10,10 @@ import {
10
10
  detectAiModelVariants,
11
11
  normalizeDetectedVariants,
12
12
  } from "../../inventory/aiModelVariants.js";
13
+ import {
14
+ modelCreatorEntity,
15
+ modelCreatorFromOrganization,
16
+ } from "../../inventory/aiProviders.js";
13
17
  import { getLicenses } from "../../inventory/spdx.js";
14
18
  import {
15
19
  createHuggingFaceComponentReference,
@@ -26,6 +30,7 @@ import {
26
30
  toHuggingFaceAssetPath,
27
31
  toHuggingFaceAssetUrl,
28
32
  toHuggingFacePurl,
33
+ toHuggingFaceSupplier,
29
34
  } from "../../parsers/huggingfaceUtils.js";
30
35
 
31
36
  const CACHE_MISS = Symbol("huggingface-cache-miss");
@@ -1191,6 +1196,23 @@ export async function fetchHuggingFaceAssetInventory(
1191
1196
  payload?.sha ||
1192
1197
  (revision !== "HEAD" ? revision : payload?.lastModified),
1193
1198
  purl,
1199
+ // The repository namespace published the asset, so it is the
1200
+ // supplier. Its url is the organisation or user page, not the
1201
+ // repository. A model is credited to a creator as manufacturer only
1202
+ // when the namespace is that creator's own organisation, since
1203
+ // re-packagers publish models other organisations made.
1204
+ supplier:
1205
+ slashIndex > 0
1206
+ ? toHuggingFaceSupplier(normalizedRepoId.slice(0, slashIndex))
1207
+ : undefined,
1208
+ manufacturer:
1209
+ normalizedAssetType === "model" && slashIndex > 0
1210
+ ? modelCreatorEntity(
1211
+ modelCreatorFromOrganization(
1212
+ normalizedRepoId.slice(0, slashIndex),
1213
+ ),
1214
+ )
1215
+ : undefined,
1194
1216
  description:
1195
1217
  normalizedAssetType === "dataset"
1196
1218
  ? datasetDescriptionFromStats(payload)