gitnexus 1.6.10-rc.99 → 1.6.10

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 (775) hide show
  1. package/README.md +177 -18
  2. package/dist/_shared/graph/types.d.ts +21 -2
  3. package/dist/_shared/graph/types.d.ts.map +1 -1
  4. package/dist/_shared/index.d.ts +3 -3
  5. package/dist/_shared/index.d.ts.map +1 -1
  6. package/dist/_shared/index.js +1 -1
  7. package/dist/_shared/index.js.map +1 -1
  8. package/dist/_shared/integrations/circuit-breaker.d.ts.map +1 -1
  9. package/dist/_shared/integrations/circuit-breaker.js.map +1 -1
  10. package/dist/_shared/integrations/resilient-fetch.d.ts +16 -0
  11. package/dist/_shared/integrations/resilient-fetch.d.ts.map +1 -1
  12. package/dist/_shared/integrations/resilient-fetch.js +19 -7
  13. package/dist/_shared/integrations/resilient-fetch.js.map +1 -1
  14. package/dist/_shared/language-detection.d.ts.map +1 -1
  15. package/dist/_shared/lbug/schema-constants.d.ts +2 -2
  16. package/dist/_shared/lbug/schema-constants.d.ts.map +1 -1
  17. package/dist/_shared/lbug/schema-constants.js +3 -0
  18. package/dist/_shared/lbug/schema-constants.js.map +1 -1
  19. package/dist/_shared/scope-resolution/evidence-weights.d.ts.map +1 -1
  20. package/dist/_shared/scope-resolution/finalize-algorithm.d.ts +5 -0
  21. package/dist/_shared/scope-resolution/finalize-algorithm.d.ts.map +1 -1
  22. package/dist/_shared/scope-resolution/finalize-algorithm.js +315 -36
  23. package/dist/_shared/scope-resolution/finalize-algorithm.js.map +1 -1
  24. package/dist/_shared/scope-resolution/reference-site.d.ts +115 -0
  25. package/dist/_shared/scope-resolution/reference-site.d.ts.map +1 -1
  26. package/dist/_shared/scope-resolution/registries/field-registry.js.map +1 -1
  27. package/dist/_shared/scope-resolution/registries/lookup-core.d.ts.map +1 -1
  28. package/dist/_shared/scope-resolution/registries/lookup-core.js +58 -2
  29. package/dist/_shared/scope-resolution/registries/lookup-core.js.map +1 -1
  30. package/dist/_shared/scope-resolution/registries/method-registry.js.map +1 -1
  31. package/dist/_shared/scope-resolution/scope-tree.d.ts.map +1 -1
  32. package/dist/_shared/scope-resolution/scope-tree.js.map +1 -1
  33. package/dist/_shared/scope-resolution/symbol-definition.d.ts +47 -0
  34. package/dist/_shared/scope-resolution/symbol-definition.d.ts.map +1 -1
  35. package/dist/_shared/scope-resolution/types.d.ts +278 -3
  36. package/dist/_shared/scope-resolution/types.d.ts.map +1 -1
  37. package/dist/cli/ai-context.d.ts +3 -2
  38. package/dist/cli/ai-context.js +71 -16
  39. package/dist/cli/analyze-config.d.ts +1 -1
  40. package/dist/cli/analyze-options.d.ts +131 -0
  41. package/dist/cli/analyze-options.js +1 -0
  42. package/dist/cli/analyze.d.ts +21 -113
  43. package/dist/cli/analyze.js +172 -29
  44. package/dist/cli/cli-message.d.ts +1 -1
  45. package/dist/cli/detect-changes-format.js +19 -2
  46. package/dist/cli/doctor.d.ts +12 -0
  47. package/dist/cli/doctor.js +32 -5
  48. package/dist/cli/editor-targets.js +6 -0
  49. package/dist/cli/eval-server.js +2 -1
  50. package/dist/cli/format-symbol.d.ts +15 -0
  51. package/dist/cli/format-symbol.js +17 -0
  52. package/dist/cli/generated-skill.d.ts +17 -0
  53. package/dist/cli/generated-skill.js +1 -0
  54. package/dist/cli/group.js +229 -21
  55. package/dist/cli/help-i18n.js +1 -2
  56. package/dist/cli/i18n/en.d.ts +11 -9
  57. package/dist/cli/i18n/en.js +13 -9
  58. package/dist/cli/i18n/resources.d.ts +15 -11
  59. package/dist/cli/i18n/zh-CN.d.ts +4 -2
  60. package/dist/cli/i18n/zh-CN.js +11 -9
  61. package/dist/cli/index.js +8 -4
  62. package/dist/cli/resolve-invocation.d.ts +7 -3
  63. package/dist/cli/resolve-invocation.js +7 -3
  64. package/dist/cli/setup.js +4 -3
  65. package/dist/cli/skill-gen.d.ts +1 -6
  66. package/dist/cli/tool.d.ts +1 -0
  67. package/dist/cli/tool.js +74 -17
  68. package/dist/cli/wiki.js +53 -10
  69. package/dist/config/ignore-service.d.ts +2 -0
  70. package/dist/config/ignore-service.js +54 -13
  71. package/dist/core/analyzer-identity.d.ts +80 -0
  72. package/dist/core/analyzer-identity.js +364 -26
  73. package/dist/core/augmentation/engine.js +86 -71
  74. package/dist/core/embedding-checkpoint.d.ts +143 -0
  75. package/dist/core/embedding-checkpoint.js +221 -0
  76. package/dist/core/embedding-count.d.ts +61 -0
  77. package/dist/core/embedding-count.js +69 -0
  78. package/dist/core/embeddings/ast-utils.js +9 -1
  79. package/dist/core/embeddings/embedding-pipeline.d.ts +8 -0
  80. package/dist/core/embeddings/embedding-pipeline.js +253 -14
  81. package/dist/core/embeddings/http-client.d.ts +5 -0
  82. package/dist/core/embeddings/http-client.js +142 -27
  83. package/dist/core/graph/graph.js +3 -0
  84. package/dist/core/graph/import-cycles.d.ts +194 -3
  85. package/dist/core/graph/import-cycles.js +522 -73
  86. package/dist/core/graph/types.d.ts +18 -0
  87. package/dist/core/group/bridge-db.d.ts +204 -1
  88. package/dist/core/group/bridge-db.js +401 -28
  89. package/dist/core/group/completeness.d.ts +130 -0
  90. package/dist/core/group/completeness.js +83 -0
  91. package/dist/core/group/config-parser.js +0 -5
  92. package/dist/core/group/cross-impact.d.ts +46 -1
  93. package/dist/core/group/cross-impact.js +220 -19
  94. package/dist/core/group/cross-trace.d.ts +32 -11
  95. package/dist/core/group/cross-trace.js +114 -20
  96. package/dist/core/group/extractors/http-patterns/java.js +278 -22
  97. package/dist/core/group/extractors/http-patterns/node.js +332 -216
  98. package/dist/core/group/extractors/http-patterns/types.d.ts +8 -0
  99. package/dist/core/group/extractors/http-route-extractor.d.ts +1 -0
  100. package/dist/core/group/extractors/http-route-extractor.js +122 -48
  101. package/dist/core/group/extractors/include-extractor.js +20 -2
  102. package/dist/core/group/extractors/manifest-extractor.d.ts +1 -1
  103. package/dist/core/group/extractors/manifest-extractor.js +7 -7
  104. package/dist/core/group/extractors/python-workspace-extractor.js +5 -2
  105. package/dist/core/group/group-lock.d.ts +31 -0
  106. package/dist/core/group/group-lock.js +166 -0
  107. package/dist/core/group/service.js +297 -16
  108. package/dist/core/group/storage.d.ts +3 -0
  109. package/dist/core/group/storage.js +7 -39
  110. package/dist/core/group/sync.d.ts +49 -3
  111. package/dist/core/group/sync.js +0 -0
  112. package/dist/core/group/types.d.ts +183 -8
  113. package/dist/core/group/types.js +28 -1
  114. package/dist/core/incremental/subgraph-extract.d.ts +9 -6
  115. package/dist/core/incremental/subgraph-extract.js +33 -10
  116. package/dist/core/index-freshness.d.ts +77 -2
  117. package/dist/core/index-freshness.js +109 -2
  118. package/dist/core/ingestion/call-processor.d.ts +13 -1
  119. package/dist/core/ingestion/call-processor.js +110 -3
  120. package/dist/core/ingestion/cfg/callee-cell-format.d.ts +42 -0
  121. package/dist/core/ingestion/cfg/callee-cell-format.js +42 -0
  122. package/dist/core/ingestion/cfg/emit.d.ts +8 -23
  123. package/dist/core/ingestion/cfg/emit.js +9 -23
  124. package/dist/core/ingestion/class-extractors/configs/go.js +10 -5
  125. package/dist/core/ingestion/cluster-enricher.js +8 -4
  126. package/dist/core/ingestion/community-processor.d.ts +21 -3
  127. package/dist/core/ingestion/community-processor.js +81 -82
  128. package/dist/core/ingestion/di-extractors/index.d.ts +9 -33
  129. package/dist/core/ingestion/di-extractors/spring.d.ts +1 -1
  130. package/dist/core/ingestion/di-extractors/spring.js +8 -1
  131. package/dist/core/ingestion/di-extractors/types.d.ts +60 -0
  132. package/dist/core/ingestion/di-extractors/types.js +15 -0
  133. package/dist/core/ingestion/filesystem-walker.js +30 -14
  134. package/dist/core/ingestion/finalize-orchestrator.js +1 -0
  135. package/dist/core/ingestion/frameworks/spring/analysis-features.d.ts +6 -0
  136. package/dist/core/ingestion/frameworks/spring/analysis-features.js +35 -1
  137. package/dist/core/ingestion/frameworks/spring/annotation-arguments.d.ts +13 -0
  138. package/dist/core/ingestion/frameworks/spring/annotation-arguments.js +227 -0
  139. package/dist/core/ingestion/frameworks/spring/aop-candidates.d.ts +15 -0
  140. package/dist/core/ingestion/frameworks/spring/aop-candidates.js +85 -0
  141. package/dist/core/ingestion/frameworks/spring/aop.d.ts +118 -0
  142. package/dist/core/ingestion/frameworks/spring/aop.js +476 -0
  143. package/dist/core/ingestion/frameworks/spring/auto-configuration.d.ts +8 -0
  144. package/dist/core/ingestion/frameworks/spring/auto-configuration.js +16 -0
  145. package/dist/core/ingestion/frameworks/spring/bean-catalog.js +1 -0
  146. package/dist/core/ingestion/frameworks/spring/bean-factories.d.ts +33 -0
  147. package/dist/core/ingestion/frameworks/spring/bean-factories.js +65 -0
  148. package/dist/core/ingestion/frameworks/spring/conditionals.d.ts +25 -0
  149. package/dist/core/ingestion/frameworks/spring/conditionals.js +319 -0
  150. package/dist/core/ingestion/frameworks/spring/di-metadata.d.ts +3 -0
  151. package/dist/core/ingestion/frameworks/spring/di-metadata.js +162 -13
  152. package/dist/core/ingestion/frameworks/spring/non-http-handlers.d.ts +28 -0
  153. package/dist/core/ingestion/frameworks/spring/non-http-handlers.js +152 -0
  154. package/dist/core/ingestion/frameworks/spring/resource-injection.d.ts +5 -0
  155. package/dist/core/ingestion/frameworks/spring/resource-injection.js +91 -0
  156. package/dist/core/ingestion/import-resolvers/configs/csharp.js +5 -1
  157. package/dist/core/ingestion/import-resolvers/configs/swift.js +13 -0
  158. package/dist/core/ingestion/import-resolvers/csharp.d.ts +9 -1
  159. package/dist/core/ingestion/import-resolvers/csharp.js +234 -27
  160. package/dist/core/ingestion/import-resolvers/go.d.ts +11 -1
  161. package/dist/core/ingestion/import-resolvers/go.js +44 -17
  162. package/dist/core/ingestion/import-resolvers/jvm.d.ts +2 -2
  163. package/dist/core/ingestion/import-resolvers/node-workspace-packages.d.ts +90 -0
  164. package/dist/core/ingestion/import-resolvers/node-workspace-packages.js +429 -0
  165. package/dist/core/ingestion/import-resolvers/package-dir-index.d.ts +124 -0
  166. package/dist/core/ingestion/import-resolvers/package-dir-index.js +223 -0
  167. package/dist/core/ingestion/import-resolvers/pass-cache.d.ts +50 -0
  168. package/dist/core/ingestion/import-resolvers/pass-cache.js +60 -0
  169. package/dist/core/ingestion/import-resolvers/per-file-set.d.ts +71 -0
  170. package/dist/core/ingestion/import-resolvers/per-file-set.js +11 -0
  171. package/dist/core/ingestion/import-resolvers/php.d.ts +1 -1
  172. package/dist/core/ingestion/import-resolvers/php.js +65 -19
  173. package/dist/core/ingestion/import-resolvers/python-file-index.d.ts +201 -0
  174. package/dist/core/ingestion/import-resolvers/python-file-index.js +302 -0
  175. package/dist/core/ingestion/import-resolvers/python.js +25 -6
  176. package/dist/core/ingestion/import-resolvers/ruby.d.ts +1 -1
  177. package/dist/core/ingestion/import-resolvers/rust.d.ts +2 -2
  178. package/dist/core/ingestion/import-resolvers/standard.d.ts +1 -1
  179. package/dist/core/ingestion/import-resolvers/types.d.ts +1 -12
  180. package/dist/core/ingestion/import-resolvers/utils.d.ts +65 -6
  181. package/dist/core/ingestion/import-resolvers/utils.js +215 -36
  182. package/dist/core/ingestion/import-resolvers/workspace-file-index.d.ts +72 -0
  183. package/dist/core/ingestion/import-resolvers/workspace-file-index.js +58 -0
  184. package/dist/core/ingestion/language-config.d.ts +29 -1
  185. package/dist/core/ingestion/language-config.js +110 -35
  186. package/dist/core/ingestion/language-provider.d.ts +209 -7
  187. package/dist/core/ingestion/language-provider.js +37 -0
  188. package/dist/core/ingestion/languages/c/captures.js +7 -0
  189. package/dist/core/ingestion/languages/c/import-target.js +12 -16
  190. package/dist/core/ingestion/languages/c/scope-resolver.js +20 -19
  191. package/dist/core/ingestion/languages/c/static-linkage.js +12 -16
  192. package/dist/core/ingestion/languages/c-cpp.js +13 -0
  193. package/dist/core/ingestion/languages/cobol/scope-resolver.js +27 -20
  194. package/dist/core/ingestion/languages/cobol.js +13 -0
  195. package/dist/core/ingestion/languages/cpp/adl.d.ts +2 -2
  196. package/dist/core/ingestion/languages/cpp/adl.js +67 -44
  197. package/dist/core/ingestion/languages/cpp/captures.js +14 -2
  198. package/dist/core/ingestion/languages/cpp/file-local-linkage.js +11 -15
  199. package/dist/core/ingestion/languages/cpp/inline-namespaces.d.ts +28 -8
  200. package/dist/core/ingestion/languages/cpp/inline-namespaces.js +242 -68
  201. package/dist/core/ingestion/languages/cpp/interpret.d.ts +2 -0
  202. package/dist/core/ingestion/languages/cpp/interpret.js +126 -6
  203. package/dist/core/ingestion/languages/cpp/query.js +106 -0
  204. package/dist/core/ingestion/languages/cpp/scope-resolver.js +48 -20
  205. package/dist/core/ingestion/languages/csharp/accessor-unwrap.d.ts +2 -15
  206. package/dist/core/ingestion/languages/csharp/accessor-unwrap.js +18 -10
  207. package/dist/core/ingestion/languages/csharp/captures.js +19 -0
  208. package/dist/core/ingestion/languages/csharp/import-target.js +46 -72
  209. package/dist/core/ingestion/languages/csharp/namespace-siblings.js +5 -1
  210. package/dist/core/ingestion/languages/csharp/query.js +25 -5
  211. package/dist/core/ingestion/languages/csharp/scope-resolver.js +75 -2
  212. package/dist/core/ingestion/languages/dart/captures.d.ts +10 -0
  213. package/dist/core/ingestion/languages/dart/captures.js +598 -16
  214. package/dist/core/ingestion/languages/dart/import-target.js +32 -9
  215. package/dist/core/ingestion/languages/dart/index.d.ts +1 -1
  216. package/dist/core/ingestion/languages/dart/index.js +1 -1
  217. package/dist/core/ingestion/languages/dart/query.js +98 -1
  218. package/dist/core/ingestion/languages/dart/scope-resolver.js +14 -3
  219. package/dist/core/ingestion/languages/dart/simple-hooks.js +9 -0
  220. package/dist/core/ingestion/languages/dart.js +6 -1
  221. package/dist/core/ingestion/languages/go/captures.js +108 -3
  222. package/dist/core/ingestion/languages/go/generic-type-parameters.d.ts +31 -0
  223. package/dist/core/ingestion/languages/go/generic-type-parameters.js +140 -0
  224. package/dist/core/ingestion/languages/go/import-target.d.ts +3 -10
  225. package/dist/core/ingestion/languages/go/import-target.js +34 -30
  226. package/dist/core/ingestion/languages/go/index.d.ts +1 -1
  227. package/dist/core/ingestion/languages/go/interface-impls.d.ts +9 -1
  228. package/dist/core/ingestion/languages/go/interface-impls.js +693 -87
  229. package/dist/core/ingestion/languages/go/interpret.d.ts +2 -0
  230. package/dist/core/ingestion/languages/go/interpret.js +22 -8
  231. package/dist/core/ingestion/languages/go/method-owners.js +31 -12
  232. package/dist/core/ingestion/languages/go/package-clause.d.ts +46 -0
  233. package/dist/core/ingestion/languages/go/package-clause.js +75 -0
  234. package/dist/core/ingestion/languages/go/package-siblings.js +7 -11
  235. package/dist/core/ingestion/languages/go/query.js +56 -3
  236. package/dist/core/ingestion/languages/go/scope-resolver.js +39 -0
  237. package/dist/core/ingestion/languages/go.js +9 -0
  238. package/dist/core/ingestion/languages/java/analysis-features.d.ts +4 -0
  239. package/dist/core/ingestion/languages/java/analysis-features.js +12 -0
  240. package/dist/core/ingestion/languages/java/capture-side-channel.d.ts +12 -0
  241. package/dist/core/ingestion/languages/java/capture-side-channel.js +48 -0
  242. package/dist/core/ingestion/languages/java/captures.js +77 -32
  243. package/dist/core/ingestion/languages/java/import-target.d.ts +49 -9
  244. package/dist/core/ingestion/languages/java/import-target.js +68 -88
  245. package/dist/core/ingestion/languages/java/interpret.js +3 -2
  246. package/dist/core/ingestion/languages/java/module-resolution.d.ts +62 -0
  247. package/dist/core/ingestion/languages/java/module-resolution.js +142 -0
  248. package/dist/core/ingestion/languages/java/query.js +15 -3
  249. package/dist/core/ingestion/languages/java/record-components.d.ts +14 -0
  250. package/dist/core/ingestion/languages/java/record-components.js +185 -0
  251. package/dist/core/ingestion/languages/java/scope-resolver.js +10 -2
  252. package/dist/core/ingestion/languages/java/spring-aop.d.ts +12 -0
  253. package/dist/core/ingestion/languages/java/spring-aop.js +49 -0
  254. package/dist/core/ingestion/languages/java/spring-conditionals.d.ts +11 -0
  255. package/dist/core/ingestion/languages/java/spring-conditionals.js +48 -0
  256. package/dist/core/ingestion/languages/java/spring-di.d.ts +4 -1
  257. package/dist/core/ingestion/languages/java/spring-di.js +41 -9
  258. package/dist/core/ingestion/languages/java/spring-non-http-handlers.d.ts +7 -0
  259. package/dist/core/ingestion/languages/java/spring-non-http-handlers.js +32 -0
  260. package/dist/core/ingestion/languages/java.js +94 -3
  261. package/dist/core/ingestion/languages/javascript/captures.d.ts +6 -1
  262. package/dist/core/ingestion/languages/javascript/captures.js +262 -4
  263. package/dist/core/ingestion/languages/javascript/import-target.d.ts +17 -21
  264. package/dist/core/ingestion/languages/javascript/import-target.js +24 -41
  265. package/dist/core/ingestion/languages/javascript/index.d.ts +54 -5
  266. package/dist/core/ingestion/languages/javascript/index.js +54 -5
  267. package/dist/core/ingestion/languages/javascript/query.d.ts +1 -0
  268. package/dist/core/ingestion/languages/javascript/query.js +211 -5
  269. package/dist/core/ingestion/languages/javascript/scope-resolver.js +12 -0
  270. package/dist/core/ingestion/languages/javascript/simple-hooks.js +2 -1
  271. package/dist/core/ingestion/languages/jvm/package-siblings.js +77 -9
  272. package/dist/core/ingestion/languages/kotlin/capture-side-channel.d.ts +15 -0
  273. package/dist/core/ingestion/languages/kotlin/capture-side-channel.js +48 -0
  274. package/dist/core/ingestion/languages/kotlin/captures.js +43 -1
  275. package/dist/core/ingestion/languages/kotlin/import-target.d.ts +8 -1
  276. package/dist/core/ingestion/languages/kotlin/import-target.js +20 -123
  277. package/dist/core/ingestion/languages/kotlin/index.d.ts +1 -0
  278. package/dist/core/ingestion/languages/kotlin/index.js +1 -0
  279. package/dist/core/ingestion/languages/kotlin/module-resolution.d.ts +22 -0
  280. package/dist/core/ingestion/languages/kotlin/module-resolution.js +108 -0
  281. package/dist/core/ingestion/languages/kotlin/query.js +28 -2
  282. package/dist/core/ingestion/languages/kotlin/scope-resolver.js +23 -2
  283. package/dist/core/ingestion/languages/kotlin/spring-aop.d.ts +12 -0
  284. package/dist/core/ingestion/languages/kotlin/spring-aop.js +64 -0
  285. package/dist/core/ingestion/languages/kotlin/spring-conditionals.d.ts +12 -0
  286. package/dist/core/ingestion/languages/kotlin/spring-conditionals.js +49 -0
  287. package/dist/core/ingestion/languages/kotlin/spring-di.d.ts +2 -0
  288. package/dist/core/ingestion/languages/kotlin/spring-di.js +60 -11
  289. package/dist/core/ingestion/languages/kotlin/spring-non-http-handlers.d.ts +10 -0
  290. package/dist/core/ingestion/languages/kotlin/spring-non-http-handlers.js +41 -0
  291. package/dist/core/ingestion/languages/php/captures.d.ts +5 -0
  292. package/dist/core/ingestion/languages/php/captures.js +319 -51
  293. package/dist/core/ingestion/languages/php/import-target.d.ts +3 -4
  294. package/dist/core/ingestion/languages/php/import-target.js +192 -62
  295. package/dist/core/ingestion/languages/php/query.js +31 -0
  296. package/dist/core/ingestion/languages/python/arity-metadata.d.ts +1 -0
  297. package/dist/core/ingestion/languages/python/arity-metadata.js +1 -0
  298. package/dist/core/ingestion/languages/python/captures.js +29 -0
  299. package/dist/core/ingestion/languages/python/import-decomposer.js +22 -1
  300. package/dist/core/ingestion/languages/python/import-target.d.ts +42 -1
  301. package/dist/core/ingestion/languages/python/import-target.js +277 -91
  302. package/dist/core/ingestion/languages/python/index.d.ts +1 -1
  303. package/dist/core/ingestion/languages/python/index.js +1 -1
  304. package/dist/core/ingestion/languages/python/interpret.d.ts +52 -0
  305. package/dist/core/ingestion/languages/python/interpret.js +249 -7
  306. package/dist/core/ingestion/languages/python/query.js +9 -0
  307. package/dist/core/ingestion/languages/python/receiver-binding.d.ts +8 -6
  308. package/dist/core/ingestion/languages/python/receiver-binding.js +108 -12
  309. package/dist/core/ingestion/languages/python/scope-resolver.js +27 -4
  310. package/dist/core/ingestion/languages/python/simple-hooks.js +2 -8
  311. package/dist/core/ingestion/languages/python.js +13 -0
  312. package/dist/core/ingestion/languages/ruby/captures.js +158 -0
  313. package/dist/core/ingestion/languages/ruby/import-target.js +7 -5
  314. package/dist/core/ingestion/languages/ruby/query.js +93 -0
  315. package/dist/core/ingestion/languages/ruby/scope-resolver.js +2 -0
  316. package/dist/core/ingestion/languages/ruby/simple-hooks.d.ts +1 -1
  317. package/dist/core/ingestion/languages/ruby/simple-hooks.js +22 -1
  318. package/dist/core/ingestion/languages/rust/captures.js +39 -1
  319. package/dist/core/ingestion/languages/rust/method-owners.js +11 -1
  320. package/dist/core/ingestion/languages/rust/module-path.d.ts +126 -0
  321. package/dist/core/ingestion/languages/rust/module-path.js +214 -0
  322. package/dist/core/ingestion/languages/rust/qualified-call.d.ts +41 -0
  323. package/dist/core/ingestion/languages/rust/qualified-call.js +481 -0
  324. package/dist/core/ingestion/languages/rust/query.js +39 -6
  325. package/dist/core/ingestion/languages/rust/scope-resolver.js +21 -2
  326. package/dist/core/ingestion/languages/rust.js +17 -0
  327. package/dist/core/ingestion/languages/swift/captures.js +87 -3
  328. package/dist/core/ingestion/languages/swift/conditional-directive-preprocess.d.ts +48 -0
  329. package/dist/core/ingestion/languages/swift/conditional-directive-preprocess.js +253 -0
  330. package/dist/core/ingestion/languages/swift/import-target.js +4 -9
  331. package/dist/core/ingestion/languages/swift/query.js +17 -0
  332. package/dist/core/ingestion/languages/swift/receiver-binding.d.ts +8 -0
  333. package/dist/core/ingestion/languages/swift/receiver-binding.js +6 -2
  334. package/dist/core/ingestion/languages/swift.js +2 -0
  335. package/dist/core/ingestion/languages/typescript/captures.d.ts +90 -1
  336. package/dist/core/ingestion/languages/typescript/captures.js +267 -5
  337. package/dist/core/ingestion/languages/typescript/cjs-export-assignment.d.ts +134 -0
  338. package/dist/core/ingestion/languages/typescript/cjs-export-assignment.js +523 -0
  339. package/dist/core/ingestion/languages/typescript/cjs-module-exports.d.ts +54 -0
  340. package/dist/core/ingestion/languages/typescript/cjs-module-exports.js +191 -0
  341. package/dist/core/ingestion/languages/typescript/convex-endpoint-metadata.d.ts +7 -0
  342. package/dist/core/ingestion/languages/typescript/convex-endpoint-metadata.js +92 -0
  343. package/dist/core/ingestion/languages/typescript/file-candidates.d.ts +29 -0
  344. package/dist/core/ingestion/languages/typescript/file-candidates.js +70 -0
  345. package/dist/core/ingestion/languages/typescript/import-decomposer.d.ts +28 -1
  346. package/dist/core/ingestion/languages/typescript/import-decomposer.js +125 -10
  347. package/dist/core/ingestion/languages/typescript/import-target.d.ts +25 -37
  348. package/dist/core/ingestion/languages/typescript/import-target.js +24 -26
  349. package/dist/core/ingestion/languages/typescript/interpret.d.ts +21 -1
  350. package/dist/core/ingestion/languages/typescript/interpret.js +45 -5
  351. package/dist/core/ingestion/languages/typescript/module-resolution.d.ts +48 -0
  352. package/dist/core/ingestion/languages/typescript/module-resolution.js +171 -0
  353. package/dist/core/ingestion/languages/typescript/query.d.ts +1 -0
  354. package/dist/core/ingestion/languages/typescript/query.js +303 -14
  355. package/dist/core/ingestion/languages/typescript/receiver-binding.d.ts +17 -0
  356. package/dist/core/ingestion/languages/typescript/receiver-binding.js +27 -0
  357. package/dist/core/ingestion/languages/typescript/scope-resolver.js +27 -40
  358. package/dist/core/ingestion/languages/typescript/simple-hooks.d.ts +0 -10
  359. package/dist/core/ingestion/languages/typescript/simple-hooks.js +22 -22
  360. package/dist/core/ingestion/languages/typescript/tsconfig.d.ts +59 -0
  361. package/dist/core/ingestion/languages/typescript/tsconfig.js +292 -0
  362. package/dist/core/ingestion/languages/typescript.js +93 -2
  363. package/dist/core/ingestion/languages/vue/import-target.d.ts +6 -22
  364. package/dist/core/ingestion/languages/vue/import-target.js +11 -47
  365. package/dist/core/ingestion/languages/vue/scope-resolver.js +4 -2
  366. package/dist/core/ingestion/local-symbol-pruner.js +11 -11
  367. package/dist/core/ingestion/method-extractors/configs/csharp.js +1 -0
  368. package/dist/core/ingestion/method-extractors/generic.js +1 -0
  369. package/dist/core/ingestion/method-types.d.ts +16 -0
  370. package/dist/core/ingestion/pipeline-phases/di.d.ts +1 -1
  371. package/dist/core/ingestion/pipeline-phases/di.js +136 -21
  372. package/dist/core/ingestion/pipeline-phases/index.d.ts +2 -0
  373. package/dist/core/ingestion/pipeline-phases/index.js +2 -0
  374. package/dist/core/ingestion/pipeline-phases/parse-impl.d.ts +15 -0
  375. package/dist/core/ingestion/pipeline-phases/parse-impl.js +154 -4
  376. package/dist/core/ingestion/pipeline-phases/parse.js +5 -0
  377. package/dist/core/ingestion/pipeline-phases/processes.d.ts +3 -2
  378. package/dist/core/ingestion/pipeline-phases/processes.js +91 -6
  379. package/dist/core/ingestion/pipeline-phases/routes.js +116 -25
  380. package/dist/core/ingestion/pipeline-phases/spring-aop.d.ts +34 -0
  381. package/dist/core/ingestion/pipeline-phases/spring-aop.js +439 -0
  382. package/dist/core/ingestion/pipeline-phases/spring-auto-configuration.d.ts +34 -0
  383. package/dist/core/ingestion/pipeline-phases/spring-auto-configuration.js +255 -0
  384. package/dist/core/ingestion/pipeline-phases/types.d.ts +7 -0
  385. package/dist/core/ingestion/pipeline.d.ts +26 -2
  386. package/dist/core/ingestion/pipeline.js +60 -11
  387. package/dist/core/ingestion/process-processor.d.ts +109 -2
  388. package/dist/core/ingestion/process-processor.js +464 -52
  389. package/dist/core/ingestion/resolve-references.d.ts +6 -1
  390. package/dist/core/ingestion/resolve-references.js +66 -6
  391. package/dist/core/ingestion/route-extractors/constant-resolver.d.ts +8 -2
  392. package/dist/core/ingestion/route-extractors/constant-resolver.js +11 -7
  393. package/dist/core/ingestion/route-extractors/data-route-table.d.ts +40 -0
  394. package/dist/core/ingestion/route-extractors/data-route-table.js +876 -0
  395. package/dist/core/ingestion/route-extractors/dispatch-guard.d.ts +96 -0
  396. package/dist/core/ingestion/route-extractors/dispatch-guard.js +1184 -0
  397. package/dist/core/ingestion/route-extractors/java-const-resolver.d.ts +114 -0
  398. package/dist/core/ingestion/route-extractors/java-const-resolver.js +569 -0
  399. package/dist/core/ingestion/route-extractors/js-const-resolver.d.ts +192 -0
  400. package/dist/core/ingestion/route-extractors/js-const-resolver.js +1033 -0
  401. package/dist/core/ingestion/route-extractors/nest.d.ts +53 -0
  402. package/dist/core/ingestion/route-extractors/nest.js +523 -0
  403. package/dist/core/ingestion/route-extractors/spring-shared.d.ts +11 -0
  404. package/dist/core/ingestion/route-extractors/spring-shared.js +89 -0
  405. package/dist/core/ingestion/route-extractors/spring.js +214 -29
  406. package/dist/core/ingestion/scope-extractor-bridge.js +9 -1
  407. package/dist/core/ingestion/scope-extractor.d.ts +22 -7
  408. package/dist/core/ingestion/scope-extractor.js +309 -15
  409. package/dist/core/ingestion/scope-resolution/contract/scope-resolver.d.ts +311 -21
  410. package/dist/core/ingestion/scope-resolution/contract/scope-resolver.js +16 -5
  411. package/dist/core/ingestion/scope-resolution/graph-bridge/edges.d.ts +12 -0
  412. package/dist/core/ingestion/scope-resolution/graph-bridge/edges.js +47 -0
  413. package/dist/core/ingestion/scope-resolution/graph-bridge/ids.d.ts +20 -15
  414. package/dist/core/ingestion/scope-resolution/graph-bridge/ids.js +280 -42
  415. package/dist/core/ingestion/scope-resolution/graph-bridge/imports-to-edges.d.ts +123 -0
  416. package/dist/core/ingestion/scope-resolution/graph-bridge/imports-to-edges.js +171 -17
  417. package/dist/core/ingestion/scope-resolution/graph-bridge/node-lookup.d.ts +58 -1
  418. package/dist/core/ingestion/scope-resolution/graph-bridge/node-lookup.js +137 -34
  419. package/dist/core/ingestion/scope-resolution/graph-bridge/references-to-edges.d.ts +30 -1
  420. package/dist/core/ingestion/scope-resolution/graph-bridge/references-to-edges.js +39 -1
  421. package/dist/core/ingestion/scope-resolution/passes/callable-value-flow.d.ts +18 -1
  422. package/dist/core/ingestion/scope-resolution/passes/callable-value-flow.js +113 -18
  423. package/dist/core/ingestion/scope-resolution/passes/compound-receiver.d.ts +107 -5
  424. package/dist/core/ingestion/scope-resolution/passes/compound-receiver.js +590 -33
  425. package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.d.ts +3 -0
  426. package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.js +101 -41
  427. package/dist/core/ingestion/scope-resolution/passes/imported-value-refs.d.ts +34 -0
  428. package/dist/core/ingestion/scope-resolution/passes/imported-value-refs.js +62 -0
  429. package/dist/core/ingestion/scope-resolution/passes/property-dispatch.d.ts +5 -1
  430. package/dist/core/ingestion/scope-resolution/passes/property-dispatch.js +8 -1
  431. package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.d.ts +105 -5
  432. package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.js +931 -92
  433. package/dist/core/ingestion/scope-resolution/passes/return-shape-members.d.ts +58 -0
  434. package/dist/core/ingestion/scope-resolution/passes/return-shape-members.js +458 -0
  435. package/dist/core/ingestion/scope-resolution/passes/unique-name-properties.d.ts +180 -0
  436. package/dist/core/ingestion/scope-resolution/passes/unique-name-properties.js +418 -0
  437. package/dist/core/ingestion/scope-resolution/pipeline/phase.d.ts +29 -0
  438. package/dist/core/ingestion/scope-resolution/pipeline/phase.js +57 -0
  439. package/dist/core/ingestion/scope-resolution/pipeline/run.d.ts +55 -1
  440. package/dist/core/ingestion/scope-resolution/pipeline/run.js +241 -19
  441. package/dist/core/ingestion/scope-resolution/resolution-outcome.d.ts +112 -2
  442. package/dist/core/ingestion/scope-resolution/resolution-outcome.js +38 -1
  443. package/dist/core/ingestion/scope-resolution/scope/namespace-targets.d.ts +25 -3
  444. package/dist/core/ingestion/scope-resolution/scope/namespace-targets.js +36 -16
  445. package/dist/core/ingestion/scope-resolution/scope/walkers.d.ts +210 -9
  446. package/dist/core/ingestion/scope-resolution/scope/walkers.js +905 -22
  447. package/dist/core/ingestion/scope-resolution/summary-maps.d.ts +28 -0
  448. package/dist/core/ingestion/scope-resolution/summary-maps.js +50 -0
  449. package/dist/core/ingestion/scope-resolution/undecided-satisfaction.d.ts +55 -0
  450. package/dist/core/ingestion/scope-resolution/undecided-satisfaction.js +37 -0
  451. package/dist/core/ingestion/scope-resolution/unresolved-receivers.d.ts +109 -0
  452. package/dist/core/ingestion/scope-resolution/unresolved-receivers.js +204 -0
  453. package/dist/core/ingestion/scope-resolution/utils/definition-id.d.ts +13 -0
  454. package/dist/core/ingestion/scope-resolution/utils/definition-id.js +19 -0
  455. package/dist/core/ingestion/scope-resolution/utils/generic-instantiation.d.ts +171 -0
  456. package/dist/core/ingestion/scope-resolution/utils/generic-instantiation.js +218 -0
  457. package/dist/core/ingestion/scope-resolution/workspace-index-types.d.ts +34 -0
  458. package/dist/core/ingestion/scope-resolution/workspace-index-types.js +15 -0
  459. package/dist/core/ingestion/scope-resolution/workspace-index.d.ts +7 -20
  460. package/dist/core/ingestion/tree-sitter-queries.d.ts +11 -11
  461. package/dist/core/ingestion/tree-sitter-queries.js +678 -4
  462. package/dist/core/ingestion/type-env.js +11 -7
  463. package/dist/core/ingestion/type-extractors/shared.d.ts +17 -0
  464. package/dist/core/ingestion/type-extractors/shared.js +16 -0
  465. package/dist/core/ingestion/type-extractors/types.d.ts +12 -0
  466. package/dist/core/ingestion/type-extractors/typescript.d.ts +20 -0
  467. package/dist/core/ingestion/type-extractors/typescript.js +26 -0
  468. package/dist/core/ingestion/utils/ast-helpers.d.ts +297 -15
  469. package/dist/core/ingestion/utils/ast-helpers.js +578 -46
  470. package/dist/core/ingestion/utils/call-analysis.d.ts +27 -22
  471. package/dist/core/ingestion/utils/call-analysis.js +202 -7
  472. package/dist/core/ingestion/utils/callable-flow-captures.d.ts +59 -0
  473. package/dist/core/ingestion/utils/callable-flow-captures.js +51 -1
  474. package/dist/core/ingestion/utils/callable-labels.d.ts +25 -0
  475. package/dist/core/ingestion/utils/callable-labels.js +31 -0
  476. package/dist/core/ingestion/utils/effective-ram.d.ts +40 -0
  477. package/dist/core/ingestion/utils/effective-ram.js +58 -0
  478. package/dist/core/ingestion/utils/line-base.d.ts +14 -0
  479. package/dist/core/ingestion/utils/line-base.js +14 -0
  480. package/dist/core/ingestion/utils/method-props.d.ts +27 -4
  481. package/dist/core/ingestion/utils/method-props.js +29 -4
  482. package/dist/core/ingestion/utils/receiver-chain-captures.d.ts +31 -0
  483. package/dist/core/ingestion/utils/receiver-chain-captures.js +57 -0
  484. package/dist/core/ingestion/utils/receiver-chain-codec.d.ts +89 -0
  485. package/dist/core/ingestion/utils/receiver-chain-codec.js +182 -0
  486. package/dist/core/ingestion/utils/scope-tree-walk.d.ts +22 -0
  487. package/dist/core/ingestion/utils/scope-tree-walk.js +33 -0
  488. package/dist/core/ingestion/utils/template-arguments.d.ts +96 -0
  489. package/dist/core/ingestion/utils/template-arguments.js +196 -0
  490. package/dist/core/ingestion/utils/type-parameters.d.ts +49 -0
  491. package/dist/core/ingestion/utils/type-parameters.js +206 -0
  492. package/dist/core/ingestion/workers/callable-id.d.ts +80 -0
  493. package/dist/core/ingestion/workers/callable-id.js +125 -0
  494. package/dist/core/ingestion/workers/parse-worker.d.ts +14 -1
  495. package/dist/core/ingestion/workers/parse-worker.js +493 -54
  496. package/dist/core/ingestion/workers/worker-pool.d.ts +20 -27
  497. package/dist/core/ingestion/workers/worker-pool.js +91 -3
  498. package/dist/core/lbug/csv-generator.d.ts +27 -0
  499. package/dist/core/lbug/csv-generator.js +72 -17
  500. package/dist/core/lbug/extension-load-error.js +13 -2
  501. package/dist/core/lbug/extension-loader.d.ts +29 -0
  502. package/dist/core/lbug/extension-loader.js +31 -6
  503. package/dist/core/lbug/graph-emit-sink.d.ts +264 -0
  504. package/dist/core/lbug/graph-emit-sink.js +581 -0
  505. package/dist/core/lbug/lbug-adapter.d.ts +290 -11
  506. package/dist/core/lbug/lbug-adapter.js +652 -69
  507. package/dist/core/lbug/native-check.d.ts +21 -0
  508. package/dist/core/lbug/native-check.js +248 -32
  509. package/dist/core/lbug/pdg-emit-sink.d.ts +13 -4
  510. package/dist/core/lbug/pdg-emit-sink.js +21 -111
  511. package/dist/core/lbug/pool-adapter.d.ts +9 -0
  512. package/dist/core/lbug/pool-adapter.js +164 -14
  513. package/dist/core/lbug/query-batch.d.ts +75 -0
  514. package/dist/core/lbug/query-batch.js +102 -0
  515. package/dist/core/lbug/rel-pair-routing.d.ts +160 -2
  516. package/dist/core/lbug/rel-pair-routing.js +228 -10
  517. package/dist/core/lbug/schema.d.ts +163 -4
  518. package/dist/core/lbug/schema.js +404 -159
  519. package/dist/core/lbug/sync-csv-writer.d.ts +47 -0
  520. package/dist/core/lbug/sync-csv-writer.js +108 -0
  521. package/dist/core/run-analyze.d.ts +147 -0
  522. package/dist/core/run-analyze.js +1215 -179
  523. package/dist/core/search/bm25-index.d.ts +11 -0
  524. package/dist/core/search/bm25-index.js +60 -26
  525. package/dist/core/search/fts-indexes.d.ts +150 -9
  526. package/dist/core/search/fts-indexes.js +241 -23
  527. package/dist/core/wiki/graph-queries.js +145 -112
  528. package/dist/core/wiki/llm-client.d.ts +29 -3
  529. package/dist/core/wiki/llm-client.js +47 -12
  530. package/dist/core/wiki/prompts.d.ts +19 -0
  531. package/dist/core/wiki/prompts.js +20 -1
  532. package/dist/lib/utils.d.ts +113 -0
  533. package/dist/lib/utils.js +185 -0
  534. package/dist/mcp/local/aop-metadata.d.ts +77 -0
  535. package/dist/mcp/local/aop-metadata.js +227 -0
  536. package/dist/mcp/local/bean-metadata.d.ts +2 -1
  537. package/dist/mcp/local/bean-metadata.js +22 -1
  538. package/dist/mcp/local/convex-metadata.d.ts +8 -0
  539. package/dist/mcp/local/convex-metadata.js +45 -0
  540. package/dist/mcp/local/local-backend.d.ts +174 -11
  541. package/dist/mcp/local/local-backend.js +1678 -331
  542. package/dist/mcp/local/path-predicate.d.ts +19 -0
  543. package/dist/mcp/local/path-predicate.js +21 -0
  544. package/dist/mcp/local/pdg-impact.d.ts +132 -10
  545. package/dist/mcp/local/pdg-impact.js +391 -98
  546. package/dist/mcp/repository-policy.d.ts +1 -0
  547. package/dist/mcp/repository-policy.js +5 -0
  548. package/dist/mcp/resources.js +26 -4
  549. package/dist/mcp/server.js +23 -13
  550. package/dist/mcp/tools.d.ts +8 -0
  551. package/dist/mcp/tools.js +76 -23
  552. package/dist/server/analyze-job.d.ts +37 -2
  553. package/dist/server/analyze-job.js +13 -2
  554. package/dist/server/analyze-launch.d.ts +1 -1
  555. package/dist/server/analyze-launch.js +79 -10
  556. package/dist/server/analyze-worker-core.d.ts +1 -1
  557. package/dist/server/analyze-worker-core.js +10 -1
  558. package/dist/server/analyze-worker-ipc.d.ts +1 -1
  559. package/dist/server/analyze-worker-ipc.js +4 -0
  560. package/dist/server/analyze-worker-protocol.d.ts +59 -0
  561. package/dist/server/analyze-worker-protocol.js +1 -0
  562. package/dist/server/analyze-worker.d.ts +1 -17
  563. package/dist/server/api.d.ts +2 -11
  564. package/dist/server/api.js +164 -163
  565. package/dist/server/embed-run-outcome.d.ts +89 -0
  566. package/dist/server/embed-run-outcome.js +88 -0
  567. package/dist/server/git-clone.js +6 -2
  568. package/dist/server/middleware.d.ts +116 -9
  569. package/dist/server/middleware.js +291 -22
  570. package/dist/server/sse-progress.d.ts +41 -0
  571. package/dist/server/sse-progress.js +125 -0
  572. package/dist/storage/branch-index.d.ts +11 -6
  573. package/dist/storage/branch-index.js +15 -7
  574. package/dist/storage/file-hash.js +2 -2
  575. package/dist/storage/fs-atomic.d.ts +25 -0
  576. package/dist/storage/fs-atomic.js +42 -0
  577. package/dist/storage/git.d.ts +131 -0
  578. package/dist/storage/git.js +236 -2
  579. package/dist/storage/index-lock.d.ts +102 -0
  580. package/dist/storage/index-lock.js +660 -0
  581. package/dist/storage/parse-cache.js +588 -6
  582. package/dist/storage/parsedfile-store.js +76 -6
  583. package/dist/storage/repo-manager.d.ts +54 -441
  584. package/dist/storage/repo-manager.js +312 -221
  585. package/dist/storage/repo-meta.d.ts +530 -0
  586. package/dist/storage/repo-meta.js +100 -0
  587. package/dist/types/pipeline.d.ts +37 -0
  588. package/hooks/antigravity/gitnexus-antigravity-hook.cjs +1 -1
  589. package/hooks/claude/gitnexus-hook.cjs +1 -1
  590. package/hooks/claude/resolve-analyze-cmd.cjs +80 -13
  591. package/package.json +11 -2
  592. package/scripts/cross-platform-shard.ts +153 -0
  593. package/scripts/cross-platform-tests.ts +122 -0
  594. package/scripts/run-cross-platform.ts +16 -5
  595. package/skills/gitnexus-cli.md +3 -3
  596. package/skills/gitnexus-debugging.md +37 -7
  597. package/skills/gitnexus-exploring.md +26 -4
  598. package/skills/gitnexus-impact-analysis.md +71 -10
  599. package/skills/gitnexus-plan/README.md +11 -6
  600. package/skills/gitnexus-plan/references/evidence-provenance.md +49 -12
  601. package/skills/gitnexus-plan/scripts/evidence-provenance.mjs +654 -372
  602. package/skills/gitnexus-refactoring.md +48 -5
  603. package/skills/gitnexus-review/SKILL.md +12 -6
  604. package/skills/gitnexus-review/ci-personas/ci-adversarial-lens.md +1 -1
  605. package/skills/gitnexus-review/ci-personas/ci-blast-radius-lens.md +1 -1
  606. package/skills/gitnexus-review/ci-personas/ci-correctness-lens.md +1 -1
  607. package/skills/gitnexus-review/ci-personas/ci-coverage-lens.md +1 -1
  608. package/skills/gitnexus-review/ci-personas/ci-critic-lens.md +1 -1
  609. package/skills/gitnexus-review/ci-personas/ci-security-lens.md +1 -1
  610. package/skills/gitnexus-taint-analysis.md +13 -7
  611. package/skills/gitnexus-work/SKILL.md +4 -1
  612. package/skills/gitnexus-work/references/evidence-provenance.md +49 -12
  613. package/skills/gitnexus-work/scripts/evidence-provenance.mjs +654 -372
  614. package/vendor/leiden/utils.cjs +28 -1
  615. package/web/assets/ProcessFlowModal-Badh2Pbg.js +24 -0
  616. package/web/assets/{__vite-browser-external-bMKyYQkO.js → __vite-browser-external-COxE8F0G.js} +1 -1
  617. package/web/assets/abnfDiagram-QNN2D4NM-Cq2djWWe.js +1 -0
  618. package/web/assets/agent-Dr4l5EOp.js +662 -0
  619. package/web/assets/architecture-TIHT7OUA-V6N4J3SY-fTePvLoe.js +1 -0
  620. package/web/assets/architectureDiagram-OT7VKSJ7-mKEXxkeF.js +36 -0
  621. package/web/assets/{blockDiagram-7IZFK4PR-DBefcjof.js → blockDiagram-54WLDVWM-Dg_hrRWE.js} +4 -4
  622. package/web/assets/{c4Diagram-Y2BXMSZH-EjWnjEJl.js → c4Diagram-X2LASM7V-CnhoT4aV.js} +2 -2
  623. package/web/assets/chunk-224SPVON-B8gxtXpy.js +1 -0
  624. package/web/assets/chunk-2AEHWXPW-CV4r6-1I.js +127 -0
  625. package/web/assets/chunk-2SREHG4O-Dip42xOq.js +1 -0
  626. package/web/assets/chunk-4RFN2BYJ-DHHWuC-n.js +1 -0
  627. package/web/assets/chunk-66DQ2XMT-CM0xjFAN.js +1 -0
  628. package/web/assets/chunk-6BELYETK-ChsYtfHW.js +1 -0
  629. package/web/assets/{chunk-LII3EMHJ-BL6lKJ_P.js → chunk-6L755F7B-CMhLBxi2.js} +1 -1
  630. package/web/assets/{chunk-QA3QBVWF-DVXPOIxe.js → chunk-7CWYLC5S-DRgGkkpF.js} +1 -1
  631. package/web/assets/{chunk-ZXARS5L4-C3v-4Fsw.js → chunk-A7VWPJGB-B4O3oQdQ.js} +1 -1
  632. package/web/assets/chunk-BI6VK774-D0oaWk8V.js +1 -0
  633. package/web/assets/chunk-D6VWDJW2-BxcBdZ9c.js +2 -0
  634. package/web/assets/chunk-DMV4VAQV-Bn6WXDSX.js +4 -0
  635. package/web/assets/chunk-E5QJAATJ-dh-5CtIV.js +2 -0
  636. package/web/assets/chunk-EQFTRU2I-1ix7TzW9.js +2 -0
  637. package/web/assets/chunk-FWYVLQTC-BgDItRzJ.js +1 -0
  638. package/web/assets/chunk-HNC4WDU7-DoU3KnA7.js +1 -0
  639. package/web/assets/chunk-L5GCOVLC-CE2w8Nm_.js +161 -0
  640. package/web/assets/chunk-LAHSG3N2-Bz4hcn0N.js +321 -0
  641. package/web/assets/chunk-LORZLZWG-B57uGw2N.js +88 -0
  642. package/web/assets/chunk-NLANEA3F-XpH_NPA5.js +62 -0
  643. package/web/assets/chunk-NV3KIAZN-5yvcpMiu.js +1 -0
  644. package/web/assets/chunk-OIYT25JQ-CQ6KOZGX.js +1 -0
  645. package/web/assets/chunk-PE7DX7ZZ-CCvRVj43.js +10 -0
  646. package/web/assets/chunk-Q67WD55A-BWCH2SVz.js +156 -0
  647. package/web/assets/chunk-RRFMTAIC-CMN0wcYA.js +1 -0
  648. package/web/assets/{chunk-RLI5ZMPA-CkXZ0y0U.js → chunk-SATU7PGQ-B1zhgOvc.js} +1 -1
  649. package/web/assets/chunk-STOV2HOB-GnExfzIX.js +1 -0
  650. package/web/assets/{chunk-INKRHTLW-Ckl3_KkO.js → chunk-SZD42YQK-ijyKKVr1.js} +21 -21
  651. package/web/assets/{chunk-LCXTWHL2-C162wE5z.js → chunk-TFPGFQPA-Dj6a-0pC.js} +3 -3
  652. package/web/assets/chunk-TGVD4F4B-BMc31Gj2.js +2 -0
  653. package/web/assets/chunk-TZUXEDM2-B7p9AcTw.js +1 -0
  654. package/web/assets/chunk-UAT7B5JY-DW-A_fpI.js +1 -0
  655. package/web/assets/{chunk-6764PJDD-C7xxk063.js → chunk-VE5CLXGZ-C1vB7wpY.js} +1 -1
  656. package/web/assets/{chunk-RG4AUYOV-ZNgyLFq6.js → chunk-VJFVEZTB-CX66F2ep.js} +3 -3
  657. package/web/assets/chunk-VY5UBI4V-yxPQAWxw.js +1 -0
  658. package/web/assets/chunk-WJBAP47W-BckNkuEN.js +1 -0
  659. package/web/assets/chunk-XNMVGMAZ-Cg_LnPtj.js +1 -0
  660. package/web/assets/classDiagram-VPOSVPXH-BjOiXA_C.js +1 -0
  661. package/web/assets/classDiagram-v2-5VFNUXQA-BjOiXA_C.js +1 -0
  662. package/web/assets/{cose-bilkent-UX7MHV2Q-BmnZ7Mvj.js → cose-bilkent-RZA4XIPR-BHpK4Crp.js} +1 -1
  663. package/web/assets/cynefin-VYW2F7L2-2VAHYKR6-DAsF6GZv.js +1 -0
  664. package/web/assets/cynefinDiagram-TR7LZUCG-C3Iar9lZ.js +62 -0
  665. package/web/assets/dagre-K64A6Z3X-CUwi79mA.js +4 -0
  666. package/web/assets/diagram-2TLGJV2N-C2F5Nfym.js +30 -0
  667. package/web/assets/diagram-JCD7PQ7C-DC5-9FRr.js +24 -0
  668. package/web/assets/{diagram-HNR7UZ2L-DVRltWbL.js → diagram-KFBZAVDW-Dfmf_4ti.js} +3 -3
  669. package/web/assets/diagram-L7DVE3PN-GIRyVUtt.js +41 -0
  670. package/web/assets/diagram-YP3FGXHI-CyNFYtkd.js +24 -0
  671. package/web/assets/ebnfDiagram-DRHRQJWO-D8_CI4ZF.js +1 -0
  672. package/web/assets/erDiagram-SZLJLQMB-CohQjznC.js +85 -0
  673. package/web/assets/error-D9MtuG9s.js +1 -0
  674. package/web/assets/eventmodeling-45OFAUF4-AOUJWSLX-BvTc6iQi.js +1 -0
  675. package/web/assets/flowDiagram-BWE6NHOH-B6RnEvD9.js +1 -0
  676. package/web/assets/ganttDiagram-2QTCJSNI-Cks_mEcF.js +292 -0
  677. package/web/assets/gitGraph-TEB2WS4Q-U5VWYIBC-Dy7CCSZ5.js +1 -0
  678. package/web/assets/gitGraphDiagram-VVZAVV5G-CG41cIVc.js +106 -0
  679. package/web/assets/{index-D7mTFcvQ.js → index-2zdvEdzg.js} +51 -51
  680. package/web/assets/index-CJDpyH-n.css +2 -0
  681. package/web/assets/info-DKCQHKI2-DX6KST54-BLJg1ikX.js +1 -0
  682. package/web/assets/infoDiagram-FY4PZKRE-BJ3vPVwW.js +2 -0
  683. package/web/assets/{ishikawaDiagram-BNXS4ZKH-XpjJRU9h.js → ishikawaDiagram-4JDSWWDM-DmqWtjkl.js} +2 -2
  684. package/web/assets/{journeyDiagram-M6C3CM3L-C6wjooas.js → journeyDiagram-QUS3FAKT-XAzVzrQW.js} +3 -3
  685. package/web/assets/{kanban-definition-75IXJCU3-5_UVY79g.js → kanban-definition-D4L7SQKK-YurRnmYn.js} +6 -6
  686. package/web/assets/katex-C5OPUE3Q-Bnbavtmu.js +257 -0
  687. package/web/assets/{mindmap-definition-2TDM6QVE-8xDLzk2e.js → mindmap-definition-66QP5TD6-ChrWWnil.js} +5 -5
  688. package/web/assets/node.browser-U-KyT5AW.js +1 -0
  689. package/web/assets/packet-7NZHBO7P-5WG45QPS-KUxcuvaA.js +1 -0
  690. package/web/assets/pegDiagram-YKIO5C6U-QGeQLEq2.js +1 -0
  691. package/web/assets/pie-RZYD4A2V-2OCZ2VTD-DPs08kJY.js +1 -0
  692. package/web/assets/pieDiagram-YPY3TKG5-BuT3MYzm.js +39 -0
  693. package/web/assets/{quadrantDiagram-VICAPDV7-DR54jOeR.js → quadrantDiagram-VO5QLCXA-B7098wSc.js} +3 -3
  694. package/web/assets/radar-I7S5WNFK-EPLSA35B-w5F0K3a7.js +1 -0
  695. package/web/assets/railroad-3IZDKUUU-PWFQV6Y6-Bu668yqY.js +1 -0
  696. package/web/assets/railroad-abnf-AHOZXSZD-JYYJX3BS-B6ghpETS.js +1 -0
  697. package/web/assets/railroad-ebnf-EBAXGLYW-RBZ4ONAP-D-XmHh3M.js +1 -0
  698. package/web/assets/railroad-peg-LSFZ7HO6-KHNPXGPG-mhkrhzEn.js +1 -0
  699. package/web/assets/railroadDiagram-M77LTMSB-AXu4vxk_.js +1 -0
  700. package/web/assets/{requirementDiagram-JXO7QTGE-PEkg7sKC.js → requirementDiagram-RASO5HTO-B-l8InpK.js} +4 -4
  701. package/web/assets/{sankeyDiagram-URQDO5SZ-DDWEtjcs.js → sankeyDiagram-F32LOJ6L-Kd7zjJgX.js} +3 -3
  702. package/web/assets/{sequenceDiagram-VS2MUI6T-Bv-uwANx.js → sequenceDiagram-URATNSBD-BlcdY9DS.js} +7 -7
  703. package/web/assets/sizeCapture-5GORAGP4-BEqQzsxs.js +1 -0
  704. package/web/assets/src-C5sx_gMp.js +1 -0
  705. package/web/assets/stateDiagram-DODFXNG5-DTdHc-fF.js +1 -0
  706. package/web/assets/stateDiagram-v2-JNMM5JRA-DioNLDDo.js +1 -0
  707. package/web/assets/swimlanes-OSWOYLSK-CA0ofdwY.js +2 -0
  708. package/web/assets/swimlanesDiagram-RHGX2RDE-PkwUdckC.js +8 -0
  709. package/web/assets/{timeline-definition-O6YCAMPW-Qmsuo7qS.js → timeline-definition-WJXWRH4I-DUfp1R3E.js} +3 -3
  710. package/web/assets/treeView-QDETBFTQ-EHYTSQNO-C5lpBgPm.js +1 -0
  711. package/web/assets/treemap-6X3UGDF4-CCWCF7EK-BB0ZyO-B.js +1 -0
  712. package/web/assets/vennDiagram-K3VCMQLI-Bj-FN-XS.js +34 -0
  713. package/web/assets/wardley-OPB4EBWU-6OWERDVT-CEA3Nq0j.js +1 -0
  714. package/web/assets/wardleyDiagram-XK6FUAWV-CVV0dHFr.js +78 -0
  715. package/web/assets/xychartDiagram-5VRUVLCW-CK_rbSWE.js +7 -0
  716. package/web/index.html +16 -15
  717. package/dist/core/ingestion/languages/python/index-stats.d.ts +0 -18
  718. package/dist/core/ingestion/languages/python/index-stats.js +0 -25
  719. package/web/assets/ProcessFlowModal-CwkpVkv-.js +0 -22
  720. package/web/assets/agent-Ds-lkZjX.js +0 -626
  721. package/web/assets/architecture-7EHR7CIX-6QZW5X65-BVWFvYz2.js +0 -1
  722. package/web/assets/architectureDiagram-UL44E2DR-CmG3uPWf.js +0 -36
  723. package/web/assets/chunk-2T2R6R2M-Bb6Sy3_j.js +0 -4
  724. package/web/assets/chunk-2UTLFMKG-CXlhF3Pt.js +0 -1
  725. package/web/assets/chunk-3SSMPTDK-rPsRM1x0.js +0 -321
  726. package/web/assets/chunk-4R4BOZG6-Be_F0JoX.js +0 -159
  727. package/web/assets/chunk-67TQ5CYL-CA7OhIEf.js +0 -124
  728. package/web/assets/chunk-7J6CGLKN-BlKwgXKs.js +0 -10
  729. package/web/assets/chunk-C62D2QBJ-3gdL8EKc.js +0 -1
  730. package/web/assets/chunk-CEXFNPSA-CjwtMDkc.js +0 -1
  731. package/web/assets/chunk-J5EP6P6S-L19oz55R.js +0 -1
  732. package/web/assets/chunk-KGFNY3KK-BZeP-55u.js +0 -62
  733. package/web/assets/chunk-KGYTTC2M-zm6n242I.js +0 -1
  734. package/web/assets/chunk-KNLZD3CH-BGlP6X9R.js +0 -1
  735. package/web/assets/chunk-LRIF4GLE-n59lhprL.js +0 -1
  736. package/web/assets/chunk-RERM46MO-B5dAdWpP.js +0 -1
  737. package/web/assets/chunk-RKZBBQEN-MyIQbGgD.js +0 -1
  738. package/web/assets/chunk-T2UQINTJ-BEyXhZWe.js +0 -1
  739. package/web/assets/chunk-UP6H54XL-BG-n7qDp.js +0 -1
  740. package/web/assets/chunk-UXSXWOXI-CW1_r5cS.js +0 -1
  741. package/web/assets/chunk-UY5QBCOK-ByqTVLvh.js +0 -1
  742. package/web/assets/chunk-VU6ZFW4Y-BLeasdkU.js +0 -2
  743. package/web/assets/classDiagram-KGZ6W3CR-olpO3fMe.js +0 -1
  744. package/web/assets/classDiagram-v2-72OJOZXJ-olpO3fMe.js +0 -1
  745. package/web/assets/dagre-ND4H6XIP-CY4iIF7v.js +0 -4
  746. package/web/assets/diagram-3NCE3AQN-CO6QpzEE.js +0 -43
  747. package/web/assets/diagram-GF46GFSD-B2atbzmU.js +0 -24
  748. package/web/assets/diagram-QXG6HAR7-DR6AHD2h.js +0 -24
  749. package/web/assets/diagram-WEQXMOUZ-DkpoMwTL.js +0 -10
  750. package/web/assets/erDiagram-L5TCEMPS-n8g_90bc.js +0 -85
  751. package/web/assets/eventmodeling-FCH6USID-MREXMVOE-CgFBM7e-.js +0 -1
  752. package/web/assets/flowDiagram-H6V6AXG4-SGMDiCkB.js +0 -162
  753. package/web/assets/ganttDiagram-JCBTUEKG-Cb3UBqRS.js +0 -292
  754. package/web/assets/gitGraph-WXDBUCRP-R675I2BI-DCJv7SII.js +0 -1
  755. package/web/assets/gitGraphDiagram-S2ZK5IYY-Bs9CR7tq.js +0 -106
  756. package/web/assets/index-CX_fADmQ.css +0 -2
  757. package/web/assets/info-J43DQDTF-KCYPFFUO-BfNy-9Nd.js +0 -1
  758. package/web/assets/infoDiagram-3YFTVSEB-T368on4D.js +0 -2
  759. package/web/assets/katex-K3KEBU37-qRQBy-EZ.js +0 -261
  760. package/web/assets/node-Ct_zna8U.js +0 -8
  761. package/web/assets/packet-YPE3B663-LP52Z2RK-D4qkeG9k.js +0 -1
  762. package/web/assets/pie-LRSECV5Y-TCRJHUBD-B_yMKyQa.js +0 -1
  763. package/web/assets/pieDiagram-CU6KROY3-Bv4LpAbr.js +0 -30
  764. package/web/assets/radar-GUYGQ44K-RDLRG3WG-DeD6yN_0.js +0 -1
  765. package/web/assets/sdk-CzHHH8tD.js +0 -37
  766. package/web/assets/src-Cv1eWg0o.js +0 -1
  767. package/web/assets/stateDiagram-7D4R322I-DVNjmkEq.js +0 -1
  768. package/web/assets/stateDiagram-v2-36443NZ5-CyN4Fh7_.js +0 -1
  769. package/web/assets/treeView-BLDUP644-QA4HXRO3-CDuSYnd4.js +0 -1
  770. package/web/assets/treemap-LRROVOQU-LLAWBHMP-imazucyJ.js +0 -1
  771. package/web/assets/vennDiagram-MWXL3ELB-BD1iK1SX.js +0 -34
  772. package/web/assets/wardley-L42UT6IY-5TKZOOLJ-DqrT9tB8.js +0 -1
  773. package/web/assets/wardleyDiagram-CUQ6CDDI-D6TzLVob.js +0 -78
  774. package/web/assets/xychartDiagram-N2JHSOCM-CoZ_Tits.js +0 -7
  775. /package/web/assets/{chunk-7W6UQGC5-pyKGssV3.js → chunk-LIEV3EAG-pyKGssV3.js} +0 -0
