kirograph 0.19.0 → 0.20.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (690) hide show
  1. package/README.md +10 -8
  2. package/dist/architecture/layers/dart.d.ts +10 -0
  3. package/dist/architecture/layers/dart.d.ts.map +1 -0
  4. package/dist/architecture/layers/elixir.d.ts +6 -0
  5. package/dist/architecture/layers/elixir.d.ts.map +1 -0
  6. package/dist/architecture/layers/index.d.ts.map +1 -1
  7. package/dist/architecture/layers/ocaml.d.ts +6 -0
  8. package/dist/architecture/layers/ocaml.d.ts.map +1 -0
  9. package/dist/architecture/layers/scala.d.ts +6 -0
  10. package/dist/architecture/layers/scala.d.ts.map +1 -0
  11. package/dist/architecture/layers/solidity.d.ts +6 -0
  12. package/dist/architecture/layers/solidity.d.ts.map +1 -0
  13. package/dist/architecture/layers/vue.d.ts +6 -0
  14. package/dist/architecture/layers/vue.d.ts.map +1 -0
  15. package/dist/architecture/manifest/elm.d.ts +3 -0
  16. package/dist/architecture/manifest/elm.d.ts.map +1 -0
  17. package/dist/architecture/manifest/index.d.ts.map +1 -1
  18. package/dist/architecture/manifest/ocaml.d.ts +3 -0
  19. package/dist/architecture/manifest/ocaml.d.ts.map +1 -0
  20. package/dist/architecture/manifest/scala.d.ts +3 -0
  21. package/dist/architecture/manifest/scala.d.ts.map +1 -0
  22. package/dist/bin/banner.d.ts.map +1 -1
  23. package/dist/bin/commands/affected.d.ts.map +1 -1
  24. package/dist/bin/commands/attack-surface.d.ts +3 -0
  25. package/dist/bin/commands/attack-surface.d.ts.map +1 -0
  26. package/dist/bin/commands/attack-surface.js +7 -0
  27. package/dist/bin/commands/attack-surface.js.map +2 -2
  28. package/dist/bin/commands/benchmark.d.ts +9 -0
  29. package/dist/bin/commands/benchmark.d.ts.map +1 -0
  30. package/dist/bin/commands/budget.d.ts +6 -0
  31. package/dist/bin/commands/budget.d.ts.map +1 -0
  32. package/dist/bin/commands/caveman.d.ts +7 -0
  33. package/dist/bin/commands/caveman.d.ts.map +1 -0
  34. package/dist/bin/commands/communities.d.ts +3 -0
  35. package/dist/bin/commands/communities.d.ts.map +1 -0
  36. package/dist/bin/commands/compression.d.ts +7 -0
  37. package/dist/bin/commands/compression.d.ts.map +1 -0
  38. package/dist/bin/commands/context.d.ts.map +1 -1
  39. package/dist/bin/commands/data.d.ts +3 -0
  40. package/dist/bin/commands/data.d.ts.map +1 -0
  41. package/dist/bin/commands/dead-code.d.ts +3 -0
  42. package/dist/bin/commands/dead-code.d.ts.map +1 -0
  43. package/dist/bin/commands/dep-confusion.d.ts +3 -0
  44. package/dist/bin/commands/dep-confusion.d.ts.map +1 -0
  45. package/dist/bin/commands/docs.d.ts +3 -0
  46. package/dist/bin/commands/docs.d.ts.map +1 -0
  47. package/dist/bin/commands/exec.d.ts +11 -0
  48. package/dist/bin/commands/exec.d.ts.map +1 -0
  49. package/dist/bin/commands/export.d.ts +3 -0
  50. package/dist/bin/commands/export.d.ts.map +1 -0
  51. package/dist/bin/commands/flows.d.ts +3 -0
  52. package/dist/bin/commands/flows.d.ts.map +1 -0
  53. package/dist/bin/commands/gain.d.ts +6 -0
  54. package/dist/bin/commands/gain.d.ts.map +1 -0
  55. package/dist/bin/commands/help.d.ts +7 -0
  56. package/dist/bin/commands/help.d.ts.map +1 -1
  57. package/dist/bin/commands/help.js +20 -3
  58. package/dist/bin/commands/help.js.map +2 -2
  59. package/dist/bin/commands/hotspots.d.ts +3 -0
  60. package/dist/bin/commands/hotspots.d.ts.map +1 -0
  61. package/dist/bin/commands/hotspots.js +94 -1
  62. package/dist/bin/commands/hotspots.js.map +3 -3
  63. package/dist/bin/commands/install.d.ts.map +1 -1
  64. package/dist/bin/commands/install.js +3 -3
  65. package/dist/bin/commands/install.js.map +2 -2
  66. package/dist/bin/commands/licenses.d.ts +3 -0
  67. package/dist/bin/commands/licenses.d.ts.map +1 -0
  68. package/dist/bin/commands/memory.d.ts +16 -0
  69. package/dist/bin/commands/memory.d.ts.map +1 -0
  70. package/dist/bin/commands/memory.js +151 -4
  71. package/dist/bin/commands/memory.js.map +2 -2
  72. package/dist/bin/commands/path.d.ts +3 -0
  73. package/dist/bin/commands/path.d.ts.map +1 -0
  74. package/dist/bin/commands/pattern.d.ts +3 -0
  75. package/dist/bin/commands/pattern.d.ts.map +1 -0
  76. package/dist/bin/commands/pattern.js +592 -0
  77. package/dist/bin/commands/pattern.js.map +7 -0
  78. package/dist/bin/commands/query.d.ts.map +1 -1
  79. package/dist/bin/commands/reachability.d.ts +3 -0
  80. package/dist/bin/commands/reachability.d.ts.map +1 -0
  81. package/dist/bin/commands/read.d.ts +6 -0
  82. package/dist/bin/commands/read.d.ts.map +1 -0
  83. package/dist/bin/commands/refactor.d.ts +3 -0
  84. package/dist/bin/commands/refactor.d.ts.map +1 -0
  85. package/dist/bin/commands/remediation.d.ts +3 -0
  86. package/dist/bin/commands/remediation.d.ts.map +1 -0
  87. package/dist/bin/commands/sbom.d.ts +3 -0
  88. package/dist/bin/commands/sbom.d.ts.map +1 -0
  89. package/dist/bin/commands/security-ci-report.d.ts +9 -0
  90. package/dist/bin/commands/security-ci-report.d.ts.map +1 -0
  91. package/dist/bin/commands/security-export.d.ts +2 -0
  92. package/dist/bin/commands/security-export.d.ts.map +1 -0
  93. package/dist/bin/commands/security-flows.d.ts +3 -0
  94. package/dist/bin/commands/security-flows.d.ts.map +1 -0
  95. package/dist/bin/commands/security-secrets.d.ts +3 -0
  96. package/dist/bin/commands/security-secrets.d.ts.map +1 -0
  97. package/dist/bin/commands/security.d.ts +3 -0
  98. package/dist/bin/commands/security.d.ts.map +1 -0
  99. package/dist/bin/commands/security.js +15 -0
  100. package/dist/bin/commands/security.js.map +2 -2
  101. package/dist/bin/commands/snapshot.d.ts +3 -0
  102. package/dist/bin/commands/snapshot.d.ts.map +1 -0
  103. package/dist/bin/commands/staleness.d.ts +3 -0
  104. package/dist/bin/commands/staleness.d.ts.map +1 -0
  105. package/dist/bin/commands/status.d.ts.map +1 -1
  106. package/dist/bin/commands/status.js +27 -0
  107. package/dist/bin/commands/status.js.map +2 -2
  108. package/dist/bin/commands/supply-chain.d.ts +3 -0
  109. package/dist/bin/commands/supply-chain.d.ts.map +1 -0
  110. package/dist/bin/commands/surprising.d.ts +3 -0
  111. package/dist/bin/commands/surprising.d.ts.map +1 -0
  112. package/dist/bin/commands/sync.d.ts.map +1 -1
  113. package/dist/bin/commands/uninit.d.ts.map +1 -1
  114. package/dist/bin/commands/utils.d.ts +5 -0
  115. package/dist/bin/commands/utils.d.ts.map +1 -1
  116. package/dist/bin/commands/vex.d.ts +3 -0
  117. package/dist/bin/commands/vex.d.ts.map +1 -0
  118. package/dist/bin/commands/vuln-suppress.d.ts +3 -0
  119. package/dist/bin/commands/vuln-suppress.d.ts.map +1 -0
  120. package/dist/bin/commands/vulns.d.ts +3 -0
  121. package/dist/bin/commands/vulns.d.ts.map +1 -0
  122. package/dist/bin/installer/archive.d.ts +47 -0
  123. package/dist/bin/installer/archive.d.ts.map +1 -0
  124. package/dist/bin/installer/auto-detect.d.ts +16 -0
  125. package/dist/bin/installer/auto-detect.d.ts.map +1 -0
  126. package/dist/bin/installer/caveman.d.ts +12 -0
  127. package/dist/bin/installer/caveman.d.ts.map +1 -0
  128. package/dist/bin/installer/cli-agent.d.ts +7 -2
  129. package/dist/bin/installer/cli-agent.d.ts.map +1 -1
  130. package/dist/bin/installer/cli-agent.js +6 -2
  131. package/dist/bin/installer/cli-agent.js.map +2 -2
  132. package/dist/bin/installer/common.d.ts +36 -0
  133. package/dist/bin/installer/common.d.ts.map +1 -0
  134. package/dist/bin/installer/common.js +2 -1
  135. package/dist/bin/installer/common.js.map +2 -2
  136. package/dist/bin/installer/config-prompt.d.ts +1 -1
  137. package/dist/bin/installer/config-prompt.d.ts.map +1 -1
  138. package/dist/bin/installer/config-prompt.js +74 -2
  139. package/dist/bin/installer/config-prompt.js.map +2 -2
  140. package/dist/bin/installer/dashboard.d.ts.map +1 -1
  141. package/dist/bin/installer/detect.d.ts +30 -0
  142. package/dist/bin/installer/detect.d.ts.map +1 -0
  143. package/dist/bin/installer/hooks.d.ts +4 -1
  144. package/dist/bin/installer/hooks.d.ts.map +1 -1
  145. package/dist/bin/installer/hooks.js +34 -0
  146. package/dist/bin/installer/hooks.js.map +2 -2
  147. package/dist/bin/installer/index.d.ts +5 -4
  148. package/dist/bin/installer/index.d.ts.map +1 -1
  149. package/dist/bin/installer/index.js +67 -8
  150. package/dist/bin/installer/index.js.map +2 -2
  151. package/dist/bin/installer/instructions.d.ts +14 -0
  152. package/dist/bin/installer/instructions.d.ts.map +1 -0
  153. package/dist/bin/installer/instructions.js +15 -1
  154. package/dist/bin/installer/instructions.js.map +2 -2
  155. package/dist/bin/installer/mcp.d.ts.map +1 -1
  156. package/dist/bin/installer/prompts.d.ts +17 -0
  157. package/dist/bin/installer/prompts.d.ts.map +1 -1
  158. package/dist/bin/installer/qdrant-dashboard.d.ts.map +1 -1
  159. package/dist/bin/installer/steering.d.ts +14 -2
  160. package/dist/bin/installer/steering.d.ts.map +1 -1
  161. package/dist/bin/installer/steering.js +81 -0
  162. package/dist/bin/installer/steering.js.map +2 -2
  163. package/dist/bin/installer/targets/aider.d.ts +6 -0
  164. package/dist/bin/installer/targets/aider.d.ts.map +1 -0
  165. package/dist/bin/installer/targets/aider.js +3 -3
  166. package/dist/bin/installer/targets/aider.js.map +2 -2
  167. package/dist/bin/installer/targets/amp.d.ts +6 -0
  168. package/dist/bin/installer/targets/amp.d.ts.map +1 -0
  169. package/dist/bin/installer/targets/amp.js +3 -3
  170. package/dist/bin/installer/targets/amp.js.map +2 -2
  171. package/dist/bin/installer/targets/antigravity.d.ts +13 -0
  172. package/dist/bin/installer/targets/antigravity.d.ts.map +1 -0
  173. package/dist/bin/installer/targets/antigravity.js +2 -2
  174. package/dist/bin/installer/targets/antigravity.js.map +2 -2
  175. package/dist/bin/installer/targets/augment.d.ts +6 -0
  176. package/dist/bin/installer/targets/augment.d.ts.map +1 -0
  177. package/dist/bin/installer/targets/augment.js +3 -3
  178. package/dist/bin/installer/targets/augment.js.map +2 -2
  179. package/dist/bin/installer/targets/claude.d.ts +6 -0
  180. package/dist/bin/installer/targets/claude.d.ts.map +1 -0
  181. package/dist/bin/installer/targets/claude.js +2 -2
  182. package/dist/bin/installer/targets/claude.js.map +2 -2
  183. package/dist/bin/installer/targets/cline.d.ts +13 -0
  184. package/dist/bin/installer/targets/cline.d.ts.map +1 -0
  185. package/dist/bin/installer/targets/cline.js +2 -2
  186. package/dist/bin/installer/targets/cline.js.map +2 -2
  187. package/dist/bin/installer/targets/codex.d.ts +6 -0
  188. package/dist/bin/installer/targets/codex.d.ts.map +1 -0
  189. package/dist/bin/installer/targets/codex.js +2 -2
  190. package/dist/bin/installer/targets/codex.js.map +2 -2
  191. package/dist/bin/installer/targets/continue.d.ts +12 -0
  192. package/dist/bin/installer/targets/continue.d.ts.map +1 -0
  193. package/dist/bin/installer/targets/continue.js +2 -2
  194. package/dist/bin/installer/targets/continue.js.map +2 -2
  195. package/dist/bin/installer/targets/copilot-cli.d.ts +12 -0
  196. package/dist/bin/installer/targets/copilot-cli.d.ts.map +1 -0
  197. package/dist/bin/installer/targets/copilot-cli.js +2 -2
  198. package/dist/bin/installer/targets/copilot-cli.js.map +2 -2
  199. package/dist/bin/installer/targets/copilot.d.ts +6 -0
  200. package/dist/bin/installer/targets/copilot.d.ts.map +1 -0
  201. package/dist/bin/installer/targets/copilot.js +2 -2
  202. package/dist/bin/installer/targets/copilot.js.map +2 -2
  203. package/dist/bin/installer/targets/cursor.d.ts +6 -0
  204. package/dist/bin/installer/targets/cursor.d.ts.map +1 -0
  205. package/dist/bin/installer/targets/cursor.js +2 -2
  206. package/dist/bin/installer/targets/cursor.js.map +2 -2
  207. package/dist/bin/installer/targets/devin.d.ts +13 -0
  208. package/dist/bin/installer/targets/devin.d.ts.map +1 -0
  209. package/dist/bin/installer/targets/devin.js +2 -2
  210. package/dist/bin/installer/targets/devin.js.map +2 -2
  211. package/dist/bin/installer/targets/gemini-cli.d.ts +16 -0
  212. package/dist/bin/installer/targets/gemini-cli.d.ts.map +1 -0
  213. package/dist/bin/installer/targets/gemini-cli.js +2 -2
  214. package/dist/bin/installer/targets/gemini-cli.js.map +2 -2
  215. package/dist/bin/installer/targets/generic.d.ts +59 -0
  216. package/dist/bin/installer/targets/generic.d.ts.map +1 -0
  217. package/dist/bin/installer/targets/generic.js +2 -2
  218. package/dist/bin/installer/targets/generic.js.map +2 -2
  219. package/dist/bin/installer/targets/goose.d.ts +6 -0
  220. package/dist/bin/installer/targets/goose.d.ts.map +1 -0
  221. package/dist/bin/installer/targets/goose.js +3 -3
  222. package/dist/bin/installer/targets/goose.js.map +2 -2
  223. package/dist/bin/installer/targets/index.d.ts +11 -0
  224. package/dist/bin/installer/targets/index.d.ts.map +1 -0
  225. package/dist/bin/installer/targets/index.js.map +1 -1
  226. package/dist/bin/installer/targets/junie.d.ts +13 -0
  227. package/dist/bin/installer/targets/junie.d.ts.map +1 -0
  228. package/dist/bin/installer/targets/junie.js +2 -2
  229. package/dist/bin/installer/targets/junie.js.map +2 -2
  230. package/dist/bin/installer/targets/kilo.d.ts +12 -0
  231. package/dist/bin/installer/targets/kilo.d.ts.map +1 -0
  232. package/dist/bin/installer/targets/kilo.js +2 -2
  233. package/dist/bin/installer/targets/kilo.js.map +2 -2
  234. package/dist/bin/installer/targets/kiro.d.ts +5 -0
  235. package/dist/bin/installer/targets/kiro.d.ts.map +1 -0
  236. package/dist/bin/installer/targets/kiro.js +4 -4
  237. package/dist/bin/installer/targets/kiro.js.map +2 -2
  238. package/dist/bin/installer/targets/opencode.d.ts +13 -0
  239. package/dist/bin/installer/targets/opencode.d.ts.map +1 -0
  240. package/dist/bin/installer/targets/opencode.js +2 -2
  241. package/dist/bin/installer/targets/opencode.js.map +2 -2
  242. package/dist/bin/installer/targets/openhands.d.ts +6 -0
  243. package/dist/bin/installer/targets/openhands.d.ts.map +1 -0
  244. package/dist/bin/installer/targets/openhands.js +3 -3
  245. package/dist/bin/installer/targets/openhands.js.map +2 -2
  246. package/dist/bin/installer/targets/qoder.d.ts +12 -0
  247. package/dist/bin/installer/targets/qoder.d.ts.map +1 -0
  248. package/dist/bin/installer/targets/qoder.js +2 -2
  249. package/dist/bin/installer/targets/qoder.js.map +2 -2
  250. package/dist/bin/installer/targets/qwen.d.ts +12 -0
  251. package/dist/bin/installer/targets/qwen.d.ts.map +1 -0
  252. package/dist/bin/installer/targets/qwen.js +2 -2
  253. package/dist/bin/installer/targets/qwen.js.map +2 -2
  254. package/dist/bin/installer/targets/replit.d.ts +6 -0
  255. package/dist/bin/installer/targets/replit.d.ts.map +1 -0
  256. package/dist/bin/installer/targets/replit.js +3 -3
  257. package/dist/bin/installer/targets/replit.js.map +2 -2
  258. package/dist/bin/installer/targets/roo.d.ts +13 -0
  259. package/dist/bin/installer/targets/roo.d.ts.map +1 -0
  260. package/dist/bin/installer/targets/roo.js +2 -2
  261. package/dist/bin/installer/targets/roo.js.map +2 -2
  262. package/dist/bin/installer/targets/tabnine.d.ts +6 -0
  263. package/dist/bin/installer/targets/tabnine.d.ts.map +1 -0
  264. package/dist/bin/installer/targets/tabnine.js +3 -3
  265. package/dist/bin/installer/targets/tabnine.js.map +2 -2
  266. package/dist/bin/installer/targets/trae.d.ts +6 -0
  267. package/dist/bin/installer/targets/trae.d.ts.map +1 -0
  268. package/dist/bin/installer/targets/trae.js +3 -3
  269. package/dist/bin/installer/targets/trae.js.map +2 -2
  270. package/dist/bin/installer/targets/warp.d.ts +12 -0
  271. package/dist/bin/installer/targets/warp.d.ts.map +1 -0
  272. package/dist/bin/installer/targets/warp.js +2 -2
  273. package/dist/bin/installer/targets/warp.js.map +2 -2
  274. package/dist/bin/installer/targets/windsurf.d.ts +13 -0
  275. package/dist/bin/installer/targets/windsurf.d.ts.map +1 -0
  276. package/dist/bin/installer/targets/windsurf.js +2 -2
  277. package/dist/bin/installer/targets/windsurf.js.map +2 -2
  278. package/dist/bin/kirograph.js +3 -1
  279. package/dist/bin/kirograph.js.map +3 -3
  280. package/dist/bin/progress.d.ts +16 -1
  281. package/dist/bin/progress.d.ts.map +1 -1
  282. package/dist/compression/filters/aws.d.ts +9 -0
  283. package/dist/compression/filters/aws.d.ts.map +1 -0
  284. package/dist/compression/filters/docker.d.ts +6 -0
  285. package/dist/compression/filters/docker.d.ts.map +1 -0
  286. package/dist/compression/filters/files.d.ts +6 -0
  287. package/dist/compression/filters/files.d.ts.map +1 -0
  288. package/dist/compression/filters/generic.d.ts +7 -0
  289. package/dist/compression/filters/generic.d.ts.map +1 -0
  290. package/dist/compression/filters/git.d.ts +6 -0
  291. package/dist/compression/filters/git.d.ts.map +1 -0
  292. package/dist/compression/filters/github.d.ts +6 -0
  293. package/dist/compression/filters/github.d.ts.map +1 -0
  294. package/dist/compression/filters/lint.d.ts +6 -0
  295. package/dist/compression/filters/lint.d.ts.map +1 -0
  296. package/dist/compression/filters/misc.d.ts +6 -0
  297. package/dist/compression/filters/misc.d.ts.map +1 -0
  298. package/dist/compression/filters/package.d.ts +6 -0
  299. package/dist/compression/filters/package.d.ts.map +1 -0
  300. package/dist/compression/filters/test.d.ts +6 -0
  301. package/dist/compression/filters/test.d.ts.map +1 -0
  302. package/dist/compression/index.d.ts +29 -0
  303. package/dist/compression/index.d.ts.map +1 -0
  304. package/dist/compression/naive-cost.d.ts +26 -0
  305. package/dist/compression/naive-cost.d.ts.map +1 -0
  306. package/dist/compression/tracker.d.ts +155 -0
  307. package/dist/compression/tracker.d.ts.map +1 -0
  308. package/dist/compression/types.d.ts +49 -0
  309. package/dist/compression/types.d.ts.map +1 -0
  310. package/dist/config.d.ts +90 -0
  311. package/dist/config.d.ts.map +1 -1
  312. package/dist/config.js +55 -1
  313. package/dist/config.js.map +2 -2
  314. package/dist/core/lock-manager.d.ts +2 -0
  315. package/dist/core/lock-manager.d.ts.map +1 -1
  316. package/dist/core/pipeline.d.ts +4 -1
  317. package/dist/core/pipeline.d.ts.map +1 -1
  318. package/dist/core/pipeline.js +42 -0
  319. package/dist/core/pipeline.js.map +2 -2
  320. package/dist/core/snapshot.d.ts +58 -0
  321. package/dist/core/snapshot.d.ts.map +1 -0
  322. package/dist/data/filters.d.ts +23 -0
  323. package/dist/data/filters.d.ts.map +1 -0
  324. package/dist/data/indexer.d.ts +25 -0
  325. package/dist/data/indexer.d.ts.map +1 -0
  326. package/dist/data/linker.d.ts +37 -0
  327. package/dist/data/linker.d.ts.map +1 -0
  328. package/dist/data/lint.d.ts +27 -0
  329. package/dist/data/lint.d.ts.map +1 -0
  330. package/dist/data/parsers/csv.d.ts +11 -0
  331. package/dist/data/parsers/csv.d.ts.map +1 -0
  332. package/dist/data/parsers/excel.d.ts +10 -0
  333. package/dist/data/parsers/excel.d.ts.map +1 -0
  334. package/dist/data/parsers/index.d.ts +28 -0
  335. package/dist/data/parsers/index.d.ts.map +1 -0
  336. package/dist/data/parsers/json-array.d.ts +9 -0
  337. package/dist/data/parsers/json-array.d.ts.map +1 -0
  338. package/dist/data/parsers/jsonl.d.ts +9 -0
  339. package/dist/data/parsers/jsonl.d.ts.map +1 -0
  340. package/dist/data/parsers/parquet.d.ts +10 -0
  341. package/dist/data/parsers/parquet.d.ts.map +1 -0
  342. package/dist/data/profiler.d.ts +29 -0
  343. package/dist/data/profiler.d.ts.map +1 -0
  344. package/dist/data/queries.d.ts +95 -0
  345. package/dist/data/queries.d.ts.map +1 -0
  346. package/dist/data/types.d.ts +103 -0
  347. package/dist/data/types.d.ts.map +1 -0
  348. package/dist/db/database.d.ts +57 -0
  349. package/dist/db/database.d.ts.map +1 -1
  350. package/dist/db/database.js +19 -0
  351. package/dist/db/database.js.map +2 -2
  352. package/dist/db/patterns-schema.sql +23 -0
  353. package/dist/docs/formats/asciidoc.d.ts +9 -0
  354. package/dist/docs/formats/asciidoc.d.ts.map +1 -0
  355. package/dist/docs/formats/html.d.ts +10 -0
  356. package/dist/docs/formats/html.d.ts.map +1 -0
  357. package/dist/docs/formats/index.d.ts +31 -0
  358. package/dist/docs/formats/index.d.ts.map +1 -0
  359. package/dist/docs/formats/markdown.d.ts +11 -0
  360. package/dist/docs/formats/markdown.d.ts.map +1 -0
  361. package/dist/docs/formats/openapi.d.ts +17 -0
  362. package/dist/docs/formats/openapi.d.ts.map +1 -0
  363. package/dist/docs/formats/org.d.ts +9 -0
  364. package/dist/docs/formats/org.d.ts.map +1 -0
  365. package/dist/docs/formats/plaintext.d.ts +11 -0
  366. package/dist/docs/formats/plaintext.d.ts.map +1 -0
  367. package/dist/docs/formats/rdoc.d.ts +10 -0
  368. package/dist/docs/formats/rdoc.d.ts.map +1 -0
  369. package/dist/docs/formats/rst.d.ts +11 -0
  370. package/dist/docs/formats/rst.d.ts.map +1 -0
  371. package/dist/docs/indexer.d.ts +49 -0
  372. package/dist/docs/indexer.d.ts.map +1 -0
  373. package/dist/docs/linker.d.ts +30 -0
  374. package/dist/docs/linker.d.ts.map +1 -0
  375. package/dist/docs/lint.d.ts +27 -0
  376. package/dist/docs/lint.d.ts.map +1 -0
  377. package/dist/docs/queries.d.ts +78 -0
  378. package/dist/docs/queries.d.ts.map +1 -0
  379. package/dist/docs/section-id.d.ts +48 -0
  380. package/dist/docs/section-id.d.ts.map +1 -0
  381. package/dist/docs/summarizer.d.ts +13 -0
  382. package/dist/docs/summarizer.d.ts.map +1 -0
  383. package/dist/docs/types.d.ts +71 -0
  384. package/dist/docs/types.d.ts.map +1 -0
  385. package/dist/docs/vectors.d.ts +54 -0
  386. package/dist/docs/vectors.d.ts.map +1 -0
  387. package/dist/extraction/extractor.d.ts +1 -1
  388. package/dist/extraction/extractor.d.ts.map +1 -1
  389. package/dist/extraction/extractor.js +26 -3
  390. package/dist/extraction/extractor.js.map +2 -2
  391. package/dist/extraction/grammars.d.ts +6 -0
  392. package/dist/extraction/grammars.d.ts.map +1 -1
  393. package/dist/extraction/grammars.js +1 -0
  394. package/dist/extraction/grammars.js.map +2 -2
  395. package/dist/extraction/languages.d.ts.map +1 -1
  396. package/dist/extraction/languages.js +5 -1
  397. package/dist/extraction/languages.js.map +2 -2
  398. package/dist/extraction/notebook.d.ts +14 -0
  399. package/dist/extraction/notebook.d.ts.map +1 -0
  400. package/dist/frameworks/amplify.d.ts +9 -0
  401. package/dist/frameworks/amplify.d.ts.map +1 -0
  402. package/dist/frameworks/angular.d.ts +9 -0
  403. package/dist/frameworks/angular.d.ts.map +1 -0
  404. package/dist/frameworks/ansible.d.ts +8 -0
  405. package/dist/frameworks/ansible.d.ts.map +1 -0
  406. package/dist/frameworks/cloudformation.d.ts +9 -0
  407. package/dist/frameworks/cloudformation.d.ts.map +1 -0
  408. package/dist/frameworks/docker.d.ts +9 -0
  409. package/dist/frameworks/docker.d.ts.map +1 -0
  410. package/dist/frameworks/elixir.d.ts +6 -0
  411. package/dist/frameworks/elixir.d.ts.map +1 -0
  412. package/dist/frameworks/flutter.d.ts +12 -0
  413. package/dist/frameworks/flutter.d.ts.map +1 -0
  414. package/dist/frameworks/iac.d.ts +10 -0
  415. package/dist/frameworks/iac.d.ts.map +1 -0
  416. package/dist/frameworks/index.d.ts +14 -0
  417. package/dist/frameworks/index.d.ts.map +1 -1
  418. package/dist/frameworks/kubernetes.d.ts +9 -0
  419. package/dist/frameworks/kubernetes.d.ts.map +1 -0
  420. package/dist/frameworks/pulumi.d.ts +9 -0
  421. package/dist/frameworks/pulumi.d.ts.map +1 -0
  422. package/dist/frameworks/scala.d.ts +6 -0
  423. package/dist/frameworks/scala.d.ts.map +1 -0
  424. package/dist/frameworks/solidity.d.ts +6 -0
  425. package/dist/frameworks/solidity.d.ts.map +1 -0
  426. package/dist/frameworks/terraform.d.ts +14 -0
  427. package/dist/frameworks/terraform.d.ts.map +1 -0
  428. package/dist/frameworks/vue.d.ts +7 -0
  429. package/dist/frameworks/vue.d.ts.map +1 -0
  430. package/dist/graph/communities.d.ts +43 -0
  431. package/dist/graph/communities.d.ts.map +1 -0
  432. package/dist/graph/flows.d.ts +55 -0
  433. package/dist/graph/flows.d.ts.map +1 -0
  434. package/dist/graph/refactor.d.ts +43 -0
  435. package/dist/graph/refactor.d.ts.map +1 -0
  436. package/dist/index.d.ts +36 -4
  437. package/dist/index.d.ts.map +1 -1
  438. package/dist/mcp/cache.d.ts +69 -0
  439. package/dist/mcp/cache.d.ts.map +1 -0
  440. package/dist/mcp/read-modes.d.ts +31 -0
  441. package/dist/mcp/read-modes.d.ts.map +1 -0
  442. package/dist/mcp/server.d.ts +1 -0
  443. package/dist/mcp/server.d.ts.map +1 -1
  444. package/dist/mcp/server.js +15 -2
  445. package/dist/mcp/server.js.map +2 -2
  446. package/dist/mcp/tool-names.d.ts +2 -0
  447. package/dist/mcp/tool-names.d.ts.map +1 -0
  448. package/dist/mcp/tool-names.js +4 -1
  449. package/dist/mcp/tool-names.js.map +2 -2
  450. package/dist/mcp/tools.d.ts +12 -0
  451. package/dist/mcp/tools.d.ts.map +1 -1
  452. package/dist/mcp/tools.js +397 -0
  453. package/dist/mcp/tools.js.map +2 -2
  454. package/dist/memory/compress.d.ts +19 -0
  455. package/dist/memory/compress.d.ts.map +1 -0
  456. package/dist/memory/database.d.ts +92 -0
  457. package/dist/memory/database.d.ts.map +1 -0
  458. package/dist/memory/database.js +38 -0
  459. package/dist/memory/database.js.map +2 -2
  460. package/dist/memory/index.d.ts +71 -0
  461. package/dist/memory/index.d.ts.map +1 -0
  462. package/dist/memory/index.js +12 -2
  463. package/dist/memory/index.js.map +2 -2
  464. package/dist/memory/symbols.d.ts +21 -0
  465. package/dist/memory/symbols.d.ts.map +1 -0
  466. package/dist/memory/types.d.ts +78 -0
  467. package/dist/memory/types.d.ts.map +1 -0
  468. package/dist/memory/types.js.map +1 -1
  469. package/dist/memory/vectors.d.ts +43 -0
  470. package/dist/memory/vectors.d.ts.map +1 -0
  471. package/dist/patterns/graph.d.ts +16 -0
  472. package/dist/patterns/graph.d.ts.map +1 -0
  473. package/dist/patterns/graph.js +45 -0
  474. package/dist/patterns/graph.js.map +7 -0
  475. package/dist/patterns/index.d.ts +4 -0
  476. package/dist/patterns/index.d.ts.map +1 -0
  477. package/dist/patterns/index.js +39 -0
  478. package/dist/patterns/index.js.map +7 -0
  479. package/dist/patterns/indexer.d.ts +15 -0
  480. package/dist/patterns/indexer.d.ts.map +1 -0
  481. package/dist/patterns/indexer.js +97 -0
  482. package/dist/patterns/indexer.js.map +7 -0
  483. package/dist/patterns/library/code-eval-elixir.yaml +11 -0
  484. package/dist/patterns/library/command-injection-c.yaml +11 -0
  485. package/dist/patterns/library/command-injection-go.yaml +29 -0
  486. package/dist/patterns/library/command-injection-kotlin.yaml +10 -0
  487. package/dist/patterns/library/command-injection-php.yaml +11 -0
  488. package/dist/patterns/library/command-injection-ruby.yaml +11 -0
  489. package/dist/patterns/library/command-injection-rust.yaml +11 -0
  490. package/dist/patterns/library/dangerous-eval-bash.yaml +11 -0
  491. package/dist/patterns/library/dangerous-eval-js.yaml +14 -0
  492. package/dist/patterns/library/dangerous-eval-php.yaml +11 -0
  493. package/dist/patterns/library/dangerous-eval-ruby.yaml +11 -0
  494. package/dist/patterns/library/dangerous-exec-py.yaml +13 -0
  495. package/dist/patterns/library/dangerous-reflection-java.yaml +8 -0
  496. package/dist/patterns/library/dynamic-load-lua.yaml +10 -0
  497. package/dist/patterns/library/os-cmd-elixir.yaml +16 -0
  498. package/dist/patterns/library/os-execute-lua.yaml +10 -0
  499. package/dist/patterns/library/path-traversal-go.yaml +11 -0
  500. package/dist/patterns/library/path-traversal-py.yaml +12 -0
  501. package/dist/patterns/library/path-traversal-readfile-js.yaml +14 -0
  502. package/dist/patterns/library/process-launch-swift.yaml +11 -0
  503. package/dist/patterns/library/process-run-dart.yaml +15 -0
  504. package/dist/patterns/library/prototype-pollution-js.yaml +12 -0
  505. package/dist/patterns/library/source-injection-bash.yaml +11 -0
  506. package/dist/patterns/library/sql-injection-concat-js.yaml +12 -0
  507. package/dist/patterns/library/sql-injection-dart.yaml +9 -0
  508. package/dist/patterns/library/sql-injection-java.yaml +13 -0
  509. package/dist/patterns/library/sql-injection-kotlin.yaml +11 -0
  510. package/dist/patterns/library/sql-injection-php.yaml +9 -0
  511. package/dist/patterns/library/sql-injection-py.yaml +12 -0
  512. package/dist/patterns/library/sql-injection-swift.yaml +11 -0
  513. package/dist/patterns/library/sql-injection-template-js.yaml +13 -0
  514. package/dist/patterns/library/subshell-injection-ruby.yaml +8 -0
  515. package/dist/patterns/library/unsafe-block-rust.yaml +8 -0
  516. package/dist/patterns/library/unsafe-string-c.yaml +11 -0
  517. package/dist/patterns/library/weak-crypto-md5-js.yaml +13 -0
  518. package/dist/patterns/library/weak-crypto-py.yaml +13 -0
  519. package/dist/patterns/loader.d.ts +18 -0
  520. package/dist/patterns/loader.d.ts.map +1 -0
  521. package/dist/patterns/loader.js +277 -0
  522. package/dist/patterns/loader.js.map +7 -0
  523. package/dist/patterns/runner.d.ts +42 -0
  524. package/dist/patterns/runner.d.ts.map +1 -0
  525. package/dist/patterns/runner.js +295 -0
  526. package/dist/patterns/runner.js.map +7 -0
  527. package/dist/patterns/types.d.ts +27 -0
  528. package/dist/patterns/types.d.ts.map +1 -0
  529. package/dist/patterns/types.js +34 -0
  530. package/dist/patterns/types.js.map +7 -0
  531. package/dist/resolution/bridges/android-rn.d.ts +13 -0
  532. package/dist/resolution/bridges/android-rn.d.ts.map +1 -0
  533. package/dist/resolution/bridges/expo-modules.d.ts +10 -0
  534. package/dist/resolution/bridges/expo-modules.d.ts.map +1 -0
  535. package/dist/resolution/bridges/flutter-channel.d.ts +14 -0
  536. package/dist/resolution/bridges/flutter-channel.d.ts.map +1 -0
  537. package/dist/resolution/bridges/index.d.ts +40 -0
  538. package/dist/resolution/bridges/index.d.ts.map +1 -0
  539. package/dist/resolution/bridges/native-events.d.ts +10 -0
  540. package/dist/resolution/bridges/native-events.d.ts.map +1 -0
  541. package/dist/resolution/bridges/native-views.d.ts +13 -0
  542. package/dist/resolution/bridges/native-views.d.ts.map +1 -0
  543. package/dist/resolution/bridges/react-native.d.ts +9 -0
  544. package/dist/resolution/bridges/react-native.d.ts.map +1 -0
  545. package/dist/resolution/bridges/swift-objc.d.ts +14 -0
  546. package/dist/resolution/bridges/swift-objc.d.ts.map +1 -0
  547. package/dist/resolution/bridges/turbomodules.d.ts +10 -0
  548. package/dist/resolution/bridges/turbomodules.d.ts.map +1 -0
  549. package/dist/resolution/index.d.ts +28 -3
  550. package/dist/resolution/index.d.ts.map +1 -1
  551. package/dist/security/attack-surface.d.ts +46 -0
  552. package/dist/security/attack-surface.d.ts.map +1 -0
  553. package/dist/security/attack-surface.js +43 -1
  554. package/dist/security/attack-surface.js.map +2 -2
  555. package/dist/security/context-warnings.d.ts +40 -0
  556. package/dist/security/context-warnings.d.ts.map +1 -0
  557. package/dist/security/data-flows.d.ts +33 -0
  558. package/dist/security/data-flows.d.ts.map +1 -0
  559. package/dist/security/data-flows.js +65 -7
  560. package/dist/security/data-flows.js.map +2 -2
  561. package/dist/security/dep-confusion.d.ts +23 -0
  562. package/dist/security/dep-confusion.d.ts.map +1 -0
  563. package/dist/security/errors.d.ts +16 -0
  564. package/dist/security/errors.d.ts.map +1 -0
  565. package/dist/security/export/fix-suggestions.d.ts +21 -0
  566. package/dist/security/export/fix-suggestions.d.ts.map +1 -0
  567. package/dist/security/export/sbom.d.ts +33 -0
  568. package/dist/security/export/sbom.d.ts.map +1 -0
  569. package/dist/security/export/serialization.d.ts +62 -0
  570. package/dist/security/export/serialization.d.ts.map +1 -0
  571. package/dist/security/export/vex.d.ts +58 -0
  572. package/dist/security/export/vex.d.ts.map +1 -0
  573. package/dist/security/index.d.ts +21 -0
  574. package/dist/security/index.d.ts.map +1 -0
  575. package/dist/security/integrator.d.ts +63 -0
  576. package/dist/security/integrator.d.ts.map +1 -0
  577. package/dist/security/integrator.js +8 -8
  578. package/dist/security/integrator.js.map +2 -2
  579. package/dist/security/license.d.ts +33 -0
  580. package/dist/security/license.d.ts.map +1 -0
  581. package/dist/security/manifest/adapter.d.ts +92 -0
  582. package/dist/security/manifest/adapter.d.ts.map +1 -0
  583. package/dist/security/manifest/parser.d.ts +73 -0
  584. package/dist/security/manifest/parser.d.ts.map +1 -0
  585. package/dist/security/manifest/plugins/cargo.d.ts +11 -0
  586. package/dist/security/manifest/plugins/cargo.d.ts.map +1 -0
  587. package/dist/security/manifest/plugins/composer.d.ts +11 -0
  588. package/dist/security/manifest/plugins/composer.d.ts.map +1 -0
  589. package/dist/security/manifest/plugins/go.d.ts +12 -0
  590. package/dist/security/manifest/plugins/go.d.ts.map +1 -0
  591. package/dist/security/manifest/plugins/gradle.d.ts +12 -0
  592. package/dist/security/manifest/plugins/gradle.d.ts.map +1 -0
  593. package/dist/security/manifest/plugins/hex.d.ts +11 -0
  594. package/dist/security/manifest/plugins/hex.d.ts.map +1 -0
  595. package/dist/security/manifest/plugins/maven.d.ts +11 -0
  596. package/dist/security/manifest/plugins/maven.d.ts.map +1 -0
  597. package/dist/security/manifest/plugins/npm.d.ts +11 -0
  598. package/dist/security/manifest/plugins/npm.d.ts.map +1 -0
  599. package/dist/security/manifest/plugins/nuget.d.ts +12 -0
  600. package/dist/security/manifest/plugins/nuget.d.ts.map +1 -0
  601. package/dist/security/manifest/plugins/pip.d.ts +11 -0
  602. package/dist/security/manifest/plugins/pip.d.ts.map +1 -0
  603. package/dist/security/manifest/plugins/pubspec.d.ts +11 -0
  604. package/dist/security/manifest/plugins/pubspec.d.ts.map +1 -0
  605. package/dist/security/manifest/plugins/pyproject.d.ts +3 -0
  606. package/dist/security/manifest/plugins/pyproject.d.ts.map +1 -0
  607. package/dist/security/manifest/plugins/rubygems.d.ts +11 -0
  608. package/dist/security/manifest/plugins/rubygems.d.ts.map +1 -0
  609. package/dist/security/manifest/plugins/swift.d.ts +11 -0
  610. package/dist/security/manifest/plugins/swift.d.ts.map +1 -0
  611. package/dist/security/owasp.d.ts +16 -0
  612. package/dist/security/owasp.d.ts.map +1 -0
  613. package/dist/security/pipeline.d.ts +37 -0
  614. package/dist/security/pipeline.d.ts.map +1 -0
  615. package/dist/security/reachability.d.ts +67 -0
  616. package/dist/security/reachability.d.ts.map +1 -0
  617. package/dist/security/remediation.d.ts +51 -0
  618. package/dist/security/remediation.d.ts.map +1 -0
  619. package/dist/security/secrets.d.ts +38 -0
  620. package/dist/security/secrets.d.ts.map +1 -0
  621. package/dist/security/staleness.d.ts +43 -0
  622. package/dist/security/staleness.d.ts.map +1 -0
  623. package/dist/security/supply-chain.d.ts +34 -0
  624. package/dist/security/supply-chain.d.ts.map +1 -0
  625. package/dist/security/suppressions.d.ts +18 -0
  626. package/dist/security/suppressions.d.ts.map +1 -0
  627. package/dist/security/types.d.ts +144 -0
  628. package/dist/security/types.d.ts.map +1 -0
  629. package/dist/security/vuln/client.d.ts +90 -0
  630. package/dist/security/vuln/client.d.ts.map +1 -0
  631. package/dist/security/vuln/client.js.map +2 -2
  632. package/dist/security/vuln/epss-client.d.ts +26 -0
  633. package/dist/security/vuln/epss-client.d.ts.map +1 -0
  634. package/dist/security/vuln/index.d.ts +6 -0
  635. package/dist/security/vuln/index.d.ts.map +1 -0
  636. package/dist/security/vuln/osv-adapter.d.ts +58 -0
  637. package/dist/security/vuln/osv-adapter.d.ts.map +1 -0
  638. package/dist/security/vuln/types.d.ts +29 -0
  639. package/dist/security/vuln/types.d.ts.map +1 -0
  640. package/dist/sync/index.d.ts +4 -2
  641. package/dist/sync/index.d.ts.map +1 -1
  642. package/dist/types.d.ts +10 -4
  643. package/dist/types.d.ts.map +1 -1
  644. package/dist/types.js.map +2 -2
  645. package/dist/vectors/index.d.ts +11 -3
  646. package/dist/vectors/index.d.ts.map +1 -1
  647. package/dist/vectors/qdrant-index.d.ts +10 -3
  648. package/dist/vectors/qdrant-index.d.ts.map +1 -1
  649. package/dist/vectors/turboquant-index.js +261 -0
  650. package/dist/vectors/turboquant-index.js.map +7 -0
  651. package/dist/vectors/typesense-index.d.ts.map +1 -1
  652. package/dist/watchmen/index.js +83 -0
  653. package/dist/watchmen/index.js.map +7 -0
  654. package/dist/watchmen/synthesize.js +475 -0
  655. package/dist/watchmen/synthesize.js.map +7 -0
  656. package/package.json +24 -2
  657. package/dist/security/context-warnings.test.js +0 -300
  658. package/dist/security/context-warnings.test.js.map +0 -7
  659. package/dist/security/export/fix-suggestions.test.js +0 -74
  660. package/dist/security/export/fix-suggestions.test.js.map +0 -7
  661. package/dist/security/export/sbom.test.js +0 -288
  662. package/dist/security/export/sbom.test.js.map +0 -7
  663. package/dist/security/export/serialization.test.js +0 -310
  664. package/dist/security/export/serialization.test.js.map +0 -7
  665. package/dist/security/export/vex.test.js +0 -278
  666. package/dist/security/export/vex.test.js.map +0 -7
  667. package/dist/security/integrator-transitives.test.js +0 -359
  668. package/dist/security/integrator-transitives.test.js.map +0 -7
  669. package/dist/security/integrator.test.js +0 -237
  670. package/dist/security/integrator.test.js.map +0 -7
  671. package/dist/security/manifest/adapter.test.js +0 -272
  672. package/dist/security/manifest/adapter.test.js.map +0 -7
  673. package/dist/security/manifest/parser.test.js +0 -110
  674. package/dist/security/manifest/parser.test.js.map +0 -7
  675. package/dist/security/manifest/plugins/cargo.test.js +0 -304
  676. package/dist/security/manifest/plugins/cargo.test.js.map +0 -7
  677. package/dist/security/manifest/plugins/go.test.js +0 -341
  678. package/dist/security/manifest/plugins/go.test.js.map +0 -7
  679. package/dist/security/manifest/plugins/maven.test.js +0 -389
  680. package/dist/security/manifest/plugins/maven.test.js.map +0 -7
  681. package/dist/security/manifest/plugins/npm.test.js +0 -298
  682. package/dist/security/manifest/plugins/npm.test.js.map +0 -7
  683. package/dist/security/manifest/plugins/pip.test.js +0 -208
  684. package/dist/security/manifest/plugins/pip.test.js.map +0 -7
  685. package/dist/security/reachability.test.js +0 -394
  686. package/dist/security/reachability.test.js.map +0 -7
  687. package/dist/security/vuln/client.test.js +0 -288
  688. package/dist/security/vuln/client.test.js.map +0 -7
  689. package/dist/security/vuln/osv-adapter.test.js +0 -391
  690. package/dist/security/vuln/osv-adapter.test.js.map +0 -7
