gitnexus 1.6.6-rc.98 → 1.6.6

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 (541) hide show
  1. package/README.md +122 -68
  2. package/dist/_shared/graph/types.d.ts +17 -1
  3. package/dist/_shared/graph/types.d.ts.map +1 -1
  4. package/dist/_shared/index.d.ts +3 -5
  5. package/dist/_shared/index.d.ts.map +1 -1
  6. package/dist/_shared/index.js +2 -4
  7. package/dist/_shared/index.js.map +1 -1
  8. package/dist/_shared/scope-resolution/module-scope-index.d.ts +1 -2
  9. package/dist/_shared/scope-resolution/module-scope-index.d.ts.map +1 -1
  10. package/dist/_shared/scope-resolution/module-scope-index.js +1 -2
  11. package/dist/_shared/scope-resolution/module-scope-index.js.map +1 -1
  12. package/dist/_shared/scope-resolution/parsed-file.d.ts +24 -0
  13. package/dist/_shared/scope-resolution/parsed-file.d.ts.map +1 -1
  14. package/dist/_shared/scope-resolution/reference-site.d.ts +13 -1
  15. package/dist/_shared/scope-resolution/reference-site.d.ts.map +1 -1
  16. package/dist/_shared/scope-resolution/registries/context.d.ts +1 -0
  17. package/dist/_shared/scope-resolution/registries/context.d.ts.map +1 -1
  18. package/dist/_shared/scope-resolution/registries/context.js +6 -0
  19. package/dist/_shared/scope-resolution/registries/context.js.map +1 -1
  20. package/dist/_shared/scope-resolution/registries/evidence.d.ts +2 -3
  21. package/dist/_shared/scope-resolution/registries/evidence.d.ts.map +1 -1
  22. package/dist/_shared/scope-resolution/registries/evidence.js +2 -3
  23. package/dist/_shared/scope-resolution/registries/evidence.js.map +1 -1
  24. package/dist/_shared/scope-resolution/registries/macro-registry.d.ts +29 -0
  25. package/dist/_shared/scope-resolution/registries/macro-registry.d.ts.map +1 -0
  26. package/dist/_shared/scope-resolution/registries/macro-registry.js +32 -0
  27. package/dist/_shared/scope-resolution/registries/macro-registry.js.map +1 -0
  28. package/dist/_shared/scope-resolution/symbol-definition.d.ts +9 -0
  29. package/dist/_shared/scope-resolution/symbol-definition.d.ts.map +1 -1
  30. package/dist/_shared/scope-resolution/types.d.ts +1 -1
  31. package/dist/_shared/scope-resolution/types.d.ts.map +1 -1
  32. package/dist/cli/ai-context.d.ts +35 -1
  33. package/dist/cli/ai-context.js +111 -12
  34. package/dist/cli/analyze-config.d.ts +92 -0
  35. package/dist/cli/analyze-config.js +364 -0
  36. package/dist/cli/analyze.d.ts +17 -1
  37. package/dist/cli/analyze.js +224 -71
  38. package/dist/cli/cli-message.d.ts +1 -1
  39. package/dist/cli/doctor.d.ts +18 -0
  40. package/dist/cli/doctor.js +32 -0
  41. package/dist/cli/i18n/en.d.ts +2 -2
  42. package/dist/cli/i18n/en.js +2 -2
  43. package/dist/cli/i18n/resources.d.ts +2 -2
  44. package/dist/cli/i18n/zh-CN.js +2 -2
  45. package/dist/cli/index.js +4 -2
  46. package/dist/cli/resolve-invocation.d.ts +21 -0
  47. package/dist/cli/resolve-invocation.js +68 -0
  48. package/dist/cli/setup.d.ts +33 -0
  49. package/dist/cli/setup.js +96 -35
  50. package/dist/cli/skill-gen.js +2 -2
  51. package/dist/cli/wiki.js +20 -4
  52. package/dist/core/embeddings/embedder.d.ts +1 -1
  53. package/dist/core/embeddings/embedder.js +14 -1
  54. package/dist/core/embeddings/runtime-support.d.ts +41 -0
  55. package/dist/core/embeddings/runtime-support.js +65 -0
  56. package/dist/core/group/extractors/grpc-patterns/proto.js +2 -1
  57. package/dist/core/group/extractors/http-patterns/java.js +15 -1
  58. package/dist/core/ingestion/call-processor.d.ts +57 -227
  59. package/dist/core/ingestion/call-processor.js +172 -2595
  60. package/dist/core/ingestion/call-routing.d.ts +6 -5
  61. package/dist/core/ingestion/call-routing.js +6 -6
  62. package/dist/core/ingestion/call-types.d.ts +0 -75
  63. package/dist/core/ingestion/class-extractors/configs/c-cpp.js +26 -1
  64. package/dist/core/ingestion/class-extractors/configs/ruby.js +3 -0
  65. package/dist/core/ingestion/class-extractors/generic.js +9 -11
  66. package/dist/core/ingestion/class-types.d.ts +23 -0
  67. package/dist/core/ingestion/cobol/cobol-preprocessor.d.ts +11 -0
  68. package/dist/core/ingestion/cobol/cobol-preprocessor.js +227 -73
  69. package/dist/core/ingestion/cobol-processor.d.ts +1 -0
  70. package/dist/core/ingestion/cobol-processor.js +51 -2
  71. package/dist/core/ingestion/emit-references.js +8 -2
  72. package/dist/core/ingestion/export-detection.d.ts +2 -1
  73. package/dist/core/ingestion/export-detection.js +2 -6
  74. package/dist/core/ingestion/field-extractors/configs/dart.d.ts +0 -6
  75. package/dist/core/ingestion/field-extractors/configs/dart.js +62 -44
  76. package/dist/core/ingestion/field-extractors/configs/go.d.ts +0 -9
  77. package/dist/core/ingestion/field-extractors/configs/go.js +40 -1
  78. package/dist/core/ingestion/field-extractors/configs/jvm.js +43 -4
  79. package/dist/core/ingestion/field-extractors/configs/php.js +1 -2
  80. package/dist/core/ingestion/field-extractors/configs/swift.d.ts +12 -1
  81. package/dist/core/ingestion/field-extractors/configs/swift.js +31 -6
  82. package/dist/core/ingestion/field-extractors/generic.d.ts +6 -0
  83. package/dist/core/ingestion/field-extractors/generic.js +5 -4
  84. package/dist/core/ingestion/field-extractors/typescript.js +0 -29
  85. package/dist/core/ingestion/filesystem-walker.d.ts +0 -9
  86. package/dist/core/ingestion/filesystem-walker.js +0 -11
  87. package/dist/core/ingestion/finalize-orchestrator.js +14 -2
  88. package/dist/core/ingestion/import-resolvers/configs/swift.d.ts +21 -0
  89. package/dist/core/ingestion/import-resolvers/configs/swift.js +72 -11
  90. package/dist/core/ingestion/import-resolvers/python.d.ts +1 -1
  91. package/dist/core/ingestion/import-resolvers/standard.d.ts +2 -2
  92. package/dist/core/ingestion/import-resolvers/standard.js +6 -5
  93. package/dist/core/ingestion/import-resolvers/utils.d.ts +2 -5
  94. package/dist/core/ingestion/import-resolvers/utils.js +1 -9
  95. package/dist/core/ingestion/language-provider.d.ts +39 -119
  96. package/dist/core/ingestion/language-provider.js +0 -2
  97. package/dist/core/ingestion/languages/c/capture-side-channel.d.ts +62 -0
  98. package/dist/core/ingestion/languages/c/capture-side-channel.js +65 -0
  99. package/dist/core/ingestion/languages/c/captures.js +41 -23
  100. package/dist/core/ingestion/languages/c/import-decomposer.d.ts +9 -0
  101. package/dist/core/ingestion/languages/c/import-decomposer.js +15 -0
  102. package/dist/core/ingestion/languages/c/import-target.js +52 -9
  103. package/dist/core/ingestion/languages/c/index.d.ts +2 -1
  104. package/dist/core/ingestion/languages/c/index.js +2 -1
  105. package/dist/core/ingestion/languages/c/query.js +15 -0
  106. package/dist/core/ingestion/languages/c/scope-resolver.js +47 -4
  107. package/dist/core/ingestion/languages/c/static-linkage.d.ts +8 -0
  108. package/dist/core/ingestion/languages/c/static-linkage.js +46 -1
  109. package/dist/core/ingestion/languages/c-cpp.js +16 -7
  110. package/dist/core/ingestion/languages/cobol/captures.js +25 -2
  111. package/dist/core/ingestion/languages/cpp/adl.d.ts +88 -4
  112. package/dist/core/ingestion/languages/cpp/adl.js +380 -160
  113. package/dist/core/ingestion/languages/cpp/arity-metadata.js +2 -8
  114. package/dist/core/ingestion/languages/cpp/capture-side-channel.d.ts +65 -0
  115. package/dist/core/ingestion/languages/cpp/capture-side-channel.js +78 -0
  116. package/dist/core/ingestion/languages/cpp/captures.js +162 -54
  117. package/dist/core/ingestion/languages/cpp/file-local-linkage.d.ts +18 -52
  118. package/dist/core/ingestion/languages/cpp/file-local-linkage.js +49 -1
  119. package/dist/core/ingestion/languages/cpp/import-decomposer.d.ts +7 -0
  120. package/dist/core/ingestion/languages/cpp/import-decomposer.js +12 -0
  121. package/dist/core/ingestion/languages/cpp/index.d.ts +1 -0
  122. package/dist/core/ingestion/languages/cpp/index.js +1 -0
  123. package/dist/core/ingestion/languages/cpp/inline-namespaces.d.ts +8 -0
  124. package/dist/core/ingestion/languages/cpp/inline-namespaces.js +21 -0
  125. package/dist/core/ingestion/languages/cpp/query.js +21 -0
  126. package/dist/core/ingestion/languages/cpp/range-bindings.js +20 -5
  127. package/dist/core/ingestion/languages/cpp/scope-resolver.js +52 -5
  128. package/dist/core/ingestion/languages/cpp/two-phase-lookup.d.ts +20 -0
  129. package/dist/core/ingestion/languages/cpp/two-phase-lookup.js +83 -3
  130. package/dist/core/ingestion/languages/csharp/captures.js +205 -41
  131. package/dist/core/ingestion/languages/csharp/index.d.ts +3 -4
  132. package/dist/core/ingestion/languages/csharp/index.js +3 -4
  133. package/dist/core/ingestion/languages/csharp/interpret.js +17 -3
  134. package/dist/core/ingestion/languages/csharp/namespace-siblings.d.ts +17 -7
  135. package/dist/core/ingestion/languages/csharp/namespace-siblings.js +129 -124
  136. package/dist/core/ingestion/languages/csharp/qualified-type-names.d.ts +14 -0
  137. package/dist/core/ingestion/languages/csharp/qualified-type-names.js +59 -0
  138. package/dist/core/ingestion/languages/csharp/query.js +13 -0
  139. package/dist/core/ingestion/languages/csharp/receiver-binding.js +10 -6
  140. package/dist/core/ingestion/languages/csharp/scope-resolver.js +8 -1
  141. package/dist/core/ingestion/languages/csharp.js +0 -5
  142. package/dist/core/ingestion/languages/dart/arity-metadata.d.ts +25 -0
  143. package/dist/core/ingestion/languages/dart/arity-metadata.js +35 -0
  144. package/dist/core/ingestion/languages/dart/arity.d.ts +19 -0
  145. package/dist/core/ingestion/languages/dart/arity.js +31 -0
  146. package/dist/core/ingestion/languages/dart/built-ins.d.ts +11 -0
  147. package/dist/core/ingestion/languages/dart/built-ins.js +34 -0
  148. package/dist/core/ingestion/languages/dart/cache-stats.d.ts +13 -0
  149. package/dist/core/ingestion/languages/dart/cache-stats.js +24 -0
  150. package/dist/core/ingestion/languages/dart/captures.d.ts +29 -0
  151. package/dist/core/ingestion/languages/dart/captures.js +445 -0
  152. package/dist/core/ingestion/languages/dart/expand-wildcards.d.ts +13 -0
  153. package/dist/core/ingestion/languages/dart/expand-wildcards.js +31 -0
  154. package/dist/core/ingestion/languages/dart/import-target.d.ts +15 -0
  155. package/dist/core/ingestion/languages/dart/import-target.js +65 -0
  156. package/dist/core/ingestion/languages/dart/index.d.ts +28 -0
  157. package/dist/core/ingestion/languages/dart/index.js +28 -0
  158. package/dist/core/ingestion/languages/dart/interpret.d.ts +24 -0
  159. package/dist/core/ingestion/languages/dart/interpret.js +95 -0
  160. package/dist/core/ingestion/languages/dart/merge-bindings.d.ts +10 -0
  161. package/dist/core/ingestion/languages/dart/merge-bindings.js +39 -0
  162. package/dist/core/ingestion/languages/dart/query.d.ts +26 -0
  163. package/dist/core/ingestion/languages/dart/query.js +142 -0
  164. package/dist/core/ingestion/languages/dart/receiver-binding.d.ts +24 -0
  165. package/dist/core/ingestion/languages/dart/receiver-binding.js +87 -0
  166. package/dist/core/ingestion/languages/dart/scope-resolver.d.ts +29 -0
  167. package/dist/core/ingestion/languages/dart/scope-resolver.js +194 -0
  168. package/dist/core/ingestion/languages/dart/signature-bindings.d.ts +23 -0
  169. package/dist/core/ingestion/languages/dart/signature-bindings.js +51 -0
  170. package/dist/core/ingestion/languages/dart/simple-hooks.d.ts +20 -0
  171. package/dist/core/ingestion/languages/dart/simple-hooks.js +47 -0
  172. package/dist/core/ingestion/languages/dart.d.ts +0 -1
  173. package/dist/core/ingestion/languages/dart.js +15 -29
  174. package/dist/core/ingestion/languages/go/arity-metadata.d.ts +1 -0
  175. package/dist/core/ingestion/languages/go/arity-metadata.js +31 -1
  176. package/dist/core/ingestion/languages/go/captures.js +247 -26
  177. package/dist/core/ingestion/languages/go/interface-impls.js +476 -50
  178. package/dist/core/ingestion/languages/go/interpret.js +21 -11
  179. package/dist/core/ingestion/languages/go/method-owners.js +20 -8
  180. package/dist/core/ingestion/languages/go/query.js +15 -7
  181. package/dist/core/ingestion/languages/go/range-binding.js +24 -9
  182. package/dist/core/ingestion/languages/go/receiver-binding.js +1 -1
  183. package/dist/core/ingestion/languages/go/scope-resolver.js +2 -2
  184. package/dist/core/ingestion/languages/go/simple-hooks.js +10 -5
  185. package/dist/core/ingestion/languages/go/type-binding.d.ts +1 -0
  186. package/dist/core/ingestion/languages/go/type-binding.js +40 -2
  187. package/dist/core/ingestion/languages/go.d.ts +0 -1
  188. package/dist/core/ingestion/languages/go.js +0 -5
  189. package/dist/core/ingestion/languages/index.d.ts +0 -5
  190. package/dist/core/ingestion/languages/index.js +0 -3
  191. package/dist/core/ingestion/languages/java/captures.js +252 -23
  192. package/dist/core/ingestion/languages/java/interpret.js +12 -6
  193. package/dist/core/ingestion/languages/java/package-siblings.js +18 -5
  194. package/dist/core/ingestion/languages/java/query.js +16 -1
  195. package/dist/core/ingestion/languages/java/scope-resolver.d.ts +2 -8
  196. package/dist/core/ingestion/languages/java/scope-resolver.js +2 -8
  197. package/dist/core/ingestion/languages/java.js +0 -5
  198. package/dist/core/ingestion/languages/javascript/captures.js +185 -11
  199. package/dist/core/ingestion/languages/javascript/query.js +107 -1
  200. package/dist/core/ingestion/languages/kotlin/capture-side-channel.d.ts +57 -0
  201. package/dist/core/ingestion/languages/kotlin/capture-side-channel.js +60 -0
  202. package/dist/core/ingestion/languages/kotlin/captures.js +213 -22
  203. package/dist/core/ingestion/languages/kotlin/companion-scopes.d.ts +7 -0
  204. package/dist/core/ingestion/languages/kotlin/companion-scopes.js +10 -0
  205. package/dist/core/ingestion/languages/kotlin/index.d.ts +1 -0
  206. package/dist/core/ingestion/languages/kotlin/index.js +1 -0
  207. package/dist/core/ingestion/languages/kotlin/query.js +30 -0
  208. package/dist/core/ingestion/languages/kotlin/scope-resolver.d.ts +5 -7
  209. package/dist/core/ingestion/languages/kotlin/scope-resolver.js +22 -7
  210. package/dist/core/ingestion/languages/kotlin.js +8 -5
  211. package/dist/core/ingestion/languages/php/captures.js +135 -19
  212. package/dist/core/ingestion/languages/php/import-decomposer.js +21 -63
  213. package/dist/core/ingestion/languages/php/index.d.ts +3 -4
  214. package/dist/core/ingestion/languages/php/index.js +3 -4
  215. package/dist/core/ingestion/languages/php/query.js +5 -0
  216. package/dist/core/ingestion/languages/php/receiver-binding.js +8 -4
  217. package/dist/core/ingestion/languages/php.js +0 -4
  218. package/dist/core/ingestion/languages/python/captures.js +128 -13
  219. package/dist/core/ingestion/languages/python/depends-references.js +1 -1
  220. package/dist/core/ingestion/languages/python/import-target.d.ts +4 -5
  221. package/dist/core/ingestion/languages/python/import-target.js +108 -16
  222. package/dist/core/ingestion/languages/python/index-stats.d.ts +18 -0
  223. package/dist/core/ingestion/languages/python/index-stats.js +25 -0
  224. package/dist/core/ingestion/languages/python/index.d.ts +3 -4
  225. package/dist/core/ingestion/languages/python/index.js +3 -4
  226. package/dist/core/ingestion/languages/python/query.js +17 -0
  227. package/dist/core/ingestion/languages/python/scope-resolver.js +7 -6
  228. package/dist/core/ingestion/languages/python.d.ts +0 -2
  229. package/dist/core/ingestion/languages/python.js +0 -7
  230. package/dist/core/ingestion/languages/ruby/captures.js +174 -31
  231. package/dist/core/ingestion/languages/ruby/import-target.js +2 -1
  232. package/dist/core/ingestion/languages/ruby/interpret.js +2 -1
  233. package/dist/core/ingestion/languages/ruby/query.js +10 -0
  234. package/dist/core/ingestion/languages/ruby/scope-resolver.js +61 -11
  235. package/dist/core/ingestion/languages/ruby.js +4 -53
  236. package/dist/core/ingestion/languages/rust/captures.js +95 -13
  237. package/dist/core/ingestion/languages/rust/query.js +64 -1
  238. package/dist/core/ingestion/languages/rust/range-binding.js +40 -12
  239. package/dist/core/ingestion/languages/rust/receiver-binding.js +9 -0
  240. package/dist/core/ingestion/languages/rust/scope-resolver.js +75 -1
  241. package/dist/core/ingestion/languages/rust.d.ts +0 -2
  242. package/dist/core/ingestion/languages/rust.js +0 -6
  243. package/dist/core/ingestion/languages/swift/arity-metadata.d.ts +24 -0
  244. package/dist/core/ingestion/languages/swift/arity-metadata.js +41 -0
  245. package/dist/core/ingestion/languages/swift/arity.d.ts +29 -0
  246. package/dist/core/ingestion/languages/swift/arity.js +42 -0
  247. package/dist/core/ingestion/languages/swift/base-type.d.ts +20 -0
  248. package/dist/core/ingestion/languages/swift/base-type.js +27 -0
  249. package/dist/core/ingestion/languages/swift/cache-stats.d.ts +15 -0
  250. package/dist/core/ingestion/languages/swift/cache-stats.js +26 -0
  251. package/dist/core/ingestion/languages/swift/captures.d.ts +35 -0
  252. package/dist/core/ingestion/languages/swift/captures.js +495 -0
  253. package/dist/core/ingestion/languages/swift/implicit-imports.d.ts +34 -0
  254. package/dist/core/ingestion/languages/swift/implicit-imports.js +57 -0
  255. package/dist/core/ingestion/languages/swift/import-decomposer.d.ts +24 -0
  256. package/dist/core/ingestion/languages/swift/import-decomposer.js +84 -0
  257. package/dist/core/ingestion/languages/swift/import-target.d.ts +33 -0
  258. package/dist/core/ingestion/languages/swift/import-target.js +81 -0
  259. package/dist/core/ingestion/languages/swift/index.d.ts +37 -0
  260. package/dist/core/ingestion/languages/swift/index.js +37 -0
  261. package/dist/core/ingestion/languages/swift/interpret.d.ts +15 -0
  262. package/dist/core/ingestion/languages/swift/interpret.js +89 -0
  263. package/dist/core/ingestion/languages/swift/merge-bindings.d.ts +20 -0
  264. package/dist/core/ingestion/languages/swift/merge-bindings.js +48 -0
  265. package/dist/core/ingestion/languages/swift/query.d.ts +46 -0
  266. package/dist/core/ingestion/languages/swift/query.js +194 -0
  267. package/dist/core/ingestion/languages/swift/receiver-binding.d.ts +40 -0
  268. package/dist/core/ingestion/languages/swift/receiver-binding.js +161 -0
  269. package/dist/core/ingestion/languages/swift/scope-resolver.d.ts +50 -0
  270. package/dist/core/ingestion/languages/swift/scope-resolver.js +189 -0
  271. package/dist/core/ingestion/languages/swift/sibling-type-bindings.d.ts +34 -0
  272. package/dist/core/ingestion/languages/swift/sibling-type-bindings.js +65 -0
  273. package/dist/core/ingestion/languages/swift/signature-bindings.d.ts +25 -0
  274. package/dist/core/ingestion/languages/swift/signature-bindings.js +66 -0
  275. package/dist/core/ingestion/languages/swift/simple-hooks.d.ts +37 -0
  276. package/dist/core/ingestion/languages/swift/simple-hooks.js +60 -0
  277. package/dist/core/ingestion/languages/swift/target-grouping.d.ts +51 -0
  278. package/dist/core/ingestion/languages/swift/target-grouping.js +93 -0
  279. package/dist/core/ingestion/languages/swift/target-siblings.d.ts +30 -0
  280. package/dist/core/ingestion/languages/swift/target-siblings.js +71 -0
  281. package/dist/core/ingestion/languages/swift.d.ts +0 -5
  282. package/dist/core/ingestion/languages/swift.js +11 -87
  283. package/dist/core/ingestion/languages/typescript/array-callback.d.ts +3 -29
  284. package/dist/core/ingestion/languages/typescript/array-callback.js +4 -43
  285. package/dist/core/ingestion/languages/typescript/captures.js +147 -17
  286. package/dist/core/ingestion/languages/typescript/index.d.ts +3 -4
  287. package/dist/core/ingestion/languages/typescript/index.js +3 -4
  288. package/dist/core/ingestion/languages/typescript/query.d.ts +2 -3
  289. package/dist/core/ingestion/languages/typescript/query.js +125 -4
  290. package/dist/core/ingestion/languages/typescript/receiver-binding.js +0 -1
  291. package/dist/core/ingestion/languages/typescript.d.ts +2 -3
  292. package/dist/core/ingestion/languages/typescript.js +46 -23
  293. package/dist/core/ingestion/languages/vue/captures.d.ts +46 -0
  294. package/dist/core/ingestion/languages/vue/captures.js +67 -0
  295. package/dist/core/ingestion/languages/vue/import-target.d.ts +27 -0
  296. package/dist/core/ingestion/languages/vue/import-target.js +58 -0
  297. package/dist/core/ingestion/languages/vue/index.d.ts +49 -0
  298. package/dist/core/ingestion/languages/vue/index.js +49 -0
  299. package/dist/core/ingestion/languages/vue/scope-resolver.d.ts +55 -0
  300. package/dist/core/ingestion/languages/vue/scope-resolver.js +292 -0
  301. package/dist/core/ingestion/languages/vue.js +12 -4
  302. package/dist/core/ingestion/local-symbol-pruner.d.ts +11 -0
  303. package/dist/core/ingestion/local-symbol-pruner.js +63 -0
  304. package/dist/core/ingestion/method-extractors/configs/dart.js +14 -1
  305. package/dist/core/ingestion/method-extractors/configs/jvm.js +37 -20
  306. package/dist/core/ingestion/method-extractors/configs/php.js +0 -1
  307. package/dist/core/ingestion/method-extractors/configs/swift.js +11 -4
  308. package/dist/core/ingestion/method-types.d.ts +2 -2
  309. package/dist/core/ingestion/model/index.d.ts +0 -3
  310. package/dist/core/ingestion/model/index.js +0 -8
  311. package/dist/core/ingestion/model/resolve.d.ts +7 -43
  312. package/dist/core/ingestion/model/resolve.js +7 -226
  313. package/dist/core/ingestion/model/scope-resolution-indexes.d.ts +46 -1
  314. package/dist/core/ingestion/model/semantic-model.d.ts +4 -6
  315. package/dist/core/ingestion/model/semantic-model.js +1 -1
  316. package/dist/core/ingestion/model/symbol-table.d.ts +3 -4
  317. package/dist/core/ingestion/model/symbol-table.js +3 -4
  318. package/dist/core/ingestion/parsing-processor.d.ts +30 -24
  319. package/dist/core/ingestion/parsing-processor.js +76 -640
  320. package/dist/core/ingestion/pipeline-phases/communities.d.ts +1 -1
  321. package/dist/core/ingestion/pipeline-phases/communities.js +5 -2
  322. package/dist/core/ingestion/pipeline-phases/cross-file.d.ts +9 -8
  323. package/dist/core/ingestion/pipeline-phases/cross-file.js +16 -12
  324. package/dist/core/ingestion/pipeline-phases/index.d.ts +1 -0
  325. package/dist/core/ingestion/pipeline-phases/index.js +1 -0
  326. package/dist/core/ingestion/pipeline-phases/mro.d.ts +1 -1
  327. package/dist/core/ingestion/pipeline-phases/mro.js +2 -2
  328. package/dist/core/ingestion/pipeline-phases/parse-impl.d.ts +44 -22
  329. package/dist/core/ingestion/pipeline-phases/parse-impl.js +426 -565
  330. package/dist/core/ingestion/pipeline-phases/parse.d.ts +13 -33
  331. package/dist/core/ingestion/pipeline-phases/parse.js +2 -2
  332. package/dist/core/ingestion/pipeline-phases/processes.d.ts +1 -1
  333. package/dist/core/ingestion/pipeline-phases/processes.js +5 -3
  334. package/dist/core/ingestion/pipeline-phases/prune-local-symbols.d.ts +14 -0
  335. package/dist/core/ingestion/pipeline-phases/prune-local-symbols.js +26 -0
  336. package/dist/core/ingestion/pipeline.d.ts +27 -19
  337. package/dist/core/ingestion/pipeline.js +4 -2
  338. package/dist/core/ingestion/resolve-references.js +15 -3
  339. package/dist/core/ingestion/route-extractors/laravel.d.ts +10 -0
  340. package/dist/core/ingestion/route-extractors/laravel.js +88 -9
  341. package/dist/core/ingestion/scope-extractor-bridge.d.ts +2 -1
  342. package/dist/core/ingestion/scope-extractor-bridge.js +2 -2
  343. package/dist/core/ingestion/scope-extractor.js +13 -0
  344. package/dist/core/ingestion/scope-resolution/contract/scope-resolver.d.ts +181 -15
  345. package/dist/core/ingestion/scope-resolution/contract/scope-resolver.js +21 -10
  346. package/dist/core/ingestion/scope-resolution/graph-bridge/edges.js +10 -2
  347. package/dist/core/ingestion/scope-resolution/graph-bridge/ids.d.ts +7 -1
  348. package/dist/core/ingestion/scope-resolution/graph-bridge/ids.js +58 -6
  349. package/dist/core/ingestion/scope-resolution/graph-bridge/node-lookup.js +24 -5
  350. package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.d.ts +68 -1
  351. package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.js +189 -29
  352. package/dist/core/ingestion/scope-resolution/passes/imported-return-types.js +21 -1
  353. package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.js +1 -1
  354. package/dist/core/ingestion/scope-resolution/pipeline/phase.d.ts +8 -11
  355. package/dist/core/ingestion/scope-resolution/pipeline/phase.js +171 -50
  356. package/dist/core/ingestion/scope-resolution/pipeline/registry.d.ts +3 -4
  357. package/dist/core/ingestion/scope-resolution/pipeline/registry.js +9 -4
  358. package/dist/core/ingestion/scope-resolution/pipeline/run.d.ts +28 -5
  359. package/dist/core/ingestion/scope-resolution/pipeline/run.js +191 -24
  360. package/dist/core/ingestion/scope-resolution/pipeline/validate-bindings-immutability.js +31 -0
  361. package/dist/core/ingestion/scope-resolution/scope/walkers.d.ts +72 -0
  362. package/dist/core/ingestion/scope-resolution/scope/walkers.js +440 -39
  363. package/dist/core/ingestion/scope-resolution/workspace-index.d.ts +18 -2
  364. package/dist/core/ingestion/scope-resolution/workspace-index.js +94 -7
  365. package/dist/core/ingestion/tree-sitter-queries.d.ts +14 -14
  366. package/dist/core/ingestion/tree-sitter-queries.js +380 -158
  367. package/dist/core/ingestion/ts-js-hoc-utils.d.ts +12 -0
  368. package/dist/core/ingestion/ts-js-hoc-utils.js +105 -0
  369. package/dist/core/ingestion/type-env.d.ts +2 -1
  370. package/dist/core/ingestion/type-env.js +6 -8
  371. package/dist/core/ingestion/type-extractors/c-cpp.js +8 -10
  372. package/dist/core/ingestion/type-extractors/csharp.js +18 -34
  373. package/dist/core/ingestion/type-extractors/go.js +2 -10
  374. package/dist/core/ingestion/type-extractors/jvm.js +6 -5
  375. package/dist/core/ingestion/type-extractors/php.js +1 -1
  376. package/dist/core/ingestion/type-extractors/python.js +1 -1
  377. package/dist/core/ingestion/type-extractors/ruby.js +2 -2
  378. package/dist/core/ingestion/type-extractors/rust.js +0 -16
  379. package/dist/core/ingestion/type-extractors/shared.d.ts +2 -2
  380. package/dist/core/ingestion/type-extractors/shared.js +25 -11
  381. package/dist/core/ingestion/type-extractors/swift.js +5 -5
  382. package/dist/core/ingestion/type-extractors/types.d.ts +1 -1
  383. package/dist/core/ingestion/type-extractors/typescript.js +1 -1
  384. package/dist/core/ingestion/utils/ast-helpers.d.ts +119 -1
  385. package/dist/core/ingestion/utils/ast-helpers.js +260 -13
  386. package/dist/core/ingestion/utils/callable-labels.d.ts +13 -0
  387. package/dist/core/ingestion/utils/callable-labels.js +14 -0
  388. package/dist/core/ingestion/utils/deferred-resolution-profile.d.ts +10 -0
  389. package/dist/core/ingestion/utils/deferred-resolution-profile.js +30 -0
  390. package/dist/core/ingestion/utils/heap-probe.d.ts +20 -0
  391. package/dist/core/ingestion/utils/heap-probe.js +39 -0
  392. package/dist/core/ingestion/utils/heritage-marker.d.ts +33 -0
  393. package/dist/core/ingestion/utils/heritage-marker.js +41 -0
  394. package/dist/core/ingestion/utils/qualified-name.d.ts +37 -0
  395. package/dist/core/ingestion/utils/qualified-name.js +67 -0
  396. package/dist/core/ingestion/variable-extractors/configs/c-cpp.js +49 -0
  397. package/dist/core/ingestion/variable-extractors/configs/dart.js +76 -62
  398. package/dist/core/ingestion/variable-extractors/configs/go.js +74 -7
  399. package/dist/core/ingestion/variable-extractors/configs/jvm.js +35 -8
  400. package/dist/core/ingestion/variable-extractors/generic.js +40 -12
  401. package/dist/core/ingestion/variable-types.d.ts +9 -0
  402. package/dist/core/ingestion/vue-sfc-extractor.d.ts +97 -7
  403. package/dist/core/ingestion/vue-sfc-extractor.js +433 -11
  404. package/dist/core/ingestion/workers/parse-worker.d.ts +0 -11
  405. package/dist/core/ingestion/workers/parse-worker.js +358 -187
  406. package/dist/core/ingestion/workers/worker-pool.d.ts +78 -9
  407. package/dist/core/ingestion/workers/worker-pool.js +346 -49
  408. package/dist/core/lbug/csv-generator.js +20 -2
  409. package/dist/core/lbug/lbug-adapter.js +29 -10
  410. package/dist/core/lbug/native-check.js +17 -5
  411. package/dist/core/lbug/pool-adapter.d.ts +0 -19
  412. package/dist/core/lbug/pool-adapter.js +40 -77
  413. package/dist/core/lbug/query-result-utils.d.ts +19 -0
  414. package/dist/core/lbug/query-result-utils.js +28 -0
  415. package/dist/core/run-analyze.d.ts +9 -2
  416. package/dist/core/run-analyze.js +24 -3
  417. package/dist/core/tree-sitter/parser-loader.d.ts +13 -0
  418. package/dist/core/tree-sitter/parser-loader.js +4 -0
  419. package/dist/core/tree-sitter/safe-parse.d.ts +70 -3
  420. package/dist/core/tree-sitter/safe-parse.js +214 -11
  421. package/dist/core/wiki/generator.js +13 -5
  422. package/dist/core/wiki/graph-queries.d.ts +3 -0
  423. package/dist/core/wiki/graph-queries.js +9 -1
  424. package/dist/core/wiki/llm-client.d.ts +1 -1
  425. package/dist/core/wiki/llm-client.js +7 -2
  426. package/dist/core/wiki/local-cli-client.d.ts +2 -1
  427. package/dist/core/wiki/local-cli-client.js +62 -4
  428. package/dist/mcp/compatible-stdio-transport.d.ts +3 -0
  429. package/dist/mcp/compatible-stdio-transport.js +22 -0
  430. package/dist/mcp/core/embedder.d.ts +1 -1
  431. package/dist/mcp/core/embedder.js +13 -1
  432. package/dist/mcp/local/local-backend.d.ts +37 -5
  433. package/dist/mcp/local/local-backend.js +227 -129
  434. package/dist/mcp/resources.js +3 -3
  435. package/dist/mcp/server.js +9 -1
  436. package/dist/storage/git.d.ts +11 -0
  437. package/dist/storage/git.js +30 -0
  438. package/dist/storage/parse-cache.d.ts +23 -1
  439. package/dist/storage/parse-cache.js +138 -32
  440. package/dist/storage/parsedfile-store.d.ts +142 -0
  441. package/dist/storage/parsedfile-store.js +367 -0
  442. package/dist/storage/repo-manager.d.ts +2 -1
  443. package/dist/storage/scope-index-store.d.ts +114 -0
  444. package/dist/storage/scope-index-store.js +236 -0
  445. package/dist/types/pipeline.d.ts +6 -3
  446. package/hooks/antigravity/gitnexus-antigravity-hook.cjs +2 -1
  447. package/hooks/claude/gitnexus-hook.cjs +2 -1
  448. package/hooks/claude/resolve-analyze-cmd.cjs +323 -0
  449. package/package.json +4 -5
  450. package/scripts/bench-scope-resolution.ts +1 -3
  451. package/scripts/cross-platform-tests.ts +4 -1
  452. package/skills/gitnexus-cli.md +8 -6
  453. package/skills/gitnexus-debugging.md +15 -15
  454. package/skills/gitnexus-exploring.md +11 -11
  455. package/skills/gitnexus-guide.md +1 -1
  456. package/skills/gitnexus-impact-analysis.md +10 -10
  457. package/skills/gitnexus-pr-review.md +19 -19
  458. package/skills/gitnexus-refactoring.md +25 -25
  459. package/web/assets/{agent-BRX-afm3.js → agent-EkX7webX.js} +156 -131
  460. package/web/assets/{architectureDiagram-UL44E2DR-B1oYB8-c.js → architectureDiagram-UL44E2DR-BoczH8cv.js} +1 -1
  461. package/web/assets/{chunk-LCXTWHL2-SPC6pgWI.js → chunk-LCXTWHL2-By5HB3b-.js} +1 -1
  462. package/web/assets/{chunk-RG4AUYOV-DZXr4Yv3.js → chunk-RG4AUYOV-BQE_DkpL.js} +1 -1
  463. package/web/assets/{classDiagram-KGZ6W3CR-BqpOj8L9.js → classDiagram-KGZ6W3CR-Dj_02GUH.js} +1 -1
  464. package/web/assets/{classDiagram-v2-72OJOZXJ-FmElywK2.js → classDiagram-v2-72OJOZXJ-D-NArMpf.js} +1 -1
  465. package/web/assets/{diagram-3NCE3AQN-BWtJXMDq.js → diagram-3NCE3AQN-VXtXDO95.js} +1 -1
  466. package/web/assets/{diagram-GF46GFSD-Hh-fChxU.js → diagram-GF46GFSD-B1qab2Ah.js} +1 -1
  467. package/web/assets/{diagram-QXG6HAR7-DYeQHxGU.js → diagram-QXG6HAR7-BSCHGzzT.js} +1 -1
  468. package/web/assets/{diagram-WEQXMOUZ-DYGU4T0y.js → diagram-WEQXMOUZ-DHtknmNT.js} +1 -1
  469. package/web/assets/{erDiagram-L5TCEMPS-bN3wlP2A.js → erDiagram-L5TCEMPS-Db-IYTmm.js} +1 -1
  470. package/web/assets/{flowDiagram-H6V6AXG4-YACVtF3-.js → flowDiagram-H6V6AXG4-BHDoyVoW.js} +1 -1
  471. package/web/assets/{index-BhnAdWTt.js → index-BR0IhgbR.js} +10 -10
  472. package/web/assets/{infoDiagram-3YFTVSEB-BWBzD28-.js → infoDiagram-3YFTVSEB-6h8wbWEe.js} +1 -1
  473. package/web/assets/{ishikawaDiagram-BNXS4ZKH-B8qYT-j9.js → ishikawaDiagram-BNXS4ZKH-Dx2OkPk1.js} +1 -1
  474. package/web/assets/{kanban-definition-75IXJCU3-BeoPr5Tl.js → kanban-definition-75IXJCU3-CIIEZfqV.js} +1 -1
  475. package/web/assets/{mindmap-definition-2TDM6QVE-CdLLN_so.js → mindmap-definition-2TDM6QVE-DUAqydRq.js} +1 -1
  476. package/web/assets/{pieDiagram-CU6KROY3-DEd2a_k_.js → pieDiagram-CU6KROY3-BntYuYZa.js} +1 -1
  477. package/web/assets/{requirementDiagram-JXO7QTGE-QNeTo5C_.js → requirementDiagram-JXO7QTGE-QCD6I29n.js} +1 -1
  478. package/web/assets/{sequenceDiagram-VS2MUI6T-BHC7q7yJ.js → sequenceDiagram-VS2MUI6T-DScFwLz2.js} +1 -1
  479. package/web/assets/{stateDiagram-7D4R322I-KONnc2Px.js → stateDiagram-7D4R322I-AkRAm6Hl.js} +1 -1
  480. package/web/assets/{stateDiagram-v2-36443NZ5-C2QfuMlu.js → stateDiagram-v2-36443NZ5-BCK1vigR.js} +1 -1
  481. package/web/assets/{timeline-definition-O6YCAMPW-D4t4NJx1.js → timeline-definition-O6YCAMPW-BvpIVXjX.js} +1 -1
  482. package/web/assets/{vennDiagram-MWXL3ELB-6bctC9Yg.js → vennDiagram-MWXL3ELB-BYGWk6dK.js} +1 -1
  483. package/web/assets/{wardleyDiagram-CUQ6CDDI-BPZYNTvC.js → wardleyDiagram-CUQ6CDDI-Dk1z7H2T.js} +1 -1
  484. package/web/assets/{xychartDiagram-N2JHSOCM-lBI9O6DW.js → xychartDiagram-N2JHSOCM-2N6NCSWN.js} +1 -1
  485. package/web/index.html +1 -1
  486. package/dist/_shared/scope-resolution/shadow/aggregate.d.ts +0 -63
  487. package/dist/_shared/scope-resolution/shadow/aggregate.d.ts.map +0 -1
  488. package/dist/_shared/scope-resolution/shadow/aggregate.js +0 -122
  489. package/dist/_shared/scope-resolution/shadow/aggregate.js.map +0 -1
  490. package/dist/_shared/scope-resolution/shadow/diff.d.ts +0 -59
  491. package/dist/_shared/scope-resolution/shadow/diff.d.ts.map +0 -1
  492. package/dist/_shared/scope-resolution/shadow/diff.js +0 -79
  493. package/dist/_shared/scope-resolution/shadow/diff.js.map +0 -1
  494. package/dist/core/ingestion/ast-cache.d.ts +0 -26
  495. package/dist/core/ingestion/ast-cache.js +0 -48
  496. package/dist/core/ingestion/heritage-extractors/configs/go.d.ts +0 -13
  497. package/dist/core/ingestion/heritage-extractors/configs/go.js +0 -20
  498. package/dist/core/ingestion/heritage-extractors/configs/ruby.d.ts +0 -18
  499. package/dist/core/ingestion/heritage-extractors/configs/ruby.js +0 -65
  500. package/dist/core/ingestion/heritage-extractors/generic.d.ts +0 -23
  501. package/dist/core/ingestion/heritage-extractors/generic.js +0 -47
  502. package/dist/core/ingestion/heritage-processor.d.ts +0 -54
  503. package/dist/core/ingestion/heritage-processor.js +0 -367
  504. package/dist/core/ingestion/heritage-types.d.ts +0 -73
  505. package/dist/core/ingestion/heritage-types.js +0 -2
  506. package/dist/core/ingestion/import-processor.d.ts +0 -23
  507. package/dist/core/ingestion/import-processor.js +0 -377
  508. package/dist/core/ingestion/model/heritage-map.d.ts +0 -105
  509. package/dist/core/ingestion/model/heritage-map.js +0 -294
  510. package/dist/core/ingestion/model/resolution-context.d.ts +0 -93
  511. package/dist/core/ingestion/model/resolution-context.js +0 -337
  512. package/dist/core/ingestion/named-bindings/csharp.d.ts +0 -3
  513. package/dist/core/ingestion/named-bindings/csharp.js +0 -37
  514. package/dist/core/ingestion/named-bindings/java.d.ts +0 -3
  515. package/dist/core/ingestion/named-bindings/java.js +0 -29
  516. package/dist/core/ingestion/named-bindings/kotlin.d.ts +0 -3
  517. package/dist/core/ingestion/named-bindings/kotlin.js +0 -36
  518. package/dist/core/ingestion/named-bindings/php.d.ts +0 -3
  519. package/dist/core/ingestion/named-bindings/php.js +0 -61
  520. package/dist/core/ingestion/named-bindings/python.d.ts +0 -3
  521. package/dist/core/ingestion/named-bindings/python.js +0 -49
  522. package/dist/core/ingestion/named-bindings/rust.d.ts +0 -3
  523. package/dist/core/ingestion/named-bindings/rust.js +0 -66
  524. package/dist/core/ingestion/named-bindings/types.d.ts +0 -16
  525. package/dist/core/ingestion/named-bindings/types.js +0 -6
  526. package/dist/core/ingestion/named-bindings/typescript.d.ts +0 -3
  527. package/dist/core/ingestion/named-bindings/typescript.js +0 -58
  528. package/dist/core/ingestion/pipeline-phases/cross-file-impl.d.ts +0 -17
  529. package/dist/core/ingestion/pipeline-phases/cross-file-impl.js +0 -209
  530. package/dist/core/ingestion/pipeline-phases/orm-extraction.d.ts +0 -22
  531. package/dist/core/ingestion/pipeline-phases/orm-extraction.js +0 -92
  532. package/dist/core/ingestion/pipeline-phases/wildcard-synthesis.d.ts +0 -70
  533. package/dist/core/ingestion/pipeline-phases/wildcard-synthesis.js +0 -312
  534. package/dist/core/ingestion/registry-primary-flag.d.ts +0 -89
  535. package/dist/core/ingestion/registry-primary-flag.js +0 -122
  536. package/dist/core/ingestion/shadow-harness.d.ts +0 -113
  537. package/dist/core/ingestion/shadow-harness.js +0 -148
  538. package/dist/core/ingestion/utils/ruby-self-call.d.ts +0 -52
  539. package/dist/core/ingestion/utils/ruby-self-call.js +0 -59
  540. package/scripts/ci-list-migrated-languages.ts +0 -24
  541. package/scripts/run-parity.ts +0 -128