@@ -1,9 +1,28 @@
1
+ import type { MixedChainStep } from '../../../_shared/index.js';
1
2
  import type { SyntaxNode } from './ast-helpers.js';
2
3
  /** Node types representing call expressions across supported languages. */
3
4
  export declare const CALL_EXPRESSION_TYPES: Set<string>;
4
5
  /**
5
6
  * Hard limit on chain depth to prevent runaway recursion.
6
7
  * For `a.b().c().d()`, the chain has depth 2 (b and c before d).
8
+ *
9
+ * A chain deeper than this is DISCARDED WHOLE, not truncated:
10
+ * `extractMixedChain` returns an undefined base and the encoder refuses to mint
11
+ * a partial chain, because a base-side prefix decodes cleanly as a shorter,
12
+ * complete-looking chain and would type the receiver against the wrong member.
13
+ * Correct, but it means a builder chain one hop too long contributes nothing at
14
+ * all rather than degrading.
15
+ *
16
+ * DELIBERATELY NOT RAISED. Measured (see bench/receiver-resolution/BASELINE.md,
17
+ * `fourHopChain`): a 4-step chain mints NOTHING at this cap — confirmed by
18
+ * probing the emitter directly — and the site still RESOLVES, because the text
19
+ * cascade that owns the fallback path runs to `COMPOUND_RECEIVER_MAX_DEPTH` (8)
20
+ * and answers where the structural fold declined.
21
+ *
22
+ * So the cap bounds which chains are typed STRUCTURALLY, not which calls
23
+ * resolve. Raising it moves work from the cascade to the fold without changing
24
+ * any edge, and the fixture that proves it is committed so the next person to
25
+ * reach for this number has the measurement rather than the intuition.
7
26
  */
