kirograph 0.19.0 → 0.20.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (690) hide show
  1. package/README.md +10 -8
  2. package/dist/architecture/layers/dart.d.ts +10 -0
  3. package/dist/architecture/layers/dart.d.ts.map +1 -0
  4. package/dist/architecture/layers/elixir.d.ts +6 -0
  5. package/dist/architecture/layers/elixir.d.ts.map +1 -0
  6. package/dist/architecture/layers/index.d.ts.map +1 -1
  7. package/dist/architecture/layers/ocaml.d.ts +6 -0
  8. package/dist/architecture/layers/ocaml.d.ts.map +1 -0
  9. package/dist/architecture/layers/scala.d.ts +6 -0
  10. package/dist/architecture/layers/scala.d.ts.map +1 -0
  11. package/dist/architecture/layers/solidity.d.ts +6 -0
  12. package/dist/architecture/layers/solidity.d.ts.map +1 -0
  13. package/dist/architecture/layers/vue.d.ts +6 -0
  14. package/dist/architecture/layers/vue.d.ts.map +1 -0
  15. package/dist/architecture/manifest/elm.d.ts +3 -0
  16. package/dist/architecture/manifest/elm.d.ts.map +1 -0
  17. package/dist/architecture/manifest/index.d.ts.map +1 -1
  18. package/dist/architecture/manifest/ocaml.d.ts +3 -0
  19. package/dist/architecture/manifest/ocaml.d.ts.map +1 -0
  20. package/dist/architecture/manifest/scala.d.ts +3 -0
  21. package/dist/architecture/manifest/scala.d.ts.map +1 -0
  22. package/dist/bin/banner.d.ts.map +1 -1
  23. package/dist/bin/commands/affected.d.ts.map +1 -1
  24. package/dist/bin/commands/attack-surface.d.ts +3 -0
  25. package/dist/bin/commands/attack-surface.d.ts.map +1 -0
  26. package/dist/bin/commands/attack-surface.js +7 -0
  27. package/dist/bin/commands/attack-surface.js.map +2 -2
  28. package/dist/bin/commands/benchmark.d.ts +9 -0
  29. package/dist/bin/commands/benchmark.d.ts.map +1 -0
  30. package/dist/bin/commands/budget.d.ts +6 -0
  31. package/dist/bin/commands/budget.d.ts.map +1 -0
  32. package/dist/bin/commands/caveman.d.ts +7 -0
  33. package/dist/bin/commands/caveman.d.ts.map +1 -0
  34. package/dist/bin/commands/communities.d.ts +3 -0
  35. package/dist/bin/commands/communities.d.ts.map +1 -0
  36. package/dist/bin/commands/compression.d.ts +7 -0
  37. package/dist/bin/commands/compression.d.ts.map +1 -0
  38. package/dist/bin/commands/context.d.ts.map +1 -1
  39. package/dist/bin/commands/data.d.ts +3 -0
  40. package/dist/bin/commands/data.d.ts.map +1 -0
  41. package/dist/bin/commands/dead-code.d.ts +3 -0
  42. package/dist/bin/commands/dead-code.d.ts.map +1 -0
  43. package/dist/bin/commands/dep-confusion.d.ts +3 -0
  44. package/dist/bin/commands/dep-confusion.d.ts.map +1 -0
  45. package/dist/bin/commands/docs.d.ts +3 -0
  46. package/dist/bin/commands/docs.d.ts.map +1 -0
  47. package/dist/bin/commands/exec.d.ts +11 -0
  48. package/dist/bin/commands/exec.d.ts.map +1 -0
  49. package/dist/bin/commands/export.d.ts +3 -0
  50. package/dist/bin/commands/export.d.ts.map +1 -0
  51. package/dist/bin/commands/flows.d.ts +3 -0
  52. package/dist/bin/commands/flows.d.ts.map +1 -0
  53. package/dist/bin/commands/gain.d.ts +6 -0
  54. package/dist/bin/commands/gain.d.ts.map +1 -0
  55. package/dist/bin/commands/help.d.ts +7 -0
  56. package/dist/bin/commands/help.d.ts.map +1 -1
  57. package/dist/bin/commands/help.js +20 -3
  58. package/dist/bin/commands/help.js.map +2 -2
  59. package/dist/bin/commands/hotspots.d.ts +3 -0
  60. package/dist/bin/commands/hotspots.d.ts.map +1 -0
  61. package/dist/bin/commands/hotspots.js +94 -1
  62. package/dist/bin/commands/hotspots.js.map +3 -3
  63. package/dist/bin/commands/install.d.ts.map +1 -1
  64. package/dist/bin/commands/install.js +3 -3
  65. package/dist/bin/commands/install.js.map +2 -2
  66. package/dist/bin/commands/licenses.d.ts +3 -0
  67. package/dist/bin/commands/licenses.d.ts.map +1 -0
  68. package/dist/bin/commands/memory.d.ts +16 -0
  69. package/dist/bin/commands/memory.d.ts.map +1 -0
  70. package/dist/bin/commands/memory.js +151 -4
  71. package/dist/bin/commands/memory.js.map +2 -2
  72. package/dist/bin/commands/path.d.ts +3 -0
  73. package/dist/bin/commands/path.d.ts.map +1 -0
  74. package/dist/bin/commands/pattern.d.ts +3 -0
  75. package/dist/bin/commands/pattern.d.ts.map +1 -0
  76. package/dist/bin/commands/pattern.js +592 -0
  77. package/dist/bin/commands/pattern.js.map +7 -0
  78. package/dist/bin/commands/query.d.ts.map +1 -1
  79. package/dist/bin/commands/reachability.d.ts +3 -0
  80. package/dist/bin/commands/reachability.d.ts.map +1 -0
  81. package/dist/bin/commands/read.d.ts +6 -0
  82. package/dist/bin/commands/read.d.ts.map +1 -0
  83. package/dist/bin/commands/refactor.d.ts +3 -0
  84. package/dist/bin/commands/refactor.d.ts.map +1 -0
  85. package/dist/bin/commands/remediation.d.ts +3 -0
  86. package/dist/bin/commands/remediation.d.ts.map +1 -0
  87. package/dist/bin/commands/sbom.d.ts +3 -0
  88. package/dist/bin/commands/sbom.d.ts.map +1 -0
  89. package/dist/bin/commands/security-ci-report.d.ts +9 -0
  90. package/dist/bin/commands/security-ci-report.d.ts.map +1 -0
  91. package/dist/bin/commands/security-export.d.ts +2 -0
  92. package/dist/bin/commands/security-export.d.ts.map +1 -0
  93. package/dist/bin/commands/security-flows.d.ts +3 -0
  94. package/dist/bin/commands/security-flows.d.ts.map +1 -0
  95. package/dist/bin/commands/security-secrets.d.ts +3 -0
  96. package/dist/bin/commands/security-secrets.d.ts.map +1 -0
  97. package/dist/bin/commands/security.d.ts +3 -0
  98. package/dist/bin/commands/security.d.ts.map +1 -0
  99. package/dist/bin/commands/security.js +15 -0
  100. package/dist/bin/commands/security.js.map +2 -2
  101. package/dist/bin/commands/snapshot.d.ts +3 -0
  102. package/dist/bin/commands/snapshot.d.ts.map +1 -0
  103. package/dist/bin/commands/staleness.d.ts +3 -0
  104. package/dist/bin/commands/staleness.d.ts.map +1 -0
  105. package/dist/bin/commands/status.d.ts.map +1 -1
  106. package/dist/bin/commands/status.js +27 -0
  107. package/dist/bin/commands/status.js.map +2 -2
  108. package/dist/bin/commands/supply-chain.d.ts +3 -0
  109. package/dist/bin/commands/supply-chain.d.ts.map +1 -0
  110. package/dist/bin/commands/surprising.d.ts +3 -0
  111. package/dist/bin/commands/surprising.d.ts.map +1 -0
  112. package/dist/bin/commands/sync.d.ts.map +1 -1
  113. package/dist/bin/commands/uninit.d.ts.map +1 -1
  114. package/dist/bin/commands/utils.d.ts +5 -0
  115. package/dist/bin/commands/utils.d.ts.map +1 -1
  116. package/dist/bin/commands/vex.d.ts +3 -0
  117. package/dist/bin/commands/vex.d.ts.map +1 -0
  118. package/dist/bin/commands/vuln-suppress.d.ts +3 -0
  119. package/dist/bin/commands/vuln-suppress.d.ts.map +1 -0
  120. package/dist/bin/commands/vulns.d.ts +3 -0
  121. package/dist/bin/commands/vulns.d.ts.map +1 -0
  122. package/dist/bin/installer/archive.d.ts +47 -0
  123. package/dist/bin/installer/archive.d.ts.map +1 -0
  124. package/dist/bin/installer/auto-detect.d.ts +16 -0
  125. package/dist/bin/installer/auto-detect.d.ts.map +1 -0
  126. package/dist/bin/installer/caveman.d.ts +12 -0
  127. package/dist/bin/installer/caveman.d.ts.map +1 -0
  128. package/dist/bin/installer/cli-agent.d.ts +7 -2
  129. package/dist/bin/installer/cli-agent.d.ts.map +1 -1
  130. package/dist/bin/installer/cli-agent.js +6 -2
  131. package/dist/bin/installer/cli-agent.js.map +2 -2
  132. package/dist/bin/installer/common.d.ts +36 -0
  133. package/dist/bin/installer/common.d.ts.map +1 -0
  134. package/dist/bin/installer/common.js +2 -1
  135. package/dist/bin/installer/common.js.map +2 -2
  136. package/dist/bin/installer/config-prompt.d.ts +1 -1
  137. package/dist/bin/installer/config-prompt.d.ts.map +1 -1
  138. package/dist/bin/installer/config-prompt.js +74 -2
  139. package/dist/bin/installer/config-prompt.js.map +2 -2
  140. package/dist/bin/installer/dashboard.d.ts.map +1 -1
  141. package/dist/bin/installer/detect.d.ts +30 -0
  142. package/dist/bin/installer/detect.d.ts.map +1 -0
  143. package/dist/bin/installer/hooks.d.ts +4 -1
  144. package/dist/bin/installer/hooks.d.ts.map +1 -1
  145. package/dist/bin/installer/hooks.js +34 -0
  146. package/dist/bin/installer/hooks.js.map +2 -2
  147. package/dist/bin/installer/index.d.ts +5 -4
  148. package/dist/bin/installer/index.d.ts.map +1 -1
  149. package/dist/bin/installer/index.js +67 -8
  150. package/dist/bin/installer/index.js.map +2 -2
  151. package/dist/bin/installer/instructions.d.ts +14 -0
  152. package/dist/bin/installer/instructions.d.ts.map +1 -0
  153. package/dist/bin/installer/instructions.js +15 -1
  154. package/dist/bin/installer/instructions.js.map +2 -2
  155. package/dist/bin/installer/mcp.d.ts.map +1 -1
  156. package/dist/bin/installer/prompts.d.ts +17 -0
  157. package/dist/bin/installer/prompts.d.ts.map +1 -1
  158. package/dist/bin/installer/qdrant-dashboard.d.ts.map +1 -1
  159. package/dist/bin/installer/steering.d.ts +14 -2
  160. package/dist/bin/installer/steering.d.ts.map +1 -1
  161. package/dist/bin/installer/steering.js +81 -0
  162. package/dist/bin/installer/steering.js.map +2 -2
  163. package/dist/bin/installer/targets/aider.d.ts +6 -0
  164. package/dist/bin/installer/targets/aider.d.ts.map +1 -0
  165. package/dist/bin/installer/targets/aider.js +3 -3
  166. package/dist/bin/installer/targets/aider.js.map +2 -2
  167. package/dist/bin/installer/targets/amp.d.ts +6 -0
  168. package/dist/bin/installer/targets/amp.d.ts.map +1 -0
  169. package/dist/bin/installer/targets/amp.js +3 -3
  170. package/dist/bin/installer/targets/amp.js.map +2 -2
  171. package/dist/bin/installer/targets/antigravity.d.ts +13 -0
  172. package/dist/bin/installer/targets/antigravity.d.ts.map +1 -0
  173. package/dist/bin/installer/targets/antigravity.js +2 -2
  174. package/dist/bin/installer/targets/antigravity.js.map +2 -2
  175. package/dist/bin/installer/targets/augment.d.ts +6 -0
  176. package/dist/bin/installer/targets/augment.d.ts.map +1 -0
  177. package/dist/bin/installer/targets/augment.js +3 -3
  178. package/dist/bin/installer/targets/augment.js.map +2 -2
  179. package/dist/bin/installer/targets/claude.d.ts +6 -0
  180. package/dist/bin/installer/targets/claude.d.ts.map +1 -0
  181. package/dist/bin/installer/targets/claude.js +2 -2
  182. package/dist/bin/installer/targets/claude.js.map +2 -2
  183. package/dist/bin/installer/targets/cline.d.ts +13 -0
  184. package/dist/bin/installer/targets/cline.d.ts.map +1 -0
  185. package/dist/bin/installer/targets/cline.js +2 -2
  186. package/dist/bin/installer/targets/cline.js.map +2 -2
  187. package/dist/bin/installer/targets/codex.d.ts +6 -0
  188. package/dist/bin/installer/targets/codex.d.ts.map +1 -0
  189. package/dist/bin/installer/targets/codex.js +2 -2
  190. package/dist/bin/installer/targets/codex.js.map +2 -2
  191. package/dist/bin/installer/targets/continue.d.ts +12 -0
  192. package/dist/bin/installer/targets/continue.d.ts.map +1 -0
  193. package/dist/bin/installer/targets/continue.js +2 -2
  194. package/dist/bin/installer/targets/continue.js.map +2 -2
  195. package/dist/bin/installer/targets/copilot-cli.d.ts +12 -0
  196. package/dist/bin/installer/targets/copilot-cli.d.ts.map +1 -0
  197. package/dist/bin/installer/targets/copilot-cli.js +2 -2
  198. package/dist/bin/installer/targets/copilot-cli.js.map +2 -2
  199. package/dist/bin/installer/targets/copilot.d.ts +6 -0
  200. package/dist/bin/installer/targets/copilot.d.ts.map +1 -0
  201. package/dist/bin/installer/targets/copilot.js +2 -2
  202. package/dist/bin/installer/targets/copilot.js.map +2 -2
  203. package/dist/bin/installer/targets/cursor.d.ts +6 -0
  204. package/dist/bin/installer/targets/cursor.d.ts.map +1 -0
  205. package/dist/bin/installer/targets/cursor.js +2 -2
  206. package/dist/bin/installer/targets/cursor.js.map +2 -2
  207. package/dist/bin/installer/targets/devin.d.ts +13 -0
  208. package/dist/bin/installer/targets/devin.d.ts.map +1 -0
  209. package/dist/bin/installer/targets/devin.js +2 -2
  210. package/dist/bin/installer/targets/devin.js.map +2 -2
  211. package/dist/bin/installer/targets/gemini-cli.d.ts +16 -0
  212. package/dist/bin/installer/targets/gemini-cli.d.ts.map +1 -0
  213. package/dist/bin/installer/targets/gemini-cli.js +2 -2
  214. package/dist/bin/installer/targets/gemini-cli.js.map +2 -2
  215. package/dist/bin/installer/targets/generic.d.ts +59 -0
  216. package/dist/bin/installer/targets/generic.d.ts.map +1 -0
  217. package/dist/bin/installer/targets/generic.js +2 -2
  218. package/dist/bin/installer/targets/generic.js.map +2 -2
  219. package/dist/bin/installer/targets/goose.d.ts +6 -0
  220. package/dist/bin/installer/targets/goose.d.ts.map +1 -0
  221. package/dist/bin/installer/targets/goose.js +3 -3
  222. package/dist/bin/installer/targets/goose.js.map +2 -2
  223. package/dist/bin/installer/targets/index.d.ts +11 -0
  224. package/dist/bin/installer/targets/index.d.ts.map +1 -0
  225. package/dist/bin/installer/targets/index.js.map +1 -1
  226. package/dist/bin/installer/targets/junie.d.ts +13 -0
  227. package/dist/bin/installer/targets/junie.d.ts.map +1 -0
  228. package/dist/bin/installer/targets/junie.js +2 -2
  229. package/dist/bin/installer/targets/junie.js.map +2 -2
  230. package/dist/bin/installer/targets/kilo.d.ts +12 -0
  231. package/dist/bin/installer/targets/kilo.d.ts.map +1 -0
  232. package/dist/bin/installer/targets/kilo.js +2 -2
  233. package/dist/bin/installer/targets/kilo.js.map +2 -2
  234. package/dist/bin/installer/targets/kiro.d.ts +5 -0
  235. package/dist/bin/installer/targets/kiro.d.ts.map +1 -0
  236. package/dist/bin/installer/targets/kiro.js +4 -4
  237. package/dist/bin/installer/targets/kiro.js.map +2 -2
  238. package/dist/bin/installer/targets/opencode.d.ts +13 -0
  239. package/dist/bin/installer/targets/opencode.d.ts.map +1 -0
  240. package/dist/bin/installer/targets/opencode.js +2 -2
  241. package/dist/bin/installer/targets/opencode.js.map +2 -2
  242. package/dist/bin/installer/targets/openhands.d.ts +6 -0
  243. package/dist/bin/installer/targets/openhands.d.ts.map +1 -0
  244. package/dist/bin/installer/targets/openhands.js +3 -3
  245. package/dist/bin/installer/targets/openhands.js.map +2 -2
  246. package/dist/bin/installer/targets/qoder.d.ts +12 -0
  247. package/dist/bin/installer/targets/qoder.d.ts.map +1 -0
  248. package/dist/bin/installer/targets/qoder.js +2 -2
  249. package/dist/bin/installer/targets/qoder.js.map +2 -2
  250. package/dist/bin/installer/targets/qwen.d.ts +12 -0
  251. package/dist/bin/installer/targets/qwen.d.ts.map +1 -0
  252. package/dist/bin/installer/targets/qwen.js +2 -2
  253. package/dist/bin/installer/targets/qwen.js.map +2 -2
  254. package/dist/bin/installer/targets/replit.d.ts +6 -0
  255. package/dist/bin/installer/targets/replit.d.ts.map +1 -0
  256. package/dist/bin/installer/targets/replit.js +3 -3
  257. package/dist/bin/installer/targets/replit.js.map +2 -2
  258. package/dist/bin/installer/targets/roo.d.ts +13 -0
  259. package/dist/bin/installer/targets/roo.d.ts.map +1 -0
  260. package/dist/bin/installer/targets/roo.js +2 -2
  261. package/dist/bin/installer/targets/roo.js.map +2 -2
  262. package/dist/bin/installer/targets/tabnine.d.ts +6 -0
  263. package/dist/bin/installer/targets/tabnine.d.ts.map +1 -0
  264. package/dist/bin/installer/targets/tabnine.js +3 -3
  265. package/dist/bin/installer/targets/tabnine.js.map +2 -2
  266. package/dist/bin/installer/targets/trae.d.ts +6 -0
  267. package/dist/bin/installer/targets/trae.d.ts.map +1 -0
  268. package/dist/bin/installer/targets/trae.js +3 -3
  269. package/dist/bin/installer/targets/trae.js.map +2 -2
  270. package/dist/bin/installer/targets/warp.d.ts +12 -0
  271. package/dist/bin/installer/targets/warp.d.ts.map +1 -0
  272. package/dist/bin/installer/targets/warp.js +2 -2
  273. package/dist/bin/installer/targets/warp.js.map +2 -2
  274. package/dist/bin/installer/targets/windsurf.d.ts +13 -0
  275. package/dist/bin/installer/targets/windsurf.d.ts.map +1 -0
  276. package/dist/bin/installer/targets/windsurf.js +2 -2
  277. package/dist/bin/installer/targets/windsurf.js.map +2 -2
  278. package/dist/bin/kirograph.js +3 -1
  279. package/dist/bin/kirograph.js.map +3 -3
  280. package/dist/bin/progress.d.ts +16 -1
  281. package/dist/bin/progress.d.ts.map +1 -1
  282. package/dist/compression/filters/aws.d.ts +9 -0
  283. package/dist/compression/filters/aws.d.ts.map +1 -0
  284. package/dist/compression/filters/docker.d.ts +6 -0
  285. package/dist/compression/filters/docker.d.ts.map +1 -0
  286. package/dist/compression/filters/files.d.ts +6 -0
  287. package/dist/compression/filters/files.d.ts.map +1 -0
  288. package/dist/compression/filters/generic.d.ts +7 -0
  289. package/dist/compression/filters/generic.d.ts.map +1 -0
  290. package/dist/compression/filters/git.d.ts +6 -0
  291. package/dist/compression/filters/git.d.ts.map +1 -0
  292. package/dist/compression/filters/github.d.ts +6 -0
  293. package/dist/compression/filters/github.d.ts.map +1 -0
  294. package/dist/compression/filters/lint.d.ts +6 -0
  295. package/dist/compression/filters/lint.d.ts.map +1 -0
  296. package/dist/compression/filters/misc.d.ts +6 -0
  297. package/dist/compression/filters/misc.d.ts.map +1 -0
  298. package/dist/compression/filters/package.d.ts +6 -0
  299. package/dist/compression/filters/package.d.ts.map +1 -0
  300. package/dist/compression/filters/test.d.ts +6 -0
  301. package/dist/compression/filters/test.d.ts.map +1 -0
  302. package/dist/compression/index.d.ts +29 -0
  303. package/dist/compression/index.d.ts.map +1 -0
  304. package/dist/compression/naive-cost.d.ts +26 -0
  305. package/dist/compression/naive-cost.d.ts.map +1 -0
  306. package/dist/compression/tracker.d.ts +155 -0
  307. package/dist/compression/tracker.d.ts.map +1 -0
  308. package/dist/compression/types.d.ts +49 -0
  309. package/dist/compression/types.d.ts.map +1 -0
  310. package/dist/config.d.ts +90 -0
  311. package/dist/config.d.ts.map +1 -1
  312. package/dist/config.js +55 -1
  313. package/dist/config.js.map +2 -2
  314. package/dist/core/lock-manager.d.ts +2 -0
  315. package/dist/core/lock-manager.d.ts.map +1 -1
  316. package/dist/core/pipeline.d.ts +4 -1
  317. package/dist/core/pipeline.d.ts.map +1 -1
  318. package/dist/core/pipeline.js +42 -0
  319. package/dist/core/pipeline.js.map +2 -2
  320. package/dist/core/snapshot.d.ts +58 -0
  321. package/dist/core/snapshot.d.ts.map +1 -0
  322. package/dist/data/filters.d.ts +23 -0
  323. package/dist/data/filters.d.ts.map +1 -0
  324. package/dist/data/indexer.d.ts +25 -0
  325. package/dist/data/indexer.d.ts.map +1 -0
  326. package/dist/data/linker.d.ts +37 -0
  327. package/dist/data/linker.d.ts.map +1 -0
  328. package/dist/data/lint.d.ts +27 -0
  329. package/dist/data/lint.d.ts.map +1 -0
  330. package/dist/data/parsers/csv.d.ts +11 -0
  331. package/dist/data/parsers/csv.d.ts.map +1 -0
  332. package/dist/data/parsers/excel.d.ts +10 -0
  333. package/dist/data/parsers/excel.d.ts.map +1 -0
  334. package/dist/data/parsers/index.d.ts +28 -0
  335. package/dist/data/parsers/index.d.ts.map +1 -0
  336. package/dist/data/parsers/json-array.d.ts +9 -0
  337. package/dist/data/parsers/json-array.d.ts.map +1 -0
  338. package/dist/data/parsers/jsonl.d.ts +9 -0
  339. package/dist/data/parsers/jsonl.d.ts.map +1 -0
  340. package/dist/data/parsers/parquet.d.ts +10 -0
  341. package/dist/data/parsers/parquet.d.ts.map +1 -0
  342. package/dist/data/profiler.d.ts +29 -0
  343. package/dist/data/profiler.d.ts.map +1 -0
  344. package/dist/data/queries.d.ts +95 -0
  345. package/dist/data/queries.d.ts.map +1 -0
  346. package/dist/data/types.d.ts +103 -0
  347. package/dist/data/types.d.ts.map +1 -0
  348. package/dist/db/database.d.ts +57 -0
  349. package/dist/db/database.d.ts.map +1 -1
  350. package/dist/db/database.js +19 -0
  351. package/dist/db/database.js.map +2 -2
  352. package/dist/db/patterns-schema.sql +23 -0
  353. package/dist/docs/formats/asciidoc.d.ts +9 -0
  354. package/dist/docs/formats/asciidoc.d.ts.map +1 -0
  355. package/dist/docs/formats/html.d.ts +10 -0
  356. package/dist/docs/formats/html.d.ts.map +1 -0
  357. package/dist/docs/formats/index.d.ts +31 -0
  358. package/dist/docs/formats/index.d.ts.map +1 -0
  359. package/dist/docs/formats/markdown.d.ts +11 -0
  360. package/dist/docs/formats/markdown.d.ts.map +1 -0
  361. package/dist/docs/formats/openapi.d.ts +17 -0
  362. package/dist/docs/formats/openapi.d.ts.map +1 -0
  363. package/dist/docs/formats/org.d.ts +9 -0
  364. package/dist/docs/formats/org.d.ts.map +1 -0
  365. package/dist/docs/formats/plaintext.d.ts +11 -0
  366. package/dist/docs/formats/plaintext.d.ts.map +1 -0
  367. package/dist/docs/formats/rdoc.d.ts +10 -0
  368. package/dist/docs/formats/rdoc.d.ts.map +1 -0
  369. package/dist/docs/formats/rst.d.ts +11 -0
  370. package/dist/docs/formats/rst.d.ts.map +1 -0
  371. package/dist/docs/indexer.d.ts +49 -0
  372. package/dist/docs/indexer.d.ts.map +1 -0
  373. package/dist/docs/linker.d.ts +30 -0
  374. package/dist/docs/linker.d.ts.map +1 -0
  375. package/dist/docs/lint.d.ts +27 -0
  376. package/dist/docs/lint.d.ts.map +1 -0
  377. package/dist/docs/queries.d.ts +78 -0
  378. package/dist/docs/queries.d.ts.map +1 -0
  379. package/dist/docs/section-id.d.ts +48 -0
  380. package/dist/docs/section-id.d.ts.map +1 -0
  381. package/dist/docs/summarizer.d.ts +13 -0
  382. package/dist/docs/summarizer.d.ts.map +1 -0
  383. package/dist/docs/types.d.ts +71 -0
  384. package/dist/docs/types.d.ts.map +1 -0
  385. package/dist/docs/vectors.d.ts +54 -0
  386. package/dist/docs/vectors.d.ts.map +1 -0
  387. package/dist/extraction/extractor.d.ts +1 -1
  388. package/dist/extraction/extractor.d.ts.map +1 -1
  389. package/dist/extraction/extractor.js +26 -3
  390. package/dist/extraction/extractor.js.map +2 -2
  391. package/dist/extraction/grammars.d.ts +6 -0
  392. package/dist/extraction/grammars.d.ts.map +1 -1
  393. package/dist/extraction/grammars.js +1 -0
  394. package/dist/extraction/grammars.js.map +2 -2
  395. package/dist/extraction/languages.d.ts.map +1 -1
  396. package/dist/extraction/languages.js +5 -1
  397. package/dist/extraction/languages.js.map +2 -2
  398. package/dist/extraction/notebook.d.ts +14 -0
  399. package/dist/extraction/notebook.d.ts.map +1 -0
  400. package/dist/frameworks/amplify.d.ts +9 -0
  401. package/dist/frameworks/amplify.d.ts.map +1 -0
  402. package/dist/frameworks/angular.d.ts +9 -0
  403. package/dist/frameworks/angular.d.ts.map +1 -0
  404. package/dist/frameworks/ansible.d.ts +8 -0
  405. package/dist/frameworks/ansible.d.ts.map +1 -0
  406. package/dist/frameworks/cloudformation.d.ts +9 -0
  407. package/dist/frameworks/cloudformation.d.ts.map +1 -0
  408. package/dist/frameworks/docker.d.ts +9 -0
  409. package/dist/frameworks/docker.d.ts.map +1 -0
  410. package/dist/frameworks/elixir.d.ts +6 -0
  411. package/dist/frameworks/elixir.d.ts.map +1 -0
  412. package/dist/frameworks/flutter.d.ts +12 -0
  413. package/dist/frameworks/flutter.d.ts.map +1 -0
  414. package/dist/frameworks/iac.d.ts +10 -0
  415. package/dist/frameworks/iac.d.ts.map +1 -0
  416. package/dist/frameworks/index.d.ts +14 -0
  417. package/dist/frameworks/index.d.ts.map +1 -1
  418. package/dist/frameworks/kubernetes.d.ts +9 -0
  419. package/dist/frameworks/kubernetes.d.ts.map +1 -0
  420. package/dist/frameworks/pulumi.d.ts +9 -0
  421. package/dist/frameworks/pulumi.d.ts.map +1 -0
  422. package/dist/frameworks/scala.d.ts +6 -0
  423. package/dist/frameworks/scala.d.ts.map +1 -0
  424. package/dist/frameworks/solidity.d.ts +6 -0
  425. package/dist/frameworks/solidity.d.ts.map +1 -0
  426. package/dist/frameworks/terraform.d.ts +14 -0
  427. package/dist/frameworks/terraform.d.ts.map +1 -0
  428. package/dist/frameworks/vue.d.ts +7 -0
  429. package/dist/frameworks/vue.d.ts.map +1 -0
  430. package/dist/graph/communities.d.ts +43 -0
  431. package/dist/graph/communities.d.ts.map +1 -0
  432. package/dist/graph/flows.d.ts +55 -0
  433. package/dist/graph/flows.d.ts.map +1 -0
  434. package/dist/graph/refactor.d.ts +43 -0
  435. package/dist/graph/refactor.d.ts.map +1 -0
  436. package/dist/index.d.ts +36 -4
  437. package/dist/index.d.ts.map +1 -1
  438. package/dist/mcp/cache.d.ts +69 -0
  439. package/dist/mcp/cache.d.ts.map +1 -0
  440. package/dist/mcp/read-modes.d.ts +31 -0
  441. package/dist/mcp/read-modes.d.ts.map +1 -0
  442. package/dist/mcp/server.d.ts +1 -0
  443. package/dist/mcp/server.d.ts.map +1 -1
  444. package/dist/mcp/server.js +15 -2
  445. package/dist/mcp/server.js.map +2 -2
  446. package/dist/mcp/tool-names.d.ts +2 -0
  447. package/dist/mcp/tool-names.d.ts.map +1 -0
  448. package/dist/mcp/tool-names.js +4 -1
  449. package/dist/mcp/tool-names.js.map +2 -2
  450. package/dist/mcp/tools.d.ts +12 -0
  451. package/dist/mcp/tools.d.ts.map +1 -1
  452. package/dist/mcp/tools.js +397 -0
  453. package/dist/mcp/tools.js.map +2 -2
  454. package/dist/memory/compress.d.ts +19 -0
  455. package/dist/memory/compress.d.ts.map +1 -0
  456. package/dist/memory/database.d.ts +92 -0
  457. package/dist/memory/database.d.ts.map +1 -0
  458. package/dist/memory/database.js +38 -0
  459. package/dist/memory/database.js.map +2 -2
  460. package/dist/memory/index.d.ts +71 -0
  461. package/dist/memory/index.d.ts.map +1 -0
  462. package/dist/memory/index.js +12 -2
  463. package/dist/memory/index.js.map +2 -2
  464. package/dist/memory/symbols.d.ts +21 -0
  465. package/dist/memory/symbols.d.ts.map +1 -0
  466. package/dist/memory/types.d.ts +78 -0
  467. package/dist/memory/types.d.ts.map +1 -0
  468. package/dist/memory/types.js.map +1 -1
  469. package/dist/memory/vectors.d.ts +43 -0
  470. package/dist/memory/vectors.d.ts.map +1 -0
  471. package/dist/patterns/graph.d.ts +16 -0
  472. package/dist/patterns/graph.d.ts.map +1 -0
  473. package/dist/patterns/graph.js +45 -0
  474. package/dist/patterns/graph.js.map +7 -0
  475. package/dist/patterns/index.d.ts +4 -0
  476. package/dist/patterns/index.d.ts.map +1 -0
  477. package/dist/patterns/index.js +39 -0
  478. package/dist/patterns/index.js.map +7 -0
  479. package/dist/patterns/indexer.d.ts +15 -0
  480. package/dist/patterns/indexer.d.ts.map +1 -0
  481. package/dist/patterns/indexer.js +97 -0
  482. package/dist/patterns/indexer.js.map +7 -0
  483. package/dist/patterns/library/code-eval-elixir.yaml +11 -0
  484. package/dist/patterns/library/command-injection-c.yaml +11 -0
  485. package/dist/patterns/library/command-injection-go.yaml +29 -0
  486. package/dist/patterns/library/command-injection-kotlin.yaml +10 -0
  487. package/dist/patterns/library/command-injection-php.yaml +11 -0
  488. package/dist/patterns/library/command-injection-ruby.yaml +11 -0
  489. package/dist/patterns/library/command-injection-rust.yaml +11 -0
  490. package/dist/patterns/library/dangerous-eval-bash.yaml +11 -0
  491. package/dist/patterns/library/dangerous-eval-js.yaml +14 -0
  492. package/dist/patterns/library/dangerous-eval-php.yaml +11 -0
  493. package/dist/patterns/library/dangerous-eval-ruby.yaml +11 -0
  494. package/dist/patterns/library/dangerous-exec-py.yaml +13 -0
  495. package/dist/patterns/library/dangerous-reflection-java.yaml +8 -0
  496. package/dist/patterns/library/dynamic-load-lua.yaml +10 -0
  497. package/dist/patterns/library/os-cmd-elixir.yaml +16 -0
  498. package/dist/patterns/library/os-execute-lua.yaml +10 -0
  499. package/dist/patterns/library/path-traversal-go.yaml +11 -0
  500. package/dist/patterns/library/path-traversal-py.yaml +12 -0
  501. package/dist/patterns/library/path-traversal-readfile-js.yaml +14 -0
  502. package/dist/patterns/library/process-launch-swift.yaml +11 -0
  503. package/dist/patterns/library/process-run-dart.yaml +15 -0
  504. package/dist/patterns/library/prototype-pollution-js.yaml +12 -0
  505. package/dist/patterns/library/source-injection-bash.yaml +11 -0
  506. package/dist/patterns/library/sql-injection-concat-js.yaml +12 -0
  507. package/dist/patterns/library/sql-injection-dart.yaml +9 -0
  508. package/dist/patterns/library/sql-injection-java.yaml +13 -0
  509. package/dist/patterns/library/sql-injection-kotlin.yaml +11 -0
  510. package/dist/patterns/library/sql-injection-php.yaml +9 -0
  511. package/dist/patterns/library/sql-injection-py.yaml +12 -0
  512. package/dist/patterns/library/sql-injection-swift.yaml +11 -0
  513. package/dist/patterns/library/sql-injection-template-js.yaml +13 -0
  514. package/dist/patterns/library/subshell-injection-ruby.yaml +8 -0
  515. package/dist/patterns/library/unsafe-block-rust.yaml +8 -0
  516. package/dist/patterns/library/unsafe-string-c.yaml +11 -0
  517. package/dist/patterns/library/weak-crypto-md5-js.yaml +13 -0
  518. package/dist/patterns/library/weak-crypto-py.yaml +13 -0
  519. package/dist/patterns/loader.d.ts +18 -0
  520. package/dist/patterns/loader.d.ts.map +1 -0
  521. package/dist/patterns/loader.js +277 -0
  522. package/dist/patterns/loader.js.map +7 -0
  523. package/dist/patterns/runner.d.ts +42 -0
  524. package/dist/patterns/runner.d.ts.map +1 -0
  525. package/dist/patterns/runner.js +295 -0
  526. package/dist/patterns/runner.js.map +7 -0
  527. package/dist/patterns/types.d.ts +27 -0
  528. package/dist/patterns/types.d.ts.map +1 -0
  529. package/dist/patterns/types.js +34 -0
  530. package/dist/patterns/types.js.map +7 -0
  531. package/dist/resolution/bridges/android-rn.d.ts +13 -0
  532. package/dist/resolution/bridges/android-rn.d.ts.map +1 -0
  533. package/dist/resolution/bridges/expo-modules.d.ts +10 -0
  534. package/dist/resolution/bridges/expo-modules.d.ts.map +1 -0
  535. package/dist/resolution/bridges/flutter-channel.d.ts +14 -0
  536. package/dist/resolution/bridges/flutter-channel.d.ts.map +1 -0
  537. package/dist/resolution/bridges/index.d.ts +40 -0
  538. package/dist/resolution/bridges/index.d.ts.map +1 -0
  539. package/dist/resolution/bridges/native-events.d.ts +10 -0
  540. package/dist/resolution/bridges/native-events.d.ts.map +1 -0
  541. package/dist/resolution/bridges/native-views.d.ts +13 -0
  542. package/dist/resolution/bridges/native-views.d.ts.map +1 -0
  543. package/dist/resolution/bridges/react-native.d.ts +9 -0
  544. package/dist/resolution/bridges/react-native.d.ts.map +1 -0
  545. package/dist/resolution/bridges/swift-objc.d.ts +14 -0
  546. package/dist/resolution/bridges/swift-objc.d.ts.map +1 -0
  547. package/dist/resolution/bridges/turbomodules.d.ts +10 -0
  548. package/dist/resolution/bridges/turbomodules.d.ts.map +1 -0
  549. package/dist/resolution/index.d.ts +28 -3
  550. package/dist/resolution/index.d.ts.map +1 -1
  551. package/dist/security/attack-surface.d.ts +46 -0
  552. package/dist/security/attack-surface.d.ts.map +1 -0
  553. package/dist/security/attack-surface.js +43 -1
  554. package/dist/security/attack-surface.js.map +2 -2
  555. package/dist/security/context-warnings.d.ts +40 -0
  556. package/dist/security/context-warnings.d.ts.map +1 -0
  557. package/dist/security/data-flows.d.ts +33 -0
  558. package/dist/security/data-flows.d.ts.map +1 -0
  559. package/dist/security/data-flows.js +65 -7
  560. package/dist/security/data-flows.js.map +2 -2
  561. package/dist/security/dep-confusion.d.ts +23 -0
  562. package/dist/security/dep-confusion.d.ts.map +1 -0
  563. package/dist/security/errors.d.ts +16 -0
  564. package/dist/security/errors.d.ts.map +1 -0
  565. package/dist/security/export/fix-suggestions.d.ts +21 -0
  566. package/dist/security/export/fix-suggestions.d.ts.map +1 -0
  567. package/dist/security/export/sbom.d.ts +33 -0
  568. package/dist/security/export/sbom.d.ts.map +1 -0
  569. package/dist/security/export/serialization.d.ts +62 -0
  570. package/dist/security/export/serialization.d.ts.map +1 -0
  571. package/dist/security/export/vex.d.ts +58 -0
  572. package/dist/security/export/vex.d.ts.map +1 -0
  573. package/dist/security/index.d.ts +21 -0
  574. package/dist/security/index.d.ts.map +1 -0
  575. package/dist/security/integrator.d.ts +63 -0
  576. package/dist/security/integrator.d.ts.map +1 -0
  577. package/dist/security/integrator.js +8 -8
  578. package/dist/security/integrator.js.map +2 -2
  579. package/dist/security/license.d.ts +33 -0
  580. package/dist/security/license.d.ts.map +1 -0
  581. package/dist/security/manifest/adapter.d.ts +92 -0
  582. package/dist/security/manifest/adapter.d.ts.map +1 -0
  583. package/dist/security/manifest/parser.d.ts +73 -0
  584. package/dist/security/manifest/parser.d.ts.map +1 -0
  585. package/dist/security/manifest/plugins/cargo.d.ts +11 -0
  586. package/dist/security/manifest/plugins/cargo.d.ts.map +1 -0
  587. package/dist/security/manifest/plugins/composer.d.ts +11 -0
  588. package/dist/security/manifest/plugins/composer.d.ts.map +1 -0
  589. package/dist/security/manifest/plugins/go.d.ts +12 -0
  590. package/dist/security/manifest/plugins/go.d.ts.map +1 -0
  591. package/dist/security/manifest/plugins/gradle.d.ts +12 -0
  592. package/dist/security/manifest/plugins/gradle.d.ts.map +1 -0
  593. package/dist/security/manifest/plugins/hex.d.ts +11 -0
  594. package/dist/security/manifest/plugins/hex.d.ts.map +1 -0
  595. package/dist/security/manifest/plugins/maven.d.ts +11 -0
  596. package/dist/security/manifest/plugins/maven.d.ts.map +1 -0
  597. package/dist/security/manifest/plugins/npm.d.ts +11 -0
  598. package/dist/security/manifest/plugins/npm.d.ts.map +1 -0
  599. package/dist/security/manifest/plugins/nuget.d.ts +12 -0
  600. package/dist/security/manifest/plugins/nuget.d.ts.map +1 -0
  601. package/dist/security/manifest/plugins/pip.d.ts +11 -0
  602. package/dist/security/manifest/plugins/pip.d.ts.map +1 -0
  603. package/dist/security/manifest/plugins/pubspec.d.ts +11 -0
  604. package/dist/security/manifest/plugins/pubspec.d.ts.map +1 -0
  605. package/dist/security/manifest/plugins/pyproject.d.ts +3 -0
  606. package/dist/security/manifest/plugins/pyproject.d.ts.map +1 -0
  607. package/dist/security/manifest/plugins/rubygems.d.ts +11 -0
  608. package/dist/security/manifest/plugins/rubygems.d.ts.map +1 -0
  609. package/dist/security/manifest/plugins/swift.d.ts +11 -0
  610. package/dist/security/manifest/plugins/swift.d.ts.map +1 -0
  611. package/dist/security/owasp.d.ts +16 -0
  612. package/dist/security/owasp.d.ts.map +1 -0
  613. package/dist/security/pipeline.d.ts +37 -0
  614. package/dist/security/pipeline.d.ts.map +1 -0
  615. package/dist/security/reachability.d.ts +67 -0
  616. package/dist/security/reachability.d.ts.map +1 -0
  617. package/dist/security/remediation.d.ts +51 -0
  618. package/dist/security/remediation.d.ts.map +1 -0
  619. package/dist/security/secrets.d.ts +38 -0
  620. package/dist/security/secrets.d.ts.map +1 -0
  621. package/dist/security/staleness.d.ts +43 -0
  622. package/dist/security/staleness.d.ts.map +1 -0
  623. package/dist/security/supply-chain.d.ts +34 -0
  624. package/dist/security/supply-chain.d.ts.map +1 -0
  625. package/dist/security/suppressions.d.ts +18 -0
  626. package/dist/security/suppressions.d.ts.map +1 -0
  627. package/dist/security/types.d.ts +144 -0
  628. package/dist/security/types.d.ts.map +1 -0
  629. package/dist/security/vuln/client.d.ts +90 -0
  630. package/dist/security/vuln/client.d.ts.map +1 -0
  631. package/dist/security/vuln/client.js.map +2 -2
  632. package/dist/security/vuln/epss-client.d.ts +26 -0
  633. package/dist/security/vuln/epss-client.d.ts.map +1 -0
  634. package/dist/security/vuln/index.d.ts +6 -0
  635. package/dist/security/vuln/index.d.ts.map +1 -0
  636. package/dist/security/vuln/osv-adapter.d.ts +58 -0
  637. package/dist/security/vuln/osv-adapter.d.ts.map +1 -0
  638. package/dist/security/vuln/types.d.ts +29 -0
  639. package/dist/security/vuln/types.d.ts.map +1 -0
  640. package/dist/sync/index.d.ts +4 -2
  641. package/dist/sync/index.d.ts.map +1 -1
  642. package/dist/types.d.ts +10 -4
  643. package/dist/types.d.ts.map +1 -1
  644. package/dist/types.js.map +2 -2
  645. package/dist/vectors/index.d.ts +11 -3
  646. package/dist/vectors/index.d.ts.map +1 -1
  647. package/dist/vectors/qdrant-index.d.ts +10 -3
  648. package/dist/vectors/qdrant-index.d.ts.map +1 -1
  649. package/dist/vectors/turboquant-index.js +261 -0
  650. package/dist/vectors/turboquant-index.js.map +7 -0
  651. package/dist/vectors/typesense-index.d.ts.map +1 -1
  652. package/dist/watchmen/index.js +83 -0
  653. package/dist/watchmen/index.js.map +7 -0
  654. package/dist/watchmen/synthesize.js +475 -0
  655. package/dist/watchmen/synthesize.js.map +7 -0
  656. package/package.json +24 -2
  657. package/dist/security/context-warnings.test.js +0 -300
  658. package/dist/security/context-warnings.test.js.map +0 -7
  659. package/dist/security/export/fix-suggestions.test.js +0 -74
  660. package/dist/security/export/fix-suggestions.test.js.map +0 -7
  661. package/dist/security/export/sbom.test.js +0 -288
  662. package/dist/security/export/sbom.test.js.map +0 -7
  663. package/dist/security/export/serialization.test.js +0 -310
  664. package/dist/security/export/serialization.test.js.map +0 -7
  665. package/dist/security/export/vex.test.js +0 -278
  666. package/dist/security/export/vex.test.js.map +0 -7
  667. package/dist/security/integrator-transitives.test.js +0 -359
  668. package/dist/security/integrator-transitives.test.js.map +0 -7
  669. package/dist/security/integrator.test.js +0 -237
  670. package/dist/security/integrator.test.js.map +0 -7
  671. package/dist/security/manifest/adapter.test.js +0 -272
  672. package/dist/security/manifest/adapter.test.js.map +0 -7
  673. package/dist/security/manifest/parser.test.js +0 -110
  674. package/dist/security/manifest/parser.test.js.map +0 -7
  675. package/dist/security/manifest/plugins/cargo.test.js +0 -304
  676. package/dist/security/manifest/plugins/cargo.test.js.map +0 -7
  677. package/dist/security/manifest/plugins/go.test.js +0 -341
  678. package/dist/security/manifest/plugins/go.test.js.map +0 -7
  679. package/dist/security/manifest/plugins/maven.test.js +0 -389
  680. package/dist/security/manifest/plugins/maven.test.js.map +0 -7
  681. package/dist/security/manifest/plugins/npm.test.js +0 -298
  682. package/dist/security/manifest/plugins/npm.test.js.map +0 -7
  683. package/dist/security/manifest/plugins/pip.test.js +0 -208
  684. package/dist/security/manifest/plugins/pip.test.js.map +0 -7
  685. package/dist/security/reachability.test.js +0 -394
  686. package/dist/security/reachability.test.js.map +0 -7
  687. package/dist/security/vuln/client.test.js +0 -288
  688. package/dist/security/vuln/client.test.js.map +0 -7
  689. package/dist/security/vuln/osv-adapter.test.js +0 -391
  690. package/dist/security/vuln/osv-adapter.test.js.map +0 -7
