@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
@@ -5,215 +5,133 @@
5
5
  * Both callers supply a `CallNodeLookup` adapter that abstracts their
6
6
  * node-lookup mechanism (pre-loaded Maps vs. per-query SQLite statements).
7
7
  * The resolution logic lives here exactly once.
8
+ *
9
+ * `resolveByMethodOrGlobal` delegates its two branches to strategy helpers
10
+ * in `../resolver/strategy.ts` to keep per-strategy complexity manageable.
8
11
  */
9
12
  import { computeConfidence } from '../resolve.js';
13
+ import { isModuleScopedLanguage, resolveByGlobal, resolveByReceiver, } from '../resolver/strategy.js';
10
14
  export const RECEIVER_KINDS = new Set(['class', 'struct', 'interface', 'type', 'module']);
15
+ // Re-export so consumers that import isModuleScopedLanguage from this module
16
+ // continue to work without changes (build-edges.ts, etc.).
17
+ export { isModuleScopedLanguage };
18
+ // ── Shared resolution functions ──────────────────────────────────────────
11
19
  /**
12
- * Languages where bare `foo()` calls inside a class method are lexically scoped
13
- * to the module, not the class there is no implicit this/class binding.
14
- * For these languages, the same-class fallback must not run for bare (no-receiver)
15
- * calls that found no exact same-file match.
20
+ * Callable definition kinds variable/constant bindings are NOT callable
21
+ * in the function-as-enclosing-scope sense (they are local declarations, not
22
+ * function bodies). Top-level variable bindings (e.g. Haskell `main = do …`)
23
+ * are handled separately as a fallback tier.
16
24
  */
