cgraphx 2.0.2 → 2.0.3

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 (680) hide show
  1. package/dist/core/code/engine/cli/analyze-config.js +320 -0
  2. package/dist/core/code/engine/cli/analyze.js +1086 -0
  3. package/dist/core/code/engine/cli/cli-message.js +83 -0
  4. package/dist/core/code/engine/cli/detect-changes-format.js +58 -0
  5. package/dist/core/code/engine/cli/embedding-dims.js +43 -0
  6. package/dist/core/code/engine/cli/format-elapsed.js +12 -0
  7. package/dist/core/code/engine/cli/help-i18n.js +144 -0
  8. package/dist/core/code/engine/cli/i18n/en.js +110 -0
  9. package/dist/core/code/engine/cli/i18n/index.js +47 -0
  10. package/dist/core/code/engine/cli/i18n/resources.js +9 -0
  11. package/dist/core/code/engine/cli/i18n/zh-CN.js +110 -0
  12. package/dist/core/code/engine/cli/lazy-action.js +67 -0
  13. package/dist/core/code/engine/cli/optional-grammars.js +136 -0
  14. package/dist/core/code/engine/cli/resolve-invocation.js +76 -0
  15. package/dist/core/code/engine/cli/status.js +156 -0
  16. package/dist/core/code/engine/cli/tool.js +384 -0
  17. package/dist/core/code/engine/config/ignore-service.js +511 -0
  18. package/dist/core/code/engine/config/supported-languages.js +17 -0
  19. package/dist/core/code/engine/core/analysis-features.js +64 -0
  20. package/dist/core/code/engine/core/analyzer-identity.js +2171 -0
  21. package/dist/core/code/engine/core/git-staleness.js +180 -0
  22. package/dist/core/code/engine/core/graph/graph.js +180 -0
  23. package/dist/core/code/engine/core/graph/import-cycles.js +106 -0
  24. package/dist/core/code/engine/core/graph/types.js +2 -0
  25. package/dist/core/code/engine/core/index-freshness.js +12 -0
  26. package/dist/core/code/engine/core/ingestion/binding-accumulator.js +341 -0
  27. package/dist/core/code/engine/core/ingestion/call-extractors/configs/c-cpp.js +168 -0
  28. package/dist/core/code/engine/core/ingestion/call-extractors/configs/csharp.js +9 -0
  29. package/dist/core/code/engine/core/ingestion/call-extractors/configs/dart.js +8 -0
  30. package/dist/core/code/engine/core/ingestion/call-extractors/configs/go.js +8 -0
  31. package/dist/core/code/engine/core/ingestion/call-extractors/configs/jvm.js +54 -0
  32. package/dist/core/code/engine/core/ingestion/call-extractors/configs/php.js +8 -0
  33. package/dist/core/code/engine/core/ingestion/call-extractors/configs/python.js +8 -0
  34. package/dist/core/code/engine/core/ingestion/call-extractors/configs/ruby.js +8 -0
  35. package/dist/core/code/engine/core/ingestion/call-extractors/configs/rust.js +8 -0
  36. package/dist/core/code/engine/core/ingestion/call-extractors/configs/swift.js +8 -0
  37. package/dist/core/code/engine/core/ingestion/call-extractors/configs/typescript-javascript.js +11 -0
  38. package/dist/core/code/engine/core/ingestion/call-extractors/generic.js +62 -0
  39. package/dist/core/code/engine/core/ingestion/call-processor.js +503 -0
  40. package/dist/core/code/engine/core/ingestion/call-routing.js +98 -0
  41. package/dist/core/code/engine/core/ingestion/call-types.js +3 -0
  42. package/dist/core/code/engine/core/ingestion/cfg/callee-cell-format.js +45 -0
  43. package/dist/core/code/engine/core/ingestion/cfg/cfg-builder.js +202 -0
  44. package/dist/core/code/engine/core/ingestion/cfg/collect.js +81 -0
  45. package/dist/core/code/engine/core/ingestion/cfg/control-dependence.js +185 -0
  46. package/dist/core/code/engine/core/ingestion/cfg/control-flow-context.js +130 -0
  47. package/dist/core/code/engine/core/ingestion/cfg/emit.js +646 -0
  48. package/dist/core/code/engine/core/ingestion/cfg/post-dominators.js +182 -0
  49. package/dist/core/code/engine/core/ingestion/cfg/reaching-def-reason-codec.js +139 -0
  50. package/dist/core/code/engine/core/ingestion/cfg/reaching-defs-graph.js +322 -0
  51. package/dist/core/code/engine/core/ingestion/cfg/reaching-defs.js +792 -0
  52. package/dist/core/code/engine/core/ingestion/cfg/synthetic-escape.js +305 -0
  53. package/dist/core/code/engine/core/ingestion/cfg/traversal-result.js +6 -0
  54. package/dist/core/code/engine/core/ingestion/cfg/types.js +14 -0
  55. package/dist/core/code/engine/core/ingestion/cfg/visitors/c-cpp-harvest.js +545 -0
  56. package/dist/core/code/engine/core/ingestion/cfg/visitors/c-cpp.js +590 -0
  57. package/dist/core/code/engine/core/ingestion/cfg/visitors/call-site-harvest.js +356 -0
  58. package/dist/core/code/engine/core/ingestion/cfg/visitors/csharp-harvest.js +593 -0
  59. package/dist/core/code/engine/core/ingestion/cfg/visitors/csharp.js +871 -0
  60. package/dist/core/code/engine/core/ingestion/cfg/visitors/dart-harvest.js +874 -0
  61. package/dist/core/code/engine/core/ingestion/cfg/visitors/dart.js +840 -0
  62. package/dist/core/code/engine/core/ingestion/cfg/visitors/go-harvest.js +625 -0
  63. package/dist/core/code/engine/core/ingestion/cfg/visitors/go.js +642 -0
  64. package/dist/core/code/engine/core/ingestion/cfg/visitors/java-harvest.js +517 -0
  65. package/dist/core/code/engine/core/ingestion/cfg/visitors/java.js +816 -0
  66. package/dist/core/code/engine/core/ingestion/cfg/visitors/kotlin-harvest.js +723 -0
  67. package/dist/core/code/engine/core/ingestion/cfg/visitors/kotlin.js +813 -0
  68. package/dist/core/code/engine/core/ingestion/cfg/visitors/php-harvest.js +630 -0
  69. package/dist/core/code/engine/core/ingestion/cfg/visitors/php.js +725 -0
  70. package/dist/core/code/engine/core/ingestion/cfg/visitors/python-harvest.js +776 -0
  71. package/dist/core/code/engine/core/ingestion/cfg/visitors/python.js +562 -0
  72. package/dist/core/code/engine/core/ingestion/cfg/visitors/ruby-harvest.js +591 -0
  73. package/dist/core/code/engine/core/ingestion/cfg/visitors/ruby.js +760 -0
  74. package/dist/core/code/engine/core/ingestion/cfg/visitors/rust-harvest.js +877 -0
  75. package/dist/core/code/engine/core/ingestion/cfg/visitors/rust.js +562 -0
  76. package/dist/core/code/engine/core/ingestion/cfg/visitors/scope-tree-harvest.js +120 -0
  77. package/dist/core/code/engine/core/ingestion/cfg/visitors/swift-harvest.js +683 -0
  78. package/dist/core/code/engine/core/ingestion/cfg/visitors/swift.js +791 -0
  79. package/dist/core/code/engine/core/ingestion/cfg/visitors/typescript-harvest.js +1060 -0
  80. package/dist/core/code/engine/core/ingestion/cfg/visitors/typescript.js +587 -0
  81. package/dist/core/code/engine/core/ingestion/class-extractors/configs/c-cpp.js +77 -0
  82. package/dist/core/code/engine/core/ingestion/class-extractors/configs/csharp.js +24 -0
  83. package/dist/core/code/engine/core/ingestion/class-extractors/configs/dart.js +10 -0
  84. package/dist/core/code/engine/core/ingestion/class-extractors/configs/go.js +28 -0
  85. package/dist/core/code/engine/core/ingestion/class-extractors/configs/jvm.js +67 -0
  86. package/dist/core/code/engine/core/ingestion/class-extractors/configs/php.js +10 -0
  87. package/dist/core/code/engine/core/ingestion/class-extractors/configs/python.js +10 -0
  88. package/dist/core/code/engine/core/ingestion/class-extractors/configs/ruby.js +13 -0
  89. package/dist/core/code/engine/core/ingestion/class-extractors/configs/rust.js +10 -0
  90. package/dist/core/code/engine/core/ingestion/class-extractors/configs/swift.js +21 -0
  91. package/dist/core/code/engine/core/ingestion/class-extractors/configs/typescript-javascript.js +31 -0
  92. package/dist/core/code/engine/core/ingestion/class-extractors/generic.js +144 -0
  93. package/dist/core/code/engine/core/ingestion/class-types.js +2 -0
  94. package/dist/core/code/engine/core/ingestion/cluster-enricher.js +174 -0
  95. package/dist/core/code/engine/core/ingestion/community-processor.js +604 -0
  96. package/dist/core/code/engine/core/ingestion/constants.js +26 -0
  97. package/dist/core/code/engine/core/ingestion/cpp-ue-preprocessor.js +263 -0
  98. package/dist/core/code/engine/core/ingestion/csharp-namespace-gate.js +133 -0
  99. package/dist/core/code/engine/core/ingestion/di-extractors/index.js +38 -0
  100. package/dist/core/code/engine/core/ingestion/di-extractors/spring.js +310 -0
  101. package/dist/core/code/engine/core/ingestion/emit-references.js +244 -0
  102. package/dist/core/code/engine/core/ingestion/entry-point-scoring.js +201 -0
  103. package/dist/core/code/engine/core/ingestion/export-detection.js +244 -0
  104. package/dist/core/code/engine/core/ingestion/field-extractor.js +29 -0
  105. package/dist/core/code/engine/core/ingestion/field-extractors/configs/c-cpp.js +107 -0
  106. package/dist/core/code/engine/core/ingestion/field-extractors/configs/csharp.js +124 -0
  107. package/dist/core/code/engine/core/ingestion/field-extractors/configs/dart.js +99 -0
  108. package/dist/core/code/engine/core/ingestion/field-extractors/configs/go.js +102 -0
  109. package/dist/core/code/engine/core/ingestion/field-extractors/configs/helpers.js +198 -0
  110. package/dist/core/code/engine/core/ingestion/field-extractors/configs/jvm.js +172 -0
  111. package/dist/core/code/engine/core/ingestion/field-extractors/configs/php.js +67 -0
  112. package/dist/core/code/engine/core/ingestion/field-extractors/configs/python.js +94 -0
  113. package/dist/core/code/engine/core/ingestion/field-extractors/configs/ruby.js +79 -0
  114. package/dist/core/code/engine/core/ingestion/field-extractors/configs/rust.js +55 -0
  115. package/dist/core/code/engine/core/ingestion/field-extractors/configs/swift.js +93 -0
  116. package/dist/core/code/engine/core/ingestion/field-extractors/configs/typescript-javascript.js +59 -0
  117. package/dist/core/code/engine/core/ingestion/field-extractors/generic.js +147 -0
  118. package/dist/core/code/engine/core/ingestion/field-extractors/typescript.js +266 -0
  119. package/dist/core/code/engine/core/ingestion/field-types.js +3 -0
  120. package/dist/core/code/engine/core/ingestion/filesystem-walker.js +136 -0
  121. package/dist/core/code/engine/core/ingestion/finalize-orchestrator.js +159 -0
  122. package/dist/core/code/engine/core/ingestion/framework-detection.js +432 -0
  123. package/dist/core/code/engine/core/ingestion/frameworks/spring/analysis-features.js +38 -0
  124. package/dist/core/code/engine/core/ingestion/frameworks/spring/annotation-arguments.js +234 -0
  125. package/dist/core/code/engine/core/ingestion/frameworks/spring/aop-candidates.js +88 -0
  126. package/dist/core/code/engine/core/ingestion/frameworks/spring/aop.js +487 -0
  127. package/dist/core/code/engine/core/ingestion/frameworks/spring/auto-configuration.js +21 -0
  128. package/dist/core/code/engine/core/ingestion/frameworks/spring/bean-candidates.js +189 -0
  129. package/dist/core/code/engine/core/ingestion/frameworks/spring/bean-catalog.js +32 -0
  130. package/dist/core/code/engine/core/ingestion/frameworks/spring/bean-factories.js +73 -0
  131. package/dist/core/code/engine/core/ingestion/frameworks/spring/conditionals.js +323 -0
  132. package/dist/core/code/engine/core/ingestion/frameworks/spring/config-bindings.js +119 -0
  133. package/dist/core/code/engine/core/ingestion/frameworks/spring/di-metadata.js +385 -0
  134. package/dist/core/code/engine/core/ingestion/frameworks/spring/resource-injection.js +96 -0
  135. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/c-cpp.js +17 -0
  136. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/csharp.js +46 -0
  137. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/dart.js +59 -0
  138. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/go.js +30 -0
  139. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/jvm.js +73 -0
  140. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/php.js +19 -0
  141. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/python.js +45 -0
  142. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/ruby.js +20 -0
  143. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/rust.js +58 -0
  144. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/swift.js +94 -0
  145. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/typescript-javascript.js +26 -0
  146. package/dist/core/code/engine/core/ingestion/import-resolvers/csharp.js +128 -0
  147. package/dist/core/code/engine/core/ingestion/import-resolvers/go.js +50 -0
  148. package/dist/core/code/engine/core/ingestion/import-resolvers/jvm.js +112 -0
  149. package/dist/core/code/engine/core/ingestion/import-resolvers/php.js +80 -0
  150. package/dist/core/code/engine/core/ingestion/import-resolvers/python.js +75 -0
  151. package/dist/core/code/engine/core/ingestion/import-resolvers/resolver-factory.js +36 -0
  152. package/dist/core/code/engine/core/ingestion/import-resolvers/ruby.js +20 -0
  153. package/dist/core/code/engine/core/ingestion/import-resolvers/rust.js +79 -0
  154. package/dist/core/code/engine/core/ingestion/import-resolvers/standard.js +180 -0
  155. package/dist/core/code/engine/core/ingestion/import-resolvers/types.js +7 -0
  156. package/dist/core/code/engine/core/ingestion/import-resolvers/utils.js +153 -0
  157. package/dist/core/code/engine/core/ingestion/import-target-adapter.js +99 -0
  158. package/dist/core/code/engine/core/ingestion/language-config.js +391 -0
  159. package/dist/core/code/engine/core/ingestion/language-provider.js +25 -0
  160. package/dist/core/code/engine/core/ingestion/languages/c/arity-metadata.js +98 -0
  161. package/dist/core/code/engine/core/ingestion/languages/c/arity.js +21 -0
  162. package/dist/core/code/engine/core/ingestion/languages/c/capture-side-channel.js +69 -0
  163. package/dist/core/code/engine/core/ingestion/languages/c/captures.js +189 -0
  164. package/dist/core/code/engine/core/ingestion/languages/c/header-scan.js +58 -0
  165. package/dist/core/code/engine/core/ingestion/languages/c/import-decomposer.js +68 -0
  166. package/dist/core/code/engine/core/ingestion/languages/c/import-target.js +103 -0
  167. package/dist/core/code/engine/core/ingestion/languages/c/index.js +33 -0
  168. package/dist/core/code/engine/core/ingestion/languages/c/interpret.js +53 -0
  169. package/dist/core/code/engine/core/ingestion/languages/c/merge-bindings.js +26 -0
  170. package/dist/core/code/engine/core/ingestion/languages/c/query.js +210 -0
  171. package/dist/core/code/engine/core/ingestion/languages/c/scope-resolver.js +112 -0
  172. package/dist/core/code/engine/core/ingestion/languages/c/simple-hooks.js +24 -0
  173. package/dist/core/code/engine/core/ingestion/languages/c/static-linkage.js +109 -0
  174. package/dist/core/code/engine/core/ingestion/languages/c-cpp.js +506 -0
  175. package/dist/core/code/engine/core/ingestion/languages/cpp/adl.js +804 -0
  176. package/dist/core/code/engine/core/ingestion/languages/cpp/arity-metadata.js +258 -0
  177. package/dist/core/code/engine/core/ingestion/languages/cpp/arity.js +37 -0
  178. package/dist/core/code/engine/core/ingestion/languages/cpp/capture-side-channel.js +89 -0
  179. package/dist/core/code/engine/core/ingestion/languages/cpp/captures.js +1975 -0
  180. package/dist/core/code/engine/core/ingestion/languages/cpp/constraint-extractor.js +311 -0
  181. package/dist/core/code/engine/core/ingestion/languages/cpp/constraint-filter.js +210 -0
  182. package/dist/core/code/engine/core/ingestion/languages/cpp/conversion-rank.js +163 -0
  183. package/dist/core/code/engine/core/ingestion/languages/cpp/file-local-linkage.js +327 -0
  184. package/dist/core/code/engine/core/ingestion/languages/cpp/header-scan.js +53 -0
  185. package/dist/core/code/engine/core/ingestion/languages/cpp/import-decomposer.js +134 -0
  186. package/dist/core/code/engine/core/ingestion/languages/cpp/import-target.js +16 -0
  187. package/dist/core/code/engine/core/ingestion/languages/cpp/index.js +33 -0
  188. package/dist/core/code/engine/core/ingestion/languages/cpp/inline-namespaces.js +379 -0
  189. package/dist/core/code/engine/core/ingestion/languages/cpp/interpret.js +239 -0
  190. package/dist/core/code/engine/core/ingestion/languages/cpp/member-lookup.js +470 -0
  191. package/dist/core/code/engine/core/ingestion/languages/cpp/merge-bindings.js +32 -0
  192. package/dist/core/code/engine/core/ingestion/languages/cpp/query.js +763 -0
  193. package/dist/core/code/engine/core/ingestion/languages/cpp/range-bindings.js +230 -0
  194. package/dist/core/code/engine/core/ingestion/languages/cpp/scope-resolver.js +354 -0
  195. package/dist/core/code/engine/core/ingestion/languages/cpp/simple-hooks.js +67 -0
  196. package/dist/core/code/engine/core/ingestion/languages/cpp/two-phase-lookup.js +348 -0
  197. package/dist/core/code/engine/core/ingestion/languages/cpp/type-classifier.js +56 -0
  198. package/dist/core/code/engine/core/ingestion/languages/cpp/user-defined-conversions.js +128 -0
  199. package/dist/core/code/engine/core/ingestion/languages/csharp/accessor-unwrap.js +67 -0
  200. package/dist/core/code/engine/core/ingestion/languages/csharp/arity-metadata.js +49 -0
  201. package/dist/core/code/engine/core/ingestion/languages/csharp/arity.js +40 -0
  202. package/dist/core/code/engine/core/ingestion/languages/csharp/cache-stats.js +32 -0
  203. package/dist/core/code/engine/core/ingestion/languages/csharp/captures.js +557 -0
  204. package/dist/core/code/engine/core/ingestion/languages/csharp/import-decomposer.js +96 -0
  205. package/dist/core/code/engine/core/ingestion/languages/csharp/import-target.js +176 -0
  206. package/dist/core/code/engine/core/ingestion/languages/csharp/index.js +95 -0
  207. package/dist/core/code/engine/core/ingestion/languages/csharp/interpret.js +150 -0
  208. package/dist/core/code/engine/core/ingestion/languages/csharp/merge-bindings.js +58 -0
  209. package/dist/core/code/engine/core/ingestion/languages/csharp/namespace-siblings.js +708 -0
  210. package/dist/core/code/engine/core/ingestion/languages/csharp/qualified-type-names.js +62 -0
  211. package/dist/core/code/engine/core/ingestion/languages/csharp/query.js +578 -0
  212. package/dist/core/code/engine/core/ingestion/languages/csharp/receiver-binding.js +142 -0
  213. package/dist/core/code/engine/core/ingestion/languages/csharp/resolution-config.js +18 -0
  214. package/dist/core/code/engine/core/ingestion/languages/csharp/scope-resolver.js +84 -0
  215. package/dist/core/code/engine/core/ingestion/languages/csharp/simple-hooks.js +81 -0
  216. package/dist/core/code/engine/core/ingestion/languages/csharp.js +204 -0
  217. package/dist/core/code/engine/core/ingestion/languages/dart/arity-metadata.js +38 -0
  218. package/dist/core/code/engine/core/ingestion/languages/dart/arity.js +34 -0
  219. package/dist/core/code/engine/core/ingestion/languages/dart/built-ins.js +37 -0
  220. package/dist/core/code/engine/core/ingestion/languages/dart/cache-stats.js +30 -0
  221. package/dist/core/code/engine/core/ingestion/languages/dart/captures.js +1096 -0
  222. package/dist/core/code/engine/core/ingestion/languages/dart/expand-wildcards.js +34 -0
  223. package/dist/core/code/engine/core/ingestion/languages/dart/extension-type-preprocess.js +33 -0
  224. package/dist/core/code/engine/core/ingestion/languages/dart/import-target.js +68 -0
  225. package/dist/core/code/engine/core/ingestion/languages/dart/index.js +45 -0
  226. package/dist/core/code/engine/core/ingestion/languages/dart/interpret.js +101 -0
  227. package/dist/core/code/engine/core/ingestion/languages/dart/merge-bindings.js +42 -0
  228. package/dist/core/code/engine/core/ingestion/languages/dart/query.js +246 -0
  229. package/dist/core/code/engine/core/ingestion/languages/dart/receiver-binding.js +90 -0
  230. package/dist/core/code/engine/core/ingestion/languages/dart/scope-resolver.js +197 -0
  231. package/dist/core/code/engine/core/ingestion/languages/dart/signature-bindings.js +54 -0
  232. package/dist/core/code/engine/core/ingestion/languages/dart/simple-hooks.js +61 -0
  233. package/dist/core/code/engine/core/ingestion/languages/dart.js +138 -0
  234. package/dist/core/code/engine/core/ingestion/languages/go/arity-metadata.js +71 -0
  235. package/dist/core/code/engine/core/ingestion/languages/go/arity.js +17 -0
  236. package/dist/core/code/engine/core/ingestion/languages/go/cache-stats.js +21 -0
  237. package/dist/core/code/engine/core/ingestion/languages/go/captures.js +492 -0
  238. package/dist/core/code/engine/core/ingestion/languages/go/expand-wildcards.js +97 -0
  239. package/dist/core/code/engine/core/ingestion/languages/go/generic-type-parameters.js +146 -0
  240. package/dist/core/code/engine/core/ingestion/languages/go/import-decomposer.js +47 -0
  241. package/dist/core/code/engine/core/ingestion/languages/go/import-target.js +70 -0
  242. package/dist/core/code/engine/core/ingestion/languages/go/index.js +39 -0
  243. package/dist/core/code/engine/core/ingestion/languages/go/interface-impls.js +955 -0
  244. package/dist/core/code/engine/core/ingestion/languages/go/interpret.js +177 -0
  245. package/dist/core/code/engine/core/ingestion/languages/go/merge-bindings.js +21 -0
  246. package/dist/core/code/engine/core/ingestion/languages/go/method-owners.js +131 -0
  247. package/dist/core/code/engine/core/ingestion/languages/go/namespace-mirror.js +56 -0
  248. package/dist/core/code/engine/core/ingestion/languages/go/package-clause.js +79 -0
  249. package/dist/core/code/engine/core/ingestion/languages/go/package-siblings.js +83 -0
  250. package/dist/core/code/engine/core/ingestion/languages/go/query.js +298 -0
  251. package/dist/core/code/engine/core/ingestion/languages/go/range-binding.js +127 -0
  252. package/dist/core/code/engine/core/ingestion/languages/go/receiver-binding.js +24 -0
  253. package/dist/core/code/engine/core/ingestion/languages/go/scope-resolver.js +75 -0
  254. package/dist/core/code/engine/core/ingestion/languages/go/simple-hooks.js +31 -0
  255. package/dist/core/code/engine/core/ingestion/languages/go/type-binding.js +279 -0
  256. package/dist/core/code/engine/core/ingestion/languages/go.js +160 -0
  257. package/dist/core/code/engine/core/ingestion/languages/index.js +66 -0
  258. package/dist/core/code/engine/core/ingestion/languages/java/analysis-features.js +16 -0
  259. package/dist/core/code/engine/core/ingestion/languages/java/arity-metadata.js +43 -0
  260. package/dist/core/code/engine/core/ingestion/languages/java/arity.js +27 -0
  261. package/dist/core/code/engine/core/ingestion/languages/java/cache-stats.js +32 -0
  262. package/dist/core/code/engine/core/ingestion/languages/java/capture-side-channel.js +123 -0
  263. package/dist/core/code/engine/core/ingestion/languages/java/captures.js +791 -0
  264. package/dist/core/code/engine/core/ingestion/languages/java/import-decomposer.js +88 -0
  265. package/dist/core/code/engine/core/ingestion/languages/java/import-target.js +103 -0
  266. package/dist/core/code/engine/core/ingestion/languages/java/index.js +43 -0
  267. package/dist/core/code/engine/core/ingestion/languages/java/interpret.js +146 -0
  268. package/dist/core/code/engine/core/ingestion/languages/java/merge-bindings.js +43 -0
  269. package/dist/core/code/engine/core/ingestion/languages/java/package-facts.js +16 -0
  270. package/dist/core/code/engine/core/ingestion/languages/java/package-siblings.js +11 -0
  271. package/dist/core/code/engine/core/ingestion/languages/java/query.js +319 -0
  272. package/dist/core/code/engine/core/ingestion/languages/java/receiver-binding.js +98 -0
  273. package/dist/core/code/engine/core/ingestion/languages/java/scope-resolver.js +213 -0
  274. package/dist/core/code/engine/core/ingestion/languages/java/simple-hooks.js +39 -0
  275. package/dist/core/code/engine/core/ingestion/languages/java/spring-aop.js +53 -0
  276. package/dist/core/code/engine/core/ingestion/languages/java/spring-bean-metadata.js +11 -0
  277. package/dist/core/code/engine/core/ingestion/languages/java/spring-conditionals.js +52 -0
  278. package/dist/core/code/engine/core/ingestion/languages/java/spring-config-bindings.js +222 -0
  279. package/dist/core/code/engine/core/ingestion/languages/java/spring-di.js +165 -0
  280. package/dist/core/code/engine/core/ingestion/languages/java.js +192 -0
  281. package/dist/core/code/engine/core/ingestion/languages/javascript/arity.js +15 -0
  282. package/dist/core/code/engine/core/ingestion/languages/javascript/captures.js +1122 -0
  283. package/dist/core/code/engine/core/ingestion/languages/javascript/import-target.js +56 -0
  284. package/dist/core/code/engine/core/ingestion/languages/javascript/index.js +109 -0
  285. package/dist/core/code/engine/core/ingestion/languages/javascript/interpret.js +45 -0
  286. package/dist/core/code/engine/core/ingestion/languages/javascript/merge-bindings.js +21 -0
  287. package/dist/core/code/engine/core/ingestion/languages/javascript/query.js +659 -0
  288. package/dist/core/code/engine/core/ingestion/languages/javascript/scope-resolver.js +78 -0
  289. package/dist/core/code/engine/core/ingestion/languages/javascript/simple-hooks.js +44 -0
  290. package/dist/core/code/engine/core/ingestion/languages/jvm/package-facts.js +46 -0
  291. package/dist/core/code/engine/core/ingestion/languages/jvm/package-siblings.js +200 -0
  292. package/dist/core/code/engine/core/ingestion/languages/kotlin/arity-metadata.js +23 -0
  293. package/dist/core/code/engine/core/ingestion/languages/kotlin/arity.js +18 -0
  294. package/dist/core/code/engine/core/ingestion/languages/kotlin/cache-stats.js +21 -0
  295. package/dist/core/code/engine/core/ingestion/languages/kotlin/capture-side-channel.js +160 -0
  296. package/dist/core/code/engine/core/ingestion/languages/kotlin/captures.js +1262 -0
  297. package/dist/core/code/engine/core/ingestion/languages/kotlin/companion-scopes.js +72 -0
  298. package/dist/core/code/engine/core/ingestion/languages/kotlin/import-decomposer.js +40 -0
  299. package/dist/core/code/engine/core/ingestion/languages/kotlin/import-target.js +135 -0
  300. package/dist/core/code/engine/core/ingestion/languages/kotlin/index.js +26 -0
  301. package/dist/core/code/engine/core/ingestion/languages/kotlin/interpret.js +75 -0
  302. package/dist/core/code/engine/core/ingestion/languages/kotlin/merge-bindings.js +28 -0
  303. package/dist/core/code/engine/core/ingestion/languages/kotlin/owners.js +134 -0
  304. package/dist/core/code/engine/core/ingestion/languages/kotlin/package-facts.js +16 -0
  305. package/dist/core/code/engine/core/ingestion/languages/kotlin/package-siblings.js +11 -0
  306. package/dist/core/code/engine/core/ingestion/languages/kotlin/query.js +243 -0
  307. package/dist/core/code/engine/core/ingestion/languages/kotlin/receiver-binding.js +103 -0
  308. package/dist/core/code/engine/core/ingestion/languages/kotlin/scope-resolver.js +207 -0
  309. package/dist/core/code/engine/core/ingestion/languages/kotlin/simple-hooks.js +42 -0
  310. package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-aop.js +68 -0
  311. package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-bean-metadata.js +11 -0
  312. package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-conditionals.js +53 -0
  313. package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-di.js +304 -0
  314. package/dist/core/code/engine/core/ingestion/languages/kotlin.js +189 -0
  315. package/dist/core/code/engine/core/ingestion/languages/php/arity-metadata.js +66 -0
  316. package/dist/core/code/engine/core/ingestion/languages/php/arity.js +43 -0
  317. package/dist/core/code/engine/core/ingestion/languages/php/cache-stats.js +32 -0
  318. package/dist/core/code/engine/core/ingestion/languages/php/captures.js +1166 -0
  319. package/dist/core/code/engine/core/ingestion/languages/php/import-decomposer.js +238 -0
  320. package/dist/core/code/engine/core/ingestion/languages/php/import-target.js +213 -0
  321. package/dist/core/code/engine/core/ingestion/languages/php/index.js +85 -0
  322. package/dist/core/code/engine/core/ingestion/languages/php/interpret.js +256 -0
  323. package/dist/core/code/engine/core/ingestion/languages/php/merge-bindings.js +50 -0
  324. package/dist/core/code/engine/core/ingestion/languages/php/namespace-siblings.js +353 -0
  325. package/dist/core/code/engine/core/ingestion/languages/php/query.js +391 -0
  326. package/dist/core/code/engine/core/ingestion/languages/php/receiver-binding.js +135 -0
  327. package/dist/core/code/engine/core/ingestion/languages/php/scope-resolver.js +361 -0
  328. package/dist/core/code/engine/core/ingestion/languages/php/simple-hooks.js +116 -0
  329. package/dist/core/code/engine/core/ingestion/languages/php.js +302 -0
  330. package/dist/core/code/engine/core/ingestion/languages/python/arity-metadata.js +49 -0
  331. package/dist/core/code/engine/core/ingestion/languages/python/arity.js +41 -0
  332. package/dist/core/code/engine/core/ingestion/languages/python/cache-stats.js +34 -0
  333. package/dist/core/code/engine/core/ingestion/languages/python/captures.js +299 -0
  334. package/dist/core/code/engine/core/ingestion/languages/python/depends-references.js +68 -0
  335. package/dist/core/code/engine/core/ingestion/languages/python/import-decomposer.js +115 -0
  336. package/dist/core/code/engine/core/ingestion/languages/python/import-target.js +440 -0
  337. package/dist/core/code/engine/core/ingestion/languages/python/index-stats.js +30 -0
  338. package/dist/core/code/engine/core/ingestion/languages/python/index.js +96 -0
  339. package/dist/core/code/engine/core/ingestion/languages/python/interpret.js +430 -0
  340. package/dist/core/code/engine/core/ingestion/languages/python/merge-bindings.js +47 -0
  341. package/dist/core/code/engine/core/ingestion/languages/python/query.js +323 -0
  342. package/dist/core/code/engine/core/ingestion/languages/python/receiver-binding.js +310 -0
  343. package/dist/core/code/engine/core/ingestion/languages/python/scope-resolver.js +80 -0
  344. package/dist/core/code/engine/core/ingestion/languages/python/simple-hooks.js +53 -0
  345. package/dist/core/code/engine/core/ingestion/languages/python.js +140 -0
  346. package/dist/core/code/engine/core/ingestion/languages/ruby/arity.js +41 -0
  347. package/dist/core/code/engine/core/ingestion/languages/ruby/cache-stats.js +21 -0
  348. package/dist/core/code/engine/core/ingestion/languages/ruby/captures.js +864 -0
  349. package/dist/core/code/engine/core/ingestion/languages/ruby/import-target.js +88 -0
  350. package/dist/core/code/engine/core/ingestion/languages/ruby/index.js +29 -0
  351. package/dist/core/code/engine/core/ingestion/languages/ruby/interpret.js +115 -0
  352. package/dist/core/code/engine/core/ingestion/languages/ruby/merge-bindings.js +21 -0
  353. package/dist/core/code/engine/core/ingestion/languages/ruby/query.js +349 -0
  354. package/dist/core/code/engine/core/ingestion/languages/ruby/receiver-binding.js +70 -0
  355. package/dist/core/code/engine/core/ingestion/languages/ruby/scope-resolver.js +263 -0
  356. package/dist/core/code/engine/core/ingestion/languages/ruby/simple-hooks.js +68 -0
  357. package/dist/core/code/engine/core/ingestion/languages/ruby.js +215 -0
  358. package/dist/core/code/engine/core/ingestion/languages/rust/arity.js +16 -0
  359. package/dist/core/code/engine/core/ingestion/languages/rust/cache-stats.js +21 -0
  360. package/dist/core/code/engine/core/ingestion/languages/rust/captures.js +304 -0
  361. package/dist/core/code/engine/core/ingestion/languages/rust/import-decomposer.js +167 -0
  362. package/dist/core/code/engine/core/ingestion/languages/rust/import-target.js +108 -0
  363. package/dist/core/code/engine/core/ingestion/languages/rust/index.js +29 -0
  364. package/dist/core/code/engine/core/ingestion/languages/rust/interpret.js +201 -0
  365. package/dist/core/code/engine/core/ingestion/languages/rust/merge-bindings.js +21 -0
  366. package/dist/core/code/engine/core/ingestion/languages/rust/method-owners.js +76 -0
  367. package/dist/core/code/engine/core/ingestion/languages/rust/module-path.js +222 -0
  368. package/dist/core/code/engine/core/ingestion/languages/rust/qualified-call.js +482 -0
  369. package/dist/core/code/engine/core/ingestion/languages/rust/query.js +280 -0
  370. package/dist/core/code/engine/core/ingestion/languages/rust/range-binding.js +687 -0
  371. package/dist/core/code/engine/core/ingestion/languages/rust/receiver-binding.js +148 -0
  372. package/dist/core/code/engine/core/ingestion/languages/rust/scope-resolver.js +151 -0
  373. package/dist/core/code/engine/core/ingestion/languages/rust/simple-hooks.js +32 -0
  374. package/dist/core/code/engine/core/ingestion/languages/rust.js +183 -0
  375. package/dist/core/code/engine/core/ingestion/languages/swift/arity-metadata.js +44 -0
  376. package/dist/core/code/engine/core/ingestion/languages/swift/arity.js +45 -0
  377. package/dist/core/code/engine/core/ingestion/languages/swift/base-type.js +30 -0
  378. package/dist/core/code/engine/core/ingestion/languages/swift/cache-stats.js +32 -0
  379. package/dist/core/code/engine/core/ingestion/languages/swift/captures.js +594 -0
  380. package/dist/core/code/engine/core/ingestion/languages/swift/conditional-directive-preprocess.js +256 -0
  381. package/dist/core/code/engine/core/ingestion/languages/swift/implicit-imports.js +60 -0
  382. package/dist/core/code/engine/core/ingestion/languages/swift/import-decomposer.js +87 -0
  383. package/dist/core/code/engine/core/ingestion/languages/swift/import-target.js +84 -0
  384. package/dist/core/code/engine/core/ingestion/languages/swift/index.js +56 -0
  385. package/dist/core/code/engine/core/ingestion/languages/swift/interpret.js +93 -0
  386. package/dist/core/code/engine/core/ingestion/languages/swift/merge-bindings.js +51 -0
  387. package/dist/core/code/engine/core/ingestion/languages/swift/query.js +226 -0
  388. package/dist/core/code/engine/core/ingestion/languages/swift/receiver-binding.js +169 -0
  389. package/dist/core/code/engine/core/ingestion/languages/swift/scope-resolver.js +192 -0
  390. package/dist/core/code/engine/core/ingestion/languages/swift/sibling-type-bindings.js +68 -0
  391. package/dist/core/code/engine/core/ingestion/languages/swift/signature-bindings.js +69 -0
  392. package/dist/core/code/engine/core/ingestion/languages/swift/simple-hooks.js +65 -0
  393. package/dist/core/code/engine/core/ingestion/languages/swift/target-grouping.js +97 -0
  394. package/dist/core/code/engine/core/ingestion/languages/swift/target-siblings.js +74 -0
  395. package/dist/core/code/engine/core/ingestion/languages/swift.js +246 -0
  396. package/dist/core/code/engine/core/ingestion/languages/typescript/arity-metadata.js +106 -0
  397. package/dist/core/code/engine/core/ingestion/languages/typescript/arity.js +57 -0
  398. package/dist/core/code/engine/core/ingestion/languages/typescript/array-callback.js +58 -0
  399. package/dist/core/code/engine/core/ingestion/languages/typescript/cache-stats.js +34 -0
  400. package/dist/core/code/engine/core/ingestion/languages/typescript/captures.js +956 -0
  401. package/dist/core/code/engine/core/ingestion/languages/typescript/cjs-export-assignment.js +535 -0
  402. package/dist/core/code/engine/core/ingestion/languages/typescript/cjs-module-exports.js +196 -0
  403. package/dist/core/code/engine/core/ingestion/languages/typescript/import-decomposer.js +374 -0
  404. package/dist/core/code/engine/core/ingestion/languages/typescript/import-target.js +65 -0
  405. package/dist/core/code/engine/core/ingestion/languages/typescript/index.js +108 -0
  406. package/dist/core/code/engine/core/ingestion/languages/typescript/interpret.js +344 -0
  407. package/dist/core/code/engine/core/ingestion/languages/typescript/merge-bindings.js +161 -0
  408. package/dist/core/code/engine/core/ingestion/languages/typescript/nuxt-auto-imports.js +325 -0
  409. package/dist/core/code/engine/core/ingestion/languages/typescript/query.js +1328 -0
  410. package/dist/core/code/engine/core/ingestion/languages/typescript/receiver-binding.js +201 -0
  411. package/dist/core/code/engine/core/ingestion/languages/typescript/scope-resolver.js +293 -0
  412. package/dist/core/code/engine/core/ingestion/languages/typescript/simple-hooks.js +139 -0
  413. package/dist/core/code/engine/core/ingestion/languages/typescript.js +455 -0
  414. package/dist/core/code/engine/core/ingestion/languages/vue/captures.js +70 -0
  415. package/dist/core/code/engine/core/ingestion/languages/vue/import-target.js +61 -0
  416. package/dist/core/code/engine/core/ingestion/languages/vue/index.js +55 -0
  417. package/dist/core/code/engine/core/ingestion/languages/vue/scope-resolver.js +295 -0
  418. package/dist/core/code/engine/core/ingestion/languages/vue.js +96 -0
  419. package/dist/core/code/engine/core/ingestion/local-symbol-pruner.js +68 -0
  420. package/dist/core/code/engine/core/ingestion/method-extractors/configs/c-cpp.js +387 -0
  421. package/dist/core/code/engine/core/ingestion/method-extractors/configs/csharp.js +290 -0
  422. package/dist/core/code/engine/core/ingestion/method-extractors/configs/dart.js +392 -0
  423. package/dist/core/code/engine/core/ingestion/method-extractors/configs/go.js +179 -0
  424. package/dist/core/code/engine/core/ingestion/method-extractors/configs/jvm.js +350 -0
  425. package/dist/core/code/engine/core/ingestion/method-extractors/configs/php.js +306 -0
  426. package/dist/core/code/engine/core/ingestion/method-extractors/configs/python.js +312 -0
  427. package/dist/core/code/engine/core/ingestion/method-extractors/configs/ruby.js +289 -0
  428. package/dist/core/code/engine/core/ingestion/method-extractors/configs/rust.js +198 -0
  429. package/dist/core/code/engine/core/ingestion/method-extractors/configs/swift.js +286 -0
  430. package/dist/core/code/engine/core/ingestion/method-extractors/configs/typescript-javascript.js +341 -0
  431. package/dist/core/code/engine/core/ingestion/method-extractors/generic.js +209 -0
  432. package/dist/core/code/engine/core/ingestion/method-types.js +3 -0
  433. package/dist/core/code/engine/core/ingestion/model/field-registry.js +41 -0
  434. package/dist/core/code/engine/core/ingestion/model/index.js +52 -0
  435. package/dist/core/code/engine/core/ingestion/model/method-registry.js +138 -0
  436. package/dist/core/code/engine/core/ingestion/model/owned-members-lookup.js +46 -0
  437. package/dist/core/code/engine/core/ingestion/model/registration-table.js +234 -0
  438. package/dist/core/code/engine/core/ingestion/model/resolve.js +183 -0
  439. package/dist/core/code/engine/core/ingestion/model/scope-resolution-indexes.js +43 -0
  440. package/dist/core/code/engine/core/ingestion/model/semantic-model.js +179 -0
  441. package/dist/core/code/engine/core/ingestion/model/symbol-table.js +216 -0
  442. package/dist/core/code/engine/core/ingestion/model/type-registry.js +84 -0
  443. package/dist/core/code/engine/core/ingestion/mro-processor.js +709 -0
  444. package/dist/core/code/engine/core/ingestion/parsing-processor.js +312 -0
  445. package/dist/core/code/engine/core/ingestion/pipeline-phases/communities.js +69 -0
  446. package/dist/core/code/engine/core/ingestion/pipeline-phases/cross-file.js +71 -0
  447. package/dist/core/code/engine/core/ingestion/pipeline-phases/di.js +338 -0
  448. package/dist/core/code/engine/core/ingestion/pipeline-phases/http-api-calls.js +312 -0
  449. package/dist/core/code/engine/core/ingestion/pipeline-phases/index.js +54 -0
  450. package/dist/core/code/engine/core/ingestion/pipeline-phases/mro.js +40 -0
  451. package/dist/core/code/engine/core/ingestion/pipeline-phases/orm.js +78 -0
  452. package/dist/core/code/engine/core/ingestion/pipeline-phases/parse-impl.js +1286 -0
  453. package/dist/core/code/engine/core/ingestion/pipeline-phases/parse.js +41 -0
  454. package/dist/core/code/engine/core/ingestion/pipeline-phases/processes.js +193 -0
  455. package/dist/core/code/engine/core/ingestion/pipeline-phases/prune-local-symbols.js +29 -0
  456. package/dist/core/code/engine/core/ingestion/pipeline-phases/registry.js +52 -0
  457. package/dist/core/code/engine/core/ingestion/pipeline-phases/routes.js +409 -0
  458. package/dist/core/code/engine/core/ingestion/pipeline-phases/rpc-edges.js +301 -0
  459. package/dist/core/code/engine/core/ingestion/pipeline-phases/runner.js +207 -0
  460. package/dist/core/code/engine/core/ingestion/pipeline-phases/scan.js +49 -0
  461. package/dist/core/code/engine/core/ingestion/pipeline-phases/spring-aop.js +442 -0
  462. package/dist/core/code/engine/core/ingestion/pipeline-phases/spring-auto-configuration.js +264 -0
  463. package/dist/core/code/engine/core/ingestion/pipeline-phases/spring-config.js +440 -0
  464. package/dist/core/code/engine/core/ingestion/pipeline-phases/structure.js +38 -0
  465. package/dist/core/code/engine/core/ingestion/pipeline-phases/tools.js +89 -0
  466. package/dist/core/code/engine/core/ingestion/pipeline-phases/types.js +40 -0
  467. package/dist/core/code/engine/core/ingestion/pipeline.js +152 -0
  468. package/dist/core/code/engine/core/ingestion/process-processor.js +325 -0
  469. package/dist/core/code/engine/core/ingestion/resolve-references.js +205 -0
  470. package/dist/core/code/engine/core/ingestion/route-extractors/constant-resolver.js +135 -0
  471. package/dist/core/code/engine/core/ingestion/route-extractors/django-root-discovery.js +221 -0
  472. package/dist/core/code/engine/core/ingestion/route-extractors/django.js +428 -0
  473. package/dist/core/code/engine/core/ingestion/route-extractors/expo.js +39 -0
  474. package/dist/core/code/engine/core/ingestion/route-extractors/fastapi-router-bindings.js +264 -0
  475. package/dist/core/code/engine/core/ingestion/route-extractors/laravel.js +501 -0
  476. package/dist/core/code/engine/core/ingestion/route-extractors/middleware.js +175 -0
  477. package/dist/core/code/engine/core/ingestion/route-extractors/nextjs.js +81 -0
  478. package/dist/core/code/engine/core/ingestion/route-extractors/php.js +25 -0
  479. package/dist/core/code/engine/core/ingestion/route-extractors/python-const-resolver.js +307 -0
  480. package/dist/core/code/engine/core/ingestion/route-extractors/response-shapes.js +299 -0
  481. package/dist/core/code/engine/core/ingestion/route-extractors/route-path.js +71 -0
  482. package/dist/core/code/engine/core/ingestion/route-extractors/spring-shared.js +310 -0
  483. package/dist/core/code/engine/core/ingestion/route-extractors/spring.js +441 -0
  484. package/dist/core/code/engine/core/ingestion/scope-extractor-bridge.js +60 -0
  485. package/dist/core/code/engine/core/ingestion/scope-extractor.js +1373 -0
  486. package/dist/core/code/engine/core/ingestion/scope-resolution/contract/scope-resolver.js +282 -0
  487. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/callee-id-sink.js +72 -0
  488. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/edges.js +194 -0
  489. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/ids.js +472 -0
  490. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/imports-to-edges.js +49 -0
  491. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/method-dispatch.js +43 -0
  492. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/node-lookup.js +274 -0
  493. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/references-to-edges.js +93 -0
  494. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/callable-value-flow.js +1240 -0
  495. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/compound-receiver.js +1174 -0
  496. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/free-call-fallback.js +873 -0
  497. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/imported-return-types.js +226 -0
  498. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/mro.js +107 -0
  499. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/overload-narrowing.js +441 -0
  500. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/property-dispatch.js +122 -0
  501. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/receiver-bound-calls.js +1720 -0
  502. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/phase.js +395 -0
  503. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/reconcile-ownership.js +208 -0
  504. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/registry.js +49 -0
  505. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/run.js +632 -0
  506. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/validate-bindings-immutability.js +112 -0
  507. package/dist/core/code/engine/core/ingestion/scope-resolution/resolution-outcome.js +41 -0
  508. package/dist/core/code/engine/core/ingestion/scope-resolution/scope/namespace-targets.js +81 -0
  509. package/dist/core/code/engine/core/ingestion/scope-resolution/scope/walkers.js +1835 -0
  510. package/dist/core/code/engine/core/ingestion/scope-resolution/unresolved-receivers.js +242 -0
  511. package/dist/core/code/engine/core/ingestion/scope-resolution/utils/definition-id.js +22 -0
  512. package/dist/core/code/engine/core/ingestion/scope-resolution/workspace-index.js +151 -0
  513. package/dist/core/code/engine/core/ingestion/structure-processor.js +40 -0
  514. package/dist/core/code/engine/core/ingestion/tree-sitter-queries.js +2244 -0
  515. package/dist/core/code/engine/core/ingestion/ts-js-hoc-utils.js +115 -0
  516. package/dist/core/code/engine/core/ingestion/type-env.js +1136 -0
  517. package/dist/core/code/engine/core/ingestion/type-extractors/c-cpp.js +555 -0
  518. package/dist/core/code/engine/core/ingestion/type-extractors/csharp.js +570 -0
  519. package/dist/core/code/engine/core/ingestion/type-extractors/dart.js +372 -0
  520. package/dist/core/code/engine/core/ingestion/type-extractors/go.js +508 -0
  521. package/dist/core/code/engine/core/ingestion/type-extractors/jvm.js +875 -0
  522. package/dist/core/code/engine/core/ingestion/type-extractors/php.js +537 -0
  523. package/dist/core/code/engine/core/ingestion/type-extractors/python.js +477 -0
  524. package/dist/core/code/engine/core/ingestion/type-extractors/ruby.js +380 -0
  525. package/dist/core/code/engine/core/ingestion/type-extractors/rust.js +502 -0
  526. package/dist/core/code/engine/core/ingestion/type-extractors/shared.js +843 -0
  527. package/dist/core/code/engine/core/ingestion/type-extractors/swift.js +490 -0
  528. package/dist/core/code/engine/core/ingestion/type-extractors/types.js +2 -0
  529. package/dist/core/code/engine/core/ingestion/type-extractors/typescript.js +690 -0
  530. package/dist/core/code/engine/core/ingestion/utils/ast-helpers.js +1693 -0
  531. package/dist/core/code/engine/core/ingestion/utils/call-analysis.js +779 -0
  532. package/dist/core/code/engine/core/ingestion/utils/callable-flow-captures.js +932 -0
  533. package/dist/core/code/engine/core/ingestion/utils/callable-labels.js +49 -0
  534. package/dist/core/code/engine/core/ingestion/utils/deferred-resolution-profile.js +151 -0
  535. package/dist/core/code/engine/core/ingestion/utils/effective-ram.js +67 -0
  536. package/dist/core/code/engine/core/ingestion/utils/env.js +60 -0
  537. package/dist/core/code/engine/core/ingestion/utils/event-loop.js +9 -0
  538. package/dist/core/code/engine/core/ingestion/utils/graph-sort.js +103 -0
  539. package/dist/core/code/engine/core/ingestion/utils/heap-probe.js +45 -0
  540. package/dist/core/code/engine/core/ingestion/utils/heritage-marker.js +47 -0
  541. package/dist/core/code/engine/core/ingestion/utils/line-base.js +24 -0
  542. package/dist/core/code/engine/core/ingestion/utils/max-file-size.js +59 -0
  543. package/dist/core/code/engine/core/ingestion/utils/method-props.js +198 -0
  544. package/dist/core/code/engine/core/ingestion/utils/qualified-name.js +73 -0
  545. package/dist/core/code/engine/core/ingestion/utils/receiver-chain-captures.js +60 -0
  546. package/dist/core/code/engine/core/ingestion/utils/receiver-chain-codec.js +188 -0
  547. package/dist/core/code/engine/core/ingestion/utils/scope-tree-walk.js +36 -0
  548. package/dist/core/code/engine/core/ingestion/utils/symbol-labels.js +48 -0
  549. package/dist/core/code/engine/core/ingestion/utils/template-arguments.js +187 -0
  550. package/dist/core/code/engine/core/ingestion/utils/type-parameters.js +209 -0
  551. package/dist/core/code/engine/core/ingestion/utils/verbose.js +6 -0
  552. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/c-cpp.js +133 -0
  553. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/csharp.js +66 -0
  554. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/dart.js +111 -0
  555. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/go.js +153 -0
  556. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/jvm.js +145 -0
  557. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/php.js +61 -0
  558. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/python.js +104 -0
  559. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/ruby.js +55 -0
  560. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/rust.js +79 -0
  561. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/swift.js +91 -0
  562. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/typescript-javascript.js +86 -0
  563. package/dist/core/code/engine/core/ingestion/variable-extractors/generic.js +111 -0
  564. package/dist/core/code/engine/core/ingestion/variable-types.js +3 -0
  565. package/dist/core/code/engine/core/ingestion/vue-sfc-extractor.js +544 -0
  566. package/dist/core/code/engine/core/ingestion/workers/callable-id.js +122 -0
  567. package/dist/core/code/engine/core/ingestion/workers/clone-safety.js +470 -0
  568. package/dist/core/code/engine/core/ingestion/workers/parse-worker.js +2456 -0
  569. package/dist/core/code/engine/core/ingestion/workers/post-result.js +90 -0
  570. package/dist/core/code/engine/core/ingestion/workers/quarantine.js +41 -0
  571. package/dist/core/code/engine/core/ingestion/workers/result-merge.js +59 -0
  572. package/dist/core/code/engine/core/ingestion/workers/worker-pool.js +1725 -0
  573. package/dist/core/code/engine/core/ingestion/workspace-config.js +139 -0
  574. package/dist/core/code/engine/core/lbug/conn-lock.js +72 -0
  575. package/dist/core/code/engine/core/lbug/csv-generator.js +710 -0
  576. package/dist/core/code/engine/core/lbug/cypher-escape.js +24 -0
  577. package/dist/core/code/engine/core/lbug/extension-load-error.js +339 -0
  578. package/dist/core/code/engine/core/lbug/extension-loader.js +261 -0
  579. package/dist/core/code/engine/core/lbug/graph-emit-sink.js +584 -0
  580. package/dist/core/code/engine/core/lbug/lbug-adapter.js +2703 -0
  581. package/dist/core/code/engine/core/lbug/lbug-config.js +1029 -0
  582. package/dist/core/code/engine/core/lbug/native-check.js +435 -0
  583. package/dist/core/code/engine/core/lbug/pool-adapter.js +973 -0
  584. package/dist/core/code/engine/core/lbug/query-params.js +25 -0
  585. package/dist/core/code/engine/core/lbug/query-result-utils.js +31 -0
  586. package/dist/core/code/engine/core/lbug/rel-pair-routing.js +373 -0
  587. package/dist/core/code/engine/core/lbug/schema.js +771 -0
  588. package/dist/core/code/engine/core/lbug/shutdown-helpers.js +40 -0
  589. package/dist/core/code/engine/core/lbug/sidecar-recovery.js +716 -0
  590. package/dist/core/code/engine/core/lbug/stdio-capture.js +49 -0
  591. package/dist/core/code/engine/core/lbug/sync-csv-writer.js +115 -0
  592. package/dist/core/code/engine/core/lbug/wal-checkpoint-driver.js +215 -0
  593. package/dist/core/code/engine/core/lbug/wal-driver-state.js +28 -0
  594. package/dist/core/code/engine/core/logger.js +339 -0
  595. package/dist/core/code/engine/core/platform/capabilities.js +91 -0
  596. package/dist/core/code/engine/core/run-analyze.js +1098 -0
  597. package/dist/core/code/engine/core/tree-sitter/parser-loader.js +281 -0
  598. package/dist/core/code/engine/core/tree-sitter/safe-parse.js +258 -0
  599. package/dist/core/code/engine/core/tree-sitter/vendored-grammars.js +64 -0
  600. package/dist/core/code/engine/lib/utils.js +121 -0
  601. package/dist/core/code/engine/mcp/core/lbug-adapter.js +27 -0
  602. package/dist/core/code/engine/mcp/local/aop-metadata.js +230 -0
  603. package/dist/core/code/engine/mcp/local/bean-metadata.js +49 -0
  604. package/dist/core/code/engine/mcp/local/limits.js +15 -0
  605. package/dist/core/code/engine/mcp/local/line-display.js +6 -0
  606. package/dist/core/code/engine/mcp/local/local-backend.js +4142 -0
  607. package/dist/core/code/engine/storage/branch-index.js +72 -0
  608. package/dist/core/code/engine/storage/file-hash.js +95 -0
  609. package/dist/core/code/engine/storage/fs-atomic.js +34 -0
  610. package/dist/core/code/engine/storage/git.js +555 -0
  611. package/dist/core/code/engine/storage/index-lock.js +664 -0
  612. package/dist/core/code/engine/storage/parse-cache.js +650 -0
  613. package/dist/core/code/engine/storage/parsedfile-store.js +620 -0
  614. package/dist/core/code/engine/storage/repo-manager.js +1061 -0
  615. package/dist/core/code/engine/storage/scope-index-store.js +247 -0
  616. package/dist/core/code/engine/types/pipeline.js +2 -0
  617. package/dist/core/code/scripts/install-duckdb-extension.mjs +125 -0
  618. package/dist/core/code/scripts/resolve-analyze-cmd.cjs +346 -0
  619. package/dist/core/code/shared/graph/types.js +8 -0
  620. package/dist/core/code/shared/index.js +105 -0
  621. package/dist/core/code/shared/integrations/circuit-breaker.js +242 -0
  622. package/dist/core/code/shared/integrations/resilient-fetch.js +224 -0
  623. package/dist/core/code/shared/integrations/retry.js +70 -0
  624. package/dist/core/code/shared/integrations/understand-quickly.js +145 -0
  625. package/dist/core/code/shared/language-detection.js +162 -0
  626. package/dist/core/code/shared/languages.js +27 -0
  627. package/dist/core/code/shared/lbug/schema-constants.js +98 -0
  628. package/dist/core/code/shared/mro-strategy.js +2 -0
  629. package/dist/core/code/shared/pipeline.js +5 -0
  630. package/dist/core/code/shared/scope-resolution/callable-flow-site.js +11 -0
  631. package/dist/core/code/shared/scope-resolution/def-index.js +53 -0
  632. package/dist/core/code/shared/scope-resolution/evidence-weights.js +87 -0
  633. package/dist/core/code/shared/scope-resolution/finalize-algorithm.js +807 -0
  634. package/dist/core/code/shared/scope-resolution/language-classification.js +46 -0
  635. package/dist/core/code/shared/scope-resolution/method-dispatch-index.js +100 -0
  636. package/dist/core/code/shared/scope-resolution/module-scope-index.js +59 -0
  637. package/dist/core/code/shared/scope-resolution/origin-priority.js +23 -0
  638. package/dist/core/code/shared/scope-resolution/parsed-file.js +54 -0
  639. package/dist/core/code/shared/scope-resolution/position-index.js +136 -0
  640. package/dist/core/code/shared/scope-resolution/qualified-name-index.js +77 -0
  641. package/dist/core/code/shared/scope-resolution/reference-site.js +24 -0
  642. package/dist/core/code/shared/scope-resolution/registries/class-registry.js +32 -0
  643. package/dist/core/code/shared/scope-resolution/registries/context.js +52 -0
  644. package/dist/core/code/shared/scope-resolution/registries/evidence.js +152 -0
  645. package/dist/core/code/shared/scope-resolution/registries/field-registry.js +33 -0
  646. package/dist/core/code/shared/scope-resolution/registries/lookup-core.js +392 -0
  647. package/dist/core/code/shared/scope-resolution/registries/lookup-qualified.js +58 -0
  648. package/dist/core/code/shared/scope-resolution/registries/macro-registry.js +34 -0
  649. package/dist/core/code/shared/scope-resolution/registries/method-registry.js +34 -0
  650. package/dist/core/code/shared/scope-resolution/registries/tie-breaks.js +63 -0
  651. package/dist/core/code/shared/scope-resolution/resolve-type-ref.js +128 -0
  652. package/dist/core/code/shared/scope-resolution/scope-id.js +49 -0
  653. package/dist/core/code/shared/scope-resolution/scope-tree.js +225 -0
  654. package/dist/core/code/shared/scope-resolution/symbol-definition.js +12 -0
  655. package/dist/core/code/shared/scope-resolution/types.js +25 -0
  656. package/dist/core/code/shared/test-helpers.js +17 -0
  657. package/dist/core/code/vendor/leiden/index.cjs +355 -0
  658. package/dist/core/code/vendor/leiden/utils.cjs +419 -0
  659. package/dist/core/timeline/cli.d.ts.map +1 -1
  660. package/dist/core/timeline/cli.js +13 -6
  661. package/dist/core/timeline/cli.js.map +1 -1
  662. package/dist/core/timeline/debris.d.ts +20 -0
  663. package/dist/core/timeline/debris.d.ts.map +1 -0
  664. package/dist/core/timeline/debris.js +124 -0
  665. package/dist/core/timeline/debris.js.map +1 -0
  666. package/dist/core/timeline/hook-runner.d.ts.map +1 -1
  667. package/dist/core/timeline/hook-runner.js +3 -1
  668. package/dist/core/timeline/hook-runner.js.map +1 -1
  669. package/dist/core/timeline/hooks.d.ts.map +1 -1
  670. package/dist/core/timeline/hooks.js +13 -5
  671. package/dist/core/timeline/hooks.js.map +1 -1
  672. package/dist/core/timeline/installer.d.ts +2 -0
  673. package/dist/core/timeline/installer.d.ts.map +1 -1
  674. package/dist/core/timeline/installer.js +12 -0
  675. package/dist/core/timeline/installer.js.map +1 -1
  676. package/dist/core/timeline/project-root.d.ts +21 -0
  677. package/dist/core/timeline/project-root.d.ts.map +1 -0
  678. package/dist/core/timeline/project-root.js +83 -0
  679. package/dist/core/timeline/project-root.js.map +1 -0
  680. package/package.json +1 -1