package/README.md CHANGED
@@ -22,7 +22,7 @@ The result is fewer tool calls, less context used, and faster responses on compl
22
22
 
23
23
  | Feature | Description |
24
24
  |---------|-------------|
25
- | <h4>Graph & Analysis (Kirograph-Core)</h4> | |
25
+ | <h4>Graph & Analysis (KiroGraph-Core)</h4> | |
26
26
  | 🕸️ **Semantic Graph** | tree-sitter AST parsing across 33+ languages — functions, classes, call edges, type hierarchies, all in SQLite |
27
27
  | 🎯 **Context Building** | One tool call returns entry points, related symbols, and code snippets for any task description |
28
28
  | 💥 **Impact Analysis** | Blast-radius traversal before making changes — know what breaks at any depth |
@@ -35,20 +35,21 @@ The result is fewer tool calls, less context used, and faster responses on compl
35
35
  | <h4>Semantic Search</h4> | |
36
36
  | ⚡ **7 Semantic Engines** | Cosine, sqlite-vec, Orama, PGlite, LanceDB, Qdrant, Typesense — pick the best fit for your project |
37
37
  | 🤖 **Custom Embedding Models** | Use any HuggingFace `feature-extraction` model — nomic, Gemma, MiniLM, BGE, or bring your own |
