kirograph 0.27.2 → 0.28.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (788) hide show
  1. package/README.md +14 -7
  2. package/dist/bin/commands/annotations.js +56 -0
  3. package/dist/bin/commands/annotations.js.map +7 -0
  4. package/dist/bin/commands/ast-rewrite.js +55 -0
  5. package/dist/bin/commands/ast-rewrite.js.map +7 -0
  6. package/dist/bin/commands/bench.js +103 -0
  7. package/dist/bin/commands/bench.js.map +7 -0
  8. package/dist/bin/commands/branch.js +133 -0
  9. package/dist/bin/commands/branch.js.map +7 -0
  10. package/dist/bin/commands/changelog.js +55 -0
  11. package/dist/bin/commands/changelog.js.map +7 -0
  12. package/dist/bin/commands/commit-context.js +55 -0
  13. package/dist/bin/commands/commit-context.js.map +7 -0
  14. package/dist/bin/commands/complexity.js +60 -0
  15. package/dist/bin/commands/complexity.js.map +7 -0
  16. package/dist/bin/commands/cost.js +146 -0
  17. package/dist/bin/commands/cost.js.map +7 -0
  18. package/dist/bin/commands/dependency-depth.js +55 -0
  19. package/dist/bin/commands/dependency-depth.js.map +7 -0
  20. package/dist/bin/commands/diff-context.js +55 -0
  21. package/dist/bin/commands/diff-context.js.map +7 -0
  22. package/dist/bin/commands/distribution.js +56 -0
  23. package/dist/bin/commands/distribution.js.map +7 -0
  24. package/dist/bin/commands/doc-coverage.js +56 -0
  25. package/dist/bin/commands/doc-coverage.js.map +7 -0
  26. package/dist/bin/commands/doctor.js +202 -0
  27. package/dist/bin/commands/doctor.js.map +7 -0
  28. package/dist/bin/commands/dsm.js +56 -0
  29. package/dist/bin/commands/dsm.js.map +7 -0
  30. package/dist/bin/commands/gini.js +55 -0
  31. package/dist/bin/commands/gini.js.map +7 -0
  32. package/dist/bin/commands/god-class.js +56 -0
  33. package/dist/bin/commands/god-class.js.map +7 -0
  34. package/dist/bin/commands/health.js +55 -0
  35. package/dist/bin/commands/health.js.map +7 -0
  36. package/dist/bin/commands/help.js +224 -45
  37. package/dist/bin/commands/help.js.map +2 -2
  38. package/dist/bin/commands/inheritance-depth.js +56 -0
  39. package/dist/bin/commands/inheritance-depth.js.map +7 -0
  40. package/dist/bin/commands/insert-at.js +55 -0
  41. package/dist/bin/commands/insert-at.js.map +7 -0
  42. package/dist/bin/commands/largest.js +56 -0
  43. package/dist/bin/commands/largest.js.map +7 -0
  44. package/dist/bin/commands/manifest.js +158 -0
  45. package/dist/bin/commands/manifest.js.map +7 -0
  46. package/dist/bin/commands/module-api.js +57 -0
  47. package/dist/bin/commands/module-api.js.map +7 -0
  48. package/dist/bin/commands/monitor.js +91 -0
  49. package/dist/bin/commands/monitor.js.map +7 -0
  50. package/dist/bin/commands/multi-replace.js +66 -0
  51. package/dist/bin/commands/multi-replace.js.map +7 -0
  52. package/dist/bin/commands/pr-context.js +55 -0
  53. package/dist/bin/commands/pr-context.js.map +7 -0
  54. package/dist/bin/commands/query.js +19 -1
  55. package/dist/bin/commands/query.js.map +3 -3
  56. package/dist/bin/commands/rank.js +56 -0
  57. package/dist/bin/commands/rank.js.map +7 -0
  58. package/dist/bin/commands/read.js +1 -1
  59. package/dist/bin/commands/read.js.map +2 -2
  60. package/dist/bin/commands/recursion.js +56 -0
  61. package/dist/bin/commands/recursion.js.map +7 -0
  62. package/dist/bin/commands/rename-preview.js +56 -0
  63. package/dist/bin/commands/rename-preview.js.map +7 -0
  64. package/dist/bin/commands/session.js +60 -0
  65. package/dist/bin/commands/session.js.map +7 -0
  66. package/dist/bin/commands/simplify-scan.js +56 -0
  67. package/dist/bin/commands/simplify-scan.js.map +7 -0
  68. package/dist/bin/commands/str-replace.js +55 -0
  69. package/dist/bin/commands/str-replace.js.map +7 -0
  70. package/dist/bin/commands/test-coverage.js +59 -0
  71. package/dist/bin/commands/test-coverage.js.map +7 -0
  72. package/dist/bin/commands/test-map.js +56 -0
  73. package/dist/bin/commands/test-map.js.map +7 -0
  74. package/dist/bin/commands/test-risk.js +59 -0
  75. package/dist/bin/commands/test-risk.js.map +7 -0
  76. package/dist/bin/commands/unused-imports.js +55 -0
  77. package/dist/bin/commands/unused-imports.js.map +7 -0
  78. package/dist/bin/commands/upgrade.js +78 -0
  79. package/dist/bin/commands/upgrade.js.map +7 -0
  80. package/dist/bin/installer/common.js +5 -1
  81. package/dist/bin/installer/common.js.map +2 -2
  82. package/dist/bin/installer/config-prompt.js +239 -93
  83. package/dist/bin/installer/config-prompt.js.map +3 -3
  84. package/dist/bin/installer/index.js +38 -6
  85. package/dist/bin/installer/index.js.map +2 -2
  86. package/dist/bin/installer/instructions.js +7 -11
  87. package/dist/bin/installer/instructions.js.map +2 -2
  88. package/dist/bin/installer/mcp.js.map +2 -2
  89. package/dist/bin/installer/steering.js +531 -100
  90. package/dist/bin/installer/steering.js.map +2 -2
  91. package/dist/bin/installer/targets/kiro.js +7 -3
  92. package/dist/bin/installer/targets/kiro.js.map +2 -2
  93. package/dist/bin/kirograph.js +73 -1
  94. package/dist/bin/kirograph.js.map +3 -3
  95. package/dist/config.js +26 -8
  96. package/dist/config.js.map +2 -2
  97. package/dist/core/branch-manager.js +111 -0
  98. package/dist/core/branch-manager.js.map +7 -0
  99. package/dist/core/pipeline.js +3 -3
  100. package/dist/core/pipeline.js.map +2 -2
  101. package/dist/db/database.js +34 -7
  102. package/dist/db/database.js.map +2 -2
  103. package/dist/db/schema.sql +7 -1
  104. package/dist/extraction/complexity.js +116 -0
  105. package/dist/extraction/complexity.js.map +7 -0
  106. package/dist/extraction/extractor.js +52 -1
  107. package/dist/extraction/extractor.js.map +2 -2
  108. package/dist/graph/git-context.js +229 -0
  109. package/dist/graph/git-context.js.map +7 -0
  110. package/dist/index.js +4 -2
  111. package/dist/index.js.map +2 -2
  112. package/dist/mcp/handler.js +446 -0
  113. package/dist/mcp/handler.js.map +7 -0
  114. package/dist/mcp/handlers/architecture.js +297 -0
  115. package/dist/mcp/handlers/architecture.js.map +7 -0
  116. package/dist/mcp/handlers/branch.js +175 -0
  117. package/dist/mcp/handlers/branch.js.map +7 -0
  118. package/dist/mcp/handlers/code-health.js +563 -0
  119. package/dist/mcp/handlers/code-health.js.map +7 -0
  120. package/dist/mcp/handlers/complexity.js +267 -0
  121. package/dist/mcp/handlers/complexity.js.map +7 -0
  122. package/dist/mcp/handlers/core.js +611 -0
  123. package/dist/mcp/handlers/core.js.map +7 -0
  124. package/dist/mcp/handlers/data.js +337 -0
  125. package/dist/mcp/handlers/data.js.map +7 -0
  126. package/dist/mcp/handlers/docs.js +159 -0
  127. package/dist/mcp/handlers/docs.js.map +7 -0
  128. package/dist/mcp/handlers/edit-primitives.js +200 -0
  129. package/dist/mcp/handlers/edit-primitives.js.map +7 -0
  130. package/dist/mcp/handlers/git-context.js +286 -0
  131. package/dist/mcp/handlers/git-context.js.map +7 -0
  132. package/dist/mcp/handlers/memory.js +363 -0
  133. package/dist/mcp/handlers/memory.js.map +7 -0
  134. package/dist/mcp/handlers/patterns.js +310 -0
  135. package/dist/mcp/handlers/patterns.js.map +7 -0
  136. package/dist/mcp/handlers/security.js +699 -0
  137. package/dist/mcp/handlers/security.js.map +7 -0
  138. package/dist/mcp/handlers/utils.js +97 -0
  139. package/dist/mcp/handlers/utils.js.map +7 -0
  140. package/dist/mcp/handlers/watchmen.js +104 -0
  141. package/dist/mcp/handlers/watchmen.js.map +7 -0
  142. package/dist/mcp/handlers/wiki.js +242 -0
  143. package/dist/mcp/handlers/wiki.js.map +7 -0
  144. package/dist/mcp/server.js +72 -3
  145. package/dist/mcp/server.js.map +2 -2
  146. package/dist/mcp/tool-names.js +94 -7
  147. package/dist/mcp/tool-names.js.map +2 -2
  148. package/dist/mcp/tools.js +445 -3210
  149. package/dist/mcp/tools.js.map +3 -3
  150. package/dist/types.js.map +2 -2
  151. package/package.json +36 -10
  152. package/dist/architecture/index.d.ts +0 -11
  153. package/dist/architecture/index.d.ts.map +0 -1
  154. package/dist/architecture/layers/csharp.d.ts +0 -6
  155. package/dist/architecture/layers/csharp.d.ts.map +0 -1
  156. package/dist/architecture/layers/dart.d.ts +0 -10
  157. package/dist/architecture/layers/dart.d.ts.map +0 -1
  158. package/dist/architecture/layers/elixir.d.ts +0 -6
  159. package/dist/architecture/layers/elixir.d.ts.map +0 -1
  160. package/dist/architecture/layers/go.d.ts +0 -7
  161. package/dist/architecture/layers/go.d.ts.map +0 -1
  162. package/dist/architecture/layers/index.d.ts +0 -30
  163. package/dist/architecture/layers/index.d.ts.map +0 -1
  164. package/dist/architecture/layers/java.d.ts +0 -7
  165. package/dist/architecture/layers/java.d.ts.map +0 -1
  166. package/dist/architecture/layers/ocaml.d.ts +0 -6
  167. package/dist/architecture/layers/ocaml.d.ts.map +0 -1
  168. package/dist/architecture/layers/python.d.ts +0 -7
  169. package/dist/architecture/layers/python.d.ts.map +0 -1
  170. package/dist/architecture/layers/ruby.d.ts +0 -6
  171. package/dist/architecture/layers/ruby.d.ts.map +0 -1
  172. package/dist/architecture/layers/rust.d.ts +0 -6
  173. package/dist/architecture/layers/rust.d.ts.map +0 -1
  174. package/dist/architecture/layers/scala.d.ts +0 -6
  175. package/dist/architecture/layers/scala.d.ts.map +0 -1
  176. package/dist/architecture/layers/solidity.d.ts +0 -6
  177. package/dist/architecture/layers/solidity.d.ts.map +0 -1
  178. package/dist/architecture/layers/types.d.ts +0 -2
  179. package/dist/architecture/layers/types.d.ts.map +0 -1
  180. package/dist/architecture/layers/typescript.d.ts +0 -9
  181. package/dist/architecture/layers/typescript.d.ts.map +0 -1
  182. package/dist/architecture/layers/vue.d.ts +0 -6
  183. package/dist/architecture/layers/vue.d.ts.map +0 -1
  184. package/dist/architecture/manifest/cargo.d.ts +0 -3
  185. package/dist/architecture/manifest/cargo.d.ts.map +0 -1
  186. package/dist/architecture/manifest/csproj.d.ts +0 -3
  187. package/dist/architecture/manifest/csproj.d.ts.map +0 -1
  188. package/dist/architecture/manifest/elm.d.ts +0 -3
  189. package/dist/architecture/manifest/elm.d.ts.map +0 -1
  190. package/dist/architecture/manifest/go.d.ts +0 -3
  191. package/dist/architecture/manifest/go.d.ts.map +0 -1
  192. package/dist/architecture/manifest/gradle.d.ts +0 -3
  193. package/dist/architecture/manifest/gradle.d.ts.map +0 -1
  194. package/dist/architecture/manifest/index.d.ts +0 -12
  195. package/dist/architecture/manifest/index.d.ts.map +0 -1
  196. package/dist/architecture/manifest/maven.d.ts +0 -3
  197. package/dist/architecture/manifest/maven.d.ts.map +0 -1
  198. package/dist/architecture/manifest/npm.d.ts +0 -3
  199. package/dist/architecture/manifest/npm.d.ts.map +0 -1
  200. package/dist/architecture/manifest/ocaml.d.ts +0 -3
  201. package/dist/architecture/manifest/ocaml.d.ts.map +0 -1
  202. package/dist/architecture/manifest/python.d.ts +0 -3
  203. package/dist/architecture/manifest/python.d.ts.map +0 -1
  204. package/dist/architecture/manifest/scala.d.ts +0 -3
  205. package/dist/architecture/manifest/scala.d.ts.map +0 -1
  206. package/dist/architecture/manifest/types.d.ts +0 -2
  207. package/dist/architecture/manifest/types.d.ts.map +0 -1
  208. package/dist/architecture/types.d.ts +0 -91
  209. package/dist/architecture/types.d.ts.map +0 -1
  210. package/dist/banner.d.ts +0 -6
  211. package/dist/banner.d.ts.map +0 -1
  212. package/dist/banner.js +0 -67
  213. package/dist/banner.js.map +0 -1
  214. package/dist/bin/banner.d.ts +0 -6
  215. package/dist/bin/banner.d.ts.map +0 -1
  216. package/dist/bin/commands/affected.d.ts +0 -3
  217. package/dist/bin/commands/affected.d.ts.map +0 -1
  218. package/dist/bin/commands/architecture.d.ts +0 -3
  219. package/dist/bin/commands/architecture.d.ts.map +0 -1
  220. package/dist/bin/commands/attack-surface.d.ts +0 -3
  221. package/dist/bin/commands/attack-surface.d.ts.map +0 -1
  222. package/dist/bin/commands/benchmark.d.ts +0 -9
  223. package/dist/bin/commands/benchmark.d.ts.map +0 -1
  224. package/dist/bin/commands/budget.d.ts +0 -6
  225. package/dist/bin/commands/budget.d.ts.map +0 -1
  226. package/dist/bin/commands/caveman.d.ts +0 -7
  227. package/dist/bin/commands/caveman.d.ts.map +0 -1
  228. package/dist/bin/commands/communities.d.ts +0 -3
  229. package/dist/bin/commands/communities.d.ts.map +0 -1
  230. package/dist/bin/commands/compression.d.ts +0 -7
  231. package/dist/bin/commands/compression.d.ts.map +0 -1
  232. package/dist/bin/commands/configure-mcp.js +0 -104
  233. package/dist/bin/commands/configure-mcp.js.map +0 -7
  234. package/dist/bin/commands/context.d.ts +0 -3
  235. package/dist/bin/commands/context.d.ts.map +0 -1
  236. package/dist/bin/commands/coupling.d.ts +0 -3
  237. package/dist/bin/commands/coupling.d.ts.map +0 -1
  238. package/dist/bin/commands/dashboard.d.ts +0 -3
  239. package/dist/bin/commands/dashboard.d.ts.map +0 -1
  240. package/dist/bin/commands/data.d.ts +0 -3
  241. package/dist/bin/commands/data.d.ts.map +0 -1
  242. package/dist/bin/commands/dead-code.d.ts +0 -3
  243. package/dist/bin/commands/dead-code.d.ts.map +0 -1
  244. package/dist/bin/commands/dep-confusion.d.ts +0 -3
  245. package/dist/bin/commands/dep-confusion.d.ts.map +0 -1
  246. package/dist/bin/commands/docs.d.ts +0 -3
  247. package/dist/bin/commands/docs.d.ts.map +0 -1
  248. package/dist/bin/commands/exec.d.ts +0 -11
  249. package/dist/bin/commands/exec.d.ts.map +0 -1
  250. package/dist/bin/commands/export.d.ts +0 -3
  251. package/dist/bin/commands/export.d.ts.map +0 -1
  252. package/dist/bin/commands/files.d.ts +0 -3
  253. package/dist/bin/commands/files.d.ts.map +0 -1
  254. package/dist/bin/commands/flows.d.ts +0 -3
  255. package/dist/bin/commands/flows.d.ts.map +0 -1
  256. package/dist/bin/commands/gain.d.ts +0 -6
  257. package/dist/bin/commands/gain.d.ts.map +0 -1
  258. package/dist/bin/commands/help.d.ts +0 -11
  259. package/dist/bin/commands/help.d.ts.map +0 -1
  260. package/dist/bin/commands/hotspots.d.ts +0 -3
  261. package/dist/bin/commands/hotspots.d.ts.map +0 -1
  262. package/dist/bin/commands/index.d.ts +0 -3
  263. package/dist/bin/commands/index.d.ts.map +0 -1
  264. package/dist/bin/commands/init.d.ts +0 -3
  265. package/dist/bin/commands/init.d.ts.map +0 -1
  266. package/dist/bin/commands/install.d.ts +0 -3
  267. package/dist/bin/commands/install.d.ts.map +0 -1
  268. package/dist/bin/commands/licenses.d.ts +0 -3
  269. package/dist/bin/commands/licenses.d.ts.map +0 -1
  270. package/dist/bin/commands/mark-dirty.d.ts +0 -3
  271. package/dist/bin/commands/mark-dirty.d.ts.map +0 -1
  272. package/dist/bin/commands/memory.d.ts +0 -16
  273. package/dist/bin/commands/memory.d.ts.map +0 -1
  274. package/dist/bin/commands/package.d.ts +0 -3
  275. package/dist/bin/commands/package.d.ts.map +0 -1
  276. package/dist/bin/commands/path.d.ts +0 -3
  277. package/dist/bin/commands/path.d.ts.map +0 -1
  278. package/dist/bin/commands/pattern.d.ts +0 -3
  279. package/dist/bin/commands/pattern.d.ts.map +0 -1
  280. package/dist/bin/commands/qdrant.d.ts +0 -3
  281. package/dist/bin/commands/qdrant.d.ts.map +0 -1
  282. package/dist/bin/commands/qdrant.js +0 -159
  283. package/dist/bin/commands/qdrant.js.map +0 -1
  284. package/dist/bin/commands/query.d.ts +0 -3
  285. package/dist/bin/commands/query.d.ts.map +0 -1
  286. package/dist/bin/commands/reachability.d.ts +0 -3
  287. package/dist/bin/commands/reachability.d.ts.map +0 -1
  288. package/dist/bin/commands/read.d.ts +0 -6
  289. package/dist/bin/commands/read.d.ts.map +0 -1
  290. package/dist/bin/commands/refactor.d.ts +0 -3
  291. package/dist/bin/commands/refactor.d.ts.map +0 -1
  292. package/dist/bin/commands/remediation.d.ts +0 -3
  293. package/dist/bin/commands/remediation.d.ts.map +0 -1
  294. package/dist/bin/commands/sbom.d.ts +0 -3
  295. package/dist/bin/commands/sbom.d.ts.map +0 -1
  296. package/dist/bin/commands/security-ci-report.d.ts +0 -9
  297. package/dist/bin/commands/security-ci-report.d.ts.map +0 -1
  298. package/dist/bin/commands/security-export.d.ts +0 -2
  299. package/dist/bin/commands/security-export.d.ts.map +0 -1
  300. package/dist/bin/commands/security-flows.d.ts +0 -3
  301. package/dist/bin/commands/security-flows.d.ts.map +0 -1
  302. package/dist/bin/commands/security-secrets.d.ts +0 -3
  303. package/dist/bin/commands/security-secrets.d.ts.map +0 -1
  304. package/dist/bin/commands/security.d.ts +0 -3
  305. package/dist/bin/commands/security.d.ts.map +0 -1
  306. package/dist/bin/commands/serve.d.ts +0 -3
  307. package/dist/bin/commands/serve.d.ts.map +0 -1
  308. package/dist/bin/commands/snapshot.d.ts +0 -3
  309. package/dist/bin/commands/snapshot.d.ts.map +0 -1
  310. package/dist/bin/commands/staleness.d.ts +0 -3
  311. package/dist/bin/commands/staleness.d.ts.map +0 -1
  312. package/dist/bin/commands/status.d.ts +0 -3
  313. package/dist/bin/commands/status.d.ts.map +0 -1
  314. package/dist/bin/commands/stop.d.ts +0 -3
  315. package/dist/bin/commands/stop.d.ts.map +0 -1
  316. package/dist/bin/commands/stop.js +0 -81
  317. package/dist/bin/commands/stop.js.map +0 -1
  318. package/dist/bin/commands/supply-chain.d.ts +0 -3
  319. package/dist/bin/commands/supply-chain.d.ts.map +0 -1
  320. package/dist/bin/commands/surprising.d.ts +0 -3
  321. package/dist/bin/commands/surprising.d.ts.map +0 -1
  322. package/dist/bin/commands/sync-if-dirty.d.ts +0 -3
  323. package/dist/bin/commands/sync-if-dirty.d.ts.map +0 -1
  324. package/dist/bin/commands/sync.d.ts +0 -3
  325. package/dist/bin/commands/sync.d.ts.map +0 -1
  326. package/dist/bin/commands/typesense.d.ts +0 -3
  327. package/dist/bin/commands/typesense.d.ts.map +0 -1
  328. package/dist/bin/commands/typesense.js +0 -126
  329. package/dist/bin/commands/typesense.js.map +0 -1
  330. package/dist/bin/commands/uninit.d.ts +0 -4
  331. package/dist/bin/commands/uninit.d.ts.map +0 -1
  332. package/dist/bin/commands/unlock.d.ts +0 -3
  333. package/dist/bin/commands/unlock.d.ts.map +0 -1
  334. package/dist/bin/commands/utils.d.ts +0 -17
  335. package/dist/bin/commands/utils.d.ts.map +0 -1
  336. package/dist/bin/commands/vex.d.ts +0 -3
  337. package/dist/bin/commands/vex.d.ts.map +0 -1
  338. package/dist/bin/commands/vuln-suppress.d.ts +0 -3
  339. package/dist/bin/commands/vuln-suppress.d.ts.map +0 -1
  340. package/dist/bin/commands/vulns.d.ts +0 -3
  341. package/dist/bin/commands/vulns.d.ts.map +0 -1
  342. package/dist/bin/installer/archive.d.ts +0 -47
  343. package/dist/bin/installer/archive.d.ts.map +0 -1
  344. package/dist/bin/installer/auto-detect.d.ts +0 -16
  345. package/dist/bin/installer/auto-detect.d.ts.map +0 -1
  346. package/dist/bin/installer/caveman.d.ts +0 -12
  347. package/dist/bin/installer/caveman.d.ts.map +0 -1
  348. package/dist/bin/installer/cli-agent.d.ts +0 -20
  349. package/dist/bin/installer/cli-agent.d.ts.map +0 -1
  350. package/dist/bin/installer/common.d.ts +0 -36
  351. package/dist/bin/installer/common.d.ts.map +0 -1
  352. package/dist/bin/installer/config-prompt.d.ts +0 -13
  353. package/dist/bin/installer/config-prompt.d.ts.map +0 -1
  354. package/dist/bin/installer/dashboard.d.ts +0 -3
  355. package/dist/bin/installer/dashboard.d.ts.map +0 -1
  356. package/dist/bin/installer/detect.d.ts +0 -30
  357. package/dist/bin/installer/detect.d.ts.map +0 -1
  358. package/dist/bin/installer/hooks.d.ts +0 -8
  359. package/dist/bin/installer/hooks.d.ts.map +0 -1
  360. package/dist/bin/installer/index.d.ts +0 -12
  361. package/dist/bin/installer/index.d.ts.map +0 -1
  362. package/dist/bin/installer/instructions.d.ts +0 -14
  363. package/dist/bin/installer/instructions.d.ts.map +0 -1
  364. package/dist/bin/installer/mcp.d.ts +0 -5
  365. package/dist/bin/installer/mcp.d.ts.map +0 -1
  366. package/dist/bin/installer/prompts.d.ts +0 -45
  367. package/dist/bin/installer/prompts.d.ts.map +0 -1
  368. package/dist/bin/installer/qdrant-dashboard.d.ts +0 -4
  369. package/dist/bin/installer/qdrant-dashboard.d.ts.map +0 -1
  370. package/dist/bin/installer/steering.d.ts +0 -17
  371. package/dist/bin/installer/steering.d.ts.map +0 -1
  372. package/dist/bin/installer/targets/aider.d.ts +0 -6
  373. package/dist/bin/installer/targets/aider.d.ts.map +0 -1
  374. package/dist/bin/installer/targets/amp.d.ts +0 -6
  375. package/dist/bin/installer/targets/amp.d.ts.map +0 -1
  376. package/dist/bin/installer/targets/antigravity.d.ts +0 -13
  377. package/dist/bin/installer/targets/antigravity.d.ts.map +0 -1
  378. package/dist/bin/installer/targets/augment.d.ts +0 -6
  379. package/dist/bin/installer/targets/augment.d.ts.map +0 -1
  380. package/dist/bin/installer/targets/claude.d.ts +0 -6
  381. package/dist/bin/installer/targets/claude.d.ts.map +0 -1
  382. package/dist/bin/installer/targets/cline.d.ts +0 -13
  383. package/dist/bin/installer/targets/cline.d.ts.map +0 -1
  384. package/dist/bin/installer/targets/codex.d.ts +0 -6
  385. package/dist/bin/installer/targets/codex.d.ts.map +0 -1
  386. package/dist/bin/installer/targets/continue.d.ts +0 -12
  387. package/dist/bin/installer/targets/continue.d.ts.map +0 -1
  388. package/dist/bin/installer/targets/copilot-cli.d.ts +0 -12
  389. package/dist/bin/installer/targets/copilot-cli.d.ts.map +0 -1
  390. package/dist/bin/installer/targets/copilot.d.ts +0 -6
  391. package/dist/bin/installer/targets/copilot.d.ts.map +0 -1
  392. package/dist/bin/installer/targets/cursor.d.ts +0 -6
  393. package/dist/bin/installer/targets/cursor.d.ts.map +0 -1
  394. package/dist/bin/installer/targets/devin.d.ts +0 -13
  395. package/dist/bin/installer/targets/devin.d.ts.map +0 -1
  396. package/dist/bin/installer/targets/gemini-cli.d.ts +0 -16
  397. package/dist/bin/installer/targets/gemini-cli.d.ts.map +0 -1
  398. package/dist/bin/installer/targets/generic.d.ts +0 -59
  399. package/dist/bin/installer/targets/generic.d.ts.map +0 -1
  400. package/dist/bin/installer/targets/goose.d.ts +0 -6
  401. package/dist/bin/installer/targets/goose.d.ts.map +0 -1
  402. package/dist/bin/installer/targets/index.d.ts +0 -11
  403. package/dist/bin/installer/targets/index.d.ts.map +0 -1
  404. package/dist/bin/installer/targets/junie.d.ts +0 -13
  405. package/dist/bin/installer/targets/junie.d.ts.map +0 -1
  406. package/dist/bin/installer/targets/kilo.d.ts +0 -12
  407. package/dist/bin/installer/targets/kilo.d.ts.map +0 -1
  408. package/dist/bin/installer/targets/kiro.d.ts +0 -5
  409. package/dist/bin/installer/targets/kiro.d.ts.map +0 -1
  410. package/dist/bin/installer/targets/opencode.d.ts +0 -13
  411. package/dist/bin/installer/targets/opencode.d.ts.map +0 -1
  412. package/dist/bin/installer/targets/openhands.d.ts +0 -6
  413. package/dist/bin/installer/targets/openhands.d.ts.map +0 -1
  414. package/dist/bin/installer/targets/qoder.d.ts +0 -12
  415. package/dist/bin/installer/targets/qoder.d.ts.map +0 -1
  416. package/dist/bin/installer/targets/qwen.d.ts +0 -12
  417. package/dist/bin/installer/targets/qwen.d.ts.map +0 -1
  418. package/dist/bin/installer/targets/replit.d.ts +0 -6
  419. package/dist/bin/installer/targets/replit.d.ts.map +0 -1
  420. package/dist/bin/installer/targets/roo.d.ts +0 -13
  421. package/dist/bin/installer/targets/roo.d.ts.map +0 -1
  422. package/dist/bin/installer/targets/tabnine.d.ts +0 -6
  423. package/dist/bin/installer/targets/tabnine.d.ts.map +0 -1
  424. package/dist/bin/installer/targets/trae.d.ts +0 -6
  425. package/dist/bin/installer/targets/trae.d.ts.map +0 -1
  426. package/dist/bin/installer/targets/warp.d.ts +0 -12
  427. package/dist/bin/installer/targets/warp.d.ts.map +0 -1
  428. package/dist/bin/installer/targets/windsurf.d.ts +0 -13
  429. package/dist/bin/installer/targets/windsurf.d.ts.map +0 -1
  430. package/dist/bin/kirograph.d.ts +0 -6
  431. package/dist/bin/kirograph.d.ts.map +0 -1
  432. package/dist/bin/progress.d.ts +0 -29
  433. package/dist/bin/progress.d.ts.map +0 -1
  434. package/dist/bin/ui.d.ts +0 -11
  435. package/dist/bin/ui.d.ts.map +0 -1
  436. package/dist/compression/filters/aws.d.ts +0 -9
  437. package/dist/compression/filters/aws.d.ts.map +0 -1
  438. package/dist/compression/filters/docker.d.ts +0 -6
  439. package/dist/compression/filters/docker.d.ts.map +0 -1
  440. package/dist/compression/filters/files.d.ts +0 -6
  441. package/dist/compression/filters/files.d.ts.map +0 -1
  442. package/dist/compression/filters/generic.d.ts +0 -7
  443. package/dist/compression/filters/generic.d.ts.map +0 -1
  444. package/dist/compression/filters/git.d.ts +0 -6
  445. package/dist/compression/filters/git.d.ts.map +0 -1
  446. package/dist/compression/filters/github.d.ts +0 -6
  447. package/dist/compression/filters/github.d.ts.map +0 -1
  448. package/dist/compression/filters/lint.d.ts +0 -6
  449. package/dist/compression/filters/lint.d.ts.map +0 -1
  450. package/dist/compression/filters/misc.d.ts +0 -6
  451. package/dist/compression/filters/misc.d.ts.map +0 -1
  452. package/dist/compression/filters/package.d.ts +0 -6
  453. package/dist/compression/filters/package.d.ts.map +0 -1
  454. package/dist/compression/filters/test.d.ts +0 -6
  455. package/dist/compression/filters/test.d.ts.map +0 -1
  456. package/dist/compression/index.d.ts +0 -29
  457. package/dist/compression/index.d.ts.map +0 -1
  458. package/dist/compression/naive-cost.d.ts +0 -26
  459. package/dist/compression/naive-cost.d.ts.map +0 -1
  460. package/dist/compression/tracker.d.ts +0 -155
  461. package/dist/compression/tracker.d.ts.map +0 -1
  462. package/dist/compression/types.d.ts +0 -49
  463. package/dist/compression/types.d.ts.map +0 -1
  464. package/dist/config.d.ts +0 -138
  465. package/dist/config.d.ts.map +0 -1
  466. package/dist/context/index.d.ts +0 -61
  467. package/dist/context/index.d.ts.map +0 -1
  468. package/dist/core/file-tree.d.ts +0 -15
  469. package/dist/core/file-tree.d.ts.map +0 -1
  470. package/dist/core/lock-manager.d.ts +0 -22
  471. package/dist/core/lock-manager.d.ts.map +0 -1
  472. package/dist/core/pipeline.d.ts +0 -40
  473. package/dist/core/pipeline.d.ts.map +0 -1
  474. package/dist/core/snapshot.d.ts +0 -58
  475. package/dist/core/snapshot.d.ts.map +0 -1
  476. package/dist/data/filters.d.ts +0 -23
  477. package/dist/data/filters.d.ts.map +0 -1
  478. package/dist/data/indexer.d.ts +0 -25
  479. package/dist/data/indexer.d.ts.map +0 -1
  480. package/dist/data/linker.d.ts +0 -37
  481. package/dist/data/linker.d.ts.map +0 -1
  482. package/dist/data/linker.test.js +0 -60
  483. package/dist/data/linker.test.js.map +0 -7
  484. package/dist/data/lint.d.ts +0 -27
  485. package/dist/data/lint.d.ts.map +0 -1
  486. package/dist/data/parsers/__fixtures__/pdf-inspector-stub.js +0 -41
  487. package/dist/data/parsers/__fixtures__/pdf-inspector-stub.js.map +0 -7
  488. package/dist/data/parsers/csv.d.ts +0 -11
  489. package/dist/data/parsers/csv.d.ts.map +0 -1
  490. package/dist/data/parsers/excel.d.ts +0 -10
  491. package/dist/data/parsers/excel.d.ts.map +0 -1
  492. package/dist/data/parsers/index.d.ts +0 -28
  493. package/dist/data/parsers/index.d.ts.map +0 -1
  494. package/dist/data/parsers/json-array.d.ts +0 -9
  495. package/dist/data/parsers/json-array.d.ts.map +0 -1
  496. package/dist/data/parsers/jsonl.d.ts +0 -9
  497. package/dist/data/parsers/jsonl.d.ts.map +0 -1
  498. package/dist/data/parsers/parquet.d.ts +0 -10
  499. package/dist/data/parsers/parquet.d.ts.map +0 -1
  500. package/dist/data/parsers/pdf.test.js +0 -125
  501. package/dist/data/parsers/pdf.test.js.map +0 -7
  502. package/dist/data/profiler.d.ts +0 -29
  503. package/dist/data/profiler.d.ts.map +0 -1
  504. package/dist/data/queries.d.ts +0 -95
  505. package/dist/data/queries.d.ts.map +0 -1
  506. package/dist/data/types.d.ts +0 -103
  507. package/dist/data/types.d.ts.map +0 -1
  508. package/dist/db/database.d.ts +0 -190
  509. package/dist/db/database.d.ts.map +0 -1
  510. package/dist/docs/formats/asciidoc.d.ts +0 -9
  511. package/dist/docs/formats/asciidoc.d.ts.map +0 -1
  512. package/dist/docs/formats/html.d.ts +0 -10
  513. package/dist/docs/formats/html.d.ts.map +0 -1
  514. package/dist/docs/formats/index.d.ts +0 -31
  515. package/dist/docs/formats/index.d.ts.map +0 -1
  516. package/dist/docs/formats/markdown.d.ts +0 -11
  517. package/dist/docs/formats/markdown.d.ts.map +0 -1
  518. package/dist/docs/formats/openapi.d.ts +0 -17
  519. package/dist/docs/formats/openapi.d.ts.map +0 -1
  520. package/dist/docs/formats/org.d.ts +0 -9
  521. package/dist/docs/formats/org.d.ts.map +0 -1
  522. package/dist/docs/formats/plaintext.d.ts +0 -11
  523. package/dist/docs/formats/plaintext.d.ts.map +0 -1
  524. package/dist/docs/formats/rdoc.d.ts +0 -10
  525. package/dist/docs/formats/rdoc.d.ts.map +0 -1
  526. package/dist/docs/formats/rst.d.ts +0 -11
  527. package/dist/docs/formats/rst.d.ts.map +0 -1
  528. package/dist/docs/indexer.d.ts +0 -49
  529. package/dist/docs/indexer.d.ts.map +0 -1
  530. package/dist/docs/linker.d.ts +0 -30
  531. package/dist/docs/linker.d.ts.map +0 -1
  532. package/dist/docs/lint.d.ts +0 -27
  533. package/dist/docs/lint.d.ts.map +0 -1
  534. package/dist/docs/queries.d.ts +0 -78
  535. package/dist/docs/queries.d.ts.map +0 -1
  536. package/dist/docs/section-id.d.ts +0 -48
  537. package/dist/docs/section-id.d.ts.map +0 -1
  538. package/dist/docs/summarizer.d.ts +0 -13
  539. package/dist/docs/summarizer.d.ts.map +0 -1
  540. package/dist/docs/types.d.ts +0 -71
  541. package/dist/docs/types.d.ts.map +0 -1
  542. package/dist/docs/vectors.d.ts +0 -54
  543. package/dist/docs/vectors.d.ts.map +0 -1
  544. package/dist/errors.d.ts +0 -49
  545. package/dist/errors.d.ts.map +0 -1
  546. package/dist/extraction/extractor.d.ts +0 -29
  547. package/dist/extraction/extractor.d.ts.map +0 -1
  548. package/dist/extraction/grammars.d.ts +0 -54
  549. package/dist/extraction/grammars.d.ts.map +0 -1
  550. package/dist/extraction/languages.d.ts +0 -9
  551. package/dist/extraction/languages.d.ts.map +0 -1
  552. package/dist/extraction/notebook.d.ts +0 -14
  553. package/dist/extraction/notebook.d.ts.map +0 -1
  554. package/dist/frameworks/amplify.d.ts +0 -9
  555. package/dist/frameworks/amplify.d.ts.map +0 -1
  556. package/dist/frameworks/angular.d.ts +0 -9
  557. package/dist/frameworks/angular.d.ts.map +0 -1
  558. package/dist/frameworks/ansible.d.ts +0 -8
  559. package/dist/frameworks/ansible.d.ts.map +0 -1
  560. package/dist/frameworks/cloudformation.d.ts +0 -9
  561. package/dist/frameworks/cloudformation.d.ts.map +0 -1
  562. package/dist/frameworks/csharp.d.ts +0 -8
  563. package/dist/frameworks/csharp.d.ts.map +0 -1
  564. package/dist/frameworks/docker.d.ts +0 -9
  565. package/dist/frameworks/docker.d.ts.map +0 -1
  566. package/dist/frameworks/elixir.d.ts +0 -6
  567. package/dist/frameworks/elixir.d.ts.map +0 -1
  568. package/dist/frameworks/express.d.ts +0 -8
  569. package/dist/frameworks/express.d.ts.map +0 -1
  570. package/dist/frameworks/flutter.d.ts +0 -12
  571. package/dist/frameworks/flutter.d.ts.map +0 -1
  572. package/dist/frameworks/go.d.ts +0 -8
  573. package/dist/frameworks/go.d.ts.map +0 -1
  574. package/dist/frameworks/iac.d.ts +0 -10
  575. package/dist/frameworks/iac.d.ts.map +0 -1
  576. package/dist/frameworks/index.d.ts +0 -44
  577. package/dist/frameworks/index.d.ts.map +0 -1
  578. package/dist/frameworks/java.d.ts +0 -8
  579. package/dist/frameworks/java.d.ts.map +0 -1
  580. package/dist/frameworks/kubernetes.d.ts +0 -9
  581. package/dist/frameworks/kubernetes.d.ts.map +0 -1
  582. package/dist/frameworks/laravel.d.ts +0 -9
  583. package/dist/frameworks/laravel.d.ts.map +0 -1
  584. package/dist/frameworks/pulumi.d.ts +0 -9
  585. package/dist/frameworks/pulumi.d.ts.map +0 -1
  586. package/dist/frameworks/python.d.ts +0 -10
  587. package/dist/frameworks/python.d.ts.map +0 -1
  588. package/dist/frameworks/react.d.ts +0 -9
  589. package/dist/frameworks/react.d.ts.map +0 -1
  590. package/dist/frameworks/ruby.d.ts +0 -8
  591. package/dist/frameworks/ruby.d.ts.map +0 -1
  592. package/dist/frameworks/rust.d.ts +0 -8
  593. package/dist/frameworks/rust.d.ts.map +0 -1
  594. package/dist/frameworks/scala.d.ts +0 -6
  595. package/dist/frameworks/scala.d.ts.map +0 -1
  596. package/dist/frameworks/solidity.d.ts +0 -6
  597. package/dist/frameworks/solidity.d.ts.map +0 -1
  598. package/dist/frameworks/svelte.d.ts +0 -8
  599. package/dist/frameworks/svelte.d.ts.map +0 -1
  600. package/dist/frameworks/swift.d.ts +0 -10
  601. package/dist/frameworks/swift.d.ts.map +0 -1
  602. package/dist/frameworks/terraform.d.ts +0 -14
  603. package/dist/frameworks/terraform.d.ts.map +0 -1
  604. package/dist/frameworks/types.d.ts +0 -37
  605. package/dist/frameworks/types.d.ts.map +0 -1
  606. package/dist/frameworks/vue.d.ts +0 -7
  607. package/dist/frameworks/vue.d.ts.map +0 -1
  608. package/dist/graph/communities.d.ts +0 -43
  609. package/dist/graph/communities.d.ts.map +0 -1
  610. package/dist/graph/flows.d.ts +0 -55
  611. package/dist/graph/flows.d.ts.map +0 -1
  612. package/dist/graph/queries.d.ts +0 -53
  613. package/dist/graph/queries.d.ts.map +0 -1
  614. package/dist/graph/refactor.d.ts +0 -43
  615. package/dist/graph/refactor.d.ts.map +0 -1
  616. package/dist/graph/traversal.d.ts +0 -35
  617. package/dist/graph/traversal.d.ts.map +0 -1
  618. package/dist/index.d.ts +0 -134
  619. package/dist/index.d.ts.map +0 -1
  620. package/dist/installer/index.d.ts +0 -10
  621. package/dist/installer/index.d.ts.map +0 -1
  622. package/dist/installer/index.js +0 -526
  623. package/dist/installer/index.js.map +0 -1
  624. package/dist/mcp/cache.d.ts +0 -69
  625. package/dist/mcp/cache.d.ts.map +0 -1
  626. package/dist/mcp/read-modes.d.ts +0 -31
  627. package/dist/mcp/read-modes.d.ts.map +0 -1
  628. package/dist/mcp/server.d.ts +0 -17
  629. package/dist/mcp/server.d.ts.map +0 -1
  630. package/dist/mcp/tool-names.d.ts +0 -2
  631. package/dist/mcp/tool-names.d.ts.map +0 -1
  632. package/dist/mcp/tools.d.ts +0 -49
  633. package/dist/mcp/tools.d.ts.map +0 -1
  634. package/dist/mcp/transport.d.ts +0 -29
  635. package/dist/mcp/transport.d.ts.map +0 -1
  636. package/dist/memory/compress.d.ts +0 -19
  637. package/dist/memory/compress.d.ts.map +0 -1
  638. package/dist/memory/database.d.ts +0 -92
  639. package/dist/memory/database.d.ts.map +0 -1
  640. package/dist/memory/index.d.ts +0 -71
  641. package/dist/memory/index.d.ts.map +0 -1
  642. package/dist/memory/symbols.d.ts +0 -21
  643. package/dist/memory/symbols.d.ts.map +0 -1
  644. package/dist/memory/types.d.ts +0 -78
  645. package/dist/memory/types.d.ts.map +0 -1
  646. package/dist/memory/vectors.d.ts +0 -43
  647. package/dist/memory/vectors.d.ts.map +0 -1
  648. package/dist/patterns/graph.d.ts +0 -16
  649. package/dist/patterns/graph.d.ts.map +0 -1
  650. package/dist/patterns/index.d.ts +0 -4
  651. package/dist/patterns/index.d.ts.map +0 -1
  652. package/dist/patterns/indexer.d.ts +0 -15
  653. package/dist/patterns/indexer.d.ts.map +0 -1
  654. package/dist/patterns/loader.d.ts +0 -18
  655. package/dist/patterns/loader.d.ts.map +0 -1
  656. package/dist/patterns/runner.d.ts +0 -42
  657. package/dist/patterns/runner.d.ts.map +0 -1
  658. package/dist/patterns/types.d.ts +0 -27
  659. package/dist/patterns/types.d.ts.map +0 -1
  660. package/dist/resolution/bridges/android-rn.d.ts +0 -13
  661. package/dist/resolution/bridges/android-rn.d.ts.map +0 -1
  662. package/dist/resolution/bridges/expo-modules.d.ts +0 -10
  663. package/dist/resolution/bridges/expo-modules.d.ts.map +0 -1
  664. package/dist/resolution/bridges/flutter-channel.d.ts +0 -14
  665. package/dist/resolution/bridges/flutter-channel.d.ts.map +0 -1
  666. package/dist/resolution/bridges/index.d.ts +0 -40
  667. package/dist/resolution/bridges/index.d.ts.map +0 -1
  668. package/dist/resolution/bridges/native-events.d.ts +0 -10
  669. package/dist/resolution/bridges/native-events.d.ts.map +0 -1
  670. package/dist/resolution/bridges/native-views.d.ts +0 -13
  671. package/dist/resolution/bridges/native-views.d.ts.map +0 -1
  672. package/dist/resolution/bridges/react-native.d.ts +0 -9
  673. package/dist/resolution/bridges/react-native.d.ts.map +0 -1
  674. package/dist/resolution/bridges/swift-objc.d.ts +0 -14
  675. package/dist/resolution/bridges/swift-objc.d.ts.map +0 -1
  676. package/dist/resolution/bridges/turbomodules.d.ts +0 -10
  677. package/dist/resolution/bridges/turbomodules.d.ts.map +0 -1
  678. package/dist/resolution/index.d.ts +0 -81
  679. package/dist/resolution/index.d.ts.map +0 -1
  680. package/dist/resolution/name-matcher.d.ts +0 -25
  681. package/dist/resolution/name-matcher.d.ts.map +0 -1
  682. package/dist/scripts/postinstall.js +0 -64
  683. package/dist/search/query-utils.d.ts +0 -21
  684. package/dist/search/query-utils.d.ts.map +0 -1
  685. package/dist/search/searcher.d.ts +0 -15
  686. package/dist/search/searcher.d.ts.map +0 -1
  687. package/dist/security/attack-surface.d.ts +0 -46
  688. package/dist/security/attack-surface.d.ts.map +0 -1
  689. package/dist/security/context-warnings.d.ts +0 -40
  690. package/dist/security/context-warnings.d.ts.map +0 -1
  691. package/dist/security/data-flows.d.ts +0 -33
  692. package/dist/security/data-flows.d.ts.map +0 -1
  693. package/dist/security/dep-confusion.d.ts +0 -23
  694. package/dist/security/dep-confusion.d.ts.map +0 -1
  695. package/dist/security/errors.d.ts +0 -16
  696. package/dist/security/errors.d.ts.map +0 -1
  697. package/dist/security/export/fix-suggestions.d.ts +0 -21
  698. package/dist/security/export/fix-suggestions.d.ts.map +0 -1
  699. package/dist/security/export/sbom.d.ts +0 -33
  700. package/dist/security/export/sbom.d.ts.map +0 -1
  701. package/dist/security/export/serialization.d.ts +0 -62
  702. package/dist/security/export/serialization.d.ts.map +0 -1
  703. package/dist/security/export/vex.d.ts +0 -58
  704. package/dist/security/export/vex.d.ts.map +0 -1
  705. package/dist/security/index.d.ts +0 -21
  706. package/dist/security/index.d.ts.map +0 -1
  707. package/dist/security/integrator.d.ts +0 -63
  708. package/dist/security/integrator.d.ts.map +0 -1
  709. package/dist/security/license.d.ts +0 -33
  710. package/dist/security/license.d.ts.map +0 -1
  711. package/dist/security/manifest/adapter.d.ts +0 -92
  712. package/dist/security/manifest/adapter.d.ts.map +0 -1
  713. package/dist/security/manifest/parser.d.ts +0 -73
  714. package/dist/security/manifest/parser.d.ts.map +0 -1
  715. package/dist/security/manifest/plugins/cargo.d.ts +0 -11
  716. package/dist/security/manifest/plugins/cargo.d.ts.map +0 -1
  717. package/dist/security/manifest/plugins/composer.d.ts +0 -11
  718. package/dist/security/manifest/plugins/composer.d.ts.map +0 -1
  719. package/dist/security/manifest/plugins/go.d.ts +0 -12
  720. package/dist/security/manifest/plugins/go.d.ts.map +0 -1
  721. package/dist/security/manifest/plugins/gradle.d.ts +0 -12
  722. package/dist/security/manifest/plugins/gradle.d.ts.map +0 -1
  723. package/dist/security/manifest/plugins/hex.d.ts +0 -11
  724. package/dist/security/manifest/plugins/hex.d.ts.map +0 -1
  725. package/dist/security/manifest/plugins/maven.d.ts +0 -11
  726. package/dist/security/manifest/plugins/maven.d.ts.map +0 -1
  727. package/dist/security/manifest/plugins/npm.d.ts +0 -11
  728. package/dist/security/manifest/plugins/npm.d.ts.map +0 -1
  729. package/dist/security/manifest/plugins/nuget.d.ts +0 -12
  730. package/dist/security/manifest/plugins/nuget.d.ts.map +0 -1
  731. package/dist/security/manifest/plugins/pip.d.ts +0 -11
  732. package/dist/security/manifest/plugins/pip.d.ts.map +0 -1
  733. package/dist/security/manifest/plugins/pubspec.d.ts +0 -11
  734. package/dist/security/manifest/plugins/pubspec.d.ts.map +0 -1
  735. package/dist/security/manifest/plugins/pyproject.d.ts +0 -3
  736. package/dist/security/manifest/plugins/pyproject.d.ts.map +0 -1
  737. package/dist/security/manifest/plugins/rubygems.d.ts +0 -11
  738. package/dist/security/manifest/plugins/rubygems.d.ts.map +0 -1
  739. package/dist/security/manifest/plugins/swift.d.ts +0 -11
  740. package/dist/security/manifest/plugins/swift.d.ts.map +0 -1
  741. package/dist/security/owasp.d.ts +0 -16
  742. package/dist/security/owasp.d.ts.map +0 -1
  743. package/dist/security/pipeline.d.ts +0 -37
  744. package/dist/security/pipeline.d.ts.map +0 -1
  745. package/dist/security/reachability.d.ts +0 -67
  746. package/dist/security/reachability.d.ts.map +0 -1
  747. package/dist/security/remediation.d.ts +0 -51
  748. package/dist/security/remediation.d.ts.map +0 -1
  749. package/dist/security/secrets.d.ts +0 -38
  750. package/dist/security/secrets.d.ts.map +0 -1
  751. package/dist/security/staleness.d.ts +0 -43
  752. package/dist/security/staleness.d.ts.map +0 -1
  753. package/dist/security/supply-chain.d.ts +0 -34
  754. package/dist/security/supply-chain.d.ts.map +0 -1
  755. package/dist/security/suppressions.d.ts +0 -18
  756. package/dist/security/suppressions.d.ts.map +0 -1
  757. package/dist/security/types.d.ts +0 -144
  758. package/dist/security/types.d.ts.map +0 -1
  759. package/dist/security/vuln/client.d.ts +0 -90
  760. package/dist/security/vuln/client.d.ts.map +0 -1
  761. package/dist/security/vuln/epss-client.d.ts +0 -26
  762. package/dist/security/vuln/epss-client.d.ts.map +0 -1
  763. package/dist/security/vuln/index.d.ts +0 -6
  764. package/dist/security/vuln/index.d.ts.map +0 -1
  765. package/dist/security/vuln/osv-adapter.d.ts +0 -58
  766. package/dist/security/vuln/osv-adapter.d.ts.map +0 -1
  767. package/dist/security/vuln/types.d.ts +0 -29
  768. package/dist/security/vuln/types.d.ts.map +0 -1
  769. package/dist/sync/index.d.ts +0 -35
  770. package/dist/sync/index.d.ts.map +0 -1
  771. package/dist/types.d.ts +0 -137
  772. package/dist/types.d.ts.map +0 -1
  773. package/dist/utils.d.ts +0 -52
  774. package/dist/utils.d.ts.map +0 -1
  775. package/dist/vectors/index.d.ts +0 -79
  776. package/dist/vectors/index.d.ts.map +0 -1
  777. package/dist/vectors/lancedb-index.d.ts +0 -50
  778. package/dist/vectors/lancedb-index.d.ts.map +0 -1
  779. package/dist/vectors/orama-index.d.ts +0 -54
  780. package/dist/vectors/orama-index.d.ts.map +0 -1
  781. package/dist/vectors/pglite-index.d.ts +0 -53
  782. package/dist/vectors/pglite-index.d.ts.map +0 -1
  783. package/dist/vectors/qdrant-index.d.ts +0 -77
  784. package/dist/vectors/qdrant-index.d.ts.map +0 -1
  785. package/dist/vectors/typesense-index.d.ts +0 -75
  786. package/dist/vectors/typesense-index.d.ts.map +0 -1
  787. package/dist/vectors/vec-index.d.ts +0 -52
  788. package/dist/vectors/vec-index.d.ts.map +0 -1
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/core/branch-manager.ts"],
4
+ "sourcesContent": ["import * as fs from 'fs';\nimport * as path from 'path';\nimport { execSync } from 'child_process';\n\nexport function sanitizeBranchName(name: string): string {\n return name.replace(/[^a-zA-Z0-9_-]/g, '-').replace(/-+/g, '-').replace(/^-|-$/g, '');\n}\n\nexport function branchDbPath(projectRoot: string, branchName: string): string {\n return path.join(projectRoot, '.kirograph', `branch-${sanitizeBranchName(branchName)}.db`);\n}\n\nexport interface BranchInfo {\n name: string; // sanitized name\n rawName: string; // from git (if resolvable)\n dbPath: string;\n sizeBytes: number;\n mtimeMs: number;\n}\n\nexport function listTrackedBranches(projectRoot: string): BranchInfo[] {\n const dir = path.join(projectRoot, '.kirograph');\n if (!fs.existsSync(dir)) return [];\n return fs.readdirSync(dir)\n .filter(f => f.startsWith('branch-') && f.endsWith('.db'))\n .map(f => {\n const sanitized = f.slice('branch-'.length, -'.db'.length);\n const dbPath = path.join(dir, f);\n const stat = fs.statSync(dbPath);\n return { name: sanitized, rawName: sanitized, dbPath, sizeBytes: stat.size, mtimeMs: stat.mtimeMs };\n });\n}\n\nexport function getCurrentGitBranch(projectRoot: string): string {\n try {\n return execSync('git rev-parse --abbrev-ref HEAD', { cwd: projectRoot, stdio: 'pipe' }).toString().trim();\n } catch {\n return 'unknown';\n }\n}\n\nexport function getGitBranches(projectRoot: string): string[] {\n try {\n return execSync('git branch', { cwd: projectRoot, stdio: 'pipe' })\n .toString().split('\\n')\n .map(l => l.replace(/^\\*?\\s+/, '').trim())\n .filter(Boolean);\n } catch {\n return [];\n }\n}\n\nexport function addBranch(projectRoot: string, branchName: string): { created: boolean; dbPath: string } {\n const mainDb = path.join(projectRoot, '.kirograph', 'kirograph.db');\n const targetDb = branchDbPath(projectRoot, branchName);\n if (fs.existsSync(targetDb)) return { created: false, dbPath: targetDb };\n if (!fs.existsSync(mainDb)) throw new Error('No main KiroGraph database found. Run kirograph index first.');\n fs.copyFileSync(mainDb, targetDb);\n return { created: true, dbPath: targetDb };\n}\n\nexport function removeBranch(projectRoot: string, branchName: string): boolean {\n const dbPath = branchDbPath(projectRoot, branchName);\n if (!fs.existsSync(dbPath)) return false;\n fs.unlinkSync(dbPath);\n return true;\n}\n\nexport function gcBranches(projectRoot: string): string[] {\n const gitBranches = new Set(getGitBranches(projectRoot).map(sanitizeBranchName));\n const tracked = listTrackedBranches(projectRoot);\n const removed: string[] = [];\n for (const b of tracked) {\n if (!gitBranches.has(b.name)) {\n fs.unlinkSync(b.dbPath);\n removed.push(b.name);\n }\n }\n return removed;\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAAoB;AACpB,WAAsB;AACtB,2BAAyB;AAElB,SAAS,mBAAmB,MAAsB;AACvD,SAAO,KAAK,QAAQ,mBAAmB,GAAG,EAAE,QAAQ,OAAO,GAAG,EAAE,QAAQ,UAAU,EAAE;AACtF;AAEO,SAAS,aAAa,aAAqB,YAA4B;AAC5E,SAAO,KAAK,KAAK,aAAa,cAAc,UAAU,mBAAmB,UAAU,CAAC,KAAK;AAC3F;AAUO,SAAS,oBAAoB,aAAmC;AACrE,QAAM,MAAM,KAAK,KAAK,aAAa,YAAY;AAC/C,MAAI,CAAC,GAAG,WAAW,GAAG,EAAG,QAAO,CAAC;AACjC,SAAO,GAAG,YAAY,GAAG,EACtB,OAAO,OAAK,EAAE,WAAW,SAAS,KAAK,EAAE,SAAS,KAAK,CAAC,EACxD,IAAI,OAAK;AACR,UAAM,YAAY,EAAE,MAAM,UAAU,QAAQ,CAAC,MAAM,MAAM;AACzD,UAAM,SAAS,KAAK,KAAK,KAAK,CAAC;AAC/B,UAAM,OAAO,GAAG,SAAS,MAAM;AAC/B,WAAO,EAAE,MAAM,WAAW,SAAS,WAAW,QAAQ,WAAW,KAAK,MAAM,SAAS,KAAK,QAAQ;AAAA,EACpG,CAAC;AACL;AAEO,SAAS,oBAAoB,aAA6B;AAC/D,MAAI;AACF,eAAO,+BAAS,mCAAmC,EAAE,KAAK,aAAa,OAAO,OAAO,CAAC,EAAE,SAAS,EAAE,KAAK;AAAA,EAC1G,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEO,SAAS,eAAe,aAA+B;AAC5D,MAAI;AACF,eAAO,+BAAS,cAAc,EAAE,KAAK,aAAa,OAAO,OAAO,CAAC,EAC9D,SAAS,EAAE,MAAM,IAAI,EACrB,IAAI,OAAK,EAAE,QAAQ,WAAW,EAAE,EAAE,KAAK,CAAC,EACxC,OAAO,OAAO;AAAA,EACnB,QAAQ;AACN,WAAO,CAAC;AAAA,EACV;AACF;AAEO,SAAS,UAAU,aAAqB,YAA0D;AACvG,QAAM,SAAS,KAAK,KAAK,aAAa,cAAc,cAAc;AAClE,QAAM,WAAW,aAAa,aAAa,UAAU;AACrD,MAAI,GAAG,WAAW,QAAQ,EAAG,QAAO,EAAE,SAAS,OAAO,QAAQ,SAAS;AACvE,MAAI,CAAC,GAAG,WAAW,MAAM,EAAG,OAAM,IAAI,MAAM,8DAA8D;AAC1G,KAAG,aAAa,QAAQ,QAAQ;AAChC,SAAO,EAAE,SAAS,MAAM,QAAQ,SAAS;AAC3C;AAEO,SAAS,aAAa,aAAqB,YAA6B;AAC7E,QAAM,SAAS,aAAa,aAAa,UAAU;AACnD,MAAI,CAAC,GAAG,WAAW,MAAM,EAAG,QAAO;AACnC,KAAG,WAAW,MAAM;AACpB,SAAO;AACT;AAEO,SAAS,WAAW,aAA+B;AACxD,QAAM,cAAc,IAAI,IAAI,eAAe,WAAW,EAAE,IAAI,kBAAkB,CAAC;AAC/E,QAAM,UAAU,oBAAoB,WAAW;AAC/C,QAAM,UAAoB,CAAC;AAC3B,aAAW,KAAK,SAAS;AACvB,QAAI,CAAC,YAAY,IAAI,EAAE,IAAI,GAAG;AAC5B,SAAG,WAAW,EAAE,MAAM;AACtB,cAAQ,KAAK,EAAE,IAAI;AAAA,IACrB;AAAA,EACF;AACA,SAAO;AACT;",
6
+ "names": []
7
+ }
@@ -85,7 +85,7 @@ class IndexPipeline {
85
85
  const { detectLanguage } = await Promise.resolve().then(() => require("../extraction/languages.js"));
86
86
  const lang = detectLanguage(file);
87
87
  if (poisonedLanguages.has(lang)) continue;
88
- const extracted = await (0, import_extractor.extractFile)(file, this.projectRoot, content);
88
+ const extracted = await (0, import_extractor.extractFile)(file, this.projectRoot, content, { enableComplexity: !!this.config.enableComplexity });
89
89
  if (!extracted) continue;
90
90
  const oldNodes = this.db.getNodesByFile(extracted.filePath);
91
91
  if (oldNodes.length > 0) await this.vectors.deleteEmbeddings(oldNodes.map((n) => n.id));
@@ -142,7 +142,7 @@ class IndexPipeline {
142
142
  const absPath = path.join(this.projectRoot, ef.path);
143
143
  opts?.onProgress?.({ phase: "retrying", current: i + 1, total: emptyFiles.length, currentFile: absPath });
144
144
  try {
145
- const extracted = await (0, import_extractor.extractFile)(absPath, this.projectRoot);
145
+ const extracted = await (0, import_extractor.extractFile)(absPath, this.projectRoot, void 0, { enableComplexity: !!this.config.enableComplexity });
146
146
  if (!extracted || extracted.nodes.length === 0) continue;
147
147
  const oldNodes = this.db.getNodesByFile(extracted.filePath);
148
148
  if (oldNodes.length > 0) await this.vectors.deleteEmbeddings(oldNodes.map((n) => n.id));
@@ -356,7 +356,7 @@ class IndexPipeline {
356
356
  const { detectLanguage } = await Promise.resolve().then(() => require("../extraction/languages.js"));
357
357
  const lang = detectLanguage(file);
358
358
  if (poisonedLanguages.has(lang)) continue;
359
- const extracted = await (0, import_extractor.extractFile)(file, this.projectRoot);
359
+ const extracted = await (0, import_extractor.extractFile)(file, this.projectRoot, void 0, { enableComplexity: !!this.config.enableComplexity });
360
360
  if (!extracted) continue;
361
361
  const existing = this.db.getFile(extracted.filePath);
362
362
  const isNew = !existing;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/core/pipeline.ts"],
4
- "sourcesContent": ["/**\n * IndexPipeline \u2014 full-index and incremental-sync pipelines.\n *\n * Owns the two heavy workflows:\n * - indexAll(): scan all files, extract, store, resolve, detect frameworks,\n * generate embeddings, analyze architecture.\n * - sync(): detect changed files via git (or full scan fallback),\n * re-extract only what changed, then run the same tail pipeline.\n *\n * Everything that touches the filesystem or sub-systems is injected via the\n * constructor, keeping this class testable and free of global state.\n */\n\nimport * as path from 'path';\nimport * as fs from 'fs';\nimport { GraphDatabase } from '../db/database';\nimport { scanDirectory, hashContent, getChangedFiles, shouldIncludeFile } from '../sync/index';\nimport { extractFile } from '../extraction/extractor';\nimport { clearParserCache, initGrammars, hasWasmGrammar } from '../extraction/grammars';\nimport { detectFrameworks } from '../frameworks/index';\nimport { ReferenceResolver } from '../resolution/index';\nimport { VectorManager } from '../vectors/index';\nimport { ArchitectureAnalyzer } from '../architecture/index';\nimport type { KiroGraphConfig } from '../config';\nimport type { IndexResult, IndexProgress, SyncResult } from '../types';\nimport { LockManager } from './lock-manager';\nimport { Mutex } from '../utils';\n\nconst FILE_IO_BATCH_SIZE = 10;\n\nexport class IndexPipeline {\n private readonly mutex = new Mutex();\n\n constructor(\n private readonly db: GraphDatabase,\n private readonly vectors: VectorManager,\n private readonly resolver: ReferenceResolver,\n private readonly arch: ArchitectureAnalyzer,\n private readonly lock: LockManager,\n private readonly config: KiroGraphConfig,\n private readonly projectRoot: string,\n ) {}\n\n async indexAll(opts?: {\n onProgress?: (p: IndexProgress) => void;\n force?: boolean;\n signal?: AbortSignal;\n }): Promise<IndexResult> {\n const release = await this.mutex.acquire();\n this.lock.acquire();\n const start = Date.now();\n const errors: string[] = [];\n let filesIndexed = 0;\n let nodesCreated = 0;\n let edgesCreated = 0;\n\n // Track languages whose WASM parser is currently poisoned (ABORT=true on the module).\n // Once a language's parser aborts, every subsequent parse call for that language\n // fails instantly. We skip those files until clearParserCache + initGrammars succeeds.\n const poisonedLanguages = new Set<string>();\n\n try {\n const files = await scanDirectory(this.projectRoot, this.config, opts?.signal);\n opts?.onProgress?.({ phase: 'scanning', current: files.length, total: files.length });\n\n // Batch-read files in parallel\n const contentMap = new Map<string, Buffer>();\n for (let b = 0; b < files.length; b += FILE_IO_BATCH_SIZE) {\n const batch = files.slice(b, b + FILE_IO_BATCH_SIZE);\n const results = await Promise.all(batch.map(f => fs.promises.readFile(f).catch(() => null)));\n for (let i = 0; i < batch.length; i++) {\n if (results[i]) contentMap.set(batch[i], results[i]!);\n }\n }\n\n for (let i = 0; i < files.length; i++) {\n const file = files[i];\n opts?.onProgress?.({ phase: 'parsing', current: i + 1, total: files.length, currentFile: file });\n\n try {\n const content = contentMap.get(file);\n if (!content) continue;\n if (content.length > this.config.maxFileSize) continue;\n\n const relPath = path.relative(this.projectRoot, file).replace(/\\\\/g, '/');\n\n if (!opts?.force) {\n const existing = this.db.getFile(relPath);\n if (existing && hashContent(content) === existing.contentHash) continue;\n }\n\n // Skip files whose language parser is currently poisoned\n const { detectLanguage } = await Promise.resolve().then(() => require('../extraction/languages.js'));\n const lang = detectLanguage(file);\n if (poisonedLanguages.has(lang)) continue;\n\n const extracted = await extractFile(file, this.projectRoot, content);\n if (!extracted) continue;\n\n const oldNodes = this.db.getNodesByFile(extracted.filePath);\n if (oldNodes.length > 0) await this.vectors.deleteEmbeddings(oldNodes.map(n => n.id));\n\n this.db.transaction(() => {\n this.db.deleteNodesByFile(extracted.filePath);\n this.db.deleteUnresolvedRefsByFile(extracted.filePath);\n this.db.upsertFile({\n path: extracted.filePath,\n contentHash: extracted.contentHash,\n language: extracted.language,\n fileSize: extracted.fileSize,\n symbolCount: extracted.nodes.length,\n indexedAt: Date.now(),\n });\n for (const node of extracted.nodes) { this.db.upsertNode(node); nodesCreated++; }\n for (const edge of extracted.edges) { this.db.insertEdge(edge); edgesCreated++; }\n for (const ref of extracted.unresolvedRefs) {\n this.db.insertUnresolvedRef(ref.sourceId, ref.refName, ref.refKind, extracted.filePath, ref.line, ref.column);\n }\n });\n\n filesIndexed++;\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n errors.push(`${file}: ${msg}`);\n\n // Detect WASM runtime abort and attempt recovery\n const isWasmCrash = (err as any)?.constructor?.name === 'RuntimeError'\n || msg.includes('Aborted(') \n || msg.includes('RuntimeError')\n || msg.includes('WASM grammar exists but failed to load');\n if (isWasmCrash) {\n // Mark the language as poisoned so we skip remaining files of this language\n const { detectLanguage } = await Promise.resolve().then(() => require('../extraction/languages.js'));\n const lang = detectLanguage(file);\n poisonedLanguages.add(lang);\n\n clearParserCache();\n try {\n await initGrammars();\n // Recovery succeeded \u2014 un-poison all languages\n poisonedLanguages.clear();\n } catch {\n errors.push('WASM runtime unrecoverable after crash \u2014 aborting batch');\n break;\n }\n }\n }\n }\n\n // Re-process files that have symbolCount=0 but should have symbols (WASM recovery)\n const emptyFiles = this.db.getAllFiles().filter(\n (f: any) => f.symbolCount === 0 && hasWasmGrammar(f.language)\n );\n if (emptyFiles.length > 0) {\n opts?.onProgress?.({ phase: 'retrying', current: 0, total: emptyFiles.length });\n for (let i = 0; i < emptyFiles.length; i++) {\n const ef = emptyFiles[i];\n const absPath = path.join(this.projectRoot, ef.path);\n opts?.onProgress?.({ phase: 'retrying', current: i + 1, total: emptyFiles.length, currentFile: absPath });\n try {\n const extracted = await extractFile(absPath, this.projectRoot);\n if (!extracted || extracted.nodes.length === 0) continue;\n\n const oldNodes = this.db.getNodesByFile(extracted.filePath);\n if (oldNodes.length > 0) await this.vectors.deleteEmbeddings(oldNodes.map(n => n.id));\n\n this.db.transaction(() => {\n this.db.deleteNodesByFile(extracted.filePath);\n this.db.deleteUnresolvedRefsByFile(extracted.filePath);\n this.db.upsertFile({\n path: extracted.filePath,\n contentHash: extracted.contentHash,\n language: extracted.language,\n fileSize: extracted.fileSize,\n symbolCount: extracted.nodes.length,\n indexedAt: Date.now(),\n });\n for (const node of extracted.nodes) { this.db.upsertNode(node); nodesCreated++; }\n for (const edge of extracted.edges) { this.db.insertEdge(edge); edgesCreated++; }\n for (const ref of extracted.unresolvedRefs) {\n this.db.insertUnresolvedRef(ref.sourceId, ref.refName, ref.refKind, extracted.filePath, ref.line, ref.column);\n }\n });\n filesIndexed++;\n } catch {\n // Already logged in first pass or genuinely broken \u2014 skip\n }\n }\n }\n\n // Resolve cross-file references\n opts?.onProgress?.({ phase: 'resolving', current: 0, total: 1 });\n await this.resolver.resolveAll((current, total) => {\n opts?.onProgress?.({ phase: 'resolving', current, total });\n });\n\n // Detect frameworks\n opts?.onProgress?.({ phase: 'detecting frameworks', current: 0, total: 1 });\n const detectedFrameworks = await detectFrameworks(this.projectRoot, this.db);\n const languages = [...new Set(this.db.getAllFiles().map(f => (f as any).language).filter(Boolean))];\n opts?.onProgress?.({\n phase: 'detecting frameworks', current: 1, total: 1,\n meta: { frameworks: detectedFrameworks.map(f => f.name), languages },\n });\n\n // Generate embeddings (if enabled)\n if (this.vectors.isInitialized()) {\n opts?.onProgress?.({ phase: 'embeddings', current: 0, total: 1 });\n await this.vectors.embedAll((current, total) =>\n opts?.onProgress?.({ phase: 'embeddings', current, total })\n );\n }\n\n // Analyze architecture (if enabled, or auto-enabled for security)\n if (this.config.enableArchitecture || this.config.enableSecurity) {\n if (this.config.enableSecurity && !this.config.enableArchitecture) {\n const { logWarn } = await Promise.resolve().then(() => require('../errors.js'));\n logWarn('enableSecurity requires enableArchitecture \u2014 auto-enabling architecture analysis for this run');\n }\n opts?.onProgress?.({ phase: 'architecture', current: 0, total: 1 });\n await this.arch.analyze(msg =>\n opts?.onProgress?.({ phase: 'architecture', current: 0, total: 1, meta: { msg } })\n );\n opts?.onProgress?.({ phase: 'architecture', current: 1, total: 1 });\n }\n\n // Run security analysis (if enabled)\n if (this.config.enableSecurity) {\n try {\n const { SecurityPipeline } = await Promise.resolve().then(() => require('../security/pipeline.js'));\n this.db.applySecuritySchema();\n const secPipeline = new SecurityPipeline(this.db, this.config, this.projectRoot);\n opts?.onProgress?.({ phase: 'security', current: 0, total: 1 });\n await secPipeline.run((phase, current, total) =>\n opts?.onProgress?.({ phase: 'security', current, total, meta: { secPhase: phase } })\n );\n opts?.onProgress?.({ phase: 'security', current: 1, total: 1 });\n } catch { /* security analysis is non-critical */ }\n }\n\n // Index documentation (if enabled)\n if (this.config.enableDocs) {\n try {\n const { DocsIndexer } = await Promise.resolve().then(() => require('../docs/indexer.js'));\n this.db.applyDocsSchema();\n const docsIndexer = new DocsIndexer(this.db.getRawDb(), this.config, this.projectRoot);\n await docsIndexer.indexAll({\n force: opts?.force,\n onProgress: msg => opts?.onProgress?.({ phase: 'docs', current: 0, total: 1, meta: { msg } }),\n });\n } catch { /* docs indexing is non-critical */ }\n }\n\n // Index data files (if enabled)\n if ((this.config as any).enableData) {\n try {\n const { DataIndexer } = await Promise.resolve().then(() => require('../data/indexer.js'));\n this.db.applyDataSchema();\n const dataIndexer = new DataIndexer(this.db.getRawDb(), this.config, this.projectRoot);\n await dataIndexer.indexAll({\n onProgress: msg => opts?.onProgress?.({ phase: 'data', current: 0, total: 1, meta: { msg } }),\n });\n\n // Assign data files to 'data' architecture layer if architecture is enabled\n if (this.config.enableArchitecture) {\n try {\n const rawDb = this.db.getRawDb();\n // Check if arch_file_layers table exists\n const tableExists = rawDb.get(\"SELECT name FROM sqlite_master WHERE type='table' AND name='arch_file_layers'\");\n if (tableExists) {\n const datasets = rawDb.all('SELECT file_path FROM data_datasets') as Array<{ file_path: string }>;\n for (const ds of datasets) {\n rawDb.run(\n `INSERT OR REPLACE INTO arch_file_layers (file_path, layer_id, confidence) VALUES (?, ?, ?)`,\n [ds.file_path, 'layer:data', 1.0],\n );\n }\n }\n } catch { /* non-critical */ }\n }\n } catch { /* data indexing is non-critical */ }\n }\n\n // Index pattern matches (if enabled)\n if ((this.config as any).enablePatterns) {\n try {\n this.db.applyPatternsSchema();\n const { PatternIndexer } = await Promise.resolve().then(() => require('../patterns/indexer.js'));\n const indexer = new PatternIndexer(this.db.getRawDb(), this.config, this.projectRoot);\n await indexer.indexAll((phase, current, total) => {\n opts?.onProgress?.({ phase: 'patterns' as any, current, total });\n });\n } catch (err) {\n // Patterns are non-critical \u2014 log and continue\n const { logWarn } = await Promise.resolve().then(() => require('../errors.js'));\n const msg = err instanceof Error ? err.message : String(err);\n logWarn(`[patterns] Pattern indexing failed (non-critical): ${msg}`);\n }\n }\n\n this.lock.clearDirty();\n return { success: errors.length === 0, filesIndexed, nodesCreated, edgesCreated, errors, duration: Date.now() - start };\n } finally {\n this.lock.release();\n release();\n }\n }\n\n async sync(opts?: {\n changedFiles?: string[];\n onProgress?: (p: IndexProgress) => void;\n }): Promise<SyncResult> {\n const release = await this.mutex.acquire();\n this.lock.acquire();\n const start = Date.now();\n const changedFiles = opts?.changedFiles;\n const onProgress = opts?.onProgress;\n const result: SyncResult = {\n added: [], modified: [], removed: [],\n nodesCreated: 0, nodesUpdated: 0, nodesRemoved: 0,\n edgesCreated: 0, edgesRemoved: 0,\n filesScanned: 0, errors: [], duration: 0,\n };\n\n try {\n const removeFile = async (rel: string) => {\n const oldNodes = this.db.getNodesByFile(rel);\n const oldEdgeCount = this.db.getEdgesForNodes(oldNodes.map(n => n.id)).length;\n result.nodesRemoved += oldNodes.length;\n result.edgesRemoved += oldEdgeCount;\n await this.vectors.deleteEmbeddings(oldNodes.map(n => n.id));\n this.db.deleteFile(rel);\n this.db.deleteUnresolvedRefsByFile(rel);\n // Clean up pattern matches for removed files (only if patterns are enabled)\n if ((this.config as any).enablePatterns) {\n this.db.getRawDb().run('DELETE FROM pattern_matches WHERE file_path = ?', [rel]);\n }\n result.removed.push(rel);\n };\n\n // \u2500\u2500 Exclude-rule cleanup \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n // Remove any indexed files that now match the current exclude patterns.\n // This handles the case where a user adds a new exclude pattern (e.g.\n // \"**/.vite/**\") and expects those files to disappear from the index on\n // the next sync without needing a full --force re-index.\n const allIndexed = this.db.getAllFiles();\n for (const f of allIndexed) {\n if (!shouldIncludeFile(f.path, this.config)) {\n onProgress?.({ phase: 'scanning', current: 0, total: 0, meta: { excludeCleanup: true, file: f.path } });\n await removeFile(f.path);\n }\n }\n\n let filesToProcess: string[];\n\n onProgress?.({ phase: 'scanning', current: 0, total: 0 });\n\n if (changedFiles) {\n filesToProcess = changedFiles.map(f => path.resolve(this.projectRoot, f));\n } else {\n const gitChanged = await getChangedFiles(this.projectRoot, this.config);\n const hasChanges = gitChanged.added.length > 0 || gitChanged.modified.length > 0 || gitChanged.removed.length > 0;\n\n if (hasChanges) {\n for (const p of gitChanged.removed) {\n await removeFile(path.relative(this.projectRoot, p).replace(/\\\\/g, '/'));\n }\n filesToProcess = [...gitChanged.added, ...gitChanged.modified];\n } else {\n // Fallback: full scan + detect removed files\n const indexed = new Set(this.db.getAllFiles().map(f => f.path));\n const current = new Set(\n (await scanDirectory(this.projectRoot, this.config))\n .map(f => path.relative(this.projectRoot, f).replace(/\\\\/g, '/'))\n );\n result.filesScanned = current.size;\n for (const p of indexed) {\n if (!current.has(p)) await removeFile(p);\n }\n filesToProcess = await scanDirectory(this.projectRoot, this.config);\n }\n }\n\n result.filesScanned = result.filesScanned || filesToProcess.length;\n onProgress?.({ phase: 'scanning', current: result.filesScanned, total: result.filesScanned });\n\n const poisonedLanguages = new Set<string>();\n\n for (let i = 0; i < filesToProcess.length; i++) {\n const file = filesToProcess[i];\n onProgress?.({ phase: 'parsing', current: i + 1, total: filesToProcess.length, currentFile: file });\n\n if (!fs.existsSync(file)) {\n const rel = path.relative(this.projectRoot, file).replace(/\\\\/g, '/');\n await removeFile(rel);\n continue;\n }\n\n try {\n // Skip files whose language parser is currently poisoned\n const { detectLanguage } = await Promise.resolve().then(() => require('../extraction/languages.js'));\n const lang = detectLanguage(file);\n if (poisonedLanguages.has(lang)) continue;\n\n const extracted = await extractFile(file, this.projectRoot);\n if (!extracted) continue;\n\n const existing = this.db.getFile(extracted.filePath);\n const isNew = !existing;\n if (!isNew && existing!.contentHash === extracted.contentHash) continue;\n\n const oldNodes = this.db.getNodesByFile(extracted.filePath);\n const oldEdgeCount = this.db.getEdgesForNodes(oldNodes.map(n => n.id)).length;\n await this.vectors.deleteEmbeddings(oldNodes.map(n => n.id));\n\n this.db.transaction(() => {\n result.nodesRemoved += oldNodes.length;\n result.edgesRemoved += oldEdgeCount;\n this.db.deleteNodesByFile(extracted.filePath);\n this.db.deleteUnresolvedRefsByFile(extracted.filePath);\n this.db.upsertFile({\n path: extracted.filePath,\n contentHash: extracted.contentHash,\n language: extracted.language,\n fileSize: extracted.fileSize,\n symbolCount: extracted.nodes.length,\n indexedAt: Date.now(),\n });\n for (const node of extracted.nodes) { this.db.upsertNode(node); result.nodesCreated++; }\n for (const edge of extracted.edges) { this.db.insertEdge(edge); result.edgesCreated++; }\n for (const ref of extracted.unresolvedRefs) {\n this.db.insertUnresolvedRef(ref.sourceId, ref.refName, ref.refKind, extracted.filePath, ref.line, ref.column);\n }\n });\n\n this.resolver.invalidateFile(extracted.filePath);\n if (isNew) result.added.push(extracted.filePath);\n else { result.modified.push(extracted.filePath); result.nodesUpdated += extracted.nodes.length; }\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n result.errors.push(`${file}: ${msg}`);\n\n // Detect WASM runtime abort and attempt recovery\n const isWasmCrash = (err as any)?.constructor?.name === 'RuntimeError'\n || msg.includes('Aborted(') \n || msg.includes('RuntimeError')\n || msg.includes('WASM grammar exists but failed to load');\n if (isWasmCrash) {\n const { detectLanguage } = await Promise.resolve().then(() => require('../extraction/languages.js'));\n const lang = detectLanguage(file);\n poisonedLanguages.add(lang);\n\n clearParserCache();\n try {\n await initGrammars();\n poisonedLanguages.clear();\n } catch {\n result.errors.push('WASM runtime unrecoverable after crash \u2014 aborting sync');\n break;\n }\n }\n }\n }\n\n // Resolve cross-file references\n onProgress?.({ phase: 'resolving', current: 0, total: 1 });\n await this.resolver.resolveAll((current, total) => {\n onProgress?.({ phase: 'resolving', current, total });\n });\n\n await detectFrameworks(this.projectRoot);\n\n // Generate embeddings (if enabled)\n if (this.vectors.isInitialized()) {\n onProgress?.({ phase: 'embeddings', current: 0, total: 1 });\n await this.vectors.embedAll((current, total) =>\n onProgress?.({ phase: 'embeddings', current, total })\n );\n }\n\n // Analyze architecture (if enabled, or auto-enabled for security)\n if (this.config.enableArchitecture || this.config.enableSecurity) {\n if (this.config.enableSecurity && !this.config.enableArchitecture) {\n const { logWarn } = await Promise.resolve().then(() => require('../errors.js'));\n logWarn('enableSecurity requires enableArchitecture \u2014 auto-enabling architecture analysis for this run');\n }\n onProgress?.({ phase: 'architecture', current: 0, total: 1 });\n await this.arch.analyze(msg =>\n onProgress?.({ phase: 'architecture', current: 0, total: 1, meta: { msg } })\n );\n onProgress?.({ phase: 'architecture', current: 1, total: 1 });\n }\n\n // Run security analysis (if enabled)\n if (this.config.enableSecurity) {\n try {\n const { SecurityPipeline } = await Promise.resolve().then(() => require('../security/pipeline.js'));\n this.db.applySecuritySchema();\n const secPipeline = new SecurityPipeline(this.db, this.config, this.projectRoot);\n onProgress?.({ phase: 'security', current: 0, total: 1 });\n await secPipeline.run((phase, current, total) =>\n onProgress?.({ phase: 'security', current, total, meta: { secPhase: phase } })\n );\n onProgress?.({ phase: 'security', current: 1, total: 1 });\n } catch { /* security analysis is non-critical */ }\n }\n\n // Re-index documentation (if enabled)\n if (this.config.enableDocs) {\n try {\n const { DocsIndexer } = await Promise.resolve().then(() => require('../docs/indexer.js'));\n this.db.applyDocsSchema();\n const docsIndexer = new DocsIndexer(this.db.getRawDb(), this.config, this.projectRoot);\n await docsIndexer.indexAll({\n onProgress: msg => onProgress?.({ phase: 'docs', current: 0, total: 1, meta: { msg } }),\n });\n } catch { /* docs indexing is non-critical */ }\n }\n\n // Re-index data files (if enabled)\n if ((this.config as any).enableData) {\n try {\n const { DataIndexer } = await Promise.resolve().then(() => require('../data/indexer.js'));\n this.db.applyDataSchema();\n const dataIndexer = new DataIndexer(this.db.getRawDb(), this.config, this.projectRoot);\n await dataIndexer.indexAll({\n onProgress: msg => onProgress?.({ phase: 'data', current: 0, total: 1, meta: { msg } }),\n });\n\n // Assign data files to 'data' architecture layer if architecture is enabled\n if (this.config.enableArchitecture) {\n try {\n const rawDb = this.db.getRawDb();\n const tableExists = rawDb.get(\"SELECT name FROM sqlite_master WHERE type='table' AND name='arch_file_layers'\");\n if (tableExists) {\n const datasets = rawDb.all('SELECT file_path FROM data_datasets') as Array<{ file_path: string }>;\n for (const ds of datasets) {\n rawDb.run(\n `INSERT OR REPLACE INTO arch_file_layers (file_path, layer_id, confidence) VALUES (?, ?, ?)`,\n [ds.file_path, 'layer:data', 1.0],\n );\n }\n }\n } catch { /* non-critical */ }\n }\n } catch { /* data indexing is non-critical */ }\n }\n\n // Re-index pattern matches for changed files (if enabled)\n if ((this.config as any).enablePatterns) {\n try {\n const tableExists = this.db.getRawDb().get(\n \"SELECT name FROM sqlite_master WHERE type='table' AND name='pattern_matches'\"\n );\n if (tableExists) {\n const { PatternIndexer } = await Promise.resolve().then(() => require('../patterns/indexer.js'));\n const { PatternLibraryLoader } = await Promise.resolve().then(() => require('../patterns/loader.js'));\n const { PatternRunner } = await Promise.resolve().then(() => require('../patterns/runner.js'));\n const runner = new PatternRunner();\n if (runner.isAvailable()) {\n const loader = new PatternLibraryLoader();\n const builtinPath = require('path').join(__dirname, '../patterns/library');\n const rules = loader.load(builtinPath, (this.config as any).patternLibraryPath);\n const threshold = (this.config as any).patternSeverityThreshold ?? 'low';\n const indexer = new PatternIndexer(this.db.getRawDb(), this.config, this.projectRoot);\n const changedPaths = [...result.added, ...result.modified];\n for (const filePath of changedPaths) {\n const fileRecord = this.db.getFile(filePath);\n const language = fileRecord?.language ?? 'unknown';\n await indexer.indexFile(filePath, language, rules, runner, threshold, Date.now());\n }\n }\n }\n } catch { /* non-critical */ }\n }\n\n this.lock.clearDirty();\n result.duration = Date.now() - start;\n return result;\n } finally {\n this.lock.release();\n release();\n }\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * IndexPipeline \u2014 full-index and incremental-sync pipelines.\n *\n * Owns the two heavy workflows:\n * - indexAll(): scan all files, extract, store, resolve, detect frameworks,\n * generate embeddings, analyze architecture.\n * - sync(): detect changed files via git (or full scan fallback),\n * re-extract only what changed, then run the same tail pipeline.\n *\n * Everything that touches the filesystem or sub-systems is injected via the\n * constructor, keeping this class testable and free of global state.\n */\n\nimport * as path from 'path';\nimport * as fs from 'fs';\nimport { GraphDatabase } from '../db/database';\nimport { scanDirectory, hashContent, getChangedFiles, shouldIncludeFile } from '../sync/index';\nimport { extractFile } from '../extraction/extractor';\nimport { clearParserCache, initGrammars, hasWasmGrammar } from '../extraction/grammars';\nimport { detectFrameworks } from '../frameworks/index';\nimport { ReferenceResolver } from '../resolution/index';\nimport { VectorManager } from '../vectors/index';\nimport { ArchitectureAnalyzer } from '../architecture/index';\nimport type { KiroGraphConfig } from '../config';\nimport type { IndexResult, IndexProgress, SyncResult } from '../types';\nimport { LockManager } from './lock-manager';\nimport { Mutex } from '../utils';\n\nconst FILE_IO_BATCH_SIZE = 10;\n\nexport class IndexPipeline {\n private readonly mutex = new Mutex();\n\n constructor(\n private readonly db: GraphDatabase,\n private readonly vectors: VectorManager,\n private readonly resolver: ReferenceResolver,\n private readonly arch: ArchitectureAnalyzer,\n private readonly lock: LockManager,\n private readonly config: KiroGraphConfig,\n private readonly projectRoot: string,\n ) {}\n\n async indexAll(opts?: {\n onProgress?: (p: IndexProgress) => void;\n force?: boolean;\n signal?: AbortSignal;\n }): Promise<IndexResult> {\n const release = await this.mutex.acquire();\n this.lock.acquire();\n const start = Date.now();\n const errors: string[] = [];\n let filesIndexed = 0;\n let nodesCreated = 0;\n let edgesCreated = 0;\n\n // Track languages whose WASM parser is currently poisoned (ABORT=true on the module).\n // Once a language's parser aborts, every subsequent parse call for that language\n // fails instantly. We skip those files until clearParserCache + initGrammars succeeds.\n const poisonedLanguages = new Set<string>();\n\n try {\n const files = await scanDirectory(this.projectRoot, this.config, opts?.signal);\n opts?.onProgress?.({ phase: 'scanning', current: files.length, total: files.length });\n\n // Batch-read files in parallel\n const contentMap = new Map<string, Buffer>();\n for (let b = 0; b < files.length; b += FILE_IO_BATCH_SIZE) {\n const batch = files.slice(b, b + FILE_IO_BATCH_SIZE);\n const results = await Promise.all(batch.map(f => fs.promises.readFile(f).catch(() => null)));\n for (let i = 0; i < batch.length; i++) {\n if (results[i]) contentMap.set(batch[i], results[i]!);\n }\n }\n\n for (let i = 0; i < files.length; i++) {\n const file = files[i];\n opts?.onProgress?.({ phase: 'parsing', current: i + 1, total: files.length, currentFile: file });\n\n try {\n const content = contentMap.get(file);\n if (!content) continue;\n if (content.length > this.config.maxFileSize) continue;\n\n const relPath = path.relative(this.projectRoot, file).replace(/\\\\/g, '/');\n\n if (!opts?.force) {\n const existing = this.db.getFile(relPath);\n if (existing && hashContent(content) === existing.contentHash) continue;\n }\n\n // Skip files whose language parser is currently poisoned\n const { detectLanguage } = await Promise.resolve().then(() => require('../extraction/languages.js'));\n const lang = detectLanguage(file);\n if (poisonedLanguages.has(lang)) continue;\n\n const extracted = await extractFile(file, this.projectRoot, content, { enableComplexity: !!(this.config as any).enableComplexity });\n if (!extracted) continue;\n\n const oldNodes = this.db.getNodesByFile(extracted.filePath);\n if (oldNodes.length > 0) await this.vectors.deleteEmbeddings(oldNodes.map(n => n.id));\n\n this.db.transaction(() => {\n this.db.deleteNodesByFile(extracted.filePath);\n this.db.deleteUnresolvedRefsByFile(extracted.filePath);\n this.db.upsertFile({\n path: extracted.filePath,\n contentHash: extracted.contentHash,\n language: extracted.language,\n fileSize: extracted.fileSize,\n symbolCount: extracted.nodes.length,\n indexedAt: Date.now(),\n });\n for (const node of extracted.nodes) { this.db.upsertNode(node); nodesCreated++; }\n for (const edge of extracted.edges) { this.db.insertEdge(edge); edgesCreated++; }\n for (const ref of extracted.unresolvedRefs) {\n this.db.insertUnresolvedRef(ref.sourceId, ref.refName, ref.refKind, extracted.filePath, ref.line, ref.column);\n }\n });\n\n filesIndexed++;\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n errors.push(`${file}: ${msg}`);\n\n // Detect WASM runtime abort and attempt recovery\n const isWasmCrash = (err as any)?.constructor?.name === 'RuntimeError'\n || msg.includes('Aborted(') \n || msg.includes('RuntimeError')\n || msg.includes('WASM grammar exists but failed to load');\n if (isWasmCrash) {\n // Mark the language as poisoned so we skip remaining files of this language\n const { detectLanguage } = await Promise.resolve().then(() => require('../extraction/languages.js'));\n const lang = detectLanguage(file);\n poisonedLanguages.add(lang);\n\n clearParserCache();\n try {\n await initGrammars();\n // Recovery succeeded \u2014 un-poison all languages\n poisonedLanguages.clear();\n } catch {\n errors.push('WASM runtime unrecoverable after crash \u2014 aborting batch');\n break;\n }\n }\n }\n }\n\n // Re-process files that have symbolCount=0 but should have symbols (WASM recovery)\n const emptyFiles = this.db.getAllFiles().filter(\n (f: any) => f.symbolCount === 0 && hasWasmGrammar(f.language)\n );\n if (emptyFiles.length > 0) {\n opts?.onProgress?.({ phase: 'retrying', current: 0, total: emptyFiles.length });\n for (let i = 0; i < emptyFiles.length; i++) {\n const ef = emptyFiles[i];\n const absPath = path.join(this.projectRoot, ef.path);\n opts?.onProgress?.({ phase: 'retrying', current: i + 1, total: emptyFiles.length, currentFile: absPath });\n try {\n const extracted = await extractFile(absPath, this.projectRoot, undefined, { enableComplexity: !!(this.config as any).enableComplexity });\n if (!extracted || extracted.nodes.length === 0) continue;\n\n const oldNodes = this.db.getNodesByFile(extracted.filePath);\n if (oldNodes.length > 0) await this.vectors.deleteEmbeddings(oldNodes.map(n => n.id));\n\n this.db.transaction(() => {\n this.db.deleteNodesByFile(extracted.filePath);\n this.db.deleteUnresolvedRefsByFile(extracted.filePath);\n this.db.upsertFile({\n path: extracted.filePath,\n contentHash: extracted.contentHash,\n language: extracted.language,\n fileSize: extracted.fileSize,\n symbolCount: extracted.nodes.length,\n indexedAt: Date.now(),\n });\n for (const node of extracted.nodes) { this.db.upsertNode(node); nodesCreated++; }\n for (const edge of extracted.edges) { this.db.insertEdge(edge); edgesCreated++; }\n for (const ref of extracted.unresolvedRefs) {\n this.db.insertUnresolvedRef(ref.sourceId, ref.refName, ref.refKind, extracted.filePath, ref.line, ref.column);\n }\n });\n filesIndexed++;\n } catch {\n // Already logged in first pass or genuinely broken \u2014 skip\n }\n }\n }\n\n // Resolve cross-file references\n opts?.onProgress?.({ phase: 'resolving', current: 0, total: 1 });\n await this.resolver.resolveAll((current, total) => {\n opts?.onProgress?.({ phase: 'resolving', current, total });\n });\n\n // Detect frameworks\n opts?.onProgress?.({ phase: 'detecting frameworks', current: 0, total: 1 });\n const detectedFrameworks = await detectFrameworks(this.projectRoot, this.db);\n const languages = [...new Set(this.db.getAllFiles().map(f => (f as any).language).filter(Boolean))];\n opts?.onProgress?.({\n phase: 'detecting frameworks', current: 1, total: 1,\n meta: { frameworks: detectedFrameworks.map(f => f.name), languages },\n });\n\n // Generate embeddings (if enabled)\n if (this.vectors.isInitialized()) {\n opts?.onProgress?.({ phase: 'embeddings', current: 0, total: 1 });\n await this.vectors.embedAll((current, total) =>\n opts?.onProgress?.({ phase: 'embeddings', current, total })\n );\n }\n\n // Analyze architecture (if enabled, or auto-enabled for security)\n if (this.config.enableArchitecture || this.config.enableSecurity) {\n if (this.config.enableSecurity && !this.config.enableArchitecture) {\n const { logWarn } = await Promise.resolve().then(() => require('../errors.js'));\n logWarn('enableSecurity requires enableArchitecture \u2014 auto-enabling architecture analysis for this run');\n }\n opts?.onProgress?.({ phase: 'architecture', current: 0, total: 1 });\n await this.arch.analyze(msg =>\n opts?.onProgress?.({ phase: 'architecture', current: 0, total: 1, meta: { msg } })\n );\n opts?.onProgress?.({ phase: 'architecture', current: 1, total: 1 });\n }\n\n // Run security analysis (if enabled)\n if (this.config.enableSecurity) {\n try {\n const { SecurityPipeline } = await Promise.resolve().then(() => require('../security/pipeline.js'));\n this.db.applySecuritySchema();\n const secPipeline = new SecurityPipeline(this.db, this.config, this.projectRoot);\n opts?.onProgress?.({ phase: 'security', current: 0, total: 1 });\n await secPipeline.run((phase, current, total) =>\n opts?.onProgress?.({ phase: 'security', current, total, meta: { secPhase: phase } })\n );\n opts?.onProgress?.({ phase: 'security', current: 1, total: 1 });\n } catch { /* security analysis is non-critical */ }\n }\n\n // Index documentation (if enabled)\n if (this.config.enableDocs) {\n try {\n const { DocsIndexer } = await Promise.resolve().then(() => require('../docs/indexer.js'));\n this.db.applyDocsSchema();\n const docsIndexer = new DocsIndexer(this.db.getRawDb(), this.config, this.projectRoot);\n await docsIndexer.indexAll({\n force: opts?.force,\n onProgress: msg => opts?.onProgress?.({ phase: 'docs', current: 0, total: 1, meta: { msg } }),\n });\n } catch { /* docs indexing is non-critical */ }\n }\n\n // Index data files (if enabled)\n if ((this.config as any).enableData) {\n try {\n const { DataIndexer } = await Promise.resolve().then(() => require('../data/indexer.js'));\n this.db.applyDataSchema();\n const dataIndexer = new DataIndexer(this.db.getRawDb(), this.config, this.projectRoot);\n await dataIndexer.indexAll({\n onProgress: msg => opts?.onProgress?.({ phase: 'data', current: 0, total: 1, meta: { msg } }),\n });\n\n // Assign data files to 'data' architecture layer if architecture is enabled\n if (this.config.enableArchitecture) {\n try {\n const rawDb = this.db.getRawDb();\n // Check if arch_file_layers table exists\n const tableExists = rawDb.get(\"SELECT name FROM sqlite_master WHERE type='table' AND name='arch_file_layers'\");\n if (tableExists) {\n const datasets = rawDb.all('SELECT file_path FROM data_datasets') as Array<{ file_path: string }>;\n for (const ds of datasets) {\n rawDb.run(\n `INSERT OR REPLACE INTO arch_file_layers (file_path, layer_id, confidence) VALUES (?, ?, ?)`,\n [ds.file_path, 'layer:data', 1.0],\n );\n }\n }\n } catch { /* non-critical */ }\n }\n } catch { /* data indexing is non-critical */ }\n }\n\n // Index pattern matches (if enabled)\n if ((this.config as any).enablePatterns) {\n try {\n this.db.applyPatternsSchema();\n const { PatternIndexer } = await Promise.resolve().then(() => require('../patterns/indexer.js'));\n const indexer = new PatternIndexer(this.db.getRawDb(), this.config, this.projectRoot);\n await indexer.indexAll((phase, current, total) => {\n opts?.onProgress?.({ phase: 'patterns' as any, current, total });\n });\n } catch (err) {\n // Patterns are non-critical \u2014 log and continue\n const { logWarn } = await Promise.resolve().then(() => require('../errors.js'));\n const msg = err instanceof Error ? err.message : String(err);\n logWarn(`[patterns] Pattern indexing failed (non-critical): ${msg}`);\n }\n }\n\n this.lock.clearDirty();\n return { success: errors.length === 0, filesIndexed, nodesCreated, edgesCreated, errors, duration: Date.now() - start };\n } finally {\n this.lock.release();\n release();\n }\n }\n\n async sync(opts?: {\n changedFiles?: string[];\n onProgress?: (p: IndexProgress) => void;\n }): Promise<SyncResult> {\n const release = await this.mutex.acquire();\n this.lock.acquire();\n const start = Date.now();\n const changedFiles = opts?.changedFiles;\n const onProgress = opts?.onProgress;\n const result: SyncResult = {\n added: [], modified: [], removed: [],\n nodesCreated: 0, nodesUpdated: 0, nodesRemoved: 0,\n edgesCreated: 0, edgesRemoved: 0,\n filesScanned: 0, errors: [], duration: 0,\n };\n\n try {\n const removeFile = async (rel: string) => {\n const oldNodes = this.db.getNodesByFile(rel);\n const oldEdgeCount = this.db.getEdgesForNodes(oldNodes.map(n => n.id)).length;\n result.nodesRemoved += oldNodes.length;\n result.edgesRemoved += oldEdgeCount;\n await this.vectors.deleteEmbeddings(oldNodes.map(n => n.id));\n this.db.deleteFile(rel);\n this.db.deleteUnresolvedRefsByFile(rel);\n // Clean up pattern matches for removed files (only if patterns are enabled)\n if ((this.config as any).enablePatterns) {\n this.db.getRawDb().run('DELETE FROM pattern_matches WHERE file_path = ?', [rel]);\n }\n result.removed.push(rel);\n };\n\n // \u2500\u2500 Exclude-rule cleanup \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n // Remove any indexed files that now match the current exclude patterns.\n // This handles the case where a user adds a new exclude pattern (e.g.\n // \"**/.vite/**\") and expects those files to disappear from the index on\n // the next sync without needing a full --force re-index.\n const allIndexed = this.db.getAllFiles();\n for (const f of allIndexed) {\n if (!shouldIncludeFile(f.path, this.config)) {\n onProgress?.({ phase: 'scanning', current: 0, total: 0, meta: { excludeCleanup: true, file: f.path } });\n await removeFile(f.path);\n }\n }\n\n let filesToProcess: string[];\n\n onProgress?.({ phase: 'scanning', current: 0, total: 0 });\n\n if (changedFiles) {\n filesToProcess = changedFiles.map(f => path.resolve(this.projectRoot, f));\n } else {\n const gitChanged = await getChangedFiles(this.projectRoot, this.config);\n const hasChanges = gitChanged.added.length > 0 || gitChanged.modified.length > 0 || gitChanged.removed.length > 0;\n\n if (hasChanges) {\n for (const p of gitChanged.removed) {\n await removeFile(path.relative(this.projectRoot, p).replace(/\\\\/g, '/'));\n }\n filesToProcess = [...gitChanged.added, ...gitChanged.modified];\n } else {\n // Fallback: full scan + detect removed files\n const indexed = new Set(this.db.getAllFiles().map(f => f.path));\n const current = new Set(\n (await scanDirectory(this.projectRoot, this.config))\n .map(f => path.relative(this.projectRoot, f).replace(/\\\\/g, '/'))\n );\n result.filesScanned = current.size;\n for (const p of indexed) {\n if (!current.has(p)) await removeFile(p);\n }\n filesToProcess = await scanDirectory(this.projectRoot, this.config);\n }\n }\n\n result.filesScanned = result.filesScanned || filesToProcess.length;\n onProgress?.({ phase: 'scanning', current: result.filesScanned, total: result.filesScanned });\n\n const poisonedLanguages = new Set<string>();\n\n for (let i = 0; i < filesToProcess.length; i++) {\n const file = filesToProcess[i];\n onProgress?.({ phase: 'parsing', current: i + 1, total: filesToProcess.length, currentFile: file });\n\n if (!fs.existsSync(file)) {\n const rel = path.relative(this.projectRoot, file).replace(/\\\\/g, '/');\n await removeFile(rel);\n continue;\n }\n\n try {\n // Skip files whose language parser is currently poisoned\n const { detectLanguage } = await Promise.resolve().then(() => require('../extraction/languages.js'));\n const lang = detectLanguage(file);\n if (poisonedLanguages.has(lang)) continue;\n\n const extracted = await extractFile(file, this.projectRoot, undefined, { enableComplexity: !!(this.config as any).enableComplexity });\n if (!extracted) continue;\n\n const existing = this.db.getFile(extracted.filePath);\n const isNew = !existing;\n if (!isNew && existing!.contentHash === extracted.contentHash) continue;\n\n const oldNodes = this.db.getNodesByFile(extracted.filePath);\n const oldEdgeCount = this.db.getEdgesForNodes(oldNodes.map(n => n.id)).length;\n await this.vectors.deleteEmbeddings(oldNodes.map(n => n.id));\n\n this.db.transaction(() => {\n result.nodesRemoved += oldNodes.length;\n result.edgesRemoved += oldEdgeCount;\n this.db.deleteNodesByFile(extracted.filePath);\n this.db.deleteUnresolvedRefsByFile(extracted.filePath);\n this.db.upsertFile({\n path: extracted.filePath,\n contentHash: extracted.contentHash,\n language: extracted.language,\n fileSize: extracted.fileSize,\n symbolCount: extracted.nodes.length,\n indexedAt: Date.now(),\n });\n for (const node of extracted.nodes) { this.db.upsertNode(node); result.nodesCreated++; }\n for (const edge of extracted.edges) { this.db.insertEdge(edge); result.edgesCreated++; }\n for (const ref of extracted.unresolvedRefs) {\n this.db.insertUnresolvedRef(ref.sourceId, ref.refName, ref.refKind, extracted.filePath, ref.line, ref.column);\n }\n });\n\n this.resolver.invalidateFile(extracted.filePath);\n if (isNew) result.added.push(extracted.filePath);\n else { result.modified.push(extracted.filePath); result.nodesUpdated += extracted.nodes.length; }\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n result.errors.push(`${file}: ${msg}`);\n\n // Detect WASM runtime abort and attempt recovery\n const isWasmCrash = (err as any)?.constructor?.name === 'RuntimeError'\n || msg.includes('Aborted(') \n || msg.includes('RuntimeError')\n || msg.includes('WASM grammar exists but failed to load');\n if (isWasmCrash) {\n const { detectLanguage } = await Promise.resolve().then(() => require('../extraction/languages.js'));\n const lang = detectLanguage(file);\n poisonedLanguages.add(lang);\n\n clearParserCache();\n try {\n await initGrammars();\n poisonedLanguages.clear();\n } catch {\n result.errors.push('WASM runtime unrecoverable after crash \u2014 aborting sync');\n break;\n }\n }\n }\n }\n\n // Resolve cross-file references\n onProgress?.({ phase: 'resolving', current: 0, total: 1 });\n await this.resolver.resolveAll((current, total) => {\n onProgress?.({ phase: 'resolving', current, total });\n });\n\n await detectFrameworks(this.projectRoot);\n\n // Generate embeddings (if enabled)\n if (this.vectors.isInitialized()) {\n onProgress?.({ phase: 'embeddings', current: 0, total: 1 });\n await this.vectors.embedAll((current, total) =>\n onProgress?.({ phase: 'embeddings', current, total })\n );\n }\n\n // Analyze architecture (if enabled, or auto-enabled for security)\n if (this.config.enableArchitecture || this.config.enableSecurity) {\n if (this.config.enableSecurity && !this.config.enableArchitecture) {\n const { logWarn } = await Promise.resolve().then(() => require('../errors.js'));\n logWarn('enableSecurity requires enableArchitecture \u2014 auto-enabling architecture analysis for this run');\n }\n onProgress?.({ phase: 'architecture', current: 0, total: 1 });\n await this.arch.analyze(msg =>\n onProgress?.({ phase: 'architecture', current: 0, total: 1, meta: { msg } })\n );\n onProgress?.({ phase: 'architecture', current: 1, total: 1 });\n }\n\n // Run security analysis (if enabled)\n if (this.config.enableSecurity) {\n try {\n const { SecurityPipeline } = await Promise.resolve().then(() => require('../security/pipeline.js'));\n this.db.applySecuritySchema();\n const secPipeline = new SecurityPipeline(this.db, this.config, this.projectRoot);\n onProgress?.({ phase: 'security', current: 0, total: 1 });\n await secPipeline.run((phase, current, total) =>\n onProgress?.({ phase: 'security', current, total, meta: { secPhase: phase } })\n );\n onProgress?.({ phase: 'security', current: 1, total: 1 });\n } catch { /* security analysis is non-critical */ }\n }\n\n // Re-index documentation (if enabled)\n if (this.config.enableDocs) {\n try {\n const { DocsIndexer } = await Promise.resolve().then(() => require('../docs/indexer.js'));\n this.db.applyDocsSchema();\n const docsIndexer = new DocsIndexer(this.db.getRawDb(), this.config, this.projectRoot);\n await docsIndexer.indexAll({\n onProgress: msg => onProgress?.({ phase: 'docs', current: 0, total: 1, meta: { msg } }),\n });\n } catch { /* docs indexing is non-critical */ }\n }\n\n // Re-index data files (if enabled)\n if ((this.config as any).enableData) {\n try {\n const { DataIndexer } = await Promise.resolve().then(() => require('../data/indexer.js'));\n this.db.applyDataSchema();\n const dataIndexer = new DataIndexer(this.db.getRawDb(), this.config, this.projectRoot);\n await dataIndexer.indexAll({\n onProgress: msg => onProgress?.({ phase: 'data', current: 0, total: 1, meta: { msg } }),\n });\n\n // Assign data files to 'data' architecture layer if architecture is enabled\n if (this.config.enableArchitecture) {\n try {\n const rawDb = this.db.getRawDb();\n const tableExists = rawDb.get(\"SELECT name FROM sqlite_master WHERE type='table' AND name='arch_file_layers'\");\n if (tableExists) {\n const datasets = rawDb.all('SELECT file_path FROM data_datasets') as Array<{ file_path: string }>;\n for (const ds of datasets) {\n rawDb.run(\n `INSERT OR REPLACE INTO arch_file_layers (file_path, layer_id, confidence) VALUES (?, ?, ?)`,\n [ds.file_path, 'layer:data', 1.0],\n );\n }\n }\n } catch { /* non-critical */ }\n }\n } catch { /* data indexing is non-critical */ }\n }\n\n // Re-index pattern matches for changed files (if enabled)\n if ((this.config as any).enablePatterns) {\n try {\n const tableExists = this.db.getRawDb().get(\n \"SELECT name FROM sqlite_master WHERE type='table' AND name='pattern_matches'\"\n );\n if (tableExists) {\n const { PatternIndexer } = await Promise.resolve().then(() => require('../patterns/indexer.js'));\n const { PatternLibraryLoader } = await Promise.resolve().then(() => require('../patterns/loader.js'));\n const { PatternRunner } = await Promise.resolve().then(() => require('../patterns/runner.js'));\n const runner = new PatternRunner();\n if (runner.isAvailable()) {\n const loader = new PatternLibraryLoader();\n const builtinPath = require('path').join(__dirname, '../patterns/library');\n const rules = loader.load(builtinPath, (this.config as any).patternLibraryPath);\n const threshold = (this.config as any).patternSeverityThreshold ?? 'low';\n const indexer = new PatternIndexer(this.db.getRawDb(), this.config, this.projectRoot);\n const changedPaths = [...result.added, ...result.modified];\n for (const filePath of changedPaths) {\n const fileRecord = this.db.getFile(filePath);\n const language = fileRecord?.language ?? 'unknown';\n await indexer.indexFile(filePath, language, rules, runner, threshold, Date.now());\n }\n }\n }\n } catch { /* non-critical */ }\n }\n\n this.lock.clearDirty();\n result.duration = Date.now() - start;\n return result;\n } finally {\n this.lock.release();\n release();\n }\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -34,7 +34,7 @@ module.exports = __toCommonJS(database_exports);
34
34
  var path = __toESM(require("path"));
35
35
  var fs = __toESM(require("fs"));
36
36
  const { Database } = require("node-sqlite3-wasm");
37
- const CURRENT_SCHEMA_VERSION = 1;
37
+ const CURRENT_SCHEMA_VERSION = 2;
38
38
  class GraphDatabase {
39
39
  constructor(projectRoot) {
40
40
  this.projectRoot = projectRoot;
@@ -179,10 +179,25 @@ Or delete the lock manually: ${lockPath}`
179
179
  runMigrations() {
180
180
  const versionRow = this.db.get("SELECT version FROM schema_versions ORDER BY version DESC LIMIT 1");
181
181
  const currentVersion = versionRow ? versionRow.version : 0;
182
- if (currentVersion < CURRENT_SCHEMA_VERSION) {
182
+ if (currentVersion < 2) {
183
+ for (const col of [
184
+ "complexity_cyclomatic INTEGER",
185
+ "complexity_cognitive INTEGER",
186
+ "complexity_halstead TEXT",
187
+ "maintainability_index REAL",
188
+ "nesting_depth INTEGER"
189
+ ]) {
190
+ try {
191
+ this.db.run(`ALTER TABLE nodes ADD COLUMN ${col}`);
192
+ } catch {
193
+ }
194
+ }
195
+ this.db.run("INSERT OR IGNORE INTO schema_versions (version, applied_at) VALUES (?, ?)", [2, Date.now()]);
196
+ }
197
+ if (currentVersion < 1) {
183
198
  this.db.run(
184
199
  "INSERT OR IGNORE INTO schema_versions (version, applied_at) VALUES (?, ?)",
185
- [CURRENT_SCHEMA_VERSION, Date.now()]
200
+ [1, Date.now()]
186
201
  );
187
202
  }
188
203
  try {
@@ -235,8 +250,10 @@ Or delete the lock manually: ${lockPath}`
235
250
  start_line, end_line, start_column, end_column,
236
251
  docstring, signature, visibility,
237
252
  is_exported, is_async, is_static, is_abstract,
238
- decorators, type_parameters, updated_at)
239
- VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)`,
253
+ decorators, type_parameters, updated_at,
254
+ complexity_cyclomatic, complexity_cognitive, complexity_halstead,
255
+ maintainability_index, nesting_depth)
256
+ VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)`,
240
257
  [
241
258
  node.id,
242
259
  node.kind,
@@ -257,7 +274,12 @@ Or delete the lock manually: ${lockPath}`
257
274
  node.isAbstract ? 1 : 0,
258
275
  node.decorators ? JSON.stringify(node.decorators) : null,
259
276
  node.typeParameters ? JSON.stringify(node.typeParameters) : null,
260
- node.updatedAt
277
+ node.updatedAt,
278
+ node.complexityCyclomatic ?? null,
279
+ node.complexityCognitive ?? null,
280
+ node.complexityHalstead ?? null,
281
+ node.maintainabilityIndex ?? null,
282
+ node.nestingDepth ?? null
261
283
  ]
262
284
  );
263
285
  this.db.run(
@@ -362,7 +384,12 @@ Or delete the lock manually: ${lockPath}`
362
384
  isAbstract: row.is_abstract === 1,
363
385
  decorators: row.decorators ? JSON.parse(row.decorators) : void 0,
364
386
  typeParameters: row.type_parameters ? JSON.parse(row.type_parameters) : void 0,
365
- updatedAt: row.updated_at
387
+ updatedAt: row.updated_at,
388
+ complexityCyclomatic: row.complexity_cyclomatic ?? void 0,
389
+ complexityCognitive: row.complexity_cognitive ?? void 0,
390
+ complexityHalstead: row.complexity_halstead ?? void 0,
391
+ maintainabilityIndex: row.maintainability_index ?? void 0,
392
+ nestingDepth: row.nesting_depth ?? void 0
366
393
  };
367
394
  }
368
395
  // ── Edges ──────────────────────────────────────────────────────────────────