kirograph 0.17.0 → 0.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (815) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +105 -1822
  3. package/dist/architecture/layers/dart.d.ts +10 -0
  4. package/dist/architecture/layers/dart.d.ts.map +1 -0
  5. package/dist/architecture/layers/dart.js +112 -0
  6. package/dist/architecture/layers/dart.js.map +7 -0
  7. package/dist/architecture/layers/elixir.d.ts +6 -0
  8. package/dist/architecture/layers/elixir.d.ts.map +1 -0
  9. package/dist/architecture/layers/index.d.ts.map +1 -1
  10. package/dist/architecture/layers/index.js +3 -1
  11. package/dist/architecture/layers/index.js.map +2 -2
  12. package/dist/architecture/layers/ocaml.d.ts +6 -0
  13. package/dist/architecture/layers/ocaml.d.ts.map +1 -0
  14. package/dist/architecture/layers/scala.d.ts +6 -0
  15. package/dist/architecture/layers/scala.d.ts.map +1 -0
  16. package/dist/architecture/layers/solidity.d.ts +6 -0
  17. package/dist/architecture/layers/solidity.d.ts.map +1 -0
  18. package/dist/architecture/layers/vue.d.ts +6 -0
  19. package/dist/architecture/layers/vue.d.ts.map +1 -0
  20. package/dist/architecture/manifest/elm.d.ts +3 -0
  21. package/dist/architecture/manifest/elm.d.ts.map +1 -0
  22. package/dist/architecture/manifest/index.d.ts.map +1 -1
  23. package/dist/architecture/manifest/ocaml.d.ts +3 -0
  24. package/dist/architecture/manifest/ocaml.d.ts.map +1 -0
  25. package/dist/architecture/manifest/scala.d.ts +3 -0
  26. package/dist/architecture/manifest/scala.d.ts.map +1 -0
  27. package/dist/bin/banner.d.ts.map +1 -1
  28. package/dist/bin/banner.js +74 -6
  29. package/dist/bin/banner.js.map +2 -2
  30. package/dist/bin/commands/affected.d.ts.map +1 -1
  31. package/dist/bin/commands/attack-surface.d.ts +3 -0
  32. package/dist/bin/commands/attack-surface.d.ts.map +1 -0
  33. package/dist/bin/commands/attack-surface.js +164 -0
  34. package/dist/bin/commands/attack-surface.js.map +7 -0
  35. package/dist/bin/commands/benchmark.d.ts +9 -0
  36. package/dist/bin/commands/benchmark.d.ts.map +1 -0
  37. package/dist/bin/commands/benchmark.js +206 -0
  38. package/dist/bin/commands/benchmark.js.map +7 -0
  39. package/dist/bin/commands/budget.d.ts +6 -0
  40. package/dist/bin/commands/budget.d.ts.map +1 -0
  41. package/dist/bin/commands/budget.js +70 -0
  42. package/dist/bin/commands/budget.js.map +7 -0
  43. package/dist/bin/commands/caveman.d.ts +7 -0
  44. package/dist/bin/commands/caveman.d.ts.map +1 -0
  45. package/dist/bin/commands/communities.d.ts +3 -0
  46. package/dist/bin/commands/communities.d.ts.map +1 -0
  47. package/dist/bin/commands/communities.js +77 -0
  48. package/dist/bin/commands/communities.js.map +7 -0
  49. package/dist/bin/commands/compression.d.ts +7 -0
  50. package/dist/bin/commands/compression.d.ts.map +1 -0
  51. package/dist/bin/commands/context.d.ts.map +1 -1
  52. package/dist/bin/commands/data.d.ts +3 -0
  53. package/dist/bin/commands/data.d.ts.map +1 -0
  54. package/dist/bin/commands/dead-code.d.ts +3 -0
  55. package/dist/bin/commands/dead-code.d.ts.map +1 -0
  56. package/dist/bin/commands/dep-confusion.d.ts +3 -0
  57. package/dist/bin/commands/dep-confusion.d.ts.map +1 -0
  58. package/dist/bin/commands/dep-confusion.js +119 -0
  59. package/dist/bin/commands/dep-confusion.js.map +7 -0
  60. package/dist/bin/commands/docs.d.ts +3 -0
  61. package/dist/bin/commands/docs.d.ts.map +1 -0
  62. package/dist/bin/commands/exec.d.ts +11 -0
  63. package/dist/bin/commands/exec.d.ts.map +1 -0
  64. package/dist/bin/commands/export.d.ts +3 -0
  65. package/dist/bin/commands/export.d.ts.map +1 -0
  66. package/dist/bin/commands/export.js +304 -10
  67. package/dist/bin/commands/export.js.map +2 -2
  68. package/dist/bin/commands/flows.d.ts +3 -0
  69. package/dist/bin/commands/flows.d.ts.map +1 -0
  70. package/dist/bin/commands/flows.js +97 -0
  71. package/dist/bin/commands/flows.js.map +7 -0
  72. package/dist/bin/commands/gain.d.ts +6 -0
  73. package/dist/bin/commands/gain.d.ts.map +1 -0
  74. package/dist/bin/commands/help.d.ts +7 -0
  75. package/dist/bin/commands/help.d.ts.map +1 -1
  76. package/dist/bin/commands/help.js +399 -101
  77. package/dist/bin/commands/help.js.map +2 -2
  78. package/dist/bin/commands/hotspots.d.ts +3 -0
  79. package/dist/bin/commands/hotspots.d.ts.map +1 -0
  80. package/dist/bin/commands/hotspots.js +94 -1
  81. package/dist/bin/commands/hotspots.js.map +3 -3
  82. package/dist/bin/commands/install.d.ts.map +1 -1
  83. package/dist/bin/commands/install.js +90 -8
  84. package/dist/bin/commands/install.js.map +2 -2
  85. package/dist/bin/commands/licenses.d.ts +3 -0
  86. package/dist/bin/commands/licenses.d.ts.map +1 -0
  87. package/dist/bin/commands/licenses.js +201 -0
  88. package/dist/bin/commands/licenses.js.map +7 -0
  89. package/dist/bin/commands/memory.d.ts +16 -0
  90. package/dist/bin/commands/memory.d.ts.map +1 -0
  91. package/dist/bin/commands/memory.js +151 -4
  92. package/dist/bin/commands/memory.js.map +2 -2
  93. package/dist/bin/commands/path.d.ts +3 -0
  94. package/dist/bin/commands/path.d.ts.map +1 -0
  95. package/dist/bin/commands/pattern.d.ts +3 -0
  96. package/dist/bin/commands/pattern.d.ts.map +1 -0
  97. package/dist/bin/commands/pattern.js +592 -0
  98. package/dist/bin/commands/pattern.js.map +7 -0
  99. package/dist/bin/commands/query.d.ts.map +1 -1
  100. package/dist/bin/commands/reachability.d.ts +3 -0
  101. package/dist/bin/commands/reachability.d.ts.map +1 -0
  102. package/dist/bin/commands/reachability.js +160 -0
  103. package/dist/bin/commands/reachability.js.map +7 -0
  104. package/dist/bin/commands/read.d.ts +6 -0
  105. package/dist/bin/commands/read.d.ts.map +1 -0
  106. package/dist/bin/commands/read.js +100 -0
  107. package/dist/bin/commands/read.js.map +7 -0
  108. package/dist/bin/commands/refactor.d.ts +3 -0
  109. package/dist/bin/commands/refactor.d.ts.map +1 -0
  110. package/dist/bin/commands/refactor.js +116 -0
  111. package/dist/bin/commands/refactor.js.map +7 -0
  112. package/dist/bin/commands/remediation.d.ts +3 -0
  113. package/dist/bin/commands/remediation.d.ts.map +1 -0
  114. package/dist/bin/commands/remediation.js +133 -0
  115. package/dist/bin/commands/remediation.js.map +7 -0
  116. package/dist/bin/commands/sbom.d.ts +3 -0
  117. package/dist/bin/commands/sbom.d.ts.map +1 -0
  118. package/dist/bin/commands/sbom.js +76 -0
  119. package/dist/bin/commands/sbom.js.map +7 -0
  120. package/dist/bin/commands/security-ci-report.d.ts +9 -0
  121. package/dist/bin/commands/security-ci-report.d.ts.map +1 -0
  122. package/dist/bin/commands/security-ci-report.js +267 -0
  123. package/dist/bin/commands/security-ci-report.js.map +7 -0
  124. package/dist/bin/commands/security-export.d.ts +2 -0
  125. package/dist/bin/commands/security-export.d.ts.map +1 -0
  126. package/dist/bin/commands/security-export.js +1349 -0
  127. package/dist/bin/commands/security-export.js.map +7 -0
  128. package/dist/bin/commands/security-flows.d.ts +3 -0
  129. package/dist/bin/commands/security-flows.d.ts.map +1 -0
  130. package/dist/bin/commands/security-flows.js +126 -0
  131. package/dist/bin/commands/security-flows.js.map +7 -0
  132. package/dist/bin/commands/security-secrets.d.ts +3 -0
  133. package/dist/bin/commands/security-secrets.d.ts.map +1 -0
  134. package/dist/bin/commands/security-secrets.js +170 -0
  135. package/dist/bin/commands/security-secrets.js.map +7 -0
  136. package/dist/bin/commands/security.d.ts +3 -0
  137. package/dist/bin/commands/security.d.ts.map +1 -0
  138. package/dist/bin/commands/security.js +208 -0
  139. package/dist/bin/commands/security.js.map +7 -0
  140. package/dist/bin/commands/snapshot.d.ts +3 -0
  141. package/dist/bin/commands/snapshot.d.ts.map +1 -0
  142. package/dist/bin/commands/staleness.d.ts +3 -0
  143. package/dist/bin/commands/staleness.d.ts.map +1 -0
  144. package/dist/bin/commands/staleness.js +144 -0
  145. package/dist/bin/commands/staleness.js.map +7 -0
  146. package/dist/bin/commands/status.d.ts.map +1 -1
  147. package/dist/bin/commands/status.js +129 -2
  148. package/dist/bin/commands/status.js.map +2 -2
  149. package/dist/bin/commands/supply-chain.d.ts +3 -0
  150. package/dist/bin/commands/supply-chain.d.ts.map +1 -0
  151. package/dist/bin/commands/supply-chain.js +138 -0
  152. package/dist/bin/commands/supply-chain.js.map +7 -0
  153. package/dist/bin/commands/surprising.d.ts +3 -0
  154. package/dist/bin/commands/surprising.d.ts.map +1 -0
  155. package/dist/bin/commands/sync.d.ts.map +1 -1
  156. package/dist/bin/commands/uninit.d.ts.map +1 -1
  157. package/dist/bin/commands/uninit.js +109 -60
  158. package/dist/bin/commands/uninit.js.map +2 -2
  159. package/dist/bin/commands/utils.d.ts +5 -0
  160. package/dist/bin/commands/utils.d.ts.map +1 -1
  161. package/dist/bin/commands/vex.d.ts +3 -0
  162. package/dist/bin/commands/vex.d.ts.map +1 -0
  163. package/dist/bin/commands/vex.js +76 -0
  164. package/dist/bin/commands/vex.js.map +7 -0
  165. package/dist/bin/commands/vuln-suppress.d.ts +3 -0
  166. package/dist/bin/commands/vuln-suppress.d.ts.map +1 -0
  167. package/dist/bin/commands/vuln-suppress.js +95 -0
  168. package/dist/bin/commands/vuln-suppress.js.map +7 -0
  169. package/dist/bin/commands/vulns.d.ts +3 -0
  170. package/dist/bin/commands/vulns.d.ts.map +1 -0
  171. package/dist/bin/commands/vulns.js +382 -0
  172. package/dist/bin/commands/vulns.js.map +7 -0
  173. package/dist/bin/installer/archive.d.ts +47 -0
  174. package/dist/bin/installer/archive.d.ts.map +1 -0
  175. package/dist/bin/installer/auto-detect.d.ts +16 -0
  176. package/dist/bin/installer/auto-detect.d.ts.map +1 -0
  177. package/dist/bin/installer/auto-detect.js +125 -0
  178. package/dist/bin/installer/auto-detect.js.map +7 -0
  179. package/dist/bin/installer/caveman.d.ts +12 -0
  180. package/dist/bin/installer/caveman.d.ts.map +1 -0
  181. package/dist/bin/installer/cli-agent.d.ts +7 -2
  182. package/dist/bin/installer/cli-agent.d.ts.map +1 -1
  183. package/dist/bin/installer/cli-agent.js +32 -5
  184. package/dist/bin/installer/cli-agent.js.map +2 -2
  185. package/dist/bin/installer/common.d.ts +36 -0
  186. package/dist/bin/installer/common.d.ts.map +1 -0
  187. package/dist/bin/installer/common.js +48 -0
  188. package/dist/bin/installer/common.js.map +2 -2
  189. package/dist/bin/installer/config-prompt.d.ts +1 -1
  190. package/dist/bin/installer/config-prompt.d.ts.map +1 -1
  191. package/dist/bin/installer/config-prompt.js +85 -2
  192. package/dist/bin/installer/config-prompt.js.map +2 -2
  193. package/dist/bin/installer/dashboard.d.ts.map +1 -1
  194. package/dist/bin/installer/detect.d.ts +30 -0
  195. package/dist/bin/installer/detect.d.ts.map +1 -0
  196. package/dist/bin/installer/detect.js +309 -0
  197. package/dist/bin/installer/detect.js.map +7 -0
  198. package/dist/bin/installer/hooks.d.ts +4 -1
  199. package/dist/bin/installer/hooks.d.ts.map +1 -1
  200. package/dist/bin/installer/hooks.js +34 -0
  201. package/dist/bin/installer/hooks.js.map +2 -2
  202. package/dist/bin/installer/index.d.ts +5 -4
  203. package/dist/bin/installer/index.d.ts.map +1 -1
  204. package/dist/bin/installer/index.js +46 -8
  205. package/dist/bin/installer/index.js.map +2 -2
  206. package/dist/bin/installer/instructions.d.ts +14 -0
  207. package/dist/bin/installer/instructions.d.ts.map +1 -0
  208. package/dist/bin/installer/instructions.js +209 -3
  209. package/dist/bin/installer/instructions.js.map +2 -2
  210. package/dist/bin/installer/mcp.d.ts.map +1 -1
  211. package/dist/bin/installer/prompts.d.ts +17 -0
  212. package/dist/bin/installer/prompts.d.ts.map +1 -1
  213. package/dist/bin/installer/qdrant-dashboard.d.ts.map +1 -1
  214. package/dist/bin/installer/steering.d.ts +14 -2
  215. package/dist/bin/installer/steering.d.ts.map +1 -1
  216. package/dist/bin/installer/steering.js +488 -0
  217. package/dist/bin/installer/steering.js.map +2 -2
  218. package/dist/bin/installer/targets/aider.d.ts +6 -0
  219. package/dist/bin/installer/targets/aider.d.ts.map +1 -0
  220. package/dist/bin/installer/targets/aider.js +3 -3
  221. package/dist/bin/installer/targets/aider.js.map +2 -2
  222. package/dist/bin/installer/targets/amp.d.ts +6 -0
  223. package/dist/bin/installer/targets/amp.d.ts.map +1 -0
  224. package/dist/bin/installer/targets/amp.js +3 -3
  225. package/dist/bin/installer/targets/amp.js.map +2 -2
  226. package/dist/bin/installer/targets/antigravity.d.ts +13 -0
  227. package/dist/bin/installer/targets/antigravity.d.ts.map +1 -0
  228. package/dist/bin/installer/targets/antigravity.js +35 -6
  229. package/dist/bin/installer/targets/antigravity.js.map +2 -2
  230. package/dist/bin/installer/targets/augment.d.ts +6 -0
  231. package/dist/bin/installer/targets/augment.d.ts.map +1 -0
  232. package/dist/bin/installer/targets/augment.js +3 -3
  233. package/dist/bin/installer/targets/augment.js.map +2 -2
  234. package/dist/bin/installer/targets/claude.d.ts +6 -0
  235. package/dist/bin/installer/targets/claude.d.ts.map +1 -0
  236. package/dist/bin/installer/targets/claude.js +49 -5
  237. package/dist/bin/installer/targets/claude.js.map +2 -2
  238. package/dist/bin/installer/targets/cline.d.ts +13 -0
  239. package/dist/bin/installer/targets/cline.d.ts.map +1 -0
  240. package/dist/bin/installer/targets/cline.js +32 -6
  241. package/dist/bin/installer/targets/cline.js.map +2 -2
  242. package/dist/bin/installer/targets/codex.d.ts +6 -0
  243. package/dist/bin/installer/targets/codex.d.ts.map +1 -0
  244. package/dist/bin/installer/targets/codex.js +64 -12
  245. package/dist/bin/installer/targets/codex.js.map +2 -2
  246. package/dist/bin/installer/targets/continue.d.ts +12 -0
  247. package/dist/bin/installer/targets/continue.d.ts.map +1 -0
  248. package/dist/bin/installer/targets/continue.js +2 -2
  249. package/dist/bin/installer/targets/continue.js.map +2 -2
  250. package/dist/bin/installer/targets/copilot-cli.d.ts +12 -0
  251. package/dist/bin/installer/targets/copilot-cli.d.ts.map +1 -0
  252. package/dist/bin/installer/targets/copilot-cli.js +101 -0
  253. package/dist/bin/installer/targets/copilot-cli.js.map +7 -0
  254. package/dist/bin/installer/targets/copilot.d.ts +6 -0
  255. package/dist/bin/installer/targets/copilot.d.ts.map +1 -0
  256. package/dist/bin/installer/targets/copilot.js +31 -5
  257. package/dist/bin/installer/targets/copilot.js.map +2 -2
  258. package/dist/bin/installer/targets/cursor.d.ts +6 -0
  259. package/dist/bin/installer/targets/cursor.d.ts.map +1 -0
  260. package/dist/bin/installer/targets/cursor.js +4 -4
  261. package/dist/bin/installer/targets/cursor.js.map +2 -2
  262. package/dist/bin/installer/targets/devin.d.ts +13 -0
  263. package/dist/bin/installer/targets/devin.d.ts.map +1 -0
  264. package/dist/bin/installer/targets/devin.js +2 -2
  265. package/dist/bin/installer/targets/devin.js.map +2 -2
  266. package/dist/bin/installer/targets/gemini-cli.d.ts +16 -0
  267. package/dist/bin/installer/targets/gemini-cli.d.ts.map +1 -0
  268. package/dist/bin/installer/targets/gemini-cli.js +2 -2
  269. package/dist/bin/installer/targets/gemini-cli.js.map +2 -2
  270. package/dist/bin/installer/targets/generic.d.ts +59 -0
  271. package/dist/bin/installer/targets/generic.d.ts.map +1 -0
  272. package/dist/bin/installer/targets/generic.js +2 -14
  273. package/dist/bin/installer/targets/generic.js.map +2 -2
  274. package/dist/bin/installer/targets/goose.d.ts +6 -0
  275. package/dist/bin/installer/targets/goose.d.ts.map +1 -0
  276. package/dist/bin/installer/targets/goose.js +3 -3
  277. package/dist/bin/installer/targets/goose.js.map +2 -2
  278. package/dist/bin/installer/targets/index.d.ts +11 -0
  279. package/dist/bin/installer/targets/index.d.ts.map +1 -0
  280. package/dist/bin/installer/targets/index.js +250 -0
  281. package/dist/bin/installer/targets/index.js.map +2 -2
  282. package/dist/bin/installer/targets/junie.d.ts +13 -0
  283. package/dist/bin/installer/targets/junie.d.ts.map +1 -0
  284. package/dist/bin/installer/targets/junie.js +2 -2
  285. package/dist/bin/installer/targets/junie.js.map +2 -2
  286. package/dist/bin/installer/targets/kilo.d.ts +12 -0
  287. package/dist/bin/installer/targets/kilo.d.ts.map +1 -0
  288. package/dist/bin/installer/targets/kilo.js +2 -2
  289. package/dist/bin/installer/targets/kilo.js.map +2 -2
  290. package/dist/bin/installer/targets/kiro.d.ts +5 -0
  291. package/dist/bin/installer/targets/kiro.d.ts.map +1 -0
  292. package/dist/bin/installer/targets/kiro.js +4 -4
  293. package/dist/bin/installer/targets/kiro.js.map +2 -2
  294. package/dist/bin/installer/targets/opencode.d.ts +13 -0
  295. package/dist/bin/installer/targets/opencode.d.ts.map +1 -0
  296. package/dist/bin/installer/targets/opencode.js +2 -2
  297. package/dist/bin/installer/targets/opencode.js.map +2 -2
  298. package/dist/bin/installer/targets/openhands.d.ts +6 -0
  299. package/dist/bin/installer/targets/openhands.d.ts.map +1 -0
  300. package/dist/bin/installer/targets/openhands.js +3 -3
  301. package/dist/bin/installer/targets/openhands.js.map +2 -2
  302. package/dist/bin/installer/targets/qoder.d.ts +12 -0
  303. package/dist/bin/installer/targets/qoder.d.ts.map +1 -0
  304. package/dist/bin/installer/targets/qoder.js +91 -0
  305. package/dist/bin/installer/targets/qoder.js.map +7 -0
  306. package/dist/bin/installer/targets/qwen.d.ts +12 -0
  307. package/dist/bin/installer/targets/qwen.d.ts.map +1 -0
  308. package/dist/bin/installer/targets/qwen.js +96 -0
  309. package/dist/bin/installer/targets/qwen.js.map +7 -0
  310. package/dist/bin/installer/targets/replit.d.ts +6 -0
  311. package/dist/bin/installer/targets/replit.d.ts.map +1 -0
  312. package/dist/bin/installer/targets/replit.js +3 -3
  313. package/dist/bin/installer/targets/replit.js.map +2 -2
  314. package/dist/bin/installer/targets/roo.d.ts +13 -0
  315. package/dist/bin/installer/targets/roo.d.ts.map +1 -0
  316. package/dist/bin/installer/targets/roo.js +2 -2
  317. package/dist/bin/installer/targets/roo.js.map +2 -2
  318. package/dist/bin/installer/targets/tabnine.d.ts +6 -0
  319. package/dist/bin/installer/targets/tabnine.d.ts.map +1 -0
  320. package/dist/bin/installer/targets/tabnine.js +3 -3
  321. package/dist/bin/installer/targets/tabnine.js.map +2 -2
  322. package/dist/bin/installer/targets/trae.d.ts +6 -0
  323. package/dist/bin/installer/targets/trae.d.ts.map +1 -0
  324. package/dist/bin/installer/targets/trae.js +5 -5
  325. package/dist/bin/installer/targets/trae.js.map +2 -2
  326. package/dist/bin/installer/targets/warp.d.ts +12 -0
  327. package/dist/bin/installer/targets/warp.d.ts.map +1 -0
  328. package/dist/bin/installer/targets/warp.js +2 -2
  329. package/dist/bin/installer/targets/warp.js.map +2 -2
  330. package/dist/bin/installer/targets/windsurf.d.ts +13 -0
  331. package/dist/bin/installer/targets/windsurf.d.ts.map +1 -0
  332. package/dist/bin/installer/targets/windsurf.js +35 -6
  333. package/dist/bin/installer/targets/windsurf.js.map +2 -2
  334. package/dist/bin/kirograph.js +74 -6
  335. package/dist/bin/kirograph.js.map +3 -3
  336. package/dist/bin/progress.d.ts +16 -1
  337. package/dist/bin/progress.d.ts.map +1 -1
  338. package/dist/compression/filters/aws.d.ts +9 -0
  339. package/dist/compression/filters/aws.d.ts.map +1 -0
  340. package/dist/compression/filters/docker.d.ts +6 -0
  341. package/dist/compression/filters/docker.d.ts.map +1 -0
  342. package/dist/compression/filters/files.d.ts +6 -0
  343. package/dist/compression/filters/files.d.ts.map +1 -0
  344. package/dist/compression/filters/generic.d.ts +7 -0
  345. package/dist/compression/filters/generic.d.ts.map +1 -0
  346. package/dist/compression/filters/git.d.ts +6 -0
  347. package/dist/compression/filters/git.d.ts.map +1 -0
  348. package/dist/compression/filters/github.d.ts +6 -0
  349. package/dist/compression/filters/github.d.ts.map +1 -0
  350. package/dist/compression/filters/lint.d.ts +6 -0
  351. package/dist/compression/filters/lint.d.ts.map +1 -0
  352. package/dist/compression/filters/misc.d.ts +6 -0
  353. package/dist/compression/filters/misc.d.ts.map +1 -0
  354. package/dist/compression/filters/package.d.ts +6 -0
  355. package/dist/compression/filters/package.d.ts.map +1 -0
  356. package/dist/compression/filters/test.d.ts +6 -0
  357. package/dist/compression/filters/test.d.ts.map +1 -0
  358. package/dist/compression/index.d.ts +29 -0
  359. package/dist/compression/index.d.ts.map +1 -0
  360. package/dist/compression/naive-cost.d.ts +26 -0
  361. package/dist/compression/naive-cost.d.ts.map +1 -0
  362. package/dist/compression/tracker.d.ts +155 -0
  363. package/dist/compression/tracker.d.ts.map +1 -0
  364. package/dist/compression/tracker.js +80 -0
  365. package/dist/compression/tracker.js.map +2 -2
  366. package/dist/compression/types.d.ts +49 -0
  367. package/dist/compression/types.d.ts.map +1 -0
  368. package/dist/config.d.ts +90 -0
  369. package/dist/config.d.ts.map +1 -1
  370. package/dist/config.js +144 -3
  371. package/dist/config.js.map +2 -2
  372. package/dist/core/lock-manager.d.ts +2 -0
  373. package/dist/core/lock-manager.d.ts.map +1 -1
  374. package/dist/core/pipeline.d.ts +4 -1
  375. package/dist/core/pipeline.d.ts.map +1 -1
  376. package/dist/core/pipeline.js +78 -2
  377. package/dist/core/pipeline.js.map +2 -2
  378. package/dist/core/snapshot.d.ts +58 -0
  379. package/dist/core/snapshot.d.ts.map +1 -0
  380. package/dist/data/filters.d.ts +23 -0
  381. package/dist/data/filters.d.ts.map +1 -0
  382. package/dist/data/indexer.d.ts +25 -0
  383. package/dist/data/indexer.d.ts.map +1 -0
  384. package/dist/data/linker.d.ts +37 -0
  385. package/dist/data/linker.d.ts.map +1 -0
  386. package/dist/data/lint.d.ts +27 -0
  387. package/dist/data/lint.d.ts.map +1 -0
  388. package/dist/data/parsers/csv.d.ts +11 -0
  389. package/dist/data/parsers/csv.d.ts.map +1 -0
  390. package/dist/data/parsers/excel.d.ts +10 -0
  391. package/dist/data/parsers/excel.d.ts.map +1 -0
  392. package/dist/data/parsers/index.d.ts +28 -0
  393. package/dist/data/parsers/index.d.ts.map +1 -0
  394. package/dist/data/parsers/json-array.d.ts +9 -0
  395. package/dist/data/parsers/json-array.d.ts.map +1 -0
  396. package/dist/data/parsers/jsonl.d.ts +9 -0
  397. package/dist/data/parsers/jsonl.d.ts.map +1 -0
  398. package/dist/data/parsers/parquet.d.ts +10 -0
  399. package/dist/data/parsers/parquet.d.ts.map +1 -0
  400. package/dist/data/profiler.d.ts +29 -0
  401. package/dist/data/profiler.d.ts.map +1 -0
  402. package/dist/data/queries.d.ts +95 -0
  403. package/dist/data/queries.d.ts.map +1 -0
  404. package/dist/data/types.d.ts +103 -0
  405. package/dist/data/types.d.ts.map +1 -0
  406. package/dist/db/database.d.ts +57 -0
  407. package/dist/db/database.d.ts.map +1 -1
  408. package/dist/db/database.js +75 -5
  409. package/dist/db/database.js.map +2 -2
  410. package/dist/db/memory-schema.sql +5 -1
  411. package/dist/db/patterns-schema.sql +23 -0
  412. package/dist/db/schema.sql +3 -1
  413. package/dist/db/security-schema.sql +72 -0
  414. package/dist/docs/formats/asciidoc.d.ts +9 -0
  415. package/dist/docs/formats/asciidoc.d.ts.map +1 -0
  416. package/dist/docs/formats/html.d.ts +10 -0
  417. package/dist/docs/formats/html.d.ts.map +1 -0
  418. package/dist/docs/formats/index.d.ts +31 -0
  419. package/dist/docs/formats/index.d.ts.map +1 -0
  420. package/dist/docs/formats/markdown.d.ts +11 -0
  421. package/dist/docs/formats/markdown.d.ts.map +1 -0
  422. package/dist/docs/formats/openapi.d.ts +17 -0
  423. package/dist/docs/formats/openapi.d.ts.map +1 -0
  424. package/dist/docs/formats/org.d.ts +9 -0
  425. package/dist/docs/formats/org.d.ts.map +1 -0
  426. package/dist/docs/formats/plaintext.d.ts +11 -0
  427. package/dist/docs/formats/plaintext.d.ts.map +1 -0
  428. package/dist/docs/formats/rdoc.d.ts +10 -0
  429. package/dist/docs/formats/rdoc.d.ts.map +1 -0
  430. package/dist/docs/formats/rst.d.ts +11 -0
  431. package/dist/docs/formats/rst.d.ts.map +1 -0
  432. package/dist/docs/indexer.d.ts +49 -0
  433. package/dist/docs/indexer.d.ts.map +1 -0
  434. package/dist/docs/linker.d.ts +30 -0
  435. package/dist/docs/linker.d.ts.map +1 -0
  436. package/dist/docs/lint.d.ts +27 -0
  437. package/dist/docs/lint.d.ts.map +1 -0
  438. package/dist/docs/queries.d.ts +78 -0
  439. package/dist/docs/queries.d.ts.map +1 -0
  440. package/dist/docs/section-id.d.ts +48 -0
  441. package/dist/docs/section-id.d.ts.map +1 -0
  442. package/dist/docs/summarizer.d.ts +13 -0
  443. package/dist/docs/summarizer.d.ts.map +1 -0
  444. package/dist/docs/types.d.ts +71 -0
  445. package/dist/docs/types.d.ts.map +1 -0
  446. package/dist/docs/vectors.d.ts +54 -0
  447. package/dist/docs/vectors.d.ts.map +1 -0
  448. package/dist/extraction/extractor.d.ts +1 -1
  449. package/dist/extraction/extractor.d.ts.map +1 -1
  450. package/dist/extraction/extractor.js +81 -0
  451. package/dist/extraction/extractor.js.map +2 -2
  452. package/dist/extraction/grammars.d.ts +6 -0
  453. package/dist/extraction/grammars.d.ts.map +1 -1
  454. package/dist/extraction/grammars.js +32 -8
  455. package/dist/extraction/grammars.js.map +2 -2
  456. package/dist/extraction/languages.d.ts.map +1 -1
  457. package/dist/extraction/languages.js +43 -1
  458. package/dist/extraction/languages.js.map +2 -2
  459. package/dist/extraction/notebook.d.ts +14 -0
  460. package/dist/extraction/notebook.d.ts.map +1 -0
  461. package/dist/extraction/notebook.js +300 -0
  462. package/dist/extraction/notebook.js.map +7 -0
  463. package/dist/extraction/wasm/tree-sitter-astro.wasm +0 -0
  464. package/dist/extraction/wasm/tree-sitter-gdscript.wasm +0 -0
  465. package/dist/extraction/wasm/tree-sitter-julia.wasm +0 -0
  466. package/dist/extraction/wasm/tree-sitter-nix.wasm +0 -0
  467. package/dist/extraction/wasm/tree-sitter-perl.wasm +0 -0
  468. package/dist/extraction/wasm/tree-sitter-powershell.wasm +0 -0
  469. package/dist/extraction/wasm/tree-sitter-r.wasm +0 -0
  470. package/dist/extraction/wasm/tree-sitter-sql.wasm +0 -0
  471. package/dist/extraction/wasm/tree-sitter-verilog.wasm +0 -0
  472. package/dist/frameworks/amplify.d.ts +9 -0
  473. package/dist/frameworks/amplify.d.ts.map +1 -0
  474. package/dist/frameworks/angular.d.ts +9 -0
  475. package/dist/frameworks/angular.d.ts.map +1 -0
  476. package/dist/frameworks/ansible.d.ts +8 -0
  477. package/dist/frameworks/ansible.d.ts.map +1 -0
  478. package/dist/frameworks/cloudformation.d.ts +9 -0
  479. package/dist/frameworks/cloudformation.d.ts.map +1 -0
  480. package/dist/frameworks/docker.d.ts +9 -0
  481. package/dist/frameworks/docker.d.ts.map +1 -0
  482. package/dist/frameworks/elixir.d.ts +6 -0
  483. package/dist/frameworks/elixir.d.ts.map +1 -0
  484. package/dist/frameworks/flutter.d.ts +12 -0
  485. package/dist/frameworks/flutter.d.ts.map +1 -0
  486. package/dist/frameworks/flutter.js +130 -0
  487. package/dist/frameworks/flutter.js.map +7 -0
  488. package/dist/frameworks/iac.d.ts +10 -0
  489. package/dist/frameworks/iac.d.ts.map +1 -0
  490. package/dist/frameworks/index.d.ts +14 -0
  491. package/dist/frameworks/index.d.ts.map +1 -1
  492. package/dist/frameworks/index.js +7 -1
  493. package/dist/frameworks/index.js.map +3 -3
  494. package/dist/frameworks/kubernetes.d.ts +9 -0
  495. package/dist/frameworks/kubernetes.d.ts.map +1 -0
  496. package/dist/frameworks/pulumi.d.ts +9 -0
  497. package/dist/frameworks/pulumi.d.ts.map +1 -0
  498. package/dist/frameworks/scala.d.ts +6 -0
  499. package/dist/frameworks/scala.d.ts.map +1 -0
  500. package/dist/frameworks/solidity.d.ts +6 -0
  501. package/dist/frameworks/solidity.d.ts.map +1 -0
  502. package/dist/frameworks/terraform.d.ts +14 -0
  503. package/dist/frameworks/terraform.d.ts.map +1 -0
  504. package/dist/frameworks/vue.d.ts +7 -0
  505. package/dist/frameworks/vue.d.ts.map +1 -0
  506. package/dist/graph/communities.d.ts +43 -0
  507. package/dist/graph/communities.d.ts.map +1 -0
  508. package/dist/graph/communities.js +317 -0
  509. package/dist/graph/communities.js.map +7 -0
  510. package/dist/graph/flows.d.ts +55 -0
  511. package/dist/graph/flows.d.ts.map +1 -0
  512. package/dist/graph/flows.js +138 -0
  513. package/dist/graph/flows.js.map +7 -0
  514. package/dist/graph/refactor.d.ts +43 -0
  515. package/dist/graph/refactor.d.ts.map +1 -0
  516. package/dist/graph/refactor.js +155 -0
  517. package/dist/graph/refactor.js.map +7 -0
  518. package/dist/index.d.ts +36 -4
  519. package/dist/index.d.ts.map +1 -1
  520. package/dist/index.js +1 -1
  521. package/dist/index.js.map +2 -2
  522. package/dist/mcp/cache.d.ts +69 -0
  523. package/dist/mcp/cache.d.ts.map +1 -0
  524. package/dist/mcp/cache.js +172 -0
  525. package/dist/mcp/cache.js.map +7 -0
  526. package/dist/mcp/read-modes.d.ts +31 -0
  527. package/dist/mcp/read-modes.d.ts.map +1 -0
  528. package/dist/mcp/read-modes.js +295 -0
  529. package/dist/mcp/read-modes.js.map +7 -0
  530. package/dist/mcp/server.d.ts +1 -0
  531. package/dist/mcp/server.d.ts.map +1 -1
  532. package/dist/mcp/server.js +17 -3
  533. package/dist/mcp/server.js.map +2 -2
  534. package/dist/mcp/tool-names.d.ts +2 -0
  535. package/dist/mcp/tool-names.d.ts.map +1 -0
  536. package/dist/mcp/tool-names.js +24 -1
  537. package/dist/mcp/tool-names.js.map +2 -2
  538. package/dist/mcp/tools.d.ts +12 -0
  539. package/dist/mcp/tools.d.ts.map +1 -1
  540. package/dist/mcp/tools.js +1560 -4
  541. package/dist/mcp/tools.js.map +3 -3
  542. package/dist/memory/compress.d.ts +19 -0
  543. package/dist/memory/compress.d.ts.map +1 -0
  544. package/dist/memory/database.d.ts +92 -0
  545. package/dist/memory/database.d.ts.map +1 -0
  546. package/dist/memory/database.js +70 -2
  547. package/dist/memory/database.js.map +2 -2
  548. package/dist/memory/index.d.ts +71 -0
  549. package/dist/memory/index.d.ts.map +1 -0
  550. package/dist/memory/index.js +12 -2
  551. package/dist/memory/index.js.map +2 -2
  552. package/dist/memory/symbols.d.ts +21 -0
  553. package/dist/memory/symbols.d.ts.map +1 -0
  554. package/dist/memory/types.d.ts +78 -0
  555. package/dist/memory/types.d.ts.map +1 -0
  556. package/dist/memory/types.js.map +1 -1
  557. package/dist/memory/vectors.d.ts +43 -0
  558. package/dist/memory/vectors.d.ts.map +1 -0
  559. package/dist/patterns/graph.d.ts +16 -0
  560. package/dist/patterns/graph.d.ts.map +1 -0
  561. package/dist/patterns/graph.js +45 -0
  562. package/dist/patterns/graph.js.map +7 -0
  563. package/dist/patterns/index.d.ts +4 -0
  564. package/dist/patterns/index.d.ts.map +1 -0
  565. package/dist/patterns/index.js +39 -0
  566. package/dist/patterns/index.js.map +7 -0
  567. package/dist/patterns/indexer.d.ts +15 -0
  568. package/dist/patterns/indexer.d.ts.map +1 -0
  569. package/dist/patterns/indexer.js +97 -0
  570. package/dist/patterns/indexer.js.map +7 -0
  571. package/dist/patterns/library/command-injection-go.yaml +11 -0
  572. package/dist/patterns/library/dangerous-eval-js.yaml +14 -0
  573. package/dist/patterns/library/dangerous-exec-py.yaml +13 -0
  574. package/dist/patterns/library/dangerous-reflection-java.yaml +8 -0
  575. package/dist/patterns/library/path-traversal-go.yaml +11 -0
  576. package/dist/patterns/library/path-traversal-py.yaml +12 -0
  577. package/dist/patterns/library/path-traversal-readfile-js.yaml +14 -0
  578. package/dist/patterns/library/prototype-pollution-js.yaml +12 -0
  579. package/dist/patterns/library/sql-injection-concat-js.yaml +12 -0
  580. package/dist/patterns/library/sql-injection-java.yaml +13 -0
  581. package/dist/patterns/library/sql-injection-py.yaml +12 -0
  582. package/dist/patterns/library/sql-injection-template-js.yaml +13 -0
  583. package/dist/patterns/library/weak-crypto-md5-js.yaml +13 -0
  584. package/dist/patterns/library/weak-crypto-py.yaml +13 -0
  585. package/dist/patterns/loader.d.ts +18 -0
  586. package/dist/patterns/loader.d.ts.map +1 -0
  587. package/dist/patterns/loader.js +277 -0
  588. package/dist/patterns/loader.js.map +7 -0
  589. package/dist/patterns/runner.d.ts +42 -0
  590. package/dist/patterns/runner.d.ts.map +1 -0
  591. package/dist/patterns/runner.js +277 -0
  592. package/dist/patterns/runner.js.map +7 -0
  593. package/dist/patterns/types.d.ts +27 -0
  594. package/dist/patterns/types.d.ts.map +1 -0
  595. package/dist/patterns/types.js +34 -0
  596. package/dist/patterns/types.js.map +7 -0
  597. package/dist/resolution/bridges/android-rn.d.ts +13 -0
  598. package/dist/resolution/bridges/android-rn.d.ts.map +1 -0
  599. package/dist/resolution/bridges/android-rn.js +298 -0
  600. package/dist/resolution/bridges/android-rn.js.map +7 -0
  601. package/dist/resolution/bridges/expo-modules.d.ts +10 -0
  602. package/dist/resolution/bridges/expo-modules.d.ts.map +1 -0
  603. package/dist/resolution/bridges/expo-modules.js +155 -0
  604. package/dist/resolution/bridges/expo-modules.js.map +7 -0
  605. package/dist/resolution/bridges/flutter-channel.d.ts +14 -0
  606. package/dist/resolution/bridges/flutter-channel.d.ts.map +1 -0
  607. package/dist/resolution/bridges/flutter-channel.js +385 -0
  608. package/dist/resolution/bridges/flutter-channel.js.map +7 -0
  609. package/dist/resolution/bridges/index.d.ts +40 -0
  610. package/dist/resolution/bridges/index.d.ts.map +1 -0
  611. package/dist/resolution/bridges/index.js +80 -0
  612. package/dist/resolution/bridges/index.js.map +7 -0
  613. package/dist/resolution/bridges/native-events.d.ts +10 -0
  614. package/dist/resolution/bridges/native-events.d.ts.map +1 -0
  615. package/dist/resolution/bridges/native-events.js +188 -0
  616. package/dist/resolution/bridges/native-events.js.map +7 -0
  617. package/dist/resolution/bridges/native-views.d.ts +13 -0
  618. package/dist/resolution/bridges/native-views.d.ts.map +1 -0
  619. package/dist/resolution/bridges/native-views.js +244 -0
  620. package/dist/resolution/bridges/native-views.js.map +7 -0
  621. package/dist/resolution/bridges/react-native.d.ts +9 -0
  622. package/dist/resolution/bridges/react-native.d.ts.map +1 -0
  623. package/dist/resolution/bridges/react-native.js +161 -0
  624. package/dist/resolution/bridges/react-native.js.map +7 -0
  625. package/dist/resolution/bridges/swift-objc.d.ts +14 -0
  626. package/dist/resolution/bridges/swift-objc.d.ts.map +1 -0
  627. package/dist/resolution/bridges/swift-objc.js +227 -0
  628. package/dist/resolution/bridges/swift-objc.js.map +7 -0
  629. package/dist/resolution/bridges/turbomodules.d.ts +10 -0
  630. package/dist/resolution/bridges/turbomodules.d.ts.map +1 -0
  631. package/dist/resolution/bridges/turbomodules.js +216 -0
  632. package/dist/resolution/bridges/turbomodules.js.map +7 -0
  633. package/dist/resolution/index.d.ts +28 -3
  634. package/dist/resolution/index.d.ts.map +1 -1
  635. package/dist/resolution/index.js +61 -2
  636. package/dist/resolution/index.js.map +2 -2
  637. package/dist/security/attack-surface.d.ts +46 -0
  638. package/dist/security/attack-surface.d.ts.map +1 -0
  639. package/dist/security/attack-surface.js +206 -0
  640. package/dist/security/attack-surface.js.map +7 -0
  641. package/dist/security/context-warnings.d.ts +40 -0
  642. package/dist/security/context-warnings.d.ts.map +1 -0
  643. package/dist/security/context-warnings.js +123 -0
  644. package/dist/security/context-warnings.js.map +7 -0
  645. package/dist/security/data-flows.d.ts +33 -0
  646. package/dist/security/data-flows.d.ts.map +1 -0
  647. package/dist/security/data-flows.js +286 -0
  648. package/dist/security/data-flows.js.map +7 -0
  649. package/dist/security/dep-confusion.d.ts +23 -0
  650. package/dist/security/dep-confusion.d.ts.map +1 -0
  651. package/dist/security/dep-confusion.js +255 -0
  652. package/dist/security/dep-confusion.js.map +7 -0
  653. package/dist/security/errors.d.ts +16 -0
  654. package/dist/security/errors.d.ts.map +1 -0
  655. package/dist/security/errors.js +51 -0
  656. package/dist/security/errors.js.map +7 -0
  657. package/dist/security/export/fix-suggestions.d.ts +21 -0
  658. package/dist/security/export/fix-suggestions.d.ts.map +1 -0
  659. package/dist/security/export/fix-suggestions.js +58 -0
  660. package/dist/security/export/fix-suggestions.js.map +7 -0
  661. package/dist/security/export/sbom.d.ts +33 -0
  662. package/dist/security/export/sbom.d.ts.map +1 -0
  663. package/dist/security/export/sbom.js +230 -0
  664. package/dist/security/export/sbom.js.map +7 -0
  665. package/dist/security/export/serialization.d.ts +62 -0
  666. package/dist/security/export/serialization.d.ts.map +1 -0
  667. package/dist/security/export/serialization.js +142 -0
  668. package/dist/security/export/serialization.js.map +7 -0
  669. package/dist/security/export/vex.d.ts +58 -0
  670. package/dist/security/export/vex.d.ts.map +1 -0
  671. package/dist/security/export/vex.js +220 -0
  672. package/dist/security/export/vex.js.map +7 -0
  673. package/dist/security/index.d.ts +21 -0
  674. package/dist/security/index.d.ts.map +1 -0
  675. package/dist/security/index.js +67 -0
  676. package/dist/security/index.js.map +7 -0
  677. package/dist/security/integrator.d.ts +63 -0
  678. package/dist/security/integrator.d.ts.map +1 -0
  679. package/dist/security/integrator.js +491 -0
  680. package/dist/security/integrator.js.map +7 -0
  681. package/dist/security/license.d.ts +33 -0
  682. package/dist/security/license.d.ts.map +1 -0
  683. package/dist/security/license.js +70 -0
  684. package/dist/security/license.js.map +7 -0
  685. package/dist/security/manifest/adapter.d.ts +92 -0
  686. package/dist/security/manifest/adapter.d.ts.map +1 -0
  687. package/dist/security/manifest/adapter.js +243 -0
  688. package/dist/security/manifest/adapter.js.map +7 -0
  689. package/dist/security/manifest/parser.d.ts +73 -0
  690. package/dist/security/manifest/parser.d.ts.map +1 -0
  691. package/dist/security/manifest/parser.js +376 -0
  692. package/dist/security/manifest/parser.js.map +7 -0
  693. package/dist/security/manifest/plugins/cargo.d.ts +11 -0
  694. package/dist/security/manifest/plugins/cargo.d.ts.map +1 -0
  695. package/dist/security/manifest/plugins/cargo.js +233 -0
  696. package/dist/security/manifest/plugins/cargo.js.map +7 -0
  697. package/dist/security/manifest/plugins/composer.d.ts +11 -0
  698. package/dist/security/manifest/plugins/composer.d.ts.map +1 -0
  699. package/dist/security/manifest/plugins/composer.js +152 -0
  700. package/dist/security/manifest/plugins/composer.js.map +7 -0
  701. package/dist/security/manifest/plugins/go.d.ts +12 -0
  702. package/dist/security/manifest/plugins/go.d.ts.map +1 -0
  703. package/dist/security/manifest/plugins/go.js +146 -0
  704. package/dist/security/manifest/plugins/go.js.map +7 -0
  705. package/dist/security/manifest/plugins/gradle.d.ts +12 -0
  706. package/dist/security/manifest/plugins/gradle.d.ts.map +1 -0
  707. package/dist/security/manifest/plugins/gradle.js +159 -0
  708. package/dist/security/manifest/plugins/gradle.js.map +7 -0
  709. package/dist/security/manifest/plugins/hex.d.ts +11 -0
  710. package/dist/security/manifest/plugins/hex.d.ts.map +1 -0
  711. package/dist/security/manifest/plugins/hex.js +159 -0
  712. package/dist/security/manifest/plugins/hex.js.map +7 -0
  713. package/dist/security/manifest/plugins/maven.d.ts +11 -0
  714. package/dist/security/manifest/plugins/maven.d.ts.map +1 -0
  715. package/dist/security/manifest/plugins/maven.js +128 -0
  716. package/dist/security/manifest/plugins/maven.js.map +7 -0
  717. package/dist/security/manifest/plugins/npm.d.ts +11 -0
  718. package/dist/security/manifest/plugins/npm.d.ts.map +1 -0
  719. package/dist/security/manifest/plugins/npm.js +284 -0
  720. package/dist/security/manifest/plugins/npm.js.map +7 -0
  721. package/dist/security/manifest/plugins/nuget.d.ts +12 -0
  722. package/dist/security/manifest/plugins/nuget.d.ts.map +1 -0
  723. package/dist/security/manifest/plugins/nuget.js +186 -0
  724. package/dist/security/manifest/plugins/nuget.js.map +7 -0
  725. package/dist/security/manifest/plugins/pip.d.ts +11 -0
  726. package/dist/security/manifest/plugins/pip.d.ts.map +1 -0
  727. package/dist/security/manifest/plugins/pip.js +123 -0
  728. package/dist/security/manifest/plugins/pip.js.map +7 -0
  729. package/dist/security/manifest/plugins/pubspec.d.ts +11 -0
  730. package/dist/security/manifest/plugins/pubspec.d.ts.map +1 -0
  731. package/dist/security/manifest/plugins/pubspec.js +212 -0
  732. package/dist/security/manifest/plugins/pubspec.js.map +7 -0
  733. package/dist/security/manifest/plugins/pyproject.d.ts +3 -0
  734. package/dist/security/manifest/plugins/pyproject.d.ts.map +1 -0
  735. package/dist/security/manifest/plugins/pyproject.js +261 -0
  736. package/dist/security/manifest/plugins/pyproject.js.map +7 -0
  737. package/dist/security/manifest/plugins/rubygems.d.ts +11 -0
  738. package/dist/security/manifest/plugins/rubygems.d.ts.map +1 -0
  739. package/dist/security/manifest/plugins/rubygems.js +185 -0
  740. package/dist/security/manifest/plugins/rubygems.js.map +7 -0
  741. package/dist/security/manifest/plugins/swift.d.ts +11 -0
  742. package/dist/security/manifest/plugins/swift.d.ts.map +1 -0
  743. package/dist/security/manifest/plugins/swift.js +200 -0
  744. package/dist/security/manifest/plugins/swift.js.map +7 -0
  745. package/dist/security/owasp.d.ts +16 -0
  746. package/dist/security/owasp.d.ts.map +1 -0
  747. package/dist/security/owasp.js +104 -0
  748. package/dist/security/owasp.js.map +7 -0
  749. package/dist/security/pipeline.d.ts +37 -0
  750. package/dist/security/pipeline.d.ts.map +1 -0
  751. package/dist/security/pipeline.js +125 -0
  752. package/dist/security/pipeline.js.map +7 -0
  753. package/dist/security/reachability.d.ts +67 -0
  754. package/dist/security/reachability.d.ts.map +1 -0
  755. package/dist/security/reachability.js +276 -0
  756. package/dist/security/reachability.js.map +7 -0
  757. package/dist/security/remediation.d.ts +51 -0
  758. package/dist/security/remediation.d.ts.map +1 -0
  759. package/dist/security/remediation.js +126 -0
  760. package/dist/security/remediation.js.map +7 -0
  761. package/dist/security/secrets.d.ts +38 -0
  762. package/dist/security/secrets.d.ts.map +1 -0
  763. package/dist/security/secrets.js +176 -0
  764. package/dist/security/secrets.js.map +7 -0
  765. package/dist/security/staleness.d.ts +43 -0
  766. package/dist/security/staleness.d.ts.map +1 -0
  767. package/dist/security/staleness.js +231 -0
  768. package/dist/security/staleness.js.map +7 -0
  769. package/dist/security/supply-chain.d.ts +34 -0
  770. package/dist/security/supply-chain.d.ts.map +1 -0
  771. package/dist/security/supply-chain.js +301 -0
  772. package/dist/security/supply-chain.js.map +7 -0
  773. package/dist/security/suppressions.d.ts +18 -0
  774. package/dist/security/suppressions.d.ts.map +1 -0
  775. package/dist/security/suppressions.js +106 -0
  776. package/dist/security/suppressions.js.map +7 -0
  777. package/dist/security/types.d.ts +144 -0
  778. package/dist/security/types.d.ts.map +1 -0
  779. package/dist/security/types.js +17 -0
  780. package/dist/security/types.js.map +7 -0
  781. package/dist/security/vuln/client.d.ts +90 -0
  782. package/dist/security/vuln/client.d.ts.map +1 -0
  783. package/dist/security/vuln/client.js +355 -0
  784. package/dist/security/vuln/client.js.map +7 -0
  785. package/dist/security/vuln/epss-client.d.ts +26 -0
  786. package/dist/security/vuln/epss-client.d.ts.map +1 -0
  787. package/dist/security/vuln/epss-client.js +95 -0
  788. package/dist/security/vuln/epss-client.js.map +7 -0
  789. package/dist/security/vuln/index.d.ts +6 -0
  790. package/dist/security/vuln/index.d.ts.map +1 -0
  791. package/dist/security/vuln/index.js +29 -0
  792. package/dist/security/vuln/index.js.map +7 -0
  793. package/dist/security/vuln/osv-adapter.d.ts +58 -0
  794. package/dist/security/vuln/osv-adapter.d.ts.map +1 -0
  795. package/dist/security/vuln/osv-adapter.js +321 -0
  796. package/dist/security/vuln/osv-adapter.js.map +7 -0
  797. package/dist/security/vuln/types.d.ts +29 -0
  798. package/dist/security/vuln/types.d.ts.map +1 -0
  799. package/dist/security/vuln/types.js +17 -0
  800. package/dist/security/vuln/types.js.map +7 -0
  801. package/dist/sync/index.d.ts +4 -2
  802. package/dist/sync/index.d.ts.map +1 -1
  803. package/dist/types.d.ts +10 -4
  804. package/dist/types.d.ts.map +1 -1
  805. package/dist/types.js.map +2 -2
  806. package/dist/vectors/index.d.ts +11 -3
  807. package/dist/vectors/index.d.ts.map +1 -1
  808. package/dist/vectors/qdrant-index.d.ts +10 -3
  809. package/dist/vectors/qdrant-index.d.ts.map +1 -1
  810. package/dist/vectors/typesense-index.d.ts.map +1 -1
  811. package/dist/watchmen/index.js +83 -0
  812. package/dist/watchmen/index.js.map +7 -0
  813. package/dist/watchmen/synthesize.js +475 -0
  814. package/dist/watchmen/synthesize.js.map +7 -0
  815. package/package.json +6 -2
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/bin/commands/communities.ts"],
4
+ "sourcesContent": ["import { Command } from 'commander';\nimport * as path from 'path';\nimport { dim, reset, violet, bold, green, renderTable } from '../ui';\n\nexport function register(program: Command): void {\n program\n .command('communities [projectPath]')\n .description('Detect code communities (clusters of related symbols)')\n .option('--resolution <n>', 'Resolution parameter (higher = more communities)', '1.0')\n .option('--limit <n>', 'Max communities to show', '15')\n .option('--json', 'Output as JSON')\n .action(async (projectPath: string | undefined, opts: { resolution: string; limit: string; json?: boolean }) => {\n const KiroGraph = (await Promise.resolve().then(() => require('../../index.js'))).default;\n const target = path.resolve(projectPath ?? process.cwd());\n const cg = await KiroGraph.open(target);\n const { detectCommunities } = await Promise.resolve().then(() => require('../../graph/communities.js'));\n const db = cg.getDatabase();\n\n const result = detectCommunities(db, {\n resolution: parseFloat(opts.resolution),\n });\n\n if (opts.json) {\n console.log(JSON.stringify(result, null, 2));\n cg.close();\n return;\n }\n\n if (result.communities.length === 0) {\n console.log('\\n No communities detected. The graph may be too small or have no edges.\\n');\n cg.close();\n return;\n }\n\n const limit = Math.min(parseInt(opts.limit), result.communities.length);\n\n console.log(`\\n ${bold}Communities${reset} (${result.communities.length} detected, modularity: ${result.modularity.toFixed(3)})`);\n console.log(` ${dim}${result.totalNodes} nodes, ${result.totalEdges} edges${reset}\\n`);\n\n for (const c of result.communities.slice(0, limit)) {\n console.log(` ${green}${c.label}${reset} \u2014 ${c.memberCount} symbols`);\n console.log(` ${dim}dir: ${c.dominantDirectory} | lang: ${c.dominantLanguage} | cross-edges: ${c.interCommunityEdges}${reset}`);\n for (const m of c.members.slice(0, 5)) {\n console.log(` ${dim}${m.kind}${reset} ${violet}${m.name}${reset} ${dim}\u2014 ${m.filePath}${reset}`);\n }\n if (c.memberCount > 5) console.log(` ${dim}\u2026and ${c.memberCount - 5} more${reset}`);\n console.log();\n }\n\n cg.close();\n });\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,WAAsB;AACtB,gBAA6D;AAEtD,SAAS,SAAS,SAAwB;AAC/C,UACG,QAAQ,2BAA2B,EACnC,YAAY,uDAAuD,EACnE,OAAO,oBAAoB,oDAAoD,KAAK,EACpF,OAAO,eAAe,2BAA2B,IAAI,EACrD,OAAO,UAAU,gBAAgB,EACjC,OAAO,OAAO,aAAiC,SAAgE;AAC9G,UAAM,aAAa,MAAM,QAAQ,QAAQ,EAAE,KAAK,MAAM,QAAQ,gBAAgB,CAAC,GAAG;AAClF,UAAM,SAAS,KAAK,QAAQ,eAAe,QAAQ,IAAI,CAAC;AACxD,UAAM,KAAK,MAAM,UAAU,KAAK,MAAM;AACtC,UAAM,EAAE,kBAAkB,IAAI,MAAM,QAAQ,QAAQ,EAAE,KAAK,MAAM,QAAQ,4BAA4B,CAAC;AACtG,UAAM,KAAK,GAAG,YAAY;AAE1B,UAAM,SAAS,kBAAkB,IAAI;AAAA,MACnC,YAAY,WAAW,KAAK,UAAU;AAAA,IACxC,CAAC;AAED,QAAI,KAAK,MAAM;AACb,cAAQ,IAAI,KAAK,UAAU,QAAQ,MAAM,CAAC,CAAC;AAC3C,SAAG,MAAM;AACT;AAAA,IACF;AAEA,QAAI,OAAO,YAAY,WAAW,GAAG;AACnC,cAAQ,IAAI,6EAA6E;AACzF,SAAG,MAAM;AACT;AAAA,IACF;AAEA,UAAM,QAAQ,KAAK,IAAI,SAAS,KAAK,KAAK,GAAG,OAAO,YAAY,MAAM;AAEtE,YAAQ,IAAI;AAAA,IAAO,cAAI,cAAc,eAAK,KAAK,OAAO,YAAY,MAAM,0BAA0B,OAAO,WAAW,QAAQ,CAAC,CAAC,GAAG;AACjI,YAAQ,IAAI,KAAK,aAAG,GAAG,OAAO,UAAU,WAAW,OAAO,UAAU,SAAS,eAAK;AAAA,CAAI;AAEtF,eAAW,KAAK,OAAO,YAAY,MAAM,GAAG,KAAK,GAAG;AAClD,cAAQ,IAAI,KAAK,eAAK,GAAG,EAAE,KAAK,GAAG,eAAK,WAAM,EAAE,WAAW,UAAU;AACrE,cAAQ,IAAI,KAAK,aAAG,QAAQ,EAAE,iBAAiB,YAAY,EAAE,gBAAgB,mBAAmB,EAAE,mBAAmB,GAAG,eAAK,EAAE;AAC/H,iBAAW,KAAK,EAAE,QAAQ,MAAM,GAAG,CAAC,GAAG;AACrC,gBAAQ,IAAI,OAAO,aAAG,GAAG,EAAE,IAAI,GAAG,eAAK,IAAI,gBAAM,GAAG,EAAE,IAAI,GAAG,eAAK,IAAI,aAAG,UAAK,EAAE,QAAQ,GAAG,eAAK,EAAE;AAAA,MACpG;AACA,UAAI,EAAE,cAAc,EAAG,SAAQ,IAAI,OAAO,aAAG,aAAQ,EAAE,cAAc,CAAC,QAAQ,eAAK,EAAE;AACrF,cAAQ,IAAI;AAAA,IACd;AAEA,OAAG,MAAM;AAAA,EACX,CAAC;AACL;",
6
+ "names": []
7
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * kg compression [off|normal|aggressive|ultra] — set compression level for this project
3
+ * kg compression — show current level
4
+ */
5
+ import { Command } from 'commander';
6
+ export declare function register(program: Command): void;
7
+ //# sourceMappingURL=compression.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compression.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/compression.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAepC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwE/C"}
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmD/C"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+D/C"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function register(program: Command): void;
3
+ //# sourceMappingURL=data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/data.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8rB/C"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function register(program: Command): void;
3
+ //# sourceMappingURL=dead-code.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dead-code.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/dead-code.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2C/C"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function register(program: Command): void;
3
+ //# sourceMappingURL=dep-confusion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dep-confusion.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/dep-confusion.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiBpC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwE/C"}
@@ -0,0 +1,119 @@
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 dep_confusion_exports = {};
30
+ __export(dep_confusion_exports, {
31
+ register: () => register
32
+ });
33
+ module.exports = __toCommonJS(dep_confusion_exports);
34
+ var path = __toESM(require("path"));
35
+ var import_config = require("../../config");
36
+ var import_ui = require("../ui");
37
+ const red = "\x1B[31m";
38
+ const yellow = "\x1B[33m";
39
+ function riskColor(level) {
40
+ switch (level) {
41
+ case "critical":
42
+ return red;
43
+ case "high":
44
+ return yellow;
45
+ case "medium":
46
+ return "\x1B[33m";
47
+ default:
48
+ return import_ui.dim;
49
+ }
50
+ }
51
+ function register(program) {
52
+ program.command("dep-confusion [projectPath]").description("Detect dependency confusion: internal packages exposed in public registries, and typosquatting candidates").option("--format <fmt>", "Output format: table | json (default: table)", "table").action(async (projectPath, opts) => {
53
+ const target = path.resolve(projectPath ?? process.cwd());
54
+ const config = await (0, import_config.loadConfig)(target);
55
+ if (!config.enableSecurity) {
56
+ console.error(`
57
+ ${yellow}\u26A0 Security analysis is disabled.${import_ui.reset}`);
58
+ console.error(` ${import_ui.dim}Enable it in .kirograph/config.json:${import_ui.reset} ${import_ui.violet}${import_ui.bold}"enableSecurity": true${import_ui.reset}`);
59
+ console.error(` ${import_ui.dim}Then re-run:${import_ui.reset} ${import_ui.violet}${import_ui.bold}kirograph index${import_ui.reset}
60
+ `);
61
+ process.exit(1);
62
+ }
63
+ const KiroGraph = (await Promise.resolve().then(() => require("../../index.js"))).default;
64
+ if (!KiroGraph.isInitialized(target)) {
65
+ console.error(" \u2716 KiroGraph not initialized. Run: kirograph init");
66
+ process.exit(1);
67
+ }
68
+ const cg = await KiroGraph.open(target);
69
+ const db = cg.getDatabase();
70
+ db.applySecuritySchema();
71
+ if (opts.format !== "json") {
72
+ console.error(` ${import_ui.dim}Checking for dependency confusion risks...${import_ui.reset}`);
73
+ }
74
+ const { DepConfusionChecker } = await Promise.resolve().then(() => require("../../security/dep-confusion.js"));
75
+ const checker = new DepConfusionChecker(db);
76
+ const findings = await checker.check();
77
+ if (opts.format === "json") {
78
+ console.log(JSON.stringify(findings, null, 2));
79
+ cg.close();
80
+ return;
81
+ }
82
+ if (findings.length === 0) {
83
+ console.log(`
84
+ ${import_ui.green}\u2713${import_ui.reset} No dependency confusion risks detected.
85
+ `);
86
+ cg.close();
87
+ return;
88
+ }
89
+ console.log(`
90
+ ${import_ui.violet}${import_ui.bold}Dependency Confusion Findings${import_ui.reset}
91
+ `);
92
+ for (const f of findings) {
93
+ const color = riskColor(f.riskLevel);
94
+ console.log(` ${import_ui.violet}${import_ui.bold}${f.packageName}${import_ui.reset} ${import_ui.dim}(${f.ecosystem})${import_ui.reset}`);
95
+ console.log(` Risk: ${color}${import_ui.bold}${f.riskLevel.toUpperCase()}${import_ui.reset} Source: ${import_ui.dim}${f.internalSource}${import_ui.reset}`);
96
+ if (f.publicExists) {
97
+ const ver = f.publicVersion ? ` v${f.publicVersion}` : "";
98
+ console.log(` Public package exists:${ver}`);
99
+ }
100
+ console.log(` ${import_ui.dim}${f.explanation}${import_ui.reset}`);
101
+ console.log();
102
+ }
103
+ const critical = findings.filter((f) => f.riskLevel === "critical").length;
104
+ const high = findings.filter((f) => f.riskLevel === "high").length;
105
+ const medium = findings.filter((f) => f.riskLevel === "medium").length;
106
+ const parts = [];
107
+ if (critical > 0) parts.push(`${red}${import_ui.bold}${critical} critical${import_ui.reset}`);
108
+ if (high > 0) parts.push(`${yellow}${import_ui.bold}${high} high${import_ui.reset}`);
109
+ if (medium > 0) parts.push(`${import_ui.dim}${medium} medium${import_ui.reset}`);
110
+ console.log(` ${import_ui.bold}${findings.length}${import_ui.reset} finding(s): ${parts.join(", ")}
111
+ `);
112
+ cg.close();
113
+ });
114
+ }
115
+ // Annotate the CommonJS export names for ESM import in node:
116
+ 0 && (module.exports = {
117
+ register
118
+ });
119
+ //# sourceMappingURL=dep-confusion.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/bin/commands/dep-confusion.ts"],
4
+ "sourcesContent": ["import { Command } from 'commander';\nimport * as path from 'path';\nimport { loadConfig } from '../../config';\nimport { dim, reset, violet, bold, green } from '../ui';\n\nconst red = '\\x1b[31m';\nconst yellow = '\\x1b[33m';\n\nfunction riskColor(level: string): string {\n switch (level) {\n case 'critical': return red;\n case 'high': return yellow;\n case 'medium': return '\\x1b[33m';\n default: return dim;\n }\n}\n\nexport function register(program: Command): void {\n program\n .command('dep-confusion [projectPath]')\n .description('Detect dependency confusion: internal packages exposed in public registries, and typosquatting candidates')\n .option('--format <fmt>', 'Output format: table | json (default: table)', 'table')\n .action(async (projectPath: string | undefined, opts: { format: string }) => {\n const target = path.resolve(projectPath ?? process.cwd());\n const config = await loadConfig(target);\n\n if (!config.enableSecurity) {\n console.error(`\\n ${yellow}\u26A0 Security analysis is disabled.${reset}`);\n console.error(` ${dim}Enable it in .kirograph/config.json:${reset} ${violet}${bold}\"enableSecurity\": true${reset}`);\n console.error(` ${dim}Then re-run:${reset} ${violet}${bold}kirograph index${reset}\\n`);\n process.exit(1);\n }\n\n const KiroGraph = (await Promise.resolve().then(() => require('../../index.js'))).default;\n if (!KiroGraph.isInitialized(target)) {\n console.error(' \u2716 KiroGraph not initialized. Run: kirograph init');\n process.exit(1);\n }\n\n const cg = await KiroGraph.open(target);\n const db = cg.getDatabase();\n db.applySecuritySchema();\n\n if (opts.format !== 'json') {\n console.error(` ${dim}Checking for dependency confusion risks...${reset}`);\n }\n\n const { DepConfusionChecker } = await Promise.resolve().then(() => require('../../security/dep-confusion.js'));\n const checker = new DepConfusionChecker(db);\n const findings = await checker.check();\n\n if (opts.format === 'json') {\n console.log(JSON.stringify(findings, null, 2));\n cg.close();\n return;\n }\n\n if (findings.length === 0) {\n console.log(`\\n ${green}\u2713${reset} No dependency confusion risks detected.\\n`);\n cg.close();\n return;\n }\n\n console.log(`\\n ${violet}${bold}Dependency Confusion Findings${reset}\\n`);\n\n for (const f of findings) {\n const color = riskColor(f.riskLevel);\n console.log(` ${violet}${bold}${f.packageName}${reset} ${dim}(${f.ecosystem})${reset}`);\n console.log(` Risk: ${color}${bold}${f.riskLevel.toUpperCase()}${reset} Source: ${dim}${f.internalSource}${reset}`);\n if (f.publicExists) {\n const ver = f.publicVersion ? ` v${f.publicVersion}` : '';\n console.log(` Public package exists:${ver}`);\n }\n console.log(` ${dim}${f.explanation}${reset}`);\n console.log();\n }\n\n const critical = findings.filter(f => f.riskLevel === 'critical').length;\n const high = findings.filter(f => f.riskLevel === 'high').length;\n const medium = findings.filter(f => f.riskLevel === 'medium').length;\n\n const parts: string[] = [];\n if (critical > 0) parts.push(`${red}${bold}${critical} critical${reset}`);\n if (high > 0) parts.push(`${yellow}${bold}${high} high${reset}`);\n if (medium > 0) parts.push(`${dim}${medium} medium${reset}`);\n console.log(` ${bold}${findings.length}${reset} finding(s): ${parts.join(', ')}\\n`);\n\n cg.close();\n });\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,WAAsB;AACtB,oBAA2B;AAC3B,gBAAgD;AAEhD,MAAM,MAAS;AACf,MAAM,SAAS;AAEf,SAAS,UAAU,OAAuB;AACxC,UAAQ,OAAO;AAAA,IACb,KAAK;AAAY,aAAO;AAAA,IACxB,KAAK;AAAY,aAAO;AAAA,IACxB,KAAK;AAAY,aAAO;AAAA,IACxB;AAAiB,aAAO;AAAA,EAC1B;AACF;AAEO,SAAS,SAAS,SAAwB;AAC/C,UACG,QAAQ,6BAA6B,EACrC,YAAY,2GAA2G,EACvH,OAAO,kBAAkB,gDAAgD,OAAO,EAChF,OAAO,OAAO,aAAiC,SAA6B;AAC3E,UAAM,SAAS,KAAK,QAAQ,eAAe,QAAQ,IAAI,CAAC;AACxD,UAAM,SAAS,UAAM,0BAAW,MAAM;AAEtC,QAAI,CAAC,OAAO,gBAAgB;AAC1B,cAAQ,MAAM;AAAA,IAAO,MAAM,wCAAmC,eAAK,EAAE;AACrE,cAAQ,MAAM,KAAK,aAAG,uCAAuC,eAAK,IAAI,gBAAM,GAAG,cAAI,yBAAyB,eAAK,EAAE;AACnH,cAAQ,MAAM,KAAK,aAAG,eAAe,eAAK,IAAI,gBAAM,GAAG,cAAI,kBAAkB,eAAK;AAAA,CAAI;AACtF,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,UAAM,aAAa,MAAM,QAAQ,QAAQ,EAAE,KAAK,MAAM,QAAQ,gBAAgB,CAAC,GAAG;AAClF,QAAI,CAAC,UAAU,cAAc,MAAM,GAAG;AACpC,cAAQ,MAAM,yDAAoD;AAClE,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,UAAM,KAAK,MAAM,UAAU,KAAK,MAAM;AACtC,UAAM,KAAK,GAAG,YAAY;AAC1B,OAAG,oBAAoB;AAEvB,QAAI,KAAK,WAAW,QAAQ;AAC1B,cAAQ,MAAM,KAAK,aAAG,6CAA6C,eAAK,EAAE;AAAA,IAC5E;AAEA,UAAM,EAAE,oBAAoB,IAAI,MAAM,QAAQ,QAAQ,EAAE,KAAK,MAAM,QAAQ,iCAAiC,CAAC;AAC7G,UAAM,UAAU,IAAI,oBAAoB,EAAE;AAC1C,UAAM,WAAW,MAAM,QAAQ,MAAM;AAErC,QAAI,KAAK,WAAW,QAAQ;AAC1B,cAAQ,IAAI,KAAK,UAAU,UAAU,MAAM,CAAC,CAAC;AAC7C,SAAG,MAAM;AACT;AAAA,IACF;AAEA,QAAI,SAAS,WAAW,GAAG;AACzB,cAAQ,IAAI;AAAA,IAAO,eAAK,SAAI,eAAK;AAAA,CAA4C;AAC7E,SAAG,MAAM;AACT;AAAA,IACF;AAEA,YAAQ,IAAI;AAAA,IAAO,gBAAM,GAAG,cAAI,gCAAgC,eAAK;AAAA,CAAI;AAEzE,eAAW,KAAK,UAAU;AACxB,YAAM,QAAQ,UAAU,EAAE,SAAS;AACnC,cAAQ,IAAI,KAAK,gBAAM,GAAG,cAAI,GAAG,EAAE,WAAW,GAAG,eAAK,IAAI,aAAG,IAAI,EAAE,SAAS,IAAI,eAAK,EAAE;AACvF,cAAQ,IAAI,aAAa,KAAK,GAAG,cAAI,GAAG,EAAE,UAAU,YAAY,CAAC,GAAG,eAAK,cAAc,aAAG,GAAG,EAAE,cAAc,GAAG,eAAK,EAAE;AACvH,UAAI,EAAE,cAAc;AAClB,cAAM,MAAM,EAAE,gBAAgB,KAAK,EAAE,aAAa,KAAK;AACvD,gBAAQ,IAAI,6BAA6B,GAAG,EAAE;AAAA,MAChD;AACA,cAAQ,IAAI,OAAO,aAAG,GAAG,EAAE,WAAW,GAAG,eAAK,EAAE;AAChD,cAAQ,IAAI;AAAA,IACd;AAEA,UAAM,WAAW,SAAS,OAAO,OAAK,EAAE,cAAc,UAAU,EAAE;AAClE,UAAM,OAAW,SAAS,OAAO,OAAK,EAAE,cAAc,MAAM,EAAE;AAC9D,UAAM,SAAW,SAAS,OAAO,OAAK,EAAE,cAAc,QAAQ,EAAE;AAEhE,UAAM,QAAkB,CAAC;AACzB,QAAI,WAAW,EAAG,OAAM,KAAK,GAAG,GAAG,GAAG,cAAI,GAAG,QAAQ,YAAY,eAAK,EAAE;AACxE,QAAI,OAAO,EAAO,OAAM,KAAK,GAAG,MAAM,GAAG,cAAI,GAAG,IAAI,QAAQ,eAAK,EAAE;AACnE,QAAI,SAAS,EAAK,OAAM,KAAK,GAAG,aAAG,GAAG,MAAM,UAAU,eAAK,EAAE;AAC7D,YAAQ,IAAI,KAAK,cAAI,GAAG,SAAS,MAAM,GAAG,eAAK,gBAAgB,MAAM,KAAK,IAAI,CAAC;AAAA,CAAI;AAEnF,OAAG,MAAM;AAAA,EACX,CAAC;AACL;",
6
+ "names": []
7
+ }
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function register(program: Command): void;
3
+ //# sourceMappingURL=docs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/docs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoBpC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4W/C"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * kirograph exec <command...> — Run a shell command with token-optimized output
3
+ *
4
+ * Examples:
5
+ * kirograph exec git status
6
+ * kirograph exec --level aggressive npm test
7
+ * kirograph exec -l ultra ls -la src/
8
+ */
9
+ import { Command } from 'commander';
10
+ export declare function register(program: Command): void;
11
+ //# sourceMappingURL=exec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exec.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/exec.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmG/C"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function register(program: Command): void;
3
+ //# sourceMappingURL=export.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/export.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0wFpC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyL/C"}
@@ -45,6 +45,43 @@ async function generateExport(projectPath, opts) {
45
45
  const cg = await KiroGraph.open(target);
46
46
  const nodes = cg.getAllNodes();
47
47
  const edges = cg.getAllEdges();
48
+ let securityOverlay;
49
+ try {
50
+ const db = cg.getDatabase();
51
+ db.applySecuritySchema();
52
+ const depRows = db.getRawDb().all(
53
+ `SELECT d.node_id, r.verdict
54
+ FROM sec_dependencies d
55
+ LEFT JOIN edges e ON e.source = d.node_id AND e.kind = 'has_vulnerability'
56
+ LEFT JOIN sec_reachability r ON r.vulnerability_node_id = e.target
57
+ ORDER BY
58
+ CASE r.verdict
59
+ WHEN 'affected' THEN 0
60
+ WHEN 'under_investigation' THEN 1
61
+ WHEN 'not_affected' THEN 2
62
+ ELSE 3
63
+ END`
64
+ );
65
+ const depVerdicts = /* @__PURE__ */ new Map();
66
+ for (const row of depRows) {
67
+ if (!depVerdicts.has(row.node_id)) {
68
+ const status = row.verdict === "affected" ? "affected" : row.verdict === "under_investigation" ? "under_investigation" : row.verdict === "not_affected" ? "not_affected" : "none";
69
+ depVerdicts.set(row.node_id, status);
70
+ }
71
+ }
72
+ const vulnRows = db.getRawDb().all(
73
+ `SELECT node_id, verdict FROM sec_reachability`
74
+ );
75
+ const vulnVerdicts = /* @__PURE__ */ new Map();
76
+ for (const row of vulnRows) {
77
+ const status = row.verdict === "affected" ? "affected" : row.verdict === "under_investigation" ? "under_investigation" : row.verdict === "not_affected" ? "not_affected" : "none";
78
+ vulnVerdicts.set(row.node_id, status);
79
+ }
80
+ if (depVerdicts.size > 0 || vulnVerdicts.size > 0) {
81
+ securityOverlay = { depVerdicts, vulnVerdicts };
82
+ }
83
+ } catch {
84
+ }
48
85
  cg.close();
49
86
  const projectName = path.basename(target);
50
87
  let logoBase64;
@@ -69,7 +106,7 @@ async function generateExport(projectPath, opts) {
69
106
  }
70
107
  const outDir = opts.output ? path.resolve(opts.output) : path.join(target, ".kirograph", "export");
71
108
  fs.mkdirSync(outDir, { recursive: true });
72
- const { html, css, js } = buildFiles(nodes, edges, projectName, opts.includeContains, logoBase64, fileModified);
109
+ const { html, css, js } = buildFiles(nodes, edges, projectName, opts.includeContains, logoBase64, fileModified, securityOverlay);
73
110
  fs.writeFileSync(path.join(outDir, "index.html"), html, "utf8");
74
111
  fs.writeFileSync(path.join(outDir, "app.css"), css, "utf8");
75
112
  fs.writeFileSync(path.join(outDir, "app.js"), js, "utf8");
@@ -137,7 +174,18 @@ function lighten(hex) {
137
174
  function escHtml(s) {
138
175
  return s.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
139
176
  }
140
- function buildFiles(nodes, edges, projectName, includeContains, logoBase64, fileModified) {
177
+ const SEC_DEP_COLOR = {
178
+ affected: "#ef4444",
179
+ under_investigation: "#f59e0b",
180
+ not_affected: "#22c55e",
181
+ none: "#64748b"
182
+ };
183
+ const SEC_VULN_COLOR = {
184
+ affected: "#dc2626",
185
+ under_investigation: "#d97706",
186
+ not_affected: "#16a34a"
187
+ };
188
+ function buildFiles(nodes, edges, projectName, includeContains, logoBase64, fileModified, securityOverlay) {
141
189
  const filteredEdges = includeContains ? edges : edges.filter((e) => e.kind !== "contains");
142
190
  const degree = /* @__PURE__ */ new Map();
143
191
  for (const e of filteredEdges) {
@@ -149,14 +197,28 @@ function buildFiles(nodes, edges, projectName, includeContains, logoBase64, file
149
197
  const fp = n.filePath ?? "";
150
198
  const parts = fp.split("/").filter(Boolean);
151
199
  const dir = parts.length >= 2 ? parts.slice(0, 2).join("/") : parts[0] ?? "";
200
+ let securityStatus = "none";
201
+ let baseColor = KIND_COLOR[n.kind] ?? "#424242";
202
+ if (securityOverlay) {
203
+ if (n.kind === "dependency") {
204
+ securityStatus = securityOverlay.depVerdicts.get(n.id) ?? "none";
205
+ baseColor = SEC_DEP_COLOR[securityStatus];
206
+ } else if (n.kind === "vulnerability") {
207
+ const verdict = securityOverlay.vulnVerdicts.get(n.id);
208
+ if (verdict) {
209
+ securityStatus = verdict;
210
+ baseColor = SEC_VULN_COLOR[verdict] ?? baseColor;
211
+ }
212
+ }
213
+ }
152
214
  return {
153
215
  id: n.id,
154
216
  label: n.name,
155
217
  color: {
156
- background: KIND_COLOR[n.kind] ?? "#424242",
157
- border: lighten(KIND_COLOR[n.kind] ?? "#424242"),
218
+ background: baseColor,
219
+ border: lighten(baseColor),
158
220
  highlight: { background: "#e040fb", border: "#ea80fc" },
159
- hover: { background: lighten(KIND_COLOR[n.kind] ?? "#424242"), border: "#ea80fc" }
221
+ hover: { background: lighten(baseColor), border: "#ea80fc" }
160
222
  },
161
223
  size: Math.max(8, Math.min(40, 8 + (degree.get(n.id) ?? 0) * 1.5)),
162
224
  font: { size: 11, color: "#e0e0e0", face: "monospace" },
@@ -170,7 +232,8 @@ function buildFiles(nodes, edges, projectName, includeContains, logoBase64, file
170
232
  degree: degree.get(n.id) ?? 0,
171
233
  borderWidth: n.isExported ? 2 : 1,
172
234
  borderWidthSelected: 3,
173
- lastModified: fileModified ? fileModified[fp] ?? 0 : 0
235
+ lastModified: fileModified ? fileModified[fp] ?? 0 : 0,
236
+ securityStatus
174
237
  };
175
238
  });
176
239
  const visEdges = filteredEdges.map((e, i) => ({
@@ -188,6 +251,7 @@ function buildFiles(nodes, edges, projectName, includeContains, logoBase64, file
188
251
  }));
189
252
  const allNodeKinds = [...new Set(nodes.map((n) => n.kind))].sort();
190
253
  const allEdgeKinds = [...new Set(filteredEdges.map((e) => e.kind))].sort();
254
+ const hasSecurityNodes = visNodes.some((n) => n.kind === "dependency" || n.kind === "vulnerability");
191
255
  const logoTag = logoBase64 ? `<img src="data:image/png;base64,${logoBase64}" alt="KiroGraph">` : `<h1>\u2B21 KiroGraph</h1>`;
192
256
  const loaderLogoTag = logoBase64 ? `<img src="data:image/png;base64,${logoBase64}" alt="KiroGraph">` : `<div style="color:#c792ea;font-size:18px;font-weight:600;letter-spacing:.05em">\u2B21 KiroGraph</div>`;
193
257
  const nodeLegend = allNodeKinds.map((k) => `<div class="legend-item" data-nkind="${k}">
@@ -254,7 +318,8 @@ function buildFiles(nodes, edges, projectName, includeContains, logoBase64, file
254
318
  <button class="fbtn" id="btn-focus" title="Focus on node and neighbors">\u25CE <span class="fbtn-label">Focus</span></button>
255
319
  <button class="fbtn" id="btn-path" title="Find path between two nodes">\u27F6 <span class="fbtn-label">Path</span></button>
256
320
  <button class="fbtn" id="btn-cluster" title="Cluster by directory">\u2B21 <span class="fbtn-label">Cluster</span></button>
257
- <button class="fbtn" id="btn-heat" title="Heat map by file recency">\u{1F321} <span class="fbtn-label">Heat</span></button>
321
+ <button class="fbtn" id="btn-heat" title="Heat map by file recency">\u{1F321} <span class="fbtn-label">Heat</span></button>${hasSecurityNodes ? `
322
+ <button class="fbtn" id="btn-security" title="Security overlay \u2014 highlight dependency/vulnerability nodes">\u{1F512} <span class="fbtn-label">Security</span></button>` : ""}
258
323
  <button class="fbtn" id="btn-charts" title="Analytics charts">\u{1F4CA} <span class="fbtn-label">Charts</span></button>
259
324
  </div>
260
325
 
@@ -269,7 +334,20 @@ function buildFiles(nodes, edges, projectName, includeContains, logoBase64, file
269
334
  <div class="heat-stop" data-tip="Modified more than 6 months ago"><span class="heat-stop-dot" style="background:#2980b9"></span>Older</div>
270
335
  </div>
271
336
  <div id="heat-tip"></div>
272
- </div>
337
+ </div>${hasSecurityNodes ? `
338
+
339
+ <div id="security-legend">
340
+ <div class="security-legend-title">\u{1F512} Security status</div>
341
+ <div class="security-stops">
342
+ <div class="security-stop"><span class="security-stop-dot" style="background:#ef4444"></span>Affected</div>
343
+ <div class="security-stop"><span class="security-stop-dot" style="background:#f59e0b"></span>Under investigation</div>
344
+ <div class="security-stop"><span class="security-stop-dot" style="background:#22c55e"></span>Not affected</div>
345
+ <div class="security-stop"><span class="security-stop-dot" style="background:#64748b"></span>No vuln data</div>
346
+ <div class="security-stop"><span class="security-stop-dot" style="background:#dc2626;border:2px solid #fff"></span>Vuln: affected</div>
347
+ <div class="security-stop"><span class="security-stop-dot" style="background:#d97706;border:2px solid #fff"></span>Vuln: investigating</div>
348
+ <div class="security-stop"><span class="security-stop-dot" style="background:#16a34a;border:2px solid #fff"></span>Vuln: not affected</div>
349
+ </div>
350
+ </div>` : ""}
273
351
  </div>
274
352
  </div><!-- /float-sidebar -->
275
353
 
@@ -415,7 +493,7 @@ function buildFiles(nodes, edges, projectName, includeContains, logoBase64, file
415
493
  </body>
416
494
  </html>`;
417
495
  const css = buildCss();
418
- const js = buildJs(visNodes, visEdges, KIND_COLOR, EDGE_COLOR);
496
+ const js = buildJs(visNodes, visEdges, KIND_COLOR, EDGE_COLOR, hasSecurityNodes);
419
497
  return { html, css, js };
420
498
  }
421
499
  function buildCss() {
@@ -941,9 +1019,47 @@ input[type=range] {
941
1019
  min-height: 14px;
942
1020
  font-style: italic;
943
1021
  }
1022
+
1023
+ /* \u2500\u2500 Security legend (inside sidebar) \u2500\u2500 */
1024
+ #security-legend {
1025
+ display: none;
1026
+ background: rgba(8, 8, 18, 0.97);
1027
+ border: 1px solid #3a3a5e;
1028
+ border-radius: 12px;
1029
+ padding: 12px 14px;
1030
+ box-shadow: 0 4px 24px rgba(0,0,0,.75);
1031
+ width: 200px;
1032
+ }
1033
+ .security-legend-title {
1034
+ font-size: 11px;
1035
+ font-weight: 600;
1036
+ color: #9da8cc;
1037
+ margin-bottom: 10px;
1038
+ }
1039
+ .security-stops {
1040
+ display: flex;
1041
+ flex-direction: column;
1042
+ gap: 5px;
1043
+ }
1044
+ .security-stop {
1045
+ display: flex;
1046
+ align-items: center;
1047
+ gap: 8px;
1048
+ font-size: 11px;
1049
+ color: #7a86aa;
1050
+ cursor: default;
1051
+ padding: 2px 4px;
1052
+ border-radius: 4px;
1053
+ }
1054
+ .security-stop-dot {
1055
+ width: 9px; height: 9px;
1056
+ border-radius: 50%;
1057
+ flex-shrink: 0;
1058
+ box-sizing: border-box;
1059
+ }
944
1060
  `;
945
1061
  }
946
- function buildJs(visNodes, visEdges, kindColors, edgeColors) {
1062
+ function buildJs(visNodes, visEdges, kindColors, edgeColors, hasSecurityNodes) {
947
1063
  return `// \u2500\u2500 Data \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
948
1064
  const NODES_DATA = ${JSON.stringify(visNodes)};
949
1065
  const EDGES_DATA = ${JSON.stringify(visEdges)};
@@ -1551,6 +1667,7 @@ document.getElementById('btn-cluster').addEventListener('click', () => {
1551
1667
  document.getElementById('heat-legend').style.display = 'none';
1552
1668
  nodesDS.update(NODES_DATA.map(n => ({ id: n.id, color: originalColors[n.id] })));
1553
1669
  }
1670
+ ${hasSecurityNodes ? `if (securityActive) { exitSecurityOverlay(); }` : ""}
1554
1671
  if (focusActive) exitFocus();
1555
1672
  if (pathMode) exitPath(true);
1556
1673
  network.unselectAll();
@@ -1769,6 +1886,55 @@ document.querySelectorAll('.heat-stop').forEach(function(el) {
1769
1886
  el.addEventListener('mouseleave', function() { if (tip) tip.textContent = ''; });
1770
1887
  });
1771
1888
 
1889
+ ${hasSecurityNodes ? `// \u2500\u2500 Security overlay \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
1890
+ let securityActive = false;
1891
+
1892
+ // Colours embedded from build-time palette
1893
+ const SEC_DEP_COLORS = { affected: '#ef4444', under_investigation: '#f59e0b', not_affected: '#22c55e', none: '#64748b' };
1894
+ const SEC_VULN_COLORS = { affected: '#dc2626', under_investigation: '#d97706', not_affected: '#16a34a' };
1895
+
1896
+ function enterSecurityOverlay() {
1897
+ securityActive = true;
1898
+ document.getElementById('btn-security').classList.add('active');
1899
+ document.getElementById('security-legend').style.display = 'block';
1900
+
1901
+ const DIM = { background: '#111118', border: '#1a1a2a', highlight: { background: '#111118', border: '#1a1a2a' }, hover: { background: '#111118', border: '#1a1a2a' } };
1902
+ const secNodeIds = new Set(
1903
+ NODES_DATA
1904
+ .filter(n => n.kind === 'dependency' || n.kind === 'vulnerability')
1905
+ .map(n => n.id)
1906
+ );
1907
+
1908
+ // Dim edges that don't connect to any security node
1909
+ const secEdgeIds = new Set(
1910
+ EDGES_DATA
1911
+ .filter(e => secNodeIds.has(e.from) || secNodeIds.has(e.to))
1912
+ .map(e => e.id)
1913
+ );
1914
+
1915
+ nodesDS.update(NODES_DATA.map(n => ({
1916
+ id: n.id,
1917
+ color: secNodeIds.has(n.id) ? originalColors[n.id] : DIM,
1918
+ })));
1919
+ edgesDS.update(EDGES_DATA.map(e => ({
1920
+ id: e.id,
1921
+ color: secEdgeIds.has(e.id) ? originalEdgeColors[e.id] : { color: '#111118', opacity: 0.08 },
1922
+ })));
1923
+ }
1924
+
1925
+ function exitSecurityOverlay() {
1926
+ securityActive = false;
1927
+ document.getElementById('btn-security').classList.remove('active');
1928
+ document.getElementById('security-legend').style.display = 'none';
1929
+ nodesDS.update(NODES_DATA.map(n => ({ id: n.id, color: originalColors[n.id] })));
1930
+ edgesDS.update(EDGES_DATA.map(e => ({ id: e.id, color: originalEdgeColors[e.id] })));
1931
+ }
1932
+
1933
+ document.getElementById('btn-security').addEventListener('click', () => {
1934
+ if (securityActive) { exitSecurityOverlay(); } else { enterSecurityOverlay(); }
1935
+ });
1936
+ ` : "// Security overlay: no security nodes in this graph"}
1937
+
1772
1938
  // \u2500\u2500 Keyboard shortcuts \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
1773
1939
  document.addEventListener('keydown', e => {
1774
1940
  if (e.key === 'Escape') {
@@ -1821,6 +1987,9 @@ function resetToEmpty() {
1821
1987
  document.getElementById('heat-legend').style.display = 'none';
1822
1988
  }
1823
1989
 
1990
+ // Reset security overlay
1991
+ ${hasSecurityNodes ? `if (securityActive) { exitSecurityOverlay(); }` : ""}
1992
+
1824
1993
  // Reset context menu
1825
1994
  document.getElementById('ctx-menu').style.display = 'none';
1826
1995
  ctxNodeId = null;
@@ -2612,6 +2781,131 @@ function register(program) {
2612
2781
  `);
2613
2782
  openBrowser(indexPath);
2614
2783
  });
2784
+ exportCmd.command("graphml [projectPath]").description("Export graph as GraphML (for Gephi, yEd)").option("-o, --output <file>", "Output file path").action(async (projectPath, opts) => {
2785
+ const KiroGraph = (await Promise.resolve().then(() => require("../../index.js"))).default;
2786
+ const target = path.resolve(projectPath ?? process.cwd());
2787
+ const cg = await KiroGraph.open(target);
2788
+ const nodes = cg.getAllNodes();
2789
+ const edges = cg.getAllEdges();
2790
+ cg.close();
2791
+ const outPath = opts.output ?? path.join(target, ".kirograph", "export", "graph.graphml");
2792
+ fs.mkdirSync(path.dirname(outPath), { recursive: true });
2793
+ const lines = [
2794
+ '<?xml version="1.0" encoding="UTF-8"?>',
2795
+ '<graphml xmlns="http://graphml.graphstruct.org/graphml">',
2796
+ ' <key id="kind" for="node" attr.name="kind" attr.type="string"/>',
2797
+ ' <key id="name" for="node" attr.name="name" attr.type="string"/>',
2798
+ ' <key id="file" for="node" attr.name="file" attr.type="string"/>',
2799
+ ' <key id="line" for="node" attr.name="line" attr.type="int"/>',
2800
+ ' <key id="edgeKind" for="edge" attr.name="kind" attr.type="string"/>',
2801
+ ' <graph id="G" edgedefault="directed">'
2802
+ ];
2803
+ for (const n of nodes) {
2804
+ lines.push(` <node id="${escHtml(n.id)}">`);
2805
+ lines.push(` <data key="kind">${escHtml(n.kind)}</data>`);
2806
+ lines.push(` <data key="name">${escHtml(n.name)}</data>`);
2807
+ lines.push(` <data key="file">${escHtml(n.filePath)}</data>`);
2808
+ lines.push(` <data key="line">${n.startLine}</data>`);
2809
+ lines.push(` </node>`);
2810
+ }
2811
+ for (const e of edges) {
2812
+ lines.push(` <edge source="${escHtml(e.source)}" target="${escHtml(e.target)}">`);
2813
+ lines.push(` <data key="edgeKind">${escHtml(e.kind)}</data>`);
2814
+ lines.push(` </edge>`);
2815
+ }
2816
+ lines.push(" </graph>", "</graphml>");
2817
+ fs.writeFileSync(outPath, lines.join("\n"), "utf8");
2818
+ console.log(`
2819
+ ${import_ui.green}GraphML exported${import_ui.reset}: ${outPath}`);
2820
+ console.log(` ${import_ui.dim}${nodes.length} nodes, ${edges.length} edges${import_ui.reset}
2821
+ `);
2822
+ });
2823
+ exportCmd.command("cypher [projectPath]").description("Export graph as Neo4j Cypher statements").option("-o, --output <file>", "Output file path").action(async (projectPath, opts) => {
2824
+ const KiroGraph = (await Promise.resolve().then(() => require("../../index.js"))).default;
2825
+ const target = path.resolve(projectPath ?? process.cwd());
2826
+ const cg = await KiroGraph.open(target);
2827
+ const nodes = cg.getAllNodes();
2828
+ const edges = cg.getAllEdges();
2829
+ cg.close();
2830
+ const outPath = opts.output ?? path.join(target, ".kirograph", "export", "graph.cypher");
2831
+ fs.mkdirSync(path.dirname(outPath), { recursive: true });
2832
+ const lines = ["// Generated by KiroGraph", "// Import with: cat graph.cypher | cypher-shell", ""];
2833
+ for (const n of nodes) {
2834
+ const label = n.kind.charAt(0).toUpperCase() + n.kind.slice(1);
2835
+ const props = `{id: "${n.id.replace(/"/g, '\\"')}", name: "${n.name.replace(/"/g, '\\"')}", file: "${n.filePath.replace(/"/g, '\\"')}", line: ${n.startLine}}`;
2836
+ lines.push(`CREATE (:${label} ${props});`);
2837
+ }
2838
+ lines.push("");
2839
+ for (const e of edges) {
2840
+ const relType = e.kind.toUpperCase();
2841
+ lines.push(`MATCH (a {id: "${e.source.replace(/"/g, '\\"')}"}), (b {id: "${e.target.replace(/"/g, '\\"')}"}) CREATE (a)-[:${relType}]->(b);`);
2842
+ }
2843
+ fs.writeFileSync(outPath, lines.join("\n"), "utf8");
2844
+ console.log(`
2845
+ ${import_ui.green}Neo4j Cypher exported${import_ui.reset}: ${outPath}`);
2846
+ console.log(` ${import_ui.dim}${nodes.length} nodes, ${edges.length} edges${import_ui.reset}
2847
+ `);
2848
+ });
2849
+ exportCmd.command("obsidian [projectPath]").description("Export graph as an Obsidian vault with wikilinks").option("-o, --output <dir>", "Output directory path").action(async (projectPath, opts) => {
2850
+ const KiroGraph = (await Promise.resolve().then(() => require("../../index.js"))).default;
2851
+ const target = path.resolve(projectPath ?? process.cwd());
2852
+ const cg = await KiroGraph.open(target);
2853
+ const nodes = cg.getAllNodes();
2854
+ const edges = cg.getAllEdges();
2855
+ cg.close();
2856
+ const outDir = opts.output ?? path.join(target, ".kirograph", "export", "obsidian");
2857
+ fs.mkdirSync(outDir, { recursive: true });
2858
+ const callersMap = /* @__PURE__ */ new Map();
2859
+ const calleesMap = /* @__PURE__ */ new Map();
2860
+ const nodeById = new Map(nodes.map((n) => [n.id, n]));
2861
+ for (const e of edges) {
2862
+ if (e.kind === "calls") {
2863
+ const targetNode = nodeById.get(e.target);
2864
+ const sourceNode = nodeById.get(e.source);
2865
+ if (targetNode) {
2866
+ if (!calleesMap.has(e.source)) calleesMap.set(e.source, []);
2867
+ calleesMap.get(e.source).push(targetNode.name);
2868
+ }
2869
+ if (sourceNode) {
2870
+ if (!callersMap.has(e.target)) callersMap.set(e.target, []);
2871
+ callersMap.get(e.target).push(sourceNode.name);
2872
+ }
2873
+ }
2874
+ }
2875
+ let fileCount = 0;
2876
+ for (const n of nodes) {
2877
+ if (n.kind === "variable" || n.kind === "parameter") continue;
2878
+ const callers = callersMap.get(n.id) ?? [];
2879
+ const callees = calleesMap.get(n.id) ?? [];
2880
+ const lines = [
2881
+ `# ${n.name}`,
2882
+ "",
2883
+ `- **Kind**: ${n.kind}`,
2884
+ `- **File**: \`${n.filePath}:${n.startLine}\``
2885
+ ];
2886
+ if (n.signature) lines.push(`- **Signature**: \`${n.signature}\``);
2887
+ if (n.isExported) lines.push(`- **Exported**: yes`);
2888
+ if (callees.length > 0) {
2889
+ lines.push("", "## Calls", "");
2890
+ for (const c of [...new Set(callees)].slice(0, 20)) {
2891
+ lines.push(`- [[${c}]]`);
2892
+ }
2893
+ }
2894
+ if (callers.length > 0) {
2895
+ lines.push("", "## Called by", "");
2896
+ for (const c of [...new Set(callers)].slice(0, 20)) {
2897
+ lines.push(`- [[${c}]]`);
2898
+ }
2899
+ }
2900
+ const safeName = n.name.replace(/[<>:"/\\|?*]/g, "_");
2901
+ fs.writeFileSync(path.join(outDir, `${safeName}.md`), lines.join("\n"), "utf8");
2902
+ fileCount++;
2903
+ }
2904
+ console.log(`
2905
+ ${import_ui.green}Obsidian vault exported${import_ui.reset}: ${outDir}`);
2906
+ console.log(` ${import_ui.dim}${fileCount} markdown files with wikilinks${import_ui.reset}
2907
+ `);
2908
+ });
2615
2909
  }
2616
2910
  // Annotate the CommonJS export names for ESM import in node:
2617
2911
  0 && (module.exports = {