38
- | <h4>Architecture (Kirograph-Arch opt-in module)</h4> | |
38
+ | <h4>Architecture (KiroGraph-Arch opt-in module)</h4> | |
39
39
  | 🏛️ **Architecture Analysis** | Package graph, layer detection, coupling metrics (Ca/Ce/instability) |
40
40
  | 📸 **Snapshots & Diff** | Save graph state before refactors, diff after to verify structural changes |
41
41
  | <h4>Security</h4> | |
42
- | 🔒 **Security (KiroGraph-Sec opt-in module)** | Goes beyond "this dependency has a CVE" — uses the call graph to determine if vulnerable code is **actually reachable** from your entry points. Maps your **attack surface** (which HTTP routes reach vulnerable deps). Detects **hardcoded secrets** and shows how many entry points expose them. **SAST-lite** finds SQL injection, path traversal, and dangerous eval in your code. **Supply chain health** checks OpenSSF Scorecard scores and detects dependency confusion attacks. Covers 14 ecosystems, outputs CycloneDX SBOM/VEX and CI-ready SARIF reports. |
42
+ | 🔒 **Security (KiroGraph-Sec opt-in module)** | Goes beyond "this dependency has a CVE" — uses the call graph to determine if vulnerable code is **actually reachable** from your entry points. Maps your **attack surface** (which HTTP routes reach vulnerable deps). Detects **hardcoded secrets** and shows how many entry points expose them. **SAST-lite** finds SQL injection, path traversal, and dangerous eval in your code. **AST-based SAST (opt-in via `enablePatterns`)** runs 10 bundled structural pattern rules via `@ast-grep/napi` — matches actual code structure, not just symbol names. **Supply chain health** checks OpenSSF Scorecard scores and detects dependency confusion attacks. Covers 14 ecosystems, outputs CycloneDX SBOM/VEX and CI-ready SARIF reports. |
43
43
  | <h4>Knowledge & Data</h4> | |
