@optave/codegraph 3.12.0 → 3.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (524) hide show
  1. package/README.md +83 -46
  2. package/dist/ast-analysis/engine.d.ts.map +1 -1
  3. package/dist/ast-analysis/engine.js +38 -40
  4. package/dist/ast-analysis/engine.js.map +1 -1
  5. package/dist/ast-analysis/rules/b2.d.ts +7 -0
  6. package/dist/ast-analysis/rules/b2.d.ts.map +1 -0
  7. package/dist/ast-analysis/rules/b2.js +240 -0
  8. package/dist/ast-analysis/rules/b2.js.map +1 -0
  9. package/dist/ast-analysis/rules/b3.d.ts +6 -0
  10. package/dist/ast-analysis/rules/b3.d.ts.map +1 -0
  11. package/dist/ast-analysis/rules/b3.js +105 -0
  12. package/dist/ast-analysis/rules/b3.js.map +1 -0
  13. package/dist/ast-analysis/rules/b4.d.ts +9 -0
  14. package/dist/ast-analysis/rules/b4.d.ts.map +1 -0
  15. package/dist/ast-analysis/rules/b4.js +361 -0
  16. package/dist/ast-analysis/rules/b4.js.map +1 -0
  17. package/dist/ast-analysis/rules/b5.d.ts +4 -0
  18. package/dist/ast-analysis/rules/b5.d.ts.map +1 -0
  19. package/dist/ast-analysis/rules/b5.js +52 -0
  20. package/dist/ast-analysis/rules/b5.js.map +1 -0
  21. package/dist/ast-analysis/rules/c.d.ts +4 -0
  22. package/dist/ast-analysis/rules/c.d.ts.map +1 -0
  23. package/dist/ast-analysis/rules/c.js +143 -0
  24. package/dist/ast-analysis/rules/c.js.map +1 -0
  25. package/dist/ast-analysis/rules/index.d.ts.map +1 -1
  26. package/dist/ast-analysis/rules/index.js +34 -0
  27. package/dist/ast-analysis/rules/index.js.map +1 -1
  28. package/dist/ast-analysis/rules/javascript.d.ts.map +1 -1
  29. package/dist/ast-analysis/rules/javascript.js +3 -0
  30. package/dist/ast-analysis/rules/javascript.js.map +1 -1
  31. package/dist/ast-analysis/shared.d.ts.map +1 -1
  32. package/dist/ast-analysis/shared.js +2 -0
  33. package/dist/ast-analysis/shared.js.map +1 -1
  34. package/dist/ast-analysis/visitor-utils.d.ts +1 -0
  35. package/dist/ast-analysis/visitor-utils.d.ts.map +1 -1
  36. package/dist/ast-analysis/visitor-utils.js +5 -0
  37. package/dist/ast-analysis/visitor-utils.js.map +1 -1
  38. package/dist/ast-analysis/visitor.d.ts.map +1 -1
  39. package/dist/ast-analysis/visitor.js +60 -47
  40. package/dist/ast-analysis/visitor.js.map +1 -1
  41. package/dist/ast-analysis/visitors/cfg-visitor.d.ts.map +1 -1
  42. package/dist/ast-analysis/visitors/cfg-visitor.js +126 -76
  43. package/dist/ast-analysis/visitors/cfg-visitor.js.map +1 -1
  44. package/dist/ast-analysis/visitors/complexity-visitor.d.ts.map +1 -1
  45. package/dist/ast-analysis/visitors/complexity-visitor.js +27 -15
  46. package/dist/ast-analysis/visitors/complexity-visitor.js.map +1 -1
  47. package/dist/ast-analysis/visitors/dataflow-visitor.d.ts.map +1 -1
  48. package/dist/ast-analysis/visitors/dataflow-visitor.js +54 -21
  49. package/dist/ast-analysis/visitors/dataflow-visitor.js.map +1 -1
  50. package/dist/cli/commands/audit.d.ts.map +1 -1
  51. package/dist/cli/commands/audit.js +2 -1
  52. package/dist/cli/commands/audit.js.map +1 -1
  53. package/dist/cli/commands/batch.d.ts.map +1 -1
  54. package/dist/cli/commands/batch.js +1 -0
  55. package/dist/cli/commands/batch.js.map +1 -1
  56. package/dist/cli/commands/build.d.ts.map +1 -1
  57. package/dist/cli/commands/build.js +6 -1
  58. package/dist/cli/commands/build.js.map +1 -1
  59. package/dist/cli/commands/config.d.ts +3 -0
  60. package/dist/cli/commands/config.d.ts.map +1 -0
  61. package/dist/cli/commands/config.js +275 -0
  62. package/dist/cli/commands/config.js.map +1 -0
  63. package/dist/cli/commands/roles.d.ts.map +1 -1
  64. package/dist/cli/commands/roles.js +6 -1
  65. package/dist/cli/commands/roles.js.map +1 -1
  66. package/dist/cli/commands/triage.js +1 -1
  67. package/dist/cli/commands/triage.js.map +1 -1
  68. package/dist/cli/index.d.ts.map +1 -1
  69. package/dist/cli/index.js +10 -0
  70. package/dist/cli/index.js.map +1 -1
  71. package/dist/cli/shared/options.d.ts +2 -1
  72. package/dist/cli/shared/options.d.ts.map +1 -1
  73. package/dist/cli/shared/options.js +11 -1
  74. package/dist/cli/shared/options.js.map +1 -1
  75. package/dist/cli/types.d.ts +2 -0
  76. package/dist/cli/types.d.ts.map +1 -1
  77. package/dist/db/better-sqlite3.d.ts +2 -1
  78. package/dist/db/better-sqlite3.d.ts.map +1 -1
  79. package/dist/db/better-sqlite3.js.map +1 -1
  80. package/dist/db/connection.d.ts +7 -1
  81. package/dist/db/connection.d.ts.map +1 -1
  82. package/dist/db/connection.js +20 -5
  83. package/dist/db/connection.js.map +1 -1
  84. package/dist/db/index.d.ts +1 -1
  85. package/dist/db/index.d.ts.map +1 -1
  86. package/dist/db/index.js +1 -1
  87. package/dist/db/index.js.map +1 -1
  88. package/dist/db/migrations.d.ts.map +1 -1
  89. package/dist/db/migrations.js +69 -1
  90. package/dist/db/migrations.js.map +1 -1
  91. package/dist/db/repository/build-stmts.d.ts.map +1 -1
  92. package/dist/db/repository/build-stmts.js +18 -0
  93. package/dist/db/repository/build-stmts.js.map +1 -1
  94. package/dist/db/repository/dataflow.d.ts +5 -0
  95. package/dist/db/repository/dataflow.d.ts.map +1 -1
  96. package/dist/db/repository/dataflow.js +14 -0
  97. package/dist/db/repository/dataflow.js.map +1 -1
  98. package/dist/db/repository/index.d.ts +1 -1
  99. package/dist/db/repository/index.d.ts.map +1 -1
  100. package/dist/db/repository/index.js +1 -1
  101. package/dist/db/repository/index.js.map +1 -1
  102. package/dist/db/repository/native-repository.d.ts.map +1 -1
  103. package/dist/db/repository/native-repository.js +47 -34
  104. package/dist/db/repository/native-repository.js.map +1 -1
  105. package/dist/domain/analysis/context.d.ts +2 -2
  106. package/dist/domain/analysis/dependencies.d.ts +2 -2
  107. package/dist/domain/analysis/diff-impact.d.ts +2 -2
  108. package/dist/domain/analysis/fn-impact.d.ts +3 -1
  109. package/dist/domain/analysis/fn-impact.d.ts.map +1 -1
  110. package/dist/domain/analysis/fn-impact.js +4 -0
  111. package/dist/domain/analysis/fn-impact.js.map +1 -1
  112. package/dist/domain/analysis/implementations.d.ts +2 -2
  113. package/dist/domain/analysis/module-map.d.ts.map +1 -1
  114. package/dist/domain/analysis/module-map.js +32 -5
  115. package/dist/domain/analysis/module-map.js.map +1 -1
  116. package/dist/domain/analysis/roles.d.ts +7 -1
  117. package/dist/domain/analysis/roles.d.ts.map +1 -1
  118. package/dist/domain/analysis/roles.js +16 -0
  119. package/dist/domain/analysis/roles.js.map +1 -1
  120. package/dist/domain/analysis/symbol-lookup.d.ts +4 -4
  121. package/dist/domain/graph/builder/call-resolver.d.ts +29 -13
  122. package/dist/domain/graph/builder/call-resolver.d.ts.map +1 -1
  123. package/dist/domain/graph/builder/call-resolver.js +125 -205
  124. package/dist/domain/graph/builder/call-resolver.js.map +1 -1
  125. package/dist/domain/graph/builder/cha.d.ts +9 -1
  126. package/dist/domain/graph/builder/cha.d.ts.map +1 -1
  127. package/dist/domain/graph/builder/cha.js +17 -2
  128. package/dist/domain/graph/builder/cha.js.map +1 -1
  129. package/dist/domain/graph/builder/context.d.ts +1 -0
  130. package/dist/domain/graph/builder/context.d.ts.map +1 -1
  131. package/dist/domain/graph/builder/context.js.map +1 -1
  132. package/dist/domain/graph/builder/helpers.d.ts +24 -1
  133. package/dist/domain/graph/builder/helpers.d.ts.map +1 -1
  134. package/dist/domain/graph/builder/helpers.js +174 -65
  135. package/dist/domain/graph/builder/helpers.js.map +1 -1
  136. package/dist/domain/graph/builder/incremental.d.ts.map +1 -1
  137. package/dist/domain/graph/builder/incremental.js +166 -97
  138. package/dist/domain/graph/builder/incremental.js.map +1 -1
  139. package/dist/domain/graph/builder/pipeline.d.ts.map +1 -1
  140. package/dist/domain/graph/builder/pipeline.js +46 -5
  141. package/dist/domain/graph/builder/pipeline.js.map +1 -1
  142. package/dist/domain/graph/builder/stages/build-edges.d.ts +0 -2
  143. package/dist/domain/graph/builder/stages/build-edges.d.ts.map +1 -1
  144. package/dist/domain/graph/builder/stages/build-edges.js +554 -538
  145. package/dist/domain/graph/builder/stages/build-edges.js.map +1 -1
  146. package/dist/domain/graph/builder/stages/collect-files.d.ts.map +1 -1
  147. package/dist/domain/graph/builder/stages/collect-files.js +10 -7
  148. package/dist/domain/graph/builder/stages/collect-files.js.map +1 -1
  149. package/dist/domain/graph/builder/stages/detect-changes.d.ts.map +1 -1
  150. package/dist/domain/graph/builder/stages/detect-changes.js +3 -2
  151. package/dist/domain/graph/builder/stages/detect-changes.js.map +1 -1
  152. package/dist/domain/graph/builder/stages/finalize.d.ts.map +1 -1
  153. package/dist/domain/graph/builder/stages/finalize.js +4 -0
  154. package/dist/domain/graph/builder/stages/finalize.js.map +1 -1
  155. package/dist/domain/graph/builder/stages/native-orchestrator.d.ts.map +1 -1
  156. package/dist/domain/graph/builder/stages/native-orchestrator.js +952 -343
  157. package/dist/domain/graph/builder/stages/native-orchestrator.js.map +1 -1
  158. package/dist/domain/graph/builder/stages/resolve-imports.js +1 -1
  159. package/dist/domain/graph/builder/stages/resolve-imports.js.map +1 -1
  160. package/dist/domain/graph/resolver/points-to.d.ts.map +1 -1
  161. package/dist/domain/graph/resolver/points-to.js +105 -57
  162. package/dist/domain/graph/resolver/points-to.js.map +1 -1
  163. package/dist/domain/graph/resolver/strategy.d.ts +61 -0
  164. package/dist/domain/graph/resolver/strategy.d.ts.map +1 -0
  165. package/dist/domain/graph/resolver/strategy.js +222 -0
  166. package/dist/domain/graph/resolver/strategy.js.map +1 -0
  167. package/dist/domain/graph/watcher.d.ts.map +1 -1
  168. package/dist/domain/graph/watcher.js +16 -9
  169. package/dist/domain/graph/watcher.js.map +1 -1
  170. package/dist/domain/parser.d.ts +16 -5
  171. package/dist/domain/parser.d.ts.map +1 -1
  172. package/dist/domain/parser.js +58 -17
  173. package/dist/domain/parser.js.map +1 -1
  174. package/dist/domain/queries.d.ts +1 -1
  175. package/dist/domain/queries.d.ts.map +1 -1
  176. package/dist/domain/queries.js +1 -1
  177. package/dist/domain/queries.js.map +1 -1
  178. package/dist/domain/wasm-worker-entry.js +13 -2
  179. package/dist/domain/wasm-worker-entry.js.map +1 -1
  180. package/dist/domain/wasm-worker-pool.d.ts.map +1 -1
  181. package/dist/domain/wasm-worker-pool.js +26 -5
  182. package/dist/domain/wasm-worker-pool.js.map +1 -1
  183. package/dist/domain/wasm-worker-protocol.d.ts +8 -0
  184. package/dist/domain/wasm-worker-protocol.d.ts.map +1 -1
  185. package/dist/extractors/cpp.d.ts.map +1 -1
  186. package/dist/extractors/cpp.js +42 -1
  187. package/dist/extractors/cpp.js.map +1 -1
  188. package/dist/extractors/cuda.d.ts.map +1 -1
  189. package/dist/extractors/cuda.js +42 -1
  190. package/dist/extractors/cuda.js.map +1 -1
  191. package/dist/extractors/dart.js +48 -3
  192. package/dist/extractors/dart.js.map +1 -1
  193. package/dist/extractors/groovy.js +62 -3
  194. package/dist/extractors/groovy.js.map +1 -1
  195. package/dist/extractors/helpers.d.ts +15 -2
  196. package/dist/extractors/helpers.d.ts.map +1 -1
  197. package/dist/extractors/helpers.js +45 -1
  198. package/dist/extractors/helpers.js.map +1 -1
  199. package/dist/extractors/java.d.ts.map +1 -1
  200. package/dist/extractors/java.js +85 -8
  201. package/dist/extractors/java.js.map +1 -1
  202. package/dist/extractors/javascript.d.ts.map +1 -1
  203. package/dist/extractors/javascript.js +686 -169
  204. package/dist/extractors/javascript.js.map +1 -1
  205. package/dist/extractors/kotlin.js +58 -3
  206. package/dist/extractors/kotlin.js.map +1 -1
  207. package/dist/extractors/objc.js +25 -2
  208. package/dist/extractors/objc.js.map +1 -1
  209. package/dist/extractors/scala.js +62 -2
  210. package/dist/extractors/scala.js.map +1 -1
  211. package/dist/extractors/swift.js +52 -3
  212. package/dist/extractors/swift.js.map +1 -1
  213. package/dist/features/audit.js +26 -23
  214. package/dist/features/audit.js.map +1 -1
  215. package/dist/features/boundaries.d.ts.map +1 -1
  216. package/dist/features/boundaries.js +12 -9
  217. package/dist/features/boundaries.js.map +1 -1
  218. package/dist/features/cfg.d.ts.map +1 -1
  219. package/dist/features/cfg.js +25 -18
  220. package/dist/features/cfg.js.map +1 -1
  221. package/dist/features/check.d.ts.map +1 -1
  222. package/dist/features/check.js +18 -5
  223. package/dist/features/check.js.map +1 -1
  224. package/dist/features/communities.d.ts +4 -2
  225. package/dist/features/communities.d.ts.map +1 -1
  226. package/dist/features/communities.js +6 -4
  227. package/dist/features/communities.js.map +1 -1
  228. package/dist/features/dataflow.d.ts +60 -0
  229. package/dist/features/dataflow.d.ts.map +1 -1
  230. package/dist/features/dataflow.js +530 -6
  231. package/dist/features/dataflow.js.map +1 -1
  232. package/dist/features/manifesto.d.ts.map +1 -1
  233. package/dist/features/manifesto.js +59 -72
  234. package/dist/features/manifesto.js.map +1 -1
  235. package/dist/features/sequence.d.ts.map +1 -1
  236. package/dist/features/sequence.js +27 -22
  237. package/dist/features/sequence.js.map +1 -1
  238. package/dist/features/snapshot.d.ts.map +1 -1
  239. package/dist/features/snapshot.js +36 -28
  240. package/dist/features/snapshot.js.map +1 -1
  241. package/dist/features/structure-query.d.ts +1 -1
  242. package/dist/features/structure-query.d.ts.map +1 -1
  243. package/dist/features/structure-query.js +6 -6
  244. package/dist/features/structure-query.js.map +1 -1
  245. package/dist/features/structure.d.ts.map +1 -1
  246. package/dist/features/structure.js +150 -62
  247. package/dist/features/structure.js.map +1 -1
  248. package/dist/features/triage.d.ts.map +1 -1
  249. package/dist/features/triage.js +18 -11
  250. package/dist/features/triage.js.map +1 -1
  251. package/dist/graph/algorithms/bfs.d.ts +1 -1
  252. package/dist/graph/algorithms/bfs.d.ts.map +1 -1
  253. package/dist/graph/algorithms/bfs.js +14 -13
  254. package/dist/graph/algorithms/bfs.js.map +1 -1
  255. package/dist/graph/algorithms/tarjan.d.ts.map +1 -1
  256. package/dist/graph/algorithms/tarjan.js +5 -0
  257. package/dist/graph/algorithms/tarjan.js.map +1 -1
  258. package/dist/graph/builders/dependency.js +28 -22
  259. package/dist/graph/builders/dependency.js.map +1 -1
  260. package/dist/graph/classifiers/roles.d.ts +10 -1
  261. package/dist/graph/classifiers/roles.d.ts.map +1 -1
  262. package/dist/graph/classifiers/roles.js +60 -6
  263. package/dist/graph/classifiers/roles.js.map +1 -1
  264. package/dist/index.d.ts +1 -1
  265. package/dist/index.d.ts.map +1 -1
  266. package/dist/index.js +1 -1
  267. package/dist/index.js.map +1 -1
  268. package/dist/infrastructure/config.d.ts +87 -4
  269. package/dist/infrastructure/config.d.ts.map +1 -1
  270. package/dist/infrastructure/config.js +424 -22
  271. package/dist/infrastructure/config.js.map +1 -1
  272. package/dist/infrastructure/registry.d.ts +27 -7
  273. package/dist/infrastructure/registry.d.ts.map +1 -1
  274. package/dist/infrastructure/registry.js +79 -5
  275. package/dist/infrastructure/registry.js.map +1 -1
  276. package/dist/infrastructure/update-check.d.ts.map +1 -1
  277. package/dist/infrastructure/update-check.js +49 -31
  278. package/dist/infrastructure/update-check.js.map +1 -1
  279. package/dist/mcp/server.d.ts +2 -10
  280. package/dist/mcp/server.d.ts.map +1 -1
  281. package/dist/mcp/server.js.map +1 -1
  282. package/dist/mcp/tools/ast-query.d.ts +1 -1
  283. package/dist/mcp/tools/ast-query.d.ts.map +1 -1
  284. package/dist/mcp/tools/audit.d.ts +1 -1
  285. package/dist/mcp/tools/audit.d.ts.map +1 -1
  286. package/dist/mcp/tools/batch-query.d.ts +1 -1
  287. package/dist/mcp/tools/batch-query.d.ts.map +1 -1
  288. package/dist/mcp/tools/branch-compare.d.ts +1 -1
  289. package/dist/mcp/tools/branch-compare.d.ts.map +1 -1
  290. package/dist/mcp/tools/brief.d.ts +1 -1
  291. package/dist/mcp/tools/brief.d.ts.map +1 -1
  292. package/dist/mcp/tools/cfg.d.ts +1 -1
  293. package/dist/mcp/tools/cfg.d.ts.map +1 -1
  294. package/dist/mcp/tools/check.d.ts +1 -1
  295. package/dist/mcp/tools/check.d.ts.map +1 -1
  296. package/dist/mcp/tools/co-changes.d.ts +1 -1
  297. package/dist/mcp/tools/co-changes.d.ts.map +1 -1
  298. package/dist/mcp/tools/code-owners.d.ts +1 -1
  299. package/dist/mcp/tools/code-owners.d.ts.map +1 -1
  300. package/dist/mcp/tools/communities.d.ts +1 -1
  301. package/dist/mcp/tools/communities.d.ts.map +1 -1
  302. package/dist/mcp/tools/complexity.d.ts +1 -1
  303. package/dist/mcp/tools/complexity.d.ts.map +1 -1
  304. package/dist/mcp/tools/context.d.ts +1 -1
  305. package/dist/mcp/tools/context.d.ts.map +1 -1
  306. package/dist/mcp/tools/dataflow.d.ts +1 -1
  307. package/dist/mcp/tools/dataflow.d.ts.map +1 -1
  308. package/dist/mcp/tools/diff-impact.d.ts +1 -1
  309. package/dist/mcp/tools/diff-impact.d.ts.map +1 -1
  310. package/dist/mcp/tools/execution-flow.d.ts +1 -1
  311. package/dist/mcp/tools/execution-flow.d.ts.map +1 -1
  312. package/dist/mcp/tools/export-graph.d.ts +1 -1
  313. package/dist/mcp/tools/export-graph.d.ts.map +1 -1
  314. package/dist/mcp/tools/file-deps.d.ts +1 -1
  315. package/dist/mcp/tools/file-deps.d.ts.map +1 -1
  316. package/dist/mcp/tools/file-exports.d.ts +1 -1
  317. package/dist/mcp/tools/file-exports.d.ts.map +1 -1
  318. package/dist/mcp/tools/find-cycles.d.ts +1 -1
  319. package/dist/mcp/tools/find-cycles.d.ts.map +1 -1
  320. package/dist/mcp/tools/fn-impact.d.ts +1 -1
  321. package/dist/mcp/tools/fn-impact.d.ts.map +1 -1
  322. package/dist/mcp/tools/impact-analysis.d.ts +1 -1
  323. package/dist/mcp/tools/impact-analysis.d.ts.map +1 -1
  324. package/dist/mcp/tools/implementations.d.ts +1 -1
  325. package/dist/mcp/tools/implementations.d.ts.map +1 -1
  326. package/dist/mcp/tools/index.d.ts +2 -5
  327. package/dist/mcp/tools/index.d.ts.map +1 -1
  328. package/dist/mcp/tools/index.js.map +1 -1
  329. package/dist/mcp/tools/interfaces.d.ts +1 -1
  330. package/dist/mcp/tools/interfaces.d.ts.map +1 -1
  331. package/dist/mcp/tools/list-functions.d.ts +1 -1
  332. package/dist/mcp/tools/list-functions.d.ts.map +1 -1
  333. package/dist/mcp/tools/list-repos.d.ts +1 -1
  334. package/dist/mcp/tools/list-repos.d.ts.map +1 -1
  335. package/dist/mcp/tools/module-map.d.ts +1 -1
  336. package/dist/mcp/tools/module-map.d.ts.map +1 -1
  337. package/dist/mcp/tools/node-roles.d.ts +1 -1
  338. package/dist/mcp/tools/node-roles.d.ts.map +1 -1
  339. package/dist/mcp/tools/path.d.ts +1 -1
  340. package/dist/mcp/tools/path.d.ts.map +1 -1
  341. package/dist/mcp/tools/query.d.ts +1 -1
  342. package/dist/mcp/tools/query.d.ts.map +1 -1
  343. package/dist/mcp/tools/semantic-search.d.ts +1 -1
  344. package/dist/mcp/tools/semantic-search.d.ts.map +1 -1
  345. package/dist/mcp/tools/sequence.d.ts +1 -1
  346. package/dist/mcp/tools/sequence.d.ts.map +1 -1
  347. package/dist/mcp/tools/structure.d.ts +1 -1
  348. package/dist/mcp/tools/structure.d.ts.map +1 -1
  349. package/dist/mcp/tools/symbol-children.d.ts +1 -1
  350. package/dist/mcp/tools/symbol-children.d.ts.map +1 -1
  351. package/dist/mcp/tools/triage.d.ts +1 -1
  352. package/dist/mcp/tools/triage.d.ts.map +1 -1
  353. package/dist/mcp/tools/where.d.ts +1 -1
  354. package/dist/mcp/tools/where.d.ts.map +1 -1
  355. package/dist/mcp/types.d.ts +19 -0
  356. package/dist/mcp/types.d.ts.map +1 -0
  357. package/dist/mcp/types.js +6 -0
  358. package/dist/mcp/types.js.map +1 -0
  359. package/dist/presentation/queries-cli/index.d.ts +1 -1
  360. package/dist/presentation/queries-cli/index.d.ts.map +1 -1
  361. package/dist/presentation/queries-cli/index.js +1 -1
  362. package/dist/presentation/queries-cli/index.js.map +1 -1
  363. package/dist/presentation/queries-cli/overview.d.ts +1 -0
  364. package/dist/presentation/queries-cli/overview.d.ts.map +1 -1
  365. package/dist/presentation/queries-cli/overview.js +20 -1
  366. package/dist/presentation/queries-cli/overview.js.map +1 -1
  367. package/dist/presentation/queries-cli.d.ts +1 -1
  368. package/dist/presentation/queries-cli.d.ts.map +1 -1
  369. package/dist/presentation/queries-cli.js +1 -1
  370. package/dist/presentation/queries-cli.js.map +1 -1
  371. package/dist/presentation/structure.d.ts +1 -1
  372. package/dist/presentation/structure.d.ts.map +1 -1
  373. package/dist/presentation/structure.js +2 -2
  374. package/dist/presentation/structure.js.map +1 -1
  375. package/dist/presentation/viewer.d.ts.map +1 -1
  376. package/dist/presentation/viewer.js +45 -32
  377. package/dist/presentation/viewer.js.map +1 -1
  378. package/dist/shared/constants.d.ts +21 -0
  379. package/dist/shared/constants.d.ts.map +1 -1
  380. package/dist/shared/constants.js +25 -0
  381. package/dist/shared/constants.js.map +1 -1
  382. package/dist/shared/normalize.d.ts.map +1 -1
  383. package/dist/shared/normalize.js +12 -22
  384. package/dist/shared/normalize.js.map +1 -1
  385. package/dist/shared/paginate.d.ts +4 -17
  386. package/dist/shared/paginate.d.ts.map +1 -1
  387. package/dist/shared/paginate.js.map +1 -1
  388. package/dist/types.d.ts +113 -1
  389. package/dist/types.d.ts.map +1 -1
  390. package/grammars/tree-sitter-erlang.wasm +0 -0
  391. package/grammars/tree-sitter-gleam.wasm +0 -0
  392. package/package.json +7 -8
  393. package/src/ast-analysis/engine.ts +43 -63
  394. package/src/ast-analysis/rules/b2.ts +263 -0
  395. package/src/ast-analysis/rules/b3.ts +127 -0
  396. package/src/ast-analysis/rules/b4.ts +378 -0
  397. package/src/ast-analysis/rules/b5.ts +65 -0
  398. package/src/ast-analysis/rules/c.ts +157 -0
  399. package/src/ast-analysis/rules/index.ts +34 -0
  400. package/src/ast-analysis/rules/javascript.ts +3 -0
  401. package/src/ast-analysis/shared.ts +2 -0
  402. package/src/ast-analysis/visitor-utils.ts +5 -0
  403. package/src/ast-analysis/visitor.ts +82 -52
  404. package/src/ast-analysis/visitors/cfg-visitor.ts +198 -84
  405. package/src/ast-analysis/visitors/complexity-visitor.ts +44 -16
  406. package/src/ast-analysis/visitors/dataflow-visitor.ts +68 -29
  407. package/src/cli/commands/audit.ts +2 -1
  408. package/src/cli/commands/batch.ts +1 -0
  409. package/src/cli/commands/build.ts +6 -1
  410. package/src/cli/commands/config.ts +353 -0
  411. package/src/cli/commands/roles.ts +6 -1
  412. package/src/cli/commands/triage.ts +1 -1
  413. package/src/cli/index.ts +10 -0
  414. package/src/cli/shared/options.ts +11 -1
  415. package/src/cli/types.ts +2 -0
  416. package/src/db/better-sqlite3.ts +5 -4
  417. package/src/db/connection.ts +23 -5
  418. package/src/db/index.ts +1 -0
  419. package/src/db/migrations.ts +69 -1
  420. package/src/db/repository/build-stmts.ts +30 -0
  421. package/src/db/repository/dataflow.ts +16 -0
  422. package/src/db/repository/index.ts +1 -1
  423. package/src/db/repository/native-repository.ts +56 -40
  424. package/src/domain/analysis/fn-impact.ts +4 -0
  425. package/src/domain/analysis/module-map.ts +38 -6
  426. package/src/domain/analysis/roles.ts +23 -0
  427. package/src/domain/graph/builder/call-resolver.ts +156 -218
  428. package/src/domain/graph/builder/cha.ts +18 -1
  429. package/src/domain/graph/builder/context.ts +1 -0
  430. package/src/domain/graph/builder/helpers.ts +205 -67
  431. package/src/domain/graph/builder/incremental.ts +249 -119
  432. package/src/domain/graph/builder/pipeline.ts +59 -6
  433. package/src/domain/graph/builder/stages/build-edges.ts +783 -652
  434. package/src/domain/graph/builder/stages/collect-files.ts +12 -6
  435. package/src/domain/graph/builder/stages/detect-changes.ts +4 -2
  436. package/src/domain/graph/builder/stages/finalize.ts +4 -0
  437. package/src/domain/graph/builder/stages/native-orchestrator.ts +1214 -398
  438. package/src/domain/graph/builder/stages/resolve-imports.ts +1 -1
  439. package/src/domain/graph/resolver/points-to.ts +182 -59
  440. package/src/domain/graph/resolver/strategy.ts +265 -0
  441. package/src/domain/graph/watcher.ts +19 -9
  442. package/src/domain/parser.ts +57 -16
  443. package/src/domain/queries.ts +1 -1
  444. package/src/domain/wasm-worker-entry.ts +13 -2
  445. package/src/domain/wasm-worker-pool.ts +29 -4
  446. package/src/domain/wasm-worker-protocol.ts +5 -0
  447. package/src/extractors/cpp.ts +44 -1
  448. package/src/extractors/cuda.ts +44 -1
  449. package/src/extractors/dart.ts +48 -3
  450. package/src/extractors/groovy.ts +62 -2
  451. package/src/extractors/helpers.ts +48 -2
  452. package/src/extractors/java.ts +88 -8
  453. package/src/extractors/javascript.ts +693 -167
  454. package/src/extractors/kotlin.ts +57 -3
  455. package/src/extractors/objc.ts +25 -1
  456. package/src/extractors/scala.ts +63 -1
  457. package/src/extractors/swift.ts +46 -3
  458. package/src/features/audit.ts +43 -34
  459. package/src/features/boundaries.ts +17 -9
  460. package/src/features/cfg.ts +31 -22
  461. package/src/features/check.ts +21 -5
  462. package/src/features/communities.ts +28 -19
  463. package/src/features/dataflow.ts +755 -6
  464. package/src/features/manifesto.ts +76 -75
  465. package/src/features/sequence.ts +29 -23
  466. package/src/features/snapshot.ts +36 -25
  467. package/src/features/structure-query.ts +7 -7
  468. package/src/features/structure.ts +185 -55
  469. package/src/features/triage.ts +28 -15
  470. package/src/graph/algorithms/bfs.ts +13 -12
  471. package/src/graph/algorithms/tarjan.ts +5 -0
  472. package/src/graph/builders/dependency.ts +35 -23
  473. package/src/graph/classifiers/roles.ts +74 -7
  474. package/src/index.ts +5 -1
  475. package/src/infrastructure/config.ts +511 -23
  476. package/src/infrastructure/registry.ts +117 -12
  477. package/src/infrastructure/update-check.ts +55 -33
  478. package/src/mcp/server.ts +2 -8
  479. package/src/mcp/tools/ast-query.ts +1 -1
  480. package/src/mcp/tools/audit.ts +1 -1
  481. package/src/mcp/tools/batch-query.ts +1 -1
  482. package/src/mcp/tools/branch-compare.ts +1 -1
  483. package/src/mcp/tools/brief.ts +1 -1
  484. package/src/mcp/tools/cfg.ts +1 -1
  485. package/src/mcp/tools/check.ts +1 -1
  486. package/src/mcp/tools/co-changes.ts +1 -1
  487. package/src/mcp/tools/code-owners.ts +1 -1
  488. package/src/mcp/tools/communities.ts +1 -1
  489. package/src/mcp/tools/complexity.ts +1 -1
  490. package/src/mcp/tools/context.ts +1 -1
  491. package/src/mcp/tools/dataflow.ts +1 -1
  492. package/src/mcp/tools/diff-impact.ts +1 -1
  493. package/src/mcp/tools/execution-flow.ts +1 -1
  494. package/src/mcp/tools/export-graph.ts +1 -1
  495. package/src/mcp/tools/file-deps.ts +1 -1
  496. package/src/mcp/tools/file-exports.ts +1 -1
  497. package/src/mcp/tools/find-cycles.ts +1 -1
  498. package/src/mcp/tools/fn-impact.ts +1 -1
  499. package/src/mcp/tools/impact-analysis.ts +1 -1
  500. package/src/mcp/tools/implementations.ts +1 -1
  501. package/src/mcp/tools/index.ts +2 -5
  502. package/src/mcp/tools/interfaces.ts +1 -1
  503. package/src/mcp/tools/list-functions.ts +1 -1
  504. package/src/mcp/tools/list-repos.ts +1 -1
  505. package/src/mcp/tools/module-map.ts +1 -1
  506. package/src/mcp/tools/node-roles.ts +1 -1
  507. package/src/mcp/tools/path.ts +1 -1
  508. package/src/mcp/tools/query.ts +1 -1
  509. package/src/mcp/tools/semantic-search.ts +1 -1
  510. package/src/mcp/tools/sequence.ts +1 -1
  511. package/src/mcp/tools/structure.ts +1 -1
  512. package/src/mcp/tools/symbol-children.ts +1 -1
  513. package/src/mcp/tools/triage.ts +1 -1
  514. package/src/mcp/tools/where.ts +1 -1
  515. package/src/mcp/types.ts +21 -0
  516. package/src/presentation/queries-cli/index.ts +1 -1
  517. package/src/presentation/queries-cli/overview.ts +35 -1
  518. package/src/presentation/queries-cli.ts +1 -0
  519. package/src/presentation/structure.ts +3 -3
  520. package/src/presentation/viewer.ts +98 -87
  521. package/src/shared/constants.ts +26 -0
  522. package/src/shared/normalize.ts +13 -22
  523. package/src/shared/paginate.ts +4 -18
  524. package/src/types.ts +127 -1
