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,18 @@
1
+ /**
2
+ * KiroGraph PatternLibraryLoader — loads and merges YAML pattern rule files.
3
+ *
4
+ * js-yaml is not a declared dependency, so this uses a lightweight inline parser
5
+ * that handles the flat key:value + nested rule: block format used by KiroGraph
6
+ * pattern rule files.
7
+ */
8
+ import { PatternRule } from './types';
9
+ export declare class PatternLibraryLoader {
10
+ /**
11
+ * Load, validate, and merge rules from the builtin path and optional custom path.
12
+ * User-supplied rules override bundled rules on id collision.
13
+ */
14
+ load(builtinPath: string, customPath?: string): PatternRule[];
15
+ private _loadDirectory;
16
+ private _validate;
17
+ }
18
+ //# sourceMappingURL=loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/patterns/loader.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAyMtC,qBAAa,oBAAoB;IAC/B;;;OAGG;IACH,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,WAAW,EAAE;IAmB7D,OAAO,CAAC,cAAc;IAsCtB,OAAO,CAAC,SAAS;CA2ClB"}
@@ -0,0 +1,277 @@
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 __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var loader_exports = {};
30
+ __export(loader_exports, {
31
+ PatternLibraryLoader: () => PatternLibraryLoader
32
+ });
33
+ module.exports = __toCommonJS(loader_exports);
34
+ var fs = __toESM(require("fs"));
35
+ var path = __toESM(require("path"));
36
+ var import_errors = require("../errors");
37
+ function _parseYaml(text) {
38
+ const lines = text.split("\n");
39
+ return _parseBlock(lines, 0, 0).result;
40
+ }
41
+ function _parseBlock(lines, startIndex, baseIndent) {
42
+ const result = {};
43
+ let i = startIndex;
44
+ while (i < lines.length) {
45
+ const rawLine = lines[i];
46
+ const commentIdx = rawLine.indexOf(" #");
47
+ const line = commentIdx >= 0 ? rawLine.slice(0, commentIdx) : rawLine;
48
+ if (line.trim() === "" || line.trim().startsWith("#")) {
49
+ i++;
50
+ continue;
51
+ }
52
+ const indent = _countIndent(rawLine);
53
+ if (indent < baseIndent) break;
54
+ if (indent > baseIndent && Object.keys(result).length === 0) {
55
+ i++;
56
+ continue;
57
+ }
58
+ if (indent > baseIndent) {
59
+ break;
60
+ }
61
+ const trimmed = line.trim();
62
+ const colonIdx = trimmed.indexOf(":");
63
+ if (colonIdx <= 0) {
64
+ i++;
65
+ continue;
66
+ }
67
+ const key = trimmed.slice(0, colonIdx).trim();
68
+ const rest = trimmed.slice(colonIdx + 1).trimStart();
69
+ if (rest === "" || rest === "|" || rest === ">") {
70
+ const nextContentLine = _findNextContent(lines, i + 1);
71
+ if (nextContentLine === -1) {
72
+ result[key] = null;
73
+ i++;
74
+ continue;
75
+ }
76
+ const nextIndent = _countIndent(lines[nextContentLine]);
77
+ if (nextIndent > indent) {
78
+ if (lines[nextContentLine].trim().startsWith("- ")) {
79
+ const { items, nextIndex } = _parseSequence(lines, nextContentLine, nextIndent);
80
+ result[key] = items;
81
+ i = nextIndex;
82
+ } else {
83
+ const { result: subResult, nextIndex } = _parseBlock(lines, nextContentLine, nextIndent);
84
+ result[key] = subResult;
85
+ i = nextIndex;
86
+ }
87
+ } else {
88
+ result[key] = null;
89
+ i++;
90
+ }
91
+ } else if (rest.startsWith("[")) {
92
+ result[key] = _parseInlineArray(rest);
93
+ i++;
94
+ } else {
95
+ result[key] = _parseScalar(rest);
96
+ i++;
97
+ }
98
+ }
99
+ return { result, nextIndex: i };
100
+ }
101
+ function _parseSequence(lines, startIndex, baseIndent) {
102
+ const items = [];
103
+ let i = startIndex;
104
+ while (i < lines.length) {
105
+ const rawLine = lines[i];
106
+ if (rawLine.trim() === "" || rawLine.trim().startsWith("#")) {
107
+ i++;
108
+ continue;
109
+ }
110
+ const indent = _countIndent(rawLine);
111
+ if (indent < baseIndent) break;
112
+ const trimmed = rawLine.trim();
113
+ if (!trimmed.startsWith("- ") && trimmed !== "-") {
114
+ break;
115
+ }
116
+ const itemValue = trimmed.startsWith("- ") ? trimmed.slice(2).trim() : "";
117
+ if (itemValue === "" || itemValue === "|" || itemValue === ">") {
118
+ const nextContentLine = _findNextContent(lines, i + 1);
119
+ if (nextContentLine !== -1 && _countIndent(lines[nextContentLine]) > indent) {
120
+ const { result: subResult, nextIndex } = _parseBlock(lines, nextContentLine, _countIndent(lines[nextContentLine]));
121
+ items.push(subResult);
122
+ i = nextIndex;
123
+ } else {
124
+ items.push(null);
125
+ i++;
126
+ }
127
+ } else if (itemValue.includes(":")) {
128
+ const itemIndent = indent + 2;
129
+ const continuationLines = [];
130
+ let j = i + 1;
131
+ while (j < lines.length) {
132
+ const nextRaw = lines[j];
133
+ if (nextRaw.trim() === "" || nextRaw.trim().startsWith("#")) {
134
+ j++;
135
+ continue;
136
+ }
137
+ if (_countIndent(nextRaw) >= itemIndent) {
138
+ continuationLines.push(nextRaw);
139
+ j++;
140
+ } else {
141
+ break;
142
+ }
143
+ }
144
+ const blockLines = [" ".repeat(itemIndent) + itemValue, ...continuationLines];
145
+ const { result: subResult } = _parseBlock(blockLines, 0, itemIndent);
146
+ items.push(subResult);
147
+ i = j;
148
+ } else {
149
+ items.push(_parseScalar(itemValue));
150
+ i++;
151
+ }
152
+ }
153
+ return { items, nextIndex: i };
154
+ }
155
+ function _parseInlineArray(text) {
156
+ const inner = text.replace(/^\[/, "").replace(/\].*$/, "");
157
+ return inner.split(",").map((s) => _parseScalar(s.trim())).filter((s) => s !== null && s !== void 0);
158
+ }
159
+ function _parseScalar(text) {
160
+ if (text === "true") return true;
161
+ if (text === "false") return false;
162
+ if (text === "null" || text === "~") return null;
163
+ if (/^-?\d+$/.test(text)) return parseInt(text, 10);
164
+ if (/^-?\d+\.\d+$/.test(text)) return parseFloat(text);
165
+ if (text.startsWith('"') && text.endsWith('"') || text.startsWith("'") && text.endsWith("'")) {
166
+ return text.slice(1, -1);
167
+ }
168
+ return text;
169
+ }
170
+ function _countIndent(line) {
171
+ let i = 0;
172
+ while (i < line.length && line[i] === " ") i++;
173
+ return i;
174
+ }
175
+ function _findNextContent(lines, startIndex) {
176
+ for (let i = startIndex; i < lines.length; i++) {
177
+ const t = lines[i].trim();
178
+ if (t !== "" && !t.startsWith("#")) return i;
179
+ }
180
+ return -1;
181
+ }
182
+ class PatternLibraryLoader {
183
+ /**
184
+ * Load, validate, and merge rules from the builtin path and optional custom path.
185
+ * User-supplied rules override bundled rules on id collision.
186
+ */
187
+ load(builtinPath, customPath) {
188
+ const builtin = this._loadDirectory(builtinPath, "builtin");
189
+ const builtinMap = /* @__PURE__ */ new Map();
190
+ for (const rule of builtin) builtinMap.set(rule.id, rule);
191
+ if (!customPath) return builtin;
192
+ const custom = this._loadDirectory(customPath, "custom");
193
+ const merged = new Map(builtinMap);
194
+ for (const rule of custom) {
195
+ if (merged.has(rule.id)) {
196
+ (0, import_errors.logWarn)(`PatternLibraryLoader: custom rule "${rule.id}" overrides bundled rule`);
197
+ }
198
+ merged.set(rule.id, rule);
199
+ }
200
+ return [...merged.values()];
201
+ }
202
+ _loadDirectory(dirPath, source) {
203
+ if (!fs.existsSync(dirPath)) {
204
+ (0, import_errors.logWarn)(`PatternLibraryLoader: ${source} library path does not exist: ${dirPath}`);
205
+ return [];
206
+ }
207
+ const rules = [];
208
+ const seenIds = /* @__PURE__ */ new Map();
209
+ let files;
210
+ try {
211
+ files = fs.readdirSync(dirPath).filter((f) => f.endsWith(".yaml") || f.endsWith(".yml"));
212
+ } catch (err) {
213
+ (0, import_errors.logWarn)(`PatternLibraryLoader: failed to read ${source} directory "${dirPath}": ${err instanceof Error ? err.message : String(err)}`);
214
+ return [];
215
+ }
216
+ for (const file of files) {
217
+ const filePath = path.join(dirPath, file);
218
+ try {
219
+ const text = fs.readFileSync(filePath, "utf8");
220
+ const parsed = _parseYaml(text);
221
+ const rule = this._validate(parsed, filePath);
222
+ if (!rule) continue;
223
+ if (seenIds.has(rule.id)) {
224
+ (0, import_errors.logWarn)(`PatternLibraryLoader: duplicate rule id "${rule.id}" in ${source} library \u2014 found in "${seenIds.get(rule.id)}" and "${filePath}", using last loaded`);
225
+ }
226
+ seenIds.set(rule.id, filePath);
227
+ rules.push(rule);
228
+ } catch (err) {
229
+ (0, import_errors.logWarn)(`PatternLibraryLoader: failed to load rule file "${filePath}": ${err instanceof Error ? err.message : String(err)}`);
230
+ }
231
+ }
232
+ return rules;
233
+ }
234
+ _validate(parsed, filePath) {
235
+ const required = ["id", "language", "severity", "owaspCategory", "description", "fixHint", "rule"];
236
+ for (const field of required) {
237
+ if (parsed[field] === void 0 || parsed[field] === null) {
238
+ (0, import_errors.logWarn)(`PatternLibraryLoader: rule file "${filePath}" is missing required field "${field}", skipping`);
239
+ return null;
240
+ }
241
+ }
242
+ const id = String(parsed["id"]);
243
+ const language = parsed["language"];
244
+ const severity = String(parsed["severity"]);
245
+ const owaspCategory = String(parsed["owaspCategory"]);
246
+ const description = String(parsed["description"]);
247
+ const fixHint = String(parsed["fixHint"]);
248
+ const rule = parsed["rule"];
249
+ const validSeverities = /* @__PURE__ */ new Set(["critical", "high", "medium", "low"]);
250
+ if (!validSeverities.has(severity)) {
251
+ (0, import_errors.logWarn)(`PatternLibraryLoader: rule file "${filePath}" has invalid severity "${severity}", skipping`);
252
+ return null;
253
+ }
254
+ if (typeof language !== "string" && !Array.isArray(language)) {
255
+ (0, import_errors.logWarn)(`PatternLibraryLoader: rule file "${filePath}" has invalid language field, skipping`);
256
+ return null;
257
+ }
258
+ if (typeof rule !== "object" || Array.isArray(rule) || rule === null) {
259
+ (0, import_errors.logWarn)(`PatternLibraryLoader: rule file "${filePath}" has invalid rule field (must be an object), skipping`);
260
+ return null;
261
+ }
262
+ return {
263
+ id,
264
+ language: Array.isArray(language) ? language : String(language),
265
+ severity,
266
+ owaspCategory,
267
+ description,
268
+ fixHint,
269
+ rule
270
+ };
271
+ }
272
+ }
273
+ // Annotate the CommonJS export names for ESM import in node:
274
+ 0 && (module.exports = {
275
+ PatternLibraryLoader
276
+ });
277
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/patterns/loader.ts"],
4
+ "sourcesContent": ["/**\n * KiroGraph PatternLibraryLoader \u2014 loads and merges YAML pattern rule files.\n *\n * js-yaml is not a declared dependency, so this uses a lightweight inline parser\n * that handles the flat key:value + nested rule: block format used by KiroGraph\n * pattern rule files.\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { PatternRule } from './types';\nimport { logWarn } from '../errors';\n\n// \u2500\u2500 Minimal YAML parser \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// Supports the subset of YAML used by KiroGraph pattern files:\n// - Flat key: value (string, boolean, number)\n// - key: [item1, item2] (inline array)\n// - key:\\n - item (block sequence for simple values)\n// - rule:\\n (nested block as raw sub-object \u2014 parsed recursively)\n// - Quoted strings: \"...\" and '...'\n// - Comments: # ...\n\nfunction _parseYaml(text: string): Record<string, unknown> {\n const lines = text.split('\\n');\n return _parseBlock(lines, 0, 0).result;\n}\n\ninterface BlockResult {\n result: Record<string, unknown>;\n nextIndex: number;\n}\n\nfunction _parseBlock(lines: string[], startIndex: number, baseIndent: number): BlockResult {\n const result: Record<string, unknown> = {};\n let i = startIndex;\n\n while (i < lines.length) {\n const rawLine = lines[i];\n // Strip trailing comments (but not inside strings \u2014 simplified approach)\n const commentIdx = rawLine.indexOf(' #');\n const line = commentIdx >= 0 ? rawLine.slice(0, commentIdx) : rawLine;\n\n // Skip blank lines\n if (line.trim() === '' || line.trim().startsWith('#')) {\n i++;\n continue;\n }\n\n const indent = _countIndent(rawLine);\n\n // If we've de-indented past our base, stop\n if (indent < baseIndent) break;\n\n // Skip lines that are at an indent level below our block's base\n if (indent > baseIndent && Object.keys(result).length === 0) {\n // Haven't started the block yet \u2014 shouldn't happen but skip\n i++;\n continue;\n }\n\n if (indent > baseIndent) {\n // This belongs to a child block already being processed \u2014 stop\n break;\n }\n\n const trimmed = line.trim();\n\n // Detect key: ... pattern\n const colonIdx = trimmed.indexOf(':');\n if (colonIdx <= 0) {\n i++;\n continue;\n }\n\n const key = trimmed.slice(0, colonIdx).trim();\n const rest = trimmed.slice(colonIdx + 1).trimStart();\n\n if (rest === '' || rest === '|' || rest === '>') {\n // Value is on the following lines \u2014 could be a nested block or block scalar\n // Peek ahead: if next non-empty line is indented more, recurse\n const nextContentLine = _findNextContent(lines, i + 1);\n if (nextContentLine === -1) {\n result[key] = null;\n i++;\n continue;\n }\n const nextIndent = _countIndent(lines[nextContentLine]);\n if (nextIndent > indent) {\n // Check if next line is a sequence item (- ...)\n if (lines[nextContentLine].trim().startsWith('- ')) {\n const { items, nextIndex } = _parseSequence(lines, nextContentLine, nextIndent);\n result[key] = items;\n i = nextIndex;\n } else {\n const { result: subResult, nextIndex } = _parseBlock(lines, nextContentLine, nextIndent);\n result[key] = subResult;\n i = nextIndex;\n }\n } else {\n result[key] = null;\n i++;\n }\n } else if (rest.startsWith('[')) {\n // Inline array: [a, b, c]\n result[key] = _parseInlineArray(rest);\n i++;\n } else {\n // Scalar value\n result[key] = _parseScalar(rest);\n i++;\n }\n }\n\n return { result, nextIndex: i };\n}\n\nfunction _parseSequence(lines: string[], startIndex: number, baseIndent: number): { items: unknown[]; nextIndex: number } {\n const items: unknown[] = [];\n let i = startIndex;\n\n while (i < lines.length) {\n const rawLine = lines[i];\n if (rawLine.trim() === '' || rawLine.trim().startsWith('#')) {\n i++;\n continue;\n }\n const indent = _countIndent(rawLine);\n if (indent < baseIndent) break;\n\n const trimmed = rawLine.trim();\n if (!trimmed.startsWith('- ') && trimmed !== '-') {\n break;\n }\n\n const itemValue = trimmed.startsWith('- ') ? trimmed.slice(2).trim() : '';\n\n if (itemValue === '' || itemValue === '|' || itemValue === '>') {\n // Multi-line sequence item\n const nextContentLine = _findNextContent(lines, i + 1);\n if (nextContentLine !== -1 && _countIndent(lines[nextContentLine]) > indent) {\n const { result: subResult, nextIndex } = _parseBlock(lines, nextContentLine, _countIndent(lines[nextContentLine]));\n items.push(subResult);\n i = nextIndex;\n } else {\n items.push(null);\n i++;\n }\n } else if (itemValue.includes(':')) {\n // Inline key:value item \u2014 parse as sub-object, collecting any indented continuation lines\n // Find continuation lines indented deeper than this item\n const itemIndent = indent + 2;\n const continuationLines: string[] = [];\n let j = i + 1;\n while (j < lines.length) {\n const nextRaw = lines[j];\n if (nextRaw.trim() === '' || nextRaw.trim().startsWith('#')) { j++; continue; }\n if (_countIndent(nextRaw) >= itemIndent) {\n continuationLines.push(nextRaw);\n j++;\n } else {\n break;\n }\n }\n const blockLines = [' '.repeat(itemIndent) + itemValue, ...continuationLines];\n const { result: subResult } = _parseBlock(blockLines, 0, itemIndent);\n items.push(subResult);\n i = j;\n } else {\n items.push(_parseScalar(itemValue));\n i++;\n }\n }\n\n return { items, nextIndex: i };\n}\n\nfunction _parseInlineArray(text: string): string[] {\n const inner = text.replace(/^\\[/, '').replace(/\\].*$/, '');\n return inner.split(',').map(s => _parseScalar(s.trim()) as string).filter(s => s !== null && s !== undefined) as string[];\n}\n\nfunction _parseScalar(text: string): unknown {\n if (text === 'true') return true;\n if (text === 'false') return false;\n if (text === 'null' || text === '~') return null;\n if (/^-?\\d+$/.test(text)) return parseInt(text, 10);\n if (/^-?\\d+\\.\\d+$/.test(text)) return parseFloat(text);\n // Quoted string\n if ((text.startsWith('\"') && text.endsWith('\"')) || (text.startsWith(\"'\") && text.endsWith(\"'\"))) {\n return text.slice(1, -1);\n }\n return text;\n}\n\nfunction _countIndent(line: string): number {\n let i = 0;\n while (i < line.length && line[i] === ' ') i++;\n return i;\n}\n\nfunction _findNextContent(lines: string[], startIndex: number): number {\n for (let i = startIndex; i < lines.length; i++) {\n const t = lines[i].trim();\n if (t !== '' && !t.startsWith('#')) return i;\n }\n return -1;\n}\n\n// \u2500\u2500 PatternLibraryLoader \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\nexport class PatternLibraryLoader {\n /**\n * Load, validate, and merge rules from the builtin path and optional custom path.\n * User-supplied rules override bundled rules on id collision.\n */\n load(builtinPath: string, customPath?: string): PatternRule[] {\n const builtin = this._loadDirectory(builtinPath, 'builtin');\n const builtinMap = new Map<string, PatternRule>();\n for (const rule of builtin) builtinMap.set(rule.id, rule);\n\n if (!customPath) return builtin;\n\n const custom = this._loadDirectory(customPath, 'custom');\n const merged = new Map<string, PatternRule>(builtinMap);\n for (const rule of custom) {\n if (merged.has(rule.id)) {\n logWarn(`PatternLibraryLoader: custom rule \"${rule.id}\" overrides bundled rule`);\n }\n merged.set(rule.id, rule);\n }\n\n return [...merged.values()];\n }\n\n private _loadDirectory(dirPath: string, source: string): PatternRule[] {\n if (!fs.existsSync(dirPath)) {\n logWarn(`PatternLibraryLoader: ${source} library path does not exist: ${dirPath}`);\n return [];\n }\n\n const rules: PatternRule[] = [];\n const seenIds = new Map<string, string>();\n\n let files: string[];\n try {\n files = fs.readdirSync(dirPath).filter(f => f.endsWith('.yaml') || f.endsWith('.yml'));\n } catch (err) {\n logWarn(`PatternLibraryLoader: failed to read ${source} directory \"${dirPath}\": ${err instanceof Error ? err.message : String(err)}`);\n return [];\n }\n\n for (const file of files) {\n const filePath = path.join(dirPath, file);\n try {\n const text = fs.readFileSync(filePath, 'utf8');\n const parsed = _parseYaml(text);\n const rule = this._validate(parsed, filePath);\n if (!rule) continue;\n\n if (seenIds.has(rule.id)) {\n logWarn(`PatternLibraryLoader: duplicate rule id \"${rule.id}\" in ${source} library \u2014 found in \"${seenIds.get(rule.id)}\" and \"${filePath}\", using last loaded`);\n }\n seenIds.set(rule.id, filePath);\n rules.push(rule);\n } catch (err) {\n logWarn(`PatternLibraryLoader: failed to load rule file \"${filePath}\": ${err instanceof Error ? err.message : String(err)}`);\n }\n }\n\n return rules;\n }\n\n private _validate(parsed: Record<string, unknown>, filePath: string): PatternRule | null {\n const required = ['id', 'language', 'severity', 'owaspCategory', 'description', 'fixHint', 'rule'];\n for (const field of required) {\n if (parsed[field] === undefined || parsed[field] === null) {\n logWarn(`PatternLibraryLoader: rule file \"${filePath}\" is missing required field \"${field}\", skipping`);\n return null;\n }\n }\n\n const id = String(parsed['id']);\n const language = parsed['language'];\n const severity = String(parsed['severity']) as PatternRule['severity'];\n const owaspCategory = String(parsed['owaspCategory']);\n const description = String(parsed['description']);\n const fixHint = String(parsed['fixHint']);\n const rule = parsed['rule'];\n\n const validSeverities = new Set(['critical', 'high', 'medium', 'low']);\n if (!validSeverities.has(severity)) {\n logWarn(`PatternLibraryLoader: rule file \"${filePath}\" has invalid severity \"${severity}\", skipping`);\n return null;\n }\n\n if (typeof language !== 'string' && !Array.isArray(language)) {\n logWarn(`PatternLibraryLoader: rule file \"${filePath}\" has invalid language field, skipping`);\n return null;\n }\n\n if (typeof rule !== 'object' || Array.isArray(rule) || rule === null) {\n logWarn(`PatternLibraryLoader: rule file \"${filePath}\" has invalid rule field (must be an object), skipping`);\n return null;\n }\n\n return {\n id,\n language: Array.isArray(language) ? (language as string[]) : String(language),\n severity,\n owaspCategory,\n description,\n fixHint,\n rule: rule as Record<string, unknown>,\n };\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,42 @@
1
+ /**
2
+ * KiroGraph PatternRunner — lazy-loads @ast-grep/napi and executes pattern rules.
3
+ */
4
+ import { PatternRule, PatternMatch } from './types';
5
+ export declare class PatternRunner {
6
+ /**
7
+ * Synchronously check whether @ast-grep/napi is available.
8
+ */
9
+ isAvailable(): boolean;
10
+ /**
11
+ * Returns true if the language is supported by @ast-grep/napi.
12
+ * Unsupported languages must be skipped — calling parse() on them throws a
13
+ * native C++ exception that bypasses JS try/catch and corrupts internal mutexes.
14
+ */
15
+ isSupportedLanguage(language: string): boolean;
16
+ /**
17
+ * Lazy async loader — returns the napi module or null if missing.
18
+ */
19
+ getNapi(): Promise<any | null>;
20
+ /**
21
+ * Run a single library rule against a file's content.
22
+ * Returns an empty array and logs a warning on per-file errors.
23
+ */
24
+ runRule(rule: PatternRule, fileContent: string, language: string): Promise<PatternMatch[]>;
25
+ /**
26
+ * Run an inline pattern expression (not from library) against file content.
27
+ * Returns an empty array and logs a warning on per-file errors.
28
+ */
29
+ runInline(pattern: string, language: string, fileContent: string): Promise<PatternMatch[]>;
30
+ /**
31
+ * Run all rules against a file's content, filtered by severity threshold.
32
+ */
33
+ runAllRules(rules: PatternRule[], fileContent: string, language: string, threshold: PatternRule['severity']): Promise<PatternMatch[]>;
34
+ /**
35
+ * Apply the rule's fix template to all matches in the file content.
36
+ * Returns the transformed source string, or null if no fix was applied.
37
+ * Uses a range-based text substitution approach since commitEdits may not
38
+ * be available in all versions of @ast-grep/napi.
39
+ */
40
+ applyFix(filePath: string, fileContent: string, language: string, rule: PatternRule): Promise<string | null>;
41
+ }
42
+ //# sourceMappingURL=runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/patterns/runner.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,YAAY,EAAkB,MAAM,SAAS,CAAC;AAkDpE,qBAAa,aAAa;IACxB;;OAEG;IACH,WAAW,IAAI,OAAO;IAStB;;;;OAIG;IACH,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAI9C;;OAEG;IAEG,OAAO,IAAI,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC;IAIpC;;;OAGG;IACG,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAuChG;;;OAGG;IACG,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAqChG;;OAEG;IACG,WAAW,CACf,KAAK,EAAE,WAAW,EAAE,EACpB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,WAAW,CAAC,UAAU,CAAC,GACjC,OAAO,CAAC,YAAY,EAAE,CAAC;IAkB1B;;;;;OAKG;IACG,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAiEnH"}
@@ -0,0 +1,277 @@
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 __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var runner_exports = {};
30
+ __export(runner_exports, {
31
+ PatternRunner: () => PatternRunner
32
+ });
33
+ module.exports = __toCommonJS(runner_exports);
34
+ var import_types = require("./types");
35
+ var import_errors = require("../errors");
36
+ const NAPI_SUPPORTED_LANGUAGES = /* @__PURE__ */ new Set([
37
+ "javascript",
38
+ "typescript",
39
+ "tsx",
40
+ "jsx",
41
+ "python",
42
+ "go",
43
+ "rust",
44
+ "java",
45
+ "c",
46
+ "cpp",
47
+ "cs",
48
+ "swift",
49
+ "kotlin",
50
+ "html",
51
+ "css",
52
+ "json",
53
+ "yaml",
54
+ "bash",
55
+ "ruby",
56
+ "php",
57
+ "scala",
58
+ "haskell",
59
+ "lua",
60
+ "r",
61
+ "dart",
62
+ "elixir",
63
+ "erlang",
64
+ "ocaml"
65
+ ]);
66
+ let _napi = void 0;
67
+ let _napiWarnLogged = false;
68
+ async function getNapi() {
69
+ if (_napi !== void 0) return _napi;
70
+ try {
71
+ require.resolve("@ast-grep/napi");
72
+ _napi = require("@ast-grep/napi");
73
+ return _napi;
74
+ } catch {
75
+ _napi = null;
76
+ if (!_napiWarnLogged) {
77
+ (0, import_errors.logWarn)("PatternRunner: @ast-grep/napi is not installed. Pattern matching is disabled. Run: npm install @ast-grep/napi");
78
+ _napiWarnLogged = true;
79
+ }
80
+ return null;
81
+ }
82
+ }
83
+ function renderFix(fixTemplate, node) {
84
+ if (!fixTemplate) return void 0;
85
+ return fixTemplate.replace(/\$([A-Z_]+)/g, (_, varName) => {
86
+ try {
87
+ return node.getMatch(varName)?.text() ?? `$${varName}`;
88
+ } catch {
89
+ return `$${varName}`;
90
+ }
91
+ });
92
+ }
93
+ class PatternRunner {
94
+ /**
95
+ * Synchronously check whether @ast-grep/napi is available.
96
+ */
97
+ isAvailable() {
98
+ try {
99
+ require.resolve("@ast-grep/napi");
100
+ return true;
101
+ } catch {
102
+ return false;
103
+ }
104
+ }
105
+ /**
106
+ * Returns true if the language is supported by @ast-grep/napi.
107
+ * Unsupported languages must be skipped — calling parse() on them throws a
108
+ * native C++ exception that bypasses JS try/catch and corrupts internal mutexes.
109
+ */
110
+ isSupportedLanguage(language) {
111
+ return NAPI_SUPPORTED_LANGUAGES.has(language.toLowerCase());
112
+ }
113
+ /**
114
+ * Lazy async loader — returns the napi module or null if missing.
115
+ */
116
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
117
+ async getNapi() {
118
+ return getNapi();
119
+ }
120
+ /**
121
+ * Run a single library rule against a file's content.
122
+ * Returns an empty array and logs a warning on per-file errors.
123
+ */
124
+ async runRule(rule, fileContent, language) {
125
+ if (!this.isSupportedLanguage(language)) return [];
126
+ const napi = await getNapi();
127
+ if (!napi) return [];
128
+ try {
129
+ const { parse } = napi;
130
+ const root = parse(language, fileContent);
131
+ const nodes = root.root().findAll({ rule: rule.rule });
132
+ const lines = fileContent.split("\n");
133
+ return nodes.map((node) => {
134
+ const range = node.range();
135
+ const line = range.start.line + 1;
136
+ const col = range.start.column;
137
+ const matchText = node.text().slice(0, 500);
138
+ const context = _buildContext(lines, range.start.line);
139
+ const fixSuggestion = rule.fix ? renderFix(rule.fix, node) : void 0;
140
+ return {
141
+ patternId: rule.id,
142
+ filePath: "",
143
+ line,
144
+ col,
145
+ matchText,
146
+ context,
147
+ severity: rule.severity,
148
+ owaspCategory: rule.owaspCategory,
149
+ language,
150
+ ...fixSuggestion !== void 0 ? { fixSuggestion } : {}
151
+ };
152
+ });
153
+ } catch (err) {
154
+ (0, import_errors.logWarn)(`PatternRunner: error running rule "${rule.id}" on file (language: ${language}): ${err instanceof Error ? err.message : String(err)}`);
155
+ return [];
156
+ }
157
+ }
158
+ /**
159
+ * Run an inline pattern expression (not from library) against file content.
160
+ * Returns an empty array and logs a warning on per-file errors.
161
+ */
162
+ async runInline(pattern, language, fileContent) {
163
+ if (!this.isSupportedLanguage(language)) return [];
164
+ const napi = await getNapi();
165
+ if (!napi) return [];
166
+ try {
167
+ const { parse } = napi;
168
+ const root = parse(language, fileContent);
169
+ const nodes = root.root().findAll(pattern);
170
+ const lines = fileContent.split("\n");
171
+ return nodes.map((node) => {
172
+ const range = node.range();
173
+ const line = range.start.line + 1;
174
+ const col = range.start.column;
175
+ const matchText = node.text().slice(0, 500);
176
+ const context = _buildContext(lines, range.start.line);
177
+ return {
178
+ patternId: "",
179
+ filePath: "",
180
+ line,
181
+ col,
182
+ matchText,
183
+ context,
184
+ severity: "low",
185
+ owaspCategory: "",
186
+ language
187
+ };
188
+ });
189
+ } catch (err) {
190
+ (0, import_errors.logWarn)(`PatternRunner: error running inline pattern on file (language: ${language}): ${err instanceof Error ? err.message : String(err)}`);
191
+ return [];
192
+ }
193
+ }
194
+ /**
195
+ * Run all rules against a file's content, filtered by severity threshold.
196
+ */
197
+ async runAllRules(rules, fileContent, language, threshold) {
198
+ const napi = await getNapi();
199
+ if (!napi) return [];
200
+ const thresholdOrder = import_types.SEVERITY_ORDER[threshold];
201
+ const applicableRules = rules.filter((r) => {
202
+ const langs = Array.isArray(r.language) ? r.language : [r.language];
203
+ return langs.includes(language) && import_types.SEVERITY_ORDER[r.severity] >= thresholdOrder;
204
+ });
205
+ const results = [];
206
+ for (const rule of applicableRules) {
207
+ const matches = await this.runRule(rule, fileContent, language);
208
+ results.push(...matches);
209
+ }
210
+ return results;
211
+ }
212
+ /**
213
+ * Apply the rule's fix template to all matches in the file content.
214
+ * Returns the transformed source string, or null if no fix was applied.
215
+ * Uses a range-based text substitution approach since commitEdits may not
216
+ * be available in all versions of @ast-grep/napi.
217
+ */
218
+ async applyFix(filePath, fileContent, language, rule) {
219
+ const napi = await this.getNapi();
220
+ if (!napi || !rule.fix) return null;
221
+ try {
222
+ const { parse } = napi;
223
+ const root = parse(language, fileContent);
224
+ const nodes = root.root().findAll({ rule: rule.rule });
225
+ if (nodes.length === 0) return null;
226
+ try {
227
+ for (const node of nodes) {
228
+ const fixText = renderFix(rule.fix, node);
229
+ if (fixText) node.replace(fixText);
230
+ }
231
+ const edited = root.root().commitEdits?.();
232
+ if (typeof edited === "string") return edited;
233
+ } catch {
234
+ }
235
+ const edits = [];
236
+ for (const node of nodes) {
237
+ const fixText = renderFix(rule.fix, node);
238
+ if (fixText === void 0) continue;
239
+ const range = node.range();
240
+ const lines = fileContent.split("\n");
241
+ let startOffset = 0;
242
+ for (let i = 0; i < range.start.line; i++) {
243
+ startOffset += (lines[i]?.length ?? 0) + 1;
244
+ }
245
+ startOffset += range.start.column;
246
+ let endOffset = 0;
247
+ for (let i = 0; i < range.end.line; i++) {
248
+ endOffset += (lines[i]?.length ?? 0) + 1;
249
+ }
250
+ endOffset += range.end.column;
251
+ edits.push({ start: startOffset, end: endOffset, replacement: fixText });
252
+ }
253
+ if (edits.length === 0) return null;
254
+ edits.sort((a, b) => b.start - a.start);
255
+ let result = fileContent;
256
+ for (const edit of edits) {
257
+ result = result.slice(0, edit.start) + edit.replacement + result.slice(edit.end);
258
+ }
259
+ return result !== fileContent ? result : null;
260
+ } catch (err) {
261
+ (0, import_errors.logWarn)(`PatternRunner.applyFix: error applying fix for rule "${rule.id}" on "${filePath}": ${err instanceof Error ? err.message : String(err)}`);
262
+ return null;
263
+ }
264
+ }
265
+ }
266
+ function _buildContext(lines, zeroBasedLine) {
267
+ const contextLines = [];
268
+ if (zeroBasedLine > 0) contextLines.push(lines[zeroBasedLine - 1] ?? "");
269
+ contextLines.push(lines[zeroBasedLine] ?? "");
270
+ if (zeroBasedLine + 1 < lines.length) contextLines.push(lines[zeroBasedLine + 1] ?? "");
271
+ return contextLines.join("\n");
272
+ }
273
+ // Annotate the CommonJS export names for ESM import in node:
274
+ 0 && (module.exports = {
275
+ PatternRunner
276
+ });
277
+ //# sourceMappingURL=runner.js.map