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
@@ -25,10 +25,22 @@
25
25
  // attribute axes; this expression closes both at once.
26
26
  const SCRIPT_RE = /<script(\s[^>]*)?>([^]*?)<\/script[^>]*>/gi;
27
27
  const TEMPLATE_COMPONENT_RE = /<([A-Z][A-Za-z0-9]+)/g;
28
+ const TEMPLATE_KEBAB_COMPONENT_RE = /<([a-z][a-z0-9]*(?:-[a-z0-9]+)+)\b/g;
28
29
  // Greedy: matches from the first <template> to the *last* </template>.
29
30
  // This is intentional — nested <template v-slot:...> tags are valid Vue
30
31
  // syntax and we want the entire outermost template body.
31
32
  const TEMPLATE_RE = /<template(\s[^>]*)?>([^]*)<\/template>/;
33
+ const VUE_BUILTIN_KEBAB_TAGS = new Set([
34
+ 'router-view',
35
+ 'router-link',
36
+ 'transition',
37
+ 'transition-group',
38
+ 'keep-alive',
39
+ 'teleport',
40
+ 'suspense',
41
+ 'component',
42
+ 'slot',
43
+ ]);
32
44
  function countNewlines(text) {
33
45
  let count = 0;
34
46
  for (let i = 0; i < text.length; i++) {
@@ -37,6 +49,156 @@ function countNewlines(text) {
37
49
  }
38
50
  return count;
39
51
  }
52
+ function kebabToPascal(name) {
53
+ return name
54
+ .split('-')
55
+ .filter((part) => part.length > 0)
56
+ .map((part) => part.charAt(0).toUpperCase() + part.slice(1))
57
+ .join('');
58
+ }
59
+ function isBuiltinKebabTag(tagName) {
60
+ return VUE_BUILTIN_KEBAB_TAGS.has(tagName);
61
+ }
62
+ /**
63
+ * Extract bare `emit('event')` / `$emit('event')` calls from script text.
64
+ *
65
+ * Uses a lightweight lexer state-machine (code vs comments/strings), so:
66
+ * - ignores `emit(...)` in comments and string literals
67
+ * - ignores property calls like `socket.emit(...)` / `this.$emit(...)`
68
+ * - captures only literal-string event names
69
+ */
70
+ function collectBareEmitEventNames(input) {
71
+ let Mode;
72
+ (function (Mode) {
73
+ Mode[Mode["Code"] = 0] = "Code";
74
+ Mode[Mode["SingleQuote"] = 1] = "SingleQuote";
75
+ Mode[Mode["DoubleQuote"] = 2] = "DoubleQuote";
76
+ Mode[Mode["Template"] = 3] = "Template";
77
+ Mode[Mode["LineComment"] = 4] = "LineComment";
78
+ Mode[Mode["BlockComment"] = 5] = "BlockComment";
79
+ })(Mode || (Mode = {}));
80
+ const events = [];
81
+ const seen = new Set();
82
+ let mode = Mode.Code;
83
+ const isIdentChar = (c) => /[A-Za-z0-9_$]/.test(c);
84
+ const skipSpaces = (idx) => {
85
+ let i = idx;
86
+ while (i < input.length && /\s/.test(input[i]))
87
+ i++;
88
+ return i;
89
+ };
90
+ /**
91
+ * Return true if the token immediately before the `.` at `dotIdx` is the
92
+ * keyword `this` and is not itself a property access (e.g. not `foo.this`).
93
+ * Used to allow `this.$emit(...)` while blocking `socket.emit(...)`.
94
+ */
95
+ const lookbackIsThis = (dotIdx) => {
96
+ let j = dotIdx - 1; // step past the '.'
97
+ while (j >= 0 && /\s/.test(input[j]))
98
+ j--;
99
+ if (j < 3)
100
+ return false;
101
+ if (input.slice(j - 3, j + 1) !== 'this')
102
+ return false;
103
+ // Ensure 'this' is not itself a property target (e.g. foo.this)
104
+ const prevOfThis = j >= 4 ? input[j - 4] : '';
105
+ return !(prevOfThis.length > 0 && (isIdentChar(prevOfThis) || prevOfThis === '.'));
106
+ };
107
+ const tryConsumeEmitCall = (idx) => {
108
+ const hasDollar = input[idx] === '$';
109
+ const name = hasDollar ? '$emit' : 'emit';
110
+ if (!input.startsWith(name, idx))
111
+ return idx;
112
+ const prev = idx > 0 ? input[idx - 1] : '';
113
+ if (prev.length > 0 && isIdentChar(prev))
114
+ return idx;
115
+ if (prev === '.') {
116
+ // Allow `this.$emit(...)` / `this.emit(...)` but block `socket.emit(...)`.
117
+ if (!lookbackIsThis(idx - 1))
118
+ return idx;
119
+ }
120
+ const afterName = idx + name.length;
121
+ const next = afterName < input.length ? input[afterName] : '';
122
+ if (next.length > 0 && isIdentChar(next))
123
+ return idx;
124
+ let i = skipSpaces(afterName);
125
+ if (input[i] !== '(')
126
+ return idx;
127
+ i = skipSpaces(i + 1);
128
+ const quote = input[i];
129
+ if (quote !== "'" && quote !== '"')
130
+ return idx;
131
+ let eventName = '';
132
+ i++;
133
+ while (i < input.length) {
134
+ const ch = input[i];
135
+ if (ch === '\\') {
136
+ i += 2;
137
+ continue;
138
+ }
139
+ if (ch === quote)
140
+ break;
141
+ eventName += ch;
142
+ i++;
143
+ }
144
+ if (i >= input.length)
145
+ return idx;
146
+ // Allow simple names ("save"), hyphenated names ("user-loaded"), and
147
+ // update modifier patterns ("update:modelValue", "update:model-value").
148
+ if (/^[A-Za-z$_][A-Za-z0-9:_$-]*$/.test(eventName) && !seen.has(eventName)) {
149
+ seen.add(eventName);
150
+ events.push(eventName);
151
+ }
152
+ return i;
153
+ };
154
+ for (let i = 0; i < input.length; i++) {
155
+ const ch = input[i];
156
+ const next = i + 1 < input.length ? input[i + 1] : '';
157
+ if (mode === Mode.Code) {
158
+ const consumedAt = tryConsumeEmitCall(i);
159
+ if (consumedAt !== i) {
160
+ i = consumedAt;
161
+ continue;
162
+ }
163
+ if (ch === "'" || ch === '"' || ch === '`') {
164
+ mode = ch === "'" ? Mode.SingleQuote : ch === '"' ? Mode.DoubleQuote : Mode.Template;
165
+ continue;
166
+ }
167
+ if (ch === '/' && next === '/') {
168
+ mode = Mode.LineComment;
169
+ i++;
170
+ }
171
+ else if (ch === '/' && next === '*') {
172
+ mode = Mode.BlockComment;
173
+ i++;
174
+ }
175
+ continue;
176
+ }
177
+ if (mode === Mode.LineComment) {
178
+ if (ch === '\n') {
179
+ mode = Mode.Code;
180
+ }
181
+ continue;
182
+ }
183
+ if (mode === Mode.BlockComment) {
184
+ if (ch === '*' && next === '/') {
185
+ i++;
186
+ mode = Mode.Code;
187
+ }
188
+ continue;
189
+ }
190
+ if (ch === '\\') {
191
+ i++;
192
+ continue;
193
+ }
194
+ if ((mode === Mode.SingleQuote && ch === "'") ||
195
+ (mode === Mode.DoubleQuote && ch === '"') ||
196
+ (mode === Mode.Template && ch === '`')) {
197
+ mode = Mode.Code;
198
+ }
199
+ }
200
+ return events;
201
+ }
40
202
  function parseScriptBlock(attrs, content, precedingText) {
41
203
  const isSetup = attrs != null && /\bsetup\b/.test(attrs);
42
204
  const langMatch = attrs?.match(/\blang\s*=\s*["']([^"']+)["']/);
@@ -48,11 +210,9 @@ function parseScriptBlock(attrs, content, precedingText) {
48
210
  /**
49
211
  * Extract script content from a Vue SFC.
50
212
  *
51
- * When both <script> and <script setup> are present, returns only the
52
- * <script setup> block (the dominant pattern 94% of Vue files in real
53
- * projects use setup). The <script> (non-setup) block typically contains
54
- * only `defineOptions` or legacy option merges and is less important for
55
- * the knowledge graph.
213
+ * When both <script> and <script setup> are present, the content of all
214
+ * blocks is combined (non-setup first, then setup) so the full script
215
+ * surface is available to the knowledge graph.
56
216
  */
57
217
  export function extractVueScript(vueContent) {
58
218
  const blocks = [];
@@ -65,13 +225,21 @@ export function extractVueScript(vueContent) {
65
225
  }
66
226
  if (blocks.length === 0)
67
227
  return null;
68
- // Prefer <script setup> if present
69
- const setupBlock = blocks.find((b) => b.isSetup);
70
- const primary = setupBlock ?? blocks[0];
228
+ // Merge all blocks: non-setup first, then setup, so content order is stable.
229
+ const nonSetupBlocks = blocks.filter((b) => !b.isSetup);
230
+ const setupBlocks = blocks.filter((b) => b.isSetup);
231
+ const ordered = [...nonSetupBlocks, ...setupBlocks];
232
+ const combinedContent = ordered.map((b) => b.content).join('\n');
233
+ const lineOffset = ordered[0].lineOffset;
234
+ // Only use JavaScript grammar when ALL blocks are explicitly lang="js"
235
+ // or lang="jsx". If any block omits lang or uses ts/tsx, TypeScript wins.
236
+ const allBlocksJs = blocks.length > 0 && blocks.every((b) => b.lang === 'js' || b.lang === 'jsx');
237
+ const lang = allBlocksJs ? 'js' : '';
71
238
  return {
72
- scriptContent: primary.content,
73
- lineOffset: primary.lineOffset,
74
- isSetup: primary.isSetup,
239
+ scriptContent: combinedContent,
240
+ lineOffset,
241
+ isSetup: blocks.some((b) => b.isSetup),
242
+ lang,
75
243
  };
76
244
  }
77
245
  /**
@@ -107,5 +275,259 @@ export function extractTemplateComponents(vueContent) {
107
275
  while ((componentMatch = TEMPLATE_COMPONENT_RE.exec(templateContent)) !== null) {
108
276
  components.add(componentMatch[1]);
109
277
  }
278
+ TEMPLATE_KEBAB_COMPONENT_RE.lastIndex = 0;
279
+ while ((componentMatch = TEMPLATE_KEBAB_COMPONENT_RE.exec(templateContent)) !== null) {
280
+ if (isBuiltinKebabTag(componentMatch[1]))
281
+ continue;
282
+ components.add(kebabToPascal(componentMatch[1]));
283
+ }
110
284
  return [...components];
111
285
  }
286
+ // ── Per-element event binding extraction ──────────────────────────────────
287
+ //
288
+ // Three sibling regexes capture opening tags distinguished by PascalCase
289
+ // (Vue components), kebab-case (Vue components in kebab form), and simple
290
+ // lowercase (native HTML elements). All stop their attribute-block capture
291
+ // at the first `>` with a bounded span of at most 512 characters to avoid
292
+ // pathological backtracking on large template files (ReDoS mitigation).
293
+ // Multi-line tags whose attribute block contains a literal `>` are documented
294
+ // as a known limitation (#1647).
295
+ //
296
+ // NATIVE_TAG_RE uses `(?![A-Za-z0-9-])` to prevent matching the `post` prefix
297
+ // of a kebab-case component tag like `<post-list>` — such tags are handled by
298
+ // KEBAB_COMPONENT_TAG_RE, not NATIVE_TAG_RE.
299
+ const COMPONENT_TAG_RE = /<([A-Z][A-Za-z0-9]+)([^>]{0,512}?)(?:\/>|>)/g;
300
+ const KEBAB_COMPONENT_TAG_RE = /<([a-z][a-z0-9]*(?:-[a-z0-9]+)+)([^>]{0,512}?)(?:\/>|>)/g;
301
+ const NATIVE_TAG_RE = /<([a-z][a-z0-9]*)(?![A-Za-z0-9-])([^>]{0,512}?)(?:\/>|>)/g;
302
+ // Within any tag's attribute block: matches Vue event bindings.
303
+ // @action="handleAction"
304
+ // @keyup.enter="submit"
305
+ // @user-loaded="onLoaded" — hyphenated event names
306
+ // @update:model-value="onChange" — update modifier with colon
307
+ // v-on:click="onClick"
308
+ const TAG_EVENT_RE = /(?:@|v-on:)([\w:.-]+)\s*=\s*["']([A-Za-z_$][A-Za-z0-9_$]*)["']/g;
309
+ // ── Script emit() call extraction ─────────────────────────────────────────
310
+ // Matches simple variable references in Vue bound-attribute values.
311
+ // Captures only bare identifiers — not member-access (":key=\"post.id\""),
312
+ // literals (":id=\"1\""), or expressions (":val=\"a + b\"").
313
+ //
314
+ // :userId="currentUserId" → "currentUserId"
315
+ // :posts="allPosts" → "allPosts"
316
+ // v-bind:disabled="isLoading" → "isLoading"
317
+ // :key="post.id" — skipped (member access)
318
+ // :id="1" — skipped (literal)
319
+ const BOUND_ATTR_RE = /(?::[\w-]+|v-bind:[\w-]+)\s*=\s*["']([A-Za-z_$][A-Za-z0-9_$]*)["']/g;
320
+ /**
321
+ * Extract Vue component event bindings from a `<template>` block.
322
+ *
323
+ * Scans PascalCase component elements (e.g. `<PostList>`, `<UserCard>`) and
324
+ * returns each `@event="handler"` binding found in the element's attribute
325
+ * block. Native HTML element event handlers (`@click` on `<button>`, etc.)
326
+ * are intentionally excluded — only component-to-component event bindings
327
+ * that go through Vue's `emit()` / `defineEmits` system are included.
328
+ *
329
+ * **Limitation:** component tags whose attribute block spans multiple lines
330
+ * and contains a `>` inside an attribute value are not captured (the regex
331
+ * stops at the first `>`). Full template AST parsing would be required for
332
+ * those edge cases (tracked in #1647).
333
+ */
334
+ export function extractComponentEventBindings(vueContent) {
335
+ const templateMatch = TEMPLATE_RE.exec(vueContent);
336
+ if (!templateMatch)
337
+ return [];
338
+ const templateContent = templateMatch[2];
339
+ const bindings = [];
340
+ const seen = new Set();
341
+ COMPONENT_TAG_RE.lastIndex = 0;
342
+ let tagMatch;
343
+ while ((tagMatch = COMPONENT_TAG_RE.exec(templateContent)) !== null) {
344
+ const componentName = tagMatch[1];
345
+ const attrs = tagMatch[2];
346
+ TAG_EVENT_RE.lastIndex = 0;
347
+ let eventMatch;
348
+ while ((eventMatch = TAG_EVENT_RE.exec(attrs)) !== null) {
349
+ const eventName = eventMatch[1];
350
+ const handlerName = eventMatch[2];
351
+ const key = `${componentName}::${eventName}::${handlerName}`;
352
+ if (seen.has(key))
353
+ continue;
354
+ seen.add(key);
355
+ bindings.push({ componentName, eventName, handlerName });
356
+ }
357
+ }
358
+ KEBAB_COMPONENT_TAG_RE.lastIndex = 0;
359
+ while ((tagMatch = KEBAB_COMPONENT_TAG_RE.exec(templateContent)) !== null) {
360
+ if (isBuiltinKebabTag(tagMatch[1]))
361
+ continue;
362
+ const componentName = kebabToPascal(tagMatch[1]);
363
+ const attrs = tagMatch[2];
364
+ TAG_EVENT_RE.lastIndex = 0;
365
+ let eventMatch;
366
+ while ((eventMatch = TAG_EVENT_RE.exec(attrs)) !== null) {
367
+ const eventName = eventMatch[1];
368
+ const handlerName = eventMatch[2];
369
+ const key = `${componentName}::${eventName}::${handlerName}`;
370
+ if (seen.has(key))
371
+ continue;
372
+ seen.add(key);
373
+ bindings.push({ componentName, eventName, handlerName });
374
+ }
375
+ }
376
+ return bindings;
377
+ }
378
+ /**
379
+ * Extract event handler names bound to native HTML elements in the template.
380
+ *
381
+ * Only processes lowercase-named elements (`<button>`, `<input>`, `<div>`,
382
+ * etc.) — PascalCase component elements are handled by
383
+ * `extractComponentEventBindings`. Returns bare handler identifiers only;
384
+ * inline expressions with arguments or arrow functions are excluded.
385
+ *
386
+ * These handlers represent direct DOM-event→function relationships and
387
+ * are emitted as `CALLS` edges (not `BINDS_EVENT_HANDLER`), because native
388
+ * events are synchronous browser callbacks, not Vue's component-event system.
389
+ */
390
+ export function extractNativeElementEventHandlers(vueContent) {
391
+ const templateMatch = TEMPLATE_RE.exec(vueContent);
392
+ if (!templateMatch)
393
+ return [];
394
+ const templateContent = templateMatch[2];
395
+ const handlers = [];
396
+ NATIVE_TAG_RE.lastIndex = 0;
397
+ let tagMatch;
398
+ while ((tagMatch = NATIVE_TAG_RE.exec(templateContent)) !== null) {
399
+ const attrs = tagMatch[2];
400
+ TAG_EVENT_RE.lastIndex = 0;
401
+ let eventMatch;
402
+ while ((eventMatch = TAG_EVENT_RE.exec(attrs)) !== null) {
403
+ handlers.push(eventMatch[2]);
404
+ }
405
+ }
406
+ return handlers;
407
+ }
408
+ /**
409
+ * Extract `emit('eventName', ...)` calls from a Vue SFC's `<script>` block.
410
+ *
411
+ * Scans the raw SFC source (full `.vue` file), extracts the script content,
412
+ * then finds bare `emit('...')` calls. Only captures literal string event
413
+ * names — dynamic expressions (`emit(eventName)`) are excluded.
414
+ *
415
+ * Returns deduplicated emit declarations.
416
+ */
417
+ export function extractScriptEmitCalls(vueContent, options = {}) {
418
+ const sourceKind = options.sourceKind ?? 'full-sfc';
419
+ const scriptText = sourceKind === 'pre-extracted-script'
420
+ ? vueContent
421
+ : (extractVueScript(vueContent)?.scriptContent ?? null);
422
+ if (!scriptText)
423
+ return [];
424
+ return collectBareEmitEventNames(scriptText).map((eventName) => ({ eventName }));
425
+ }
426
+ /**
427
+ * Extract variable identifiers from Vue template bound-attribute values.
428
+ *
429
+ * Covers `:prop="varName"` and `v-bind:prop="varName"` patterns where
430
+ * the value is a single plain identifier. Member-access expressions
431
+ * (`:key="post.id"`) and literals are excluded by design.
432
+ *
433
+ * Returns deduplicated identifier names.
434
+ */
435
+ export function extractTemplateAttributeBindings(vueContent) {
436
+ const templateMatch = TEMPLATE_RE.exec(vueContent);
437
+ if (!templateMatch)
438
+ return [];
439
+ const templateContent = templateMatch[2];
440
+ const vars = new Set();
441
+ let match;
442
+ BOUND_ATTR_RE.lastIndex = 0;
443
+ while ((match = BOUND_ATTR_RE.exec(templateContent)) !== null) {
444
+ vars.add(match[1]);
445
+ }
446
+ return [...vars];
447
+ }
448
+ /**
449
+ * Extract all template-derived edge data from a Vue SFC in a single pass.
450
+ *
451
+ * Parses the `<template>` block once and the `<script>` block once, then
452
+ * runs all five extractors on the pre-parsed content rather than repeating
453
+ * the regex on every individual call. Used by `emitPostResolutionEdges`
454
+ * to avoid multiple full-file scans per `.vue` file.
455
+ */
456
+ export function extractVueTemplateEdgeData(vueContent, options = {}) {
457
+ // Extract template content once.
458
+ const templateMatch = TEMPLATE_RE.exec(vueContent);
459
+ const tmpl = templateMatch ? templateMatch[2] : '';
460
+ // Template components (PascalCase + kebab-case).
461
+ const componentSet = new Set();
462
+ if (tmpl) {
463
+ TEMPLATE_COMPONENT_RE.lastIndex = 0;
464
+ let m;
465
+ while ((m = TEMPLATE_COMPONENT_RE.exec(tmpl)) !== null)
466
+ componentSet.add(m[1]);
467
+ TEMPLATE_KEBAB_COMPONENT_RE.lastIndex = 0;
468
+ while ((m = TEMPLATE_KEBAB_COMPONENT_RE.exec(tmpl)) !== null) {
469
+ if (!isBuiltinKebabTag(m[1]))
470
+ componentSet.add(kebabToPascal(m[1]));
471
+ }
472
+ }
473
+ // Native element event handlers.
474
+ const nativeHandlers = [];
475
+ if (tmpl) {
476
+ NATIVE_TAG_RE.lastIndex = 0;
477
+ let tagM;
478
+ while ((tagM = NATIVE_TAG_RE.exec(tmpl)) !== null) {
479
+ TAG_EVENT_RE.lastIndex = 0;
480
+ let evM;
481
+ while ((evM = TAG_EVENT_RE.exec(tagM[2])) !== null)
482
+ nativeHandlers.push(evM[2]);
483
+ }
484
+ }
485
+ // Component event bindings.
486
+ const componentBindings = [];
487
+ const bindingSeen = new Set();
488
+ const processComponentAttrs = (componentName, attrs) => {
489
+ TAG_EVENT_RE.lastIndex = 0;
490
+ let evM;
491
+ while ((evM = TAG_EVENT_RE.exec(attrs)) !== null) {
492
+ const key = `${componentName}::${evM[1]}::${evM[2]}`;
493
+ if (!bindingSeen.has(key)) {
494
+ bindingSeen.add(key);
495
+ componentBindings.push({ componentName, eventName: evM[1], handlerName: evM[2] });
496
+ }
497
+ }
498
+ };
499
+ if (tmpl) {
500
+ COMPONENT_TAG_RE.lastIndex = 0;
501
+ let tagM;
502
+ while ((tagM = COMPONENT_TAG_RE.exec(tmpl)) !== null)
503
+ processComponentAttrs(tagM[1], tagM[2]);
504
+ KEBAB_COMPONENT_TAG_RE.lastIndex = 0;
505
+ while ((tagM = KEBAB_COMPONENT_TAG_RE.exec(tmpl)) !== null) {
506
+ if (!isBuiltinKebabTag(tagM[1]))
507
+ processComponentAttrs(kebabToPascal(tagM[1]), tagM[2]);
508
+ }
509
+ }
510
+ // Script emit() calls.
511
+ const sourceKind = options.sourceKind ?? 'full-sfc';
512
+ const scriptText = sourceKind === 'pre-extracted-script'
513
+ ? vueContent
514
+ : (extractVueScript(vueContent)?.scriptContent ?? null);
515
+ const scriptEmitCalls = scriptText
516
+ ? collectBareEmitEventNames(scriptText).map((eventName) => ({ eventName }))
517
+ : [];
518
+ // Bound attribute bindings.
519
+ const attrVars = new Set();
520
+ if (tmpl) {
521
+ BOUND_ATTR_RE.lastIndex = 0;
522
+ let m;
523
+ while ((m = BOUND_ATTR_RE.exec(tmpl)) !== null)
524
+ attrVars.add(m[1]);
525
+ }
526
+ return {
527
+ templateComponents: [...componentSet],
528
+ nativeEventHandlers: nativeHandlers,
529
+ componentEventBindings: componentBindings,
530
+ scriptEmitCalls,
531
+ templateAttributeBindings: [...attrVars],
532
+ };
533
+ }
@@ -1,9 +1,7 @@
1
1
  import { SupportedLanguages } from '../../../_shared/index.js';
2
- import type { ExtractedHeritage } from '../model/heritage-map.js';
3
2
  import type { ExtractedRouterInclude, ExtractedRouterImport, ExtractedRouterModuleAlias } from '../route-extractors/fastapi-router-bindings.js';
4
3
  import { type MixedChainStep } from '../utils/call-analysis.js';
5
4
  import type { ConstructorBinding } from '../type-env.js';
6
- import type { NamedBinding } from '../named-bindings/types.js';
7
5
  import type { NodeLabel, ParameterTypeClass } from '../../../_shared/index.js';
8
6
  import type { ParsedFile } from '../../../_shared/index.js';
9
7
  import { type ExtractedRoute } from '../route-extractors/laravel.js';
@@ -53,13 +51,6 @@ interface ParsedSymbol {
53
51
  isFinal?: boolean;
54
52
  annotations?: string[];
55
53
  }
56
- export interface ExtractedImport {
57
- filePath: string;
58
- rawImportPath: string;
59
- language: SupportedLanguages;
60
- /** Named bindings from the import (e.g., import {User as U} → [{local:'U', exported:'User'}]) */
61
- namedBindings?: NamedBinding[];
62
- }
63
54
  export interface ExtractedCall {
64
55
  filePath: string;
65
56
  calledName: string;
@@ -178,10 +169,8 @@ export interface ParseWorkerResult {
178
169
  nodes: ParsedNode[];
179
170
  relationships: ParsedRelationship[];
180
171
  symbols: ParsedSymbol[];
181
- imports: ExtractedImport[];
182
172
  calls: ExtractedCall[];
183
173
  assignments: ExtractedAssignment[];
184
- heritage: ExtractedHeritage[];
185
174
  routes: ExtractedRoute[];
186
175
  fetchCalls: ExtractedFetchCall[];
187
176
  fetchWrapperDefs: FetchWrapperDef[];