@@ -78,6 +78,29 @@ export function markCppAnonymousNamespaceRange(filePath, range) {
78
78
  export function isCppAnonymousNamespaceScope(scopeId) {
79
79
  return anonymousNamespaceScopeIds.has(scopeId);
80
80
  }
81
+ /** Snapshot this file's file-local-linkage capture state for the side-channel. */
82
+ export function collectCppFileLocalSideChannel(filePath) {
83
+ const names = fileLocalNames.get(filePath);
84
+ const anon = anonymousNamespaceRangesByFile.get(filePath);
85
+ return {
86
+ fileLocalNames: names === undefined ? [] : [...names],
87
+ anonymousNamespaceRanges: anon === undefined ? [] : [...anon],
88
+ };
89
+ }
90
+ /** Restore this file's file-local-linkage capture state from the side-channel. */
91
+ export function applyCppFileLocalSideChannel(filePath, data) {
92
+ for (const name of data.fileLocalNames)
93
+ markFileLocal(filePath, name);
94
+ if (data.anonymousNamespaceRanges.length > 0) {
95
+ let set = anonymousNamespaceRangesByFile.get(filePath);
96
+ if (set === undefined) {
97
+ set = new Set();
98
+ anonymousNamespaceRangesByFile.set(filePath, set);
99
+ }
100
+ for (const r of data.anonymousNamespaceRanges)
101
+ set.add(r);
102
+ }
103
+ }
81
104
  /** Clear tracked file-local names (call at start of each resolution pass). */
82
105
  export function clearFileLocalNames() {
83
106
  fileLocalNames.clear();
@@ -205,8 +228,33 @@ export function isCppDefGloballyVisible(filePath, nodeId) {
205
228
  * does, mirror this filter or harden registration so class/namespace
206
229
  * members never enter `localDefs` unqualified.
207
230
  */
231
+ /**
232
+ * Per-pass memo: `moduleScope` → owning `ParsedFile`, keyed on the
233
+ * `parsedFiles` array identity. The shared finalize Phase-4 loop calls
234
+ * `expandsWildcardTo` (→ this) ONCE PER RESOLVED `#include` edge with the same
235
+ * `parsedFiles` reference; the old `parsedFiles.find(...)` was therefore O(F)
236
+ * per edge → O(R·F) overall (at kernel scale the ~25–30k `.h` headers are
237
+ * classified C++, so this fires hard — the C twin in `c/static-linkage.ts`).
238
+ * Building the lookup once collapses it to O(R+F). `WeakMap`-keyed so it is
239
+ * reclaimed with the pass (no cross-pass staleness; mirrors
240
+ * {@link clearFileLocalNames}).
241
+ */
242
+ const moduleScopeIndexByPass = new WeakMap();
243
+ function moduleScopeIndex(parsedFiles) {
244
+ let index = moduleScopeIndexByPass.get(parsedFiles);
245
+ if (index === undefined) {
246
+ index = new Map();
247
+ // First-wins to preserve `Array.find` semantics (returns the first match).
248
+ for (const p of parsedFiles) {
249
+ if (!index.has(p.moduleScope))
250
+ index.set(p.moduleScope, p);
251
+ }
252
+ moduleScopeIndexByPass.set(parsedFiles, index);
253
+ }
254
+ return index;
255
+ }
208
256
  export function expandCppWildcardNames(targetModuleScope, parsedFiles) {
209
- const target = parsedFiles.find((p) => p.moduleScope === targetModuleScope);
257
+ const target = moduleScopeIndex(parsedFiles).get(targetModuleScope);
210
258
  if (target === undefined)
211
259
  return [];
212
260
  // Build nodeId → owning Scope map from the structural scope tree.
@@ -4,6 +4,13 @@ import { type SyntaxNode } from '../../utils/ast-helpers.js';
4
4
  * Decompose a `preproc_include` node into a CaptureMatch with structured
5
5
  * import captures. C++ #include maps to a wildcard import (all symbols
6
6
  * from the header are visible). Identical to C's splitCInclude.
7
+ *
8
+ * Only literal include paths are emitted as import sources:
9
+ * #include <map> → system_lib_string
10
+ * #include "User.h" → string_literal
11
+ * A computed include like `#include HEADER_MACRO` carries an `identifier`
12
+ * path node (the macro name, not a header path); we skip it so it never
13
+ * becomes a garbage literal import source (issue #1919 F5).
7
14
  */
8
15
  export declare function splitCppInclude(node: SyntaxNode): CaptureMatch | null;
9
16
  /**
@@ -3,6 +3,13 @@ import { nodeToCapture, syntheticCapture } from '../../utils/ast-helpers.js';
3
3
  * Decompose a `preproc_include` node into a CaptureMatch with structured
4
4
  * import captures. C++ #include maps to a wildcard import (all symbols
5
5
  * from the header are visible). Identical to C's splitCInclude.
6
+ *
7
+ * Only literal include paths are emitted as import sources:
8
+ * #include <map> → system_lib_string
9
+ * #include "User.h" → string_literal
10
+ * A computed include like `#include HEADER_MACRO` carries an `identifier`
11
+ * path node (the macro name, not a header path); we skip it so it never
12
+ * becomes a garbage literal import source (issue #1919 F5).
6
13
  */
7
14
  export function splitCppInclude(node) {
8
15
  const pathNode = node.childForFieldName?.('path') ?? null;
@@ -20,6 +27,11 @@ export function splitCppInclude(node) {
20
27
  return buildIncludeCapture(node, pathNode);
21
28
  }
22
29
  function buildIncludeCapture(node, pathNode) {
30
+ // Skip computed includes (`#include MACRO`) — the path is an `identifier`,
31
+ // not a literal header path. Emitting it would create a garbage import.
32
+ if (pathNode.type !== 'string_literal' && pathNode.type !== 'system_lib_string') {
33
+ return null;
34
+ }
23
35
  let raw;
24
36
  if (pathNode.type === 'string_literal') {
25
37
  const content = pathNode.namedChildren.find((c) => c.type === 'string_content');
@@ -9,3 +9,4 @@ export { cppMergeBindings } from './merge-bindings.js';
9
9
  export { cppBindingScopeFor, cppImportOwningScope, cppReceiverBinding } from './simple-hooks.js';
10
10
  export { resolveCppImportTarget } from './import-target.js';
11
11
  export { markFileLocal, isFileLocal, clearFileLocalNames, expandCppWildcardNames, } from './file-local-linkage.js';
12
+ export { collectCppCaptureSideChannel, applyCppCaptureSideChannel, } from './capture-side-channel.js';
@@ -9,3 +9,4 @@ export { cppMergeBindings } from './merge-bindings.js';
9
9
  export { cppBindingScopeFor, cppImportOwningScope, cppReceiverBinding } from './simple-hooks.js';
10
10
  export { resolveCppImportTarget } from './import-target.js';
11
11
  export { markFileLocal, isFileLocal, clearFileLocalNames, expandCppWildcardNames, } from './file-local-linkage.js';
12
+ export { collectCppCaptureSideChannel, applyCppCaptureSideChannel, } from './capture-side-channel.js';
@@ -38,6 +38,14 @@ interface RangeKey {
38
38
  * Called from `emitCppScopeCaptures` when the tree-sitter AST shows an
39
39
  * `inline` keyword child on `namespace_definition`. */
40
40
  export declare function markCppInlineNamespaceRange(filePath: string, range: RangeKey): void;
41
+ /** Snapshot this file's captured inline-namespace ranges for the worker→main
42
+ * side-channel (#1983). `populateCppInlineNamespaceScopes` (in `populateOwners`)
43
+ * later resolves these range keys to ScopeIds on the main thread, so only the
44
+ * capture-time ranges need to cross the boundary. Returns the rangeKey strings
45
+ * as a plain array (empty when this file recorded none). */
46
+ export declare function collectCppInlineNamespaceSideChannel(filePath: string): readonly string[];
47
+ /** Restore this file's captured inline-namespace ranges from the side-channel. */
48
+ export declare function applyCppInlineNamespaceSideChannel(filePath: string, ranges: readonly string[]): void;
41
49
  /** Clear all inline-namespace state. Called from `clearFileLocalNames`. */
42
50
  export declare function clearCppInlineNamespaces(): void;
43
51
  /** Resolve captured ranges to actual ScopeIds by matching scope ranges
@@ -44,6 +44,27 @@ export function markCppInlineNamespaceRange(filePath, range) {
44
44
  }
45
45
  set.add(rangeKey(range));
46
46
  }
47
+ /** Snapshot this file's captured inline-namespace ranges for the worker→main
48
+ * side-channel (#1983). `populateCppInlineNamespaceScopes` (in `populateOwners`)
49
+ * later resolves these range keys to ScopeIds on the main thread, so only the
50
+ * capture-time ranges need to cross the boundary. Returns the rangeKey strings
51
+ * as a plain array (empty when this file recorded none). */
52
+ export function collectCppInlineNamespaceSideChannel(filePath) {
53
+ const set = inlineNamespaceRangesByFile.get(filePath);
54
+ return set === undefined ? [] : [...set];
55
+ }
56
+ /** Restore this file's captured inline-namespace ranges from the side-channel. */
57
+ export function applyCppInlineNamespaceSideChannel(filePath, ranges) {
58
+ if (ranges.length === 0)
59
+ return;
60
+ let set = inlineNamespaceRangesByFile.get(filePath);
61
+ if (set === undefined) {
62
+ set = new Set();
63
+ inlineNamespaceRangesByFile.set(filePath, set);
64
+ }
65
+ for (const r of ranges)
66
+ set.add(r);
67
+ }
47
68
  /** Clear all inline-namespace state. Called from `clearFileLocalNames`. */
48
69
  export function clearCppInlineNamespaces() {
49
70
  inlineNamespaceRangesByFile.clear();
@@ -47,6 +47,12 @@ const CPP_SCOPE_QUERY = `
47
47
  (template_argument_list) @declaration.template-arguments)
48
48
  body: (field_declaration_list)) @declaration.struct
49
49
 
50
+ ;; Declarations — struct (typedef struct { ... } Name)
51
+ (type_definition
52
+ type: (struct_specifier
53
+ body: (field_declaration_list))
54
+ declarator: (type_identifier) @declaration.name) @declaration.struct
55
+
50
56
  ;; ─── Declarations — class / struct inside template_declaration ───────
51
57
  (template_declaration
52
58
  (class_specifier
@@ -76,6 +82,12 @@ const CPP_SCOPE_QUERY = `
76
82
  (enum_specifier
77
83
  name: (type_identifier) @declaration.name) @declaration.enum
78
84
 
85
+ ;; ─── Declarations — enum (typedef enum { ... } Name) ─────────────────
86
+ (type_definition
87
+ type: (enum_specifier
88
+ body: (enumerator_list))
89
+ declarator: (type_identifier) @declaration.name) @declaration.enum
90
+
79
91
  ;; ─── Declarations — enum constants ───────────────────────────────────
80
92
  (enumerator
81
93
  name: (identifier) @declaration.name) @declaration.const
@@ -260,6 +272,15 @@ const CPP_SCOPE_QUERY = `
260
272
  declarator: (init_declarator
261
273
  declarator: (identifier) @declaration.name)) @declaration.variable
262
274
 
275
+ ;; ─── Declarations — variables (without initializer) ─────────────────
276
+ ;; Covers non-leading declarators in mixed declaration lists.
277
+ (declaration
278
+ declarator: (identifier) @declaration.name) @declaration.variable
279
+
280
+ (declaration
281
+ declarator: (pointer_declarator
282
+ declarator: (identifier) @declaration.name)) @declaration.variable
283
+
263
284
  ;; ─── Declarations — macro definitions ───────────────────────────────
264
285
  (preproc_def
265
286
  name: (identifier) @declaration.name) @declaration.macro
@@ -1,6 +1,7 @@
1
1
  import { getCppParser } from './query.js';
2
2
  import { getTreeSitterBufferSize } from '../../constants.js';
3
- import { parseSourceSafe } from '../../../tree-sitter/safe-parse.js';
3
+ import { parseSourceSafe, ParseTimeoutError } from '../../../tree-sitter/safe-parse.js';
4
+ import { logger } from '../../../logger.js';
4
5
  /**
5
6
  * Populate range-for loop variable type bindings for C++.
6
7
  *
@@ -20,10 +21,24 @@ export function populateCppRangeBindings(parsedFiles, _indexes, ctx) {
20
21
  if (sourceText === undefined)
21
22
  continue;
22
23
  const cachedTree = ctx.treeCache?.get(parsed.filePath);
23
- const tree = cachedTree ??
24
- parseSourceSafe(parser, sourceText, undefined, {
25
- bufferSize: getTreeSitterBufferSize(sourceText),
26
- });
24
+ let tree;
25
+ if (cachedTree !== undefined) {
26
+ tree = cachedTree;
27
+ }
28
+ else {
29
+ try {
30
+ tree = parseSourceSafe(parser, sourceText, undefined, {
31
+ bufferSize: getTreeSitterBufferSize(sourceText),
32
+ });
33
+ }
34
+ catch (err) {
35
+ if (err instanceof ParseTimeoutError) {
36
+ logger.warn({ file: parsed.filePath }, 'cpp range-binding: parse timed out, skipping file');
37
+ continue;
38
+ }
39
+ throw err;
40
+ }
41
+ }
27
42
  const moduleScope = parsed.scopes.find((s) => s.kind === 'Module');
28
43
  if (moduleScope === undefined)
29
44
  continue;
@@ -1,7 +1,7 @@
1
1
  import { findClassBindingInScope, findEnclosingClassDef, } from '../../scope-resolution/scope/walkers.js';
2
2
  import { SupportedLanguages } from '../../../../_shared/index.js';
3
3
  import { buildMro, defaultLinearize } from '../../scope-resolution/passes/mro.js';
4
- import { populateClassOwnedMembers } from '../../scope-resolution/scope/walkers.js';
4
+ import { populateClassOwnedMembers, tagNamespacePrefixes, } from '../../scope-resolution/scope/walkers.js';
5
5
  import { cppProvider } from '../c-cpp.js';
6
6
  import { cppArityCompatibility } from './arity.js';
7
7
  import { cppConversionRank } from './conversion-rank.js';
@@ -11,10 +11,38 @@ import { scanCppHeaderFiles } from './header-scan.js';
11
11
  import { expandCppWildcardNames, isFileLocal, clearFileLocalNames, populateCppAnonymousNamespaceScopes, populateCppNonGloballyVisible, isCppDefGloballyVisible, } from './file-local-linkage.js';
12
12
  import { populateCppDependentBases, clearCppDependentBases, isCppDependentBaseMember, } from './two-phase-lookup.js';
13
13
  import { populateCppAssociatedNamespaces, clearCppAdlState, pickCppAdlCandidates } from './adl.js';
14
+ import { applyCppCaptureSideChannel } from './capture-side-channel.js';
14
15
  import { clearCppInlineNamespaces, populateCppInlineNamespaceScopes, resolveCppQualifiedNamespaceMember, } from './inline-namespaces.js';
15
16
  import { populateCppRangeBindings } from './range-bindings.js';
16
17
  import { cppConstraintCompatibility } from './constraint-filter.js';
17
18
  import { clearCppUserDefinedConversions, populateCppUserDefinedConversions, } from './user-defined-conversions.js';
19
+ /**
20
+ * Per-pass memo of the augmented `#include`-resolution file set
21
+ * (`allFilePaths` ∪ header paths), keyed on the two stable source sets.
22
+ * `resolveImportTarget` is called once per C++ `#include`; the old code rebuilt
23
+ * a fresh ~F-entry `Set` on every call AND defeated the shared
24
+ * `resolveCImportTarget` suffix-index memo (in `c/import-target.ts`) by handing
25
+ * it a new set identity each time. Both inputs are stable per pass, so the
26
+ * union is built once and reused. `WeakMap`-keyed → reclaimed with the pass.
27
+ * (Twin of the C resolver's `augmentedFilePaths`.)
28
+ */
29
+ const augmentedPathsByPass = new WeakMap();
30
+ function augmentedFilePaths(allFilePaths, headerPaths) {
31
+ let byHeaders = augmentedPathsByPass.get(allFilePaths);
32
+ if (byHeaders === undefined) {
33
+ byHeaders = new WeakMap();
34
+ augmentedPathsByPass.set(allFilePaths, byHeaders);
35
+ }
36
+ let augmented = byHeaders.get(headerPaths);
37
+ if (augmented === undefined) {
38
+ const set = new Set(allFilePaths);
39
+ for (const h of headerPaths)
40
+ set.add(h);
41
+ augmented = set;
42
+ byHeaders.set(headerPaths, augmented);
43
+ }
44
+ return augmented;
45
+ }
18
46
  /**
19
47
  * C++ `ScopeResolver` registered in `SCOPE_RESOLVERS` and consumed by
20
48
  * the generic `runScopeResolution` orchestrator (RFC #909 Ring 3).
@@ -49,10 +77,7 @@ export const cppScopeResolver = {
49
77
  // detection but are importable from .cpp files via #include.
50
78
  const headerPaths = resolutionConfig;
51
79
  if (headerPaths !== undefined && headerPaths.size > 0) {
52
- const augmented = new Set(allFilePaths);
53
- for (const h of headerPaths)
54
- augmented.add(h);
55
- return resolveCppImportTarget(targetRaw, fromFile, augmented);
80
+ return resolveCppImportTarget(targetRaw, fromFile, augmentedFilePaths(allFilePaths, headerPaths));
56
81
  }
57
82
  return resolveCppImportTarget(targetRaw, fromFile, allFilePaths);
58
83
  },
@@ -67,8 +92,30 @@ export const cppScopeResolver = {
67
92
  // `'unknown'` keeps the candidate, preserving "degrade not lie".
68
93
  constraintCompatibility: cppConstraintCompatibility,
69
94
  buildMro: (graph, parsedFiles, nodeLookup) => buildMro(graph, parsedFiles, nodeLookup, defaultLinearize),
95
+ // Worker-boundary restore (see `ScopeResolver.applyCaptureSideChannel`).
96
+ // `emitCppScopeCaptures` records per-file ADL call-site arg shapes
97
+ // (`markCppAdlSiteArgs`/`markCppAdlSiteNoAdl`), inline-/anonymous-namespace
98
+ // ranges (`markCppInlineNamespaceRange`/`markCppAnonymousNamespaceRange`),
99
+ // dependent-base names (`markCppDependentBase`/`markCppDependentPackBase`),
100
+ // and file-local linkage (`markFileLocal`) into module-level maps as a SIDE
101
+ // EFFECT — none of it is serialized onto the returned ParsedFile's scopes/defs.
102
+ // On the worker path those marks are populated in the worker process and lost
103
+ // across the MessageChannel / disk store; the main thread reuses the
104
+ // serialized ParsedFile and skips `extractParsedFile`, so `populateOwners` +
105
+ // the ADL / two-phase-lookup passes would see empty maps and emit zero edges.
106
+ // The worker stashed a plain-data snapshot on `parsed.captureSideChannel` via
107
+ // `cppProvider.collectCaptureSideChannel`; this restores it into the module
108
+ // maps WITHOUT any tree-sitter re-parse (the #1983 fix — the old re-parse
109
+ // replay re-OOM'd huge `.h`/`.cpp` repos). The freshly-extracted leg never
110
+ // calls this — its marks were just populated in this process.
111
+ applyCaptureSideChannel: applyCppCaptureSideChannel,
70
112
  populateOwners: (parsed) => {
71
113
  populateClassOwnedMembers(parsed);
114
+ // #1982: tag namespace-nested defs with their enclosing-namespace prefix so
115
+ // resolveDefGraphId can map them to the namespace-qualified structure-phase
116
+ // node (`NS.A.Inner`) instead of collapsing same-tail nested bases via the
117
+ // simpleKey fallback. Does NOT change qualifiedName (resolution unaffected).
118
+ tagNamespacePrefixes(parsed);
72
119
  // Resolve inline- and anonymous-namespace ranges (recorded at capture
73
120
  // time) to ScopeIds BEFORE `populateCppNonGloballyVisible` runs, so
74
121
  // both exemptions see the populated Sets.
@@ -44,6 +44,26 @@ import type { ScopeResolutionIndexes } from '../../model/scope-resolution-indexe
44
44
  * `populateCppDependentBases`).
45
45
  */
46
46
  export declare function markCppDependentBase(filePath: string, className: string, baseName: string, qualifier?: string): void;
47
+ export declare function markCppDependentPackBase(filePath: string, className: string): void;
48
+ /**
49
+ * Plain-data, JSON-serializable snapshot of the per-file capture-time
50
+ * two-phase-lookup state. Carried on `ParsedFile.captureSideChannel` across the
51
+ * worker→main boundary (#1983). The resolved `dependentBaseNodeIds` index is
52
+ * rebuilt by `populateCppDependentBases` (workspace pass) after all files have
53
+ * their `populateOwners` applied, so only the two capture-time maps cross.
54
+ *
55
+ * Nested `Map`/`Set` are flattened to arrays here so the snapshot stays plain
56
+ * JSON (avoids relying on the parsedfile-store's Map/Set replacer for nested
57
+ * structures): `dependentBases` is `[className, [baseName, qualifiers[]][]][]`.
58
+ */
59
+ export interface CppTwoPhaseSideChannel {
60
+ readonly dependentBases: readonly [string, readonly [string, readonly string[]][]][];
61
+ readonly dependentPackBaseClasses: readonly string[];
62
+ }
63
+ /** Snapshot this file's two-phase-lookup capture state for the side-channel. */
64
+ export declare function collectCppTwoPhaseSideChannel(filePath: string): CppTwoPhaseSideChannel;
65
+ /** Restore this file's two-phase-lookup capture state from the side-channel. */
66
+ export declare function applyCppTwoPhaseSideChannel(filePath: string, data: CppTwoPhaseSideChannel): void;
47
67
  /** Clear two-phase-lookup state. Called from `clearFileLocalNames`. */
48
68
  export declare function clearCppDependentBases(): void;
49
69
  /**
@@ -41,6 +41,12 @@ import { findEnclosingClassDef } from '../../scope-resolution/scope/walkers.js';
41
41
  * qualifier is '' when the base was unqualified.
42
42
  */
43
43
  const dependentBasesByFile = new Map();
44
+ /**
45
+ * Class templates with pack-expanded bases (`struct Mix : Bases...`) have
46
+ * an unknown set of base classes. Unqualified member lookup inside the class
47
+ * cannot safely bind to class-owned methods outside the current class.
48
+ */
49
+ const dependentPackBaseClassesByFile = new Map();
44
50
  /**
45
51
  * Post-`populateOwners` resolution: per-class-nodeId, the set of
46
52
  * dependent-base-class nodeIds. Built by `populateCppDependentBases`
@@ -76,9 +82,50 @@ export function markCppDependentBase(filePath, className, baseName, qualifier =
76
82
  }
77
83
  quals.add(qualifier);
78
84
  }
85
+ export function markCppDependentPackBase(filePath, className) {
86
+ let perFile = dependentPackBaseClassesByFile.get(filePath);
87
+ if (perFile === undefined) {
88
+ perFile = new Set();
89
+ dependentPackBaseClassesByFile.set(filePath, perFile);
90
+ }
91
+ perFile.add(className);
92
+ }
93
+ /** Snapshot this file's two-phase-lookup capture state for the side-channel. */
94
+ export function collectCppTwoPhaseSideChannel(filePath) {
95
+ const perFile = dependentBasesByFile.get(filePath);
96
+ const dependentBases = [];
97
+ if (perFile !== undefined) {
98
+ for (const [className, bases] of perFile) {
99
+ const baseEntries = [];
100
+ for (const [baseName, quals] of bases) {
101
+ baseEntries.push([baseName, [...quals]]);
102
+ }
103
+ dependentBases.push([className, baseEntries]);
104
+ }
105
+ }
106
+ const pack = dependentPackBaseClassesByFile.get(filePath);
107
+ return {
108
+ dependentBases,
109
+ dependentPackBaseClasses: pack === undefined ? [] : [...pack],
110
+ };
111
+ }
112
+ /** Restore this file's two-phase-lookup capture state from the side-channel. */
113
+ export function applyCppTwoPhaseSideChannel(filePath, data) {
114
+ for (const [className, baseEntries] of data.dependentBases) {
115
+ for (const [baseName, quals] of baseEntries) {
116
+ for (const qualifier of quals) {
117
+ markCppDependentBase(filePath, className, baseName, qualifier);
118
+ }
119
+ }
120
+ }
121
+ for (const className of data.dependentPackBaseClasses) {
122
+ markCppDependentPackBase(filePath, className);
123
+ }
124
+ }
79
125
  /** Clear two-phase-lookup state. Called from `clearFileLocalNames`. */
80
126
  export function clearCppDependentBases() {
81
127
  dependentBasesByFile.clear();
128
+ dependentPackBaseClassesByFile.clear();
82
129
  dependentBaseNodeIds.clear();
83
130
  }
84
131
  /**
@@ -97,7 +144,7 @@ export function clearCppDependentBases() {
97
144
  * found (conservative: avoids false associations).
98
145
  */
99
146
  export function populateCppDependentBases(parsedFiles) {
100
- if (dependentBasesByFile.size === 0)
147
+ if (dependentBasesByFile.size === 0 && dependentPackBaseClassesByFile.size === 0)
101
148
  return;
102
149
  // Build workspace-wide index: simpleName → {nodeId, nsPrefix}[]
103
150
  // nsPrefix is the dot-joined namespace path (qualifiedName without the
@@ -153,6 +200,15 @@ export function populateCppDependentBases(parsedFiles) {
153
200
  const nsPrefix = lastDot >= 0 ? qn.slice(0, lastDot) : '';
154
201
  localClassByName.set(simple, { nodeId: def.nodeId, nsPrefix });
155
202
  }
203
+ const packBaseClasses = dependentPackBaseClassesByFile.get(filePath);
204
+ if (packBaseClasses !== undefined) {
205
+ for (const className of packBaseClasses) {
206
+ const classEntry = localClassByName.get(className);
207
+ if (classEntry !== undefined) {
208
+ dependentBaseNodeIds.set(classEntry.nodeId, new Set(['*pack-expansion*']));
209
+ }
210
+ }
211
+ }
156
212
  // V3: qualifier-based exact targeting. When the base specifier carries
157
213
  // a syntactic qualifier (e.g., `detail` in `detail::Inner<T>`), compute
158
214
  // the expected namespace prefix and use exact (===) match. Falls back to
@@ -247,13 +303,37 @@ export function populateCppDependentBases(parsedFiles) {
247
303
  * access; missing edges here match the compiler's diagnostic shape.
248
304
  */
249
305
  export function isCppDependentBaseMember(callerScopeId, candidateDef, scopes) {
250
- if (candidateDef.ownerId === undefined)
251
- return false;
252
306
  const enclosing = findEnclosingClassDef(callerScopeId, scopes);
253
307
  if (enclosing === undefined)
254
308
  return false;
255
309
  const bases = dependentBaseNodeIds.get(enclosing.nodeId);
256
310
  if (bases === undefined)
257
311
  return false;
312
+ if (bases.has('*pack-expansion*')) {
313
+ if (candidateDef.ownerId !== undefined)
314
+ return candidateDef.ownerId !== enclosing.nodeId;
315
+ if (candidateDef.type !== 'Method' && candidateDef.type !== 'Constructor')
316
+ return false;
317
+ const ownerName = getQualifiedParentName(candidateDef.qualifiedName);
318
+ const enclosingName = getQualifiedSimpleName(enclosing.qualifiedName);
319
+ return ownerName !== undefined && ownerName !== enclosingName;
320
+ }
321
+ if (candidateDef.ownerId === undefined)
322
+ return false;
258
323
  return bases.has(candidateDef.ownerId);
259
324
  }
325
+ function getQualifiedParentName(qualifiedName) {
326
+ if (qualifiedName === undefined)
327
+ return undefined;
328
+ const lastDot = qualifiedName.lastIndexOf('.');
329
+ if (lastDot < 0)
330
+ return undefined;
331
+ const parent = qualifiedName.slice(0, lastDot);
332
+ return getQualifiedSimpleName(parent);
333
+ }
334
+ function getQualifiedSimpleName(qualifiedName) {
335
+ if (qualifiedName === undefined)
336
+ return undefined;
337
+ const lastDot = qualifiedName.lastIndexOf('.');
338
+ return lastDot >= 0 ? qualifiedName.slice(lastDot + 1) : qualifiedName;
339
+ }