kirograph 0.17.0 → 0.20.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 (815) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +105 -1822
  3. package/dist/architecture/layers/dart.d.ts +10 -0
  4. package/dist/architecture/layers/dart.d.ts.map +1 -0
  5. package/dist/architecture/layers/dart.js +112 -0
  6. package/dist/architecture/layers/dart.js.map +7 -0
  7. package/dist/architecture/layers/elixir.d.ts +6 -0
  8. package/dist/architecture/layers/elixir.d.ts.map +1 -0
  9. package/dist/architecture/layers/index.d.ts.map +1 -1
  10. package/dist/architecture/layers/index.js +3 -1
  11. package/dist/architecture/layers/index.js.map +2 -2
  12. package/dist/architecture/layers/ocaml.d.ts +6 -0
  13. package/dist/architecture/layers/ocaml.d.ts.map +1 -0
  14. package/dist/architecture/layers/scala.d.ts +6 -0
  15. package/dist/architecture/layers/scala.d.ts.map +1 -0
  16. package/dist/architecture/layers/solidity.d.ts +6 -0
  17. package/dist/architecture/layers/solidity.d.ts.map +1 -0
  18. package/dist/architecture/layers/vue.d.ts +6 -0
  19. package/dist/architecture/layers/vue.d.ts.map +1 -0
  20. package/dist/architecture/manifest/elm.d.ts +3 -0
  21. package/dist/architecture/manifest/elm.d.ts.map +1 -0
  22. package/dist/architecture/manifest/index.d.ts.map +1 -1
  23. package/dist/architecture/manifest/ocaml.d.ts +3 -0
  24. package/dist/architecture/manifest/ocaml.d.ts.map +1 -0
  25. package/dist/architecture/manifest/scala.d.ts +3 -0
  26. package/dist/architecture/manifest/scala.d.ts.map +1 -0
  27. package/dist/bin/banner.d.ts.map +1 -1
  28. package/dist/bin/banner.js +74 -6
  29. package/dist/bin/banner.js.map +2 -2
  30. package/dist/bin/commands/affected.d.ts.map +1 -1
  31. package/dist/bin/commands/attack-surface.d.ts +3 -0
  32. package/dist/bin/commands/attack-surface.d.ts.map +1 -0
  33. package/dist/bin/commands/attack-surface.js +164 -0
  34. package/dist/bin/commands/attack-surface.js.map +7 -0
  35. package/dist/bin/commands/benchmark.d.ts +9 -0
  36. package/dist/bin/commands/benchmark.d.ts.map +1 -0
  37. package/dist/bin/commands/benchmark.js +206 -0
  38. package/dist/bin/commands/benchmark.js.map +7 -0
  39. package/dist/bin/commands/budget.d.ts +6 -0
  40. package/dist/bin/commands/budget.d.ts.map +1 -0
  41. package/dist/bin/commands/budget.js +70 -0
  42. package/dist/bin/commands/budget.js.map +7 -0
  43. package/dist/bin/commands/caveman.d.ts +7 -0
  44. package/dist/bin/commands/caveman.d.ts.map +1 -0
  45. package/dist/bin/commands/communities.d.ts +3 -0
  46. package/dist/bin/commands/communities.d.ts.map +1 -0
  47. package/dist/bin/commands/communities.js +77 -0
  48. package/dist/bin/commands/communities.js.map +7 -0
  49. package/dist/bin/commands/compression.d.ts +7 -0
  50. package/dist/bin/commands/compression.d.ts.map +1 -0
  51. package/dist/bin/commands/context.d.ts.map +1 -1
  52. package/dist/bin/commands/data.d.ts +3 -0
  53. package/dist/bin/commands/data.d.ts.map +1 -0
  54. package/dist/bin/commands/dead-code.d.ts +3 -0
  55. package/dist/bin/commands/dead-code.d.ts.map +1 -0
  56. package/dist/bin/commands/dep-confusion.d.ts +3 -0
  57. package/dist/bin/commands/dep-confusion.d.ts.map +1 -0
  58. package/dist/bin/commands/dep-confusion.js +119 -0
  59. package/dist/bin/commands/dep-confusion.js.map +7 -0
  60. package/dist/bin/commands/docs.d.ts +3 -0
  61. package/dist/bin/commands/docs.d.ts.map +1 -0
  62. package/dist/bin/commands/exec.d.ts +11 -0
  63. package/dist/bin/commands/exec.d.ts.map +1 -0
  64. package/dist/bin/commands/export.d.ts +3 -0
  65. package/dist/bin/commands/export.d.ts.map +1 -0
  66. package/dist/bin/commands/export.js +304 -10
  67. package/dist/bin/commands/export.js.map +2 -2
  68. package/dist/bin/commands/flows.d.ts +3 -0
  69. package/dist/bin/commands/flows.d.ts.map +1 -0
  70. package/dist/bin/commands/flows.js +97 -0
  71. package/dist/bin/commands/flows.js.map +7 -0
  72. package/dist/bin/commands/gain.d.ts +6 -0
  73. package/dist/bin/commands/gain.d.ts.map +1 -0
  74. package/dist/bin/commands/help.d.ts +7 -0
  75. package/dist/bin/commands/help.d.ts.map +1 -1
  76. package/dist/bin/commands/help.js +399 -101
  77. package/dist/bin/commands/help.js.map +2 -2
  78. package/dist/bin/commands/hotspots.d.ts +3 -0
  79. package/dist/bin/commands/hotspots.d.ts.map +1 -0
  80. package/dist/bin/commands/hotspots.js +94 -1
  81. package/dist/bin/commands/hotspots.js.map +3 -3
  82. package/dist/bin/commands/install.d.ts.map +1 -1
  83. package/dist/bin/commands/install.js +90 -8
  84. package/dist/bin/commands/install.js.map +2 -2
  85. package/dist/bin/commands/licenses.d.ts +3 -0
  86. package/dist/bin/commands/licenses.d.ts.map +1 -0
  87. package/dist/bin/commands/licenses.js +201 -0
  88. package/dist/bin/commands/licenses.js.map +7 -0
  89. package/dist/bin/commands/memory.d.ts +16 -0
  90. package/dist/bin/commands/memory.d.ts.map +1 -0
  91. package/dist/bin/commands/memory.js +151 -4
  92. package/dist/bin/commands/memory.js.map +2 -2
  93. package/dist/bin/commands/path.d.ts +3 -0
  94. package/dist/bin/commands/path.d.ts.map +1 -0
  95. package/dist/bin/commands/pattern.d.ts +3 -0
  96. package/dist/bin/commands/pattern.d.ts.map +1 -0
  97. package/dist/bin/commands/pattern.js +592 -0
  98. package/dist/bin/commands/pattern.js.map +7 -0
  99. package/dist/bin/commands/query.d.ts.map +1 -1
  100. package/dist/bin/commands/reachability.d.ts +3 -0
  101. package/dist/bin/commands/reachability.d.ts.map +1 -0
  102. package/dist/bin/commands/reachability.js +160 -0
  103. package/dist/bin/commands/reachability.js.map +7 -0
  104. package/dist/bin/commands/read.d.ts +6 -0
  105. package/dist/bin/commands/read.d.ts.map +1 -0
  106. package/dist/bin/commands/read.js +100 -0
  107. package/dist/bin/commands/read.js.map +7 -0
  108. package/dist/bin/commands/refactor.d.ts +3 -0
  109. package/dist/bin/commands/refactor.d.ts.map +1 -0
  110. package/dist/bin/commands/refactor.js +116 -0
  111. package/dist/bin/commands/refactor.js.map +7 -0
  112. package/dist/bin/commands/remediation.d.ts +3 -0
  113. package/dist/bin/commands/remediation.d.ts.map +1 -0
  114. package/dist/bin/commands/remediation.js +133 -0
  115. package/dist/bin/commands/remediation.js.map +7 -0
  116. package/dist/bin/commands/sbom.d.ts +3 -0
  117. package/dist/bin/commands/sbom.d.ts.map +1 -0
  118. package/dist/bin/commands/sbom.js +76 -0
  119. package/dist/bin/commands/sbom.js.map +7 -0
  120. package/dist/bin/commands/security-ci-report.d.ts +9 -0
  121. package/dist/bin/commands/security-ci-report.d.ts.map +1 -0
  122. package/dist/bin/commands/security-ci-report.js +267 -0
  123. package/dist/bin/commands/security-ci-report.js.map +7 -0
  124. package/dist/bin/commands/security-export.d.ts +2 -0
  125. package/dist/bin/commands/security-export.d.ts.map +1 -0
  126. package/dist/bin/commands/security-export.js +1349 -0
  127. package/dist/bin/commands/security-export.js.map +7 -0
  128. package/dist/bin/commands/security-flows.d.ts +3 -0
  129. package/dist/bin/commands/security-flows.d.ts.map +1 -0
  130. package/dist/bin/commands/security-flows.js +126 -0
  131. package/dist/bin/commands/security-flows.js.map +7 -0
  132. package/dist/bin/commands/security-secrets.d.ts +3 -0
  133. package/dist/bin/commands/security-secrets.d.ts.map +1 -0
  134. package/dist/bin/commands/security-secrets.js +170 -0
  135. package/dist/bin/commands/security-secrets.js.map +7 -0
  136. package/dist/bin/commands/security.d.ts +3 -0
  137. package/dist/bin/commands/security.d.ts.map +1 -0
  138. package/dist/bin/commands/security.js +208 -0
  139. package/dist/bin/commands/security.js.map +7 -0
  140. package/dist/bin/commands/snapshot.d.ts +3 -0
  141. package/dist/bin/commands/snapshot.d.ts.map +1 -0
  142. package/dist/bin/commands/staleness.d.ts +3 -0
  143. package/dist/bin/commands/staleness.d.ts.map +1 -0
  144. package/dist/bin/commands/staleness.js +144 -0
  145. package/dist/bin/commands/staleness.js.map +7 -0
  146. package/dist/bin/commands/status.d.ts.map +1 -1
  147. package/dist/bin/commands/status.js +129 -2
  148. package/dist/bin/commands/status.js.map +2 -2
  149. package/dist/bin/commands/supply-chain.d.ts +3 -0
  150. package/dist/bin/commands/supply-chain.d.ts.map +1 -0
  151. package/dist/bin/commands/supply-chain.js +138 -0
  152. package/dist/bin/commands/supply-chain.js.map +7 -0
  153. package/dist/bin/commands/surprising.d.ts +3 -0
  154. package/dist/bin/commands/surprising.d.ts.map +1 -0
  155. package/dist/bin/commands/sync.d.ts.map +1 -1
  156. package/dist/bin/commands/uninit.d.ts.map +1 -1
  157. package/dist/bin/commands/uninit.js +109 -60
  158. package/dist/bin/commands/uninit.js.map +2 -2
  159. package/dist/bin/commands/utils.d.ts +5 -0
  160. package/dist/bin/commands/utils.d.ts.map +1 -1
  161. package/dist/bin/commands/vex.d.ts +3 -0
  162. package/dist/bin/commands/vex.d.ts.map +1 -0
  163. package/dist/bin/commands/vex.js +76 -0
  164. package/dist/bin/commands/vex.js.map +7 -0
  165. package/dist/bin/commands/vuln-suppress.d.ts +3 -0
  166. package/dist/bin/commands/vuln-suppress.d.ts.map +1 -0
  167. package/dist/bin/commands/vuln-suppress.js +95 -0
  168. package/dist/bin/commands/vuln-suppress.js.map +7 -0
  169. package/dist/bin/commands/vulns.d.ts +3 -0
  170. package/dist/bin/commands/vulns.d.ts.map +1 -0
  171. package/dist/bin/commands/vulns.js +382 -0
  172. package/dist/bin/commands/vulns.js.map +7 -0
  173. package/dist/bin/installer/archive.d.ts +47 -0
  174. package/dist/bin/installer/archive.d.ts.map +1 -0
  175. package/dist/bin/installer/auto-detect.d.ts +16 -0
  176. package/dist/bin/installer/auto-detect.d.ts.map +1 -0
  177. package/dist/bin/installer/auto-detect.js +125 -0
  178. package/dist/bin/installer/auto-detect.js.map +7 -0
  179. package/dist/bin/installer/caveman.d.ts +12 -0
  180. package/dist/bin/installer/caveman.d.ts.map +1 -0
  181. package/dist/bin/installer/cli-agent.d.ts +7 -2
  182. package/dist/bin/installer/cli-agent.d.ts.map +1 -1
  183. package/dist/bin/installer/cli-agent.js +32 -5
  184. package/dist/bin/installer/cli-agent.js.map +2 -2
  185. package/dist/bin/installer/common.d.ts +36 -0
  186. package/dist/bin/installer/common.d.ts.map +1 -0
  187. package/dist/bin/installer/common.js +48 -0
  188. package/dist/bin/installer/common.js.map +2 -2
  189. package/dist/bin/installer/config-prompt.d.ts +1 -1
  190. package/dist/bin/installer/config-prompt.d.ts.map +1 -1
  191. package/dist/bin/installer/config-prompt.js +85 -2
  192. package/dist/bin/installer/config-prompt.js.map +2 -2
  193. package/dist/bin/installer/dashboard.d.ts.map +1 -1
  194. package/dist/bin/installer/detect.d.ts +30 -0
  195. package/dist/bin/installer/detect.d.ts.map +1 -0
  196. package/dist/bin/installer/detect.js +309 -0
  197. package/dist/bin/installer/detect.js.map +7 -0
  198. package/dist/bin/installer/hooks.d.ts +4 -1
  199. package/dist/bin/installer/hooks.d.ts.map +1 -1
  200. package/dist/bin/installer/hooks.js +34 -0
  201. package/dist/bin/installer/hooks.js.map +2 -2
  202. package/dist/bin/installer/index.d.ts +5 -4
  203. package/dist/bin/installer/index.d.ts.map +1 -1
  204. package/dist/bin/installer/index.js +46 -8
  205. package/dist/bin/installer/index.js.map +2 -2
  206. package/dist/bin/installer/instructions.d.ts +14 -0
  207. package/dist/bin/installer/instructions.d.ts.map +1 -0
  208. package/dist/bin/installer/instructions.js +209 -3
  209. package/dist/bin/installer/instructions.js.map +2 -2
  210. package/dist/bin/installer/mcp.d.ts.map +1 -1
  211. package/dist/bin/installer/prompts.d.ts +17 -0
  212. package/dist/bin/installer/prompts.d.ts.map +1 -1
  213. package/dist/bin/installer/qdrant-dashboard.d.ts.map +1 -1
  214. package/dist/bin/installer/steering.d.ts +14 -2
  215. package/dist/bin/installer/steering.d.ts.map +1 -1
  216. package/dist/bin/installer/steering.js +488 -0
  217. package/dist/bin/installer/steering.js.map +2 -2
  218. package/dist/bin/installer/targets/aider.d.ts +6 -0
  219. package/dist/bin/installer/targets/aider.d.ts.map +1 -0
  220. package/dist/bin/installer/targets/aider.js +3 -3
  221. package/dist/bin/installer/targets/aider.js.map +2 -2
  222. package/dist/bin/installer/targets/amp.d.ts +6 -0
  223. package/dist/bin/installer/targets/amp.d.ts.map +1 -0
  224. package/dist/bin/installer/targets/amp.js +3 -3
  225. package/dist/bin/installer/targets/amp.js.map +2 -2
  226. package/dist/bin/installer/targets/antigravity.d.ts +13 -0
  227. package/dist/bin/installer/targets/antigravity.d.ts.map +1 -0
  228. package/dist/bin/installer/targets/antigravity.js +35 -6
  229. package/dist/bin/installer/targets/antigravity.js.map +2 -2
  230. package/dist/bin/installer/targets/augment.d.ts +6 -0
  231. package/dist/bin/installer/targets/augment.d.ts.map +1 -0
  232. package/dist/bin/installer/targets/augment.js +3 -3
  233. package/dist/bin/installer/targets/augment.js.map +2 -2
  234. package/dist/bin/installer/targets/claude.d.ts +6 -0
  235. package/dist/bin/installer/targets/claude.d.ts.map +1 -0
  236. package/dist/bin/installer/targets/claude.js +49 -5
  237. package/dist/bin/installer/targets/claude.js.map +2 -2
  238. package/dist/bin/installer/targets/cline.d.ts +13 -0
  239. package/dist/bin/installer/targets/cline.d.ts.map +1 -0
  240. package/dist/bin/installer/targets/cline.js +32 -6
  241. package/dist/bin/installer/targets/cline.js.map +2 -2
  242. package/dist/bin/installer/targets/codex.d.ts +6 -0
  243. package/dist/bin/installer/targets/codex.d.ts.map +1 -0
  244. package/dist/bin/installer/targets/codex.js +64 -12
  245. package/dist/bin/installer/targets/codex.js.map +2 -2
  246. package/dist/bin/installer/targets/continue.d.ts +12 -0
  247. package/dist/bin/installer/targets/continue.d.ts.map +1 -0
  248. package/dist/bin/installer/targets/continue.js +2 -2
  249. package/dist/bin/installer/targets/continue.js.map +2 -2
  250. package/dist/bin/installer/targets/copilot-cli.d.ts +12 -0
  251. package/dist/bin/installer/targets/copilot-cli.d.ts.map +1 -0
  252. package/dist/bin/installer/targets/copilot-cli.js +101 -0
  253. package/dist/bin/installer/targets/copilot-cli.js.map +7 -0
  254. package/dist/bin/installer/targets/copilot.d.ts +6 -0
  255. package/dist/bin/installer/targets/copilot.d.ts.map +1 -0
  256. package/dist/bin/installer/targets/copilot.js +31 -5
  257. package/dist/bin/installer/targets/copilot.js.map +2 -2
  258. package/dist/bin/installer/targets/cursor.d.ts +6 -0
  259. package/dist/bin/installer/targets/cursor.d.ts.map +1 -0
  260. package/dist/bin/installer/targets/cursor.js +4 -4
  261. package/dist/bin/installer/targets/cursor.js.map +2 -2
  262. package/dist/bin/installer/targets/devin.d.ts +13 -0
  263. package/dist/bin/installer/targets/devin.d.ts.map +1 -0
  264. package/dist/bin/installer/targets/devin.js +2 -2
  265. package/dist/bin/installer/targets/devin.js.map +2 -2
  266. package/dist/bin/installer/targets/gemini-cli.d.ts +16 -0
  267. package/dist/bin/installer/targets/gemini-cli.d.ts.map +1 -0
  268. package/dist/bin/installer/targets/gemini-cli.js +2 -2
  269. package/dist/bin/installer/targets/gemini-cli.js.map +2 -2
  270. package/dist/bin/installer/targets/generic.d.ts +59 -0
  271. package/dist/bin/installer/targets/generic.d.ts.map +1 -0
  272. package/dist/bin/installer/targets/generic.js +2 -14
  273. package/dist/bin/installer/targets/generic.js.map +2 -2
  274. package/dist/bin/installer/targets/goose.d.ts +6 -0
  275. package/dist/bin/installer/targets/goose.d.ts.map +1 -0
  276. package/dist/bin/installer/targets/goose.js +3 -3
  277. package/dist/bin/installer/targets/goose.js.map +2 -2
  278. package/dist/bin/installer/targets/index.d.ts +11 -0
  279. package/dist/bin/installer/targets/index.d.ts.map +1 -0
  280. package/dist/bin/installer/targets/index.js +250 -0
  281. package/dist/bin/installer/targets/index.js.map +2 -2
  282. package/dist/bin/installer/targets/junie.d.ts +13 -0
  283. package/dist/bin/installer/targets/junie.d.ts.map +1 -0
  284. package/dist/bin/installer/targets/junie.js +2 -2
  285. package/dist/bin/installer/targets/junie.js.map +2 -2
  286. package/dist/bin/installer/targets/kilo.d.ts +12 -0
  287. package/dist/bin/installer/targets/kilo.d.ts.map +1 -0
  288. package/dist/bin/installer/targets/kilo.js +2 -2
  289. package/dist/bin/installer/targets/kilo.js.map +2 -2
  290. package/dist/bin/installer/targets/kiro.d.ts +5 -0
  291. package/dist/bin/installer/targets/kiro.d.ts.map +1 -0
  292. package/dist/bin/installer/targets/kiro.js +4 -4
  293. package/dist/bin/installer/targets/kiro.js.map +2 -2
  294. package/dist/bin/installer/targets/opencode.d.ts +13 -0
  295. package/dist/bin/installer/targets/opencode.d.ts.map +1 -0
  296. package/dist/bin/installer/targets/opencode.js +2 -2
  297. package/dist/bin/installer/targets/opencode.js.map +2 -2
  298. package/dist/bin/installer/targets/openhands.d.ts +6 -0
  299. package/dist/bin/installer/targets/openhands.d.ts.map +1 -0
  300. package/dist/bin/installer/targets/openhands.js +3 -3
  301. package/dist/bin/installer/targets/openhands.js.map +2 -2
  302. package/dist/bin/installer/targets/qoder.d.ts +12 -0
  303. package/dist/bin/installer/targets/qoder.d.ts.map +1 -0
  304. package/dist/bin/installer/targets/qoder.js +91 -0
  305. package/dist/bin/installer/targets/qoder.js.map +7 -0
  306. package/dist/bin/installer/targets/qwen.d.ts +12 -0
  307. package/dist/bin/installer/targets/qwen.d.ts.map +1 -0
  308. package/dist/bin/installer/targets/qwen.js +96 -0
  309. package/dist/bin/installer/targets/qwen.js.map +7 -0
  310. package/dist/bin/installer/targets/replit.d.ts +6 -0
  311. package/dist/bin/installer/targets/replit.d.ts.map +1 -0
  312. package/dist/bin/installer/targets/replit.js +3 -3
  313. package/dist/bin/installer/targets/replit.js.map +2 -2
  314. package/dist/bin/installer/targets/roo.d.ts +13 -0
  315. package/dist/bin/installer/targets/roo.d.ts.map +1 -0
  316. package/dist/bin/installer/targets/roo.js +2 -2
  317. package/dist/bin/installer/targets/roo.js.map +2 -2
  318. package/dist/bin/installer/targets/tabnine.d.ts +6 -0
  319. package/dist/bin/installer/targets/tabnine.d.ts.map +1 -0
  320. package/dist/bin/installer/targets/tabnine.js +3 -3
  321. package/dist/bin/installer/targets/tabnine.js.map +2 -2
  322. package/dist/bin/installer/targets/trae.d.ts +6 -0
  323. package/dist/bin/installer/targets/trae.d.ts.map +1 -0
  324. package/dist/bin/installer/targets/trae.js +5 -5
  325. package/dist/bin/installer/targets/trae.js.map +2 -2
  326. package/dist/bin/installer/targets/warp.d.ts +12 -0
  327. package/dist/bin/installer/targets/warp.d.ts.map +1 -0
  328. package/dist/bin/installer/targets/warp.js +2 -2
  329. package/dist/bin/installer/targets/warp.js.map +2 -2
  330. package/dist/bin/installer/targets/windsurf.d.ts +13 -0
  331. package/dist/bin/installer/targets/windsurf.d.ts.map +1 -0
  332. package/dist/bin/installer/targets/windsurf.js +35 -6
  333. package/dist/bin/installer/targets/windsurf.js.map +2 -2
  334. package/dist/bin/kirograph.js +74 -6
  335. package/dist/bin/kirograph.js.map +3 -3
  336. package/dist/bin/progress.d.ts +16 -1
  337. package/dist/bin/progress.d.ts.map +1 -1
  338. package/dist/compression/filters/aws.d.ts +9 -0
  339. package/dist/compression/filters/aws.d.ts.map +1 -0
  340. package/dist/compression/filters/docker.d.ts +6 -0
  341. package/dist/compression/filters/docker.d.ts.map +1 -0
  342. package/dist/compression/filters/files.d.ts +6 -0
  343. package/dist/compression/filters/files.d.ts.map +1 -0
  344. package/dist/compression/filters/generic.d.ts +7 -0
  345. package/dist/compression/filters/generic.d.ts.map +1 -0
  346. package/dist/compression/filters/git.d.ts +6 -0
  347. package/dist/compression/filters/git.d.ts.map +1 -0
  348. package/dist/compression/filters/github.d.ts +6 -0
  349. package/dist/compression/filters/github.d.ts.map +1 -0
  350. package/dist/compression/filters/lint.d.ts +6 -0
  351. package/dist/compression/filters/lint.d.ts.map +1 -0
  352. package/dist/compression/filters/misc.d.ts +6 -0
  353. package/dist/compression/filters/misc.d.ts.map +1 -0
  354. package/dist/compression/filters/package.d.ts +6 -0
  355. package/dist/compression/filters/package.d.ts.map +1 -0
  356. package/dist/compression/filters/test.d.ts +6 -0
  357. package/dist/compression/filters/test.d.ts.map +1 -0
  358. package/dist/compression/index.d.ts +29 -0
  359. package/dist/compression/index.d.ts.map +1 -0
  360. package/dist/compression/naive-cost.d.ts +26 -0
  361. package/dist/compression/naive-cost.d.ts.map +1 -0
  362. package/dist/compression/tracker.d.ts +155 -0
  363. package/dist/compression/tracker.d.ts.map +1 -0
  364. package/dist/compression/tracker.js +80 -0
  365. package/dist/compression/tracker.js.map +2 -2
  366. package/dist/compression/types.d.ts +49 -0
  367. package/dist/compression/types.d.ts.map +1 -0
  368. package/dist/config.d.ts +90 -0
  369. package/dist/config.d.ts.map +1 -1
  370. package/dist/config.js +144 -3
  371. package/dist/config.js.map +2 -2
  372. package/dist/core/lock-manager.d.ts +2 -0
  373. package/dist/core/lock-manager.d.ts.map +1 -1
  374. package/dist/core/pipeline.d.ts +4 -1
  375. package/dist/core/pipeline.d.ts.map +1 -1
  376. package/dist/core/pipeline.js +78 -2
  377. package/dist/core/pipeline.js.map +2 -2
  378. package/dist/core/snapshot.d.ts +58 -0
  379. package/dist/core/snapshot.d.ts.map +1 -0
  380. package/dist/data/filters.d.ts +23 -0
  381. package/dist/data/filters.d.ts.map +1 -0
  382. package/dist/data/indexer.d.ts +25 -0
  383. package/dist/data/indexer.d.ts.map +1 -0
  384. package/dist/data/linker.d.ts +37 -0
  385. package/dist/data/linker.d.ts.map +1 -0
  386. package/dist/data/lint.d.ts +27 -0
  387. package/dist/data/lint.d.ts.map +1 -0
  388. package/dist/data/parsers/csv.d.ts +11 -0
  389. package/dist/data/parsers/csv.d.ts.map +1 -0
  390. package/dist/data/parsers/excel.d.ts +10 -0
  391. package/dist/data/parsers/excel.d.ts.map +1 -0
  392. package/dist/data/parsers/index.d.ts +28 -0
  393. package/dist/data/parsers/index.d.ts.map +1 -0
  394. package/dist/data/parsers/json-array.d.ts +9 -0
  395. package/dist/data/parsers/json-array.d.ts.map +1 -0
  396. package/dist/data/parsers/jsonl.d.ts +9 -0
  397. package/dist/data/parsers/jsonl.d.ts.map +1 -0
  398. package/dist/data/parsers/parquet.d.ts +10 -0
  399. package/dist/data/parsers/parquet.d.ts.map +1 -0
  400. package/dist/data/profiler.d.ts +29 -0
  401. package/dist/data/profiler.d.ts.map +1 -0
  402. package/dist/data/queries.d.ts +95 -0
  403. package/dist/data/queries.d.ts.map +1 -0
  404. package/dist/data/types.d.ts +103 -0
  405. package/dist/data/types.d.ts.map +1 -0
  406. package/dist/db/database.d.ts +57 -0
  407. package/dist/db/database.d.ts.map +1 -1
  408. package/dist/db/database.js +75 -5
  409. package/dist/db/database.js.map +2 -2
  410. package/dist/db/memory-schema.sql +5 -1
  411. package/dist/db/patterns-schema.sql +23 -0
  412. package/dist/db/schema.sql +3 -1
  413. package/dist/db/security-schema.sql +72 -0
  414. package/dist/docs/formats/asciidoc.d.ts +9 -0
  415. package/dist/docs/formats/asciidoc.d.ts.map +1 -0
  416. package/dist/docs/formats/html.d.ts +10 -0
  417. package/dist/docs/formats/html.d.ts.map +1 -0
  418. package/dist/docs/formats/index.d.ts +31 -0
  419. package/dist/docs/formats/index.d.ts.map +1 -0
  420. package/dist/docs/formats/markdown.d.ts +11 -0
  421. package/dist/docs/formats/markdown.d.ts.map +1 -0
  422. package/dist/docs/formats/openapi.d.ts +17 -0
  423. package/dist/docs/formats/openapi.d.ts.map +1 -0
  424. package/dist/docs/formats/org.d.ts +9 -0
  425. package/dist/docs/formats/org.d.ts.map +1 -0
  426. package/dist/docs/formats/plaintext.d.ts +11 -0
  427. package/dist/docs/formats/plaintext.d.ts.map +1 -0
  428. package/dist/docs/formats/rdoc.d.ts +10 -0
  429. package/dist/docs/formats/rdoc.d.ts.map +1 -0
  430. package/dist/docs/formats/rst.d.ts +11 -0
  431. package/dist/docs/formats/rst.d.ts.map +1 -0
  432. package/dist/docs/indexer.d.ts +49 -0
  433. package/dist/docs/indexer.d.ts.map +1 -0
  434. package/dist/docs/linker.d.ts +30 -0
  435. package/dist/docs/linker.d.ts.map +1 -0
  436. package/dist/docs/lint.d.ts +27 -0
  437. package/dist/docs/lint.d.ts.map +1 -0
  438. package/dist/docs/queries.d.ts +78 -0
  439. package/dist/docs/queries.d.ts.map +1 -0
  440. package/dist/docs/section-id.d.ts +48 -0
  441. package/dist/docs/section-id.d.ts.map +1 -0
  442. package/dist/docs/summarizer.d.ts +13 -0
  443. package/dist/docs/summarizer.d.ts.map +1 -0
  444. package/dist/docs/types.d.ts +71 -0
  445. package/dist/docs/types.d.ts.map +1 -0
  446. package/dist/docs/vectors.d.ts +54 -0
  447. package/dist/docs/vectors.d.ts.map +1 -0
  448. package/dist/extraction/extractor.d.ts +1 -1
  449. package/dist/extraction/extractor.d.ts.map +1 -1
  450. package/dist/extraction/extractor.js +81 -0
  451. package/dist/extraction/extractor.js.map +2 -2
  452. package/dist/extraction/grammars.d.ts +6 -0
  453. package/dist/extraction/grammars.d.ts.map +1 -1
  454. package/dist/extraction/grammars.js +32 -8
  455. package/dist/extraction/grammars.js.map +2 -2
  456. package/dist/extraction/languages.d.ts.map +1 -1
  457. package/dist/extraction/languages.js +43 -1
  458. package/dist/extraction/languages.js.map +2 -2
  459. package/dist/extraction/notebook.d.ts +14 -0
  460. package/dist/extraction/notebook.d.ts.map +1 -0
  461. package/dist/extraction/notebook.js +300 -0
  462. package/dist/extraction/notebook.js.map +7 -0
  463. package/dist/extraction/wasm/tree-sitter-astro.wasm +0 -0
  464. package/dist/extraction/wasm/tree-sitter-gdscript.wasm +0 -0
  465. package/dist/extraction/wasm/tree-sitter-julia.wasm +0 -0
  466. package/dist/extraction/wasm/tree-sitter-nix.wasm +0 -0
  467. package/dist/extraction/wasm/tree-sitter-perl.wasm +0 -0
  468. package/dist/extraction/wasm/tree-sitter-powershell.wasm +0 -0
  469. package/dist/extraction/wasm/tree-sitter-r.wasm +0 -0
  470. package/dist/extraction/wasm/tree-sitter-sql.wasm +0 -0
  471. package/dist/extraction/wasm/tree-sitter-verilog.wasm +0 -0
  472. package/dist/frameworks/amplify.d.ts +9 -0
  473. package/dist/frameworks/amplify.d.ts.map +1 -0
  474. package/dist/frameworks/angular.d.ts +9 -0
  475. package/dist/frameworks/angular.d.ts.map +1 -0
  476. package/dist/frameworks/ansible.d.ts +8 -0
  477. package/dist/frameworks/ansible.d.ts.map +1 -0
  478. package/dist/frameworks/cloudformation.d.ts +9 -0
  479. package/dist/frameworks/cloudformation.d.ts.map +1 -0
  480. package/dist/frameworks/docker.d.ts +9 -0
  481. package/dist/frameworks/docker.d.ts.map +1 -0
  482. package/dist/frameworks/elixir.d.ts +6 -0
  483. package/dist/frameworks/elixir.d.ts.map +1 -0
  484. package/dist/frameworks/flutter.d.ts +12 -0
  485. package/dist/frameworks/flutter.d.ts.map +1 -0
  486. package/dist/frameworks/flutter.js +130 -0
  487. package/dist/frameworks/flutter.js.map +7 -0
  488. package/dist/frameworks/iac.d.ts +10 -0
  489. package/dist/frameworks/iac.d.ts.map +1 -0
  490. package/dist/frameworks/index.d.ts +14 -0
  491. package/dist/frameworks/index.d.ts.map +1 -1
  492. package/dist/frameworks/index.js +7 -1
  493. package/dist/frameworks/index.js.map +3 -3
  494. package/dist/frameworks/kubernetes.d.ts +9 -0
  495. package/dist/frameworks/kubernetes.d.ts.map +1 -0
  496. package/dist/frameworks/pulumi.d.ts +9 -0
  497. package/dist/frameworks/pulumi.d.ts.map +1 -0
  498. package/dist/frameworks/scala.d.ts +6 -0
  499. package/dist/frameworks/scala.d.ts.map +1 -0
  500. package/dist/frameworks/solidity.d.ts +6 -0
  501. package/dist/frameworks/solidity.d.ts.map +1 -0
  502. package/dist/frameworks/terraform.d.ts +14 -0
  503. package/dist/frameworks/terraform.d.ts.map +1 -0
  504. package/dist/frameworks/vue.d.ts +7 -0
  505. package/dist/frameworks/vue.d.ts.map +1 -0
  506. package/dist/graph/communities.d.ts +43 -0
  507. package/dist/graph/communities.d.ts.map +1 -0
  508. package/dist/graph/communities.js +317 -0
  509. package/dist/graph/communities.js.map +7 -0
  510. package/dist/graph/flows.d.ts +55 -0
  511. package/dist/graph/flows.d.ts.map +1 -0
  512. package/dist/graph/flows.js +138 -0
  513. package/dist/graph/flows.js.map +7 -0
  514. package/dist/graph/refactor.d.ts +43 -0
  515. package/dist/graph/refactor.d.ts.map +1 -0
  516. package/dist/graph/refactor.js +155 -0
  517. package/dist/graph/refactor.js.map +7 -0
  518. package/dist/index.d.ts +36 -4
  519. package/dist/index.d.ts.map +1 -1
  520. package/dist/index.js +1 -1
  521. package/dist/index.js.map +2 -2
  522. package/dist/mcp/cache.d.ts +69 -0
  523. package/dist/mcp/cache.d.ts.map +1 -0
  524. package/dist/mcp/cache.js +172 -0
  525. package/dist/mcp/cache.js.map +7 -0
  526. package/dist/mcp/read-modes.d.ts +31 -0
  527. package/dist/mcp/read-modes.d.ts.map +1 -0
  528. package/dist/mcp/read-modes.js +295 -0
  529. package/dist/mcp/read-modes.js.map +7 -0
  530. package/dist/mcp/server.d.ts +1 -0
  531. package/dist/mcp/server.d.ts.map +1 -1
  532. package/dist/mcp/server.js +17 -3
  533. package/dist/mcp/server.js.map +2 -2
  534. package/dist/mcp/tool-names.d.ts +2 -0
  535. package/dist/mcp/tool-names.d.ts.map +1 -0
  536. package/dist/mcp/tool-names.js +24 -1
  537. package/dist/mcp/tool-names.js.map +2 -2
  538. package/dist/mcp/tools.d.ts +12 -0
  539. package/dist/mcp/tools.d.ts.map +1 -1
  540. package/dist/mcp/tools.js +1560 -4
  541. package/dist/mcp/tools.js.map +3 -3
  542. package/dist/memory/compress.d.ts +19 -0
  543. package/dist/memory/compress.d.ts.map +1 -0
  544. package/dist/memory/database.d.ts +92 -0
  545. package/dist/memory/database.d.ts.map +1 -0
  546. package/dist/memory/database.js +70 -2
  547. package/dist/memory/database.js.map +2 -2
  548. package/dist/memory/index.d.ts +71 -0
  549. package/dist/memory/index.d.ts.map +1 -0
  550. package/dist/memory/index.js +12 -2
  551. package/dist/memory/index.js.map +2 -2
  552. package/dist/memory/symbols.d.ts +21 -0
  553. package/dist/memory/symbols.d.ts.map +1 -0
  554. package/dist/memory/types.d.ts +78 -0
  555. package/dist/memory/types.d.ts.map +1 -0
  556. package/dist/memory/types.js.map +1 -1
  557. package/dist/memory/vectors.d.ts +43 -0
  558. package/dist/memory/vectors.d.ts.map +1 -0
  559. package/dist/patterns/graph.d.ts +16 -0
  560. package/dist/patterns/graph.d.ts.map +1 -0
  561. package/dist/patterns/graph.js +45 -0
  562. package/dist/patterns/graph.js.map +7 -0
  563. package/dist/patterns/index.d.ts +4 -0
  564. package/dist/patterns/index.d.ts.map +1 -0
  565. package/dist/patterns/index.js +39 -0
  566. package/dist/patterns/index.js.map +7 -0
  567. package/dist/patterns/indexer.d.ts +15 -0
  568. package/dist/patterns/indexer.d.ts.map +1 -0
  569. package/dist/patterns/indexer.js +97 -0
  570. package/dist/patterns/indexer.js.map +7 -0
  571. package/dist/patterns/library/command-injection-go.yaml +11 -0
  572. package/dist/patterns/library/dangerous-eval-js.yaml +14 -0
  573. package/dist/patterns/library/dangerous-exec-py.yaml +13 -0
  574. package/dist/patterns/library/dangerous-reflection-java.yaml +8 -0
  575. package/dist/patterns/library/path-traversal-go.yaml +11 -0
  576. package/dist/patterns/library/path-traversal-py.yaml +12 -0
  577. package/dist/patterns/library/path-traversal-readfile-js.yaml +14 -0
  578. package/dist/patterns/library/prototype-pollution-js.yaml +12 -0
  579. package/dist/patterns/library/sql-injection-concat-js.yaml +12 -0
  580. package/dist/patterns/library/sql-injection-java.yaml +13 -0
  581. package/dist/patterns/library/sql-injection-py.yaml +12 -0
  582. package/dist/patterns/library/sql-injection-template-js.yaml +13 -0
  583. package/dist/patterns/library/weak-crypto-md5-js.yaml +13 -0
  584. package/dist/patterns/library/weak-crypto-py.yaml +13 -0
  585. package/dist/patterns/loader.d.ts +18 -0
  586. package/dist/patterns/loader.d.ts.map +1 -0
  587. package/dist/patterns/loader.js +277 -0
  588. package/dist/patterns/loader.js.map +7 -0
  589. package/dist/patterns/runner.d.ts +42 -0
  590. package/dist/patterns/runner.d.ts.map +1 -0
  591. package/dist/patterns/runner.js +277 -0
  592. package/dist/patterns/runner.js.map +7 -0
  593. package/dist/patterns/types.d.ts +27 -0
  594. package/dist/patterns/types.d.ts.map +1 -0
  595. package/dist/patterns/types.js +34 -0
  596. package/dist/patterns/types.js.map +7 -0
  597. package/dist/resolution/bridges/android-rn.d.ts +13 -0
  598. package/dist/resolution/bridges/android-rn.d.ts.map +1 -0
  599. package/dist/resolution/bridges/android-rn.js +298 -0
  600. package/dist/resolution/bridges/android-rn.js.map +7 -0
  601. package/dist/resolution/bridges/expo-modules.d.ts +10 -0
  602. package/dist/resolution/bridges/expo-modules.d.ts.map +1 -0
  603. package/dist/resolution/bridges/expo-modules.js +155 -0
  604. package/dist/resolution/bridges/expo-modules.js.map +7 -0
  605. package/dist/resolution/bridges/flutter-channel.d.ts +14 -0
  606. package/dist/resolution/bridges/flutter-channel.d.ts.map +1 -0
  607. package/dist/resolution/bridges/flutter-channel.js +385 -0
  608. package/dist/resolution/bridges/flutter-channel.js.map +7 -0
  609. package/dist/resolution/bridges/index.d.ts +40 -0
  610. package/dist/resolution/bridges/index.d.ts.map +1 -0
  611. package/dist/resolution/bridges/index.js +80 -0
  612. package/dist/resolution/bridges/index.js.map +7 -0
  613. package/dist/resolution/bridges/native-events.d.ts +10 -0
  614. package/dist/resolution/bridges/native-events.d.ts.map +1 -0
  615. package/dist/resolution/bridges/native-events.js +188 -0
  616. package/dist/resolution/bridges/native-events.js.map +7 -0
  617. package/dist/resolution/bridges/native-views.d.ts +13 -0
  618. package/dist/resolution/bridges/native-views.d.ts.map +1 -0
  619. package/dist/resolution/bridges/native-views.js +244 -0
  620. package/dist/resolution/bridges/native-views.js.map +7 -0
  621. package/dist/resolution/bridges/react-native.d.ts +9 -0
  622. package/dist/resolution/bridges/react-native.d.ts.map +1 -0
  623. package/dist/resolution/bridges/react-native.js +161 -0
  624. package/dist/resolution/bridges/react-native.js.map +7 -0
  625. package/dist/resolution/bridges/swift-objc.d.ts +14 -0
  626. package/dist/resolution/bridges/swift-objc.d.ts.map +1 -0
  627. package/dist/resolution/bridges/swift-objc.js +227 -0
  628. package/dist/resolution/bridges/swift-objc.js.map +7 -0
  629. package/dist/resolution/bridges/turbomodules.d.ts +10 -0
  630. package/dist/resolution/bridges/turbomodules.d.ts.map +1 -0
  631. package/dist/resolution/bridges/turbomodules.js +216 -0
  632. package/dist/resolution/bridges/turbomodules.js.map +7 -0
  633. package/dist/resolution/index.d.ts +28 -3
  634. package/dist/resolution/index.d.ts.map +1 -1
  635. package/dist/resolution/index.js +61 -2
  636. package/dist/resolution/index.js.map +2 -2
  637. package/dist/security/attack-surface.d.ts +46 -0
  638. package/dist/security/attack-surface.d.ts.map +1 -0
  639. package/dist/security/attack-surface.js +206 -0
  640. package/dist/security/attack-surface.js.map +7 -0
  641. package/dist/security/context-warnings.d.ts +40 -0
  642. package/dist/security/context-warnings.d.ts.map +1 -0
  643. package/dist/security/context-warnings.js +123 -0
  644. package/dist/security/context-warnings.js.map +7 -0
  645. package/dist/security/data-flows.d.ts +33 -0
  646. package/dist/security/data-flows.d.ts.map +1 -0
  647. package/dist/security/data-flows.js +286 -0
  648. package/dist/security/data-flows.js.map +7 -0
  649. package/dist/security/dep-confusion.d.ts +23 -0
  650. package/dist/security/dep-confusion.d.ts.map +1 -0
  651. package/dist/security/dep-confusion.js +255 -0
  652. package/dist/security/dep-confusion.js.map +7 -0
  653. package/dist/security/errors.d.ts +16 -0
  654. package/dist/security/errors.d.ts.map +1 -0
  655. package/dist/security/errors.js +51 -0
  656. package/dist/security/errors.js.map +7 -0
  657. package/dist/security/export/fix-suggestions.d.ts +21 -0
  658. package/dist/security/export/fix-suggestions.d.ts.map +1 -0
  659. package/dist/security/export/fix-suggestions.js +58 -0
  660. package/dist/security/export/fix-suggestions.js.map +7 -0
  661. package/dist/security/export/sbom.d.ts +33 -0
  662. package/dist/security/export/sbom.d.ts.map +1 -0
  663. package/dist/security/export/sbom.js +230 -0
  664. package/dist/security/export/sbom.js.map +7 -0
  665. package/dist/security/export/serialization.d.ts +62 -0
  666. package/dist/security/export/serialization.d.ts.map +1 -0
  667. package/dist/security/export/serialization.js +142 -0
  668. package/dist/security/export/serialization.js.map +7 -0
  669. package/dist/security/export/vex.d.ts +58 -0
  670. package/dist/security/export/vex.d.ts.map +1 -0
  671. package/dist/security/export/vex.js +220 -0
  672. package/dist/security/export/vex.js.map +7 -0
  673. package/dist/security/index.d.ts +21 -0
  674. package/dist/security/index.d.ts.map +1 -0
  675. package/dist/security/index.js +67 -0
  676. package/dist/security/index.js.map +7 -0
  677. package/dist/security/integrator.d.ts +63 -0
  678. package/dist/security/integrator.d.ts.map +1 -0
  679. package/dist/security/integrator.js +491 -0
  680. package/dist/security/integrator.js.map +7 -0
  681. package/dist/security/license.d.ts +33 -0
  682. package/dist/security/license.d.ts.map +1 -0
  683. package/dist/security/license.js +70 -0
  684. package/dist/security/license.js.map +7 -0
  685. package/dist/security/manifest/adapter.d.ts +92 -0
  686. package/dist/security/manifest/adapter.d.ts.map +1 -0
  687. package/dist/security/manifest/adapter.js +243 -0
  688. package/dist/security/manifest/adapter.js.map +7 -0
  689. package/dist/security/manifest/parser.d.ts +73 -0
  690. package/dist/security/manifest/parser.d.ts.map +1 -0
  691. package/dist/security/manifest/parser.js +376 -0
  692. package/dist/security/manifest/parser.js.map +7 -0
  693. package/dist/security/manifest/plugins/cargo.d.ts +11 -0
  694. package/dist/security/manifest/plugins/cargo.d.ts.map +1 -0
  695. package/dist/security/manifest/plugins/cargo.js +233 -0
  696. package/dist/security/manifest/plugins/cargo.js.map +7 -0
  697. package/dist/security/manifest/plugins/composer.d.ts +11 -0
  698. package/dist/security/manifest/plugins/composer.d.ts.map +1 -0
  699. package/dist/security/manifest/plugins/composer.js +152 -0
  700. package/dist/security/manifest/plugins/composer.js.map +7 -0
  701. package/dist/security/manifest/plugins/go.d.ts +12 -0
  702. package/dist/security/manifest/plugins/go.d.ts.map +1 -0
  703. package/dist/security/manifest/plugins/go.js +146 -0
  704. package/dist/security/manifest/plugins/go.js.map +7 -0
  705. package/dist/security/manifest/plugins/gradle.d.ts +12 -0
  706. package/dist/security/manifest/plugins/gradle.d.ts.map +1 -0
  707. package/dist/security/manifest/plugins/gradle.js +159 -0
  708. package/dist/security/manifest/plugins/gradle.js.map +7 -0
  709. package/dist/security/manifest/plugins/hex.d.ts +11 -0
  710. package/dist/security/manifest/plugins/hex.d.ts.map +1 -0
  711. package/dist/security/manifest/plugins/hex.js +159 -0
  712. package/dist/security/manifest/plugins/hex.js.map +7 -0
  713. package/dist/security/manifest/plugins/maven.d.ts +11 -0
  714. package/dist/security/manifest/plugins/maven.d.ts.map +1 -0
  715. package/dist/security/manifest/plugins/maven.js +128 -0
  716. package/dist/security/manifest/plugins/maven.js.map +7 -0
  717. package/dist/security/manifest/plugins/npm.d.ts +11 -0
  718. package/dist/security/manifest/plugins/npm.d.ts.map +1 -0
  719. package/dist/security/manifest/plugins/npm.js +284 -0
  720. package/dist/security/manifest/plugins/npm.js.map +7 -0
  721. package/dist/security/manifest/plugins/nuget.d.ts +12 -0
  722. package/dist/security/manifest/plugins/nuget.d.ts.map +1 -0
  723. package/dist/security/manifest/plugins/nuget.js +186 -0
  724. package/dist/security/manifest/plugins/nuget.js.map +7 -0
  725. package/dist/security/manifest/plugins/pip.d.ts +11 -0
  726. package/dist/security/manifest/plugins/pip.d.ts.map +1 -0
  727. package/dist/security/manifest/plugins/pip.js +123 -0
  728. package/dist/security/manifest/plugins/pip.js.map +7 -0
  729. package/dist/security/manifest/plugins/pubspec.d.ts +11 -0
  730. package/dist/security/manifest/plugins/pubspec.d.ts.map +1 -0
  731. package/dist/security/manifest/plugins/pubspec.js +212 -0
  732. package/dist/security/manifest/plugins/pubspec.js.map +7 -0
  733. package/dist/security/manifest/plugins/pyproject.d.ts +3 -0
  734. package/dist/security/manifest/plugins/pyproject.d.ts.map +1 -0
  735. package/dist/security/manifest/plugins/pyproject.js +261 -0
  736. package/dist/security/manifest/plugins/pyproject.js.map +7 -0
  737. package/dist/security/manifest/plugins/rubygems.d.ts +11 -0
  738. package/dist/security/manifest/plugins/rubygems.d.ts.map +1 -0
  739. package/dist/security/manifest/plugins/rubygems.js +185 -0
  740. package/dist/security/manifest/plugins/rubygems.js.map +7 -0
  741. package/dist/security/manifest/plugins/swift.d.ts +11 -0
  742. package/dist/security/manifest/plugins/swift.d.ts.map +1 -0
  743. package/dist/security/manifest/plugins/swift.js +200 -0
  744. package/dist/security/manifest/plugins/swift.js.map +7 -0
  745. package/dist/security/owasp.d.ts +16 -0
  746. package/dist/security/owasp.d.ts.map +1 -0
  747. package/dist/security/owasp.js +104 -0
  748. package/dist/security/owasp.js.map +7 -0
  749. package/dist/security/pipeline.d.ts +37 -0
  750. package/dist/security/pipeline.d.ts.map +1 -0
  751. package/dist/security/pipeline.js +125 -0
  752. package/dist/security/pipeline.js.map +7 -0
  753. package/dist/security/reachability.d.ts +67 -0
  754. package/dist/security/reachability.d.ts.map +1 -0
  755. package/dist/security/reachability.js +276 -0
  756. package/dist/security/reachability.js.map +7 -0
  757. package/dist/security/remediation.d.ts +51 -0
  758. package/dist/security/remediation.d.ts.map +1 -0
  759. package/dist/security/remediation.js +126 -0
  760. package/dist/security/remediation.js.map +7 -0
  761. package/dist/security/secrets.d.ts +38 -0
  762. package/dist/security/secrets.d.ts.map +1 -0
  763. package/dist/security/secrets.js +176 -0
  764. package/dist/security/secrets.js.map +7 -0
  765. package/dist/security/staleness.d.ts +43 -0
  766. package/dist/security/staleness.d.ts.map +1 -0
  767. package/dist/security/staleness.js +231 -0
  768. package/dist/security/staleness.js.map +7 -0
  769. package/dist/security/supply-chain.d.ts +34 -0
  770. package/dist/security/supply-chain.d.ts.map +1 -0
  771. package/dist/security/supply-chain.js +301 -0
  772. package/dist/security/supply-chain.js.map +7 -0
  773. package/dist/security/suppressions.d.ts +18 -0
  774. package/dist/security/suppressions.d.ts.map +1 -0
  775. package/dist/security/suppressions.js +106 -0
  776. package/dist/security/suppressions.js.map +7 -0
  777. package/dist/security/types.d.ts +144 -0
  778. package/dist/security/types.d.ts.map +1 -0
  779. package/dist/security/types.js +17 -0
  780. package/dist/security/types.js.map +7 -0
  781. package/dist/security/vuln/client.d.ts +90 -0
  782. package/dist/security/vuln/client.d.ts.map +1 -0
  783. package/dist/security/vuln/client.js +355 -0
  784. package/dist/security/vuln/client.js.map +7 -0
  785. package/dist/security/vuln/epss-client.d.ts +26 -0
  786. package/dist/security/vuln/epss-client.d.ts.map +1 -0
  787. package/dist/security/vuln/epss-client.js +95 -0
  788. package/dist/security/vuln/epss-client.js.map +7 -0
  789. package/dist/security/vuln/index.d.ts +6 -0
  790. package/dist/security/vuln/index.d.ts.map +1 -0
  791. package/dist/security/vuln/index.js +29 -0
  792. package/dist/security/vuln/index.js.map +7 -0
  793. package/dist/security/vuln/osv-adapter.d.ts +58 -0
  794. package/dist/security/vuln/osv-adapter.d.ts.map +1 -0
  795. package/dist/security/vuln/osv-adapter.js +321 -0
  796. package/dist/security/vuln/osv-adapter.js.map +7 -0
  797. package/dist/security/vuln/types.d.ts +29 -0
  798. package/dist/security/vuln/types.d.ts.map +1 -0
  799. package/dist/security/vuln/types.js +17 -0
  800. package/dist/security/vuln/types.js.map +7 -0
  801. package/dist/sync/index.d.ts +4 -2
  802. package/dist/sync/index.d.ts.map +1 -1
  803. package/dist/types.d.ts +10 -4
  804. package/dist/types.d.ts.map +1 -1
  805. package/dist/types.js.map +2 -2
  806. package/dist/vectors/index.d.ts +11 -3
  807. package/dist/vectors/index.d.ts.map +1 -1
  808. package/dist/vectors/qdrant-index.d.ts +10 -3
  809. package/dist/vectors/qdrant-index.d.ts.map +1 -1
  810. package/dist/vectors/typesense-index.d.ts.map +1 -1
  811. package/dist/watchmen/index.js +83 -0
  812. package/dist/watchmen/index.js.map +7 -0
  813. package/dist/watchmen/synthesize.js +475 -0
  814. package/dist/watchmen/synthesize.js.map +7 -0
  815. package/package.json +6 -2
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/security/vuln/epss-client.ts"],
4
+ "sourcesContent": ["/**\n * EPSS (Exploit Prediction Scoring System) Client\n *\n * Fetches exploit prediction scores from the FIRST.org EPSS API for CVE IDs.\n * EPSS is non-critical: on error, an empty map is returned so the caller can\n * continue without scores.\n *\n * API: https://api.first.org/data/v1/epss\n */\n\nimport { logWarn, logError } from '../../errors';\n\nconst EPSS_API_URL = 'https://api.first.org/data/v1/epss';\nconst CHUNK_SIZE = 500;\nconst TIMEOUT_MS = 30000;\n\ninterface EpssApiResponse {\n status: string;\n status_code: number;\n data: Array<{\n cve: string;\n epss: string;\n percentile: string;\n date: string;\n }>;\n}\n\nexport class EpssClient {\n /**\n * Fetch EPSS scores for a list of CVE IDs.\n *\n * CVEs are batched into chunks of 500 per request. Missing CVEs simply do\n * not appear in the response and are omitted from the returned map.\n *\n * @param cveIds - List of CVE identifiers (e.g. [\"CVE-2021-44228\", ...])\n * @returns Map from CVE ID to { score, percentile } (floats in [0, 1])\n */\n async fetchScores(cveIds: string[]): Promise<Map<string, { score: number; percentile: number }>> {\n const result = new Map<string, { score: number; percentile: number }>();\n\n if (cveIds.length === 0) {\n return result;\n }\n\n for (let i = 0; i < cveIds.length; i += CHUNK_SIZE) {\n const chunk = cveIds.slice(i, i + CHUNK_SIZE);\n try {\n const chunkResult = await this.fetchChunk(chunk);\n for (const [cve, scores] of chunkResult) {\n result.set(cve, scores);\n }\n } catch (error: unknown) {\n const msg = error instanceof Error ? error.message : String(error);\n logWarn(`[sec:epss] Failed to fetch EPSS scores for chunk of ${chunk.length} CVEs: ${msg}`);\n // EPSS is non-critical \u2014 continue with partial results\n }\n }\n\n return result;\n }\n\n private async fetchChunk(\n cveIds: string[],\n ): Promise<Map<string, { score: number; percentile: number }>> {\n const result = new Map<string, { score: number; percentile: number }>();\n\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), TIMEOUT_MS);\n\n try {\n const cveParam = cveIds.join(',');\n const url = `${EPSS_API_URL}?cve=${encodeURIComponent(cveParam)}`;\n\n const response = await fetch(url, { signal: controller.signal });\n\n if (!response.ok) {\n logWarn(`[sec:epss] EPSS API returned HTTP ${response.status}`);\n return result;\n }\n\n const json = (await response.json()) as EpssApiResponse;\n\n if (json.status !== 'OK' || !Array.isArray(json.data)) {\n logWarn(`[sec:epss] Unexpected EPSS API response structure`);\n return result;\n }\n\n for (const entry of json.data) {\n const score = parseFloat(entry.epss);\n const percentile = parseFloat(entry.percentile);\n if (!isNaN(score) && !isNaN(percentile)) {\n result.set(entry.cve, { score, percentile });\n }\n }\n } catch (error: unknown) {\n const msg = error instanceof Error ? error.message : String(error);\n logError(`[sec:epss] Error fetching EPSS chunk: ${msg}`);\n throw error;\n } finally {\n clearTimeout(timeout);\n }\n\n return result;\n }\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAUA,oBAAkC;AAElC,MAAM,eAAe;AACrB,MAAM,aAAa;AACnB,MAAM,aAAa;AAaZ,MAAM,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUtB,MAAM,YAAY,QAA+E;AAC/F,UAAM,SAAS,oBAAI,IAAmD;AAEtE,QAAI,OAAO,WAAW,GAAG;AACvB,aAAO;AAAA,IACT;AAEA,aAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK,YAAY;AAClD,YAAM,QAAQ,OAAO,MAAM,GAAG,IAAI,UAAU;AAC5C,UAAI;AACF,cAAM,cAAc,MAAM,KAAK,WAAW,KAAK;AAC/C,mBAAW,CAAC,KAAK,MAAM,KAAK,aAAa;AACvC,iBAAO,IAAI,KAAK,MAAM;AAAA,QACxB;AAAA,MACF,SAAS,OAAgB;AACvB,cAAM,MAAM,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AACjE,mCAAQ,uDAAuD,MAAM,MAAM,UAAU,GAAG,EAAE;AAAA,MAE5F;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,MAAc,WACZ,QAC6D;AAC7D,UAAM,SAAS,oBAAI,IAAmD;AAEtE,UAAM,aAAa,IAAI,gBAAgB;AACvC,UAAM,UAAU,WAAW,MAAM,WAAW,MAAM,GAAG,UAAU;AAE/D,QAAI;AACF,YAAM,WAAW,OAAO,KAAK,GAAG;AAChC,YAAM,MAAM,GAAG,YAAY,QAAQ,mBAAmB,QAAQ,CAAC;AAE/D,YAAM,WAAW,MAAM,MAAM,KAAK,EAAE,QAAQ,WAAW,OAAO,CAAC;AAE/D,UAAI,CAAC,SAAS,IAAI;AAChB,mCAAQ,qCAAqC,SAAS,MAAM,EAAE;AAC9D,eAAO;AAAA,MACT;AAEA,YAAM,OAAQ,MAAM,SAAS,KAAK;AAElC,UAAI,KAAK,WAAW,QAAQ,CAAC,MAAM,QAAQ,KAAK,IAAI,GAAG;AACrD,mCAAQ,mDAAmD;AAC3D,eAAO;AAAA,MACT;AAEA,iBAAW,SAAS,KAAK,MAAM;AAC7B,cAAM,QAAQ,WAAW,MAAM,IAAI;AACnC,cAAM,aAAa,WAAW,MAAM,UAAU;AAC9C,YAAI,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,UAAU,GAAG;AACvC,iBAAO,IAAI,MAAM,KAAK,EAAE,OAAO,WAAW,CAAC;AAAA,QAC7C;AAAA,MACF;AAAA,IACF,SAAS,OAAgB;AACvB,YAAM,MAAM,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AACjE,kCAAS,yCAAyC,GAAG,EAAE;AACvD,YAAM;AAAA,IACR,UAAE;AACA,mBAAa,OAAO;AAAA,IACtB;AAEA,WAAO;AAAA,EACT;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Vulnerability database subsystem exports.
3
+ */
4
+ export { VulnerabilityDatabaseClient } from './client';
5
+ export type { VulnDatabaseAdapter } from './types';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/security/vuln/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,2BAA2B,EAAE,MAAM,UAAU,CAAC;AACvD,YAAY,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC"}
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var vuln_exports = {};
20
+ __export(vuln_exports, {
21
+ VulnerabilityDatabaseClient: () => import_client.VulnerabilityDatabaseClient
22
+ });
23
+ module.exports = __toCommonJS(vuln_exports);
24
+ var import_client = require("./client");
25
+ // Annotate the CommonJS export names for ESM import in node:
26
+ 0 && (module.exports = {
27
+ VulnerabilityDatabaseClient
28
+ });
29
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/security/vuln/index.ts"],
4
+ "sourcesContent": ["/**\n * Vulnerability database subsystem exports.\n */\n\nexport { VulnerabilityDatabaseClient } from './client';\nexport type { VulnDatabaseAdapter } from './types';\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA,oBAA4C;",
6
+ "names": []
7
+ }
@@ -0,0 +1,58 @@
1
+ /**
2
+ * OSV API Adapter
3
+ *
4
+ * Queries the OSV (Open Source Vulnerabilities) database for known CVEs
5
+ * affecting project dependencies. Implements the VulnDatabaseAdapter interface.
6
+ */
7
+ import { CVERecord } from '../types';
8
+ import type { VulnDatabaseAdapter, BatchQuery } from './types';
9
+ export type { VulnDatabaseAdapter, BatchQuery };
10
+ export declare class OsvAdapter implements VulnDatabaseAdapter {
11
+ readonly name = "OSV";
12
+ private readonly apiUrl;
13
+ private readonly batchApiUrl;
14
+ private readonly timeoutMs;
15
+ constructor(options?: {
16
+ apiUrl?: string;
17
+ batchApiUrl?: string;
18
+ timeoutMs?: number;
19
+ });
20
+ /**
21
+ * Batch query up to OSV_BATCH_MAX_QUERIES packages in a single HTTP request.
22
+ * Results are returned in the same order as the input queries.
23
+ * Queries for unsupported ecosystems produce empty results without an HTTP call.
24
+ */
25
+ queryBatch(queries: BatchQuery[], signal?: AbortSignal): Promise<Array<CVERecord[]>>;
26
+ query(ecosystem: string, packageName: string, version: string, signal?: AbortSignal): Promise<CVERecord[]>;
27
+ /**
28
+ * Parse the OSV API response into CVERecord objects.
29
+ */
30
+ private parseResponse;
31
+ /**
32
+ * Extract CVE ID from the vulnerability's aliases or use the OSV ID.
33
+ * Prefers CVE-* identifiers from the aliases array.
34
+ */
35
+ private extractCveId;
36
+ /**
37
+ * Extract CVSS v3.1 base score from the severity array.
38
+ * Returns 0 if no CVSS score is available.
39
+ */
40
+ private extractSeverity;
41
+ /**
42
+ * Parse a CVSS vector string or numeric score.
43
+ * CVSS vectors look like: "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H"
44
+ * The base score is not directly in the vector — we extract it if it's a plain number,
45
+ * or return null if we can't parse it.
46
+ */
47
+ private parseCvssScore;
48
+ /**
49
+ * Extract affected version ranges and the first fixed version from the vulnerability.
50
+ */
51
+ private extractAffectedRanges;
52
+ /**
53
+ * Extract and truncate the summary from the vulnerability.
54
+ * Prefers the summary field, falls back to details.
55
+ */
56
+ private extractSummary;
57
+ }
58
+ //# sourceMappingURL=osv-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"osv-adapter.d.ts","sourceRoot":"","sources":["../../../src/security/vuln/osv-adapter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAgB,MAAM,UAAU,CAAC;AACnD,OAAO,KAAK,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAI/D,YAAY,EAAE,mBAAmB,EAAE,UAAU,EAAE,CAAC;AAsEhD,qBAAa,UAAW,YAAW,mBAAmB;IACpD,SAAgB,IAAI,SAAS;IAE7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBAEvB,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE;IAMnF;;;;OAIG;IACG,UAAU,CACd,OAAO,EAAE,UAAU,EAAE,EACrB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;IA6ExB,KAAK,CACT,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,SAAS,EAAE,CAAC;IAkEvB;;OAEG;IACH,OAAO,CAAC,aAAa;IA8BrB;;;OAGG;IACH,OAAO,CAAC,YAAY;IAapB;;;OAGG;IACH,OAAO,CAAC,eAAe;IAyBvB;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IAYtB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAiD7B;;;OAGG;IACH,OAAO,CAAC,cAAc;CAOvB"}
@@ -0,0 +1,321 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var osv_adapter_exports = {};
20
+ __export(osv_adapter_exports, {
21
+ OsvAdapter: () => OsvAdapter
22
+ });
23
+ module.exports = __toCommonJS(osv_adapter_exports);
24
+ var import_errors = require("../errors");
25
+ var import_errors2 = require("../../errors");
26
+ const ECOSYSTEM_MAP = {
27
+ npm: "npm",
28
+ maven: "Maven",
29
+ go: "Go",
30
+ pypi: "PyPI",
31
+ cargo: "crates.io",
32
+ pyproject: "PyPI",
33
+ // pyproject.toml (Poetry/Hatch/PDM/PEP 621)
34
+ nuget: "NuGet",
35
+ gradle: "Maven",
36
+ // Gradle projects use Maven Central
37
+ rubygems: "RubyGems",
38
+ composer: "Packagist",
39
+ swift: "SwiftURL",
40
+ pub: "Pub",
41
+ hex: "Hex"
42
+ };
43
+ const OSV_API_URL = "https://api.osv.dev/v1/query";
44
+ const OSV_BATCH_API_URL = "https://api.osv.dev/v1/querybatch";
45
+ const DEFAULT_TIMEOUT_MS = 3e4;
46
+ const OSV_BATCH_MAX_QUERIES = 1e3;
47
+ const MAX_SUMMARY_LENGTH = 500;
48
+ class OsvAdapter {
49
+ constructor(options) {
50
+ this.name = "OSV";
51
+ this.apiUrl = options?.apiUrl ?? OSV_API_URL;
52
+ this.batchApiUrl = options?.batchApiUrl ?? OSV_BATCH_API_URL;
53
+ this.timeoutMs = options?.timeoutMs ?? DEFAULT_TIMEOUT_MS;
54
+ }
55
+ /**
56
+ * Batch query up to OSV_BATCH_MAX_QUERIES packages in a single HTTP request.
57
+ * Results are returned in the same order as the input queries.
58
+ * Queries for unsupported ecosystems produce empty results without an HTTP call.
59
+ */
60
+ async queryBatch(queries, signal) {
61
+ if (queries.length === 0) return [];
62
+ const osvQueries = [];
63
+ const indexMap = [];
64
+ for (const q of queries) {
65
+ const osvEcosystem = ECOSYSTEM_MAP[q.ecosystem.toLowerCase()];
66
+ if (!osvEcosystem) {
67
+ (0, import_errors2.logWarn)(`OSV adapter: unsupported ecosystem "${q.ecosystem}", skipping batch entry`);
68
+ indexMap.push(null);
69
+ } else {
70
+ indexMap.push(osvQueries.length);
71
+ osvQueries.push({
72
+ package: { name: q.packageName, ecosystem: osvEcosystem },
73
+ version: q.version
74
+ });
75
+ }
76
+ }
77
+ if (osvQueries.length === 0) {
78
+ return queries.map(() => []);
79
+ }
80
+ const timeoutController = new AbortController();
81
+ const timeoutId = setTimeout(() => timeoutController.abort(), this.timeoutMs);
82
+ const combinedSignal = signal ? combineAbortSignals(signal, timeoutController.signal) : timeoutController.signal;
83
+ let batchResults;
84
+ try {
85
+ const response = await fetch(this.batchApiUrl, {
86
+ method: "POST",
87
+ headers: { "Content-Type": "application/json" },
88
+ body: JSON.stringify({ queries: osvQueries }),
89
+ signal: combinedSignal
90
+ });
91
+ if (!response.ok) {
92
+ throw new import_errors.VulnDatabaseError(
93
+ `OSV batch API returned HTTP ${response.status}: ${response.statusText}`,
94
+ "OSV",
95
+ response.status
96
+ );
97
+ }
98
+ const data = await response.json();
99
+ batchResults = data.results ?? [];
100
+ } catch (error) {
101
+ if (error instanceof import_errors.VulnDatabaseError) throw error;
102
+ if (isAbortError(error)) {
103
+ const msg2 = timeoutController.signal.aborted ? `OSV batch query timed out after ${this.timeoutMs}ms (${osvQueries.length} packages)` : `OSV batch query aborted`;
104
+ (0, import_errors2.logError)(msg2);
105
+ throw new import_errors.VulnDatabaseError(msg2, "OSV");
106
+ }
107
+ const msg = error instanceof Error ? error.message : String(error);
108
+ (0, import_errors2.logError)(`OSV batch query failed: ${msg}`);
109
+ throw new import_errors.VulnDatabaseError(`Network error in OSV batch query: ${msg}`, "OSV");
110
+ } finally {
111
+ clearTimeout(timeoutId);
112
+ }
113
+ return queries.map((_, i) => {
114
+ const osvIdx = indexMap[i];
115
+ if (osvIdx === null) return [];
116
+ const resultEntry = batchResults[osvIdx];
117
+ if (!resultEntry) return [];
118
+ return this.parseResponse({ vulns: resultEntry.vulns });
119
+ });
120
+ }
121
+ async query(ecosystem, packageName, version, signal) {
122
+ const osvEcosystem = ECOSYSTEM_MAP[ecosystem.toLowerCase()];
123
+ if (!osvEcosystem) {
124
+ (0, import_errors2.logWarn)(`OSV adapter: unsupported ecosystem "${ecosystem}", skipping query`);
125
+ return [];
126
+ }
127
+ const body = JSON.stringify({
128
+ package: {
129
+ name: packageName,
130
+ ecosystem: osvEcosystem
131
+ },
132
+ version
133
+ });
134
+ const timeoutController = new AbortController();
135
+ const timeoutId = setTimeout(() => timeoutController.abort(), this.timeoutMs);
136
+ const combinedSignal = signal ? combineAbortSignals(signal, timeoutController.signal) : timeoutController.signal;
137
+ try {
138
+ const response = await fetch(this.apiUrl, {
139
+ method: "POST",
140
+ headers: { "Content-Type": "application/json" },
141
+ body,
142
+ signal: combinedSignal
143
+ });
144
+ if (!response.ok) {
145
+ throw new import_errors.VulnDatabaseError(
146
+ `OSV API returned HTTP ${response.status}: ${response.statusText}`,
147
+ "OSV",
148
+ response.status
149
+ );
150
+ }
151
+ const data = await response.json();
152
+ return this.parseResponse(data);
153
+ } catch (error) {
154
+ if (error instanceof import_errors.VulnDatabaseError) {
155
+ throw error;
156
+ }
157
+ if (isAbortError(error)) {
158
+ const isTimeout = timeoutController.signal.aborted;
159
+ const message = isTimeout ? `OSV query timed out after ${this.timeoutMs}ms for ${packageName}@${version}` : `OSV query aborted for ${packageName}@${version}`;
160
+ (0, import_errors2.logError)(message);
161
+ throw new import_errors.VulnDatabaseError(message, "OSV");
162
+ }
163
+ const errorMessage = error instanceof Error ? error.message : String(error);
164
+ (0, import_errors2.logError)(`OSV query failed for ${packageName}@${version}: ${errorMessage}`);
165
+ throw new import_errors.VulnDatabaseError(
166
+ `Network error querying OSV for ${packageName}@${version}: ${errorMessage}`,
167
+ "OSV"
168
+ );
169
+ } finally {
170
+ clearTimeout(timeoutId);
171
+ }
172
+ }
173
+ /**
174
+ * Parse the OSV API response into CVERecord objects.
175
+ */
176
+ parseResponse(data) {
177
+ if (!data.vulns || data.vulns.length === 0) {
178
+ return [];
179
+ }
180
+ const records = [];
181
+ for (const vuln of data.vulns) {
182
+ const cveId = this.extractCveId(vuln);
183
+ if (!cveId) {
184
+ continue;
185
+ }
186
+ const severity = this.extractSeverity(vuln);
187
+ const { ranges, fixedVersion } = this.extractAffectedRanges(vuln);
188
+ const summary = this.extractSummary(vuln);
189
+ records.push({
190
+ id: cveId,
191
+ severity,
192
+ affectedVersionRanges: ranges,
193
+ fixedVersion,
194
+ summary
195
+ });
196
+ }
197
+ return records;
198
+ }
199
+ /**
200
+ * Extract CVE ID from the vulnerability's aliases or use the OSV ID.
201
+ * Prefers CVE-* identifiers from the aliases array.
202
+ */
203
+ extractCveId(vuln) {
204
+ if (vuln.aliases) {
205
+ const cveAlias = vuln.aliases.find((alias) => alias.startsWith("CVE-"));
206
+ if (cveAlias) {
207
+ return cveAlias;
208
+ }
209
+ }
210
+ return vuln.id;
211
+ }
212
+ /**
213
+ * Extract CVSS v3.1 base score from the severity array.
214
+ * Returns 0 if no CVSS score is available.
215
+ */
216
+ extractSeverity(vuln) {
217
+ if (!vuln.severity || vuln.severity.length === 0) {
218
+ return 0;
219
+ }
220
+ for (const sev of vuln.severity) {
221
+ if (sev.type === "CVSS_V3") {
222
+ const score = this.parseCvssScore(sev.score);
223
+ if (score !== null) {
224
+ return score;
225
+ }
226
+ }
227
+ }
228
+ for (const sev of vuln.severity) {
229
+ const score = this.parseCvssScore(sev.score);
230
+ if (score !== null) {
231
+ return score;
232
+ }
233
+ }
234
+ return 0;
235
+ }
236
+ /**
237
+ * Parse a CVSS vector string or numeric score.
238
+ * CVSS vectors look like: "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H"
239
+ * The base score is not directly in the vector — we extract it if it's a plain number,
240
+ * or return null if we can't parse it.
241
+ */
242
+ parseCvssScore(scoreStr) {
243
+ const num = parseFloat(scoreStr);
244
+ if (!isNaN(num) && num >= 0 && num <= 10) {
245
+ return num;
246
+ }
247
+ return null;
248
+ }
249
+ /**
250
+ * Extract affected version ranges and the first fixed version from the vulnerability.
251
+ */
252
+ extractAffectedRanges(vuln) {
253
+ const ranges = [];
254
+ let fixedVersion;
255
+ if (!vuln.affected) {
256
+ return { ranges, fixedVersion };
257
+ }
258
+ for (const affected of vuln.affected) {
259
+ if (!affected.ranges) {
260
+ continue;
261
+ }
262
+ for (const range of affected.ranges) {
263
+ if (!range.events || range.events.length === 0) {
264
+ continue;
265
+ }
266
+ const versionRange = {};
267
+ for (const event of range.events) {
268
+ if (event.introduced) {
269
+ versionRange.introduced = event.introduced;
270
+ }
271
+ if (event.fixed) {
272
+ versionRange.fixed = event.fixed;
273
+ if (!fixedVersion) {
274
+ fixedVersion = event.fixed;
275
+ }
276
+ }
277
+ if (event.last_affected) {
278
+ versionRange.lastAffected = event.last_affected;
279
+ }
280
+ }
281
+ if (versionRange.introduced || versionRange.fixed || versionRange.lastAffected) {
282
+ ranges.push(versionRange);
283
+ }
284
+ }
285
+ }
286
+ return { ranges, fixedVersion };
287
+ }
288
+ /**
289
+ * Extract and truncate the summary from the vulnerability.
290
+ * Prefers the summary field, falls back to details.
291
+ */
292
+ extractSummary(vuln) {
293
+ const text = vuln.summary || vuln.details || "";
294
+ if (text.length <= MAX_SUMMARY_LENGTH) {
295
+ return text;
296
+ }
297
+ return text.slice(0, MAX_SUMMARY_LENGTH - 3) + "...";
298
+ }
299
+ }
300
+ function combineAbortSignals(...signals) {
301
+ const controller = new AbortController();
302
+ for (const signal of signals) {
303
+ if (signal.aborted) {
304
+ controller.abort(signal.reason);
305
+ return controller.signal;
306
+ }
307
+ signal.addEventListener("abort", () => controller.abort(signal.reason), { once: true });
308
+ }
309
+ return controller.signal;
310
+ }
311
+ function isAbortError(error) {
312
+ if (error instanceof Error) {
313
+ return error.name === "AbortError" || error.name === "TimeoutError";
314
+ }
315
+ return false;
316
+ }
317
+ // Annotate the CommonJS export names for ESM import in node:
318
+ 0 && (module.exports = {
319
+ OsvAdapter
320
+ });
321
+ //# sourceMappingURL=osv-adapter.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/security/vuln/osv-adapter.ts"],
4
+ "sourcesContent": ["/**\n * OSV API Adapter\n *\n * Queries the OSV (Open Source Vulnerabilities) database for known CVEs\n * affecting project dependencies. Implements the VulnDatabaseAdapter interface.\n */\n\nimport { CVERecord, VersionRange } from '../types';\nimport type { VulnDatabaseAdapter, BatchQuery } from './types';\nimport { VulnDatabaseError } from '../errors';\nimport { logWarn, logError } from '../../errors';\n\nexport type { VulnDatabaseAdapter, BatchQuery };\n\n// \u2500\u2500 Ecosystem Mapping \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nconst ECOSYSTEM_MAP: Record<string, string> = {\n npm: 'npm',\n maven: 'Maven',\n go: 'Go',\n pypi: 'PyPI',\n cargo: 'crates.io',\n pyproject: 'PyPI', // pyproject.toml (Poetry/Hatch/PDM/PEP 621)\n nuget: 'NuGet',\n gradle: 'Maven', // Gradle projects use Maven Central\n rubygems: 'RubyGems',\n composer: 'Packagist',\n swift: 'SwiftURL',\n pub: 'Pub',\n hex: 'Hex',\n};\n\n// \u2500\u2500 OSV Request/Response Types \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\ninterface OsvSeverity {\n type: string;\n score: string;\n}\n\ninterface OsvAffectedRange {\n type: string;\n events: Array<{ introduced?: string; fixed?: string; last_affected?: string }>;\n}\n\ninterface OsvAffected {\n package?: { name?: string; ecosystem?: string };\n ranges?: OsvAffectedRange[];\n versions?: string[];\n}\n\ninterface OsvVulnerability {\n id: string;\n aliases?: string[];\n summary?: string;\n details?: string;\n severity?: OsvSeverity[];\n affected?: OsvAffected[];\n}\n\ninterface OsvQueryResponse {\n vulns?: OsvVulnerability[];\n}\n\ninterface OsvBatchQueryItem {\n package: { name: string; ecosystem: string };\n version: string;\n}\n\ninterface OsvBatchResponse {\n results: Array<{ vulns?: OsvVulnerability[] }>;\n}\n\n// \u2500\u2500 Constants \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nconst OSV_API_URL = 'https://api.osv.dev/v1/query';\nconst OSV_BATCH_API_URL = 'https://api.osv.dev/v1/querybatch';\nconst DEFAULT_TIMEOUT_MS = 30_000;\nconst OSV_BATCH_MAX_QUERIES = 1000;\nconst MAX_SUMMARY_LENGTH = 500;\n\n// \u2500\u2500 OsvAdapter Implementation \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport class OsvAdapter implements VulnDatabaseAdapter {\n public readonly name = 'OSV';\n\n private readonly apiUrl: string;\n private readonly batchApiUrl: string;\n private readonly timeoutMs: number;\n\n constructor(options?: { apiUrl?: string; batchApiUrl?: string; timeoutMs?: number }) {\n this.apiUrl = options?.apiUrl ?? OSV_API_URL;\n this.batchApiUrl = options?.batchApiUrl ?? OSV_BATCH_API_URL;\n this.timeoutMs = options?.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n }\n\n /**\n * Batch query up to OSV_BATCH_MAX_QUERIES packages in a single HTTP request.\n * Results are returned in the same order as the input queries.\n * Queries for unsupported ecosystems produce empty results without an HTTP call.\n */\n async queryBatch(\n queries: BatchQuery[],\n signal?: AbortSignal,\n ): Promise<Array<CVERecord[]>> {\n if (queries.length === 0) return [];\n\n // Map each query to its OSV ecosystem \u2014 track indices of unsupported ones\n const osvQueries: OsvBatchQueryItem[] = [];\n const indexMap: Array<number | null> = []; // index into osvQueries, or null if unsupported\n\n for (const q of queries) {\n const osvEcosystem = ECOSYSTEM_MAP[q.ecosystem.toLowerCase()];\n if (!osvEcosystem) {\n logWarn(`OSV adapter: unsupported ecosystem \"${q.ecosystem}\", skipping batch entry`);\n indexMap.push(null);\n } else {\n indexMap.push(osvQueries.length);\n osvQueries.push({\n package: { name: q.packageName, ecosystem: osvEcosystem },\n version: q.version,\n });\n }\n }\n\n if (osvQueries.length === 0) {\n return queries.map(() => []);\n }\n\n const timeoutController = new AbortController();\n const timeoutId = setTimeout(() => timeoutController.abort(), this.timeoutMs);\n const combinedSignal = signal\n ? combineAbortSignals(signal, timeoutController.signal)\n : timeoutController.signal;\n\n let batchResults: Array<{ vulns?: OsvVulnerability[] }>;\n\n try {\n const response = await fetch(this.batchApiUrl, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ queries: osvQueries }),\n signal: combinedSignal,\n });\n\n if (!response.ok) {\n throw new VulnDatabaseError(\n `OSV batch API returned HTTP ${response.status}: ${response.statusText}`,\n 'OSV',\n response.status,\n );\n }\n\n const data = (await response.json()) as OsvBatchResponse;\n batchResults = data.results ?? [];\n } catch (error: unknown) {\n if (error instanceof VulnDatabaseError) throw error;\n if (isAbortError(error)) {\n const msg = timeoutController.signal.aborted\n ? `OSV batch query timed out after ${this.timeoutMs}ms (${osvQueries.length} packages)`\n : `OSV batch query aborted`;\n logError(msg);\n throw new VulnDatabaseError(msg, 'OSV');\n }\n const msg = error instanceof Error ? error.message : String(error);\n logError(`OSV batch query failed: ${msg}`);\n throw new VulnDatabaseError(`Network error in OSV batch query: ${msg}`, 'OSV');\n } finally {\n clearTimeout(timeoutId);\n }\n\n // Rebuild full results array aligned with input queries\n return queries.map((_, i) => {\n const osvIdx = indexMap[i];\n if (osvIdx === null) return [];\n const resultEntry = batchResults[osvIdx];\n if (!resultEntry) return [];\n return this.parseResponse({ vulns: resultEntry.vulns });\n });\n }\n\n async query(\n ecosystem: string,\n packageName: string,\n version: string,\n signal?: AbortSignal,\n ): Promise<CVERecord[]> {\n const osvEcosystem = ECOSYSTEM_MAP[ecosystem.toLowerCase()];\n if (!osvEcosystem) {\n logWarn(`OSV adapter: unsupported ecosystem \"${ecosystem}\", skipping query`);\n return [];\n }\n\n const body = JSON.stringify({\n package: {\n name: packageName,\n ecosystem: osvEcosystem,\n },\n version,\n });\n\n // Create a timeout abort signal and combine with any external signal\n const timeoutController = new AbortController();\n const timeoutId = setTimeout(() => timeoutController.abort(), this.timeoutMs);\n\n const combinedSignal = signal\n ? combineAbortSignals(signal, timeoutController.signal)\n : timeoutController.signal;\n\n try {\n const response = await fetch(this.apiUrl, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body,\n signal: combinedSignal,\n });\n\n if (!response.ok) {\n throw new VulnDatabaseError(\n `OSV API returned HTTP ${response.status}: ${response.statusText}`,\n 'OSV',\n response.status,\n );\n }\n\n const data = (await response.json()) as OsvQueryResponse;\n return this.parseResponse(data);\n } catch (error: unknown) {\n if (error instanceof VulnDatabaseError) {\n throw error;\n }\n\n if (isAbortError(error)) {\n const isTimeout = timeoutController.signal.aborted;\n const message = isTimeout\n ? `OSV query timed out after ${this.timeoutMs}ms for ${packageName}@${version}`\n : `OSV query aborted for ${packageName}@${version}`;\n logError(message);\n throw new VulnDatabaseError(message, 'OSV');\n }\n\n const errorMessage = error instanceof Error ? error.message : String(error);\n logError(`OSV query failed for ${packageName}@${version}: ${errorMessage}`);\n throw new VulnDatabaseError(\n `Network error querying OSV for ${packageName}@${version}: ${errorMessage}`,\n 'OSV',\n );\n } finally {\n clearTimeout(timeoutId);\n }\n }\n\n /**\n * Parse the OSV API response into CVERecord objects.\n */\n private parseResponse(data: OsvQueryResponse): CVERecord[] {\n if (!data.vulns || data.vulns.length === 0) {\n return [];\n }\n\n const records: CVERecord[] = [];\n\n for (const vuln of data.vulns) {\n const cveId = this.extractCveId(vuln);\n if (!cveId) {\n // Skip vulnerabilities without a CVE identifier\n continue;\n }\n\n const severity = this.extractSeverity(vuln);\n const { ranges, fixedVersion } = this.extractAffectedRanges(vuln);\n const summary = this.extractSummary(vuln);\n\n records.push({\n id: cveId,\n severity,\n affectedVersionRanges: ranges,\n fixedVersion,\n summary,\n });\n }\n\n return records;\n }\n\n /**\n * Extract CVE ID from the vulnerability's aliases or use the OSV ID.\n * Prefers CVE-* identifiers from the aliases array.\n */\n private extractCveId(vuln: OsvVulnerability): string | undefined {\n // Look for a CVE alias first\n if (vuln.aliases) {\n const cveAlias = vuln.aliases.find((alias) => alias.startsWith('CVE-'));\n if (cveAlias) {\n return cveAlias;\n }\n }\n\n // Fall back to the OSV ID (e.g., GHSA-xxxx-xxxx-xxxx)\n return vuln.id;\n }\n\n /**\n * Extract CVSS v3.1 base score from the severity array.\n * Returns 0 if no CVSS score is available.\n */\n private extractSeverity(vuln: OsvVulnerability): number {\n if (!vuln.severity || vuln.severity.length === 0) {\n return 0;\n }\n\n for (const sev of vuln.severity) {\n if (sev.type === 'CVSS_V3') {\n const score = this.parseCvssScore(sev.score);\n if (score !== null) {\n return score;\n }\n }\n }\n\n // Try any severity type as fallback\n for (const sev of vuln.severity) {\n const score = this.parseCvssScore(sev.score);\n if (score !== null) {\n return score;\n }\n }\n\n return 0;\n }\n\n /**\n * Parse a CVSS vector string or numeric score.\n * CVSS vectors look like: \"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H\"\n * The base score is not directly in the vector \u2014 we extract it if it's a plain number,\n * or return null if we can't parse it.\n */\n private parseCvssScore(scoreStr: string): number | null {\n // If it's a plain number\n const num = parseFloat(scoreStr);\n if (!isNaN(num) && num >= 0 && num <= 10) {\n return num;\n }\n\n // CVSS vector strings don't contain the base score directly.\n // OSV sometimes provides the score as a plain number in the score field.\n return null;\n }\n\n /**\n * Extract affected version ranges and the first fixed version from the vulnerability.\n */\n private extractAffectedRanges(vuln: OsvVulnerability): {\n ranges: VersionRange[];\n fixedVersion?: string;\n } {\n const ranges: VersionRange[] = [];\n let fixedVersion: string | undefined;\n\n if (!vuln.affected) {\n return { ranges, fixedVersion };\n }\n\n for (const affected of vuln.affected) {\n if (!affected.ranges) {\n continue;\n }\n\n for (const range of affected.ranges) {\n if (!range.events || range.events.length === 0) {\n continue;\n }\n\n const versionRange: VersionRange = {};\n\n for (const event of range.events) {\n if (event.introduced) {\n versionRange.introduced = event.introduced;\n }\n if (event.fixed) {\n versionRange.fixed = event.fixed;\n // Capture the first fixed version we encounter\n if (!fixedVersion) {\n fixedVersion = event.fixed;\n }\n }\n if (event.last_affected) {\n versionRange.lastAffected = event.last_affected;\n }\n }\n\n // Only add ranges that have at least one meaningful field\n if (versionRange.introduced || versionRange.fixed || versionRange.lastAffected) {\n ranges.push(versionRange);\n }\n }\n }\n\n return { ranges, fixedVersion };\n }\n\n /**\n * Extract and truncate the summary from the vulnerability.\n * Prefers the summary field, falls back to details.\n */\n private extractSummary(vuln: OsvVulnerability): string {\n const text = vuln.summary || vuln.details || '';\n if (text.length <= MAX_SUMMARY_LENGTH) {\n return text;\n }\n return text.slice(0, MAX_SUMMARY_LENGTH - 3) + '...';\n }\n}\n\n// \u2500\u2500 Utility Functions \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/**\n * Combine multiple AbortSignals into one that aborts when any of them aborts.\n */\nfunction combineAbortSignals(...signals: AbortSignal[]): AbortSignal {\n const controller = new AbortController();\n\n for (const signal of signals) {\n if (signal.aborted) {\n controller.abort(signal.reason);\n return controller.signal;\n }\n\n signal.addEventListener('abort', () => controller.abort(signal.reason), { once: true });\n }\n\n return controller.signal;\n}\n\n/**\n * Check if an error is an abort/timeout error.\n */\nfunction isAbortError(error: unknown): boolean {\n if (error instanceof Error) {\n return error.name === 'AbortError' || error.name === 'TimeoutError';\n }\n return false;\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["import_errors", "msg"]
7
+ }
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Shared types for the vulnerability database subsystem.
3
+ */
4
+ import type { CVERecord } from '../types';
5
+ /** A single entry in a batch vulnerability query. */
6
+ export interface BatchQuery {
7
+ ecosystem: string;
8
+ packageName: string;
9
+ version: string;
10
+ }
11
+ /**
12
+ * Adapter interface for querying a vulnerability database.
13
+ * Each supported database (OSV, NVD, etc.) implements this interface.
14
+ */
15
+ export interface VulnDatabaseAdapter {
16
+ /** Human-readable name of the database (e.g. "OSV") */
17
+ name: string;
18
+ /**
19
+ * Query for vulnerabilities affecting a specific package version.
20
+ */
21
+ query(ecosystem: string, packageName: string, version: string, signal?: AbortSignal): Promise<CVERecord[]>;
22
+ /**
23
+ * Batch query — results[i] corresponds to queries[i].
24
+ * Implementing this is optional but strongly recommended for performance:
25
+ * a single HTTP request replaces N sequential requests.
26
+ */
27
+ queryBatch?(queries: BatchQuery[], signal?: AbortSignal): Promise<Array<CVERecord[]>>;
28
+ }
29
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/security/vuln/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C,qDAAqD;AACrD,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,uDAAuD;IACvD,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,KAAK,CACH,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IAExB;;;;OAIG;IACH,UAAU,CAAC,CACT,OAAO,EAAE,UAAU,EAAE,EACrB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;CAChC"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __copyProps = (to, from, except, desc) => {
7
+ if (from && typeof from === "object" || typeof from === "function") {
8
+ for (let key of __getOwnPropNames(from))
9
+ if (!__hasOwnProp.call(to, key) && key !== except)
10
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
11
+ }
12
+ return to;
13
+ };
14
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
15
+ var types_exports = {};
16
+ module.exports = __toCommonJS(types_exports);
17
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/security/vuln/types.ts"],
4
+ "sourcesContent": ["/**\n * Shared types for the vulnerability database subsystem.\n */\n\nimport type { CVERecord } from '../types';\n\n/** A single entry in a batch vulnerability query. */\nexport interface BatchQuery {\n ecosystem: string;\n packageName: string;\n version: string;\n}\n\n/**\n * Adapter interface for querying a vulnerability database.\n * Each supported database (OSV, NVD, etc.) implements this interface.\n */\nexport interface VulnDatabaseAdapter {\n /** Human-readable name of the database (e.g. \"OSV\") */\n name: string;\n\n /**\n * Query for vulnerabilities affecting a specific package version.\n */\n query(\n ecosystem: string,\n packageName: string,\n version: string,\n signal?: AbortSignal,\n ): Promise<CVERecord[]>;\n\n /**\n * Batch query \u2014 results[i] corresponds to queries[i].\n * Implementing this is optional but strongly recommended for performance:\n * a single HTTP request replaces N sequential requests.\n */\n queryBatch?(\n queries: BatchQuery[],\n signal?: AbortSignal,\n ): Promise<Array<CVERecord[]>>;\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;AAAA;AAAA;",
6
+ "names": []
7
+ }
@@ -16,12 +16,14 @@ export declare function shouldIncludeFile(relPath: string, config: KiroGraphConf
16
16
  export declare function hashContent(content: Buffer | string): string;
17
17
  /**
18
18
  * Returns absolute paths of all indexable files under root.
19
- * Uses git ls-files fast-path when available; falls back to filesystem walk.
19
+ * Handles monorepos with multiple nested git roots by running git ls-files
20
+ * from each sub-repo root independently, then merging results.
21
+ * Falls back to filesystem walk if no git roots found.
20
22
  * Respects AbortSignal.
21
23
  */
22
24
  export declare function scanDirectory(root: string, config: KiroGraphConfig, signal?: AbortSignal): Promise<string[]>;
23
25
  /**
24
- * Classifies git-changed files into added / modified / removed.
26
+ * Classifies git-changed files into added / modified / removed across all nested git roots.
25
27
  * Returns absolute paths. Returns empty arrays if git is unavailable.
26
28
  * Excludes paths whose detected language is 'unknown'.
27
29
  */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sync/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAsFjD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,OAAO,CAUnF;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAE5D;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,eAAe,EACvB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,MAAM,EAAE,CAAC,CAwBnB;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAoCrE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sync/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AA+GjD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,OAAO,CAUnF;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAE5D;AAED;;;;;;GAMG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,eAAe,EACvB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,MAAM,EAAE,CAAC,CA8BnB;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAmCrE"}
package/dist/types.d.ts CHANGED
@@ -1,9 +1,9 @@
1
1
  /**
2
2
  * KiroGraph Type Definitions
3
3
  */
4
- export type NodeKind = 'file' | 'module' | 'class' | 'struct' | 'interface' | 'trait' | 'protocol' | 'function' | 'method' | 'property' | 'field' | 'variable' | 'constant' | 'enum' | 'enum_member' | 'type_alias' | 'namespace' | 'parameter' | 'import' | 'export' | 'route' | 'component';
5
- export type EdgeKind = 'contains' | 'calls' | 'imports' | 'exports' | 'extends' | 'implements' | 'references' | 'type_of' | 'returns' | 'instantiates' | 'overrides' | 'decorates';
6
- export type Language = 'typescript' | 'javascript' | 'tsx' | 'jsx' | 'python' | 'go' | 'rust' | 'java' | 'c' | 'cpp' | 'csharp' | 'php' | 'ruby' | 'swift' | 'kotlin' | 'dart' | 'svelte' | 'pascal' | 'liquid' | 'unknown';
4
+ export type NodeKind = 'file' | 'module' | 'class' | 'struct' | 'interface' | 'trait' | 'protocol' | 'function' | 'method' | 'property' | 'field' | 'variable' | 'constant' | 'enum' | 'enum_member' | 'type_alias' | 'namespace' | 'parameter' | 'import' | 'export' | 'route' | 'component' | 'dependency' | 'vulnerability';
5
+ export type EdgeKind = 'contains' | 'calls' | 'imports' | 'exports' | 'extends' | 'implements' | 'references' | 'type_of' | 'returns' | 'instantiates' | 'overrides' | 'decorates' | 'has_vulnerability' | 'depends_on' | 'declared_in';
6
+ export type Language = 'typescript' | 'javascript' | 'tsx' | 'jsx' | 'python' | 'go' | 'rust' | 'java' | 'c' | 'cpp' | 'csharp' | 'php' | 'ruby' | 'swift' | 'kotlin' | 'dart' | 'svelte' | 'pascal' | 'liquid' | 'elixir' | 'scala' | 'lua' | 'zig' | 'bash' | 'ocaml' | 'elm' | 'solidity' | 'vue' | 'objc' | 'yaml' | 'hcl' | 'css' | 'scss' | 'html' | 'jupyter' | 'rescript' | 'sql' | 'r' | 'julia' | 'powershell' | 'perl' | 'astro' | 'gdscript' | 'nix' | 'verilog' | 'unknown';
7
7
  export interface Node {
8
8
  id: string;
9
9
  kind: NodeKind;
@@ -33,6 +33,8 @@ export interface Edge {
33
33
  metadata?: Record<string, unknown>;
34
34
  line?: number;
35
35
  column?: number;
36
+ confidence?: 'extracted' | 'inferred' | 'ambiguous';
37
+ confidenceScore?: number;
36
38
  }
37
39
  export interface FileRecord {
38
40
  path: string;
@@ -104,7 +106,7 @@ export interface TaskContext {
104
106
  summary: string;
105
107
  }
106
108
  export interface IndexProgress {
107
- phase: 'scanning' | 'parsing' | 'storing' | 'resolving' | 'detecting frameworks' | 'embeddings' | 'architecture';
109
+ phase: 'scanning' | 'parsing' | 'storing' | 'resolving' | 'detecting frameworks' | 'embeddings' | 'architecture' | 'security' | 'docs' | 'data' | 'patterns' | 'retrying';
108
110
  current: number;
109
111
  total: number;
110
112
  currentFile?: string;
@@ -123,7 +125,11 @@ export interface SyncResult {
123
125
  modified: string[];
124
126
  removed: string[];
125
127
  nodesCreated: number;
128
+ nodesUpdated: number;
126
129
  nodesRemoved: number;
130
+ edgesCreated: number;
131
+ edgesRemoved: number;
132
+ filesScanned: number;
127
133
  errors: string[];
128
134
  duration: number;
129
135
  }