@@ -1,394 +0,0 @@
1
- "use strict";
2
- var __create = Object.create;
3
- var __defProp = Object.defineProperty;
4
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
- var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __getProtoOf = Object.getPrototypeOf;
7
- var __hasOwnProp = Object.prototype.hasOwnProperty;
8
- var __copyProps = (to, from, except, desc) => {
9
- if (from && typeof from === "object" || typeof from === "function") {
10
- for (let key of __getOwnPropNames(from))
11
- if (!__hasOwnProp.call(to, key) && key !== except)
12
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
13
- }
14
- return to;
15
- };
16
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
17
- // If the importer is in node compatibility mode or this is not an ESM
18
- // file that has been converted to a CommonJS file using a Babel-
19
- // compatible transform (i.e. "__esModule" has not been set), then set
20
- // "default" to the CommonJS "module.exports" for node compatibility.
21
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
22
- mod
23
- ));
24
- var import_vitest = require("vitest");
25
- var fs = __toESM(require("fs"));
26
- var path = __toESM(require("path"));
27
- var os = __toESM(require("os"));
28
- var import_reachability = require("./reachability");
29
- var import_database = require("../db/database");
30
- var import_config = require("../config");
31
- (0, import_vitest.describe)("ReachabilityAnalyzer", () => {
32
- let db;
33
- let config;
34
- let analyzer;
35
- let tmpDir;
36
- (0, import_vitest.beforeEach)(() => {
37
- tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "kirograph-reachability-test-"));
38
- db = new import_database.GraphDatabase(tmpDir);
39
- db.applySecuritySchema();
40
- config = (0, import_config.createDefaultConfig)();
41
- config.enableArchitecture = true;
42
- config.enableSecurity = true;
43
- analyzer = new import_reachability.ReachabilityAnalyzer(db, config);
44
- });
45
- (0, import_vitest.afterEach)(() => {
46
- db.close();
47
- fs.rmSync(tmpDir, { recursive: true, force: true });
48
- });
49
- function createNode(id, kind, opts) {
50
- const node = {
51
- id,
52
- kind,
53
- name: opts?.name ?? id,
54
- qualifiedName: opts?.qualifiedName ?? id,
55
- filePath: opts?.filePath ?? `src/${id}.ts`,
56
- language: "typescript",
57
- startLine: 0,
58
- endLine: 0,
59
- startColumn: 0,
60
- endColumn: 0,
61
- isExported: opts?.isExported ?? false,
62
- updatedAt: Date.now()
63
- };
64
- db.upsertNode(node);
65
- }
66
- function createEdge(source, target, kind) {
67
- db.insertEdge({ source, target, kind });
68
- }
69
- function createDependencyNode(name) {
70
- const nodeId = `dep:npm:${name}`;
71
- createNode(nodeId, "dependency", { name });
72
- const rawDb = db.getRawDb();
73
- rawDb.run(
74
- `INSERT OR REPLACE INTO sec_dependencies
75
- (node_id, ecosystem, package_name, declared_constraint, resolved_version, scope, source_manifests)
76
- VALUES (?, ?, ?, ?, ?, ?, ?)`,
77
- [nodeId, "npm", name, "^1.0.0", "1.0.0", "production", '["package.json"]']
78
- );
79
- return nodeId;
80
- }
81
- function createVulnerabilityNode(cveId, depNodeId) {
82
- const nodeId = `vuln:${cveId}`;
83
- createNode(nodeId, "vulnerability", { name: cveId });
84
- const rawDb = db.getRawDb();
85
- rawDb.run(
86
- `INSERT OR REPLACE INTO sec_vulnerabilities
87
- (node_id, cve_id, severity_score, affected_ranges, fixed_version, summary, source_database)
88
- VALUES (?, ?, ?, ?, ?, ?, ?)`,
89
- [nodeId, cveId, 7.5, "[]", "1.0.1", "Test vulnerability", "OSV"]
90
- );
91
- createEdge(depNodeId, nodeId, "has_vulnerability");
92
- return nodeId;
93
- }
94
- function createEntryPoint(id, kind = "route") {
95
- createNode(id, kind, { isExported: true });
96
- }
97
- function assignLayer(filePath, layerId) {
98
- const rawDb = db.getRawDb();
99
- rawDb.run(
100
- `INSERT OR IGNORE INTO arch_layers (id, name, source, patterns, updated_at)
101
- VALUES (?, ?, 'auto', '[]', ?)`,
102
- [layerId, layerId, Date.now()]
103
- );
104
- rawDb.run(
105
- `INSERT OR REPLACE INTO arch_file_layers (file_path, layer_id, confidence, matched_pattern)
106
- VALUES (?, ?, 1.0, '**')`,
107
- [filePath, layerId]
108
- );
109
- }
110
- (0, import_vitest.describe)("analyze() - core reachability", () => {
111
- (0, import_vitest.it)("should return affected when a path exists from entry point to dependency", async () => {
112
- createEntryPoint("ep1");
113
- createNode("mid1", "function");
114
- const depId = createDependencyNode("vulnerable-pkg");
115
- const vulnId = createVulnerabilityNode("CVE-2023-001", depId);
116
- createEdge("ep1", "mid1", "calls");
117
- createEdge("mid1", depId, "imports");
118
- const result = await analyzer.analyze(vulnId);
119
- (0, import_vitest.expect)(result.verdict).toBe("affected");
120
- (0, import_vitest.expect)(result.paths.length).toBe(1);
121
- (0, import_vitest.expect)(result.paths[0].entryPoint).toBe("ep1");
122
- (0, import_vitest.expect)(result.paths[0].path).toEqual(["ep1", "mid1", depId]);
123
- (0, import_vitest.expect)(result.reachingEntryPointCount).toBe(1);
124
- });
125
- (0, import_vitest.it)("should return not_affected when no path exists", async () => {
126
- createEntryPoint("ep1");
127
- createNode("mid1", "function");
128
- const depId = createDependencyNode("isolated-pkg");
129
- const vulnId = createVulnerabilityNode("CVE-2023-002", depId);
130
- createEdge("ep1", "mid1", "calls");
131
- const result = await analyzer.analyze(vulnId);
132
- (0, import_vitest.expect)(result.verdict).toBe("not_affected");
133
- (0, import_vitest.expect)(result.paths.length).toBe(0);
134
- (0, import_vitest.expect)(result.reachingEntryPointCount).toBe(0);
135
- });
136
- (0, import_vitest.it)("should return under_investigation when unresolved imports are encountered", async () => {
137
- createEntryPoint("ep1");
138
- createNode("unresolved1", "import");
139
- const depId = createDependencyNode("maybe-pkg");
140
- const vulnId = createVulnerabilityNode("CVE-2023-003", depId);
141
- createEdge("ep1", "unresolved1", "imports");
142
- const result = await analyzer.analyze(vulnId);
143
- (0, import_vitest.expect)(result.verdict).toBe("under_investigation");
144
- (0, import_vitest.expect)(result.unresolvedSymbols).toContain("unresolved1");
145
- (0, import_vitest.expect)(result.paths.length).toBe(0);
146
- });
147
- (0, import_vitest.it)("should handle cycles without infinite loops", async () => {
148
- createEntryPoint("ep1");
149
- createNode("nodeA", "function");
150
- createNode("nodeB", "function");
151
- const depId = createDependencyNode("unreachable-pkg");
152
- const vulnId = createVulnerabilityNode("CVE-2023-004", depId);
153
- createEdge("ep1", "nodeA", "calls");
154
- createEdge("nodeA", "nodeB", "calls");
155
- createEdge("nodeB", "nodeA", "calls");
156
- const result = await analyzer.analyze(vulnId);
157
- (0, import_vitest.expect)(result.verdict).toBe("not_affected");
158
- (0, import_vitest.expect)(result.paths.length).toBe(0);
159
- });
160
- (0, import_vitest.it)("should visit each node at most once", async () => {
161
- createEntryPoint("ep1");
162
- createNode("nodeA", "function");
163
- createNode("nodeB", "function");
164
- const depId = createDependencyNode("shared-pkg");
165
- const vulnId = createVulnerabilityNode("CVE-2023-005", depId);
166
- createEdge("ep1", "nodeA", "calls");
167
- createEdge("ep1", "nodeB", "calls");
168
- createEdge("nodeA", depId, "imports");
169
- createEdge("nodeB", "nodeA", "calls");
170
- const result = await analyzer.analyze(vulnId);
171
- (0, import_vitest.expect)(result.verdict).toBe("affected");
172
- (0, import_vitest.expect)(result.paths[0].path).toEqual(["ep1", "nodeA", depId]);
173
- });
174
- (0, import_vitest.it)("should traverse calls, imports, and references edges", async () => {
175
- createEntryPoint("ep1");
176
- createNode("mid1", "function");
177
- createNode("mid2", "class");
178
- const depId = createDependencyNode("ref-pkg");
179
- const vulnId = createVulnerabilityNode("CVE-2023-006", depId);
180
- createEdge("ep1", "mid1", "calls");
181
- createEdge("mid1", "mid2", "references");
182
- createEdge("mid2", depId, "imports");
183
- const result = await analyzer.analyze(vulnId);
184
- (0, import_vitest.expect)(result.verdict).toBe("affected");
185
- (0, import_vitest.expect)(result.paths[0].path).toEqual(["ep1", "mid1", "mid2", depId]);
186
- });
187
- (0, import_vitest.it)("should return under_investigation when no dependency is linked", async () => {
188
- const vulnId = "vuln:CVE-2023-orphan";
189
- createNode(vulnId, "vulnerability", { name: "CVE-2023-orphan" });
190
- const rawDb = db.getRawDb();
191
- rawDb.run(
192
- `INSERT OR REPLACE INTO sec_vulnerabilities
193
- (node_id, cve_id, severity_score, affected_ranges, summary, source_database)
194
- VALUES (?, ?, ?, ?, ?, ?)`,
195
- [vulnId, "CVE-2023-orphan", 5, "[]", "Orphan vuln", "OSV"]
196
- );
197
- const result = await analyzer.analyze(vulnId);
198
- (0, import_vitest.expect)(result.verdict).toBe("under_investigation");
199
- });
200
- (0, import_vitest.it)("should return not_affected when no entry points exist", async () => {
201
- const depId = createDependencyNode("no-ep-pkg");
202
- const vulnId = createVulnerabilityNode("CVE-2023-007", depId);
203
- const result = await analyzer.analyze(vulnId);
204
- (0, import_vitest.expect)(result.verdict).toBe("not_affected");
205
- });
206
- (0, import_vitest.it)("should limit unresolved symbols to 50", async () => {
207
- createEntryPoint("ep1");
208
- const depId = createDependencyNode("many-unresolved-pkg");
209
- const vulnId = createVulnerabilityNode("CVE-2023-008", depId);
210
- for (let i = 0; i < 60; i++) {
211
- const importId = `unresolved-import-${i}`;
212
- createNode(importId, "import");
213
- createEdge("ep1", importId, "imports");
214
- }
215
- const result = await analyzer.analyze(vulnId);
216
- (0, import_vitest.expect)(result.verdict).toBe("under_investigation");
217
- (0, import_vitest.expect)(result.unresolvedSymbols.length).toBeLessThanOrEqual(50);
218
- });
219
- (0, import_vitest.it)("should store result in sec_reachability table", async () => {
220
- createEntryPoint("ep1");
221
- const depId = createDependencyNode("stored-pkg");
222
- const vulnId = createVulnerabilityNode("CVE-2023-009", depId);
223
- createEdge("ep1", depId, "imports");
224
- await analyzer.analyze(vulnId);
225
- const rawDb = db.getRawDb();
226
- const row = rawDb.get(
227
- `SELECT * FROM sec_reachability WHERE vulnerability_node_id = ?`,
228
- [vulnId]
229
- );
230
- (0, import_vitest.expect)(row).not.toBeNull();
231
- (0, import_vitest.expect)(row.verdict).toBe("affected");
232
- (0, import_vitest.expect)(row.reaching_entry_point_count).toBe(1);
233
- });
234
- });
235
- (0, import_vitest.describe)("analyze() - multi-entry-point paths", () => {
236
- (0, import_vitest.it)("should record shortest path from each reaching entry point", async () => {
237
- createEntryPoint("ep1");
238
- createEntryPoint("ep2");
239
- createNode("mid1", "function");
240
- createNode("mid2", "function");
241
- const depId = createDependencyNode("multi-ep-pkg");
242
- const vulnId = createVulnerabilityNode("CVE-2023-010", depId);
243
- createEdge("ep1", "mid1", "calls");
244
- createEdge("mid1", depId, "imports");
245
- createEdge("ep2", depId, "imports");
246
- const result = await analyzer.analyze(vulnId);
247
- (0, import_vitest.expect)(result.verdict).toBe("affected");
248
- (0, import_vitest.expect)(result.reachingEntryPointCount).toBe(2);
249
- (0, import_vitest.expect)(result.paths.length).toBe(2);
250
- const ep1Path = result.paths.find((p) => p.entryPoint === "ep1");
251
- const ep2Path = result.paths.find((p) => p.entryPoint === "ep2");
252
- (0, import_vitest.expect)(ep1Path).toBeDefined();
253
- (0, import_vitest.expect)(ep1Path.path).toEqual(["ep1", "mid1", depId]);
254
- (0, import_vitest.expect)(ep2Path).toBeDefined();
255
- (0, import_vitest.expect)(ep2Path.path).toEqual(["ep2", depId]);
256
- });
257
- (0, import_vitest.it)("should include total count of reaching entry points", async () => {
258
- const depId = createDependencyNode("counted-pkg");
259
- const vulnId = createVulnerabilityNode("CVE-2023-011", depId);
260
- for (let i = 0; i < 5; i++) {
261
- createEntryPoint(`ep${i}`);
262
- if (i < 3) {
263
- createEdge(`ep${i}`, depId, "imports");
264
- }
265
- }
266
- const result = await analyzer.analyze(vulnId);
267
- (0, import_vitest.expect)(result.verdict).toBe("affected");
268
- (0, import_vitest.expect)(result.reachingEntryPointCount).toBe(3);
269
- (0, import_vitest.expect)(result.paths.length).toBe(3);
270
- });
271
- (0, import_vitest.it)("should handle exported functions as entry points", async () => {
272
- createEntryPoint("exported-fn", "function");
273
- const depId = createDependencyNode("fn-ep-pkg");
274
- const vulnId = createVulnerabilityNode("CVE-2023-012", depId);
275
- createEdge("exported-fn", depId, "references");
276
- const result = await analyzer.analyze(vulnId);
277
- (0, import_vitest.expect)(result.verdict).toBe("affected");
278
- (0, import_vitest.expect)(result.paths[0].entryPoint).toBe("exported-fn");
279
- });
280
- });
281
- (0, import_vitest.describe)("getImpactSummary()", () => {
282
- (0, import_vitest.it)("should return null for non-affected vulnerabilities", async () => {
283
- createEntryPoint("ep1");
284
- const depId = createDependencyNode("not-affected-pkg");
285
- const vulnId = createVulnerabilityNode("CVE-2023-020", depId);
286
- await analyzer.analyze(vulnId);
287
- const summary = await analyzer.getImpactSummary(vulnId);
288
- (0, import_vitest.expect)(summary).toBeNull();
289
- });
290
- (0, import_vitest.it)("should identify affected layers on reachable paths", async () => {
291
- createEntryPoint("ep1");
292
- createNode("mid1", "function", { filePath: "src/api/handler.ts" });
293
- createNode("mid2", "function", { filePath: "src/service/logic.ts" });
294
- const depId = createDependencyNode("layered-pkg");
295
- const vulnId = createVulnerabilityNode("CVE-2023-021", depId);
296
- createEdge("ep1", "mid1", "calls");
297
- createEdge("mid1", "mid2", "calls");
298
- createEdge("mid2", depId, "imports");
299
- assignLayer("src/api/handler.ts", "api");
300
- assignLayer("src/service/logic.ts", "service");
301
- await analyzer.analyze(vulnId);
302
- const summary = await analyzer.getImpactSummary(vulnId);
303
- (0, import_vitest.expect)(summary).not.toBeNull();
304
- (0, import_vitest.expect)(summary.affectedLayers).toContain("api");
305
- (0, import_vitest.expect)(summary.affectedLayers).toContain("service");
306
- });
307
- (0, import_vitest.it)("should identify all affected entry points", async () => {
308
- createEntryPoint("ep1");
309
- createEntryPoint("ep2");
310
- const depId = createDependencyNode("multi-ep-impact-pkg");
311
- const vulnId = createVulnerabilityNode("CVE-2023-022", depId);
312
- createEdge("ep1", depId, "imports");
313
- createEdge("ep2", depId, "imports");
314
- await analyzer.analyze(vulnId);
315
- const summary = await analyzer.getImpactSummary(vulnId);
316
- (0, import_vitest.expect)(summary).not.toBeNull();
317
- (0, import_vitest.expect)(summary.affectedEntryPoints).toContain("ep1");
318
- (0, import_vitest.expect)(summary.affectedEntryPoints).toContain("ep2");
319
- });
320
- (0, import_vitest.it)("should cap distinct path count at 100", async () => {
321
- const depId = createDependencyNode("many-paths-pkg");
322
- const vulnId = createVulnerabilityNode("CVE-2023-023", depId);
323
- for (let i = 0; i < 110; i++) {
324
- createEntryPoint(`ep${i}`);
325
- createEdge(`ep${i}`, depId, "imports");
326
- }
327
- await analyzer.analyze(vulnId);
328
- const summary = await analyzer.getImpactSummary(vulnId);
329
- (0, import_vitest.expect)(summary).not.toBeNull();
330
- (0, import_vitest.expect)(summary.distinctPathCount).toBeLessThanOrEqual(100);
331
- });
332
- (0, import_vitest.it)("should classify symbols with no assigned layer as unclassified", async () => {
333
- createEntryPoint("ep1");
334
- createNode("mid1", "function", { filePath: "src/unknown/file.ts" });
335
- const depId = createDependencyNode("unclassified-pkg");
336
- const vulnId = createVulnerabilityNode("CVE-2023-024", depId);
337
- createEdge("ep1", "mid1", "calls");
338
- createEdge("mid1", depId, "imports");
339
- await analyzer.analyze(vulnId);
340
- const summary = await analyzer.getImpactSummary(vulnId);
341
- (0, import_vitest.expect)(summary).not.toBeNull();
342
- (0, import_vitest.expect)(summary.affectedLayers).toContain("unclassified");
343
- });
344
- (0, import_vitest.it)("should omit layer classification when enableArchitecture is false", async () => {
345
- config.enableArchitecture = false;
346
- analyzer = new import_reachability.ReachabilityAnalyzer(db, config);
347
- createEntryPoint("ep1");
348
- createNode("mid1", "function", { filePath: "src/api/handler.ts" });
349
- const depId = createDependencyNode("no-arch-pkg");
350
- const vulnId = createVulnerabilityNode("CVE-2023-025", depId);
351
- createEdge("ep1", "mid1", "calls");
352
- createEdge("mid1", depId, "imports");
353
- assignLayer("src/api/handler.ts", "api");
354
- await analyzer.analyze(vulnId);
355
- const summary = await analyzer.getImpactSummary(vulnId);
356
- (0, import_vitest.expect)(summary).not.toBeNull();
357
- (0, import_vitest.expect)(summary.affectedLayers).toEqual([]);
358
- });
359
- (0, import_vitest.it)("should store impact summary in sec_impact table", async () => {
360
- createEntryPoint("ep1");
361
- const depId = createDependencyNode("stored-impact-pkg");
362
- const vulnId = createVulnerabilityNode("CVE-2023-026", depId);
363
- createEdge("ep1", depId, "imports");
364
- await analyzer.analyze(vulnId);
365
- await analyzer.getImpactSummary(vulnId);
366
- const rawDb = db.getRawDb();
367
- const row = rawDb.get(
368
- `SELECT * FROM sec_impact WHERE vulnerability_node_id = ?`,
369
- [vulnId]
370
- );
371
- (0, import_vitest.expect)(row).not.toBeNull();
372
- (0, import_vitest.expect)(row.distinct_path_count).toBeGreaterThan(0);
373
- });
374
- });
375
- (0, import_vitest.describe)("analyzeAll()", () => {
376
- (0, import_vitest.it)("should analyze all vulnerability nodes", async () => {
377
- createEntryPoint("ep1");
378
- const dep1 = createDependencyNode("pkg1");
379
- const dep2 = createDependencyNode("pkg2");
380
- const vuln1 = createVulnerabilityNode("CVE-2023-030", dep1);
381
- const vuln2 = createVulnerabilityNode("CVE-2023-031", dep2);
382
- createEdge("ep1", dep1, "imports");
383
- const results = await analyzer.analyzeAll();
384
- (0, import_vitest.expect)(results.size).toBe(2);
385
- (0, import_vitest.expect)(results.get(vuln1).verdict).toBe("affected");
386
- (0, import_vitest.expect)(results.get(vuln2).verdict).toBe("not_affected");
387
- });
388
- (0, import_vitest.it)("should return empty map when no vulnerabilities exist", async () => {
389
- const results = await analyzer.analyzeAll();
390
- (0, import_vitest.expect)(results.size).toBe(0);
391
- });
392
- });
393
- });
394
- //# sourceMappingURL=reachability.test.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/security/reachability.test.ts"],
4
- "sourcesContent": ["/**\n * Tests for ReachabilityAnalyzer\n *\n * Verifies BFS traversal, verdict assignment, multi-entry-point path recording,\n * and impact analysis with architecture context.\n *\n * Requirements: 4.1, 4.2, 4.3, 4.4, 4.6, 5.1, 5.2, 5.3, 5.4, 5.5\n */\nimport { describe, it, expect, beforeEach, afterEach } from 'vitest';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport * as os from 'os';\nimport { ReachabilityAnalyzer } from './reachability';\nimport { GraphDatabase } from '../db/database';\nimport { createDefaultConfig, type KiroGraphConfig } from '../config';\nimport type { Node, Edge } from '../types';\n\ndescribe('ReachabilityAnalyzer', () => {\n let db: GraphDatabase;\n let config: KiroGraphConfig;\n let analyzer: ReachabilityAnalyzer;\n let tmpDir: string;\n\n beforeEach(() => {\n tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'kirograph-reachability-test-'));\n db = new GraphDatabase(tmpDir);\n db.applySecuritySchema();\n config = createDefaultConfig();\n config.enableArchitecture = true;\n config.enableSecurity = true;\n analyzer = new ReachabilityAnalyzer(db, config);\n });\n\n afterEach(() => {\n db.close();\n fs.rmSync(tmpDir, { recursive: true, force: true });\n });\n\n // \u2500\u2500 Helpers \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\n function createNode(id: string, kind: Node['kind'], opts?: Partial<Node>): void {\n const node: Node = {\n id,\n kind,\n name: opts?.name ?? id,\n qualifiedName: opts?.qualifiedName ?? id,\n filePath: opts?.filePath ?? `src/${id}.ts`,\n language: 'typescript',\n startLine: 0,\n endLine: 0,\n startColumn: 0,\n endColumn: 0,\n isExported: opts?.isExported ?? false,\n updatedAt: Date.now(),\n };\n db.upsertNode(node);\n }\n\n function createEdge(source: string, target: string, kind: Edge['kind']): void {\n db.insertEdge({ source, target, kind });\n }\n\n function createDependencyNode(name: string): string {\n const nodeId = `dep:npm:${name}`;\n createNode(nodeId, 'dependency', { name });\n const rawDb = db.getRawDb();\n rawDb.run(\n `INSERT OR REPLACE INTO sec_dependencies\n (node_id, ecosystem, package_name, declared_constraint, resolved_version, scope, source_manifests)\n VALUES (?, ?, ?, ?, ?, ?, ?)`,\n [nodeId, 'npm', name, '^1.0.0', '1.0.0', 'production', '[\"package.json\"]'],\n );\n return nodeId;\n }\n\n function createVulnerabilityNode(cveId: string, depNodeId: string): string {\n const nodeId = `vuln:${cveId}`;\n createNode(nodeId, 'vulnerability', { name: cveId });\n const rawDb = db.getRawDb();\n rawDb.run(\n `INSERT OR REPLACE INTO sec_vulnerabilities\n (node_id, cve_id, severity_score, affected_ranges, fixed_version, summary, source_database)\n VALUES (?, ?, ?, ?, ?, ?, ?)`,\n [nodeId, cveId, 7.5, '[]', '1.0.1', 'Test vulnerability', 'OSV'],\n );\n // Create has_vulnerability edge: dependency \u2192 vulnerability\n createEdge(depNodeId, nodeId, 'has_vulnerability');\n return nodeId;\n }\n\n function createEntryPoint(id: string, kind: 'route' | 'function' = 'route'): void {\n createNode(id, kind, { isExported: true });\n }\n\n function assignLayer(filePath: string, layerId: string): void {\n const rawDb = db.getRawDb();\n // Ensure the layer exists in arch_layers (FK constraint)\n rawDb.run(\n `INSERT OR IGNORE INTO arch_layers (id, name, source, patterns, updated_at)\n VALUES (?, ?, 'auto', '[]', ?)`,\n [layerId, layerId, Date.now()],\n );\n rawDb.run(\n `INSERT OR REPLACE INTO arch_file_layers (file_path, layer_id, confidence, matched_pattern)\n VALUES (?, ?, 1.0, '**')`,\n [filePath, layerId],\n );\n }\n\n // \u2500\u2500 Tests: Core Reachability Traversal (Task 7.1) \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 describe('analyze() - core reachability', () => {\n it('should return affected when a path exists from entry point to dependency', async () => {\n // Graph: entryPoint \u2192 intermediate \u2192 dependency\n createEntryPoint('ep1');\n createNode('mid1', 'function');\n const depId = createDependencyNode('vulnerable-pkg');\n const vulnId = createVulnerabilityNode('CVE-2023-001', depId);\n\n createEdge('ep1', 'mid1', 'calls');\n createEdge('mid1', depId, 'imports');\n\n const result = await analyzer.analyze(vulnId);\n\n expect(result.verdict).toBe('affected');\n expect(result.paths.length).toBe(1);\n expect(result.paths[0].entryPoint).toBe('ep1');\n expect(result.paths[0].path).toEqual(['ep1', 'mid1', depId]);\n expect(result.reachingEntryPointCount).toBe(1);\n });\n\n it('should return not_affected when no path exists', async () => {\n // Graph: entryPoint \u2192 mid1 (no connection to dep)\n createEntryPoint('ep1');\n createNode('mid1', 'function');\n const depId = createDependencyNode('isolated-pkg');\n const vulnId = createVulnerabilityNode('CVE-2023-002', depId);\n\n createEdge('ep1', 'mid1', 'calls');\n // No edge from mid1 to depId\n\n const result = await analyzer.analyze(vulnId);\n\n expect(result.verdict).toBe('not_affected');\n expect(result.paths.length).toBe(0);\n expect(result.reachingEntryPointCount).toBe(0);\n });\n\n it('should return under_investigation when unresolved imports are encountered', async () => {\n // Graph: entryPoint \u2192 unresolvedImport (import node with no outgoing edges)\n createEntryPoint('ep1');\n createNode('unresolved1', 'import');\n const depId = createDependencyNode('maybe-pkg');\n const vulnId = createVulnerabilityNode('CVE-2023-003', depId);\n\n createEdge('ep1', 'unresolved1', 'imports');\n // unresolved1 has no outgoing edges \u2192 unresolved import\n\n const result = await analyzer.analyze(vulnId);\n\n expect(result.verdict).toBe('under_investigation');\n expect(result.unresolvedSymbols).toContain('unresolved1');\n expect(result.paths.length).toBe(0);\n });\n\n it('should handle cycles without infinite loops', async () => {\n // Graph: ep1 \u2192 A \u2192 B \u2192 A (cycle), no path to dep\n createEntryPoint('ep1');\n createNode('nodeA', 'function');\n createNode('nodeB', 'function');\n const depId = createDependencyNode('unreachable-pkg');\n const vulnId = createVulnerabilityNode('CVE-2023-004', depId);\n\n createEdge('ep1', 'nodeA', 'calls');\n createEdge('nodeA', 'nodeB', 'calls');\n createEdge('nodeB', 'nodeA', 'calls'); // cycle\n\n const result = await analyzer.analyze(vulnId);\n\n expect(result.verdict).toBe('not_affected');\n expect(result.paths.length).toBe(0);\n });\n\n it('should visit each node at most once', async () => {\n // Graph: ep1 \u2192 A \u2192 dep, ep1 \u2192 B \u2192 A \u2192 dep\n // A should only be visited once per BFS from ep1\n createEntryPoint('ep1');\n createNode('nodeA', 'function');\n createNode('nodeB', 'function');\n const depId = createDependencyNode('shared-pkg');\n const vulnId = createVulnerabilityNode('CVE-2023-005', depId);\n\n createEdge('ep1', 'nodeA', 'calls');\n createEdge('ep1', 'nodeB', 'calls');\n createEdge('nodeA', depId, 'imports');\n createEdge('nodeB', 'nodeA', 'calls');\n\n const result = await analyzer.analyze(vulnId);\n\n expect(result.verdict).toBe('affected');\n // Should find shortest path: ep1 \u2192 nodeA \u2192 dep\n expect(result.paths[0].path).toEqual(['ep1', 'nodeA', depId]);\n });\n\n it('should traverse calls, imports, and references edges', async () => {\n createEntryPoint('ep1');\n createNode('mid1', 'function');\n createNode('mid2', 'class');\n const depId = createDependencyNode('ref-pkg');\n const vulnId = createVulnerabilityNode('CVE-2023-006', depId);\n\n createEdge('ep1', 'mid1', 'calls');\n createEdge('mid1', 'mid2', 'references');\n createEdge('mid2', depId, 'imports');\n\n const result = await analyzer.analyze(vulnId);\n\n expect(result.verdict).toBe('affected');\n expect(result.paths[0].path).toEqual(['ep1', 'mid1', 'mid2', depId]);\n });\n\n it('should return under_investigation when no dependency is linked', async () => {\n // Vulnerability with no has_vulnerability edge\n const vulnId = 'vuln:CVE-2023-orphan';\n createNode(vulnId, 'vulnerability', { name: 'CVE-2023-orphan' });\n const rawDb = db.getRawDb();\n rawDb.run(\n `INSERT OR REPLACE INTO sec_vulnerabilities\n (node_id, cve_id, severity_score, affected_ranges, summary, source_database)\n VALUES (?, ?, ?, ?, ?, ?)`,\n [vulnId, 'CVE-2023-orphan', 5.0, '[]', 'Orphan vuln', 'OSV'],\n );\n\n const result = await analyzer.analyze(vulnId);\n\n expect(result.verdict).toBe('under_investigation');\n });\n\n it('should return not_affected when no entry points exist', async () => {\n // No entry points in the graph\n const depId = createDependencyNode('no-ep-pkg');\n const vulnId = createVulnerabilityNode('CVE-2023-007', depId);\n\n const result = await analyzer.analyze(vulnId);\n\n expect(result.verdict).toBe('not_affected');\n });\n\n it('should limit unresolved symbols to 50', async () => {\n createEntryPoint('ep1');\n const depId = createDependencyNode('many-unresolved-pkg');\n const vulnId = createVulnerabilityNode('CVE-2023-008', depId);\n\n // Create 60 unresolved import nodes\n for (let i = 0; i < 60; i++) {\n const importId = `unresolved-import-${i}`;\n createNode(importId, 'import');\n createEdge('ep1', importId, 'imports');\n }\n\n const result = await analyzer.analyze(vulnId);\n\n expect(result.verdict).toBe('under_investigation');\n expect(result.unresolvedSymbols.length).toBeLessThanOrEqual(50);\n });\n\n it('should store result in sec_reachability table', async () => {\n createEntryPoint('ep1');\n const depId = createDependencyNode('stored-pkg');\n const vulnId = createVulnerabilityNode('CVE-2023-009', depId);\n createEdge('ep1', depId, 'imports');\n\n await analyzer.analyze(vulnId);\n\n const rawDb = db.getRawDb();\n const row = rawDb.get(\n `SELECT * FROM sec_reachability WHERE vulnerability_node_id = ?`,\n [vulnId],\n );\n expect(row).not.toBeNull();\n expect(row.verdict).toBe('affected');\n expect(row.reaching_entry_point_count).toBe(1);\n });\n });\n\n // \u2500\u2500 Tests: Multi-Entry-Point Path Recording (Task 7.2) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n describe('analyze() - multi-entry-point paths', () => {\n it('should record shortest path from each reaching entry point', async () => {\n createEntryPoint('ep1');\n createEntryPoint('ep2');\n createNode('mid1', 'function');\n createNode('mid2', 'function');\n const depId = createDependencyNode('multi-ep-pkg');\n const vulnId = createVulnerabilityNode('CVE-2023-010', depId);\n\n // ep1 \u2192 mid1 \u2192 dep (length 3)\n createEdge('ep1', 'mid1', 'calls');\n createEdge('mid1', depId, 'imports');\n\n // ep2 \u2192 dep (length 2, shorter)\n createEdge('ep2', depId, 'imports');\n\n const result = await analyzer.analyze(vulnId);\n\n expect(result.verdict).toBe('affected');\n expect(result.reachingEntryPointCount).toBe(2);\n expect(result.paths.length).toBe(2);\n\n const ep1Path = result.paths.find(p => p.entryPoint === 'ep1');\n const ep2Path = result.paths.find(p => p.entryPoint === 'ep2');\n\n expect(ep1Path).toBeDefined();\n expect(ep1Path!.path).toEqual(['ep1', 'mid1', depId]);\n\n expect(ep2Path).toBeDefined();\n expect(ep2Path!.path).toEqual(['ep2', depId]);\n });\n\n it('should include total count of reaching entry points', async () => {\n const depId = createDependencyNode('counted-pkg');\n const vulnId = createVulnerabilityNode('CVE-2023-011', depId);\n\n // Create 5 entry points, 3 of which reach the dep\n for (let i = 0; i < 5; i++) {\n createEntryPoint(`ep${i}`);\n if (i < 3) {\n createEdge(`ep${i}`, depId, 'imports');\n }\n }\n\n const result = await analyzer.analyze(vulnId);\n\n expect(result.verdict).toBe('affected');\n expect(result.reachingEntryPointCount).toBe(3);\n expect(result.paths.length).toBe(3);\n });\n\n it('should handle exported functions as entry points', async () => {\n createEntryPoint('exported-fn', 'function');\n const depId = createDependencyNode('fn-ep-pkg');\n const vulnId = createVulnerabilityNode('CVE-2023-012', depId);\n\n createEdge('exported-fn', depId, 'references');\n\n const result = await analyzer.analyze(vulnId);\n\n expect(result.verdict).toBe('affected');\n expect(result.paths[0].entryPoint).toBe('exported-fn');\n });\n });\n\n // \u2500\u2500 Tests: Impact Analysis (Task 7.3) \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 describe('getImpactSummary()', () => {\n it('should return null for non-affected vulnerabilities', async () => {\n createEntryPoint('ep1');\n const depId = createDependencyNode('not-affected-pkg');\n const vulnId = createVulnerabilityNode('CVE-2023-020', depId);\n // No path to dep \u2192 not_affected\n\n await analyzer.analyze(vulnId);\n const summary = await analyzer.getImpactSummary(vulnId);\n\n expect(summary).toBeNull();\n });\n\n it('should identify affected layers on reachable paths', async () => {\n createEntryPoint('ep1');\n createNode('mid1', 'function', { filePath: 'src/api/handler.ts' });\n createNode('mid2', 'function', { filePath: 'src/service/logic.ts' });\n const depId = createDependencyNode('layered-pkg');\n const vulnId = createVulnerabilityNode('CVE-2023-021', depId);\n\n createEdge('ep1', 'mid1', 'calls');\n createEdge('mid1', 'mid2', 'calls');\n createEdge('mid2', depId, 'imports');\n\n // Assign layers\n assignLayer('src/api/handler.ts', 'api');\n assignLayer('src/service/logic.ts', 'service');\n\n await analyzer.analyze(vulnId);\n const summary = await analyzer.getImpactSummary(vulnId);\n\n expect(summary).not.toBeNull();\n expect(summary!.affectedLayers).toContain('api');\n expect(summary!.affectedLayers).toContain('service');\n });\n\n it('should identify all affected entry points', async () => {\n createEntryPoint('ep1');\n createEntryPoint('ep2');\n const depId = createDependencyNode('multi-ep-impact-pkg');\n const vulnId = createVulnerabilityNode('CVE-2023-022', depId);\n\n createEdge('ep1', depId, 'imports');\n createEdge('ep2', depId, 'imports');\n\n await analyzer.analyze(vulnId);\n const summary = await analyzer.getImpactSummary(vulnId);\n\n expect(summary).not.toBeNull();\n expect(summary!.affectedEntryPoints).toContain('ep1');\n expect(summary!.affectedEntryPoints).toContain('ep2');\n });\n\n it('should cap distinct path count at 100', async () => {\n const depId = createDependencyNode('many-paths-pkg');\n const vulnId = createVulnerabilityNode('CVE-2023-023', depId);\n\n // Create 110 entry points each with a direct path\n for (let i = 0; i < 110; i++) {\n createEntryPoint(`ep${i}`);\n createEdge(`ep${i}`, depId, 'imports');\n }\n\n await analyzer.analyze(vulnId);\n const summary = await analyzer.getImpactSummary(vulnId);\n\n expect(summary).not.toBeNull();\n expect(summary!.distinctPathCount).toBeLessThanOrEqual(100);\n });\n\n it('should classify symbols with no assigned layer as unclassified', async () => {\n createEntryPoint('ep1');\n createNode('mid1', 'function', { filePath: 'src/unknown/file.ts' });\n const depId = createDependencyNode('unclassified-pkg');\n const vulnId = createVulnerabilityNode('CVE-2023-024', depId);\n\n createEdge('ep1', 'mid1', 'calls');\n createEdge('mid1', depId, 'imports');\n\n // No layer assigned to src/unknown/file.ts\n\n await analyzer.analyze(vulnId);\n const summary = await analyzer.getImpactSummary(vulnId);\n\n expect(summary).not.toBeNull();\n expect(summary!.affectedLayers).toContain('unclassified');\n });\n\n it('should omit layer classification when enableArchitecture is false', async () => {\n config.enableArchitecture = false;\n analyzer = new ReachabilityAnalyzer(db, config);\n\n createEntryPoint('ep1');\n createNode('mid1', 'function', { filePath: 'src/api/handler.ts' });\n const depId = createDependencyNode('no-arch-pkg');\n const vulnId = createVulnerabilityNode('CVE-2023-025', depId);\n\n createEdge('ep1', 'mid1', 'calls');\n createEdge('mid1', depId, 'imports');\n\n assignLayer('src/api/handler.ts', 'api');\n\n await analyzer.analyze(vulnId);\n const summary = await analyzer.getImpactSummary(vulnId);\n\n expect(summary).not.toBeNull();\n // When enableArchitecture is false, affectedLayers should be empty\n expect(summary!.affectedLayers).toEqual([]);\n });\n\n it('should store impact summary in sec_impact table', async () => {\n createEntryPoint('ep1');\n const depId = createDependencyNode('stored-impact-pkg');\n const vulnId = createVulnerabilityNode('CVE-2023-026', depId);\n createEdge('ep1', depId, 'imports');\n\n await analyzer.analyze(vulnId);\n await analyzer.getImpactSummary(vulnId);\n\n const rawDb = db.getRawDb();\n const row = rawDb.get(\n `SELECT * FROM sec_impact WHERE vulnerability_node_id = ?`,\n [vulnId],\n );\n expect(row).not.toBeNull();\n expect(row.distinct_path_count).toBeGreaterThan(0);\n });\n });\n\n // \u2500\u2500 Tests: analyzeAll() \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 describe('analyzeAll()', () => {\n it('should analyze all vulnerability nodes', async () => {\n createEntryPoint('ep1');\n const dep1 = createDependencyNode('pkg1');\n const dep2 = createDependencyNode('pkg2');\n const vuln1 = createVulnerabilityNode('CVE-2023-030', dep1);\n const vuln2 = createVulnerabilityNode('CVE-2023-031', dep2);\n\n createEdge('ep1', dep1, 'imports');\n // dep2 is not reachable\n\n const results = await analyzer.analyzeAll();\n\n expect(results.size).toBe(2);\n expect(results.get(vuln1)!.verdict).toBe('affected');\n expect(results.get(vuln2)!.verdict).toBe('not_affected');\n });\n\n it('should return empty map when no vulnerabilities exist', async () => {\n const results = await analyzer.analyzeAll();\n expect(results.size).toBe(0);\n });\n });\n});\n"],
5
- "mappings": "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",
6
- "names": []
7
- }