@@ -0,0 +1,620 @@
1
+ "use strict";
2
+ /**
3
+ * Disk-backed `ParsedFile` store (#1983 scope-resolution OOM).
4
+ *
5
+ * ## Why this exists
6
+ *
7
+ * The scope-resolution phase needs a `ParsedFile` (scopes / defs / reference
8
+ * sites) for every file. Historically it re-extracted each file from source on
9
+ * the **main thread** via `extractParsedFile` → `parseSourceSafe`. On a huge
10
+ * repo (Linux kernel, ~64k C files) that re-parse accumulates an unbounded
11
+ * **native** memory leak in `tree-sitter` 0.21.1 (`CallbackInput` retains the
12
+ * input string with no destructor; node-tree-sitter PR #201) — the leaked
13
+ * `TSTree` memory is invisible to V8, never reclaimed by GC, and not freed by
14
+ * worker_thread teardown. The parse phase escapes it only because each parse is
15
+ * relatively cheap there; a second full re-parse of every file on the immortal
16
+ * main thread pushes RSS past the heap cap and the OOM-killer fires.
17
+ *
18
+ * The fix: the parse workers already build a tree-sitter `Tree` per file, so
19
+ * they emit the `ParsedFile` directly (reusing that tree — no second parse).
20
+ * Holding all of them in main-thread heap is what the original #1983 work
21
+ * removed (it cost ~1× the semantic model in RAM during parse), so instead we
22
+ * flush them to this disk store per chunk and stream them back per language in
23
+ * scope-resolution. Net effect: the file is parsed exactly once (in a worker),
24
+ * scope-resolution does ZERO parsing, and peak heap stays bounded.
25
+ *
26
+ * ## Shape
27
+ *
28
+ * `<storagePath>/parsedfile-store/<shardId>.json` — one shard per parse chunk,
29
+ * a JSON array of `ParsedFile` serialized with the same `mapReplacer` the parse
30
+ * cache uses (Scope.bindings / Scope.typeBindings are `Map`s). The store is
31
+ * cleared at the start of each parse and after scope-resolution consumes it, so
32
+ * it never lingers and never goes stale across runs.
33
+ *
34
+ * ## Durable sibling store (`parsedfile-cache/`, warm-cache coverage)
35
+ *
36
+ * The run-scoped store above is only populated when the parse workers actually
37
+ * run. On a warm re-analyze where every chunk is a parse-cache HIT, no worker
38
+ * runs, the run-scoped store was cleared at parse start, and the cached
39
+ * `ParseWorkerResult` carries no `ParsedFile`s (the worker emptied them after
40
+ * its store write) — so scope-resolution would find an empty store and fall
41
+ * back to main-thread `extractParsedFile`, re-opening the #1983 OOM. To close
42
+ * that gap we ALSO write the worker's ParsedFiles to a second, CONTENT-ADDRESSED
43
+ * store keyed by the parse chunk hash (`getDurableParsedFileDir`), which mirrors
44
+ * the parse cache's lifecycle (persists across runs, pruned by `usedKeys`,
45
+ * version-tied via `PARSE_CACHE_VERSION`). On a warm hit the chunk's durable
46
+ * shards are byte-COPIED into the run-scoped store (no re-parse, no
47
+ * re-serialize → byte-identical), so scope-resolution streams them exactly as
48
+ * on a cold run. Content-addressing makes stale reuse impossible: a changed
49
+ * file changes its chunk hash, which misses BOTH stores and re-dispatches.
50
+ */
51
+ var __importDefault = (this && this.__importDefault) || function (mod) {
52
+ return (mod && mod.__esModule) ? mod : { "default": mod };
53
+ };
54
+ Object.defineProperty(exports, "__esModule", { value: true });
55
+ exports.pruneAndSaveDurableParsedFileStore = exports.loadDurableParsedFileIndex = exports.restoreDurableParsedFileShard = exports.persistDurableParsedFileShardSync = exports.prepareDurableParsedFileChunk = exports.getDurableParsedFileDir = exports.loadParsedFilesForPaths = exports.persistParsedFileShardSync = exports.persistParsedFileChunk = exports.clearParsedFileStore = exports.getParsedFileStoreDir = exports.forceGc = exports.makeInterningReviver = void 0;
56
+ const node_fs_1 = require("node:fs");
57
+ const node_path_1 = __importDefault(require("node:path"));
58
+ const node_v8_1 = __importDefault(require("node:v8"));
59
+ const node_vm_1 = __importDefault(require("node:vm"));
60
+ const receiver_chain_codec_js_1 = require("../core/ingestion/utils/receiver-chain-codec.js");
61
+ const logger_js_1 = require("../core/logger.js");
62
+ const parse_cache_js_1 = require("./parse-cache.js");
63
+ const STORE_DIRNAME = 'parsedfile-store';
64
+ const DURABLE_DIRNAME = 'parsedfile-cache';
65
+ const DURABLE_INDEX_FILENAME = 'index.json';
66
+ const MAX_CALLABLE_FLOW_SITES_PER_FILE = 100_000;
67
+ const MAX_CALLABLE_FLOW_INDIRECTION = 16;
68
+ const MAX_CALLABLE_FLOW_NAME_LENGTH = 4_096;
69
+ const MAX_CALLABLE_FLOW_PARAMETERS = 1_024;
70
+ /**
71
+ * Build a JSON.parse reviver that (a) interns every string against a shared
72
+ * pool and (b) applies the parse-cache `mapReviver` (Map/Set reconstruction).
73
+ *
74
+ * `JSON.parse` allocates a DISTINCT string object for every textual token, so a
75
+ * `ParsedFile` graph round-tripped through disk holds millions of duplicate
76
+ * strings — every def repeats its `filePath`, and common type/qualified names
77
+ * (`int`, `void`, `struct …`) recur across the whole repo. On the Linux kernel
78
+ * that roughly DOUBLES the deserialized heap (~15 GB vs ~7.6 GB interned).
79
+ * Interning IN the reviver collapses duplicates as the tree is revived (one
80
+ * pass, no second walk). The pool is per-load; the interned strings stay shared
81
+ * through the retained `ParsedFile` references after the pool is dropped.
82
+ */
83
+ const makeInterningReviver = (pool, defPool) => {
84
+ return (key, value) => {
85
+ if (typeof value === 'string') {
86
+ const hit = pool.get(value);
87
+ if (hit !== undefined)
88
+ return hit;
89
+ pool.set(value, value);
90
+ return value;
91
+ }
92
+ const revived = (0, parse_cache_js_1.mapReviver)(key, value);
93
+ // Collapse the THREE serialized copies of each `SymbolDefinition` back to one
94
+ // shared object, keyed on the def-exclusive `nodeId`. A def is serialized in
95
+ // `localDefs`, in its owning `scope.ownedDefs`, and inside `scope.bindings[].def`;
96
+ // in the live extractor those are ONE object by reference, but `JSON.parse`
97
+ // rebuilds three distinct objects (string interning alone leaves the object
98
+ // duplication intact — ~3× the def-object heap on the disk-backed path).
99
+ // Re-sharing is byte-identical to resolution: every consumer reads defs BY
100
+ // VALUE (`nodeId`/`type`), never by object identity, and the authoritative
101
+ // resolver index is built from `localDefs` only. `nodeId` is def-exclusive in
102
+ // the scope-resolution schema; the `filePath` check guards future shapes.
103
+ if (revived !== null &&
104
+ typeof revived === 'object' &&
105
+ typeof revived.nodeId === 'string' &&
106
+ typeof revived.filePath === 'string') {
107
+ const def = revived;
108
+ const seen = defPool.get(def.nodeId);
109
+ if (seen !== undefined)
110
+ return seen;
111
+ defPool.set(def.nodeId, def);
112
+ return def;
113
+ }
114
+ return revived;
115
+ };
116
+ };
117
+ exports.makeInterningReviver = makeInterningReviver;
118
+ /**
119
+ * Best-effort forced garbage collection. `JSON.parse` of each shard builds a
120
+ * transient bloated (pre-intern) tree; across hundreds of shards that churn
121
+ * outpaces V8's incremental GC and piles up against the heap limit (measured
122
+ * ~5 GB of avoidable transient on the kernel). A periodic full GC during the
123
+ * load keeps the peak at the retained set rather than retained + churn. Uses
124
+ * the global `gc` when exposed, else the v8/vm trick — and degrades to a no-op
125
+ * if neither is available, so it never throws.
126
+ */
127
+ let cachedGc;
128
+ /**
129
+ * Best-effort synchronous GC. Uses `globalThis.gc` when `--expose-gc` is set,
130
+ * else lazily wires it via `v8.setFlagsFromString('--expose-gc')` + a fresh
131
+ * `vm` context. Exported so scope-resolution can reclaim a finished language's
132
+ * ParsedFiles at the per-language eviction boundary (#1741 / kernel memory work).
133
+ */
134
+ const forceGc = () => {
135
+ const g = globalThis.gc;
136
+ if (typeof g === 'function') {
137
+ g();
138
+ return;
139
+ }
140
+ if (cachedGc === undefined) {
141
+ cachedGc = null;
142
+ try {
143
+ node_v8_1.default.setFlagsFromString('--expose-gc');
144
+ cachedGc = node_vm_1.default.runInNewContext('gc');
145
+ node_v8_1.default.setFlagsFromString('--no-expose-gc');
146
+ }
147
+ catch {
148
+ cachedGc = null;
149
+ }
150
+ }
151
+ cachedGc?.();
152
+ };
153
+ exports.forceGc = forceGc;
154
+ const getParsedFileStoreDir = (storagePath) => node_path_1.default.join(storagePath, STORE_DIRNAME);
155
+ exports.getParsedFileStoreDir = getParsedFileStoreDir;
156
+ /** Remove any prior run's shards so a fresh parse starts clean. Idempotent. */
157
+ const clearParsedFileStore = async (storagePath) => {
158
+ await node_fs_1.promises.rm((0, exports.getParsedFileStoreDir)(storagePath), { recursive: true, force: true });
159
+ };
160
+ exports.clearParsedFileStore = clearParsedFileStore;
161
+ /**
162
+ * Single source of truth for a shard's bytes. Returns `null` for an empty
163
+ * chunk (caller writes nothing). Both the async (`persistParsedFileChunk`) and
164
+ * sync (`persistParsedFileShardSync`) writers go through this so the two paths
165
+ * are guaranteed byte-identical — the shards must round-trip through the same
166
+ * `mapReviver`, and matching bytes by having both authors type the same
167
+ * `mapReplacer` call would be a coincidence, not a guarantee.
168
+ */
169
+ const serializeParsedFileShard = (parsedFiles) => {
170
+ if (parsedFiles.length === 0)
171
+ return null;
172
+ return JSON.stringify(parsedFiles, parse_cache_js_1.mapReplacer);
173
+ };
174
+ const shardPath = (storagePath, shardId) => node_path_1.default.join((0, exports.getParsedFileStoreDir)(storagePath), `${shardId}.json`);
175
+ /**
176
+ * Write one parse chunk's `ParsedFile[]` to the store as a single shard (async).
177
+ * No-op for an empty chunk. `shardId` must be unique within a run. Used by the
178
+ * main-thread no-store-disabled fallback and any non-worker writer; the worker
179
+ * store path uses {@link persistParsedFileShardSync}.
180
+ */
181
+ const persistParsedFileChunk = async (storagePath, shardId, parsedFiles) => {
182
+ const payload = serializeParsedFileShard(parsedFiles);
183
+ if (payload === null)
184
+ return;
185
+ await node_fs_1.promises.mkdir((0, exports.getParsedFileStoreDir)(storagePath), { recursive: true });
186
+ await node_fs_1.promises.writeFile(shardPath(storagePath, shardId), payload, 'utf-8');
187
+ };
188
+ exports.persistParsedFileChunk = persistParsedFileChunk;
189
+ // Per-process set of store dirs we've already `mkdir`ed, so the sync worker
190
+ // writer (called once per job, many times into the same dir) doesn't issue a
191
+ // `mkdirSync` syscall on every shard. Mirrors parse-cache.ts's `createdCacheDirs`.
192
+ const createdStoreDirs = new Set();
193
+ /**
194
+ * Synchronous shard writer for use INSIDE a parse worker (#1983 parallel
195
+ * serialization). The worker is a dedicated thread, so a blocking write there
196
+ * protects the main thread, and a sync write avoids threading `async`/`await`
197
+ * through the synchronous per-file extract loop. Produces byte-identical shards
198
+ * to {@link persistParsedFileChunk} via the shared {@link serializeParsedFileShard}.
199
+ * No-op for an empty chunk. `shardId` must be globally unique for the run (the
200
+ * worker uses `w<threadId>-<seq>`); a duplicate would silently overwrite.
201
+ */
202
+ const persistParsedFileShardSync = (storagePath, shardId, parsedFiles) => {
203
+ const payload = serializeParsedFileShard(parsedFiles);
204
+ if (payload === null)
205
+ return;
206
+ const dir = (0, exports.getParsedFileStoreDir)(storagePath);
207
+ if (!createdStoreDirs.has(dir)) {
208
+ (0, node_fs_1.mkdirSync)(dir, { recursive: true });
209
+ createdStoreDirs.add(dir);
210
+ }
211
+ (0, node_fs_1.writeFileSync)(shardPath(storagePath, shardId), payload, 'utf-8');
212
+ };
213
+ exports.persistParsedFileShardSync = persistParsedFileShardSync;
214
+ /**
215
+ * Stream the store and return the `ParsedFile`s whose `filePath` is in
216
+ * `wantPaths`, keyed by path. Loads one shard at a time and retains only the
217
+ * matching entries, so peak heap is bounded by (matched set) + (one shard)
218
+ * rather than the whole store. Returns an empty map when the store is absent
219
+ * (e.g. tests, or a run with no worker pool) — callers fall back to a fresh
220
+ * extract for the missing files.
221
+ */
222
+ const loadParsedFilesForPaths = async (storagePath, wantPaths) => {
223
+ const out = new Map();
224
+ if (wantPaths.size === 0)
225
+ return out;
226
+ const dir = (0, exports.getParsedFileStoreDir)(storagePath);
227
+ let shards;
228
+ try {
229
+ shards = (await node_fs_1.promises.readdir(dir)).filter((f) => f.endsWith('.json'));
230
+ }
231
+ catch {
232
+ return out; // store absent
233
+ }
234
+ // Shared interning pool for this load — deduplicates strings ACROSS shards
235
+ // (one `int` / one repeated filePath for the whole language), which is where
236
+ // most of the saving comes from. Dropped when this function returns.
237
+ const pool = new Map();
238
+ let droppedSites = 0;
239
+ let filesWithDroppedSites = 0;
240
+ let droppedChains = 0;
241
+ let rejectedFiles = 0;
242
+ for (let i = 0; i < shards.length; i++) {
243
+ // Per-shard def pool: a SymbolDefinition's three serialized copies live within
244
+ // a single shard (one ParsedFile), so the dedup is shard-local. A cross-shard
245
+ // pool would retain defs of files NOT in `wantPaths` (loaded-but-discarded
246
+ // shards), reintroducing the leak; per-shard drops them with the shard.
247
+ const defPool = new Map();
248
+ const reviver = (0, exports.makeInterningReviver)(pool, defPool);
249
+ let parsed;
250
+ try {
251
+ const raw = await node_fs_1.promises.readFile(node_path_1.default.join(dir, shards[i]), 'utf-8');
252
+ parsed = JSON.parse(raw, reviver);
253
+ }
254
+ catch {
255
+ continue; // skip a corrupt shard; missing files fall back to fresh extract
256
+ }
257
+ if (!Array.isArray(parsed))
258
+ continue;
259
+ for (const pf of parsed) {
260
+ if (!pf || typeof pf.filePath !== 'string' || !wantPaths.has(pf.filePath))
261
+ continue;
262
+ const flow = sanitizeCallableFlowSites(pf.callableFlowSites);
263
+ if (flow === undefined) {
264
+ // non-array garbage → distrust the file, re-extract
265
+ rejectedFiles++;
266
+ continue;
267
+ }
268
+ const chains = sanitizeReceiverChains(pf.referenceSites);
269
+ if (chains === undefined) {
270
+ rejectedFiles++;
271
+ continue;
272
+ }
273
+ if (flow.dropped === 0 && chains.dropped === 0) {
274
+ out.set(pf.filePath, pf);
275
+ }
276
+ else {
277
+ droppedSites += flow.dropped;
278
+ droppedChains += chains.dropped;
279
+ filesWithDroppedSites++;
280
+ out.set(pf.filePath, {
281
+ ...pf,
282
+ ...(flow.dropped === 0 ? {} : { callableFlowSites: flow.sites }),
283
+ ...(chains.dropped === 0 ? {} : { referenceSites: chains.sites }),
284
+ });
285
+ }
286
+ }
287
+ // Every few shards, reclaim the transient pre-intern parse churn before it
288
+ // piles up against the heap limit (~5 GB avoidable on the kernel), and
289
+ // yield so the GC + any pending I/O can run.
290
+ if ((i & 7) === 7) {
291
+ (0, exports.forceGc)();
292
+ await new Promise((resolve) => setImmediate(resolve));
293
+ }
294
+ }
295
+ if (droppedSites > 0 || droppedChains > 0) {
296
+ // Facts for the dropped sites are omitted this run (the file itself is
297
+ // retained, so no re-extract happens) — surface it so a recurring drop
298
+ // on every warm load is observable rather than silent (#2522 review).
299
+ logger_js_1.logger.warn({ droppedSites, droppedChains, files: filesWithDroppedSites }, 'parsedfile-store: dropped malformed/over-bound sites at load; files retained without those facts');
300
+ }
301
+ if (rejectedFiles > 0) {
302
+ // The other half of the same defect. A rejected file silently falls back to
303
+ // a fresh extract EVERY load, so a writer that keeps minting what this
304
+ // reader keeps refusing is a permanent warm-cache miss that costs real time
305
+ // and says nothing about why.
306
+ logger_js_1.logger.warn({ rejectedFiles }, 'parsedfile-store: rejected shard entries at load (untrusted shape); those files re-extract every run');
307
+ }
308
+ return out;
309
+ };
310
+ exports.loadParsedFilesForPaths = loadParsedFilesForPaths;
311
+ /**
312
+ * Treat the durable ParsedFile store as an untrusted serialization boundary.
313
+ * Sanitation is per-SITE, not per-file: one malformed or over-bound fact drops
314
+ * only itself (counted, logged by the caller), so a legitimately pathological
315
+ * source file cannot push its whole ParsedFile into a permanent, silent
316
+ * warm-cache-miss reparse loop (#2522 review). Only a non-array field —
317
+ * i.e. garbage that says the serialization itself is untrustworthy — rejects
318
+ * the file, and `undefined` (never emitted / no facts) passes through.
319
+ * Returns `undefined` for the reject-file case.
320
+ */
321
+ function sanitizeCallableFlowSites(value) {
322
+ if (value === undefined)
323
+ return { sites: undefined, dropped: 0 };
324
+ if (!Array.isArray(value))
325
+ return undefined;
326
+ const bounded = value.length > MAX_CALLABLE_FLOW_SITES_PER_FILE
327
+ ? value.slice(0, MAX_CALLABLE_FLOW_SITES_PER_FILE)
328
+ : value;
329
+ const sites = bounded.filter(isValidCallableFlowSite);
330
+ return { sites, dropped: value.length - sites.length };
331
+ }
332
+ /**
333
+ * Untrusted-boundary handling for the compact `receiverChain` on a reference site.
334
+ *
335
+ * NARROWER than its sibling `sanitizeCallableFlowSites`, deliberately and worth
336
+ * stating plainly: that function validates every element with a full type
337
+ * predicate, whereas this one inspects only the `receiverChain` sub-field and, in
338
+ * the common case where nothing was stripped, returns the original array typed as
339
+ * `ReferenceSite[]` without structurally validating `name` / `kind` / `atRange`.
340
+ * That is still a strict improvement — `referenceSites` had NO sanitation at all
341
+ * before this — but it is not parity, and a future change that needs per-site
342
+ * structural validation must add it rather than assume it is already here.
343
+ *
344
+ * Sanitation is per-FIELD, not per-site: a chain that does not decode is
345
+ * stripped and the site is kept, because the site is still perfectly usable
346
+ * through the text cascade — dropping the whole reference would turn a
347
+ * degraded receiver into a missing edge. Only a non-array `referenceSites`
348
+ * rejects the file, and `undefined` (a store written before this field
349
+ * existed) passes through untouched, which is what makes an old shard load
350
+ * without error.
351
+ *
352
+ * Returns the ORIGINAL array when nothing was stripped, so the overwhelmingly
353
+ * common case allocates nothing on a hot warm-load path.
354
+ */
355
+ function sanitizeReceiverChains(value) {
356
+ if (value === undefined)
357
+ return { sites: undefined, dropped: 0 };
358
+ if (!Array.isArray(value))
359
+ return undefined;
360
+ let dropped = 0;
361
+ for (const site of value) {
362
+ if (isRecord(site) &&
363
+ site.receiverChain !== undefined &&
364
+ !(0, receiver_chain_codec_js_1.isValidReceiverChain)(site.receiverChain))
365
+ dropped++;
366
+ }
367
+ if (dropped === 0)
368
+ return { sites: value, dropped: 0 };
369
+ const sites = value.map((site) => {
370
+ if (!isRecord(site) || site.receiverChain === undefined)
371
+ return site;
372
+ if ((0, receiver_chain_codec_js_1.isValidReceiverChain)(site.receiverChain))
373
+ return site;
374
+ const { receiverChain: _dropped, ...rest } = site;
375
+ return rest;
376
+ });
377
+ return { sites, dropped };
378
+ }
379
+ function isValidCallableFlowSite(value) {
380
+ if (!isRecord(value) || typeof value.kind !== 'string')
381
+ return false;
382
+ switch (value.kind) {
383
+ case 'seed':
384
+ return (isValidOperand(value.destination) &&
385
+ isBoundedString(value.targetName) &&
386
+ isOptionalBoundedString(value.targetQualifiedName) &&
387
+ isValidRange(value.targetRange) &&
388
+ isValidExpectedSignature(value.expectedSignature));
389
+ case 'copy':
390
+ case 'alias':
391
+ case 'address':
392
+ return isValidOperand(value.source) && isValidOperand(value.destination);
393
+ case 'store':
394
+ return isValidOperand(value.source) && isValidOperand(value.pointer);
395
+ case 'load':
396
+ return isValidOperand(value.pointer) && isValidOperand(value.destination);
397
+ case 'formal':
398
+ return (isBoundedString(value.ownerName) &&
399
+ isValidRange(value.ownerRange) &&
400
+ isSafeIndex(value.parameterIndex) &&
401
+ isValidOperand(value.binding) &&
402
+ (value.passingMode === 'value' ||
403
+ value.passingMode === 'reference' ||
404
+ value.passingMode === 'pointer') &&
405
+ isValidExpectedSignature(value.expectedSignature));
406
+ case 'argument':
407
+ return (isValidRange(value.callSite) &&
408
+ isSafeIndex(value.parameterIndex) &&
409
+ isValidOperand(value.source) &&
410
+ isOptionalBoundedString(value.directCalleeName));
411
+ case 'invoke':
412
+ return (isValidRange(value.callSite) &&
413
+ isBoundedString(value.inScope) &&
414
+ isValidOperand(value.callee) &&
415
+ (value.receiver === undefined || isValidOperand(value.receiver)) &&
416
+ (value.invocationKind === 'indirect' ||
417
+ value.invocationKind === 'member-pointer' ||
418
+ value.invocationKind === 'callable-object') &&
419
+ (value.arity === undefined || isSafeIndex(value.arity)));
420
+ default:
421
+ return false;
422
+ }
423
+ }
424
+ function isValidOperand(value) {
425
+ if (!isRecord(value))
426
+ return false;
427
+ return (isBoundedString(value.name) &&
428
+ isBoundedString(value.inScope) &&
429
+ isValidRange(value.atRange) &&
430
+ Number.isInteger(value.indirection) &&
431
+ value.indirection >= 0 &&
432
+ value.indirection <= MAX_CALLABLE_FLOW_INDIRECTION &&
433
+ typeof value.addressOf === 'boolean' &&
434
+ (value.expressionKind === undefined ||
435
+ value.expressionKind === 'binding' ||
436
+ value.expressionKind === 'callable-designator' ||
437
+ value.expressionKind === 'bound-member' ||
438
+ value.expressionKind === 'anonymous-callable') &&
439
+ isOptionalBoundedString(value.qualifiedName));
440
+ }
441
+ function isValidExpectedSignature(value) {
442
+ if (value === undefined)
443
+ return true;
444
+ if (!isRecord(value))
445
+ return false;
446
+ return ((value.parameterCount === undefined || isSafeIndex(value.parameterCount)) &&
447
+ isValidBoundedStringArray(value.parameterTypes) &&
448
+ (value.parameterTypeClasses === undefined ||
449
+ (Array.isArray(value.parameterTypeClasses) &&
450
+ value.parameterTypeClasses.length <= MAX_CALLABLE_FLOW_PARAMETERS &&
451
+ value.parameterTypeClasses.every(isRecord))) &&
452
+ (value.isConst === undefined || typeof value.isConst === 'boolean'));
453
+ }
454
+ function isValidBoundedStringArray(value) {
455
+ return (value === undefined ||
456
+ (Array.isArray(value) &&
457
+ value.length <= MAX_CALLABLE_FLOW_PARAMETERS &&
458
+ // '' is a legitimate entry meaning "unknown type" — the same convention
459
+ // as ReferenceSite.argumentTypes. C++ emits it for cv-qualifier-only or
460
+ // ERROR-recovered parameter types, so requiring non-empty here rejected
461
+ // real extractor output (#2522 review).
462
+ value.every((entry) => typeof entry === 'string' && entry.length <= MAX_CALLABLE_FLOW_NAME_LENGTH)));
463
+ }
464
+ function isValidRange(value) {
465
+ if (!isRecord(value))
466
+ return false;
467
+ return (isNonNegativeInteger(value.startLine) &&
468
+ isNonNegativeInteger(value.startCol) &&
469
+ isNonNegativeInteger(value.endLine) &&
470
+ isNonNegativeInteger(value.endCol));
471
+ }
472
+ function isRecord(value) {
473
+ return value !== null && typeof value === 'object' && !Array.isArray(value);
474
+ }
475
+ function isBoundedString(value) {
476
+ return (typeof value === 'string' && value.length > 0 && value.length <= MAX_CALLABLE_FLOW_NAME_LENGTH);
477
+ }
478
+ function isOptionalBoundedString(value) {
479
+ return value === undefined || isBoundedString(value);
480
+ }
481
+ function isNonNegativeInteger(value) {
482
+ return Number.isSafeInteger(value) && value >= 0;
483
+ }
484
+ function isSafeIndex(value) {
485
+ return isNonNegativeInteger(value) && value <= MAX_CALLABLE_FLOW_PARAMETERS;
486
+ }
487
+ /** Durable store dir — a sibling of `parsedfile-store/`, NEVER cleared per run. */
488
+ const getDurableParsedFileDir = (storagePath) => node_path_1.default.join(storagePath, DURABLE_DIRNAME);
489
+ exports.getDurableParsedFileDir = getDurableParsedFileDir;
490
+ const durableChunkDir = (durableDir, chunkHash) => node_path_1.default.join(durableDir, chunkHash);
491
+ /**
492
+ * Start a fresh durable generation for one content-addressed parse chunk.
493
+ * The main thread calls this once before dispatching a cache miss, before any
494
+ * worker can write that chunk. Recreating the directory immediately keeps the
495
+ * worker-side mkdir memoization valid while preventing old worker shard names
496
+ * from accumulating across analyses.
497
+ */
498
+ const prepareDurableParsedFileChunk = async (durableDir, chunkHash) => {
499
+ const dir = durableChunkDir(durableDir, chunkHash);
500
+ await node_fs_1.promises.rm(dir, { recursive: true, force: true });
501
+ await node_fs_1.promises.mkdir(dir, { recursive: true });
502
+ };
503
+ exports.prepareDurableParsedFileChunk = prepareDurableParsedFileChunk;
504
+ // Per-process set of durable chunk subdirs already `mkdir`ed (mirrors
505
+ // `createdStoreDirs`) so the worker doesn't `mkdirSync` on every shard.
506
+ const createdDurableDirs = new Set();
507
+ /**
508
+ * Synchronous durable-shard writer for use INSIDE a parse worker, alongside
509
+ * {@link persistParsedFileShardSync}. Writes the SAME bytes to a content-addressed
510
+ * durable location keyed by the parse chunk hash so a future warm hit can reuse
511
+ * them. `chunkHash`+`threadId`+`shardSeq` is collision-free across the
512
+ * N-shards-per-chunk fan-out and across worker-death retries — the same
513
+ * uniqueness that makes the run-scoped `w<tid>-<seq>` name safe, prefixed by
514
+ * content. No-op for an empty chunk.
515
+ */
516
+ const persistDurableParsedFileShardSync = (durableDir, chunkHash, threadId, shardSeq, parsedFiles) => {
517
+ const payload = serializeParsedFileShard(parsedFiles);
518
+ if (payload === null)
519
+ return;
520
+ const dir = durableChunkDir(durableDir, chunkHash);
521
+ if (!createdDurableDirs.has(dir)) {
522
+ (0, node_fs_1.mkdirSync)(dir, { recursive: true });
523
+ createdDurableDirs.add(dir);
524
+ }
525
+ (0, node_fs_1.writeFileSync)(node_path_1.default.join(dir, `${chunkHash}-w${threadId}-${shardSeq}.json`), payload, 'utf-8');
526
+ };
527
+ exports.persistDurableParsedFileShardSync = persistDurableParsedFileShardSync;
528
+ /**
529
+ * Restore a cached chunk's durable shards into the run-scoped store on a warm
530
+ * hit. A verbatim byte copy (no parse, no re-serialize), so the restored
531
+ * ParsedFiles are byte-identical to a cold run and `loadParsedFilesForPaths`
532
+ * (which keys on `filePath`, not shard name) gives scope-resolution full
533
+ * coverage. The durable shard names already carry the chunk hash, so they never
534
+ * collide with the worker's run-scoped `w<tid>-<seq>` shards. Returns the number
535
+ * of shards restored (0 ⇒ no durable coverage for this chunk; caller treats it
536
+ * as a miss).
537
+ */
538
+ const restoreDurableParsedFileShard = async (durableDir, runStoragePath, chunkHash) => {
539
+ const src = durableChunkDir(durableDir, chunkHash);
540
+ let shards;
541
+ try {
542
+ shards = (await node_fs_1.promises.readdir(src)).filter((f) => f.endsWith('.json'));
543
+ }
544
+ catch {
545
+ return 0; // no durable shards for this chunk
546
+ }
547
+ if (shards.length === 0)
548
+ return 0;
549
+ const dst = (0, exports.getParsedFileStoreDir)(runStoragePath);
550
+ await node_fs_1.promises.mkdir(dst, { recursive: true });
551
+ for (const name of shards) {
552
+ await node_fs_1.promises.copyFile(node_path_1.default.join(src, name), node_path_1.default.join(dst, name));
553
+ }
554
+ return shards.length;
555
+ };
556
+ exports.restoreDurableParsedFileShard = restoreDurableParsedFileShard;
557
+ /**
558
+ * Read the durable index and return the set of chunk hashes it vouches for,
559
+ * gated on `expectedVersion` (`PARSE_CACHE_VERSION`). A version mismatch or a
560
+ * missing/corrupt index returns the empty set — the caller then treats every
561
+ * chunk as a durable miss and re-dispatches workers (NEVER the main-thread
562
+ * `extractParsedFile` fallback), which rewrites the durable store under the new
563
+ * version. Mirrors `loadParseCache`'s version-invalidation contract.
564
+ */
565
+ const loadDurableParsedFileIndex = async (durableDir, expectedVersion) => {
566
+ try {
567
+ const raw = await node_fs_1.promises.readFile(node_path_1.default.join(durableDir, DURABLE_INDEX_FILENAME), 'utf-8');
568
+ const idx = JSON.parse(raw);
569
+ if (idx?.version !== expectedVersion || !Array.isArray(idx.keys))
570
+ return new Set();
571
+ return new Set(idx.keys);
572
+ }
573
+ catch {
574
+ return new Set();
575
+ }
576
+ };
577
+ exports.loadDurableParsedFileIndex = loadDurableParsedFileIndex;
578
+ /**
579
+ * Prune the durable store to `keepKeys` and rewrite its index. `keepKeys` must
580
+ * be the parse cache's surviving on-disk keys (so the two stores stay coherent:
581
+ * a chunk is "cached" iff BOTH its parse-cache shard and its durable shards
582
+ * exist; a quarantined chunk — no parse-cache shard — drops its durable subdir
583
+ * here and re-dispatches next run). Only subdirs with ≥1 shard are indexed
584
+ * (mirrors `saveParseCache`'s written-keys discipline — never vouch for a chunk
585
+ * hash with no backing shard). The index write is tmp+rename atomic.
586
+ */
587
+ const pruneAndSaveDurableParsedFileStore = async (durableDir, version, keepKeys) => {
588
+ let entries;
589
+ try {
590
+ entries = await node_fs_1.promises.readdir(durableDir);
591
+ }
592
+ catch {
593
+ return; // nothing written this run
594
+ }
595
+ const survivors = [];
596
+ for (const name of entries) {
597
+ if (name === DURABLE_INDEX_FILENAME)
598
+ continue;
599
+ const full = node_path_1.default.join(durableDir, name);
600
+ if (keepKeys.has(name)) {
601
+ try {
602
+ const shards = (await node_fs_1.promises.readdir(full)).filter((f) => f.endsWith('.json'));
603
+ if (shards.length > 0) {
604
+ survivors.push(name);
605
+ continue;
606
+ }
607
+ }
608
+ catch {
609
+ /* not a readable dir → drop below */
610
+ }
611
+ }
612
+ await node_fs_1.promises.rm(full, { recursive: true, force: true });
613
+ }
614
+ const idx = { version, keys: survivors };
615
+ const tmp = node_path_1.default.join(durableDir, `${DURABLE_INDEX_FILENAME}.tmp`);
616
+ await node_fs_1.promises.mkdir(durableDir, { recursive: true });
617
+ await node_fs_1.promises.writeFile(tmp, JSON.stringify(idx), 'utf-8');
618
+ await node_fs_1.promises.rename(tmp, node_path_1.default.join(durableDir, DURABLE_INDEX_FILENAME));
619
+ };
620
+ exports.pruneAndSaveDurableParsedFileStore = pruneAndSaveDurableParsedFileStore;