17
- const MODULE_SCOPED_BARE_CALL_EXTENSIONS = new Set([
18
- '.js',
19
- '.mjs',
20
- '.cjs',
21
- '.jsx',
22
- '.ts',
23
- '.tsx',
24
- '.mts',
25
- '.cts',
26
- ]);
27
- export function isModuleScopedLanguage(relPath) {
28
- const ext = relPath.slice(relPath.lastIndexOf('.'));
29
- return MODULE_SCOPED_BARE_CALL_EXTENSIONS.has(ext);
30
- }
31
- // ── Shared resolution functions ──────────────────────────────────────────
32
- export function findCaller(lookup, call, definitions, relPath, fileNodeRow) {
33
- let caller = null;
34
- let callerName = null;
35
- let callerSpan = Infinity;
25
+ const CALLABLE_KINDS = new Set(['function', 'method']);
26
+ /**
27
+ * Variable-like binding kinds that may act as top-level callers when no
28
+ * enclosing function/method exists (e.g. Haskell top-level `main` is a
29
+ * `bind` node → kind `variable`). Local variable declarations inside a
30
+ * function body must NOT win over the enclosing function.
31
+ */
32
+ const TOP_LEVEL_BINDING_KINDS = new Set(['variable', 'constant']);
33
+ /**
34
+ * Find the narrowest enclosing function/method definition for `callLine`.
35
+ * Returns the DB node and name, or null if none encloses the call.
36
+ */
37
+ function findEnclosingCallable(lookup, callLine, definitions, relPath) {
38
+ let best = null;
39
+ let bestSpan = Infinity;
36
40
  for (const def of definitions) {
37
- if (def.line <= call.line) {
38
- const end = def.endLine || Infinity;
39
- if (call.line <= end) {
40
- const span = end - def.line;
41
- if (span < callerSpan) {
42
- const row = lookup.nodeId(def.name, def.kind, relPath, def.line);
43
- if (row) {
44
- caller = row;
45
- callerName = def.name;
46
- callerSpan = span;
47
- }
48
- }
41
+ if (!CALLABLE_KINDS.has(def.kind))
42
+ continue;
43
+ if (def.line > callLine)
44
+ continue;
45
+ const end = def.endLine ?? Infinity;
46
+ if (callLine > end)
47
+ continue;
48
+ const span = end === Infinity ? Infinity : end - def.line;
49
+ if (span < bestSpan) {
50
+ const row = lookup.nodeId(def.name, def.kind, relPath, def.line);
51
+ if (row) {
52
+ best = { ...row, name: def.name };
53
+ bestSpan = span;
49
54
  }
50
55
  }
51
56
  }
52
- return { ...(caller ?? fileNodeRow), callerName };
57
+ return best;
53
58
  }
54
- export function resolveByMethodOrGlobal(lookup, call, relPath, typeMap, callerName) {
55
- if (call.receiver) {
56
- // Strip "this." so `this.repo.method()` resolves via typeMap["repo"]
57
- // (or the "this.repo" key seeded directly by the TSC property-declaration enricher).
58
- const effectiveReceiver = call.receiver.startsWith('this.')
59
- ? call.receiver.slice('this.'.length)
60
- : call.receiver;
61
- // For this.prop receivers, also try the class-scoped key (ClassName.prop) seeded by
62
- // handlePropWriteTypeMap prevents false edges when multiple classes define the same
63
- // property name (issue #1323).
64
- let typeEntry = typeMap.get(effectiveReceiver) ??
65
- typeMap.get(call.receiver) ??
66
- // Phase 8.3f: callee-scoped rest-param key (`callee::restName`) to avoid
67
- // same-name rest-binding collision across functions in the same file (#1358).
68
- (callerName ? typeMap.get(`${callerName}::${effectiveReceiver}`) : undefined);
69
- if (!typeEntry && call.receiver.startsWith('this.') && callerName) {
70
- const dotIdx = callerName.lastIndexOf('.');
71
- if (dotIdx > -1) {
72
- const callerClass = callerName.slice(0, dotIdx);
73
- typeEntry = typeMap.get(`${callerClass}.${effectiveReceiver}`);
74
- }
75
- }
76
- let typeName = typeEntry
77
- ? typeof typeEntry === 'string'
78
- ? typeEntry
79
- : typeEntry.type
80
- : null;
81
- // Belt-and-suspenders fallback for inline new-expression receivers that
82
- // extractReceiverName did not normalise (e.g. raw text leaked from an
83
- // unhandled AST node type). extractReceiverName already handles the common
84
- // `new_expression` / `parenthesized_expression(new_expression)` shapes by
85
- // returning the constructor name directly, so this branch is exercised only
86
- // by future node types or constructs that fall through to the raw-text path.
87
- // The uppercase-initial restriction ([A-Z_$]) is a heuristic to distinguish
88
- // constructors (PascalCase) from regular functions and avoids false positives
89
- // on `(new xmlParser()).parse()` style calls.
90
- if (!typeName && call.receiver) {
91
- const m = /^\(?\s*new\s+([A-Z_$][A-Za-z0-9_$]*)/.exec(call.receiver);
92
- if (m?.[1])
93
- typeName = m[1];
94
- }
95
- if (typeName) {
96
- const typed = lookup
97
- .byName(`${typeName}.${call.name}`)
98
- .filter((n) => n.kind === 'method' && computeConfidence(relPath, n.file, null) >= 0.5);
99
- if (typed.length > 0)
100
- return typed;
101
- // Prototype alias: `Foo.prototype.bar = identifier` seeds typeMap['Foo.bar'] = { type: identifier }.
102
- // Checked after the symbol-DB lookup so an actual method definition always wins.
103
- const protoEntry = typeMap.get(`${typeName}.${call.name}`);
104
- const protoTarget = protoEntry
105
- ? typeof protoEntry === 'string'
106
- ? protoEntry
107
- : protoEntry.type
108
- : null;
109
- if (protoTarget) {
110
- const resolved = lookup
111
- .byName(protoTarget)
112
- .filter((t) => computeConfidence(relPath, t.file, null) >= 0.5);
113
- if (resolved.length > 0)
114
- return resolved;
59
+ /**
60
+ * Find the widest (outermost) enclosing variable/constant binding for `callLine`.
61
+ * Used as fallback for top-level bindings (e.g. Haskell `main = do …`).
62
+ * We pick the WIDEST span so that nested `let` bindings inside `main`'s
63
+ * do-block do not shadow `main` itself as the attributing caller.
64
+ */
65
+ function findEnclosingBinding(lookup, callLine, definitions, relPath) {
66
+ let best = null;
67
+ let bestSpan = -1; // looking for WIDEST span, so start at -1
68
+ for (const def of definitions) {
69
+ if (!TOP_LEVEL_BINDING_KINDS.has(def.kind))
70
+ continue;
71
+ if (def.line > callLine)
72
+ continue;
73
+ const end = def.endLine ?? Infinity;
74
+ if (callLine > end)
75
+ continue;
76
+ const span = end === Infinity ? Infinity : end - def.line;
77
+ if (span > bestSpan) {
78
+ const row = lookup.nodeId(def.name, def.kind, relPath, def.line);
79
+ if (row) {
80
+ best = { ...row, name: def.name };
81
+ bestSpan = span;
115
82
  }
116
83
  }
117
- // Direct qualified method lookup: ClassName.staticMethod() or ClassName.instanceMethod()
118
- // when the receiver is a class name with no typeMap entry. Handles static method calls
119
- // like `C6.staticMethod()` or `D.d()` where the receiver IS the class.
120
- // Matches both 'method' and 'function' kinds to cover field-initializer synthetic defs.
121
- if (!typeName) {
122
- const qualifiedName = `${effectiveReceiver}.${call.name}`;
123
- const direct = lookup
124
- .byName(qualifiedName)
125
- .filter((n) => (n.kind === 'method' || n.kind === 'function') &&
126
- computeConfidence(relPath, n.file, null) >= 0.5);
127
- if (direct.length > 0)
128
- return direct;
129
- }
130
- // Phase 8.3d: composite pts key `obj.prop = fn` seeds typeMap['obj.prop'] = { type: 'fn' }.
131
- // When a call site references `obj.prop` as a callback, resolve directly to the target fn.
132
- const compositeEntry = typeMap.get(`${call.receiver}.${call.name}`);
133
- const ptsTarget = compositeEntry
134
- ? typeof compositeEntry === 'string'
135
- ? compositeEntry
136
- : compositeEntry.type
137
- : null;
138
- if (ptsTarget) {
139
- const resolved = lookup
140
- .byName(ptsTarget)
141
- .filter((t) => computeConfidence(relPath, t.file, null) >= 0.5);
142
- if (resolved.length > 0)
143
- return resolved;
144
- }
84
+ }
85
+ return best;
86
+ }
87
+ export function findCaller(lookup, call, definitions, relPath, fileNodeRow) {
88
+ // Pass 1: find the narrowest enclosing function/method.
89
+ const fnCaller = findEnclosingCallable(lookup, call.line, definitions, relPath);
90
+ // Prefer function/method enclosing scope over variable binding.
91
+ // Only fall back to a variable/constant binding when the call is at
92
+ // top-level scope (no enclosing function/method found), which handles
93
+ // languages like Haskell where `main` is a top-level `bind` node.
94
+ if (fnCaller) {
95
+ return { id: fnCaller.id, callerName: fnCaller.name };
96
+ }
97
+ // Pass 2: find the widest (outermost) enclosing variable/constant binding.
98
+ const varCaller = findEnclosingBinding(lookup, call.line, definitions, relPath);
99
+ if (varCaller) {
100
+ return { id: varCaller.id, callerName: varCaller.name };
101
+ }
102
+ return { ...fileNodeRow, callerName: null };
103
+ }
104
+ /**
105
+ * Dispatcher for call-site resolution.
106
+ *
107
+ * Delegates to two strategy helpers (in `../resolver/strategy.ts`) to keep
108
+ * each branch independently readable and under the complexity threshold:
109
+ * - resolveByReceiver — receiver is a concrete object/class reference
110
+ * - resolveByGlobal — bare call, or this/self/super receiver
111
+ *
112
+ * The original logic is unchanged; only the physical location moved.
113
+ */
114
+ export function resolveByMethodOrGlobal(lookup, call, relPath, typeMap, callerName) {
115
+ if (call.receiver &&
116
+ call.receiver !== 'this' &&
117
+ call.receiver !== 'self' &&
118
+ call.receiver !== 'super') {
119
+ return resolveByReceiver(lookup, call, relPath, typeMap, callerName);
145
120
  }
146
121
  if (!call.receiver ||
147
122
  call.receiver === 'this' ||
148
123
  call.receiver === 'self' ||
149
124
  call.receiver === 'super') {
150
- // Phase 8.3f: accessor this-dispatch via Object.defineProperty.
151
- // When a plain function (no class prefix) is registered as a get/set accessor for `obj`
152
- // via Object.defineProperty, typeMap seeds 'callerName:this' = 'obj'.
153
- // We then resolve this.method() → typeMap['obj.method'] → the concrete definition.
154
- // This runs before the broad exact-name lookup to avoid false positives from
155
- // unrelated same-file definitions.
156
- if (call.receiver === 'this' && callerName && !callerName.includes('.')) {
157
- const accessorThisEntry = typeMap.get(`${callerName}:this`);
158
- const objName = accessorThisEntry
159
- ? typeof accessorThisEntry === 'string'
160
- ? accessorThisEntry
161
- : accessorThisEntry.type
162
- : null;
163
- if (objName) {
164
- const objMethodEntry = typeMap.get(`${objName}.${call.name}`);
165
- const targetFn = objMethodEntry
166
- ? typeof objMethodEntry === 'string'
167
- ? objMethodEntry
168
- : objMethodEntry.type
169
- : null;
170
- if (targetFn) {
171
- const resolved = lookup
172
- .byName(targetFn)
173
- .filter((t) => computeConfidence(relPath, t.file, null) >= 0.5);
174
- if (resolved.length > 0)
175
- return resolved;
176
- }
177
- }
178
- }
179
- const exact = lookup
180
- .byName(call.name)
181
- .filter((t) => computeConfidence(relPath, t.file, null) >= 0.5);
182
- if (exact.length > 0)
183
- return exact;
184
- // Try same-class method lookup via callerName.
185
- // e.g. `this.area()` inside `Shape.describe` → try `Shape.area`.
186
- // Also covers no-receiver calls inside class methods, e.g. `IsValidEmail(x)` inside
187
- // `Validators.ValidateUser` → try `Validators.IsValidEmail` (C#/Java static siblings).
188
- // This seeds the initial edge that runChaPostPass later expands to subclass overrides.
189
- //
190
- // For JS/TS, bare (no-receiver) calls are module-scoped — there is no implicit class
191
- // binding. Skip the same-class fallback for bare calls in those languages to prevent
192
- // false positives (e.g. `flush()` inside `Processor.run` must not resolve to
193
- // `Processor.flush`). this.method() calls are unaffected: they still reach the fallback
194
- // because `call.receiver === 'this'` is truthy, not a bare call.
195
- const isBareCall = !call.receiver;
196
- if (callerName && !(isBareCall && isModuleScopedLanguage(relPath))) {
197
- const dotIdx = callerName.lastIndexOf('.');
198
- if (dotIdx > -1) {
199
- // Extract only the segment immediately before the method name so that
200
- // 'Namespace.ClassName.method' yields 'ClassName', not 'Namespace.ClassName'.
201
- // Symbols are stored under their bare class name, not their qualified path.
202
- const prevDot = callerName.lastIndexOf('.', dotIdx - 1);
203
- const callerClass = callerName.slice(prevDot + 1, dotIdx);
204
- const qualifiedName = `${callerClass}.${call.name}`;
205
- const sameClass = lookup
206
- .byName(qualifiedName)
207
- .filter((t) => t.kind === 'method' && computeConfidence(relPath, t.file, null) >= 0.5);
208
- if (sameClass.length > 0)
209
- return sameClass;
210
- }
211
- }
212
- return exact; // empty
125
+ return resolveByGlobal(lookup, call, relPath, typeMap, callerName);
213
126
  }
214
127
  return [];
215
128
  }
216
129
  export function resolveCallTargets(lookup, call, relPath, importedNames, typeMap, callerName) {
130
+ // Flagged dynamic calls use synthetic names like '<dynamic:eval>'. Short-circuit
131
+ // so they never accidentally match a real symbol via lookup.byName.
132
+ if (call.name.startsWith('<dynamic:')) {
133
+ return { targets: [], importedFrom: undefined };
134
+ }
217
135
  const importedFrom = importedNames.get(call.name);
218
136
  let targets;
219
137
  if (importedFrom) {
@@ -246,15 +164,19 @@ export function resolveCallTargets(lookup, call, relPath, importedNames, typeMap
246
164
  * Returns the edge tuple to insert, or null if nothing matched or the edge
247
165
  * was already seen. Callers are responsible for the actual DB/array insert.
248
166
  *
249
- * Receiver resolution collects all same-file candidates first (no kind
250
- * filter), falls back to global candidates only when the same-file set is
251
- * entirely empty, then filters the chosen set by RECEIVER_KINDS. This
252
- * matches the native Rust build path: if a file imports a name that happens
253
- * to be emitted as `kind='function'` in the importer, the same-file set is
254
- * non-empty and blocks the global fallback, so no receiver edge is emitted.
255
- * Keeping this behaviour identical to the Rust path maintains engine parity.
167
+ * Receiver resolution:
168
+ * 1. Look up same-file nodes for `effectiveReceiver` (unfiltered by kind).
169
+ * 2. If any same-file node exists AND `effectiveReceiver` is not in `importedNames`
170
+ * (i.e. it is a locally-defined symbol, not an import artifact), apply
171
+ * RECEIVER_KINDS and return the filtered set no global fallback.
172
+ * A local `function C(){}` means this file owns `C`; no cross-file class
173
+ * should win over it (issue #1539).
174
+ * 3. If the same-file node IS an import artifact (e.g. destructured require),
175
+ * or no same-file node exists at all, fall back to global candidates filtered
176
+ * by RECEIVER_KINDS. This preserves the pre-#1539 behaviour for cases where
177
+ * an imported name appears as kind='function' in the importer file.
256
178
  */
257
- export function resolveReceiverEdge(lookup, call, caller, relPath, typeMap, seenCallEdges) {
179
+ export function resolveReceiverEdge(lookup, call, caller, relPath, typeMap, seenCallEdges, importedNames) {
258
180
  const typeEntry = typeMap.get(call.receiver);
259
181
  const typeName = typeEntry
260
182
  ? typeof typeEntry === 'string'
@@ -265,15 +187,13 @@ export function resolveReceiverEdge(lookup, call, caller, relPath, typeMap, seen
265
187
  ? (typeEntry.confidence ?? null)
266
188
  : null;
267
189
  const effectiveReceiver = typeName || call.receiver;
268
- // Filter-before: apply RECEIVER_KINDS to same-file candidates first, then
269
- // fall back to global candidates (also filtered) only when same-file yields
270
- // nothing. This prevents an imported name emitted as kind='function' in the
271
- // importing file from blocking the fallback to the actual class/struct/etc.
272
- // node in the defining file.
273
- const sameFileCandidates = lookup
274
- .byNameAndFile(effectiveReceiver, relPath)
275
- .filter((n) => RECEIVER_KINDS.has(n.kind ?? ''));
276
- const candidates = sameFileCandidates.length > 0
190
+ // Block global fallback only when the same-file node is a local definition,
191
+ // not when it's an import artifact (e.g. `const { C } = require(…)` seeds a
192
+ // kind='function' node in the importer but the real class lives elsewhere).
193
+ const sameFileAll = lookup.byNameAndFile(effectiveReceiver, relPath);
194
+ const isLocalDefinition = sameFileAll.length > 0 && !importedNames?.has(effectiveReceiver);
195
+ const sameFileCandidates = sameFileAll.filter((n) => RECEIVER_KINDS.has(n.kind ?? ''));
196
+ const candidates = isLocalDefinition
277
197
  ? sameFileCandidates
278
198
  : lookup.byName(effectiveReceiver).filter((n) => RECEIVER_KINDS.has(n.kind ?? ''));
279
199
  if (candidates.length === 0)
@@ -1 +1 @@
1
- {"version":3,"file":"call-resolver.js","sourceRoot":"","sources":["../../../../src/domain/graph/builder/call-resolver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"call-resolver.js","sourceRoot":"","sources":["../../../../src/domain/graph/builder/call-resolver.ts"],"names":[],"mappings":"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"}
@@ -37,8 +37,16 @@ export declare function buildChaContext(fileSymbols: ReadonlyMap<string, Extract
37
37
  * For `super`, resolution starts from the parent of the caller's class.
38
38
  * For `this`/`self`, resolution starts from the caller's own class and walks
39
39
  * up the inheritance chain (supporting inherited method lookup).
40
+ *
41
+ * When `callerFile` is provided, same-file method nodes are preferred: if the
42
+ * hierarchy walk finds a qualified method that exists in both the caller's own
43
+ * file AND in unrelated files (e.g. a class named `A` that appears in multiple
44
+ * fixture files), only the same-file nodes are returned. This prevents
45
+ * cross-fixture false edges caused by accidental name collisions across
46
+ * unrelated files in the same project build. When no same-file nodes exist,
47
+ * all found nodes are returned as before.
40
48
  */
41
- export declare function resolveThisDispatch(methodName: string, callerName: string | null, receiver: 'this' | 'self' | 'super', chaCtx: ChaContext, lookup: CallNodeLookup): ReadonlyArray<{
49
+ export declare function resolveThisDispatch(methodName: string, callerName: string | null, receiver: 'this' | 'self' | 'super', chaCtx: ChaContext, lookup: CallNodeLookup, callerFile?: string | null): ReadonlyArray<{
42
50
  id: number;
43
51
  file: string;
44
52
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"cha.d.ts","sourceRoot":"","sources":["../../../../src/domain/graph/builder/cha.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAIzD,MAAM,WAAW,UAAU;IACzB,0EAA0E;IAC1E,QAAQ,CAAC,YAAY,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC;IAC9D,6DAA6D;IAC7D,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9C,wEAAwE;IACxE,QAAQ,CAAC,iBAAiB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACjD;AAED,eAAO,MAAM,iBAAiB,EAAE,UAI/B,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,UAAU,CA8C7F;AAID;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GAAG,IAAI,EACzB,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,EACnC,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE,cAAc,GACrB,aAAa,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAoB7C;AAID;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE,cAAc,GACrB,aAAa,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CA4B7C"}
1
+ {"version":3,"file":"cha.d.ts","sourceRoot":"","sources":["../../../../src/domain/graph/builder/cha.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAIzD,MAAM,WAAW,UAAU;IACzB,0EAA0E;IAC1E,QAAQ,CAAC,YAAY,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC;IAC9D,6DAA6D;IAC7D,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9C,wEAAwE;IACxE,QAAQ,CAAC,iBAAiB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACjD;AAED,eAAO,MAAM,iBAAiB,EAAE,UAI/B,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,UAAU,CA8C7F;AAID;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GAAG,IAAI,EACzB,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,EACnC,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE,cAAc,EACtB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,GACzB,aAAa,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CA4B7C;AAID;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE,cAAc,GACrB,aAAa,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CA4B7C"}
@@ -78,8 +78,16 @@ export function buildChaContext(fileSymbols) {
78
78
  * For `super`, resolution starts from the parent of the caller's class.
79
79
  * For `this`/`self`, resolution starts from the caller's own class and walks
80
80
  * up the inheritance chain (supporting inherited method lookup).
81
+ *
82
+ * When `callerFile` is provided, same-file method nodes are preferred: if the
83
+ * hierarchy walk finds a qualified method that exists in both the caller's own
84
+ * file AND in unrelated files (e.g. a class named `A` that appears in multiple
85
+ * fixture files), only the same-file nodes are returned. This prevents
86
+ * cross-fixture false edges caused by accidental name collisions across
87
+ * unrelated files in the same project build. When no same-file nodes exist,
88
+ * all found nodes are returned as before.
81
89
  */
82
- export function resolveThisDispatch(methodName, callerName, receiver, chaCtx, lookup) {
90
+ export function resolveThisDispatch(methodName, callerName, receiver, chaCtx, lookup, callerFile) {
83
91
  if (!callerName)
84
92
  return [];
85
93
  const dotIdx = callerName.indexOf('.');
@@ -96,8 +104,15 @@ export function resolveThisDispatch(methodName, callerName, receiver, chaCtx, lo
96
104
  visited.add(current);
97
105
  const qualified = `${current}.${methodName}`;
98
106
  const found = lookup.byName(qualified).filter((n) => n.kind === 'method');
99
- if (found.length > 0)
107
+ if (found.length > 0) {
108
+ // When the caller's file is known, prefer same-file nodes to avoid
109
+ // emitting cross-file edges to identically-named methods in unrelated
110
+ // files. Only fall back to the full set when no same-file node exists.
111
+ if (callerFile && found.some((n) => n.file === callerFile)) {
112
+ return found.filter((n) => n.file === callerFile);
113
+ }
100
114
  return found;
115
+ }
101
116
  current = chaCtx.parents.get(current);
102
117
  }
103
118
  return [];
@@ -1 +1 @@
1
- {"version":3,"file":"cha.js","sourceRoot":"","sources":["../../../../src/domain/graph/builder/cha.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cha.js","sourceRoot":"","sources":["../../../../src/domain/graph/builder/cha.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAgBH,MAAM,CAAC,MAAM,iBAAiB,GAAe;IAC3C,YAAY,EAAE,IAAI,GAAG,EAAE;IACvB,OAAO,EAAE,IAAI,GAAG,EAAE;IAClB,iBAAiB,EAAE,IAAI,GAAG,EAAE;CAC7B,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,WAAiD;IAC/E,MAAM,YAAY,GAAG,IAAI,GAAG,EAAoB,CAAC;IACjD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC1C,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAU,CAAC;IAE5C,KAAK,MAAM,OAAO,IAAI,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC;QAC3C,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YAClC,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;gBACnB,IAAI,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBAC5C,IAAI,CAAC,IAAI,EAAE,CAAC;oBACV,IAAI,GAAG,EAAE,CAAC;oBACV,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;gBACzC,CAAC;gBACD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;oBAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACpD,CAAC;YACD,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;gBAChB,oDAAoD;gBACpD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;oBAAE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;gBAC/D,6DAA6D;gBAC7D,IAAI,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBACzC,IAAI,CAAC,IAAI,EAAE,CAAC;oBACV,IAAI,GAAG,EAAE,CAAC;oBACV,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;gBACtC,CAAC;gBACD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;oBAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACpD,CAAC;QACH,CAAC;QAED,2EAA2E;QAC3E,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;YAC3B,KAAK,MAAM,QAAQ,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;gBAC9C,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QACD,2EAA2E;QAC3E,0EAA0E;QAC1E,IAAI,OAAO,CAAC,OAAO,YAAY,GAAG,EAAE,CAAC;YACnC,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;gBAC7C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,UAAU,IAAI,GAAG,EAAE,CAAC;oBACzD,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACpC,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC;AACtD,CAAC;AAED,+EAA+E;AAE/E;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,mBAAmB,CACjC,UAAkB,EAClB,UAAyB,EACzB,QAAmC,EACnC,MAAkB,EAClB,MAAsB,EACtB,UAA0B;IAE1B,IAAI,CAAC,UAAU;QAAE,OAAO,EAAE,CAAC;IAC3B,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACvC,IAAI,MAAM,KAAK,CAAC,CAAC;QAAE,OAAO,EAAE,CAAC;IAE7B,MAAM,WAAW,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAChD,MAAM,UAAU,GAAG,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;IACxF,IAAI,CAAC,UAAU;QAAE,OAAO,EAAE,CAAC;IAE3B,kFAAkF;IAClF,IAAI,OAAO,GAAuB,UAAU,CAAC;IAC7C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,OAAO,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACrB,MAAM,SAAS,GAAG,GAAG,OAAO,IAAI,UAAU,EAAE,CAAC;QAC7C,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;QAC1E,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,mEAAmE;YACnE,sEAAsE;YACtE,wEAAwE;YACxE,IAAI,UAAU,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,EAAE,CAAC;gBAC3D,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;YACpD,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,gFAAgF;AAEhF;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,iBAAiB,CAC/B,QAAgB,EAChB,UAAkB,EAClB,MAAkB,EAClB,MAAsB;IAEtB,MAAM,OAAO,GAAwC,EAAE,CAAC;IAExD,MAAM,KAAK,GAAa,CAAC,QAAQ,CAAC,CAAC;IACnC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAEtB,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,EAAG,CAAC;QAC/B,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAClD,IAAI,CAAC,QAAQ,EAAE,MAAM;YAAE,SAAS;QAEhC,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC3B,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,SAAS;YAC/B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAEjB,IAAI,MAAM,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACtC,MAAM,SAAS,GAAG,GAAG,GAAG,IAAI,UAAU,EAAE,CAAC;gBACzC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;gBAC1E,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;YACzB,CAAC;YAED,kFAAkF;YAClF,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -65,6 +65,7 @@ export declare class PipelineContext {
65
65
  confidence: number;
66
66
  dynamic: number;
67
67
  technique: string | null;
68
+ dynamicKind: string | null;
68
69
  }>;
69
70
  hasEmbeddings: boolean;
70
71
  lineCountMap: Map<string, number>;
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../../src/domain/graph/builder/context.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../../src/domain/graph/builder/context.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../../../src/domain/graph/builder/context.ts"],"names":[],"mappings":"AAoBA,MAAM,OAAO,eAAe;IAC1B,sEAAsE;IACtE,OAAO,CAAU;IACjB,EAAE,CAAyB;IAC3B,MAAM,CAAU;IAChB,MAAM,CAAmB;IACzB,IAAI,CAAkB;IACtB,UAAU,CAAc;IACxB,UAAU,CAAqB;IAC/B,aAAa,CAAiB;IAC9B;;;;;;;;OAQG;IACH,mBAAmB,CAAiB;IACpC,OAAO,CAAe;IACtB,WAAW,CAAW;IACtB,gBAAgB,GAAY,KAAK,CAAC;IAClC,aAAa,CAAU;IACvB,QAAQ,CAAkB;IAC1B,kFAAkF;IAClF,eAAe,GAAY,KAAK,CAAC;IACjC,gGAAgG;IAChG,gBAAgB,GAAY,KAAK,CAAC;IAElC,sEAAsE;IACtE,QAAQ,CAAY;IACpB,cAAc,CAAe;IAE7B,sEAAsE;IACtE,WAAW,CAAW;IACtB,YAAY,CAAiB;IAC7B,eAAe,CAAoB;IACnC,OAAO,CAAY;IACnB,SAAS,GAAY,KAAK,CAAC;IAE3B,sEAAsE;IACtE,UAAU,CAAgC;IAC1C,WAAW,CAAgC;IAC3C,YAAY,CAAiB;IAE7B,sEAAsE;IACtE,aAAa,CAA8B;IAC3C,WAAW,CAA0B;IACrC,eAAe,CAAe;IAC9B,yFAAyF;IACzF,iBAAiB,GAA+B,IAAI,GAAG,EAAE,CAAC;IAE1D,sEAAsE;IACtE,WAAW,CAA0B;IACrC,kBAAkB,CAA0B;IAE5C,sEAAsE;IACtE;;;;OAIG;IACH,oBAAoB,GAUf,EAAE,CAAC;IAER,sEAAsE;IACtE,aAAa,GAAY,KAAK,CAAC;IAC/B,YAAY,CAAuB;IAEnC,sEAAsE;IACtE,MAAM,GAgBF,EAAE,CAAC;IACP,UAAU,CAAU;CACrB"}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../../../src/domain/graph/builder/context.ts"],"names":[],"mappings":"AAoBA,MAAM,OAAO,eAAe;IAC1B,sEAAsE;IACtE,OAAO,CAAU;IACjB,EAAE,CAAyB;IAC3B,MAAM,CAAU;IAChB,MAAM,CAAmB;IACzB,IAAI,CAAkB;IACtB,UAAU,CAAc;IACxB,UAAU,CAAqB;IAC/B,aAAa,CAAiB;IAC9B;;;;;;;;OAQG;IACH,mBAAmB,CAAiB;IACpC,OAAO,CAAe;IACtB,WAAW,CAAW;IACtB,gBAAgB,GAAY,KAAK,CAAC;IAClC,aAAa,CAAU;IACvB,QAAQ,CAAkB;IAC1B,kFAAkF;IAClF,eAAe,GAAY,KAAK,CAAC;IACjC,gGAAgG;IAChG,gBAAgB,GAAY,KAAK,CAAC;IAElC,sEAAsE;IACtE,QAAQ,CAAY;IACpB,cAAc,CAAe;IAE7B,sEAAsE;IACtE,WAAW,CAAW;IACtB,YAAY,CAAiB;IAC7B,eAAe,CAAoB;IACnC,OAAO,CAAY;IACnB,SAAS,GAAY,KAAK,CAAC;IAE3B,sEAAsE;IACtE,UAAU,CAAgC;IAC1C,WAAW,CAAgC;IAC3C,YAAY,CAAiB;IAE7B,sEAAsE;IACtE,aAAa,CAA8B;IAC3C,WAAW,CAA0B;IACrC,eAAe,CAAe;IAC9B,yFAAyF;IACzF,iBAAiB,GAA+B,IAAI,GAAG,EAAE,CAAC;IAE1D,sEAAsE;IACtE,WAAW,CAA0B;IACrC,kBAAkB,CAA0B;IAE5C,sEAAsE;IACtE;;;;OAIG;IACH,oBAAoB,GAWf,EAAE,CAAC;IAER,sEAAsE;IACtE,aAAa,GAAY,KAAK,CAAC;IAC/B,YAAY,CAAuB;IAEnC,sEAAsE;IACtE,MAAM,GAgBF,EAAE,CAAC;IACP,UAAU,CAAU;CACrB"}
@@ -1,5 +1,11 @@
1
1
  import type { BetterSqlite3Database, CodegraphConfig, PathAliases } from '../../../types.js';
2
2
  export declare const BUILTIN_RECEIVERS: Set<string>;
3
+ /** Phase 8.6: confidence penalty applied to CHA-dispatch edges. */
4
+ export declare const CHA_DISPATCH_PENALTY = 0.1;
5
+ /** Phase 8.6: fixed confidence for typed-receiver (interface/CHA) dispatch edges.
6
+ * File proximity is not meaningful for virtual dispatch — all three engine paths
7
+ * (WASM inline, WASM post-pass, native post-pass) must agree on this value. */
8
+ export declare const CHA_TYPED_DISPATCH_CONFIDENCE = 0.8;
3
9
  /**
4
10
  * Check whether a source file passes the configured include/exclude globs.
5
11
  *
@@ -8,6 +14,21 @@ export declare const BUILTIN_RECEIVERS: Set<string>;
8
14
  * are set, a file must match at least one include and no exclude.
9
15
  */
10
16
  export declare function passesIncludeExclude(relPath: string, includeRegexes: readonly RegExp[], excludeRegexes: readonly RegExp[]): boolean;
17
+ /**
18
+ * Parse the `.gitignore` file at the project root and return compiled regexes
19
+ * for each non-negated, non-comment pattern.
20
+ *
21
+ * Only the root-level `.gitignore` is read — nested `.gitignore` files and
22
+ * global gitignore are not consulted. This gives the WASM file-collection
23
+ * walker the same coarse gitignore respect that the Rust engine gets from the
24
+ * `ignore` crate's `git_ignore(true)` option, without requiring an additional
25
+ * npm dependency.
26
+ *
27
+ * Negation patterns (`!pattern`) are intentionally skipped — honoring them
28
+ * correctly requires ordered evaluation which is outside scope here. The Rust
29
+ * engine's `ignore` crate handles negation natively.
30
+ */
31
+ export declare function readGitignorePatterns(rootDir: string): readonly RegExp[];
11
32
  /**
12
33
  * Recursively collect all source files under `dir`.
13
34
  * When `directories` is a Set, also tracks which directories contain files.
@@ -52,9 +73,11 @@ export declare function purgeFilesFromGraph(db: BetterSqlite3Database, files: st
52
73
  export declare function batchInsertNodes(db: BetterSqlite3Database, rows: unknown[][]): void;
53
74
  /**
54
75
  * Batch-insert edge rows via multi-value INSERT statements.
55
- * Each row: [source_id, target_id, kind, confidence, dynamic, technique]
76
+ * Each row: [source_id, target_id, kind, confidence, dynamic, technique, dynamic_kind]
56
77
  */
57
78
  export declare function batchInsertEdges(db: BetterSqlite3Database, rows: unknown[][]): void;
79
+ /** Confidence assigned to CHA-expanded interface/abstract dispatch edges. */
80
+ export declare const CHA_DISPATCH_CONFIDENCE = 0.8;
58
81
  /**
59
82
  * CHA (Class Hierarchy Analysis) post-pass.
60
83
  *
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../../src/domain/graph/builder/helpers.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EACV,qBAAqB,EACrB,eAAe,EACf,WAAW,EAEZ,MAAM,mBAAmB,CAAC;AAE3B,eAAO,MAAM,iBAAiB,EAAE,GAAG,CAAC,MAAM,CA6BxC,CAAC;AAaH;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,SAAS,MAAM,EAAE,EACjC,cAAc,EAAE,SAAS,MAAM,EAAE,GAChC,OAAO,CAIT;AA0ED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EAAE,EACf,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC,EAChC,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,GACvB;IAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CAAE,CAAC;AACjD,wBAAgB,YAAY,CAC1B,GAAG,EAAE,MAAM,EACX,KAAK,CAAC,EAAE,MAAM,EAAE,EAChB,MAAM,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,EACjC,WAAW,CAAC,EAAE,IAAI,GACjB,MAAM,EAAE,CAAC;AAwBZ;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,CA4B5D;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAOjF;AAQD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,MAAU,GAAG,MAAM,CAa1E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,qBAAqB,EACzB,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACpC,IAAI,CAGN;AA6CD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,qBAAqB,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,GAAG,IAAI,CAanF;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,qBAAqB,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,GAAG,IAAI,CAanF;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,qBAAqB,GAAG,MAAM,CAyJhE"}
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../../src/domain/graph/builder/helpers.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EACV,qBAAqB,EACrB,eAAe,EACf,WAAW,EAEZ,MAAM,mBAAmB,CAAC;AAE3B,eAAO,MAAM,iBAAiB,EAAE,GAAG,CAAC,MAAM,CA6BxC,CAAC;AAEH,mEAAmE;AACnE,eAAO,MAAM,oBAAoB,MAAM,CAAC;AACxC;;gFAEgF;AAChF,eAAO,MAAM,6BAA6B,MAAM,CAAC;AAYjD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,SAAS,MAAM,EAAE,EACjC,cAAc,EAAE,SAAS,MAAM,EAAE,GAChC,OAAO,CAIT;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAkCxE;AA8ED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EAAE,EACf,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC,EAChC,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,GACvB;IAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CAAE,CAAC;AACjD,wBAAgB,YAAY,CAC1B,GAAG,EAAE,MAAM,EACX,KAAK,CAAC,EAAE,MAAM,EAAE,EAChB,MAAM,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,EACjC,WAAW,CAAC,EAAE,IAAI,GACjB,MAAM,EAAE,CAAC;AA+BZ;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,CA4B5D;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAOjF;AAQD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,MAAU,GAAG,MAAM,CAa1E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,qBAAqB,EACzB,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACpC,IAAI,CAGN;AA6CD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,qBAAqB,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,GAAG,IAAI,CAanF;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,qBAAqB,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,GAAG,IAAI,CAanF;AAED,6EAA6E;AAC7E,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAwJ3C;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,qBAAqB,GAAG,MAAM,CAuEhE"}