44
44
  | 🧠 **Persistent Memor (KiroGraph-Mem opt-in module)** | Cross-session observations — decisions, errors, patterns — auto-linked to code symbols |
45
+ | 👁️ **Watchmen (KiroGraph-Watchmen opt-in module)** ⚠️ *experimental* | Auto-synthesizes accumulated memory observations into workspace briefs and `inclusion: manual` skill files. Fires via the `watchmenReady` signal in `kirograph_mem_store` when threshold is reached. **Local model** (default, `watchmenSynthesisMode: 'local'`): runs `gemma-4-E4B-it-ONNX` on-device via `@huggingface/transformers` — ~3–4 GB one-time download, ~3–5 GB RAM, 8–15 s on Apple Silicon M1+. No API key, no background daemon, no external calls. **Agent mode** also available for Kiro (`watchmenSynthesisMode: 'agent'`, uses active session). ⚠️ **Experimental:** output quality in local mode depends heavily on the model chosen and your hardware. Smaller models or slower machines may produce incomplete briefs and lower-quality skill files. Use `agent` mode for best results. |
45
46
  | 📖 **Documentation Indexing (KiroGraph-Doc opt-in module)** | Section-level retrieval from Markdown, MDX, RST, AsciiDoc, OpenAPI — 92-97% token savings |