8
27
  export declare const MAX_CHAIN_DEPTH = 3;
9
28
  /**
@@ -31,11 +50,14 @@ export declare const extractReceiverName: (nameNode: SyntaxNode) => string | und
31
50
  * can be found (e.g. top-level free calls).
32
51
  */
33
52
  export declare const extractReceiverNode: (nameNode: SyntaxNode) => SyntaxNode | undefined;
34
- /** One step in a mixed receiver chain. */
35
- export type MixedChainStep = {
36
- kind: 'field' | 'call';
37
- name: string;
38
- };
53
+ /**
54
+ * One step in a mixed receiver chain.
55
+ *
56
+ * Owned by `gitnexus-shared` — it is part of the ScopeExtractor output
57
+ * contract, and resolution consumes it. Re-exported here so the producer's
58
+ * existing importers keep a single import site.
59
+ */
60
+ export type { MixedChainStep };
39
61
  /**
40
62
  * Walk a receiver AST node that is itself a call expression, accumulating the
41
63
  * chain of intermediate method names up to MAX_CHAIN_DEPTH.
@@ -50,26 +72,9 @@ export declare function extractCallChain(receiverCallNode: SyntaxNode): {
50
72
  chain: string[];
51
73
  baseReceiverName: string | undefined;
52
74
  } | undefined;
53
- /**
54
- * Walk a receiver AST node that may interleave field accesses and method calls,
55
- * building a unified chain of steps up to MAX_CHAIN_DEPTH.
56
- *
57
- * For `svc.getUser().address.save()`, called with the receiver of `save`
58
- * (`svc.getUser().address`, a field access node):
59
- * returns { chain: [{ kind:'call', name:'getUser' }, { kind:'field', name:'address' }],
60
- * baseReceiverName: 'svc' }
61
- *
62
- * For `user.getAddress().city.getName()`, called with receiver of `getName`
63
- * (`user.getAddress().city`):
64
- * returns { chain: [{ kind:'call', name:'getAddress' }, { kind:'field', name:'city' }],
65
- * baseReceiverName: 'user' }
66
- *
67
- * Pure field chains and pure call chains are special cases (all steps same kind).
68
- */
69
75
  export declare function extractMixedChain(receiverNode: SyntaxNode): {
70
76
  chain: MixedChainStep[];
71
77
  baseReceiverName: string | undefined;
72
78
  } | undefined;
