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/graph/communities.ts"],
4
+ "sourcesContent": ["/**\n * Community Detection via Leiden Algorithm\n *\n * Clusters related code into communities based on edge connectivity.\n * Oversized communities (>25% of graph) are recursively split with higher resolution.\n *\n * Leiden improves on Louvain by adding a refinement phase between the local-move phase\n * and the aggregation phase. The refinement sub-partitions each community into\n * well-connected sub-communities, guaranteeing that every community in the final\n * partition is internally connected. This prevents the \"disconnected community\"\n * artefact that Louvain is known to produce.\n */\n\nimport type { GraphDatabase } from '../db/database';\n\nexport interface Community {\n id: number;\n label: string;\n memberCount: number;\n members: Array<{ id: string; name: string; kind: string; filePath: string }>;\n dominantDirectory: string;\n dominantLanguage: string;\n interCommunityEdges: number;\n}\n\nexport interface CommunityResult {\n communities: Community[];\n modularity: number;\n totalNodes: number;\n totalEdges: number;\n /** Algorithm used to detect communities. */\n algorithm: 'leiden';\n}\n\ninterface LouvainNode {\n id: string;\n community: number;\n degree: number;\n}\n\n/**\n * Build an undirected weighted adjacency from the edges table.\n * Weight = number of edges between two nodes (calls + imports + references).\n * Excludes 'contains' edges as they're structural, not semantic.\n */\nfunction buildAdjacency(db: GraphDatabase): { nodes: Map<string, LouvainNode>; adj: Map<string, Map<string, number>>; totalWeight: number } {\n const rawDb = db.getRawDb();\n\n const edges = rawDb.all(\n `SELECT source, target FROM edges WHERE kind != 'contains'`\n ) as Array<{ source: string; target: string }>;\n\n const nodes = new Map<string, LouvainNode>();\n const adj = new Map<string, Map<string, number>>();\n let totalWeight = 0;\n\n for (const e of edges) {\n // Ensure both nodes exist\n if (!nodes.has(e.source)) nodes.set(e.source, { id: e.source, community: 0, degree: 0 });\n if (!nodes.has(e.target)) nodes.set(e.target, { id: e.target, community: 0, degree: 0 });\n\n // Undirected: add weight in both directions\n if (!adj.has(e.source)) adj.set(e.source, new Map());\n if (!adj.has(e.target)) adj.set(e.target, new Map());\n\n const w1 = adj.get(e.source)!.get(e.target) ?? 0;\n adj.get(e.source)!.set(e.target, w1 + 1);\n\n const w2 = adj.get(e.target)!.get(e.source) ?? 0;\n adj.get(e.target)!.set(e.source, w2 + 1);\n\n nodes.get(e.source)!.degree += 1;\n nodes.get(e.target)!.degree += 1;\n totalWeight += 1;\n }\n\n return { nodes, adj, totalWeight };\n}\n\n/**\n * Leiden/Louvain Phase 1 \u2014 local moving.\n *\n * For each node, try moving it to the neighbouring community that yields the\n * largest positive modularity gain. Repeats until no improvement is found or\n * `maxIterations` is reached.\n */\nfunction localMovePhase(\n nodes: Map<string, LouvainNode>,\n adj: Map<string, Map<string, number>>,\n totalWeight: number,\n resolution: number = 1.0,\n): boolean {\n if (totalWeight === 0) return false;\n\n const m2 = 2 * totalWeight;\n let improved = false;\n let changed = true;\n let iterations = 0;\n const maxIterations = 20;\n\n // Community totals: sum of degrees of nodes in each community\n const communityDegree = new Map<number, number>();\n for (const node of nodes.values()) {\n communityDegree.set(node.community, (communityDegree.get(node.community) ?? 0) + node.degree);\n }\n\n while (changed && iterations < maxIterations) {\n changed = false;\n iterations++;\n\n for (const node of nodes.values()) {\n const currentCommunity = node.community;\n const ki = node.degree;\n\n // Calculate edges to each neighbouring community\n const neighborCommunities = new Map<number, number>();\n const neighbors = adj.get(node.id);\n if (!neighbors) continue;\n\n for (const [neighborId, weight] of neighbors) {\n const neighborNode = nodes.get(neighborId);\n if (!neighborNode) continue;\n const nc = neighborNode.community;\n neighborCommunities.set(nc, (neighborCommunities.get(nc) ?? 0) + weight);\n }\n\n // Remove node from its current community\n communityDegree.set(currentCommunity, (communityDegree.get(currentCommunity) ?? 0) - ki);\n\n // Find best community\n let bestCommunity = currentCommunity;\n let bestGain = 0;\n\n const kiIn = neighborCommunities.get(currentCommunity) ?? 0;\n const sigmaCurrentWithout = communityDegree.get(currentCommunity) ?? 0;\n\n for (const [community, edgesToCommunity] of neighborCommunities) {\n if (community === currentCommunity) continue;\n\n const sigmaCommunity = communityDegree.get(community) ?? 0;\n\n // Modularity gain formula\n const gain = resolution * (edgesToCommunity - kiIn) / m2\n - resolution * ki * (sigmaCommunity - sigmaCurrentWithout) / (m2 * m2) * 2;\n\n if (gain > bestGain) {\n bestGain = gain;\n bestCommunity = community;\n }\n }\n\n // Move node to best community\n if (bestCommunity !== currentCommunity) {\n node.community = bestCommunity;\n communityDegree.set(bestCommunity, (communityDegree.get(bestCommunity) ?? 0) + ki);\n changed = true;\n improved = true;\n } else {\n communityDegree.set(currentCommunity, (communityDegree.get(currentCommunity) ?? 0) + ki);\n }\n }\n }\n\n return improved;\n}\n\n/**\n * Leiden Phase 2 \u2014 refinement.\n *\n * For each community produced by the local-move phase, attempt to split it into\n * smaller, well-connected sub-communities. This prevents the disconnected-community\n * artefact that plain Louvain can produce.\n *\n * The procedure:\n * 1. Collect the nodes that belong to community C.\n * 2. Start with every node in its own singleton sub-community.\n * 3. For each node, consider merging its singleton into an adjacent\n * sub-community (within C) if the merge yields a positive modularity gain\n * AND the resulting sub-community remains well-connected (internal edges \u2265\n * a connectivity threshold derived from the sub-community's total degree).\n * 4. Write the refined sub-community ids back into a new partition map.\n *\n * Returns a map from original node id \u2192 refined community id.\n */\nfunction refinementPhase(\n nodes: Map<string, LouvainNode>,\n adj: Map<string, Map<string, number>>,\n totalWeight: number,\n resolution: number = 1.0,\n): Map<string, number> {\n // Group nodes by their current (post-local-move) community\n const communityGroups = new Map<number, string[]>();\n for (const node of nodes.values()) {\n if (!communityGroups.has(node.community)) communityGroups.set(node.community, []);\n communityGroups.get(node.community)!.push(node.id);\n }\n\n const m2 = 2 * totalWeight;\n // Output: node id \u2192 refined community id\n const refined = new Map<string, number>();\n\n // Use a globally incrementing id so refined sub-communities never collide\n let nextSubId = 0;\n // Initialise: reserve unique ids based on current community ids to avoid\n // collisions even before we start assigning new ones\n for (const cId of communityGroups.keys()) {\n if (cId >= nextSubId) nextSubId = cId + 1;\n }\n\n for (const [, members] of communityGroups) {\n if (members.length === 1) {\n // Singleton community \u2014 nothing to refine\n refined.set(members[0], nextSubId++);\n continue;\n }\n\n const memberSet = new Set(members);\n\n // Phase 2a: start with each node in its own singleton sub-community\n const subCommunity = new Map<string, number>(); // node id \u2192 sub-community id\n const subCommunityNodes = new Map<number, Set<string>>(); // sub-community id \u2192 node ids\n // Internal edge weight for each sub-community\n const subInternalEdges = new Map<number, number>();\n // Total degree for each sub-community (within the full graph, not just sub-graph)\n const subDegree = new Map<number, number>();\n\n for (const mId of members) {\n const sid = nextSubId++;\n subCommunity.set(mId, sid);\n subCommunityNodes.set(sid, new Set([mId]));\n subInternalEdges.set(sid, 0);\n subDegree.set(sid, nodes.get(mId)!.degree);\n }\n\n // Phase 2b: iteratively merge singletons into well-connected sub-communities\n // We only allow merging a node if it is currently a singleton (size 1)\n // \u2014 this keeps the procedure efficient and follows the Leiden paper's spirit.\n let mergedAny = true;\n let subIterations = 0;\n const maxSubIterations = 10;\n\n while (mergedAny && subIterations < maxSubIterations) {\n mergedAny = false;\n subIterations++;\n\n for (const mId of members) {\n const currentSid = subCommunity.get(mId)!;\n // Only try to move nodes that are still singletons\n if (subCommunityNodes.get(currentSid)!.size !== 1) continue;\n\n const ki = nodes.get(mId)!.degree;\n const neighbors = adj.get(mId);\n if (!neighbors) continue;\n\n // Count edges from this node to each sub-community (within the same community C)\n const edgesToSub = new Map<number, number>();\n for (const [nId, w] of neighbors) {\n if (!memberSet.has(nId)) continue;\n const nSid = subCommunity.get(nId)!;\n if (nSid === currentSid) continue;\n edgesToSub.set(nSid, (edgesToSub.get(nSid) ?? 0) + w);\n }\n\n if (edgesToSub.size === 0) continue;\n\n let bestSid = currentSid;\n let bestGain = 0;\n\n for (const [candidateSid, edgesToCandidate] of edgesToSub) {\n const sigmaCandidate = subDegree.get(candidateSid) ?? 0;\n\n // Modularity gain of merging this singleton into candidateSid\n const gain = resolution * edgesToCandidate / m2\n - resolution * ki * sigmaCandidate / (m2 * m2) * 2;\n\n if (gain <= bestGain) continue;\n\n // Well-connectedness check:\n // After the merge the sub-community's internal edges would be\n // (current internal edges of candidate) + (edges from mId to candidate).\n // The threshold is: internalEdges >= \u03B3 * (degree_sum * (degree_sum - ki)) / (2m)\n // We use a relaxed form: internal edges must be positive (at least one edge\n // into the sub-community), which is already guaranteed by edgesToCandidate > 0.\n // Additionally enforce that the density ratio doesn't drop below a floor.\n const newInternalEdges = (subInternalEdges.get(candidateSid) ?? 0) + edgesToCandidate;\n const newDegreeSum = sigmaCandidate + ki;\n // Connectivity threshold: internal edge weight >= resolution * newDegreeSum / (2m)\n const threshold = resolution * newDegreeSum / m2;\n if (newInternalEdges < threshold) continue;\n\n bestGain = gain;\n bestSid = candidateSid;\n }\n\n if (bestSid !== currentSid) {\n // Perform the merge\n subCommunityNodes.get(currentSid)!.delete(mId);\n subCommunityNodes.get(bestSid)!.add(mId);\n subCommunity.set(mId, bestSid);\n\n const edgesAdded = edgesToSub.get(bestSid) ?? 0;\n subInternalEdges.set(bestSid, (subInternalEdges.get(bestSid) ?? 0) + edgesAdded);\n subDegree.set(bestSid, (subDegree.get(bestSid) ?? 0) + ki);\n\n mergedAny = true;\n }\n }\n }\n\n // Write refined assignments into the output map\n for (const mId of members) {\n refined.set(mId, subCommunity.get(mId)!);\n }\n }\n\n return refined;\n}\n\n/**\n * Calculate modularity of the current partition.\n */\nfunction calculateModularity(\n nodes: Map<string, LouvainNode>,\n adj: Map<string, Map<string, number>>,\n totalWeight: number,\n): number {\n if (totalWeight === 0) return 0;\n\n const m2 = 2 * totalWeight;\n let q = 0;\n\n for (const [nodeId, node] of nodes) {\n const neighbors = adj.get(nodeId);\n if (!neighbors) continue;\n\n for (const [neighborId, weight] of neighbors) {\n const neighborNode = nodes.get(neighborId);\n if (!neighborNode) continue;\n\n if (node.community === neighborNode.community) {\n q += weight - (node.degree * neighborNode.degree) / m2;\n }\n }\n }\n\n return q / m2;\n}\n\n/**\n * Run community detection on the graph using the Leiden algorithm.\n */\nexport function detectCommunities(db: GraphDatabase, opts?: { resolution?: number; maxCommunityPct?: number }): CommunityResult {\n const resolution = opts?.resolution ?? 1.0;\n const maxCommunityPct = opts?.maxCommunityPct ?? 0.25;\n\n const { nodes, adj, totalWeight } = buildAdjacency(db);\n\n if (nodes.size === 0) {\n return { communities: [], modularity: 0, totalNodes: 0, totalEdges: 0, algorithm: 'leiden' };\n }\n\n // Initialize: each node in its own community\n let communityId = 0;\n for (const node of nodes.values()) {\n node.community = communityId++;\n }\n\n // --- Leiden: local-move phase ---\n localMovePhase(nodes, adj, totalWeight, resolution);\n\n // --- Leiden: refinement phase ---\n // Sub-partition each community into well-connected sub-communities, then apply\n // the refined assignments back to the nodes map before aggregation.\n const refinedPartition = refinementPhase(nodes, adj, totalWeight, resolution);\n for (const [nodeId, refinedCommunityId] of refinedPartition) {\n nodes.get(nodeId)!.community = refinedCommunityId;\n }\n\n // Auto-split oversized communities\n const communityMembers = new Map<number, string[]>();\n for (const node of nodes.values()) {\n if (!communityMembers.has(node.community)) communityMembers.set(node.community, []);\n communityMembers.get(node.community)!.push(node.id);\n }\n\n const maxSize = Math.floor(nodes.size * maxCommunityPct);\n for (const [cId, members] of communityMembers) {\n if (members.length > maxSize) {\n // Re-run with higher resolution on this subgraph\n const subNodes = new Map<string, LouvainNode>();\n let subCommunityId = communityId;\n for (const mId of members) {\n const original = nodes.get(mId)!;\n subNodes.set(mId, { ...original, community: subCommunityId++ });\n }\n communityId = subCommunityId;\n\n // Build sub-adjacency\n const subAdj = new Map<string, Map<string, number>>();\n let subWeight = 0;\n for (const mId of members) {\n const neighbors = adj.get(mId);\n if (!neighbors) continue;\n for (const [nId, w] of neighbors) {\n if (subNodes.has(nId)) {\n if (!subAdj.has(mId)) subAdj.set(mId, new Map());\n subAdj.get(mId)!.set(nId, w);\n subWeight += w;\n }\n }\n }\n\n // Leiden on the sub-graph: local move + refinement\n localMovePhase(subNodes, subAdj, subWeight / 2, resolution * 2);\n const subRefined = refinementPhase(subNodes, subAdj, subWeight / 2, resolution * 2);\n for (const [mId, rId] of subRefined) {\n subNodes.get(mId)!.community = rId;\n }\n\n // Apply sub-community assignments back\n for (const [mId, subNode] of subNodes) {\n nodes.get(mId)!.community = subNode.community;\n }\n }\n }\n\n // Build result\n const rawDb = db.getRawDb();\n const finalCommunities = new Map<number, Array<{ id: string; name: string; kind: string; filePath: string }>>();\n\n for (const node of nodes.values()) {\n if (!finalCommunities.has(node.community)) finalCommunities.set(node.community, []);\n const nodeInfo = rawDb.get(\n 'SELECT name, kind, file_path as filePath FROM nodes WHERE id = ?',\n [node.id]\n ) as any;\n if (nodeInfo) {\n finalCommunities.get(node.community)!.push({\n id: node.id,\n name: nodeInfo.name,\n kind: nodeInfo.kind,\n filePath: nodeInfo.filePath,\n });\n }\n }\n\n // Calculate inter-community edges\n const interEdges = new Map<number, number>();\n for (const [nodeId, node] of nodes) {\n const neighbors = adj.get(nodeId);\n if (!neighbors) continue;\n for (const [neighborId] of neighbors) {\n const neighborNode = nodes.get(neighborId);\n if (neighborNode && neighborNode.community !== node.community) {\n interEdges.set(node.community, (interEdges.get(node.community) ?? 0) + 1);\n }\n }\n }\n\n // Build community objects\n const communities: Community[] = [];\n let idx = 0;\n for (const [cId, members] of finalCommunities) {\n if (members.length === 0) continue;\n\n // Dominant directory\n const dirCounts = new Map<string, number>();\n const langCounts = new Map<string, number>();\n for (const m of members) {\n const dir = m.filePath.split('/').slice(0, 2).join('/');\n dirCounts.set(dir, (dirCounts.get(dir) ?? 0) + 1);\n const ext = m.filePath.split('.').pop() ?? '';\n langCounts.set(ext, (langCounts.get(ext) ?? 0) + 1);\n }\n\n const dominantDirectory = [...dirCounts.entries()].sort((a, b) => b[1] - a[1])[0]?.[0] ?? '';\n const dominantLanguage = [...langCounts.entries()].sort((a, b) => b[1] - a[1])[0]?.[0] ?? '';\n\n // Generate label from dominant directory or top symbol\n const label = dominantDirectory || members[0]?.name || `community-${idx}`;\n\n communities.push({\n id: idx++,\n label,\n memberCount: members.length,\n members: members.slice(0, 30), // Cap for output size\n dominantDirectory,\n dominantLanguage,\n interCommunityEdges: interEdges.get(cId) ?? 0,\n });\n }\n\n // Sort by size descending\n communities.sort((a, b) => b.memberCount - a.memberCount);\n\n const modularity = calculateModularity(nodes, adj, totalWeight);\n\n return {\n communities,\n modularity,\n totalNodes: nodes.size,\n totalEdges: totalWeight,\n algorithm: 'leiden',\n };\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Execution Flow Tracing
3
+ *
4
+ * Traces call chains from entry points (functions with no incoming call edges,
5
+ * route handlers, main functions) through the graph, sorted by criticality.
6
+ */
7
+ import type { GraphDatabase } from '../db/database';
8
+ export interface FlowHop {
9
+ symbol: string;
10
+ kind: string;
11
+ filePath: string;
12
+ line: number;
13
+ edgeKind?: string;
14
+ confidence?: string;
15
+ }
16
+ export interface ExecutionFlow {
17
+ entryPoint: string;
18
+ entryPointKind: string;
19
+ entryPointFile: string;
20
+ criticality: number;
21
+ hops: FlowHop[];
22
+ }
23
+ /**
24
+ * Detect entry points: symbols that are likely execution starting points.
25
+ * - Route nodes
26
+ * - Functions with zero incoming call edges
27
+ * - Symbols matching known entry patterns (main, handler, controller, etc.)
28
+ */
29
+ export declare function detectEntryPoints(db: GraphDatabase, limit?: number): Array<{
30
+ id: string;
31
+ name: string;
32
+ kind: string;
33
+ filePath: string;
34
+ line: number;
35
+ }>;
36
+ /**
37
+ * Trace a single execution flow from an entry point forward through call edges.
38
+ * Returns the chain of hops with criticality scoring.
39
+ */
40
+ export declare function traceFlow(db: GraphDatabase, entryPointId: string, maxDepth?: number): FlowHop[];
41
+ /**
42
+ * Compute criticality score for a flow based on:
43
+ * - Length (longer flows = more critical paths)
44
+ * - Fan-out of hops (more downstream = higher criticality)
45
+ * - Whether it touches I/O-like patterns (db, http, file)
46
+ */
47
+ export declare function scoreCriticality(hops: FlowHop[]): number;
48
+ /**
49
+ * Get execution flows from all detected entry points.
50
+ */
51
+ export declare function getExecutionFlows(db: GraphDatabase, opts?: {
52
+ maxFlows?: number;
53
+ maxDepth?: number;
54
+ }): ExecutionFlow[];
55
+ //# sourceMappingURL=flows.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flows.d.ts","sourceRoot":"","sources":["../../src/graph/flows.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,OAAO,EAAE,CAAC;CACjB;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,aAAa,EAAE,KAAK,SAAK,GAAG,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CA6ClJ;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,EAAE,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,SAAK,GAAG,OAAO,EAAE,CA8C3F;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,CAUxD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,aAAa,EAAE,IAAI,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,aAAa,EAAE,CAwBrH"}
@@ -0,0 +1,138 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var flows_exports = {};
20
+ __export(flows_exports, {
21
+ detectEntryPoints: () => detectEntryPoints,
22
+ getExecutionFlows: () => getExecutionFlows,
23
+ scoreCriticality: () => scoreCriticality,
24
+ traceFlow: () => traceFlow
25
+ });
26
+ module.exports = __toCommonJS(flows_exports);
27
+ function detectEntryPoints(db, limit = 20) {
28
+ const rawDb = db.getRawDb();
29
+ const routes = rawDb.all(
30
+ `SELECT id, name, kind, file_path as filePath, start_line as line FROM nodes WHERE kind = 'route' LIMIT ?`,
31
+ [limit]
32
+ );
33
+ const roots = rawDb.all(
34
+ `SELECT n.id, n.name, n.kind, n.file_path as filePath, n.start_line as line
35
+ FROM nodes n
36
+ WHERE n.kind IN ('function', 'method')
37
+ AND n.is_exported = 1
38
+ AND NOT EXISTS (
39
+ SELECT 1 FROM edges e WHERE e.target = n.id AND e.kind = 'calls'
40
+ )
41
+ ORDER BY (SELECT COUNT(*) FROM edges e2 WHERE e2.source = n.id) DESC
42
+ LIMIT ?`,
43
+ [limit]
44
+ );
45
+ const patterns = rawDb.all(
46
+ `SELECT id, name, kind, file_path as filePath, start_line as line FROM nodes
47
+ WHERE (lower(name) LIKE '%handler%' OR lower(name) LIKE '%controller%'
48
+ OR lower(name) = 'main' OR lower(name) LIKE '%middleware%'
49
+ OR lower(name) LIKE '%endpoint%')
50
+ AND kind IN ('function', 'method', 'class')
51
+ LIMIT ?`,
52
+ [limit]
53
+ );
54
+ const seen = /* @__PURE__ */ new Set();
55
+ const results = [];
56
+ for (const entry of [...routes, ...roots, ...patterns]) {
57
+ if (!seen.has(entry.id)) {
58
+ seen.add(entry.id);
59
+ results.push(entry);
60
+ }
61
+ }
62
+ return results.slice(0, limit);
63
+ }
64
+ function traceFlow(db, entryPointId, maxDepth = 10) {
65
+ const rawDb = db.getRawDb();
66
+ const hops = [];
67
+ const visited = /* @__PURE__ */ new Set();
68
+ function walk(nodeId, depth) {
69
+ if (depth >= maxDepth || visited.has(nodeId)) return;
70
+ visited.add(nodeId);
71
+ const node = rawDb.get(
72
+ "SELECT name, kind, file_path as filePath, start_line as line FROM nodes WHERE id = ?",
73
+ [nodeId]
74
+ );
75
+ if (!node) return;
76
+ const edgeInfo = depth === 0 ? void 0 : rawDb.get(
77
+ `SELECT kind, confidence FROM edges WHERE target = ? AND source IN (${[...visited].map(() => "?").join(",")}) LIMIT 1`,
78
+ [nodeId, ...[...visited]]
79
+ );
80
+ hops.push({
81
+ symbol: node.name,
82
+ kind: node.kind,
83
+ filePath: node.filePath,
84
+ line: node.line,
85
+ edgeKind: edgeInfo?.kind,
86
+ confidence: edgeInfo?.confidence
87
+ });
88
+ const callees = rawDb.all(
89
+ `SELECT e.target, e.kind as edgeKind, e.confidence
90
+ FROM edges e
91
+ WHERE e.source = ? AND e.kind = 'calls'
92
+ ORDER BY (SELECT COUNT(*) FROM edges e2 WHERE e2.source = e.target) DESC
93
+ LIMIT 5`,
94
+ [nodeId]
95
+ );
96
+ for (const callee of callees) {
97
+ walk(callee.target, depth + 1);
98
+ }
99
+ }
100
+ walk(entryPointId, 0);
101
+ return hops;
102
+ }
103
+ function scoreCriticality(hops) {
104
+ if (hops.length === 0) return 0;
105
+ const lengthScore = Math.min(hops.length / 10, 1);
106
+ const ioPatterns = /db|database|query|http|fetch|request|file|write|read|socket|stream/i;
107
+ const touchesIO = hops.some((h) => ioPatterns.test(h.symbol));
108
+ const ioScore = touchesIO ? 0.3 : 0;
109
+ return Math.min(lengthScore * 0.7 + ioScore, 1);
110
+ }
111
+ function getExecutionFlows(db, opts) {
112
+ const maxFlows = opts?.maxFlows ?? 15;
113
+ const maxDepth = opts?.maxDepth ?? 10;
114
+ const entryPoints = detectEntryPoints(db, maxFlows * 2);
115
+ const flows = [];
116
+ for (const ep of entryPoints) {
117
+ const hops = traceFlow(db, ep.id, maxDepth);
118
+ if (hops.length < 2) continue;
119
+ const criticality = scoreCriticality(hops);
120
+ flows.push({
121
+ entryPoint: ep.name,
122
+ entryPointKind: ep.kind,
123
+ entryPointFile: ep.filePath,
124
+ criticality,
125
+ hops
126
+ });
127
+ }
128
+ flows.sort((a, b) => b.criticality - a.criticality);
129
+ return flows.slice(0, maxFlows);
130
+ }
131
+ // Annotate the CommonJS export names for ESM import in node:
132
+ 0 && (module.exports = {
133
+ detectEntryPoints,
134
+ getExecutionFlows,
135
+ scoreCriticality,
136
+ traceFlow
137
+ });
138
+ //# sourceMappingURL=flows.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/graph/flows.ts"],
4
+ "sourcesContent": ["/**\n * Execution Flow Tracing\n *\n * Traces call chains from entry points (functions with no incoming call edges,\n * route handlers, main functions) through the graph, sorted by criticality.\n */\n\nimport type { GraphDatabase } from '../db/database';\n\nexport interface FlowHop {\n symbol: string;\n kind: string;\n filePath: string;\n line: number;\n edgeKind?: string;\n confidence?: string;\n}\n\nexport interface ExecutionFlow {\n entryPoint: string;\n entryPointKind: string;\n entryPointFile: string;\n criticality: number;\n hops: FlowHop[];\n}\n\n/**\n * Detect entry points: symbols that are likely execution starting points.\n * - Route nodes\n * - Functions with zero incoming call edges\n * - Symbols matching known entry patterns (main, handler, controller, etc.)\n */\nexport function detectEntryPoints(db: GraphDatabase, limit = 20): Array<{ id: string; name: string; kind: string; filePath: string; line: number }> {\n const rawDb = db.getRawDb();\n\n // 1. Route nodes are always entry points\n const routes = rawDb.all(\n `SELECT id, name, kind, file_path as filePath, start_line as line FROM nodes WHERE kind = 'route' LIMIT ?`,\n [limit]\n ) as any[];\n\n // 2. Functions/methods with no incoming call edges (graph roots)\n const roots = rawDb.all(\n `SELECT n.id, n.name, n.kind, n.file_path as filePath, n.start_line as line\n FROM nodes n\n WHERE n.kind IN ('function', 'method')\n AND n.is_exported = 1\n AND NOT EXISTS (\n SELECT 1 FROM edges e WHERE e.target = n.id AND e.kind = 'calls'\n )\n ORDER BY (SELECT COUNT(*) FROM edges e2 WHERE e2.source = n.id) DESC\n LIMIT ?`,\n [limit]\n ) as any[];\n\n // 3. Known entry point patterns\n const patterns = rawDb.all(\n `SELECT id, name, kind, file_path as filePath, start_line as line FROM nodes\n WHERE (lower(name) LIKE '%handler%' OR lower(name) LIKE '%controller%'\n OR lower(name) = 'main' OR lower(name) LIKE '%middleware%'\n OR lower(name) LIKE '%endpoint%')\n AND kind IN ('function', 'method', 'class')\n LIMIT ?`,\n [limit]\n ) as any[];\n\n // Deduplicate by id\n const seen = new Set<string>();\n const results: Array<{ id: string; name: string; kind: string; filePath: string; line: number }> = [];\n for (const entry of [...routes, ...roots, ...patterns]) {\n if (!seen.has(entry.id)) {\n seen.add(entry.id);\n results.push(entry);\n }\n }\n\n return results.slice(0, limit);\n}\n\n/**\n * Trace a single execution flow from an entry point forward through call edges.\n * Returns the chain of hops with criticality scoring.\n */\nexport function traceFlow(db: GraphDatabase, entryPointId: string, maxDepth = 10): FlowHop[] {\n const rawDb = db.getRawDb();\n const hops: FlowHop[] = [];\n const visited = new Set<string>();\n\n function walk(nodeId: string, depth: number): void {\n if (depth >= maxDepth || visited.has(nodeId)) return;\n visited.add(nodeId);\n\n const node = rawDb.get(\n 'SELECT name, kind, file_path as filePath, start_line as line FROM nodes WHERE id = ?',\n [nodeId]\n ) as any;\n if (!node) return;\n\n const edgeInfo = depth === 0 ? undefined : rawDb.get(\n `SELECT kind, confidence FROM edges WHERE target = ? AND source IN (${[...visited].map(() => '?').join(',')}) LIMIT 1`,\n [nodeId, ...[...visited]]\n ) as any;\n\n hops.push({\n symbol: node.name,\n kind: node.kind,\n filePath: node.filePath,\n line: node.line,\n edgeKind: edgeInfo?.kind,\n confidence: edgeInfo?.confidence,\n });\n\n // Follow outgoing call edges, ordered by target's fan-out (criticality)\n const callees = rawDb.all(\n `SELECT e.target, e.kind as edgeKind, e.confidence\n FROM edges e\n WHERE e.source = ? AND e.kind = 'calls'\n ORDER BY (SELECT COUNT(*) FROM edges e2 WHERE e2.source = e.target) DESC\n LIMIT 5`,\n [nodeId]\n ) as any[];\n\n for (const callee of callees) {\n walk(callee.target, depth + 1);\n }\n }\n\n walk(entryPointId, 0);\n return hops;\n}\n\n/**\n * Compute criticality score for a flow based on:\n * - Length (longer flows = more critical paths)\n * - Fan-out of hops (more downstream = higher criticality)\n * - Whether it touches I/O-like patterns (db, http, file)\n */\nexport function scoreCriticality(hops: FlowHop[]): number {\n if (hops.length === 0) return 0;\n\n const lengthScore = Math.min(hops.length / 10, 1.0); // normalize to 0-1\n\n const ioPatterns = /db|database|query|http|fetch|request|file|write|read|socket|stream/i;\n const touchesIO = hops.some(h => ioPatterns.test(h.symbol));\n const ioScore = touchesIO ? 0.3 : 0;\n\n return Math.min(lengthScore * 0.7 + ioScore, 1.0);\n}\n\n/**\n * Get execution flows from all detected entry points.\n */\nexport function getExecutionFlows(db: GraphDatabase, opts?: { maxFlows?: number; maxDepth?: number }): ExecutionFlow[] {\n const maxFlows = opts?.maxFlows ?? 15;\n const maxDepth = opts?.maxDepth ?? 10;\n\n const entryPoints = detectEntryPoints(db, maxFlows * 2);\n const flows: ExecutionFlow[] = [];\n\n for (const ep of entryPoints) {\n const hops = traceFlow(db, ep.id, maxDepth);\n if (hops.length < 2) continue; // Skip trivial flows (single node)\n\n const criticality = scoreCriticality(hops);\n flows.push({\n entryPoint: ep.name,\n entryPointKind: ep.kind,\n entryPointFile: ep.filePath,\n criticality,\n hops,\n });\n }\n\n // Sort by criticality descending\n flows.sort((a, b) => b.criticality - a.criticality);\n return flows.slice(0, maxFlows);\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Refactoring Tools
3
+ *
4
+ * - rename: Preview all locations that reference a symbol (rename preview)
5
+ * - suggest: Community-driven refactoring suggestions
6
+ */
7
+ import type { GraphDatabase } from '../db/database';
8
+ export interface RenameLocation {
9
+ filePath: string;
10
+ line: number;
11
+ column?: number;
12
+ context: string;
13
+ edgeKind: string;
14
+ }
15
+ export interface RenamePreview {
16
+ symbol: string;
17
+ kind: string;
18
+ filePath: string;
19
+ line: number;
20
+ references: RenameLocation[];
21
+ totalReferences: number;
22
+ }
23
+ export interface RefactorSuggestion {
24
+ type: 'move' | 'split' | 'extract' | 'group';
25
+ description: string;
26
+ symbols: string[];
27
+ rationale: string;
28
+ priority: 'high' | 'medium' | 'low';
29
+ }
30
+ /**
31
+ * Generate a rename preview: find all locations that reference a symbol.
32
+ * This shows what would need to change if the symbol is renamed.
33
+ */
34
+ export declare function renamePreview(db: GraphDatabase, symbolName: string): RenamePreview | null;
35
+ /**
36
+ * Generate refactoring suggestions based on graph structure.
37
+ * Looks for:
38
+ * - Symbols that are far from their most-connected peers (move candidates)
39
+ * - Files with too many symbols in different "clusters" (split candidates)
40
+ * - Groups of related symbols scattered across files (group candidates)
41
+ */
42
+ export declare function suggestRefactorings(db: GraphDatabase, limit?: number): RefactorSuggestion[];
43
+ //# sourceMappingURL=refactor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refactor.d.ts","sourceRoot":"","sources":["../../src/graph/refactor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC;IAC7C,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;CACrC;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAqEzF;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,aAAa,EAAE,KAAK,SAAK,GAAG,kBAAkB,EAAE,CA6EvF"}
@@ -0,0 +1,155 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var refactor_exports = {};
20
+ __export(refactor_exports, {
21
+ renamePreview: () => renamePreview,
22
+ suggestRefactorings: () => suggestRefactorings
23
+ });
24
+ module.exports = __toCommonJS(refactor_exports);
25
+ function renamePreview(db, symbolName) {
26
+ const rawDb = db.getRawDb();
27
+ const target = rawDb.get(
28
+ `SELECT id, name, kind, file_path as filePath, start_line as line FROM nodes WHERE name = ? LIMIT 1`,
29
+ [symbolName]
30
+ );
31
+ if (!target) {
32
+ const qualified = rawDb.get(
33
+ `SELECT id, name, kind, file_path as filePath, start_line as line FROM nodes WHERE qualified_name LIKE ? LIMIT 1`,
34
+ [`%${symbolName}`]
35
+ );
36
+ if (!qualified) return null;
37
+ Object.assign(target, qualified);
38
+ }
39
+ const incomingEdges = rawDb.all(
40
+ `SELECT e.source, e.kind, e.line, e.column, n.name as sourceName, n.file_path as sourceFile, n.start_line as sourceLine
41
+ FROM edges e
42
+ JOIN nodes n ON n.id = e.source
43
+ WHERE e.target = ?
44
+ ORDER BY n.file_path, e.line`,
45
+ [target.id]
46
+ );
47
+ const outgoingEdges = rawDb.all(
48
+ `SELECT e.target, e.kind, e.line, e.column, n.name as targetName, n.file_path as targetFile
49
+ FROM edges e
50
+ JOIN nodes n ON n.id = e.target
51
+ WHERE e.source = ? AND e.kind IN ('imports', 'exports')`,
52
+ [target.id]
53
+ );
54
+ const references = [];
55
+ for (const edge of incomingEdges) {
56
+ references.push({
57
+ filePath: edge.sourceFile,
58
+ line: edge.line ?? edge.sourceLine,
59
+ column: edge.column ?? void 0,
60
+ context: edge.sourceName,
61
+ edgeKind: edge.kind
62
+ });
63
+ }
64
+ for (const edge of outgoingEdges) {
65
+ references.push({
66
+ filePath: edge.targetFile,
67
+ line: edge.line ?? 0,
68
+ column: edge.column ?? void 0,
69
+ context: edge.targetName,
70
+ edgeKind: edge.kind
71
+ });
72
+ }
73
+ return {
74
+ symbol: target.name,
75
+ kind: target.kind,
76
+ filePath: target.filePath,
77
+ line: target.line,
78
+ references,
79
+ totalReferences: references.length
80
+ };
81
+ }
82
+ function suggestRefactorings(db, limit = 10) {
83
+ const rawDb = db.getRawDb();
84
+ const suggestions = [];
85
+ const crossDirEdges = rawDb.all(
86
+ `SELECT
87
+ n1.file_path as sourceFile,
88
+ n2.file_path as targetFile,
89
+ COUNT(*) as edgeCount
90
+ FROM edges e
91
+ JOIN nodes n1 ON n1.id = e.source
92
+ JOIN nodes n2 ON n2.id = e.target
93
+ WHERE e.kind = 'calls'
94
+ AND n1.file_path != n2.file_path
95
+ GROUP BY n1.file_path, n2.file_path
96
+ HAVING edgeCount >= 5
97
+ ORDER BY edgeCount DESC
98
+ LIMIT 20`
99
+ );
100
+ for (const row of crossDirEdges.slice(0, 5)) {
101
+ const sourceDir = row.sourceFile.split("/").slice(0, -1).join("/");
102
+ const targetDir = row.targetFile.split("/").slice(0, -1).join("/");
103
+ if (sourceDir !== targetDir) {
104
+ suggestions.push({
105
+ type: "move",
106
+ description: `\`${row.sourceFile}\` has ${row.edgeCount} calls to \`${row.targetFile}\` \u2014 consider co-locating related code`,
107
+ symbols: [row.sourceFile, row.targetFile],
108
+ rationale: `High cross-directory coupling (${row.edgeCount} call edges) suggests these files belong together`,
109
+ priority: row.edgeCount >= 10 ? "high" : "medium"
110
+ });
111
+ }
112
+ }
113
+ const largeFiles = rawDb.all(
114
+ `SELECT file_path, COUNT(*) as symbolCount
115
+ FROM nodes
116
+ WHERE kind IN ('function', 'method', 'class')
117
+ GROUP BY file_path
118
+ HAVING symbolCount >= 15
119
+ ORDER BY symbolCount DESC
120
+ LIMIT 10`
121
+ );
122
+ for (const file of largeFiles.slice(0, 3)) {
123
+ suggestions.push({
124
+ type: "split",
125
+ description: `\`${file.file_path}\` has ${file.symbolCount} functions/classes \u2014 consider splitting into focused modules`,
126
+ symbols: [file.file_path],
127
+ rationale: `Files with many symbols often handle multiple responsibilities`,
128
+ priority: file.symbolCount >= 30 ? "high" : "medium"
129
+ });
130
+ }
131
+ const deadExports = rawDb.all(
132
+ `SELECT n.name, n.kind, n.file_path as filePath
133
+ FROM nodes n
134
+ WHERE n.is_exported = 1
135
+ AND n.kind IN ('function', 'method', 'class')
136
+ AND NOT EXISTS (SELECT 1 FROM edges e WHERE e.target = n.id AND e.kind = 'calls')
137
+ LIMIT 10`
138
+ );
139
+ if (deadExports.length >= 3) {
140
+ suggestions.push({
141
+ type: "extract",
142
+ description: `${deadExports.length} exported symbols have no callers \u2014 consider removing exports or the symbols themselves`,
143
+ symbols: deadExports.slice(0, 5).map((d) => `${d.kind} \`${d.name}\` in ${d.filePath}`),
144
+ rationale: `Exported symbols with no callers are dead API surface \u2014 they add maintenance burden without value`,
145
+ priority: deadExports.length >= 8 ? "high" : "low"
146
+ });
147
+ }
148
+ return suggestions.slice(0, limit);
149
+ }
150
+ // Annotate the CommonJS export names for ESM import in node:
151
+ 0 && (module.exports = {
152
+ renamePreview,
153
+ suggestRefactorings
154
+ });
155
+ //# sourceMappingURL=refactor.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/graph/refactor.ts"],
4
+ "sourcesContent": ["/**\n * Refactoring Tools\n *\n * - rename: Preview all locations that reference a symbol (rename preview)\n * - suggest: Community-driven refactoring suggestions\n */\n\nimport type { GraphDatabase } from '../db/database';\n\nexport interface RenameLocation {\n filePath: string;\n line: number;\n column?: number;\n context: string; // The referencing symbol's name\n edgeKind: string;\n}\n\nexport interface RenamePreview {\n symbol: string;\n kind: string;\n filePath: string;\n line: number;\n references: RenameLocation[];\n totalReferences: number;\n}\n\nexport interface RefactorSuggestion {\n type: 'move' | 'split' | 'extract' | 'group';\n description: string;\n symbols: string[];\n rationale: string;\n priority: 'high' | 'medium' | 'low';\n}\n\n/**\n * Generate a rename preview: find all locations that reference a symbol.\n * This shows what would need to change if the symbol is renamed.\n */\nexport function renamePreview(db: GraphDatabase, symbolName: string): RenamePreview | null {\n const rawDb = db.getRawDb();\n\n // Find the target symbol\n const target = rawDb.get(\n `SELECT id, name, kind, file_path as filePath, start_line as line FROM nodes WHERE name = ? LIMIT 1`,\n [symbolName]\n ) as any;\n\n if (!target) {\n // Try qualified name\n const qualified = rawDb.get(\n `SELECT id, name, kind, file_path as filePath, start_line as line FROM nodes WHERE qualified_name LIKE ? LIMIT 1`,\n [`%${symbolName}`]\n ) as any;\n if (!qualified) return null;\n Object.assign(target, qualified);\n }\n\n // Find all edges pointing TO this symbol (references, calls, imports)\n const incomingEdges = rawDb.all(\n `SELECT e.source, e.kind, e.line, e.column, n.name as sourceName, n.file_path as sourceFile, n.start_line as sourceLine\n FROM edges e\n JOIN nodes n ON n.id = e.source\n WHERE e.target = ?\n ORDER BY n.file_path, e.line`,\n [target.id]\n ) as any[];\n\n // Find all edges FROM this symbol (for completeness \u2014 shows what it calls)\n const outgoingEdges = rawDb.all(\n `SELECT e.target, e.kind, e.line, e.column, n.name as targetName, n.file_path as targetFile\n FROM edges e\n JOIN nodes n ON n.id = e.target\n WHERE e.source = ? AND e.kind IN ('imports', 'exports')`,\n [target.id]\n ) as any[];\n\n const references: RenameLocation[] = [];\n\n for (const edge of incomingEdges) {\n references.push({\n filePath: edge.sourceFile,\n line: edge.line ?? edge.sourceLine,\n column: edge.column ?? undefined,\n context: edge.sourceName,\n edgeKind: edge.kind,\n });\n }\n\n // Also include export/import edges from the symbol itself\n for (const edge of outgoingEdges) {\n references.push({\n filePath: edge.targetFile,\n line: edge.line ?? 0,\n column: edge.column ?? undefined,\n context: edge.targetName,\n edgeKind: edge.kind,\n });\n }\n\n return {\n symbol: target.name,\n kind: target.kind,\n filePath: target.filePath,\n line: target.line,\n references,\n totalReferences: references.length,\n };\n}\n\n/**\n * Generate refactoring suggestions based on graph structure.\n * Looks for:\n * - Symbols that are far from their most-connected peers (move candidates)\n * - Files with too many symbols in different \"clusters\" (split candidates)\n * - Groups of related symbols scattered across files (group candidates)\n */\nexport function suggestRefactorings(db: GraphDatabase, limit = 10): RefactorSuggestion[] {\n const rawDb = db.getRawDb();\n const suggestions: RefactorSuggestion[] = [];\n\n // 1. Find files with high fan-out to a single other directory (move candidates)\n const crossDirEdges = rawDb.all(\n `SELECT\n n1.file_path as sourceFile,\n n2.file_path as targetFile,\n COUNT(*) as edgeCount\n FROM edges e\n JOIN nodes n1 ON n1.id = e.source\n JOIN nodes n2 ON n2.id = e.target\n WHERE e.kind = 'calls'\n AND n1.file_path != n2.file_path\n GROUP BY n1.file_path, n2.file_path\n HAVING edgeCount >= 5\n ORDER BY edgeCount DESC\n LIMIT 20`\n ) as any[];\n\n for (const row of crossDirEdges.slice(0, 5)) {\n const sourceDir = row.sourceFile.split('/').slice(0, -1).join('/');\n const targetDir = row.targetFile.split('/').slice(0, -1).join('/');\n if (sourceDir !== targetDir) {\n suggestions.push({\n type: 'move',\n description: `\\`${row.sourceFile}\\` has ${row.edgeCount} calls to \\`${row.targetFile}\\` \u2014 consider co-locating related code`,\n symbols: [row.sourceFile, row.targetFile],\n rationale: `High cross-directory coupling (${row.edgeCount} call edges) suggests these files belong together`,\n priority: row.edgeCount >= 10 ? 'high' : 'medium',\n });\n }\n }\n\n // 2. Find large files (split candidates)\n const largeFiles = rawDb.all(\n `SELECT file_path, COUNT(*) as symbolCount\n FROM nodes\n WHERE kind IN ('function', 'method', 'class')\n GROUP BY file_path\n HAVING symbolCount >= 15\n ORDER BY symbolCount DESC\n LIMIT 10`\n ) as any[];\n\n for (const file of largeFiles.slice(0, 3)) {\n suggestions.push({\n type: 'split',\n description: `\\`${file.file_path}\\` has ${file.symbolCount} functions/classes \u2014 consider splitting into focused modules`,\n symbols: [file.file_path],\n rationale: `Files with many symbols often handle multiple responsibilities`,\n priority: file.symbolCount >= 30 ? 'high' : 'medium',\n });\n }\n\n // 3. Find exported symbols with zero callers (dead export candidates)\n const deadExports = rawDb.all(\n `SELECT n.name, n.kind, n.file_path as filePath\n FROM nodes n\n WHERE n.is_exported = 1\n AND n.kind IN ('function', 'method', 'class')\n AND NOT EXISTS (SELECT 1 FROM edges e WHERE e.target = n.id AND e.kind = 'calls')\n LIMIT 10`\n ) as any[];\n\n if (deadExports.length >= 3) {\n suggestions.push({\n type: 'extract',\n description: `${deadExports.length} exported symbols have no callers \u2014 consider removing exports or the symbols themselves`,\n symbols: deadExports.slice(0, 5).map((d: any) => `${d.kind} \\`${d.name}\\` in ${d.filePath}`),\n rationale: `Exported symbols with no callers are dead API surface \u2014 they add maintenance burden without value`,\n priority: deadExports.length >= 8 ? 'high' : 'low',\n });\n }\n\n return suggestions.slice(0, limit);\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
package/dist/index.d.ts CHANGED
@@ -4,9 +4,13 @@
4
4
  * Pure facade. Every method delegates to a focused sub-system.
5
5
  * No business logic lives here.
6
6
  */
7
+ import { GraphDatabase } from './db/database';
7
8
  import type { KiroGraphConfig } from './config';
9
+ import { SnapshotManager } from './core/snapshot';
8
10
  import type { FileTreeNode, FileTree } from './core/file-tree';
9
- import type { Node, NodeKind, IndexResult, IndexProgress, SyncResult, TaskContext, SearchResult, SearchOptions, NodeContext, NodeMetrics } from './types';
11
+ import type { GraphSnapshot, GraphDiff } from './core/snapshot';
12
+ export type { GraphSnapshot, GraphDiff };
13
+ import type { Node, Edge, NodeKind, IndexResult, IndexProgress, SyncResult, TaskContext, SearchResult, SearchOptions, NodeContext, NodeMetrics } from './types';
10
14
  import type { ArchitectureResult } from './architecture/types';
11
15
  export type { FileTreeNode, FileTree };
12
16
  export default class KiroGraph {
@@ -22,24 +26,36 @@ export default class KiroGraph {
22
26
  private readonly pipeline;
23
27
  private readonly searcher;
24
28
  private constructor();
25
- static init(projectRoot: string, config?: Partial<KiroGraphConfig>): Promise<KiroGraph>;
26
- static open(projectRoot: string): Promise<KiroGraph>;
29
+ static init(projectRoot: string, config?: Partial<KiroGraphConfig>, onModelProgress?: (file: string, loaded: number, total: number, done: boolean) => void): Promise<KiroGraph>;
30
+ static open(projectRoot: string, onModelProgress?: (file: string, loaded: number, total: number, done: boolean) => void): Promise<KiroGraph>;
27
31
  static isInitialized(projectRoot: string): boolean;
28
32
  unlockForce(): void;
29
33
  markDirty(): void;
30
34
  clearDirty(): void;
31
35
  isDirty(): boolean;
36
+ isIndexLocked(): boolean;
32
37
  syncIfDirty(): Promise<SyncResult | null>;
38
+ /**
39
+ * Returns the number of files that have changed on disk but are not yet
40
+ * reflected in the index. Used by the MCP status tool to warn the agent
41
+ * when the index may be stale.
42
+ */
43
+ getPendingSyncCount(): Promise<number>;
33
44
  indexAll(opts?: {
34
45
  onProgress?: (p: IndexProgress) => void;
35
46
  force?: boolean;
36
47
  signal?: AbortSignal;
37
48
  }): Promise<IndexResult>;
38
- sync(changedFiles?: string[]): Promise<SyncResult>;
49
+ sync(changedFilesOrOpts?: string[] | {
50
+ files?: string[];
51
+ onProgress?: (p: IndexProgress) => void;
52
+ }): Promise<SyncResult>;
39
53
  searchNodes(query: string, kindOrOpts?: NodeKind | SearchOptions, limit?: number): SearchResult[];
40
54
  getCallers(nodeId: string, limit?: number): Promise<Node[]>;
41
55
  getCallees(nodeId: string, limit?: number): Promise<Node[]>;
42
56
  getImpactRadius(nodeId: string, depth?: number): Promise<Node[]>;
57
+ getAllNodes(): Node[];
58
+ getAllEdges(): Edge[];
43
59
  findDeadCode(limit?: number): Node[];
44
60
  findCircularDependencies(): string[][];
45
61
  findPath(fromId: string, toId: string, maxDepth?: number): Promise<Node[]>;
@@ -61,7 +77,22 @@ export default class KiroGraph {
61
77
  depth?: number;
62
78
  testPattern?: string;
63
79
  }): string[];
80
+ findHotspots(limit?: number): Array<Node & {
81
+ degree: number;
82
+ inDegree: number;
83
+ outDegree: number;
84
+ }>;
85
+ findSurprisingConnections(limit?: number): Array<{
86
+ source: Node;
87
+ target: Node;
88
+ kind: string;
89
+ score: number;
90
+ }>;
91
+ createSnapshotManager(): SnapshotManager;
64
92
  getStats(): Promise<{
93
+ pendingFiles: number;
94
+ syncRunning: boolean;
95
+ syncWarningThreshold: number;
65
96
  architectureStats?: {
66
97
  packages: number;
67
98
  layers: number;
@@ -95,6 +126,7 @@ export default class KiroGraph {
95
126
  };
96
127
  isArchitectureEnabled(): boolean;
97
128
  getProjectRoot(): string;
129
+ getDatabase(): GraphDatabase;
98
130
  close(): void;
99
131
  }
100
132
  /** Walk up directories to find the nearest .kirograph/ folder. */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -54,7 +54,7 @@ class KiroGraph {
54
54
  this.db = db;
55
55
  this.config = config;
56
56
  this.queryManager = new import_queries.GraphQueryManager(db);
57
- this.resolver = new import_resolution.ReferenceResolver(db, config);
57
+ this.resolver = new import_resolution.ReferenceResolver(db, config, projectRoot);
58
58
  this.vectors = new import_vectors.VectorManager(db, config, projectRoot);
59
59
  this.contextBuilder = new import_context.ContextBuilder(db, this.resolver, this.vectors, projectRoot);
60
60
  this.arch = new import_architecture.ArchitectureAnalyzer(db, config, projectRoot);