46
47
  | 📊 **Data Navigation (KiroGraph-Data opt-in module)** | Query CSV/JSON/Excel/Parquet with filters, aggregations, joins — all server-side in SQLite |
47
48
  | <h4>Token Optimization</h4> | |
48
- | 🗜️ **Shell Compression (Kirograph-RTK opt-in module)** | Token-optimized command output (git, tests, linters, docker, AWS) — 60-90% savings |
49
- | 🪨 **Caveman Mode (Kirograph-Caveman opt-in module)** 🪨 | Agent prose compression (lite → ultra) — fewer tokens on explanations without touching code |
50
- | 📈 **Token Analytics (Kirograph-Gain core module)** | Track cumulative savings from graph tools and shell compression over time |
51
- | <h4>Integration (Kirograph-Integration core module)</h4> | |
49
+ | 🗜️ **Shell Compression (KiroGraph-RTK opt-in module)** | Token-optimized command output (git, tests, linters, docker, AWS) — 60-90% savings |
50
+ | 🪨 **Caveman Mode (KiroGraph-Caveman opt-in module)** 🪨 | Agent prose compression (lite → ultra) — fewer tokens on explanations without touching code |
51
+ | 📈 **Token Analytics (KiroGraph-Gain core module)** | Track cumulative savings from graph tools and shell compression over time |
52
+ | <h4>Integration (KiroGraph-Integration core module)</h4> | |
52
53
  | 🔌 **Multi-tool Support** | Native Kiro + 32 experimental targets (Cursor, Copilot, Claude Code, Codex, Windsurf, Cline, and more) |
53
54
 
54
55
 
@@ -88,7 +89,7 @@ All Kiro integration files are written to `.kiro/`. Restart Kiro IDE, or switch
88
89
  | [MCP Tools](docs/guide/mcp-tools.md) | Full reference for all MCP tools |
89
90
  | [CLI Reference](docs/guide/cli.md) | All CLI commands with examples |
90
91
  | [Configuration](docs/guide/configuration.md) | Config fields, semantic engines, architecture analysis |