73
79
  /** Arg types per call position (literals + optional TypeEnv for ids); undefined if unusable */
74
80
  export declare const extractCallArgTypes: (callNode: SyntaxNode, inferLiteralType: (node: SyntaxNode) => string | undefined, typeEnvLookup?: (varName: string, callNode: SyntaxNode) => string | undefined) => (string | undefined)[] | undefined;
75
- export {};
@@ -1,4 +1,5 @@
1
1
  import { CALL_ARGUMENT_LIST_TYPES } from './ast-helpers.js';
2
+ import { subscriptBase } from './callable-flow-captures.js';
2
3
  /** Node types representing call expressions across supported languages. */
3
4
  export const CALL_EXPRESSION_TYPES = new Set([
4
5
  'call_expression', // TS/JS/C/C++/Go/Rust
@@ -11,6 +12,24 @@ export const CALL_EXPRESSION_TYPES = new Set([
11
12
  /**
12
13
  * Hard limit on chain depth to prevent runaway recursion.
13
14
  * For `a.b().c().d()`, the chain has depth 2 (b and c before d).
15
+ *
16
+ * A chain deeper than this is DISCARDED WHOLE, not truncated:
17
+ * `extractMixedChain` returns an undefined base and the encoder refuses to mint
18
+ * a partial chain, because a base-side prefix decodes cleanly as a shorter,
19
+ * complete-looking chain and would type the receiver against the wrong member.
20
+ * Correct, but it means a builder chain one hop too long contributes nothing at
21
+ * all rather than degrading.
22
+ *
23
+ * DELIBERATELY NOT RAISED. Measured (see bench/receiver-resolution/BASELINE.md,
24
+ * `fourHopChain`): a 4-step chain mints NOTHING at this cap — confirmed by
25
+ * probing the emitter directly — and the site still RESOLVES, because the text
26
+ * cascade that owns the fallback path runs to `COMPOUND_RECEIVER_MAX_DEPTH` (8)
27
+ * and answers where the structural fold declined.
28
+ *
29
+ * So the cap bounds which chains are typed STRUCTURALLY, not which calls
30
+ * resolve. Raising it moves work from the cascade to the fold without changing
31
+ * any edge, and the fixture that proves it is committed so the next person to
32
+ * reach for this number has the measurement rather than the intuition.
14
33
  */
15
34
  export const MAX_CHAIN_DEPTH = 3;
16
35
  /**
@@ -296,6 +315,46 @@ export const extractReceiverNode = (nameNode) => {
296
315
  };
297
316
  // ── Chained-call extraction ───────────────────────────────────────────────
298
317
  /** Node types representing member/field access across languages. */
318
+ /**
319
+ * Await expressions, per grammar. The walk previously stopped here — an await
320
+ * node is neither a call nor a field access — so `(await svc.getUserAsync()).save()`
321
+ * minted NO chain at all and the receiver fell to the text cascade.
322
+ */
323
+ const AWAIT_EXPRESSION_NODE_TYPES = new Set([
324
+ 'await_expression', // TS/JS/C#/Rust
325
+ 'await', // Python
326
+ ]);
327
+ /**
328
+ * Subscript / index expressions, per grammar. Same story as await: the walk
329
+ * stopped, so `repos[0].save()` minted no chain — which is why `indexElement`
330
+ * is an INVISIBLE-GAP (no edge AND no recorded drop) in all 14 languages, the
331
+ * most uniform cell in the matrix.
332
+ */
333
+ const SUBSCRIPT_NODE_TYPES = new Set([
334
+ 'subscript_expression', // TS/JS/PHP/C/C++
335
+ 'subscript', // Python
336
+ 'index_expression', // Go/Rust
337
+ 'element_access_expression', // C#
338
+ 'array_access', // Java
339
+ 'indexing_expression', // Kotlin
340
+ ]);
341
+ /**
342
+ * Can the chain walk descend into this node, or is it the base?
343
+ *
344
+ * ONE predicate for all four branches. The call and field branches previously
345
+ * tested only the call/field sets, so a receiver like `x[0].f().g()` stopped at
346
+ * the subscript and returned the literal text `x[0]` as the base — which
347
+ * `isEncodableSegment` accepts, minting a chain whose base binds to nothing. And
348
+ * `(await f()).g.h()` returned `await f()`, rejected on whitespace, minting no
349
+ * chain at all. Adding a fifth step kind must not require remembering four
350
+ * separate call sites.
351
+ */
352
+ function isChainableReceiverNode(node) {
353
+ return (CALL_EXPRESSION_TYPES.has(node.type) ||
354
+ FIELD_ACCESS_NODE_TYPES.has(node.type) ||
355
+ AWAIT_EXPRESSION_NODE_TYPES.has(node.type) ||
356
+ SUBSCRIPT_NODE_TYPES.has(node.type));
357
+ }
299
358
  const FIELD_ACCESS_NODE_TYPES = new Set([
300
359
  'member_expression', // TS/JS
301
360
  'member_access_expression', // C#
@@ -381,7 +440,10 @@ export function extractCallChain(receiverCallNode) {
381
440
  }
382
441
  else {
383
442
  // Reached a simple identifier — the base receiver
384
- return { chain, baseReceiverName: innerReceiver.text || undefined };
443
+ return {
444
+ chain,
445
+ baseReceiverName: unwrapTransparentReceiver(innerReceiver).text || undefined,
446
+ };
385
447
  }
386
448
  }
387
449
  return chain.length > 0 ? { chain, baseReceiverName: undefined } : undefined;
@@ -402,10 +464,91 @@ export function extractCallChain(receiverCallNode) {
402
464
  *
403
465
  * Pure field chains and pure call chains are special cases (all steps same kind).
404
466
  */
467
+ /**
468
+ * Node types that wrap an expression without changing what it denotes, so a
469
+ * receiver chain's BASE can be read through them.
470
+ *
471
+ * `svc!` (TS non-null assertion) and `(svc)` denote exactly `svc`; taking the
472
+ * wrapper's own text instead yields `svc!` / `(svc)`, which matches no binding
473
+ * and silently costs the chain its base.
474
+ *
475
+ * Deliberately EXCLUDES a cast (`x as T`, `(T)x`): a cast changes the type an
476
+ * expression denotes, so reading through one would type the receiver as the
477
+ * operand rather than as the cast target.
478
+ *
479
+ * Keyed by node type; the value is the operator text that has to TERMINATE the
480
+ * node for the peel to apply, or `null` for a node type that is transparent
481
+ * unconditionally.
482
+ *
483
+ * The gated entry exists because Swift force-unwrap (`self.a!`) is the exact
484
+ * semantic of TypeScript's `non_null_expression` — it yields the wrapped type —
485
+ * but Swift parses it as the general `postfix_expression`, which ALSO carries
486
+ * user-defined postfix operators. Those can return anything, so peeling that
487
+ * node type unconditionally would type the receiver as the operand and could
488
+ * produce a confidently wrong owner. Reading the operator keeps the peel to the
489
+ * case that is provably type-preserving.
490
+ */
491
+ const TRANSPARENT_RECEIVER_WRAPPERS = new Map([
492
+ ['non_null_expression', null], // TypeScript `svc!`
493
+ ['parenthesized_expression', null], // `(svc)`
494
+ // NOT Swift-only: Kotlin's `!!` non-null assertion parses as the same node type
495
+ // and is equally type-preserving, so it is peeled too. Measured — the
496
+ // receiver-resolution bench moved `kotlin.nonNullAssert` VISIBLE-GAP ->
497
+ // RESOLVES when this landed, which is how the Kotlin effect was discovered
498
+ // rather than assumed. Any other grammar emitting `postfix_expression` is
499
+ // affected as well; the `!` gate, not the language, is what bounds this.
500
+ ['postfix_expression', '!'], // Swift `self.a!`, Kotlin `a!!`
501
+ ]);
502
+ /** Is `node` a wrapper that denotes exactly what its operand denotes? */
503
+ function isTransparentReceiverWrapper(node) {
504
+ // `node.type` is a native getter, and this predicate runs on every receiver
505
+ // node. Crossing it twice for two separate table lookups measured 376 ns/check
506
+ // against 188 ns for the single read below.
507
+ const operator = TRANSPARENT_RECEIVER_WRAPPERS.get(node.type);
508
+ // `undefined` is "not in the table"; `null` is "in the table, ungated". The
509
+ // two are distinguishable, so one `get` answers both questions — no separate
510
+ // `has` probe, and one crossing of the native `node.type` getter.
511
+ if (operator === undefined)
512
+ return false;
513
+ if (operator === null)
514
+ return true;
515
+ // The operator is an anonymous token, so it is not in `namedChildren`; the
516
+ // node's own text is the reliable place to read it. Deliberately NOT
517
+ // `node.lastChild` — measured 3x SLOWER (the child wrapper allocation
518
+ // dominates), and the token surfaces with type `bang`, not `!`.
519
+ return node.text.trimEnd().endsWith(operator);
520
+ }
521
+ /**
522
+ * Iteration bound for the wrapper peel. Its OWN constant, not `MAX_CHAIN_DEPTH`.
523
+ *
524
+ * The two answer unrelated questions — "how many chain hops do we type?" versus
525
+ * "how many redundant parens might someone write?" — and sharing one number
526
+ * meant raising the chain cap silently widened this loop as a side effect. That
527
+ * coupling is easy to miss precisely because the shared name reads as
528
+ * intentional. `((x))` nests twice; nothing real nests deeply.
529
+ */
530
+ const MAX_TRANSPARENT_WRAPPER_DEPTH = 3;
531
+ /** Peel transparent wrappers off a base receiver node. */
532
+ function unwrapTransparentReceiver(node) {
533
+ let current = node;
534
+ for (let i = 0; i < MAX_TRANSPARENT_WRAPPER_DEPTH && isTransparentReceiverWrapper(current); i++) {
535
+ const inner = current.namedChildren?.find((c) => c !== null);
536
+ if (inner === undefined || inner === null)
537
+ break;
538
+ current = inner;
539
+ }
540
+ return current;
541
+ }
405
542
  export function extractMixedChain(receiverNode) {
406
543
  const chain = [];
407
544
  let current = receiverNode;
408
545
  while (chain.length < MAX_CHAIN_DEPTH) {
546
+ // Peel transparent wrappers at LOOP ENTRY, not only where a base is
547
+ // returned. `(await svc.getUserAsync()).save()` hands this walk a
548
+ // `parenthesized_expression`, which matches no branch below, so the walk
549
+ // fell straight through to the base case with an empty chain and minted
550
+ // nothing — the await step could never be reached.
551
+ current = unwrapTransparentReceiver(current);
409
552
  if (CALL_EXPRESSION_TYPES.has(current.type)) {
410
553
  // ── Call expression: extract method name + inner receiver ────────────
411
554
  const funcNode = current.childForFieldName?.('function') ??
@@ -458,12 +601,14 @@ export function extractMixedChain(receiverNode) {
458
601
  }
459
602
  if (!innerReceiver)
460
603
  break;
461
- if (CALL_EXPRESSION_TYPES.has(innerReceiver.type) ||
462
- FIELD_ACCESS_NODE_TYPES.has(innerReceiver.type)) {
604
+ if (isChainableReceiverNode(innerReceiver)) {
463
605
  current = innerReceiver;
464
606
  }
465
607
  else {
466
- return { chain, baseReceiverName: innerReceiver.text || undefined };
608
+ return {
609
+ chain,
610
+ baseReceiverName: unwrapTransparentReceiver(innerReceiver).text || undefined,
611
+ };
467
612
  }
468
613
  }
469
614
  else if (FIELD_ACCESS_NODE_TYPES.has(current.type)) {
@@ -506,12 +651,62 @@ export function extractMixedChain(receiverNode) {
506
651
  chain.unshift({ kind: 'field', name: propertyName });
507
652
  if (!innerObject)
508
653
  break;
509
- if (CALL_EXPRESSION_TYPES.has(innerObject.type) ||
510
- FIELD_ACCESS_NODE_TYPES.has(innerObject.type)) {
654
+ if (isChainableReceiverNode(innerObject)) {
511
655
  current = innerObject;
512
656
  }
513
657
  else {
514
- return { chain, baseReceiverName: innerObject.text || undefined };
658
+ return {
659
+ chain,
660
+ baseReceiverName: unwrapTransparentReceiver(innerObject).text || undefined,
661
+ };
662
+ }
663
+ }
664
+ else if (AWAIT_EXPRESSION_NODE_TYPES.has(current.type)) {
665
+ // Name-free: the awaited call's method name already lives on its own
666
+ // `call` step, so this records only that an await happened.
667
+ chain.unshift({ kind: 'await' });
668
+ const inner = current.childForFieldName?.('argument') ??
669
+ current.childForFieldName?.('expression') ??
670
+ current.namedChildren?.find((c) => c !== null) ??
671
+ null;
672
+ if (!inner)
673
+ break;
674
+ if (isChainableReceiverNode(inner)) {
675
+ current = inner;
676
+ }
677
+ else {
678
+ return {
679
+ chain,
680
+ baseReceiverName: unwrapTransparentReceiver(inner).text || undefined,
681
+ };
682
+ }
683
+ }
684
+ else if (SUBSCRIPT_NODE_TYPES.has(current.type)) {
685
+ // Name-free: a subscript key is a VALUE, not an identifier the resolver
686
+ // could look up, so there is no member name to record.
687
+ chain.unshift({ kind: 'index' });
688
+ // Shared per-grammar table — it knows Python's `value` and Java's `array`,
689
+ // which a locally-written ladder omitted (they worked only because the
690
+ // container happened to be the first named child, an ordering coincidence
691
+ // rather than a contract). Falls back for grammars whose subscript node
692
+ // carries no `index` field.
693
+ const obj = subscriptBase(current) ??
694
+ current.childForFieldName?.('object') ??
695
+ current.childForFieldName?.('argument') ??
696
+ current.childForFieldName?.('operand') ??
697
+ current.childForFieldName?.('expression') ??
698
+ current.namedChildren?.find((c) => c !== null) ??
699
+ null;
700
+ if (!obj)
701
+ break;
702
+ if (isChainableReceiverNode(obj)) {
703
+ current = obj;
704
+ }
705
+ else {
706
+ return {
707
+ chain,
708
+ baseReceiverName: unwrapTransparentReceiver(obj).text || undefined,
709
+ };
515
710
  }
516
711
  }
517
712
  else if (current.type === 'selector') {
@@ -6,6 +6,53 @@
6
6
  * callable signatures, protocol invocation names). The central extractor
7
7
  * never sees a parser node and shared ingestion code never branches on a
8
8
  * language name.
9
+ *
10
+ * ## The cell/site model
11
+ *
12
+ * A *cell* is a named storage location that may hold a callable — a variable,
13
+ * parameter, field or pointer, canonicalized to a binding key by the scope
14
+ * tree. A *site* is one observed fact about cells, emitted here as a capture
15
+ * match and consumed by `passes/callable-value-flow.ts`, which runs them to a
16
+ * fixpoint. The site kinds (`CallableFlowSite`) are:
17
+ *
18
+ * - `seed` — a cell acquires a named callable: `f = target`. Carries
19
+ * `@callable-flow.target-name`, the name the pass resolves against.
20
+ * - `copy` / `alias` — a cell takes another cell's contents, so targets flow
21
+ * between them.
22
+ * - `address` / `store` / `load` — indirection through a pointer cell.
23
+ * - `formal` — a parameter cell of a known function, by index.
24
+ * - `argument` — a callable passed at a call site, binding to that `formal`.
25
+ * - `invoke` — a call THROUGH a cell (`f()`), the site that ultimately becomes
26
+ * a `CALLS` edge once the cell's target set is known.
27
+ *
28
+ * ## The anonymous-callable convention
29
+ *
30
+ * A closure literal has no name to resolve against, so a `seed` whose source
31
+ * is an anonymous callable takes its **destination's** name as
32
+ * `@callable-flow.target-name` — `val f = { }` seeds "the cell `f` holds the
33
+ * callable named `f`". That is deliberately self-referential and only resolves
34
+ * because the binding itself is a callable target: `buildGraphTargetIndex`
35
+ * admits it on the label of the graph node it resolves to, which #2687 makes a
36
+ * `Function` for exactly this construct. Languages whose closure binding does
37
+ * NOT emit a callable graph node get no resolution from the convention alone
38
+ * (#2693).
39
+ *
40
+ * ## Adding a language
41
+ *
42
+ * Supply `CallableFlowCaptureOptions` from `<lang>/captures.ts` and call
43
+ * `synthesizeCallableFlowCaptures`. Two recurring traps:
44
+ *
45
+ * - A **fieldless** assignment/binding node decomposes to nothing under the
46
+ * shared `left`/`name`/`value` fallback in `assignmentParts`. Supply
47
+ * `extractAssignment` (Kotlin's `assignment`, Dart's
48
+ * `initialized_identifier`). Returning `undefined` falls back to the shared
49
+ * path, so one callback can handle the odd node and leave the rest alone.
50
+ * - A binding needs a `SymbolDefinition` for the pass to attach to. Captures
51
+ * alone are not enough: without a `@declaration.*` for the bound name, the
52
+ * seed has no cell to key on.
53
+ *
54
+ * `c/captures.ts` is the fullest worked example (pointers, signatures,
55
+ * overload selection); `dart/captures.ts` the smallest interesting one.
9
56
  */
10
57
  import type { CaptureMatch, ParameterTypeClass } from '../../../_shared/index.js';
11
58
  import { type SyntaxNode } from './ast-helpers.js';
@@ -92,3 +139,15 @@ export interface CallableFlowCaptureOptions {
92
139
  * linear in AST size (the scope-capture benchmark guards the scaling ratio).
93
140
  */
94
141
  export declare function synthesizeCallableFlowCaptures(root: SyntaxNode, options: CallableFlowCaptureOptions): readonly CaptureMatch[];
142
+ /**
143
+ * For a subscript/index expression, the identifier of interest is always in
144
+ * the container operand, never the index: `tbl[i] = h` must bind the cell
145
+ * `tbl` (index-insensitive, Andersen-style), not the index variable `i` —
146
+ * seeding `i` both pollutes a same-named formal and misses the later
147
+ * `tbl[i]()` join (#2522 review). Field names cover the grammars that field
148
+ * their subscript nodes; others keep the generic traversal.
149
+ */
150
+ /** The container operand of a subscript node, per grammar. Exported because the
151
+ * receiver-chain walk needs the same per-grammar answer — two divergent field
152
+ * tables for one question is how a new grammar gets half-supported. */
153
+ export declare function subscriptBase(node: SyntaxNode): SyntaxNode | null;
@@ -6,6 +6,53 @@
6
6
  * callable signatures, protocol invocation names). The central extractor
7
7
  * never sees a parser node and shared ingestion code never branches on a
8
8
  * language name.
9
+ *
10
+ * ## The cell/site model
11
+ *
12
+ * A *cell* is a named storage location that may hold a callable — a variable,
13
+ * parameter, field or pointer, canonicalized to a binding key by the scope
14
+ * tree. A *site* is one observed fact about cells, emitted here as a capture
15
+ * match and consumed by `passes/callable-value-flow.ts`, which runs them to a
16
+ * fixpoint. The site kinds (`CallableFlowSite`) are:
17
+ *
18
+ * - `seed` — a cell acquires a named callable: `f = target`. Carries
19
+ * `@callable-flow.target-name`, the name the pass resolves against.
20
+ * - `copy` / `alias` — a cell takes another cell's contents, so targets flow
21
+ * between them.
22
+ * - `address` / `store` / `load` — indirection through a pointer cell.
23
+ * - `formal` — a parameter cell of a known function, by index.
24
+ * - `argument` — a callable passed at a call site, binding to that `formal`.
25
+ * - `invoke` — a call THROUGH a cell (`f()`), the site that ultimately becomes
26
+ * a `CALLS` edge once the cell's target set is known.
27
+ *
28
+ * ## The anonymous-callable convention
29
+ *
30
+ * A closure literal has no name to resolve against, so a `seed` whose source
31
+ * is an anonymous callable takes its **destination's** name as
32
+ * `@callable-flow.target-name` — `val f = { }` seeds "the cell `f` holds the
33
+ * callable named `f`". That is deliberately self-referential and only resolves
34
+ * because the binding itself is a callable target: `buildGraphTargetIndex`
35
+ * admits it on the label of the graph node it resolves to, which #2687 makes a
36
+ * `Function` for exactly this construct. Languages whose closure binding does
37
+ * NOT emit a callable graph node get no resolution from the convention alone
38
+ * (#2693).
39
+ *
40
+ * ## Adding a language
41
+ *
42
+ * Supply `CallableFlowCaptureOptions` from `<lang>/captures.ts` and call
43
+ * `synthesizeCallableFlowCaptures`. Two recurring traps:
44
+ *
45
+ * - A **fieldless** assignment/binding node decomposes to nothing under the
46
+ * shared `left`/`name`/`value` fallback in `assignmentParts`. Supply
47
+ * `extractAssignment` (Kotlin's `assignment`, Dart's
48
+ * `initialized_identifier`). Returning `undefined` falls back to the shared
49
+ * path, so one callback can handle the odd node and leave the rest alone.
50
+ * - A binding needs a `SymbolDefinition` for the pass to attach to. Captures
51
+ * alone are not enough: without a `@declaration.*` for the bound name, the
52
+ * seed has no cell to key on.
53
+ *
54
+ * `c/captures.ts` is the fullest worked example (pointers, signatures,
55
+ * overload selection); `dart/captures.ts` the smallest interesting one.
9
56
  */
10
57
  import { nodeToCapture, syntheticCapture } from './ast-helpers.js';
11
58
  /**
@@ -733,7 +780,10 @@ function unaryOperator(node) {
733
780
  * `tbl[i]()` join (#2522 review). Field names cover the grammars that field
734
781
  * their subscript nodes; others keep the generic traversal.
735
782
  */
736
- function subscriptBase(node) {
783
+ /** The container operand of a subscript node, per grammar. Exported because the
784
+ * receiver-chain walk needs the same per-grammar answer — two divergent field
785
+ * tables for one question is how a new grammar gets half-supported. */
786
+ export function subscriptBase(node) {
737
787
  if (node.childForFieldName('index') === null)
738
788
  return null;
739
789
  return (node.childForFieldName('argument') ?? // C/C++ subscript_expression
@@ -11,3 +11,28 @@ import type { NodeLabel } from '../../../_shared/index.js';
11
11
  * qualified/simple key and a ctor chain becomes a self-loop (#1928 F38 / #2046).
12
12
  */
13
13
  export declare function isOverloadableCallable(label: NodeLabel | undefined): boolean;
14
+ /**
15
+ * Labels whose FUNCTION-LOCAL declarations carry the enclosing-callable +
16
+ * position identity of #2699 (`Function:x.ts:run.save@3:2`).
17
+ *
18
+ * Wider than {@link isOverloadableCallable} on purpose. #2695 restricted the
19
+ * rule to callables because the collision that produced wrong CALLS edges was
20
+ * between callables, and widening churned ids for symbols the local-symbol
21
+ * pruner mostly deletes. But the issue's ORIGINAL complaint was about values:
22
+ * a top-level `const handler` and a function-local `const handler` collapsed
23
+ * onto one `Const:v.ts:handler`, and no callable gate ever reaches that. The
24
+ * limitation is closed here rather than carried.
25
+ *
26
+ * Only LOCALS are affected either way: the prefix comes from
27
+ * `enclosingCallablePrefix`, which returns `undefined` when nothing encloses
28
+ * the declaration, so top-level and class-member ids are untouched — that is
29
+ * what keeps this off the symbols other files and stored references address.
30
+ * A class field stays unqualified even inside a function, because the prefix
31
+ * walk boundaries on class-likes.
32
+ *
33
+ * ONE definition, deliberately: the id-building phase and the resolution phase
34
+ * must agree on this set or the caller attaches to a node that does not exist
35
+ * and the edge is silently dropped — the failure mode #2714 fixed, invisible
36
+ * from outside because "zero dangling edges" is what it looks like.
37
+ */
38
+ export declare function isPositionQualifiedLocalLabel(label: NodeLabel | undefined): boolean;
@@ -12,3 +12,34 @@
12
12
  export function isOverloadableCallable(label) {
13
13
  return label === 'Function' || label === 'Method' || label === 'Constructor';
14
14
  }
15
+ /**
16
+ * Labels whose FUNCTION-LOCAL declarations carry the enclosing-callable +
17
+ * position identity of #2699 (`Function:x.ts:run.save@3:2`).
18
+ *
19
+ * Wider than {@link isOverloadableCallable} on purpose. #2695 restricted the
20
+ * rule to callables because the collision that produced wrong CALLS edges was
21
+ * between callables, and widening churned ids for symbols the local-symbol
22
+ * pruner mostly deletes. But the issue's ORIGINAL complaint was about values:
23
+ * a top-level `const handler` and a function-local `const handler` collapsed
24
+ * onto one `Const:v.ts:handler`, and no callable gate ever reaches that. The
25
+ * limitation is closed here rather than carried.
26
+ *
27
+ * Only LOCALS are affected either way: the prefix comes from
28
+ * `enclosingCallablePrefix`, which returns `undefined` when nothing encloses
29
+ * the declaration, so top-level and class-member ids are untouched — that is
30
+ * what keeps this off the symbols other files and stored references address.
31
+ * A class field stays unqualified even inside a function, because the prefix
32
+ * walk boundaries on class-likes.
33
+ *
34
+ * ONE definition, deliberately: the id-building phase and the resolution phase
35
+ * must agree on this set or the caller attaches to a node that does not exist
36
+ * and the edge is silently dropped — the failure mode #2714 fixed, invisible
37
+ * from outside because "zero dangling edges" is what it looks like.
38
+ */
39
+ export function isPositionQualifiedLocalLabel(label) {
40
+ return (isOverloadableCallable(label) ||
41
+ label === 'Variable' ||
42
+ label === 'Const' ||
43
+ label === 'Property' ||
44
+ label === 'Static');
45
+ }
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Effective RAM in bytes: physical total, or a REAL smaller cgroup limit
3
+ * (#2649). `process.constrainedMemory()` returns a huge sentinel when
4
+ * unconstrained, and only the leaf cgroup's limit is visible (parent-slice
5
+ * caps are not) — so a smaller-than-physical value is trusted and anything
6
+ * else falls back to `os.totalmem()`. Mirrors `computeHeapCapMb`'s
7
+ * constrained handling in `cli/analyze.ts`; container-blind sizing told
8
+ * users "this machine has more memory" inside an 8GB-limited container on
9
+ * a 64GB host, and sized worker heap caps past the whole container.
10
+ */
11
+ export declare function effectiveRamBytes(): number;
12
+ /**
13
+ * The RAM-aware heap cap formula (#2649), single-sourced here so the CLI
14
+ * respawn (`computeHeapCapMb` in `cli/analyze.ts`), and the server's
15
+ * analyze fork size from the same rule: `0.75 × effective RAM`, raised to
16
+ * the floor when RAM allows, never above `0.80 × effective RAM`.
17
+ */
18
+ export declare function heapCapMbFor(effectiveBytes: number): number;
19
+ /**
20
+ * True when the operator has turned GitNexus's memory autopilot off
21
+ * (`GITNEXUS_MEMORY=off`).
22
+ *
23
+ * One switch for one concern. Memory management has two automatic behaviours —
24
+ * re-running analyze with a RAM-aware heap cap, and aborting the parse before
25
+ * V8's ineffective-mark-compact death spiral — and an operator who wants to
26
+ * drive manually wants both off, not one. They were previously two separate
27
+ * variables (`GITNEXUS_AUTO_HEAP`, `GITNEXUS_HEAP_GUARD`), which is three knobs
28
+ * for one intent once the worker-heap override is counted; neither had shipped,
29
+ * so this consolidates them rather than deprecating anything.
30
+ *
31
+ * Note the ordinary way to pin the heap is Node's own `--max-old-space-size`,
32
+ * which `ensureHeap` already honours as the operator's decision. This switch is
33
+ * for declining the autopilot WITHOUT naming a size.
34
+ *
35
+ * Lives here beside the cap formula so policy and its escape hatch are
36
+ * single-sourced. Read every call (not memoized) so tests can stub the env.
37
+ */
38
+ export declare function memoryAutopilotDisabled(): boolean;
39
+ /** The cap for THIS machine/container: `heapCapMbFor(effectiveRamBytes())`. */
40
+ export declare function autoHeapCapMb(): number;
@@ -0,0 +1,58 @@
1
+ import os from 'node:os';
2
+ /**
3
+ * Effective RAM in bytes: physical total, or a REAL smaller cgroup limit
4
+ * (#2649). `process.constrainedMemory()` returns a huge sentinel when
5
+ * unconstrained, and only the leaf cgroup's limit is visible (parent-slice
6
+ * caps are not) — so a smaller-than-physical value is trusted and anything
7
+ * else falls back to `os.totalmem()`. Mirrors `computeHeapCapMb`'s
8
+ * constrained handling in `cli/analyze.ts`; container-blind sizing told
9
+ * users "this machine has more memory" inside an 8GB-limited container on
10
+ * a 64GB host, and sized worker heap caps past the whole container.
11
+ */
12
+ export function effectiveRamBytes() {
13
+ const total = os.totalmem();
14
+ const constrained = typeof process.constrainedMemory === 'function' ? process.constrainedMemory() : undefined;
15
+ return typeof constrained === 'number' && constrained > 0 && constrained < total
16
+ ? constrained
17
+ : total;
18
+ }
19
+ /** Historical floor for the auto heap cap — applied only up to 0.80 × RAM
20
+ * (a floor at or above physical memory swap-thrashes instead of OOMing,
21
+ * #2649). */
22
+ const HEAP_FLOOR_MB = 16384;
23
+ /**
24
+ * The RAM-aware heap cap formula (#2649), single-sourced here so the CLI
25
+ * respawn (`computeHeapCapMb` in `cli/analyze.ts`), and the server's
26
+ * analyze fork size from the same rule: `0.75 × effective RAM`, raised to
27
+ * the floor when RAM allows, never above `0.80 × effective RAM`.
28
+ */
29
+ export function heapCapMbFor(effectiveBytes) {
30
+ const effectiveMb = Math.floor(effectiveBytes / (1024 * 1024));
31
+ return Math.min(Math.max(HEAP_FLOOR_MB, Math.floor(0.75 * effectiveMb)), Math.floor(0.8 * effectiveMb));
32
+ }
33
+ /**
34
+ * True when the operator has turned GitNexus's memory autopilot off
35
+ * (`GITNEXUS_MEMORY=off`).
36
+ *
37
+ * One switch for one concern. Memory management has two automatic behaviours —
38
+ * re-running analyze with a RAM-aware heap cap, and aborting the parse before
39
+ * V8's ineffective-mark-compact death spiral — and an operator who wants to
40
+ * drive manually wants both off, not one. They were previously two separate
41
+ * variables (`GITNEXUS_AUTO_HEAP`, `GITNEXUS_HEAP_GUARD`), which is three knobs
42
+ * for one intent once the worker-heap override is counted; neither had shipped,
43
+ * so this consolidates them rather than deprecating anything.
44
+ *
45
+ * Note the ordinary way to pin the heap is Node's own `--max-old-space-size`,
46
+ * which `ensureHeap` already honours as the operator's decision. This switch is
47
+ * for declining the autopilot WITHOUT naming a size.
48
+ *
49
+ * Lives here beside the cap formula so policy and its escape hatch are
50
+ * single-sourced. Read every call (not memoized) so tests can stub the env.
51
+ */
52
+ export function memoryAutopilotDisabled() {
53
+ return process.env.GITNEXUS_MEMORY === 'off';
54
+ }
55
+ /** The cap for THIS machine/container: `heapCapMbFor(effectiveRamBytes())`. */
56
+ export function autoHeapCapMb() {
57
+ return heapCapMbFor(effectiveRamBytes());
58
+ }
@@ -18,3 +18,17 @@
18
18
  * must not shift. The clamp guards degenerate inputs (line 0 / empty files).
19
19
  */
20
20
  export declare const toZeroBasedLine: (oneBasedLine: number) => number;
21
+ /**
22
+ * Convert a 0-based GraphNode `startLine`/`endLine` into the 1-based line space
23
+ * the CFG/PDG layer uses (`BasicBlock` ids and `functionStartLine` are built
24
+ * from `startPosition.row + 1`).
25
+ *
26
+ * This is the INTERNAL inverse of {@link toZeroBasedLine}, for joining graph
27
+ * rows against that layer. It is NOT the display converter: line numbers on
28
+ * their way out to a human or an LLM go through `mcp/local/line-display.ts`,
29
+ * which is documented as a response-boundary concern and passes `undefined`
30
+ * through. Here the arithmetic is the point, so the input must already be a
31
+ * number — a caller holding a possibly-absent value checks it first, exactly as
32
+ * the `typeof sym.startLine === 'number'` guards in `pdg-impact.ts` do.
33
+ */
34
+ export declare const toOneBasedLine: (zeroBasedLine: number) => number;