@@ -1,6 +1,7 @@
1
1
  import fs from 'node:fs';
2
2
  import os from 'node:os';
3
3
  import path from 'node:path';
4
+ import type { ConsentDecision } from '../types.js';
4
5
  import { debug, warn } from './logger.js';
5
6
 
6
7
  export const REGISTRY_PATH: string =
@@ -16,8 +17,15 @@ interface RegistryEntry {
16
17
  lastAccessedAt?: string;
17
18
  }
18
19
 
20
+ interface UserConfigSection {
21
+ /** Per-repo consent decisions keyed by absolute repo path. */
22
+ consent: Record<string, ConsentDecision>;
23
+ }
24
+
19
25
  interface Registry {
20
26
  repos: Record<string, RegistryEntry>;
27
+ /** User-level global config consent store — separate from MCP repo listings. */
28
+ userConfig?: UserConfigSection;
21
29
  }
22
30
 
23
31
  /**
@@ -160,6 +168,67 @@ export function resolveRepoDbPath(
160
168
  return entry.dbPath;
161
169
  }
162
170
 
171
+ // ── User-config consent ────────────────────────────────────────────────
172
+
173
+ /**
174
+ * Read the per-repo consent decision for the global user config.
175
+ * Returns `undefined` when the repo is undecided (no recorded decision).
176
+ */
177
+ export function getUserConfigConsent(
178
+ rootDir: string,
179
+ registryPath: string = REGISTRY_PATH,
180
+ ): ConsentDecision | undefined {
181
+ const registry = loadRegistry(registryPath);
182
+ const absRoot = path.resolve(rootDir);
183
+ return registry.userConfig?.consent?.[absRoot];
184
+ }
185
+
186
+ /**
187
+ * Persist a per-repo consent decision. Atomic write via temp+rename.
188
+ */
189
+ export function setUserConfigConsent(
190
+ rootDir: string,
191
+ decision: ConsentDecision,
192
+ registryPath: string = REGISTRY_PATH,
193
+ ): void {
194
+ const registry = loadRegistry(registryPath);
195
+ const absRoot = path.resolve(rootDir);
196
+ if (!registry.userConfig) registry.userConfig = { consent: {} };
197
+ if (!registry.userConfig.consent) registry.userConfig.consent = {};
198
+ registry.userConfig.consent[absRoot] = decision;
199
+ saveRegistry(registry, registryPath);
200
+ debug(`User-config consent for "${absRoot}" set to "${decision}"`);
201
+ }
202
+
203
+ /**
204
+ * List every repo with a recorded consent decision, sorted by path.
205
+ */
206
+ export function listUserConfigConsent(
207
+ registryPath: string = REGISTRY_PATH,
208
+ ): Array<{ path: string; decision: ConsentDecision }> {
209
+ const registry = loadRegistry(registryPath);
210
+ const consent = registry.userConfig?.consent ?? {};
211
+ return Object.entries(consent)
212
+ .map(([p, decision]) => ({ path: p, decision }))
213
+ .sort((a, b) => a.path.localeCompare(b.path));
214
+ }
215
+
216
+ /**
217
+ * Revert a repo to undecided state. Returns true if a decision was removed.
218
+ */
219
+ export function clearUserConfigConsent(
220
+ rootDir: string,
221
+ registryPath: string = REGISTRY_PATH,
222
+ ): boolean {
223
+ const registry = loadRegistry(registryPath);
224
+ const absRoot = path.resolve(rootDir);
225
+ const consent = registry.userConfig?.consent;
226
+ if (!consent || !(absRoot in consent)) return false;
227
+ delete consent[absRoot];
228
+ saveRegistry(registry, registryPath);
229
+ return true;
230
+ }
231
+
163
232
  interface PrunedEntry {
164
233
  name: string;
165
234
  path: string;
@@ -173,19 +242,18 @@ interface PrunedEntry {
173
242
  *
174
243
  * When `dryRun` is true, entries are identified but not removed from disk.
175
244
  */
176
- export function pruneRegistry(
177
- registryPath: string = REGISTRY_PATH,
178
- ttlDays: number = DEFAULT_TTL_DAYS,
179
- excludeNames: string[] = [],
180
- dryRun = false,
245
+ /**
246
+ * Walk `registry.repos`, identify entries that are missing on disk or have
247
+ * exceeded the TTL, and optionally delete them (when `dryRun` is false).
248
+ * Returns the list of entries that were (or would be) pruned.
249
+ */
250
+ function pruneRepoEntries(
251
+ registry: Registry,
252
+ cutoff: number,
253
+ excludeSet: Set<string>,
254
+ dryRun: boolean,
181
255
  ): PrunedEntry[] {
182
- const registry = loadRegistry(registryPath);
183
256
  const pruned: PrunedEntry[] = [];
184
- const cutoff = Date.now() - ttlDays * 24 * 60 * 60 * 1000;
185
- const excludeSet = new Set(
186
- excludeNames.filter((n) => typeof n === 'string' && n.trim().length > 0),
187
- );
188
-
189
257
  for (const [name, entry] of Object.entries(registry.repos)) {
190
258
  if (excludeSet.has(name)) continue;
191
259
  if (!fs.existsSync(entry.path)) {
@@ -199,8 +267,45 @@ export function pruneRegistry(
199
267
  if (!dryRun) delete registry.repos[name];
200
268
  }
201
269
  }
270
+ return pruned;
271
+ }
272
+
273
+ /**
274
+ * Prune consent entries whose repo paths no longer exist on disk.
275
+ * Consent entries are TTL-exempt — only the missing-path rule applies.
276
+ * Returns true when at least one entry was removed.
277
+ */
278
+ function pruneConsentEntries(consent: Record<string, ConsentDecision>): boolean {
279
+ let changed = false;
280
+ for (const p of Object.keys(consent)) {
281
+ if (!fs.existsSync(p)) {
282
+ delete consent[p];
283
+ changed = true;
284
+ }
285
+ }
286
+ return changed;
287
+ }
288
+
289
+ export function pruneRegistry(
290
+ registryPath: string = REGISTRY_PATH,
291
+ ttlDays: number = DEFAULT_TTL_DAYS,
292
+ excludeNames: string[] = [],
293
+ dryRun = false,
294
+ ): PrunedEntry[] {
295
+ const registry = loadRegistry(registryPath);
296
+ const cutoff = Date.now() - ttlDays * 24 * 60 * 60 * 1000;
297
+ const excludeSet = new Set(
298
+ excludeNames.filter((n) => typeof n === 'string' && n.trim().length > 0),
299
+ );
300
+
301
+ const pruned = pruneRepoEntries(registry, cutoff, excludeSet, dryRun);
302
+
303
+ const consentChanged =
304
+ !dryRun && registry.userConfig?.consent
305
+ ? pruneConsentEntries(registry.userConfig.consent)
306
+ : false;
202
307
 
203
- if (!dryRun && pruned.length > 0) {
308
+ if (!dryRun && (pruned.length > 0 || consentChanged)) {
204
309
  saveRegistry(registry, registryPath);
205
310
  }
206
311
 
@@ -61,6 +61,33 @@ function saveCache(cache: UpdateCache, cachePath: string = CACHE_PATH): void {
61
61
  fs.renameSync(tmp, cachePath);
62
62
  }
63
63
 
64
+ /**
65
+ * Collect the full response body from an IncomingMessage stream.
66
+ * Resolves with the body string, or null on parse/status error.
67
+ */
68
+ function collectResponseBody(res: import('node:http').IncomingMessage): Promise<string | null> {
69
+ return new Promise((resolve) => {
70
+ if (res.statusCode !== 200) {
71
+ res.resume();
72
+ resolve(null);
73
+ return;
74
+ }
75
+ let body = '';
76
+ res.setEncoding('utf-8');
77
+ res.on('data', (chunk: string) => {
78
+ body += chunk;
79
+ });
80
+ res.on('end', () => {
81
+ try {
82
+ const data = JSON.parse(body);
83
+ resolve(typeof data.version === 'string' ? data.version : null);
84
+ } catch {
85
+ resolve(null);
86
+ }
87
+ });
88
+ });
89
+ }
90
+
64
91
  /**
65
92
  * Fetch the latest version string from the npm registry.
66
93
  * Returns the version string or null on failure.
@@ -71,24 +98,7 @@ function fetchLatestVersion(): Promise<string | null> {
71
98
  REGISTRY_URL,
72
99
  { timeout: FETCH_TIMEOUT_MS, headers: { Accept: 'application/json' } },
73
100
  (res) => {
74
- if (res.statusCode !== 200) {
75
- res.resume();
76
- resolve(null);
77
- return;
78
- }
79
- let body = '';
80
- res.setEncoding('utf-8');
81
- res.on('data', (chunk: string) => {
82
- body += chunk;
83
- });
84
- res.on('end', () => {
85
- try {
86
- const data = JSON.parse(body);
87
- resolve(typeof data.version === 'string' ? data.version : null);
88
- } catch {
89
- resolve(null);
90
- }
91
- });
101
+ collectResponseBody(res).then(resolve);
92
102
  },
93
103
  );
94
104
  req.on('error', () => resolve(null));
@@ -109,6 +119,32 @@ interface CheckForUpdatesOptions {
109
119
  _fetchLatest?: () => Promise<string | null>;
110
120
  }
111
121
 
122
+ /**
123
+ * Return the latest version from cache if fresh, or fetch it from the registry.
124
+ * Persists the fetched version to the cache only when a network fetch occurs
125
+ * (i.e. the cache is stale or missing). Returns the cached value directly
126
+ * without updating the cache when the cache is still within `CACHE_TTL_MS`.
127
+ * Returns null when the network fetch fails or the cache is corrupt.
128
+ */
129
+ async function resolveLatestVersion(
130
+ cachePath: string,
131
+ fetchFn: () => Promise<string | null>,
132
+ ): Promise<string | null> {
133
+ const cache = loadCache(cachePath);
134
+
135
+ if (cache && Date.now() - cache.lastCheckedAt < CACHE_TTL_MS) {
136
+ // Cache is fresh — use stored value directly
137
+ return cache.latestVersion;
138
+ }
139
+
140
+ // Cache is stale or missing — fetch from registry
141
+ const latest = await fetchFn();
142
+ if (!latest) return null;
143
+
144
+ saveCache({ lastCheckedAt: Date.now(), latestVersion: latest }, cachePath);
145
+ return latest;
146
+ }
147
+
112
148
  /**
113
149
  * Check whether a newer version of codegraph is available.
114
150
  *
@@ -129,23 +165,9 @@ export async function checkForUpdates(
129
165
  const fetchFn = options._fetchLatest || fetchLatestVersion;
130
166
 
131
167
  try {
132
- const cache = loadCache(cachePath);
133
-
134
- // Cache is fresh — use it
135
- if (cache && Date.now() - cache.lastCheckedAt < CACHE_TTL_MS) {
136
- if (semverCompare(currentVersion, cache.latestVersion) < 0) {
137
- return { current: currentVersion, latest: cache.latestVersion };
138
- }
139
- return null;
140
- }
141
-
142
- // Cache is stale or missing — fetch
143
- const latest = await fetchFn();
168
+ const latest = await resolveLatestVersion(cachePath, fetchFn);
144
169
  if (!latest) return null;
145
170
 
146
- // Update cache regardless of result
147
- saveCache({ lastCheckedAt: Date.now(), latestVersion: latest }, cachePath);
148
-
149
171
  if (semverCompare(currentVersion, latest) < 0) {
150
172
  return { current: currentVersion, latest };
151
173
  }
package/src/mcp/server.ts CHANGED
@@ -20,6 +20,7 @@ import type { CodegraphConfig, MCPServerOptions } from '../types.js';
20
20
  import { initMcpDefaults } from './middleware.js';
21
21
  import { buildToolList } from './tool-registry.js';
22
22
  import { TOOL_HANDLERS } from './tools/index.js';
23
+ import type { McpToolContext } from './types.js';
23
24
 
24
25
  /**
25
26
  * Module-level guard to register shutdown handlers only once per process.
@@ -28,14 +29,7 @@ import { TOOL_HANDLERS } from './tools/index.js';
28
29
  */
29
30
  let _activeServer: any = null;
30
31
 
31
- export interface McpToolContext {
32
- dbPath: string | undefined;
33
- getQueries(): Promise<any>;
34
- getDatabase(): any;
35
- findDbPath: typeof findDbPath;
36
- allowedRepos: string[] | undefined;
37
- MCP_MAX_LIMIT: number;
38
- }
32
+ export type { McpToolContext };
39
33
 
40
34
  interface MCPServerOptionsInternal extends MCPServerOptions {
41
35
  config?: CodegraphConfig;
@@ -1,6 +1,6 @@
1
1
  import type { ASTNodeKind } from '../../types.js';
2
2
  import { effectiveLimit, effectiveOffset } from '../middleware.js';
3
- import type { McpToolContext } from '../server.js';
3
+ import type { McpToolContext } from '../types.js';
4
4
 
5
5
  export const name = 'ast_query';
6
6
 
@@ -1,5 +1,5 @@
1
1
  import { effectiveOffset, MCP_DEFAULTS, MCP_MAX_LIMIT } from '../middleware.js';
2
- import type { McpToolContext } from '../server.js';
2
+ import type { McpToolContext } from '../types.js';
3
3
 
4
4
  export const name = 'audit';
5
5
 
@@ -1,4 +1,4 @@
1
- import type { McpToolContext } from '../server.js';
1
+ import type { McpToolContext } from '../types.js';
2
2
 
3
3
  export const name = 'batch_query';
4
4
 
@@ -1,4 +1,4 @@
1
- import type { McpToolContext } from '../server.js';
1
+ import type { McpToolContext } from '../types.js';
2
2
 
3
3
  export const name = 'branch_compare';
4
4
 
@@ -1,4 +1,4 @@
1
- import type { McpToolContext } from '../server.js';
1
+ import type { McpToolContext } from '../types.js';
2
2
 
3
3
  export const name = 'brief';
4
4
 
@@ -1,5 +1,5 @@
1
1
  import { effectiveOffset, MCP_DEFAULTS } from '../middleware.js';
2
- import type { McpToolContext } from '../server.js';
2
+ import type { McpToolContext } from '../types.js';
3
3
 
4
4
  export const name = 'cfg';
5
5
 
@@ -1,5 +1,5 @@
1
1
  import { effectiveOffset, MCP_DEFAULTS, MCP_MAX_LIMIT } from '../middleware.js';
2
- import type { McpToolContext } from '../server.js';
2
+ import type { McpToolContext } from '../types.js';
3
3
 
4
4
  export const name = 'check';
5
5
 
@@ -1,5 +1,5 @@
1
1
  import { effectiveLimit, effectiveOffset } from '../middleware.js';
2
- import type { McpToolContext } from '../server.js';
2
+ import type { McpToolContext } from '../types.js';
3
3
 
4
4
  export const name = 'co_changes';
5
5
 
@@ -1,4 +1,4 @@
1
- import type { McpToolContext } from '../server.js';
1
+ import type { McpToolContext } from '../types.js';
2
2
 
3
3
  export const name = 'code_owners';
4
4
 
@@ -1,5 +1,5 @@
1
1
  import { effectiveLimit, effectiveOffset } from '../middleware.js';
2
- import type { McpToolContext } from '../server.js';
2
+ import type { McpToolContext } from '../types.js';
3
3
 
4
4
  export const name = 'communities';
5
5
 
@@ -1,5 +1,5 @@
1
1
  import { effectiveLimit, effectiveOffset } from '../middleware.js';
2
- import type { McpToolContext } from '../server.js';
2
+ import type { McpToolContext } from '../types.js';
3
3
 
4
4
  export const name = 'complexity';
5
5
 
@@ -1,5 +1,5 @@
1
1
  import { effectiveLimit, effectiveOffset } from '../middleware.js';
2
- import type { McpToolContext } from '../server.js';
2
+ import type { McpToolContext } from '../types.js';
3
3
 
4
4
  export const name = 'context';
5
5
 
@@ -1,5 +1,5 @@
1
1
  import { effectiveOffset, MCP_DEFAULTS } from '../middleware.js';
2
- import type { McpToolContext } from '../server.js';
2
+ import type { McpToolContext } from '../types.js';
3
3
 
4
4
  export const name = 'dataflow';
5
5
 
@@ -1,5 +1,5 @@
1
1
  import { effectiveLimit, effectiveOffset } from '../middleware.js';
2
- import type { McpToolContext } from '../server.js';
2
+ import type { McpToolContext } from '../types.js';
3
3
 
4
4
  export const name = 'diff_impact';
5
5
 
@@ -1,5 +1,5 @@
1
1
  import { effectiveLimit, effectiveOffset } from '../middleware.js';
2
- import type { McpToolContext } from '../server.js';
2
+ import type { McpToolContext } from '../types.js';
3
3
 
4
4
  export const name = 'execution_flow';
5
5
 
@@ -1,6 +1,6 @@
1
1
  import { findDbPath } from '../../db/index.js';
2
2
  import { effectiveOffset, MCP_DEFAULTS, MCP_MAX_LIMIT } from '../middleware.js';
3
- import type { McpToolContext } from '../server.js';
3
+ import type { McpToolContext } from '../types.js';
4
4
 
5
5
  export const name = 'export_graph';
6
6
 
@@ -1,5 +1,5 @@
1
1
  import { effectiveLimit, effectiveOffset } from '../middleware.js';
2
- import type { McpToolContext } from '../server.js';
2
+ import type { McpToolContext } from '../types.js';
3
3
 
4
4
  export const name = 'file_deps';
5
5
 
@@ -1,5 +1,5 @@
1
1
  import { effectiveLimit, effectiveOffset } from '../middleware.js';
2
- import type { McpToolContext } from '../server.js';
2
+ import type { McpToolContext } from '../types.js';
3
3
 
4
4
  export const name = 'file_exports';
5
5
 
@@ -1,6 +1,6 @@
1
1
  import { findDbPath } from '../../db/index.js';
2
2
  import { findCycles } from '../../domain/graph/cycles.js';
3
- import type { McpToolContext } from '../server.js';
3
+ import type { McpToolContext } from '../types.js';
4
4
 
5
5
  export const name = 'find_cycles';
6
6
 
@@ -1,5 +1,5 @@
1
1
  import { effectiveLimit, effectiveOffset } from '../middleware.js';
2
- import type { McpToolContext } from '../server.js';
2
+ import type { McpToolContext } from '../types.js';
3
3
 
4
4
  export const name = 'fn_impact';
5
5
 
@@ -1,4 +1,4 @@
1
- import type { McpToolContext } from '../server.js';
1
+ import type { McpToolContext } from '../types.js';
2
2
 
3
3
  export const name = 'impact_analysis';
4
4
 
@@ -1,5 +1,5 @@
1
1
  import { effectiveLimit, effectiveOffset } from '../middleware.js';
2
- import type { McpToolContext } from '../server.js';
2
+ import type { McpToolContext } from '../types.js';
3
3
 
4
4
  export const name = 'implementations';
5
5
 
@@ -2,12 +2,9 @@
2
2
  * Barrel module — registers all MCP tool handlers.
3
3
  */
4
4
 
5
- import type { McpToolContext } from '../server.js';
5
+ import type { McpToolHandler } from '../types.js';
6
6
 
7
- export interface McpToolHandler {
8
- name: string;
9
- handler(args: any, ctx: McpToolContext): Promise<unknown>;
10
- }
7
+ export type { McpToolContext, McpToolHandler } from '../types.js';
11
8
 
12
9
  import * as astQuery from './ast-query.js';
13
10
  import * as audit from './audit.js';
@@ -1,5 +1,5 @@
1
1
  import { effectiveLimit, effectiveOffset } from '../middleware.js';
2
- import type { McpToolContext } from '../server.js';
2
+ import type { McpToolContext } from '../types.js';
3
3
 
4
4
  export const name = 'interfaces';
5
5
 
@@ -1,5 +1,5 @@
1
1
  import { effectiveLimit, effectiveOffset } from '../middleware.js';
2
- import type { McpToolContext } from '../server.js';
2
+ import type { McpToolContext } from '../types.js';
3
3
 
4
4
  export const name = 'list_functions';
5
5
 
@@ -1,4 +1,4 @@
1
- import type { McpToolContext } from '../server.js';
1
+ import type { McpToolContext } from '../types.js';
2
2
 
3
3
  export const name = 'list_repos';
4
4
 
@@ -1,4 +1,4 @@
1
- import type { McpToolContext } from '../server.js';
1
+ import type { McpToolContext } from '../types.js';
2
2
 
3
3
  export const name = 'module_map';
4
4
 
@@ -1,5 +1,5 @@
1
1
  import { effectiveLimit, effectiveOffset } from '../middleware.js';
2
- import type { McpToolContext } from '../server.js';
2
+ import type { McpToolContext } from '../types.js';
3
3
 
4
4
  export const name = 'node_roles';
5
5
 
@@ -1,4 +1,4 @@
1
- import type { McpToolContext } from '../server.js';
1
+ import type { McpToolContext } from '../types.js';
2
2
 
3
3
  export const name = 'path';
4
4
 
@@ -1,5 +1,5 @@
1
1
  import { effectiveOffset, MCP_DEFAULTS } from '../middleware.js';
2
- import type { McpToolContext } from '../server.js';
2
+ import type { McpToolContext } from '../types.js';
3
3
 
4
4
  export const name = 'query';
5
5
 
@@ -1,5 +1,5 @@
1
1
  import { effectiveOffset, MCP_DEFAULTS } from '../middleware.js';
2
- import type { McpToolContext } from '../server.js';
2
+ import type { McpToolContext } from '../types.js';
3
3
 
4
4
  export const name = 'semantic_search';
5
5
 
@@ -1,5 +1,5 @@
1
1
  import { effectiveOffset, MCP_DEFAULTS } from '../middleware.js';
2
- import type { McpToolContext } from '../server.js';
2
+ import type { McpToolContext } from '../types.js';
3
3
 
4
4
  export const name = 'sequence';
5
5
 
@@ -1,5 +1,5 @@
1
1
  import { effectiveLimit, effectiveOffset } from '../middleware.js';
2
- import type { McpToolContext } from '../server.js';
2
+ import type { McpToolContext } from '../types.js';
3
3
 
4
4
  export const name = 'structure';
5
5
 
@@ -1,5 +1,5 @@
1
1
  import { effectiveOffset, MCP_DEFAULTS } from '../middleware.js';
2
- import type { McpToolContext } from '../server.js';
2
+ import type { McpToolContext } from '../types.js';
3
3
 
4
4
  export const name = 'symbol_children';
5
5
 
@@ -1,6 +1,6 @@
1
1
  import type { Role } from '../../types.js';
2
2
  import { effectiveLimit, effectiveOffset, MCP_DEFAULTS, MCP_MAX_LIMIT } from '../middleware.js';
3
- import type { McpToolContext } from '../server.js';
3
+ import type { McpToolContext } from '../types.js';
4
4
 
5
5
  export const name = 'triage';
6
6
 
@@ -1,5 +1,5 @@
1
1
  import { effectiveLimit, effectiveOffset } from '../middleware.js';
2
- import type { McpToolContext } from '../server.js';
2
+ import type { McpToolContext } from '../types.js';
3
3
 
4
4
  export const name = 'where';
5
5
 
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Shared MCP types used by server.ts and all tool modules.
3
+ * Extracted here to break the circular dependency between server.ts and tools/index.ts.
4
+ */
5
+
6
+ import type Database from 'better-sqlite3';
7
+ import type { findDbPath } from '../db/index.js';
8
+
9
+ export interface McpToolContext {
10
+ dbPath: string | undefined;
11
+ getQueries(): Promise<any>;
12
+ getDatabase(): typeof Database;
13
+ findDbPath: typeof findDbPath;
14
+ allowedRepos: string[] | undefined;
15
+ MCP_MAX_LIMIT: number;
16
+ }
17
+
18
+ export interface McpToolHandler {
19
+ name: string;
20
+ handler(args: any, ctx: McpToolContext): Promise<unknown>;
21
+ }
@@ -9,5 +9,5 @@ export {
9
9
  queryName,
10
10
  where,
11
11
  } from './inspect.js';
12
- export { moduleMap, roles, stats } from './overview.js';
12
+ export { dynamicCalls, moduleMap, roles, stats } from './overview.js';
13
13
  export { symbolPath } from './path.js';