91
- | [Security](docs/guide/security.md) | Full SCA+: 14 ecosystems, EPSS, reachability, attack surface, secrets, SAST-lite, supply chain, SBOM/VEX/SARIF |
92
+ | [Security](docs/guide/security.md) | Full SCA+: 14 ecosystems, EPSS, reachability, attack surface, secrets, SAST-lite, AST pattern matching (opt-in), supply chain, SBOM/VEX/SARIF |
92
93
  | [Languages & Frameworks](docs/guide/languages.md) | Supported languages, frameworks, and detection |
93
94
  | [Changelog](CHANGELOG.md) | Release history |
94
95
  | [Contributing](CONTRIBUTING.md) | How to contribute |
@@ -140,6 +141,7 @@ KiroGraph is inspired by [CodeGraph](https://github.com/colbymchenry/codegraph)
140
141
  ### Inspirations
141
142
 
142
143
  - [cavemem](https://github.com/JuliusBrussee/cavemem) by [Julius Brussee](https://www.linkedin.com/in/julius-brussee/): the memory module's hook-based observation capture, deterministic compression, and SQLite storage pattern.
144
+ - [watchmen](https://github.com/firstbatchxyz/watchmen) by [firstbatch](https://github.com/firstbatchxyz): the watchmen module's session-mining concept, workspace brief generation, and `AGENTS.md` mirroring pattern.
143
145
  - [jDocMunch-MCP](https://github.com/jgravelle/jdocmunch-mcp) by [J. Gravelle](https://www.linkedin.com/in/j-gravelle-2778223/): the documentation module's section-first retrieval approach, stable section IDs, and byte-offset addressing.
144
146
  - [jDataMunch-MCP](https://github.com/jgravelle/jdatamunch-mcp) by [J. Gravelle](https://www.linkedin.com/in/j-gravelle-2778223/): the data module's column profiling, streaming parsers, and server-side aggregation approach.
145
147
  - [code-review-graph](https://github.com/tirth8205/code-review-graph) by [Tirth Kanani](https://github.com/tirth8205): community detection, execution flow tracing, refactoring tools, and multi-platform auto-detection patterns.
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Layer detector for Dart / Flutter projects.
3
+ *
4
+ * Detects: api, service, data, ui, shared layers based on
5
+ * directory names common in Flutter projects under lib/.
6
+ * Files in test/ are skipped (return no match).
7
+ */
8
+ import type { LayerDetector } from '../types';
9
+ export declare const dartLayerDetector: LayerDetector;
10
+ //# sourceMappingURL=dart.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dart.d.ts","sourceRoot":"","sources":["../../../src/architecture/layers/dart.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,aAAa,EAAkB,MAAM,UAAU,CAAC;AA4C9D,eAAO,MAAM,iBAAiB,EAAE,aAgC/B,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Layer detector for Elixir / Phoenix projects.
3
+ */
4
+ import type { LayerDetector } from '../types';
5
+ export declare const elixirLayerDetector: LayerDetector;
6
+ //# sourceMappingURL=elixir.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"elixir.d.ts","sourceRoot":"","sources":["../../../src/architecture/layers/elixir.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,aAAa,EAAkB,MAAM,UAAU,CAAC;AA2C9D,eAAO,MAAM,mBAAmB,EAAE,aAyBjC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/architecture/layers/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,aAAa,EAAkB,SAAS,EAAE,MAAM,UAAU,CAAC;AAmBzE,wBAAgB,oBAAoB,IAAI,aAAa,EAAE,CAEtD;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI,CAInE;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CACnC,KAAK,EAAE,MAAM,EAAE,EACf,WAAW,EAAE,MAAM,EACnB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GACtC,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAuBhC;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,WAAW,EAAE,mBAAmB,EAAE,EAClC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GACtC,SAAS,EAAE,CAqBb"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/architecture/layers/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,aAAa,EAAkB,SAAS,EAAE,MAAM,UAAU,CAAC;AA+BzE,wBAAgB,oBAAoB,IAAI,aAAa,EAAE,CAEtD;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI,CAInE;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CACnC,KAAK,EAAE,MAAM,EAAE,EACf,WAAW,EAAE,MAAM,EACnB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GACtC,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAuBhC;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,WAAW,EAAE,mBAAmB,EAAE,EAClC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GACtC,SAAS,EAAE,CAqBb"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Layer detector for OCaml projects (Dune-based).
3
+ */
4
+ import type { LayerDetector } from '../types';
5
+ export declare const ocamlLayerDetector: LayerDetector;
6
+ //# sourceMappingURL=ocaml.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ocaml.d.ts","sourceRoot":"","sources":["../../../src/architecture/layers/ocaml.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,aAAa,EAAkB,MAAM,UAAU,CAAC;AAmC9D,eAAO,MAAM,kBAAkB,EAAE,aAyBhC,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Layer detector for Scala projects (Play, Akka, general SBT).
3
+ */
4
+ import type { LayerDetector } from '../types';
5
+ export declare const scalaLayerDetector: LayerDetector;
6
+ //# sourceMappingURL=scala.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scala.d.ts","sourceRoot":"","sources":["../../../src/architecture/layers/scala.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,aAAa,EAAkB,MAAM,UAAU,CAAC;AAmD9D,eAAO,MAAM,kBAAkB,EAAE,aAyBhC,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Layer detector for Solidity projects (Hardhat, Foundry, Truffle).
3
+ */
4
+ import type { LayerDetector } from '../types';
5
+ export declare const solidityLayerDetector: LayerDetector;
6
+ //# sourceMappingURL=solidity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solidity.d.ts","sourceRoot":"","sources":["../../../src/architecture/layers/solidity.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,aAAa,EAAkB,MAAM,UAAU,CAAC;AAoC9D,eAAO,MAAM,qBAAqB,EAAE,aAyBnC,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Layer detector for Vue / Nuxt projects.
3
+ */
4
+ import type { LayerDetector } from '../types';
5
+ export declare const vueLayerDetector: LayerDetector;
6
+ //# sourceMappingURL=vue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vue.d.ts","sourceRoot":"","sources":["../../../src/architecture/layers/vue.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,aAAa,EAAkB,MAAM,UAAU,CAAC;AA0C9D,eAAO,MAAM,gBAAgB,EAAE,aAyB9B,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ManifestParser } from '../types';
2
+ export declare const elmParser: ManifestParser;
3
+ //# sourceMappingURL=elm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"elm.d.ts","sourceRoot":"","sources":["../../../src/architecture/manifest/elm.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAe,MAAM,UAAU,CAAC;AAE5D,eAAO,MAAM,SAAS,EAAE,cA6DvB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/architecture/manifest/index.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AA+B5D,wBAAgB,qBAAqB,IAAI,cAAc,EAAE,CAExD;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAE1E;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAInE;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAsBnF"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/architecture/manifest/index.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAsC5D,wBAAgB,qBAAqB,IAAI,cAAc,EAAE,CAExD;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAE1E;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAInE;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAsBnF"}
@@ -0,0 +1,3 @@
1
+ import type { ManifestParser } from '../types';
2
+ export declare const ocamlParser: ManifestParser;
3
+ //# sourceMappingURL=ocaml.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ocaml.d.ts","sourceRoot":"","sources":["../../../src/architecture/manifest/ocaml.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAe,MAAM,UAAU,CAAC;AAE5D,eAAO,MAAM,WAAW,EAAE,cA6BzB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ManifestParser } from '../types';
2
+ export declare const sbtParser: ManifestParser;
3
+ //# sourceMappingURL=scala.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scala.d.ts","sourceRoot":"","sources":["../../../src/architecture/manifest/scala.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAe,MAAM,UAAU,CAAC;AAE5D,eAAO,MAAM,SAAS,EAAE,cA2FvB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"banner.d.ts","sourceRoot":"","sources":["../../src/bin/banner.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA+CH,wBAAgB,WAAW,IAAI,IAAI,CAsBlC"}
1
+ {"version":3,"file":"banner.d.ts","sourceRoot":"","sources":["../../src/bin/banner.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAqFH,wBAAgB,WAAW,IAAI,IAAI,CAsBlC"}
@@ -1 +1 @@
1
- {"version":3,"file":"affected.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/affected.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkD/C"}
1
+ {"version":3,"file":"affected.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/affected.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+F/C"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function register(program: Command): void;
3
+ //# sourceMappingURL=attack-surface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attack-surface.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/attack-surface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuG/C"}
@@ -149,6 +149,13 @@ function printRouteEntry(entry) {
149
149
  console.log(
150
150
  ` ${routeColor}[${riskLabel}]${import_ui.reset} ${import_ui.bold}${entry.route.padEnd(30)}${import_ui.reset} ${exposureBadge}${vulnSuffix}`
151
151
  );
152
+ for (const pm of entry.patternMatches) {
153
+ const sevUpper = pm.severity.toUpperCase();
154
+ const pmColor = pm.severity === "critical" ? red : pm.severity === "high" ? yellow : import_ui.dim;
155
+ console.log(
156
+ ` ${pmColor}\u26A0 [${sevUpper}]${import_ui.reset} ${import_ui.dim}${pm.patternId}${import_ui.reset} ${import_ui.dim}at${import_ui.reset} ${pm.symbolName}:${pm.line}`
157
+ );
158
+ }
152
159
  }
153
160
  // Annotate the CommonJS export names for ESM import in node:
154
161
  0 && (module.exports = {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/bin/commands/attack-surface.ts"],
4
- "sourcesContent": ["import { Command } from 'commander';\nimport * as path from 'path';\nimport { loadConfig } from '../../config';\nimport { dim, reset, violet, bold, section } from '../ui';\nimport type { AttackSurfaceEntry } from '../../security/attack-surface';\n\nconst red = '\\x1b[31m';\nconst yellow = '\\x1b[33m';\n\nexport function register(program: Command): void {\n program\n .command('attack-surface [projectPath]')\n .description('Map HTTP routes to reachable vulnerable dependencies')\n .option('--limit <n>', 'Max routes to show (default: 20)', '20')\n .option('--public-only', 'Show only public/unauthenticated routes')\n .option('--format <fmt>', 'Output format: text, json (default: text)', 'text')\n .action(async (\n projectPath: string | undefined,\n opts: { limit: string; publicOnly?: boolean; format: string },\n ) => {\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 limit = parseInt(opts.limit, 10);\n if (isNaN(limit) || limit < 1) {\n console.error(` \u2716 Invalid --limit value: ${opts.limit}. Must be a positive integer.`);\n process.exit(1);\n }\n\n const validFormats = ['text', 'json'];\n if (!validFormats.includes(opts.format)) {\n console.error(` \u2716 Invalid --format value: ${opts.format}. Use: text, json`);\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 const { AttackSurfaceAnalyzer } = await Promise.resolve().then(() => require('../../security/attack-surface.js'));\n const analyzer = new AttackSurfaceAnalyzer(db);\n const result = await analyzer.analyze();\n\n cg.close();\n\n // Apply --public-only filter\n let routes = opts.publicOnly\n ? result.allRoutes.filter(r => r.exposureLevel === 'public')\n : result.allRoutes;\n\n // Apply limit\n const limited = routes.slice(0, limit);\n\n // \u2500\u2500 JSON output \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\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 if (opts.format === 'json') {\n console.log(JSON.stringify(\n {\n totalRoutes: result.totalRoutes,\n publicRoutes: result.publicRoutes,\n authenticatedRoutes: result.authenticatedRoutes,\n routesWithVulns: result.routesWithVulns,\n criticalPaths: result.criticalPaths,\n routes: limited,\n },\n null,\n 2,\n ));\n return;\n }\n\n // \u2500\u2500 Text output \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\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 const totalLabel = result.totalRoutes === 1 ? 'route' : 'routes';\n console.log(\n `\\n ${section('Attack Surface')} ` +\n `${dim}(${result.totalRoutes} ${totalLabel} total: ${result.publicRoutes} public, ${result.authenticatedRoutes} authenticated)${reset}\\n`,\n );\n\n if (result.criticalPaths.length === 0) {\n console.log(` ${dim}No routes reaching vulnerable dependencies found.${reset}\\n`);\n return;\n }\n\n // Critical paths section\n console.log(` ${violet}${bold}\u25CF Critical paths${reset} ${dim}(routes reaching affected vulnerabilities)${reset}\\n`);\n\n const criticalToShow = result.criticalPaths.slice(0, limit);\n\n for (const entry of criticalToShow) {\n printRouteEntry(entry);\n }\n\n // If public-only was not set, also show clean routes summary\n if (!opts.publicOnly) {\n const cleanCount = result.totalRoutes - result.routesWithVulns;\n if (cleanCount > 0) {\n console.log(` ${dim}+ ${cleanCount} clean route${cleanCount === 1 ? '' : 's'} (no reachable vulnerabilities)${reset}\\n`);\n }\n }\n });\n}\n\nfunction printRouteEntry(entry: AttackSurfaceEntry): void {\n const isPublicVuln = entry.exposureLevel === 'public' && entry.vulnerableDeps.length > 0;\n const isAuthVuln = (entry.exposureLevel === 'authenticated' || entry.exposureLevel === 'internal') && entry.vulnerableDeps.length > 0;\n\n const routeColor = isPublicVuln ? red : isAuthVuln ? yellow : dim;\n const riskLabel = entry.riskScore > 0 ? `${entry.riskScore.toFixed(1)}` : '?';\n\n // Exposure badge\n const exposureBadge = (() => {\n switch (entry.exposureLevel) {\n case 'public': return `${red}public${reset} `;\n case 'authenticated': return `${yellow}authenticated${reset}`;\n case 'internal': return `${dim}internal${reset} `;\n default: return `${dim}unknown${reset} `;\n }\n })();\n\n // Pick the top vuln by riskScore to show inline\n const topVuln = entry.vulnerableDeps.reduce<AttackSurfaceEntry['vulnerableDeps'][0] | null>(\n (best, v) => {\n if (!best) return v;\n if ((v.riskScore ?? 0) > (best.riskScore ?? 0)) return v;\n return best;\n },\n null,\n );\n\n let vulnSuffix = '';\n if (topVuln) {\n const hopWord = topVuln.hopCount === 1 ? '1 hop' : `${topVuln.hopCount} hops`;\n vulnSuffix = ` ${dim}\u2192${reset} ${violet}${topVuln.packageName}${reset} ${dim}${topVuln.cveId}${reset} ${dim}(${hopWord})${reset}`;\n if (entry.vulnerableDeps.length > 1) {\n vulnSuffix += ` ${dim}+${entry.vulnerableDeps.length - 1} more${reset}`;\n }\n }\n\n console.log(\n ` ${routeColor}[${riskLabel}]${reset} ${bold}${entry.route.padEnd(30)}${reset} ${exposureBadge}${vulnSuffix}`,\n );\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,WAAsB;AACtB,oBAA2B;AAC3B,gBAAkD;AAGlD,MAAM,MAAS;AACf,MAAM,SAAS;AAER,SAAS,SAAS,SAAwB;AAC/C,UACG,QAAQ,8BAA8B,EACtC,YAAY,sDAAsD,EAClE,OAAO,eAAe,oCAAoC,IAAI,EAC9D,OAAO,iBAAiB,yCAAyC,EACjE,OAAO,kBAAkB,6CAA6C,MAAM,EAC5E,OAAO,OACN,aACA,SACG;AACH,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,QAAQ,SAAS,KAAK,OAAO,EAAE;AACrC,QAAI,MAAM,KAAK,KAAK,QAAQ,GAAG;AAC7B,cAAQ,MAAM,mCAA8B,KAAK,KAAK,+BAA+B;AACrF,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,UAAM,eAAe,CAAC,QAAQ,MAAM;AACpC,QAAI,CAAC,aAAa,SAAS,KAAK,MAAM,GAAG;AACvC,cAAQ,MAAM,oCAA+B,KAAK,MAAM,mBAAmB;AAC3E,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,UAAM,EAAE,sBAAsB,IAAI,MAAM,QAAQ,QAAQ,EAAE,KAAK,MAAM,QAAQ,kCAAkC,CAAC;AAChH,UAAM,WAAW,IAAI,sBAAsB,EAAE;AAC7C,UAAM,SAAS,MAAM,SAAS,QAAQ;AAEtC,OAAG,MAAM;AAGT,QAAI,SAAS,KAAK,aACd,OAAO,UAAU,OAAO,OAAK,EAAE,kBAAkB,QAAQ,IACzD,OAAO;AAGX,UAAM,UAAU,OAAO,MAAM,GAAG,KAAK;AAGrC,QAAI,KAAK,WAAW,QAAQ;AAC1B,cAAQ,IAAI,KAAK;AAAA,QACf;AAAA,UACE,aAAa,OAAO;AAAA,UACpB,cAAc,OAAO;AAAA,UACrB,qBAAqB,OAAO;AAAA,UAC5B,iBAAiB,OAAO;AAAA,UACxB,eAAe,OAAO;AAAA,UACtB,QAAQ;AAAA,QACV;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AACD;AAAA,IACF;AAGA,UAAM,aAAa,OAAO,gBAAgB,IAAI,UAAU;AACxD,YAAQ;AAAA,MACN;AAAA,QAAO,mBAAQ,gBAAgB,CAAC,KAC7B,aAAG,IAAI,OAAO,WAAW,IAAI,UAAU,WAAW,OAAO,YAAY,YAAY,OAAO,mBAAmB,kBAAkB,eAAK;AAAA;AAAA,IACvI;AAEA,QAAI,OAAO,cAAc,WAAW,GAAG;AACrC,cAAQ,IAAI,KAAK,aAAG,oDAAoD,eAAK;AAAA,CAAI;AACjF;AAAA,IACF;AAGA,YAAQ,IAAI,KAAK,gBAAM,GAAG,cAAI,wBAAmB,eAAK,IAAI,aAAG,6CAA6C,eAAK;AAAA,CAAI;AAEnH,UAAM,iBAAiB,OAAO,cAAc,MAAM,GAAG,KAAK;AAE1D,eAAW,SAAS,gBAAgB;AAClC,sBAAgB,KAAK;AAAA,IACvB;AAGA,QAAI,CAAC,KAAK,YAAY;AACpB,YAAM,aAAa,OAAO,cAAc,OAAO;AAC/C,UAAI,aAAa,GAAG;AAClB,gBAAQ,IAAI,KAAK,aAAG,KAAK,UAAU,eAAe,eAAe,IAAI,KAAK,GAAG,kCAAkC,eAAK;AAAA,CAAI;AAAA,MAC1H;AAAA,IACF;AAAA,EACF,CAAC;AACL;AAEA,SAAS,gBAAgB,OAAiC;AACxD,QAAM,eAAe,MAAM,kBAAkB,YAAY,MAAM,eAAe,SAAS;AACvF,QAAM,cAAgB,MAAM,kBAAkB,mBAAmB,MAAM,kBAAkB,eAAe,MAAM,eAAe,SAAS;AAEtI,QAAM,aAAa,eAAe,MAAM,aAAa,SAAS;AAC9D,QAAM,YAAa,MAAM,YAAY,IAAI,GAAG,MAAM,UAAU,QAAQ,CAAC,CAAC,KAAK;AAG3E,QAAM,iBAAiB,MAAM;AAC3B,YAAQ,MAAM,eAAe;AAAA,MAC3B,KAAK;AAAiB,eAAO,GAAG,GAAG,SAAS,eAAK;AAAA,MACjD,KAAK;AAAiB,eAAO,GAAG,MAAM,gBAAgB,eAAK;AAAA,MAC3D,KAAK;AAAiB,eAAO,GAAG,aAAG,WAAW,eAAK;AAAA,MACnD;AAAsB,eAAO,GAAG,aAAG,UAAU,eAAK;AAAA,IACpD;AAAA,EACF,GAAG;AAGH,QAAM,UAAU,MAAM,eAAe;AAAA,IACnC,CAAC,MAAM,MAAM;AACX,UAAI,CAAC,KAAM,QAAO;AAClB,WAAK,EAAE,aAAa,MAAM,KAAK,aAAa,GAAI,QAAO;AACvD,aAAO;AAAA,IACT;AAAA,IACA;AAAA,EACF;AAEA,MAAI,aAAa;AACjB,MAAI,SAAS;AACX,UAAM,UAAU,QAAQ,aAAa,IAAI,UAAU,GAAG,QAAQ,QAAQ;AACtE,iBAAa,KAAK,aAAG,SAAI,eAAK,IAAI,gBAAM,GAAG,QAAQ,WAAW,GAAG,eAAK,IAAI,aAAG,GAAG,QAAQ,KAAK,GAAG,eAAK,IAAI,aAAG,IAAI,OAAO,IAAI,eAAK;AAChI,QAAI,MAAM,eAAe,SAAS,GAAG;AACnC,oBAAc,KAAK,aAAG,IAAI,MAAM,eAAe,SAAS,CAAC,QAAQ,eAAK;AAAA,IACxE;AAAA,EACF;AAEA,UAAQ;AAAA,IACN,KAAK,UAAU,IAAI,SAAS,IAAI,eAAK,IAAI,cAAI,GAAG,MAAM,MAAM,OAAO,EAAE,CAAC,GAAG,eAAK,KAAK,aAAa,GAAG,UAAU;AAAA,EAC/G;AACF;",
4
+ "sourcesContent": ["import { Command } from 'commander';\nimport * as path from 'path';\nimport { loadConfig } from '../../config';\nimport { dim, reset, violet, bold, section } from '../ui';\nimport type { AttackSurfaceEntry } from '../../security/attack-surface';\n\nconst red = '\\x1b[31m';\nconst yellow = '\\x1b[33m';\n\nexport function register(program: Command): void {\n program\n .command('attack-surface [projectPath]')\n .description('Map HTTP routes to reachable vulnerable dependencies')\n .option('--limit <n>', 'Max routes to show (default: 20)', '20')\n .option('--public-only', 'Show only public/unauthenticated routes')\n .option('--format <fmt>', 'Output format: text, json (default: text)', 'text')\n .action(async (\n projectPath: string | undefined,\n opts: { limit: string; publicOnly?: boolean; format: string },\n ) => {\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 limit = parseInt(opts.limit, 10);\n if (isNaN(limit) || limit < 1) {\n console.error(` \u2716 Invalid --limit value: ${opts.limit}. Must be a positive integer.`);\n process.exit(1);\n }\n\n const validFormats = ['text', 'json'];\n if (!validFormats.includes(opts.format)) {\n console.error(` \u2716 Invalid --format value: ${opts.format}. Use: text, json`);\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 const { AttackSurfaceAnalyzer } = await Promise.resolve().then(() => require('../../security/attack-surface.js'));\n const analyzer = new AttackSurfaceAnalyzer(db);\n const result = await analyzer.analyze();\n\n cg.close();\n\n // Apply --public-only filter\n let routes = opts.publicOnly\n ? result.allRoutes.filter(r => r.exposureLevel === 'public')\n : result.allRoutes;\n\n // Apply limit\n const limited = routes.slice(0, limit);\n\n // \u2500\u2500 JSON output \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\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 if (opts.format === 'json') {\n console.log(JSON.stringify(\n {\n totalRoutes: result.totalRoutes,\n publicRoutes: result.publicRoutes,\n authenticatedRoutes: result.authenticatedRoutes,\n routesWithVulns: result.routesWithVulns,\n criticalPaths: result.criticalPaths,\n routes: limited,\n },\n null,\n 2,\n ));\n return;\n }\n\n // \u2500\u2500 Text output \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\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 const totalLabel = result.totalRoutes === 1 ? 'route' : 'routes';\n console.log(\n `\\n ${section('Attack Surface')} ` +\n `${dim}(${result.totalRoutes} ${totalLabel} total: ${result.publicRoutes} public, ${result.authenticatedRoutes} authenticated)${reset}\\n`,\n );\n\n if (result.criticalPaths.length === 0) {\n console.log(` ${dim}No routes reaching vulnerable dependencies found.${reset}\\n`);\n return;\n }\n\n // Critical paths section\n console.log(` ${violet}${bold}\u25CF Critical paths${reset} ${dim}(routes reaching affected vulnerabilities)${reset}\\n`);\n\n const criticalToShow = result.criticalPaths.slice(0, limit);\n\n for (const entry of criticalToShow) {\n printRouteEntry(entry);\n }\n\n // If public-only was not set, also show clean routes summary\n if (!opts.publicOnly) {\n const cleanCount = result.totalRoutes - result.routesWithVulns;\n if (cleanCount > 0) {\n console.log(` ${dim}+ ${cleanCount} clean route${cleanCount === 1 ? '' : 's'} (no reachable vulnerabilities)${reset}\\n`);\n }\n }\n });\n}\n\nfunction printRouteEntry(entry: AttackSurfaceEntry): void {\n const isPublicVuln = entry.exposureLevel === 'public' && entry.vulnerableDeps.length > 0;\n const isAuthVuln = (entry.exposureLevel === 'authenticated' || entry.exposureLevel === 'internal') && entry.vulnerableDeps.length > 0;\n\n const routeColor = isPublicVuln ? red : isAuthVuln ? yellow : dim;\n const riskLabel = entry.riskScore > 0 ? `${entry.riskScore.toFixed(1)}` : '?';\n\n // Exposure badge\n const exposureBadge = (() => {\n switch (entry.exposureLevel) {\n case 'public': return `${red}public${reset} `;\n case 'authenticated': return `${yellow}authenticated${reset}`;\n case 'internal': return `${dim}internal${reset} `;\n default: return `${dim}unknown${reset} `;\n }\n })();\n\n // Pick the top vuln by riskScore to show inline\n const topVuln = entry.vulnerableDeps.reduce<AttackSurfaceEntry['vulnerableDeps'][0] | null>(\n (best, v) => {\n if (!best) return v;\n if ((v.riskScore ?? 0) > (best.riskScore ?? 0)) return v;\n return best;\n },\n null,\n );\n\n let vulnSuffix = '';\n if (topVuln) {\n const hopWord = topVuln.hopCount === 1 ? '1 hop' : `${topVuln.hopCount} hops`;\n vulnSuffix = ` ${dim}\u2192${reset} ${violet}${topVuln.packageName}${reset} ${dim}${topVuln.cveId}${reset} ${dim}(${hopWord})${reset}`;\n if (entry.vulnerableDeps.length > 1) {\n vulnSuffix += ` ${dim}+${entry.vulnerableDeps.length - 1} more${reset}`;\n }\n }\n\n console.log(\n ` ${routeColor}[${riskLabel}]${reset} ${bold}${entry.route.padEnd(30)}${reset} ${exposureBadge}${vulnSuffix}`,\n );\n\n // Pattern matches below the route line\n for (const pm of entry.patternMatches) {\n const sevUpper = pm.severity.toUpperCase();\n const pmColor = pm.severity === 'critical' ? red : pm.severity === 'high' ? yellow : dim;\n console.log(\n ` ${pmColor}\u26A0 [${sevUpper}]${reset} ${dim}${pm.patternId}${reset} ${dim}at${reset} ${pm.symbolName}:${pm.line}`,\n );\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * KiroGraph Benchmark Runner
3
+ *
4
+ * Clones repos at pinned SHAs, indexes them, runs predefined queries,
5
+ * and measures token efficiency vs naive file reading.
6
+ */
7
+ import { Command } from 'commander';
8
+ export declare function register(program: Command): void;
9
+ //# sourceMappingURL=benchmark.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"benchmark.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/benchmark.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwCpC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4C/C"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * kirograph budget — Context budget governance CLI command
3
+ */
4
+ import { Command } from 'commander';
5
+ export declare function register(program: Command): void;
6
+ //# sourceMappingURL=budget.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"budget.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/budget.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoD/C"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * kg caveman [off|lite|full|ultra] — set caveman mode for this project
3
+ * kg caveman — show current mode
4
+ */
5
+ import { Command } from 'commander';
6
+ export declare function register(program: Command): void;
7
+ //# sourceMappingURL=caveman.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"caveman.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/caveman.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkCpC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgG/C"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function register(program: Command): void;
3
+ //# sourceMappingURL=communities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"communities.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/communities.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+C/C"}
@@ -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,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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function register(program: Command): void;
3
+ //# sourceMappingURL=flows.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flows.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/flows.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+D/C"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * kirograph gain — Token savings analytics CLI command
3
+ */
4
+ import { Command } from 'commander';
5
+ export declare function register(program: Command): void;
6
+ //# sourceMappingURL=gain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gain.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/gain.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkH/C"}
@@ -1,4 +1,11 @@
1
1
  import { Command } from 'commander';
2
+ /**
3
+ * Interactive tabbed help — left/right for tabs, up/down for commands, enter to copy.
4
+ */
5
+ export declare function printInteractiveHelp(): void;
6
+ /**
7
+ * Non-interactive full help (for piping, --help flag).
8
+ */
2
9
  export declare function printColoredHelp(): void;
3
10
  export declare function register(program: Command): void;
4
11
  //# sourceMappingURL=help.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/help.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,wBAAgB,gBAAgB,IAAI,IAAI,CA0EvC;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAS/C"}
1
+ {"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/help.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0QpC;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAiG3C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAkIvC;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAK/C"}
@@ -194,7 +194,18 @@ const GROUPS = [
194
194
  { name: "attack-surface", args: "[path]", desc: "Map attack surface: routes \u2192 vulnerable deps with hop count and auth status", opts: ["--limit <n>", "--public-only", "--format json"] },
195
195
  { name: "supply-chain", args: "[path]", desc: "Supply chain health: OpenSSF Scorecard, maintainer count, abandoned packages", opts: ["--threshold critical|high|medium", "--refresh", "--format json"] },
196
196
  { name: "dep-confusion", args: "[path]", desc: "Detect dependency confusion: internal packages that exist in public registries", opts: ["--format json"] },
197
- { name: "remediation", args: "[path]", desc: "Remediation SLA tracking: days open, fix available since, overdue alerts", opts: ["--overdue-only", "--format json"] }
197
+ { name: "remediation", args: "[path]", desc: "Remediation SLA tracking: days open, fix available since, overdue alerts", opts: ["--overdue-only", "--format json"] },
198
+ {
199
+ name: "pattern",
200
+ args: "[pattern]",
201
+ desc: "AST structural search: live pattern search or library rule runner",
202
+ opts: [
203
+ "--list Show all bundled SAST rules",
204
+ "--library <id> Run a specific library rule",
205
+ "--lang <l> Language filter (js, ts, python, go, ...)",
206
+ "--format json JSON output"
207
+ ]
208
+ }
198
209
  ],
199
210
  examples: [
200
211
  ["kirograph security", "Overview: dep count, vuln count, verdict breakdown"],
@@ -223,7 +234,10 @@ const GROUPS = [
223
234
  ["kirograph remediation --overdue-only", "Show CVEs past their remediation SLA"],
224
235
  ['kirograph vuln suppress CVE-2024-1234 --reason "not in code path"', "Suppress a false positive CVE"],
225
236
  ["kirograph vuln unsuppress CVE-2024-1234", "Remove a suppression"],
226
- ["kirograph vuln suppressions", "List all active suppressions"]
237
+ ["kirograph vuln suppressions", "List all active suppressions"],
238
+ ['kirograph pattern "eval($X)"', "Find all eval() calls"],
239
+ ["kirograph pattern --list", "Show all bundled SAST rules"],
240
+ ["kirograph pattern --library dangerous-eval-js", "Run the dangerous-eval library rule"]
227
241
  ]
228
242
  },
229
243
  {
@@ -465,7 +479,10 @@ ${c.bold}${c.paleLavender}USAGE${c.reset}`);
465
479
  ['kirograph vuln suppress CVE-2024-1234 --reason "not in code path"', "Suppress a false positive CVE"],
466
480
  ["kirograph vuln suppress CVE-2024-1234 --expires 2026-12-31", "Suppress with expiry date"],
467
481
  ["kirograph vuln unsuppress CVE-2024-1234", "Remove a suppression"],
468
- ["kirograph vuln suppressions", "List all active suppressions"]
482
+ ["kirograph vuln suppressions", "List all active suppressions"],
483
+ ['kirograph pattern "eval($X)"', "Find all eval() calls (requires enablePatterns: true)"],
484
+ ["kirograph pattern --list", "Show all bundled SAST pattern rules"],
485
+ ["kirograph pattern --library dangerous-eval-js", "Run a specific library rule"]
469
486
  ]
470
487
  },
471
488
  {