cgraphx 2.0.2 → 2.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (754) hide show
  1. package/dist/.claude-template/FLOW-MAP.md +13 -3
  2. package/dist/.claude-template/agents/task-history.md +186 -0
  3. package/dist/.claude-template/commands/end.md +1 -0
  4. package/dist/.claude-template/skills/cgraphx-guide/SKILL.md +5 -3
  5. package/dist/.claude-template/skills/cgraphx-guide/how-to-use.html +8 -8
  6. package/dist/.claude-template/skills/cgraphx-guide/how-to-use.md +8 -8
  7. package/dist/.claude-template/skills/clarify-requirements/SKILL.md +13 -9
  8. package/dist/.claude-template/skills/db-query/SKILL.md +19 -2
  9. package/dist/.claude-template/skills/iboc-check/SKILL.md +51 -23
  10. package/dist/.claude-template/skills/iboc-check/filler-prompt.md +3 -4
  11. package/dist/.claude-template/skills/run-api-test/SKILL.md +15 -15
  12. package/dist/.claude-template/skills/run-api-test/assets/{template-test-report.md → template-/346/216/245/345/217/243/346/265/213/350/257/225/346/212/245/345/221/212.md} +4 -4
  13. package/dist/.claude-template/skills/run-api-test/references/bru-run.md +1 -1
  14. package/dist/.claude-template/skills/run-api-test/references/db-verification.md +2 -2
  15. package/dist/.claude-template/skills/run-api-test/references/report-format.md +6 -6
  16. package/dist/.claude-template/skills/run-api-test/references/service-readiness.md +1 -1
  17. package/dist/.claude-template/skills/run-api-test/references/test-scope.md +6 -6
  18. package/dist/.claude-template/skills/run-ui-test/SKILL.md +186 -0
  19. package/dist/.claude-template/skills/run-ui-test/references/report-format.md +77 -0
  20. package/dist/.claude-template/skills/subagent-implement/SKILL.md +3 -2
  21. package/dist/.claude-template/skills/write-api/SKILL.md +18 -18
  22. package/dist/.claude-template/skills/write-api/assets/{template-api-spec.md → template-/346/216/245/345/217/243/346/265/213/350/257/225-spec.md} +1 -1
  23. package/dist/.claude-template/skills/write-api/references/{api-spec-format.md → /346/216/245/345/217/243/346/265/213/350/257/225-spec-format.md} +3 -3
  24. package/dist/.claude-template/skills/write-plan/SKILL.md +4 -2
  25. package/dist/.claude-template/skills/write-ui-test/SKILL.md +125 -0
  26. package/dist/.claude-template/skills/write-ui-test/references//347/224/250/344/276/213/350/247/204/346/240/274-format.md +94 -0
  27. package/dist/core/code/engine/cli/analyze-config.js +320 -0
  28. package/dist/core/code/engine/cli/analyze.js +1086 -0
  29. package/dist/core/code/engine/cli/cli-message.js +83 -0
  30. package/dist/core/code/engine/cli/detect-changes-format.js +58 -0
  31. package/dist/core/code/engine/cli/embedding-dims.js +43 -0
  32. package/dist/core/code/engine/cli/format-elapsed.js +12 -0
  33. package/dist/core/code/engine/cli/help-i18n.js +144 -0
  34. package/dist/core/code/engine/cli/i18n/en.js +110 -0
  35. package/dist/core/code/engine/cli/i18n/index.js +47 -0
  36. package/dist/core/code/engine/cli/i18n/resources.js +9 -0
  37. package/dist/core/code/engine/cli/i18n/zh-CN.js +110 -0
  38. package/dist/core/code/engine/cli/lazy-action.js +67 -0
  39. package/dist/core/code/engine/cli/optional-grammars.js +136 -0
  40. package/dist/core/code/engine/cli/resolve-invocation.js +76 -0
  41. package/dist/core/code/engine/cli/status.js +156 -0
  42. package/dist/core/code/engine/cli/tool.js +384 -0
  43. package/dist/core/code/engine/config/ignore-service.js +511 -0
  44. package/dist/core/code/engine/config/supported-languages.js +17 -0
  45. package/dist/core/code/engine/core/analysis-features.js +64 -0
  46. package/dist/core/code/engine/core/analyzer-identity.js +2171 -0
  47. package/dist/core/code/engine/core/git-staleness.js +180 -0
  48. package/dist/core/code/engine/core/graph/graph.js +180 -0
  49. package/dist/core/code/engine/core/graph/import-cycles.js +106 -0
  50. package/dist/core/code/engine/core/graph/types.js +2 -0
  51. package/dist/core/code/engine/core/index-freshness.js +12 -0
  52. package/dist/core/code/engine/core/ingestion/binding-accumulator.js +341 -0
  53. package/dist/core/code/engine/core/ingestion/call-extractors/configs/c-cpp.js +168 -0
  54. package/dist/core/code/engine/core/ingestion/call-extractors/configs/csharp.js +9 -0
  55. package/dist/core/code/engine/core/ingestion/call-extractors/configs/dart.js +8 -0
  56. package/dist/core/code/engine/core/ingestion/call-extractors/configs/go.js +8 -0
  57. package/dist/core/code/engine/core/ingestion/call-extractors/configs/jvm.js +54 -0
  58. package/dist/core/code/engine/core/ingestion/call-extractors/configs/php.js +8 -0
  59. package/dist/core/code/engine/core/ingestion/call-extractors/configs/python.js +8 -0
  60. package/dist/core/code/engine/core/ingestion/call-extractors/configs/ruby.js +8 -0
  61. package/dist/core/code/engine/core/ingestion/call-extractors/configs/rust.js +8 -0
  62. package/dist/core/code/engine/core/ingestion/call-extractors/configs/swift.js +8 -0
  63. package/dist/core/code/engine/core/ingestion/call-extractors/configs/typescript-javascript.js +11 -0
  64. package/dist/core/code/engine/core/ingestion/call-extractors/generic.js +62 -0
  65. package/dist/core/code/engine/core/ingestion/call-processor.js +503 -0
  66. package/dist/core/code/engine/core/ingestion/call-routing.js +98 -0
  67. package/dist/core/code/engine/core/ingestion/call-types.js +3 -0
  68. package/dist/core/code/engine/core/ingestion/cfg/callee-cell-format.js +45 -0
  69. package/dist/core/code/engine/core/ingestion/cfg/cfg-builder.js +202 -0
  70. package/dist/core/code/engine/core/ingestion/cfg/collect.js +81 -0
  71. package/dist/core/code/engine/core/ingestion/cfg/control-dependence.js +185 -0
  72. package/dist/core/code/engine/core/ingestion/cfg/control-flow-context.js +130 -0
  73. package/dist/core/code/engine/core/ingestion/cfg/emit.js +646 -0
  74. package/dist/core/code/engine/core/ingestion/cfg/post-dominators.js +182 -0
  75. package/dist/core/code/engine/core/ingestion/cfg/reaching-def-reason-codec.js +139 -0
  76. package/dist/core/code/engine/core/ingestion/cfg/reaching-defs-graph.js +322 -0
  77. package/dist/core/code/engine/core/ingestion/cfg/reaching-defs.js +792 -0
  78. package/dist/core/code/engine/core/ingestion/cfg/synthetic-escape.js +305 -0
  79. package/dist/core/code/engine/core/ingestion/cfg/traversal-result.js +6 -0
  80. package/dist/core/code/engine/core/ingestion/cfg/types.js +14 -0
  81. package/dist/core/code/engine/core/ingestion/cfg/visitors/c-cpp-harvest.js +545 -0
  82. package/dist/core/code/engine/core/ingestion/cfg/visitors/c-cpp.js +590 -0
  83. package/dist/core/code/engine/core/ingestion/cfg/visitors/call-site-harvest.js +356 -0
  84. package/dist/core/code/engine/core/ingestion/cfg/visitors/csharp-harvest.js +593 -0
  85. package/dist/core/code/engine/core/ingestion/cfg/visitors/csharp.js +871 -0
  86. package/dist/core/code/engine/core/ingestion/cfg/visitors/dart-harvest.js +874 -0
  87. package/dist/core/code/engine/core/ingestion/cfg/visitors/dart.js +840 -0
  88. package/dist/core/code/engine/core/ingestion/cfg/visitors/go-harvest.js +625 -0
  89. package/dist/core/code/engine/core/ingestion/cfg/visitors/go.js +642 -0
  90. package/dist/core/code/engine/core/ingestion/cfg/visitors/java-harvest.js +517 -0
  91. package/dist/core/code/engine/core/ingestion/cfg/visitors/java.js +816 -0
  92. package/dist/core/code/engine/core/ingestion/cfg/visitors/kotlin-harvest.js +723 -0
  93. package/dist/core/code/engine/core/ingestion/cfg/visitors/kotlin.js +813 -0
  94. package/dist/core/code/engine/core/ingestion/cfg/visitors/php-harvest.js +630 -0
  95. package/dist/core/code/engine/core/ingestion/cfg/visitors/php.js +725 -0
  96. package/dist/core/code/engine/core/ingestion/cfg/visitors/python-harvest.js +776 -0
  97. package/dist/core/code/engine/core/ingestion/cfg/visitors/python.js +562 -0
  98. package/dist/core/code/engine/core/ingestion/cfg/visitors/ruby-harvest.js +591 -0
  99. package/dist/core/code/engine/core/ingestion/cfg/visitors/ruby.js +760 -0
  100. package/dist/core/code/engine/core/ingestion/cfg/visitors/rust-harvest.js +877 -0
  101. package/dist/core/code/engine/core/ingestion/cfg/visitors/rust.js +562 -0
  102. package/dist/core/code/engine/core/ingestion/cfg/visitors/scope-tree-harvest.js +120 -0
  103. package/dist/core/code/engine/core/ingestion/cfg/visitors/swift-harvest.js +683 -0
  104. package/dist/core/code/engine/core/ingestion/cfg/visitors/swift.js +791 -0
  105. package/dist/core/code/engine/core/ingestion/cfg/visitors/typescript-harvest.js +1060 -0
  106. package/dist/core/code/engine/core/ingestion/cfg/visitors/typescript.js +587 -0
  107. package/dist/core/code/engine/core/ingestion/class-extractors/configs/c-cpp.js +77 -0
  108. package/dist/core/code/engine/core/ingestion/class-extractors/configs/csharp.js +24 -0
  109. package/dist/core/code/engine/core/ingestion/class-extractors/configs/dart.js +10 -0
  110. package/dist/core/code/engine/core/ingestion/class-extractors/configs/go.js +28 -0
  111. package/dist/core/code/engine/core/ingestion/class-extractors/configs/jvm.js +67 -0
  112. package/dist/core/code/engine/core/ingestion/class-extractors/configs/php.js +10 -0
  113. package/dist/core/code/engine/core/ingestion/class-extractors/configs/python.js +10 -0
  114. package/dist/core/code/engine/core/ingestion/class-extractors/configs/ruby.js +13 -0
  115. package/dist/core/code/engine/core/ingestion/class-extractors/configs/rust.js +10 -0
  116. package/dist/core/code/engine/core/ingestion/class-extractors/configs/swift.js +21 -0
  117. package/dist/core/code/engine/core/ingestion/class-extractors/configs/typescript-javascript.js +31 -0
  118. package/dist/core/code/engine/core/ingestion/class-extractors/generic.js +144 -0
  119. package/dist/core/code/engine/core/ingestion/class-types.js +2 -0
  120. package/dist/core/code/engine/core/ingestion/cluster-enricher.js +174 -0
  121. package/dist/core/code/engine/core/ingestion/community-processor.js +604 -0
  122. package/dist/core/code/engine/core/ingestion/constants.js +26 -0
  123. package/dist/core/code/engine/core/ingestion/cpp-ue-preprocessor.js +263 -0
  124. package/dist/core/code/engine/core/ingestion/csharp-namespace-gate.js +133 -0
  125. package/dist/core/code/engine/core/ingestion/di-extractors/index.js +38 -0
  126. package/dist/core/code/engine/core/ingestion/di-extractors/spring.js +310 -0
  127. package/dist/core/code/engine/core/ingestion/emit-references.js +244 -0
  128. package/dist/core/code/engine/core/ingestion/entry-point-scoring.js +201 -0
  129. package/dist/core/code/engine/core/ingestion/export-detection.js +244 -0
  130. package/dist/core/code/engine/core/ingestion/field-extractor.js +29 -0
  131. package/dist/core/code/engine/core/ingestion/field-extractors/configs/c-cpp.js +107 -0
  132. package/dist/core/code/engine/core/ingestion/field-extractors/configs/csharp.js +124 -0
  133. package/dist/core/code/engine/core/ingestion/field-extractors/configs/dart.js +99 -0
  134. package/dist/core/code/engine/core/ingestion/field-extractors/configs/go.js +102 -0
  135. package/dist/core/code/engine/core/ingestion/field-extractors/configs/helpers.js +198 -0
  136. package/dist/core/code/engine/core/ingestion/field-extractors/configs/jvm.js +172 -0
  137. package/dist/core/code/engine/core/ingestion/field-extractors/configs/php.js +67 -0
  138. package/dist/core/code/engine/core/ingestion/field-extractors/configs/python.js +94 -0
  139. package/dist/core/code/engine/core/ingestion/field-extractors/configs/ruby.js +79 -0
  140. package/dist/core/code/engine/core/ingestion/field-extractors/configs/rust.js +55 -0
  141. package/dist/core/code/engine/core/ingestion/field-extractors/configs/swift.js +93 -0
  142. package/dist/core/code/engine/core/ingestion/field-extractors/configs/typescript-javascript.js +59 -0
  143. package/dist/core/code/engine/core/ingestion/field-extractors/generic.js +147 -0
  144. package/dist/core/code/engine/core/ingestion/field-extractors/typescript.js +266 -0
  145. package/dist/core/code/engine/core/ingestion/field-types.js +3 -0
  146. package/dist/core/code/engine/core/ingestion/filesystem-walker.js +136 -0
  147. package/dist/core/code/engine/core/ingestion/finalize-orchestrator.js +159 -0
  148. package/dist/core/code/engine/core/ingestion/framework-detection.js +432 -0
  149. package/dist/core/code/engine/core/ingestion/frameworks/spring/analysis-features.js +38 -0
  150. package/dist/core/code/engine/core/ingestion/frameworks/spring/annotation-arguments.js +234 -0
  151. package/dist/core/code/engine/core/ingestion/frameworks/spring/aop-candidates.js +88 -0
  152. package/dist/core/code/engine/core/ingestion/frameworks/spring/aop.js +487 -0
  153. package/dist/core/code/engine/core/ingestion/frameworks/spring/auto-configuration.js +21 -0
  154. package/dist/core/code/engine/core/ingestion/frameworks/spring/bean-candidates.js +189 -0
  155. package/dist/core/code/engine/core/ingestion/frameworks/spring/bean-catalog.js +32 -0
  156. package/dist/core/code/engine/core/ingestion/frameworks/spring/bean-factories.js +73 -0
  157. package/dist/core/code/engine/core/ingestion/frameworks/spring/conditionals.js +323 -0
  158. package/dist/core/code/engine/core/ingestion/frameworks/spring/config-bindings.js +119 -0
  159. package/dist/core/code/engine/core/ingestion/frameworks/spring/di-metadata.js +385 -0
  160. package/dist/core/code/engine/core/ingestion/frameworks/spring/resource-injection.js +96 -0
  161. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/c-cpp.js +17 -0
  162. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/csharp.js +46 -0
  163. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/dart.js +59 -0
  164. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/go.js +30 -0
  165. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/jvm.js +73 -0
  166. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/php.js +19 -0
  167. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/python.js +45 -0
  168. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/ruby.js +20 -0
  169. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/rust.js +58 -0
  170. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/swift.js +94 -0
  171. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/typescript-javascript.js +26 -0
  172. package/dist/core/code/engine/core/ingestion/import-resolvers/csharp.js +128 -0
  173. package/dist/core/code/engine/core/ingestion/import-resolvers/go.js +50 -0
  174. package/dist/core/code/engine/core/ingestion/import-resolvers/jvm.js +112 -0
  175. package/dist/core/code/engine/core/ingestion/import-resolvers/php.js +80 -0
  176. package/dist/core/code/engine/core/ingestion/import-resolvers/python.js +75 -0
  177. package/dist/core/code/engine/core/ingestion/import-resolvers/resolver-factory.js +36 -0
  178. package/dist/core/code/engine/core/ingestion/import-resolvers/ruby.js +20 -0
  179. package/dist/core/code/engine/core/ingestion/import-resolvers/rust.js +79 -0
  180. package/dist/core/code/engine/core/ingestion/import-resolvers/standard.js +180 -0
  181. package/dist/core/code/engine/core/ingestion/import-resolvers/types.js +7 -0
  182. package/dist/core/code/engine/core/ingestion/import-resolvers/utils.js +153 -0
  183. package/dist/core/code/engine/core/ingestion/import-target-adapter.js +99 -0
  184. package/dist/core/code/engine/core/ingestion/language-config.js +391 -0
  185. package/dist/core/code/engine/core/ingestion/language-provider.js +25 -0
  186. package/dist/core/code/engine/core/ingestion/languages/c/arity-metadata.js +98 -0
  187. package/dist/core/code/engine/core/ingestion/languages/c/arity.js +21 -0
  188. package/dist/core/code/engine/core/ingestion/languages/c/capture-side-channel.js +69 -0
  189. package/dist/core/code/engine/core/ingestion/languages/c/captures.js +189 -0
  190. package/dist/core/code/engine/core/ingestion/languages/c/header-scan.js +58 -0
  191. package/dist/core/code/engine/core/ingestion/languages/c/import-decomposer.js +68 -0
  192. package/dist/core/code/engine/core/ingestion/languages/c/import-target.js +103 -0
  193. package/dist/core/code/engine/core/ingestion/languages/c/index.js +33 -0
  194. package/dist/core/code/engine/core/ingestion/languages/c/interpret.js +53 -0
  195. package/dist/core/code/engine/core/ingestion/languages/c/merge-bindings.js +26 -0
  196. package/dist/core/code/engine/core/ingestion/languages/c/query.js +210 -0
  197. package/dist/core/code/engine/core/ingestion/languages/c/scope-resolver.js +112 -0
  198. package/dist/core/code/engine/core/ingestion/languages/c/simple-hooks.js +24 -0
  199. package/dist/core/code/engine/core/ingestion/languages/c/static-linkage.js +109 -0
  200. package/dist/core/code/engine/core/ingestion/languages/c-cpp.js +506 -0
  201. package/dist/core/code/engine/core/ingestion/languages/cpp/adl.js +804 -0
  202. package/dist/core/code/engine/core/ingestion/languages/cpp/arity-metadata.js +258 -0
  203. package/dist/core/code/engine/core/ingestion/languages/cpp/arity.js +37 -0
  204. package/dist/core/code/engine/core/ingestion/languages/cpp/capture-side-channel.js +89 -0
  205. package/dist/core/code/engine/core/ingestion/languages/cpp/captures.js +1975 -0
  206. package/dist/core/code/engine/core/ingestion/languages/cpp/constraint-extractor.js +311 -0
  207. package/dist/core/code/engine/core/ingestion/languages/cpp/constraint-filter.js +210 -0
  208. package/dist/core/code/engine/core/ingestion/languages/cpp/conversion-rank.js +163 -0
  209. package/dist/core/code/engine/core/ingestion/languages/cpp/file-local-linkage.js +327 -0
  210. package/dist/core/code/engine/core/ingestion/languages/cpp/header-scan.js +53 -0
  211. package/dist/core/code/engine/core/ingestion/languages/cpp/import-decomposer.js +134 -0
  212. package/dist/core/code/engine/core/ingestion/languages/cpp/import-target.js +16 -0
  213. package/dist/core/code/engine/core/ingestion/languages/cpp/index.js +33 -0
  214. package/dist/core/code/engine/core/ingestion/languages/cpp/inline-namespaces.js +379 -0
  215. package/dist/core/code/engine/core/ingestion/languages/cpp/interpret.js +239 -0
  216. package/dist/core/code/engine/core/ingestion/languages/cpp/member-lookup.js +470 -0
  217. package/dist/core/code/engine/core/ingestion/languages/cpp/merge-bindings.js +32 -0
  218. package/dist/core/code/engine/core/ingestion/languages/cpp/query.js +763 -0
  219. package/dist/core/code/engine/core/ingestion/languages/cpp/range-bindings.js +230 -0
  220. package/dist/core/code/engine/core/ingestion/languages/cpp/scope-resolver.js +354 -0
  221. package/dist/core/code/engine/core/ingestion/languages/cpp/simple-hooks.js +67 -0
  222. package/dist/core/code/engine/core/ingestion/languages/cpp/two-phase-lookup.js +348 -0
  223. package/dist/core/code/engine/core/ingestion/languages/cpp/type-classifier.js +56 -0
  224. package/dist/core/code/engine/core/ingestion/languages/cpp/user-defined-conversions.js +128 -0
  225. package/dist/core/code/engine/core/ingestion/languages/csharp/accessor-unwrap.js +67 -0
  226. package/dist/core/code/engine/core/ingestion/languages/csharp/arity-metadata.js +49 -0
  227. package/dist/core/code/engine/core/ingestion/languages/csharp/arity.js +40 -0
  228. package/dist/core/code/engine/core/ingestion/languages/csharp/cache-stats.js +32 -0
  229. package/dist/core/code/engine/core/ingestion/languages/csharp/captures.js +557 -0
  230. package/dist/core/code/engine/core/ingestion/languages/csharp/import-decomposer.js +96 -0
  231. package/dist/core/code/engine/core/ingestion/languages/csharp/import-target.js +176 -0
  232. package/dist/core/code/engine/core/ingestion/languages/csharp/index.js +95 -0
  233. package/dist/core/code/engine/core/ingestion/languages/csharp/interpret.js +150 -0
  234. package/dist/core/code/engine/core/ingestion/languages/csharp/merge-bindings.js +58 -0
  235. package/dist/core/code/engine/core/ingestion/languages/csharp/namespace-siblings.js +708 -0
  236. package/dist/core/code/engine/core/ingestion/languages/csharp/qualified-type-names.js +62 -0
  237. package/dist/core/code/engine/core/ingestion/languages/csharp/query.js +578 -0
  238. package/dist/core/code/engine/core/ingestion/languages/csharp/receiver-binding.js +142 -0
  239. package/dist/core/code/engine/core/ingestion/languages/csharp/resolution-config.js +18 -0
  240. package/dist/core/code/engine/core/ingestion/languages/csharp/scope-resolver.js +84 -0
  241. package/dist/core/code/engine/core/ingestion/languages/csharp/simple-hooks.js +81 -0
  242. package/dist/core/code/engine/core/ingestion/languages/csharp.js +204 -0
  243. package/dist/core/code/engine/core/ingestion/languages/dart/arity-metadata.js +38 -0
  244. package/dist/core/code/engine/core/ingestion/languages/dart/arity.js +34 -0
  245. package/dist/core/code/engine/core/ingestion/languages/dart/built-ins.js +37 -0
  246. package/dist/core/code/engine/core/ingestion/languages/dart/cache-stats.js +30 -0
  247. package/dist/core/code/engine/core/ingestion/languages/dart/captures.js +1096 -0
  248. package/dist/core/code/engine/core/ingestion/languages/dart/expand-wildcards.js +34 -0
  249. package/dist/core/code/engine/core/ingestion/languages/dart/extension-type-preprocess.js +33 -0
  250. package/dist/core/code/engine/core/ingestion/languages/dart/import-target.js +68 -0
  251. package/dist/core/code/engine/core/ingestion/languages/dart/index.js +45 -0
  252. package/dist/core/code/engine/core/ingestion/languages/dart/interpret.js +101 -0
  253. package/dist/core/code/engine/core/ingestion/languages/dart/merge-bindings.js +42 -0
  254. package/dist/core/code/engine/core/ingestion/languages/dart/query.js +246 -0
  255. package/dist/core/code/engine/core/ingestion/languages/dart/receiver-binding.js +90 -0
  256. package/dist/core/code/engine/core/ingestion/languages/dart/scope-resolver.js +197 -0
  257. package/dist/core/code/engine/core/ingestion/languages/dart/signature-bindings.js +54 -0
  258. package/dist/core/code/engine/core/ingestion/languages/dart/simple-hooks.js +61 -0
  259. package/dist/core/code/engine/core/ingestion/languages/dart.js +138 -0
  260. package/dist/core/code/engine/core/ingestion/languages/go/arity-metadata.js +71 -0
  261. package/dist/core/code/engine/core/ingestion/languages/go/arity.js +17 -0
  262. package/dist/core/code/engine/core/ingestion/languages/go/cache-stats.js +21 -0
  263. package/dist/core/code/engine/core/ingestion/languages/go/captures.js +492 -0
  264. package/dist/core/code/engine/core/ingestion/languages/go/expand-wildcards.js +97 -0
  265. package/dist/core/code/engine/core/ingestion/languages/go/generic-type-parameters.js +146 -0
  266. package/dist/core/code/engine/core/ingestion/languages/go/import-decomposer.js +47 -0
  267. package/dist/core/code/engine/core/ingestion/languages/go/import-target.js +70 -0
  268. package/dist/core/code/engine/core/ingestion/languages/go/index.js +39 -0
  269. package/dist/core/code/engine/core/ingestion/languages/go/interface-impls.js +955 -0
  270. package/dist/core/code/engine/core/ingestion/languages/go/interpret.js +177 -0
  271. package/dist/core/code/engine/core/ingestion/languages/go/merge-bindings.js +21 -0
  272. package/dist/core/code/engine/core/ingestion/languages/go/method-owners.js +131 -0
  273. package/dist/core/code/engine/core/ingestion/languages/go/namespace-mirror.js +56 -0
  274. package/dist/core/code/engine/core/ingestion/languages/go/package-clause.js +79 -0
  275. package/dist/core/code/engine/core/ingestion/languages/go/package-siblings.js +83 -0
  276. package/dist/core/code/engine/core/ingestion/languages/go/query.js +298 -0
  277. package/dist/core/code/engine/core/ingestion/languages/go/range-binding.js +127 -0
  278. package/dist/core/code/engine/core/ingestion/languages/go/receiver-binding.js +24 -0
  279. package/dist/core/code/engine/core/ingestion/languages/go/scope-resolver.js +75 -0
  280. package/dist/core/code/engine/core/ingestion/languages/go/simple-hooks.js +31 -0
  281. package/dist/core/code/engine/core/ingestion/languages/go/type-binding.js +279 -0
  282. package/dist/core/code/engine/core/ingestion/languages/go.js +160 -0
  283. package/dist/core/code/engine/core/ingestion/languages/index.js +66 -0
  284. package/dist/core/code/engine/core/ingestion/languages/java/analysis-features.js +16 -0
  285. package/dist/core/code/engine/core/ingestion/languages/java/arity-metadata.js +43 -0
  286. package/dist/core/code/engine/core/ingestion/languages/java/arity.js +27 -0
  287. package/dist/core/code/engine/core/ingestion/languages/java/cache-stats.js +32 -0
  288. package/dist/core/code/engine/core/ingestion/languages/java/capture-side-channel.js +123 -0
  289. package/dist/core/code/engine/core/ingestion/languages/java/captures.js +791 -0
  290. package/dist/core/code/engine/core/ingestion/languages/java/import-decomposer.js +88 -0
  291. package/dist/core/code/engine/core/ingestion/languages/java/import-target.js +103 -0
  292. package/dist/core/code/engine/core/ingestion/languages/java/index.js +43 -0
  293. package/dist/core/code/engine/core/ingestion/languages/java/interpret.js +146 -0
  294. package/dist/core/code/engine/core/ingestion/languages/java/merge-bindings.js +43 -0
  295. package/dist/core/code/engine/core/ingestion/languages/java/package-facts.js +16 -0
  296. package/dist/core/code/engine/core/ingestion/languages/java/package-siblings.js +11 -0
  297. package/dist/core/code/engine/core/ingestion/languages/java/query.js +319 -0
  298. package/dist/core/code/engine/core/ingestion/languages/java/receiver-binding.js +98 -0
  299. package/dist/core/code/engine/core/ingestion/languages/java/scope-resolver.js +213 -0
  300. package/dist/core/code/engine/core/ingestion/languages/java/simple-hooks.js +39 -0
  301. package/dist/core/code/engine/core/ingestion/languages/java/spring-aop.js +53 -0
  302. package/dist/core/code/engine/core/ingestion/languages/java/spring-bean-metadata.js +11 -0
  303. package/dist/core/code/engine/core/ingestion/languages/java/spring-conditionals.js +52 -0
  304. package/dist/core/code/engine/core/ingestion/languages/java/spring-config-bindings.js +222 -0
  305. package/dist/core/code/engine/core/ingestion/languages/java/spring-di.js +165 -0
  306. package/dist/core/code/engine/core/ingestion/languages/java.js +192 -0
  307. package/dist/core/code/engine/core/ingestion/languages/javascript/arity.js +15 -0
  308. package/dist/core/code/engine/core/ingestion/languages/javascript/captures.js +1122 -0
  309. package/dist/core/code/engine/core/ingestion/languages/javascript/import-target.js +56 -0
  310. package/dist/core/code/engine/core/ingestion/languages/javascript/index.js +109 -0
  311. package/dist/core/code/engine/core/ingestion/languages/javascript/interpret.js +45 -0
  312. package/dist/core/code/engine/core/ingestion/languages/javascript/merge-bindings.js +21 -0
  313. package/dist/core/code/engine/core/ingestion/languages/javascript/query.js +659 -0
  314. package/dist/core/code/engine/core/ingestion/languages/javascript/scope-resolver.js +78 -0
  315. package/dist/core/code/engine/core/ingestion/languages/javascript/simple-hooks.js +44 -0
  316. package/dist/core/code/engine/core/ingestion/languages/jvm/package-facts.js +46 -0
  317. package/dist/core/code/engine/core/ingestion/languages/jvm/package-siblings.js +200 -0
  318. package/dist/core/code/engine/core/ingestion/languages/kotlin/arity-metadata.js +23 -0
  319. package/dist/core/code/engine/core/ingestion/languages/kotlin/arity.js +18 -0
  320. package/dist/core/code/engine/core/ingestion/languages/kotlin/cache-stats.js +21 -0
  321. package/dist/core/code/engine/core/ingestion/languages/kotlin/capture-side-channel.js +160 -0
  322. package/dist/core/code/engine/core/ingestion/languages/kotlin/captures.js +1262 -0
  323. package/dist/core/code/engine/core/ingestion/languages/kotlin/companion-scopes.js +72 -0
  324. package/dist/core/code/engine/core/ingestion/languages/kotlin/import-decomposer.js +40 -0
  325. package/dist/core/code/engine/core/ingestion/languages/kotlin/import-target.js +135 -0
  326. package/dist/core/code/engine/core/ingestion/languages/kotlin/index.js +26 -0
  327. package/dist/core/code/engine/core/ingestion/languages/kotlin/interpret.js +75 -0
  328. package/dist/core/code/engine/core/ingestion/languages/kotlin/merge-bindings.js +28 -0
  329. package/dist/core/code/engine/core/ingestion/languages/kotlin/owners.js +134 -0
  330. package/dist/core/code/engine/core/ingestion/languages/kotlin/package-facts.js +16 -0
  331. package/dist/core/code/engine/core/ingestion/languages/kotlin/package-siblings.js +11 -0
  332. package/dist/core/code/engine/core/ingestion/languages/kotlin/query.js +243 -0
  333. package/dist/core/code/engine/core/ingestion/languages/kotlin/receiver-binding.js +103 -0
  334. package/dist/core/code/engine/core/ingestion/languages/kotlin/scope-resolver.js +207 -0
  335. package/dist/core/code/engine/core/ingestion/languages/kotlin/simple-hooks.js +42 -0
  336. package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-aop.js +68 -0
  337. package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-bean-metadata.js +11 -0
  338. package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-conditionals.js +53 -0
  339. package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-di.js +304 -0
  340. package/dist/core/code/engine/core/ingestion/languages/kotlin.js +189 -0
  341. package/dist/core/code/engine/core/ingestion/languages/php/arity-metadata.js +66 -0
  342. package/dist/core/code/engine/core/ingestion/languages/php/arity.js +43 -0
  343. package/dist/core/code/engine/core/ingestion/languages/php/cache-stats.js +32 -0
  344. package/dist/core/code/engine/core/ingestion/languages/php/captures.js +1166 -0
  345. package/dist/core/code/engine/core/ingestion/languages/php/import-decomposer.js +238 -0
  346. package/dist/core/code/engine/core/ingestion/languages/php/import-target.js +213 -0
  347. package/dist/core/code/engine/core/ingestion/languages/php/index.js +85 -0
  348. package/dist/core/code/engine/core/ingestion/languages/php/interpret.js +256 -0
  349. package/dist/core/code/engine/core/ingestion/languages/php/merge-bindings.js +50 -0
  350. package/dist/core/code/engine/core/ingestion/languages/php/namespace-siblings.js +353 -0
  351. package/dist/core/code/engine/core/ingestion/languages/php/query.js +391 -0
  352. package/dist/core/code/engine/core/ingestion/languages/php/receiver-binding.js +135 -0
  353. package/dist/core/code/engine/core/ingestion/languages/php/scope-resolver.js +361 -0
  354. package/dist/core/code/engine/core/ingestion/languages/php/simple-hooks.js +116 -0
  355. package/dist/core/code/engine/core/ingestion/languages/php.js +302 -0
  356. package/dist/core/code/engine/core/ingestion/languages/python/arity-metadata.js +49 -0
  357. package/dist/core/code/engine/core/ingestion/languages/python/arity.js +41 -0
  358. package/dist/core/code/engine/core/ingestion/languages/python/cache-stats.js +34 -0
  359. package/dist/core/code/engine/core/ingestion/languages/python/captures.js +299 -0
  360. package/dist/core/code/engine/core/ingestion/languages/python/depends-references.js +68 -0
  361. package/dist/core/code/engine/core/ingestion/languages/python/import-decomposer.js +115 -0
  362. package/dist/core/code/engine/core/ingestion/languages/python/import-target.js +440 -0
  363. package/dist/core/code/engine/core/ingestion/languages/python/index-stats.js +30 -0
  364. package/dist/core/code/engine/core/ingestion/languages/python/index.js +96 -0
  365. package/dist/core/code/engine/core/ingestion/languages/python/interpret.js +430 -0
  366. package/dist/core/code/engine/core/ingestion/languages/python/merge-bindings.js +47 -0
  367. package/dist/core/code/engine/core/ingestion/languages/python/query.js +323 -0
  368. package/dist/core/code/engine/core/ingestion/languages/python/receiver-binding.js +310 -0
  369. package/dist/core/code/engine/core/ingestion/languages/python/scope-resolver.js +80 -0
  370. package/dist/core/code/engine/core/ingestion/languages/python/simple-hooks.js +53 -0
  371. package/dist/core/code/engine/core/ingestion/languages/python.js +140 -0
  372. package/dist/core/code/engine/core/ingestion/languages/ruby/arity.js +41 -0
  373. package/dist/core/code/engine/core/ingestion/languages/ruby/cache-stats.js +21 -0
  374. package/dist/core/code/engine/core/ingestion/languages/ruby/captures.js +864 -0
  375. package/dist/core/code/engine/core/ingestion/languages/ruby/import-target.js +88 -0
  376. package/dist/core/code/engine/core/ingestion/languages/ruby/index.js +29 -0
  377. package/dist/core/code/engine/core/ingestion/languages/ruby/interpret.js +115 -0
  378. package/dist/core/code/engine/core/ingestion/languages/ruby/merge-bindings.js +21 -0
  379. package/dist/core/code/engine/core/ingestion/languages/ruby/query.js +349 -0
  380. package/dist/core/code/engine/core/ingestion/languages/ruby/receiver-binding.js +70 -0
  381. package/dist/core/code/engine/core/ingestion/languages/ruby/scope-resolver.js +263 -0
  382. package/dist/core/code/engine/core/ingestion/languages/ruby/simple-hooks.js +68 -0
  383. package/dist/core/code/engine/core/ingestion/languages/ruby.js +215 -0
  384. package/dist/core/code/engine/core/ingestion/languages/rust/arity.js +16 -0
  385. package/dist/core/code/engine/core/ingestion/languages/rust/cache-stats.js +21 -0
  386. package/dist/core/code/engine/core/ingestion/languages/rust/captures.js +304 -0
  387. package/dist/core/code/engine/core/ingestion/languages/rust/import-decomposer.js +167 -0
  388. package/dist/core/code/engine/core/ingestion/languages/rust/import-target.js +108 -0
  389. package/dist/core/code/engine/core/ingestion/languages/rust/index.js +29 -0
  390. package/dist/core/code/engine/core/ingestion/languages/rust/interpret.js +201 -0
  391. package/dist/core/code/engine/core/ingestion/languages/rust/merge-bindings.js +21 -0
  392. package/dist/core/code/engine/core/ingestion/languages/rust/method-owners.js +76 -0
  393. package/dist/core/code/engine/core/ingestion/languages/rust/module-path.js +222 -0
  394. package/dist/core/code/engine/core/ingestion/languages/rust/qualified-call.js +482 -0
  395. package/dist/core/code/engine/core/ingestion/languages/rust/query.js +280 -0
  396. package/dist/core/code/engine/core/ingestion/languages/rust/range-binding.js +687 -0
  397. package/dist/core/code/engine/core/ingestion/languages/rust/receiver-binding.js +148 -0
  398. package/dist/core/code/engine/core/ingestion/languages/rust/scope-resolver.js +151 -0
  399. package/dist/core/code/engine/core/ingestion/languages/rust/simple-hooks.js +32 -0
  400. package/dist/core/code/engine/core/ingestion/languages/rust.js +183 -0
  401. package/dist/core/code/engine/core/ingestion/languages/swift/arity-metadata.js +44 -0
  402. package/dist/core/code/engine/core/ingestion/languages/swift/arity.js +45 -0
  403. package/dist/core/code/engine/core/ingestion/languages/swift/base-type.js +30 -0
  404. package/dist/core/code/engine/core/ingestion/languages/swift/cache-stats.js +32 -0
  405. package/dist/core/code/engine/core/ingestion/languages/swift/captures.js +594 -0
  406. package/dist/core/code/engine/core/ingestion/languages/swift/conditional-directive-preprocess.js +256 -0
  407. package/dist/core/code/engine/core/ingestion/languages/swift/implicit-imports.js +60 -0
  408. package/dist/core/code/engine/core/ingestion/languages/swift/import-decomposer.js +87 -0
  409. package/dist/core/code/engine/core/ingestion/languages/swift/import-target.js +84 -0
  410. package/dist/core/code/engine/core/ingestion/languages/swift/index.js +56 -0
  411. package/dist/core/code/engine/core/ingestion/languages/swift/interpret.js +93 -0
  412. package/dist/core/code/engine/core/ingestion/languages/swift/merge-bindings.js +51 -0
  413. package/dist/core/code/engine/core/ingestion/languages/swift/query.js +226 -0
  414. package/dist/core/code/engine/core/ingestion/languages/swift/receiver-binding.js +169 -0
  415. package/dist/core/code/engine/core/ingestion/languages/swift/scope-resolver.js +192 -0
  416. package/dist/core/code/engine/core/ingestion/languages/swift/sibling-type-bindings.js +68 -0
  417. package/dist/core/code/engine/core/ingestion/languages/swift/signature-bindings.js +69 -0
  418. package/dist/core/code/engine/core/ingestion/languages/swift/simple-hooks.js +65 -0
  419. package/dist/core/code/engine/core/ingestion/languages/swift/target-grouping.js +97 -0
  420. package/dist/core/code/engine/core/ingestion/languages/swift/target-siblings.js +74 -0
  421. package/dist/core/code/engine/core/ingestion/languages/swift.js +246 -0
  422. package/dist/core/code/engine/core/ingestion/languages/typescript/arity-metadata.js +106 -0
  423. package/dist/core/code/engine/core/ingestion/languages/typescript/arity.js +57 -0
  424. package/dist/core/code/engine/core/ingestion/languages/typescript/array-callback.js +58 -0
  425. package/dist/core/code/engine/core/ingestion/languages/typescript/cache-stats.js +34 -0
  426. package/dist/core/code/engine/core/ingestion/languages/typescript/captures.js +956 -0
  427. package/dist/core/code/engine/core/ingestion/languages/typescript/cjs-export-assignment.js +535 -0
  428. package/dist/core/code/engine/core/ingestion/languages/typescript/cjs-module-exports.js +196 -0
  429. package/dist/core/code/engine/core/ingestion/languages/typescript/import-decomposer.js +374 -0
  430. package/dist/core/code/engine/core/ingestion/languages/typescript/import-target.js +65 -0
  431. package/dist/core/code/engine/core/ingestion/languages/typescript/index.js +108 -0
  432. package/dist/core/code/engine/core/ingestion/languages/typescript/interpret.js +344 -0
  433. package/dist/core/code/engine/core/ingestion/languages/typescript/merge-bindings.js +161 -0
  434. package/dist/core/code/engine/core/ingestion/languages/typescript/nuxt-auto-imports.js +325 -0
  435. package/dist/core/code/engine/core/ingestion/languages/typescript/query.js +1328 -0
  436. package/dist/core/code/engine/core/ingestion/languages/typescript/receiver-binding.js +201 -0
  437. package/dist/core/code/engine/core/ingestion/languages/typescript/scope-resolver.js +293 -0
  438. package/dist/core/code/engine/core/ingestion/languages/typescript/simple-hooks.js +139 -0
  439. package/dist/core/code/engine/core/ingestion/languages/typescript.js +455 -0
  440. package/dist/core/code/engine/core/ingestion/languages/vue/captures.js +70 -0
  441. package/dist/core/code/engine/core/ingestion/languages/vue/import-target.js +61 -0
  442. package/dist/core/code/engine/core/ingestion/languages/vue/index.js +55 -0
  443. package/dist/core/code/engine/core/ingestion/languages/vue/scope-resolver.js +295 -0
  444. package/dist/core/code/engine/core/ingestion/languages/vue.js +96 -0
  445. package/dist/core/code/engine/core/ingestion/local-symbol-pruner.js +68 -0
  446. package/dist/core/code/engine/core/ingestion/method-extractors/configs/c-cpp.js +387 -0
  447. package/dist/core/code/engine/core/ingestion/method-extractors/configs/csharp.js +290 -0
  448. package/dist/core/code/engine/core/ingestion/method-extractors/configs/dart.js +392 -0
  449. package/dist/core/code/engine/core/ingestion/method-extractors/configs/go.js +179 -0
  450. package/dist/core/code/engine/core/ingestion/method-extractors/configs/jvm.js +350 -0
  451. package/dist/core/code/engine/core/ingestion/method-extractors/configs/php.js +306 -0
  452. package/dist/core/code/engine/core/ingestion/method-extractors/configs/python.js +312 -0
  453. package/dist/core/code/engine/core/ingestion/method-extractors/configs/ruby.js +289 -0
  454. package/dist/core/code/engine/core/ingestion/method-extractors/configs/rust.js +198 -0
  455. package/dist/core/code/engine/core/ingestion/method-extractors/configs/swift.js +286 -0
  456. package/dist/core/code/engine/core/ingestion/method-extractors/configs/typescript-javascript.js +341 -0
  457. package/dist/core/code/engine/core/ingestion/method-extractors/generic.js +209 -0
  458. package/dist/core/code/engine/core/ingestion/method-types.js +3 -0
  459. package/dist/core/code/engine/core/ingestion/model/field-registry.js +41 -0
  460. package/dist/core/code/engine/core/ingestion/model/index.js +52 -0
  461. package/dist/core/code/engine/core/ingestion/model/method-registry.js +138 -0
  462. package/dist/core/code/engine/core/ingestion/model/owned-members-lookup.js +46 -0
  463. package/dist/core/code/engine/core/ingestion/model/registration-table.js +234 -0
  464. package/dist/core/code/engine/core/ingestion/model/resolve.js +183 -0
  465. package/dist/core/code/engine/core/ingestion/model/scope-resolution-indexes.js +43 -0
  466. package/dist/core/code/engine/core/ingestion/model/semantic-model.js +179 -0
  467. package/dist/core/code/engine/core/ingestion/model/symbol-table.js +216 -0
  468. package/dist/core/code/engine/core/ingestion/model/type-registry.js +84 -0
  469. package/dist/core/code/engine/core/ingestion/mro-processor.js +709 -0
  470. package/dist/core/code/engine/core/ingestion/parsing-processor.js +312 -0
  471. package/dist/core/code/engine/core/ingestion/pipeline-phases/communities.js +69 -0
  472. package/dist/core/code/engine/core/ingestion/pipeline-phases/cross-file.js +71 -0
  473. package/dist/core/code/engine/core/ingestion/pipeline-phases/di.js +338 -0
  474. package/dist/core/code/engine/core/ingestion/pipeline-phases/http-api-calls.js +312 -0
  475. package/dist/core/code/engine/core/ingestion/pipeline-phases/index.js +54 -0
  476. package/dist/core/code/engine/core/ingestion/pipeline-phases/mro.js +40 -0
  477. package/dist/core/code/engine/core/ingestion/pipeline-phases/orm.js +78 -0
  478. package/dist/core/code/engine/core/ingestion/pipeline-phases/parse-impl.js +1286 -0
  479. package/dist/core/code/engine/core/ingestion/pipeline-phases/parse.js +41 -0
  480. package/dist/core/code/engine/core/ingestion/pipeline-phases/processes.js +193 -0
  481. package/dist/core/code/engine/core/ingestion/pipeline-phases/prune-local-symbols.js +29 -0
  482. package/dist/core/code/engine/core/ingestion/pipeline-phases/registry.js +52 -0
  483. package/dist/core/code/engine/core/ingestion/pipeline-phases/routes.js +409 -0
  484. package/dist/core/code/engine/core/ingestion/pipeline-phases/rpc-edges.js +301 -0
  485. package/dist/core/code/engine/core/ingestion/pipeline-phases/runner.js +207 -0
  486. package/dist/core/code/engine/core/ingestion/pipeline-phases/scan.js +49 -0
  487. package/dist/core/code/engine/core/ingestion/pipeline-phases/spring-aop.js +442 -0
  488. package/dist/core/code/engine/core/ingestion/pipeline-phases/spring-auto-configuration.js +264 -0
  489. package/dist/core/code/engine/core/ingestion/pipeline-phases/spring-config.js +440 -0
  490. package/dist/core/code/engine/core/ingestion/pipeline-phases/structure.js +38 -0
  491. package/dist/core/code/engine/core/ingestion/pipeline-phases/tools.js +89 -0
  492. package/dist/core/code/engine/core/ingestion/pipeline-phases/types.js +40 -0
  493. package/dist/core/code/engine/core/ingestion/pipeline.js +152 -0
  494. package/dist/core/code/engine/core/ingestion/process-processor.js +325 -0
  495. package/dist/core/code/engine/core/ingestion/resolve-references.js +205 -0
  496. package/dist/core/code/engine/core/ingestion/route-extractors/constant-resolver.js +135 -0
  497. package/dist/core/code/engine/core/ingestion/route-extractors/django-root-discovery.js +221 -0
  498. package/dist/core/code/engine/core/ingestion/route-extractors/django.js +428 -0
  499. package/dist/core/code/engine/core/ingestion/route-extractors/expo.js +39 -0
  500. package/dist/core/code/engine/core/ingestion/route-extractors/fastapi-router-bindings.js +264 -0
  501. package/dist/core/code/engine/core/ingestion/route-extractors/laravel.js +501 -0
  502. package/dist/core/code/engine/core/ingestion/route-extractors/middleware.js +175 -0
  503. package/dist/core/code/engine/core/ingestion/route-extractors/nextjs.js +81 -0
  504. package/dist/core/code/engine/core/ingestion/route-extractors/php.js +25 -0
  505. package/dist/core/code/engine/core/ingestion/route-extractors/python-const-resolver.js +307 -0
  506. package/dist/core/code/engine/core/ingestion/route-extractors/response-shapes.js +299 -0
  507. package/dist/core/code/engine/core/ingestion/route-extractors/route-path.js +71 -0
  508. package/dist/core/code/engine/core/ingestion/route-extractors/spring-shared.js +310 -0
  509. package/dist/core/code/engine/core/ingestion/route-extractors/spring.js +441 -0
  510. package/dist/core/code/engine/core/ingestion/scope-extractor-bridge.js +60 -0
  511. package/dist/core/code/engine/core/ingestion/scope-extractor.js +1373 -0
  512. package/dist/core/code/engine/core/ingestion/scope-resolution/contract/scope-resolver.js +282 -0
  513. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/callee-id-sink.js +72 -0
  514. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/edges.js +194 -0
  515. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/ids.js +472 -0
  516. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/imports-to-edges.js +49 -0
  517. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/method-dispatch.js +43 -0
  518. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/node-lookup.js +274 -0
  519. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/references-to-edges.js +93 -0
  520. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/callable-value-flow.js +1240 -0
  521. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/compound-receiver.js +1174 -0
  522. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/free-call-fallback.js +873 -0
  523. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/imported-return-types.js +226 -0
  524. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/mro.js +107 -0
  525. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/overload-narrowing.js +441 -0
  526. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/property-dispatch.js +122 -0
  527. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/receiver-bound-calls.js +1720 -0
  528. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/phase.js +395 -0
  529. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/reconcile-ownership.js +208 -0
  530. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/registry.js +49 -0
  531. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/run.js +632 -0
  532. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/validate-bindings-immutability.js +112 -0
  533. package/dist/core/code/engine/core/ingestion/scope-resolution/resolution-outcome.js +41 -0
  534. package/dist/core/code/engine/core/ingestion/scope-resolution/scope/namespace-targets.js +81 -0
  535. package/dist/core/code/engine/core/ingestion/scope-resolution/scope/walkers.js +1835 -0
  536. package/dist/core/code/engine/core/ingestion/scope-resolution/unresolved-receivers.js +242 -0
  537. package/dist/core/code/engine/core/ingestion/scope-resolution/utils/definition-id.js +22 -0
  538. package/dist/core/code/engine/core/ingestion/scope-resolution/workspace-index.js +151 -0
  539. package/dist/core/code/engine/core/ingestion/structure-processor.js +40 -0
  540. package/dist/core/code/engine/core/ingestion/tree-sitter-queries.js +2244 -0
  541. package/dist/core/code/engine/core/ingestion/ts-js-hoc-utils.js +115 -0
  542. package/dist/core/code/engine/core/ingestion/type-env.js +1136 -0
  543. package/dist/core/code/engine/core/ingestion/type-extractors/c-cpp.js +555 -0
  544. package/dist/core/code/engine/core/ingestion/type-extractors/csharp.js +570 -0
  545. package/dist/core/code/engine/core/ingestion/type-extractors/dart.js +372 -0
  546. package/dist/core/code/engine/core/ingestion/type-extractors/go.js +508 -0
  547. package/dist/core/code/engine/core/ingestion/type-extractors/jvm.js +875 -0
  548. package/dist/core/code/engine/core/ingestion/type-extractors/php.js +537 -0
  549. package/dist/core/code/engine/core/ingestion/type-extractors/python.js +477 -0
  550. package/dist/core/code/engine/core/ingestion/type-extractors/ruby.js +380 -0
  551. package/dist/core/code/engine/core/ingestion/type-extractors/rust.js +502 -0
  552. package/dist/core/code/engine/core/ingestion/type-extractors/shared.js +843 -0
  553. package/dist/core/code/engine/core/ingestion/type-extractors/swift.js +490 -0
  554. package/dist/core/code/engine/core/ingestion/type-extractors/types.js +2 -0
  555. package/dist/core/code/engine/core/ingestion/type-extractors/typescript.js +690 -0
  556. package/dist/core/code/engine/core/ingestion/utils/ast-helpers.js +1693 -0
  557. package/dist/core/code/engine/core/ingestion/utils/call-analysis.js +779 -0
  558. package/dist/core/code/engine/core/ingestion/utils/callable-flow-captures.js +932 -0
  559. package/dist/core/code/engine/core/ingestion/utils/callable-labels.js +49 -0
  560. package/dist/core/code/engine/core/ingestion/utils/deferred-resolution-profile.js +151 -0
  561. package/dist/core/code/engine/core/ingestion/utils/effective-ram.js +67 -0
  562. package/dist/core/code/engine/core/ingestion/utils/env.js +60 -0
  563. package/dist/core/code/engine/core/ingestion/utils/event-loop.js +9 -0
  564. package/dist/core/code/engine/core/ingestion/utils/graph-sort.js +103 -0
  565. package/dist/core/code/engine/core/ingestion/utils/heap-probe.js +45 -0
  566. package/dist/core/code/engine/core/ingestion/utils/heritage-marker.js +47 -0
  567. package/dist/core/code/engine/core/ingestion/utils/line-base.js +24 -0
  568. package/dist/core/code/engine/core/ingestion/utils/max-file-size.js +59 -0
  569. package/dist/core/code/engine/core/ingestion/utils/method-props.js +198 -0
  570. package/dist/core/code/engine/core/ingestion/utils/qualified-name.js +73 -0
  571. package/dist/core/code/engine/core/ingestion/utils/receiver-chain-captures.js +60 -0
  572. package/dist/core/code/engine/core/ingestion/utils/receiver-chain-codec.js +188 -0
  573. package/dist/core/code/engine/core/ingestion/utils/scope-tree-walk.js +36 -0
  574. package/dist/core/code/engine/core/ingestion/utils/symbol-labels.js +48 -0
  575. package/dist/core/code/engine/core/ingestion/utils/template-arguments.js +187 -0
  576. package/dist/core/code/engine/core/ingestion/utils/type-parameters.js +209 -0
  577. package/dist/core/code/engine/core/ingestion/utils/verbose.js +6 -0
  578. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/c-cpp.js +133 -0
  579. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/csharp.js +66 -0
  580. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/dart.js +111 -0
  581. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/go.js +153 -0
  582. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/jvm.js +145 -0
  583. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/php.js +61 -0
  584. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/python.js +104 -0
  585. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/ruby.js +55 -0
  586. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/rust.js +79 -0
  587. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/swift.js +91 -0
  588. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/typescript-javascript.js +86 -0
  589. package/dist/core/code/engine/core/ingestion/variable-extractors/generic.js +111 -0
  590. package/dist/core/code/engine/core/ingestion/variable-types.js +3 -0
  591. package/dist/core/code/engine/core/ingestion/vue-sfc-extractor.js +544 -0
  592. package/dist/core/code/engine/core/ingestion/workers/callable-id.js +122 -0
  593. package/dist/core/code/engine/core/ingestion/workers/clone-safety.js +470 -0
  594. package/dist/core/code/engine/core/ingestion/workers/parse-worker.js +2456 -0
  595. package/dist/core/code/engine/core/ingestion/workers/post-result.js +90 -0
  596. package/dist/core/code/engine/core/ingestion/workers/quarantine.js +41 -0
  597. package/dist/core/code/engine/core/ingestion/workers/result-merge.js +59 -0
  598. package/dist/core/code/engine/core/ingestion/workers/worker-pool.js +1725 -0
  599. package/dist/core/code/engine/core/ingestion/workspace-config.js +139 -0
  600. package/dist/core/code/engine/core/lbug/conn-lock.js +72 -0
  601. package/dist/core/code/engine/core/lbug/csv-generator.js +710 -0
  602. package/dist/core/code/engine/core/lbug/cypher-escape.js +24 -0
  603. package/dist/core/code/engine/core/lbug/extension-load-error.js +339 -0
  604. package/dist/core/code/engine/core/lbug/extension-loader.js +261 -0
  605. package/dist/core/code/engine/core/lbug/graph-emit-sink.js +584 -0
  606. package/dist/core/code/engine/core/lbug/lbug-adapter.js +2703 -0
  607. package/dist/core/code/engine/core/lbug/lbug-config.js +1029 -0
  608. package/dist/core/code/engine/core/lbug/native-check.js +435 -0
  609. package/dist/core/code/engine/core/lbug/pool-adapter.js +973 -0
  610. package/dist/core/code/engine/core/lbug/query-params.js +25 -0
  611. package/dist/core/code/engine/core/lbug/query-result-utils.js +31 -0
  612. package/dist/core/code/engine/core/lbug/rel-pair-routing.js +373 -0
  613. package/dist/core/code/engine/core/lbug/schema.js +771 -0
  614. package/dist/core/code/engine/core/lbug/shutdown-helpers.js +40 -0
  615. package/dist/core/code/engine/core/lbug/sidecar-recovery.js +716 -0
  616. package/dist/core/code/engine/core/lbug/stdio-capture.js +49 -0
  617. package/dist/core/code/engine/core/lbug/sync-csv-writer.js +115 -0
  618. package/dist/core/code/engine/core/lbug/wal-checkpoint-driver.js +215 -0
  619. package/dist/core/code/engine/core/lbug/wal-driver-state.js +28 -0
  620. package/dist/core/code/engine/core/logger.js +339 -0
  621. package/dist/core/code/engine/core/platform/capabilities.js +91 -0
  622. package/dist/core/code/engine/core/run-analyze.js +1098 -0
  623. package/dist/core/code/engine/core/tree-sitter/parser-loader.js +281 -0
  624. package/dist/core/code/engine/core/tree-sitter/safe-parse.js +258 -0
  625. package/dist/core/code/engine/core/tree-sitter/vendored-grammars.js +64 -0
  626. package/dist/core/code/engine/lib/utils.js +121 -0
  627. package/dist/core/code/engine/mcp/core/lbug-adapter.js +27 -0
  628. package/dist/core/code/engine/mcp/local/aop-metadata.js +230 -0
  629. package/dist/core/code/engine/mcp/local/bean-metadata.js +49 -0
  630. package/dist/core/code/engine/mcp/local/limits.js +15 -0
  631. package/dist/core/code/engine/mcp/local/line-display.js +6 -0
  632. package/dist/core/code/engine/mcp/local/local-backend.js +4142 -0
  633. package/dist/core/code/engine/storage/branch-index.js +72 -0
  634. package/dist/core/code/engine/storage/file-hash.js +95 -0
  635. package/dist/core/code/engine/storage/fs-atomic.js +34 -0
  636. package/dist/core/code/engine/storage/git.js +555 -0
  637. package/dist/core/code/engine/storage/index-lock.js +664 -0
  638. package/dist/core/code/engine/storage/parse-cache.js +650 -0
  639. package/dist/core/code/engine/storage/parsedfile-store.js +620 -0
  640. package/dist/core/code/engine/storage/repo-manager.js +1061 -0
  641. package/dist/core/code/engine/storage/scope-index-store.js +247 -0
  642. package/dist/core/code/engine/types/pipeline.js +2 -0
  643. package/dist/core/code/scripts/install-duckdb-extension.mjs +125 -0
  644. package/dist/core/code/scripts/resolve-analyze-cmd.cjs +346 -0
  645. package/dist/core/code/shared/graph/types.js +8 -0
  646. package/dist/core/code/shared/index.js +105 -0
  647. package/dist/core/code/shared/integrations/circuit-breaker.js +242 -0
  648. package/dist/core/code/shared/integrations/resilient-fetch.js +224 -0
  649. package/dist/core/code/shared/integrations/retry.js +70 -0
  650. package/dist/core/code/shared/integrations/understand-quickly.js +145 -0
  651. package/dist/core/code/shared/language-detection.js +162 -0
  652. package/dist/core/code/shared/languages.js +27 -0
  653. package/dist/core/code/shared/lbug/schema-constants.js +98 -0
  654. package/dist/core/code/shared/mro-strategy.js +2 -0
  655. package/dist/core/code/shared/pipeline.js +5 -0
  656. package/dist/core/code/shared/scope-resolution/callable-flow-site.js +11 -0
  657. package/dist/core/code/shared/scope-resolution/def-index.js +53 -0
  658. package/dist/core/code/shared/scope-resolution/evidence-weights.js +87 -0
  659. package/dist/core/code/shared/scope-resolution/finalize-algorithm.js +807 -0
  660. package/dist/core/code/shared/scope-resolution/language-classification.js +46 -0
  661. package/dist/core/code/shared/scope-resolution/method-dispatch-index.js +100 -0
  662. package/dist/core/code/shared/scope-resolution/module-scope-index.js +59 -0
  663. package/dist/core/code/shared/scope-resolution/origin-priority.js +23 -0
  664. package/dist/core/code/shared/scope-resolution/parsed-file.js +54 -0
  665. package/dist/core/code/shared/scope-resolution/position-index.js +136 -0
  666. package/dist/core/code/shared/scope-resolution/qualified-name-index.js +77 -0
  667. package/dist/core/code/shared/scope-resolution/reference-site.js +24 -0
  668. package/dist/core/code/shared/scope-resolution/registries/class-registry.js +32 -0
  669. package/dist/core/code/shared/scope-resolution/registries/context.js +52 -0
  670. package/dist/core/code/shared/scope-resolution/registries/evidence.js +152 -0
  671. package/dist/core/code/shared/scope-resolution/registries/field-registry.js +33 -0
  672. package/dist/core/code/shared/scope-resolution/registries/lookup-core.js +392 -0
  673. package/dist/core/code/shared/scope-resolution/registries/lookup-qualified.js +58 -0
  674. package/dist/core/code/shared/scope-resolution/registries/macro-registry.js +34 -0
  675. package/dist/core/code/shared/scope-resolution/registries/method-registry.js +34 -0
  676. package/dist/core/code/shared/scope-resolution/registries/tie-breaks.js +63 -0
  677. package/dist/core/code/shared/scope-resolution/resolve-type-ref.js +128 -0
  678. package/dist/core/code/shared/scope-resolution/scope-id.js +49 -0
  679. package/dist/core/code/shared/scope-resolution/scope-tree.js +225 -0
  680. package/dist/core/code/shared/scope-resolution/symbol-definition.js +12 -0
  681. package/dist/core/code/shared/scope-resolution/types.js +25 -0
  682. package/dist/core/code/shared/test-helpers.js +17 -0
  683. package/dist/core/code/vendor/leiden/index.cjs +355 -0
  684. package/dist/core/code/vendor/leiden/utils.cjs +419 -0
  685. package/dist/core/dbquery/cli.d.ts.map +1 -1
  686. package/dist/core/dbquery/cli.js +5 -4
  687. package/dist/core/dbquery/cli.js.map +1 -1
  688. package/dist/core/dbquery/config.d.ts.map +1 -1
  689. package/dist/core/dbquery/config.js +39 -3
  690. package/dist/core/dbquery/config.js.map +1 -1
  691. package/dist/core/dbquery/drivers/http.d.ts +23 -0
  692. package/dist/core/dbquery/drivers/http.d.ts.map +1 -0
  693. package/dist/core/dbquery/drivers/http.js +125 -0
  694. package/dist/core/dbquery/drivers/http.js.map +1 -0
  695. package/dist/core/dbquery/drivers/mysql.js +1 -1
  696. package/dist/core/dbquery/drivers/mysql.js.map +1 -1
  697. package/dist/core/dbquery/drivers/postgres.js +1 -1
  698. package/dist/core/dbquery/drivers/postgres.js.map +1 -1
  699. package/dist/core/dbquery/executor.d.ts.map +1 -1
  700. package/dist/core/dbquery/executor.js +46 -12
  701. package/dist/core/dbquery/executor.js.map +1 -1
  702. package/dist/core/dbquery/format.d.ts.map +1 -1
  703. package/dist/core/dbquery/format.js +2 -1
  704. package/dist/core/dbquery/format.js.map +1 -1
  705. package/dist/core/dbquery/init.d.ts.map +1 -1
  706. package/dist/core/dbquery/init.js +7 -0
  707. package/dist/core/dbquery/init.js.map +1 -1
  708. package/dist/core/dbquery/types.d.ts +55 -7
  709. package/dist/core/dbquery/types.d.ts.map +1 -1
  710. package/dist/core/directory.d.ts +17 -0
  711. package/dist/core/directory.d.ts.map +1 -1
  712. package/dist/core/directory.js +37 -0
  713. package/dist/core/directory.js.map +1 -1
  714. package/dist/core/features/cli.d.ts.map +1 -1
  715. package/dist/core/features/cli.js +3 -2
  716. package/dist/core/features/cli.js.map +1 -1
  717. package/dist/core/features/scanner.d.ts +1 -1
  718. package/dist/core/features/scanner.d.ts.map +1 -1
  719. package/dist/core/features/scanner.js +20 -4
  720. package/dist/core/features/scanner.js.map +1 -1
  721. package/dist/core/markdown/cli.d.ts.map +1 -1
  722. package/dist/core/markdown/cli.js +9 -8
  723. package/dist/core/markdown/cli.js.map +1 -1
  724. package/dist/core/timeline/cli.d.ts.map +1 -1
  725. package/dist/core/timeline/cli.js +13 -6
  726. package/dist/core/timeline/cli.js.map +1 -1
  727. package/dist/core/timeline/debris.d.ts +20 -0
  728. package/dist/core/timeline/debris.d.ts.map +1 -0
  729. package/dist/core/timeline/debris.js +124 -0
  730. package/dist/core/timeline/debris.js.map +1 -0
  731. package/dist/core/timeline/hook-runner.d.ts.map +1 -1
  732. package/dist/core/timeline/hook-runner.js +3 -1
  733. package/dist/core/timeline/hook-runner.js.map +1 -1
  734. package/dist/core/timeline/hooks.d.ts.map +1 -1
  735. package/dist/core/timeline/hooks.js +13 -5
  736. package/dist/core/timeline/hooks.js.map +1 -1
  737. package/dist/core/timeline/installer.d.ts +2 -0
  738. package/dist/core/timeline/installer.d.ts.map +1 -1
  739. package/dist/core/timeline/installer.js +12 -0
  740. package/dist/core/timeline/installer.js.map +1 -1
  741. package/dist/core/timeline/project-root.d.ts +21 -0
  742. package/dist/core/timeline/project-root.d.ts.map +1 -0
  743. package/dist/core/timeline/project-root.js +83 -0
  744. package/dist/core/timeline/project-root.js.map +1 -0
  745. package/dist/web/register.d.ts.map +1 -1
  746. package/dist/web/register.js +2 -1
  747. package/dist/web/register.js.map +1 -1
  748. package/package.json +1 -1
  749. package/dist/.claude-template/.cgraphx/timeline-current-turn.json +0 -1
  750. package/dist/.claude-template/skills/.cgraphx/timeline-current-turn.json +0 -1
  751. package/dist/.claude-template/skills/handdrawn-deck/.cgraphx/timeline-current-turn.json +0 -1
  752. package/dist/.claude-template/skills/handdrawn-deck/references/.cgraphx/timeline-current-turn.json +0 -1
  753. package/dist/.claude-template/skills/handdrawn-sketch-engine/.cgraphx/timeline-current-turn.json +0 -1
  754. /package/dist/.claude-template/skills/run-api-test/assets/{template-test-verify.jsonl → template-/346/216/245/345/217/243/346/265/213/350/257/225/351/252/214/350/257/201.jsonl"} +0 -0
@@ -0,0 +1,710 @@
1
+ "use strict";
2
+ /**
3
+ * CSV Generator for LadybugDB Hybrid Schema
4
+ *
5
+ * Streams CSV rows directly to disk files in a single pass over graph nodes.
6
+ * File contents are lazy-read from disk per-node to avoid holding the entire
7
+ * repo in RAM. Rows are buffered (FLUSH_BYTES) before writing to minimize
8
+ * per-row Promise overhead.
9
+ *
10
+ * RFC 4180 Compliant:
11
+ * - Fields containing commas, double quotes, or newlines are enclosed in double quotes
12
+ * - Double quotes within fields are escaped by doubling them ("")
13
+ * - All fields are consistently quoted for safety with code content
14
+ */
15
+ var __importDefault = (this && this.__importDefault) || function (mod) {
16
+ return (mod && mod.__esModule) ? mod : { "default": mod };
17
+ };
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.streamAllCSVsToDisk = exports.buildBasicBlockRow = exports.BASICBLOCK_CSV_HEADER = exports.buildRelRow = exports.REL_CSV_HEADER = exports.normalizeFtsText = exports.isBinaryContent = exports.escapeCSVNumber = exports.escapeCSVField = exports.sanitizeUTF8 = exports.shouldFlushCSVBuffer = exports.FLUSH_BYTES = exports.DECLARED_RELATION_PAIRS = void 0;
20
+ const promises_1 = __importDefault(require("fs/promises"));
21
+ const fs_1 = require("fs");
22
+ const path_1 = __importDefault(require("path"));
23
+ const schema_js_1 = require("./schema.js");
24
+ const rel_pair_routing_js_1 = require("./rel-pair-routing.js");
25
+ const env_js_1 = require("../ingestion/utils/env.js");
26
+ const symbol_labels_js_1 = require("../ingestion/utils/symbol-labels.js");
27
+ /** Computed once — `RELATION_SCHEMA` is a static template literal. Exported so
28
+ * the streamed sinks (`GraphEmitSink`, `PdgEmitSink`) share this parse
29
+ * instead of each re-deriving it from the same DDL string. */
30
+ exports.DECLARED_RELATION_PAIRS = (0, rel_pair_routing_js_1.parseRelationSchemaPairs)(schema_js_1.RELATION_SCHEMA);
31
+ /**
32
+ * Deterministic output ordering — optional (out-of-core / windowed-resolve
33
+ * enabler). When `CGRAPH_SORT_GRAPH_OUTPUT` is set, nodes and relationships
34
+ * are emitted sorted by their (unique, dedup-key) graph `id` rather than in
35
+ * graph-insertion order, making the CSV a pure function of the graph's node/edge
36
+ * SET instead of of emit order. Default off returns the iterator untouched, so
37
+ * the bytes are identical to today. With it on, a windowed/out-of-core emit
38
+ * (the later windowed-resolve work) need only reproduce the same edge SET, not the global insertion order —
39
+ * which removes "CSV row order == Map insertion order" as a byte-identical
40
+ * hazard for every later windowing step.
41
+ */
42
+ const byGraphId = (a, b) => a.id < b.id ? -1 : a.id > b.id ? 1 : 0;
43
+ const orderedNodes = (graph, sorted) => sorted ? [...graph.iterNodes()].sort(byGraphId) : graph.iterNodes();
44
+ const orderedRelationships = (graph, sorted) => sorted ? [...graph.iterRelationships()].sort(byGraphId) : graph.iterRelationships();
45
+ /**
46
+ * Flush buffered rows to disk once the buffered chunk reaches this many bytes.
47
+ * Byte-bounded rather than row-count-bounded: row size ranges from a few dozen
48
+ * bytes (typical symbol/relationship rows) up to a full File's content
49
+ * (#2317/#2323), so a row-count-only cap lets a handful of huge rows build an
50
+ * unbounded `buffer.join('\n')` string before ever tripping it.
51
+ *
52
+ * Not an env knob — fixed by a safety margin, not a preference. The one worst
53
+ * case that matters: one more oversized row lands right after the buffer was
54
+ * just under this threshold, before the flush fires. That row is capped at
55
+ * TREE_SITTER_MAX_BUFFER (32MB, hard-clamped — CGRAPH_MAX_FILE_SIZE cannot
56
+ * raise it), and `escapeCSVField`'s worst-case quote-doubling (2x) can grow it
57
+ * before it reaches the buffer. So the peak joined-string size is bounded by
58
+ * FLUSH_BYTES + 2 * TREE_SITTER_MAX_BUFFER ≈ 8MB + 64MB ≈ 72MB,
59
+ * versus Node's `buffer.constants.MAX_STRING_LENGTH` (~512MB) — a comfortable
60
+ * margin (see the `shouldFlushCSVBuffer stays within the V8 string-length
61
+ * ceiling` test, which fails loudly if any of these constants ever moves this
62
+ * margin the wrong way). Raising FLUSH_BYTES trades fewer/larger flushes for
63
+ * less margin; lowering it trades the reverse for lower peak transient memory.
64
+ * Change the constant directly if a real workload needs a different point on
65
+ * that curve — a per-host env var would let the margin get silently
66
+ * reintroduced by an operator with no way to know why 512MB is dangerous.
67
+ */
68
+ exports.FLUSH_BYTES = 8 * 1024 * 1024;
69
+ const shouldFlushCSVBuffer = (byteCount) => byteCount >= exports.FLUSH_BYTES;
70
+ exports.shouldFlushCSVBuffer = shouldFlushCSVBuffer;
71
+ /**
72
+ * Yield the event loop every N relationship rows during the emit pass (#2226 F4)
73
+ * so a concurrent node COPY (the overlap in loadGraphToLbug) and write-stream
74
+ * drain callbacks get scheduling time during long synchronous emit stretches.
75
+ * Scheduling-only — never changes row content or order (byte-identical). Tuning
76
+ * constant, not load-bearing.
77
+ */
78
+ const REL_YIELD_EVERY = 5000;
79
+ // ============================================================================
80
+ // CSV ESCAPE UTILITIES
81
+ // ============================================================================
82
+ const sanitizeUTF8 = (str) => {
83
+ return str
84
+ .replace(/\r\n/g, '\n')
85
+ .replace(/\r/g, '\n')
86
+ .replace(/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]/g, '')
87
+ .replace(/[\uD800-\uDFFF]/g, '')
88
+ .replace(/[\uFFFE\uFFFF]/g, '');
89
+ };
90
+ exports.sanitizeUTF8 = sanitizeUTF8;
91
+ const escapeCSVField = (value) => {
92
+ if (value === undefined || value === null)
93
+ return '""';
94
+ let str = String(value);
95
+ str = (0, exports.sanitizeUTF8)(str);
96
+ return `"${str.replace(/"/g, '""')}"`;
97
+ };
98
+ exports.escapeCSVField = escapeCSVField;
99
+ const escapeCSVNumber = (value, defaultValue = -1) => {
100
+ if (value === undefined || value === null)
101
+ return String(defaultValue);
102
+ return String(value);
103
+ };
104
+ exports.escapeCSVNumber = escapeCSVNumber;
105
+ const formatCSVStringArray = (value) => {
106
+ const items = Array.isArray(value)
107
+ ? value.filter((item) => typeof item === 'string')
108
+ : [];
109
+ const unsafe = items.find((item) => /[,\[\]'"\n\r]/.test(item));
110
+ if (unsafe !== undefined) {
111
+ throw new Error(`Cannot safely encode CSV string-list item: ${JSON.stringify(unsafe)}`);
112
+ }
113
+ return `[${items.join(',')}]`;
114
+ };
115
+ // ============================================================================
116
+ // CONTENT EXTRACTION (lazy — reads from disk on demand)
117
+ // ============================================================================
118
+ const isBinaryContent = (content) => {
119
+ if (!content || content.length === 0)
120
+ return false;
121
+ const sample = content.slice(0, 1000);
122
+ let nonPrintable = 0;
123
+ for (let i = 0; i < sample.length; i++) {
124
+ const code = sample.charCodeAt(i);
125
+ if (code < 9 || (code > 13 && code < 32) || code === 127)
126
+ nonPrintable++;
127
+ }
128
+ return nonPrintable / sample.length > 0.1;
129
+ };
130
+ exports.isBinaryContent = isBinaryContent;
131
+ /**
132
+ * LRU content cache — avoids re-reading the same source file for every
133
+ * symbol defined in it. Sized generously so most files stay cached during
134
+ * the single-pass node iteration.
135
+ */
136
+ class FileContentCache {
137
+ cache = new Map();
138
+ accessOrder = [];
139
+ maxSize;
140
+ repoPath;
141
+ constructor(repoPath, maxSize = 3000) {
142
+ this.repoPath = repoPath;
143
+ this.maxSize = maxSize;
144
+ }
145
+ async get(relativePath) {
146
+ if (!relativePath)
147
+ return '';
148
+ const cached = this.cache.get(relativePath);
149
+ if (cached !== undefined) {
150
+ // Move to end of accessOrder (LRU promotion)
151
+ const idx = this.accessOrder.indexOf(relativePath);
152
+ if (idx !== -1) {
153
+ this.accessOrder.splice(idx, 1);
154
+ this.accessOrder.push(relativePath);
155
+ }
156
+ return cached;
157
+ }
158
+ try {
159
+ const fullPath = path_1.default.join(this.repoPath, relativePath);
160
+ const content = await promises_1.default.readFile(fullPath, 'utf-8');
161
+ this.set(relativePath, content);
162
+ return content;
163
+ }
164
+ catch {
165
+ this.set(relativePath, '');
166
+ return '';
167
+ }
168
+ }
169
+ set(key, value) {
170
+ if (this.cache.size >= this.maxSize) {
171
+ const oldest = this.accessOrder.shift();
172
+ if (oldest)
173
+ this.cache.delete(oldest);
174
+ }
175
+ this.cache.set(key, value);
176
+ this.accessOrder.push(key);
177
+ }
178
+ }
179
+ /**
180
+ * Flatten newlines and tabs to single spaces for the stored text columns
181
+ * (`content`, `description`), so stored file/symbol text is uniformly
182
+ * space-separated (#2317). This rewrites the STORED column too (the same
183
+ * value is COPYed in), so File content returned via the graph API is
184
+ * space-flattened. Leading/trailing/empty are no-ops.
185
+ */
186
+ const normalizeFtsText = (text) => text.replace(/[\r\n\t]+/g, ' ');
187
+ exports.normalizeFtsText = normalizeFtsText;
188
+ /** Normalizes the `description` column — one place for the six emission sites below to call, instead of repeating the transform. */
189
+ const formatFtsDescription = (description) => (0, exports.normalizeFtsText)(description);
190
+ // Labels that get exact source-span content (no ±2 window). Single source of
191
+ // truth in `symbol-labels.ts` — see there for why the exactness depends on the
192
+ // 0-based line invariant. Kept as a named alias to read intent at the use site.
193
+ const EXACT_SYMBOL_CONTENT_LABELS = symbol_labels_js_1.SYMBOL_NODE_LABELS;
194
+ const extractContent = async (node, contentCache) => {
195
+ const filePath = node.properties.filePath;
196
+ const content = await contentCache.get(filePath);
197
+ if (!content)
198
+ return '';
199
+ if (node.label === 'Folder')
200
+ return '';
201
+ if ((0, exports.isBinaryContent)(content))
202
+ return '[Binary file - content not stored]';
203
+ // File content is stored in full — intentionally NOT length-capped here
204
+ // (#2317). It is already bounded upstream by the walker's max-file-size cap
205
+ // (512KB default / 32MB), and only whitespace-normalized. The symbol snippet
206
+ // path below, by contrast, deliberately stays capped at MAX_SNIPPET.
207
+ if (node.label === 'File') {
208
+ return (0, exports.normalizeFtsText)(content);
209
+ }
210
+ const startLine = node.properties.startLine;
211
+ const endLine = node.properties.endLine;
212
+ if (startLine === undefined || endLine === undefined)
213
+ return '';
214
+ const lines = content.split('\n');
215
+ const exactSymbolContent = EXACT_SYMBOL_CONTENT_LABELS.has(node.label);
216
+ const start = Math.max(0, exactSymbolContent ? startLine : startLine - 2);
217
+ const end = Math.min(lines.length - 1, exactSymbolContent ? endLine : endLine + 2);
218
+ const snippet = lines.slice(start, end + 1).join('\n');
219
+ const MAX_SNIPPET = 5000;
220
+ const capped = snippet.length > MAX_SNIPPET ? snippet.slice(0, MAX_SNIPPET) + '\n... [truncated]' : snippet;
221
+ return (0, exports.normalizeFtsText)(capped);
222
+ };
223
+ // ============================================================================
224
+ // BUFFERED CSV WRITER
225
+ // ============================================================================
226
+ class BufferedCSVWriter {
227
+ ws;
228
+ buffer = [];
229
+ bufferedBytes = 0;
230
+ rows = 0;
231
+ constructor(filePath, header) {
232
+ this.ws = (0, fs_1.createWriteStream)(filePath, 'utf-8');
233
+ // Large repos flush many times — raise listener cap to avoid MaxListenersExceededWarning
234
+ this.ws.setMaxListeners(50);
235
+ this.buffer.push(header);
236
+ this.bufferedBytes = Buffer.byteLength(header) + 1;
237
+ }
238
+ /**
239
+ * Buffer a row. Returns a promise ONLY when the buffer crossed FLUSH_BYTES
240
+ * and a disk write was issued; otherwise returns `undefined` so the caller
241
+ * can skip awaiting (#2203 U3) — avoiding a microtask tick on every buffered
242
+ * row (millions at scale). The flush promise still resolves on drain, so
243
+ * backpressure is preserved on the rows that actually write.
244
+ */
245
+ addRow(row) {
246
+ this.buffer.push(row);
247
+ this.bufferedBytes += Buffer.byteLength(row) + 1;
248
+ this.rows++;
249
+ if ((0, exports.shouldFlushCSVBuffer)(this.bufferedBytes)) {
250
+ return this.flush();
251
+ }
252
+ return undefined;
253
+ }
254
+ flush() {
255
+ if (this.buffer.length === 0)
256
+ return Promise.resolve();
257
+ const chunk = this.buffer.join('\n') + '\n';
258
+ this.buffer.length = 0;
259
+ this.bufferedBytes = 0;
260
+ return new Promise((resolve, reject) => {
261
+ this.ws.once('error', reject);
262
+ const ok = this.ws.write(chunk);
263
+ if (ok) {
264
+ this.ws.removeListener('error', reject);
265
+ resolve();
266
+ }
267
+ else {
268
+ this.ws.once('drain', () => {
269
+ this.ws.removeListener('error', reject);
270
+ resolve();
271
+ });
272
+ }
273
+ });
274
+ }
275
+ async finish() {
276
+ await this.flush();
277
+ return new Promise((resolve, reject) => {
278
+ this.ws.end(() => resolve());
279
+ this.ws.on('error', reject);
280
+ });
281
+ }
282
+ }
283
+ // ============================================================================
284
+ // STREAMING CSV GENERATION — SINGLE PASS
285
+ // ============================================================================
286
+ /** Canonical relationship CSV header — shared by the emit pass and the
287
+ * `splitRelCsvByLabelPair` differential oracle. */
288
+ exports.REL_CSV_HEADER = 'from,to,type,confidence,reason,step';
289
+ /** Build the escaped CSV row (no trailing newline) for one relationship.
290
+ * Single source of the relationship row bytes — used by the emit pass and by
291
+ * the byte-identity differential test that feeds the legacy split oracle. */
292
+ const buildRelRow = (rel) => [
293
+ (0, exports.escapeCSVField)(rel.sourceId),
294
+ (0, exports.escapeCSVField)(rel.targetId),
295
+ (0, exports.escapeCSVField)(rel.type),
296
+ (0, exports.escapeCSVNumber)(rel.confidence, 1.0),
297
+ (0, exports.escapeCSVField)(rel.reason),
298
+ (0, exports.escapeCSVNumber)(rel.step, 0),
299
+ ].join(',');
300
+ exports.buildRelRow = buildRelRow;
301
+ /** Canonical BasicBlock node CSV header — taint/PDG substrate (issue #2080).
302
+ * No `name` column; blocks are identified by id + source span. Shared by the
303
+ * whole-graph emit pass and the streaming PDG emit sink (issue #2202) so the
304
+ * two paths produce byte-identical BasicBlock rows by construction. */
305
+ exports.BASICBLOCK_CSV_HEADER = 'id,filePath,startLine,endLine,text,callees,calleeIds';
306
+ /** Build the escaped CSV row (no trailing newline) for one BasicBlock node.
307
+ * Single source of the BasicBlock row bytes — used by `streamAllCSVsToDisk`
308
+ * and by the streaming `PdgEmitSink` (issue #2202). `callees` is a comma-free
309
+ * (space-joined) list of the leaf callee names invoked in the block — the
310
+ * statement-precise inter-procedural reach substrate (the field is itself a CSV
311
+ * cell, so the inner separator must NOT be a comma). `calleeIds` is the SOUND
312
+ * parallel to `callees`: the space-joined RESOLVED callee symbol ids for the
313
+ * block (#2227 follow-up), likewise a comma-free cell. */
314
+ const buildBasicBlockRow = (node) => [
315
+ (0, exports.escapeCSVField)(node.id),
316
+ (0, exports.escapeCSVField)(node.properties.filePath || ''),
317
+ (0, exports.escapeCSVNumber)(node.properties.startLine, -1),
318
+ (0, exports.escapeCSVNumber)(node.properties.endLine, -1),
319
+ (0, exports.escapeCSVField)(node.properties.text || ''),
320
+ (0, exports.escapeCSVField)(String(node.properties.callees ?? '')),
321
+ (0, exports.escapeCSVField)(String(node.properties.calleeIds ?? '')),
322
+ ].join(',');
323
+ exports.buildBasicBlockRow = buildBasicBlockRow;
324
+ /**
325
+ * Stream all CSV data directly to disk files.
326
+ * Iterates graph nodes exactly ONCE — routes each node to the right writer.
327
+ * File contents are lazy-read from disk with a generous LRU cache.
328
+ *
329
+ * `onNodePhaseComplete` (optional, #2203 parallelism leg): fired exactly once,
330
+ * right after every node CSV is fully flushed to disk and BEFORE the
331
+ * relationship pass starts writing any `rel_*.csv`. It receives the finished
332
+ * node-file manifest so the caller can begin `COPY`-ing nodes while this
333
+ * function keeps generating relationship CSVs (the only single-writer-safe
334
+ * overlap — node `COPY` ‖ relationship emit). It is intentionally NOT awaited:
335
+ * the relationship pass proceeds concurrently with whatever the caller
336
+ * schedules. A synchronous throw from the callback is allowed and propagates out
337
+ * of this function (rejecting the returned promise) — it is raised before the
338
+ * relationship pass begins, so no `rel_*.csv` is written; `loadGraphToLbug` uses
339
+ * this to surface its PDG-manifest collision guard. The callback must NOT, however,
340
+ * schedule un-awaited async work that can reject unobserved. Absent ⇒ today's
341
+ * behavior, byte-for-byte.
342
+ */
343
+ const streamAllCSVsToDisk = async (graph, repoPath, csvDir, onNodePhaseComplete) => {
344
+ // Deterministic (id-sorted) node/relationship row order when enabled;
345
+ // default off = today's graph-insertion order (byte-identical).
346
+ const sortOutput = (0, env_js_1.parseTruthyEnv)(process.env.CGRAPH_SORT_GRAPH_OUTPUT);
347
+ // Remove stale CSVs from previous crashed runs, then recreate
348
+ try {
349
+ await promises_1.default.rm(csvDir, { recursive: true, force: true });
350
+ }
351
+ catch { }
352
+ await promises_1.default.mkdir(csvDir, { recursive: true });
353
+ // We open ~30 concurrent write-streams; raise process limit to suppress
354
+ // MaxListenersExceededWarning (restored after all streams finish).
355
+ const prevMax = process.getMaxListeners();
356
+ process.setMaxListeners(prevMax + 40);
357
+ // try/finally so the listener bump is ALWAYS restored — including the
358
+ // rel-routing throw path (#2203 U2) and any node-writer finish() rejection,
359
+ // not just the success path (avoids leaking +40 listeners across failed runs
360
+ // in long-lived hosts / the test suite).
361
+ try {
362
+ const contentCache = new FileContentCache(repoPath);
363
+ // Create writers for every node type up-front
364
+ const fileWriter = new BufferedCSVWriter(path_1.default.join(csvDir, 'file.csv'), 'id,name,filePath,content');
365
+ const folderWriter = new BufferedCSVWriter(path_1.default.join(csvDir, 'folder.csv'), 'id,name,filePath');
366
+ const codeElementHeader = 'id,name,filePath,startLine,endLine,isExported,content,description';
367
+ const functionWriter = new BufferedCSVWriter(path_1.default.join(csvDir, 'function.csv'), codeElementHeader);
368
+ const classWriter = new BufferedCSVWriter(path_1.default.join(csvDir, 'class.csv'), `${codeElementHeader},frameworkAnnotations`);
369
+ const interfaceWriter = new BufferedCSVWriter(path_1.default.join(csvDir, 'interface.csv'), codeElementHeader);
370
+ const methodHeader = 'id,name,filePath,startLine,endLine,isExported,content,description,parameterCount,returnType';
371
+ const methodWriter = new BufferedCSVWriter(path_1.default.join(csvDir, 'method.csv'), methodHeader);
372
+ const codeElemWriter = new BufferedCSVWriter(path_1.default.join(csvDir, 'codeelement.csv'), codeElementHeader);
373
+ const communityWriter = new BufferedCSVWriter(path_1.default.join(csvDir, 'community.csv'), 'id,label,heuristicLabel,keywords,description,enrichedBy,cohesion,symbolCount');
374
+ const processWriter = new BufferedCSVWriter(path_1.default.join(csvDir, 'process.csv'), 'id,label,heuristicLabel,processType,stepCount,communities,entryPointId,terminalId');
375
+ // Section nodes have an extra 'level' column
376
+ const sectionWriter = new BufferedCSVWriter(path_1.default.join(csvDir, 'section.csv'), 'id,name,filePath,startLine,endLine,level,content,description');
377
+ // Route nodes for API endpoint mapping
378
+ const routeWriter = new BufferedCSVWriter(path_1.default.join(csvDir, 'route.csv'), 'id,name,filePath,responseKeys,errorKeys,middleware,method,handlerSymbolId');
379
+ // Tool nodes for MCP tool definitions
380
+ const toolWriter = new BufferedCSVWriter(path_1.default.join(csvDir, 'tool.csv'), 'id,name,filePath,description');
381
+ // BasicBlock nodes — taint/PDG substrate (issue #2080). No `name` column;
382
+ // blocks are identified by id + source span. Emitted by no phase yet.
383
+ const basicBlockWriter = new BufferedCSVWriter(path_1.default.join(csvDir, 'basicblock.csv'), exports.BASICBLOCK_CSV_HEADER);
384
+ // Multi-language node types share the same CSV shape (no isExported column)
385
+ const multiLangHeader = 'id,name,filePath,startLine,endLine,content,description';
386
+ const MULTI_LANG_TYPES = [
387
+ 'Struct',
388
+ 'Enum',
389
+ 'Macro',
390
+ 'Typedef',
391
+ 'Union',
392
+ 'Namespace',
393
+ 'Trait',
394
+ 'Impl',
395
+ 'TypeAlias',
396
+ 'Const',
397
+ 'Static',
398
+ 'Variable',
399
+ 'Property',
400
+ 'Record',
401
+ 'Delegate',
402
+ 'Annotation',
403
+ 'Constructor',
404
+ 'Template',
405
+ 'Module',
406
+ ];
407
+ const propertyHeader = 'id,name,filePath,startLine,endLine,content,description,declaredType';
408
+ const multiLangWriters = new Map();
409
+ for (const t of MULTI_LANG_TYPES) {
410
+ multiLangWriters.set(t, new BufferedCSVWriter(path_1.default.join(csvDir, `${t.toLowerCase()}.csv`), t === 'Property' ? propertyHeader : multiLangHeader));
411
+ }
412
+ // ExternalService 节点 —— spec §6.1 单边情形的合成外部 RPC 服务端点。
413
+ // rpc-edges / http-api-calls 阶段在仅有一侧(消费方或提供方)落在仓库内时
414
+ // 生成它,使 RCALLS / HTTP_CALLS 边始终可解析、impact 能追踪外部依赖。列形态
415
+ // 与 EXTERNAL_SERVICE_SCHEMA 一致(通用 code-element 形,复用 multiLangHeader),
416
+ // 故 getCopyQuery 默认分支与 deleteNodesForFile 的 filePath 表过滤均无需改动 ——
417
+ // 此前仅缺本处 emit 接线,导致节点被 switch default 的"未知标签"分支静默丢弃。
418
+ const externalServiceWriter = new BufferedCSVWriter(path_1.default.join(csvDir, 'externalservice.csv'), multiLangHeader);
419
+ const codeWriterMap = {
420
+ Function: functionWriter,
421
+ Class: classWriter,
422
+ Interface: interfaceWriter,
423
+ CodeElement: codeElemWriter,
424
+ };
425
+ // Deduplicate all node types — the pipeline can produce duplicate IDs across
426
+ // all symbol types (Class, Method, Function, etc.), not just File nodes.
427
+ // A single Set covering every label prevents PK violations on COPY.
428
+ const seenNodeIds = new Set();
429
+ // --- SINGLE PASS over all nodes ---
430
+ for (const node of orderedNodes(graph, sortOutput)) {
431
+ if (seenNodeIds.has(node.id))
432
+ continue;
433
+ seenNodeIds.add(node.id);
434
+ // addRow returns a promise only when it flushes; awaiting it once after the
435
+ // switch (instead of `await`-ing every addRow) skips a per-row microtask
436
+ // tick on the rows buffered between byte-bounded flushes (#2203 U3).
437
+ let pending;
438
+ switch (node.label) {
439
+ case 'File': {
440
+ const content = await extractContent(node, contentCache);
441
+ pending = fileWriter.addRow([
442
+ (0, exports.escapeCSVField)(node.id),
443
+ (0, exports.escapeCSVField)(node.properties.name || ''),
444
+ (0, exports.escapeCSVField)(node.properties.filePath || ''),
445
+ (0, exports.escapeCSVField)(content),
446
+ ].join(','));
447
+ break;
448
+ }
449
+ case 'Folder':
450
+ pending = folderWriter.addRow([
451
+ (0, exports.escapeCSVField)(node.id),
452
+ (0, exports.escapeCSVField)(node.properties.name || ''),
453
+ (0, exports.escapeCSVField)(node.properties.filePath || ''),
454
+ ].join(','));
455
+ break;
456
+ case 'Community': {
457
+ const keywords = node.properties.keywords || [];
458
+ const keywordsStr = `[${keywords.map((k) => `'${k.replace(/\\/g, '\\\\').replace(/'/g, "''").replace(/,/g, '\\,')}'`).join(',')}]`;
459
+ pending = communityWriter.addRow([
460
+ (0, exports.escapeCSVField)(node.id),
461
+ (0, exports.escapeCSVField)(node.properties.name || ''),
462
+ (0, exports.escapeCSVField)(node.properties.heuristicLabel || ''),
463
+ keywordsStr,
464
+ (0, exports.escapeCSVField)(formatFtsDescription(node.properties.description || '')),
465
+ (0, exports.escapeCSVField)(node.properties.enrichedBy || 'heuristic'),
466
+ (0, exports.escapeCSVNumber)(node.properties.cohesion, 0),
467
+ (0, exports.escapeCSVNumber)(node.properties.symbolCount, 0),
468
+ ].join(','));
469
+ break;
470
+ }
471
+ case 'Process': {
472
+ const communities = node.properties.communities || [];
473
+ const communitiesStr = `[${communities.map((c) => `'${c.replace(/'/g, "''")}'`).join(',')}]`;
474
+ pending = processWriter.addRow([
475
+ (0, exports.escapeCSVField)(node.id),
476
+ (0, exports.escapeCSVField)(node.properties.name || ''),
477
+ (0, exports.escapeCSVField)(node.properties.heuristicLabel || ''),
478
+ (0, exports.escapeCSVField)(node.properties.processType || ''),
479
+ (0, exports.escapeCSVNumber)(node.properties.stepCount, 0),
480
+ (0, exports.escapeCSVField)(communitiesStr),
481
+ (0, exports.escapeCSVField)(node.properties.entryPointId || ''),
482
+ (0, exports.escapeCSVField)(node.properties.terminalId || ''),
483
+ ].join(','));
484
+ break;
485
+ }
486
+ case 'Method': {
487
+ const content = await extractContent(node, contentCache);
488
+ pending = methodWriter.addRow([
489
+ (0, exports.escapeCSVField)(node.id),
490
+ (0, exports.escapeCSVField)(node.properties.name || ''),
491
+ (0, exports.escapeCSVField)(node.properties.filePath || ''),
492
+ (0, exports.escapeCSVNumber)(node.properties.startLine, -1),
493
+ (0, exports.escapeCSVNumber)(node.properties.endLine, -1),
494
+ node.properties.isExported ? 'true' : 'false',
495
+ (0, exports.escapeCSVField)(content),
496
+ (0, exports.escapeCSVField)(formatFtsDescription(node.properties.description || '')),
497
+ (0, exports.escapeCSVNumber)(node.properties.parameterCount, 0),
498
+ (0, exports.escapeCSVField)(node.properties.returnType || ''),
499
+ ].join(','));
500
+ break;
501
+ }
502
+ case 'Section': {
503
+ const content = await extractContent(node, contentCache);
504
+ pending = sectionWriter.addRow([
505
+ (0, exports.escapeCSVField)(node.id),
506
+ (0, exports.escapeCSVField)(node.properties.name || ''),
507
+ (0, exports.escapeCSVField)(node.properties.filePath || ''),
508
+ (0, exports.escapeCSVNumber)(node.properties.startLine, -1),
509
+ (0, exports.escapeCSVNumber)(node.properties.endLine, -1),
510
+ (0, exports.escapeCSVNumber)(node.properties.level, 1),
511
+ (0, exports.escapeCSVField)(content),
512
+ (0, exports.escapeCSVField)(formatFtsDescription(node.properties.description || '')),
513
+ ].join(','));
514
+ break;
515
+ }
516
+ case 'Route': {
517
+ const responseKeys = node.properties.responseKeys || [];
518
+ // LadybugDB array literal inside a quoted CSV field: escapeCSVField wraps in "..."
519
+ // and the array uses single-quoted elements
520
+ const keysStr = `[${responseKeys.map((k) => `'${k.replace(/'/g, "''")}'`).join(',')}]`;
521
+ const errorKeys = node.properties.errorKeys || [];
522
+ const errorKeysStr = `[${errorKeys.map((k) => `'${k.replace(/'/g, "''")}'`).join(',')}]`;
523
+ const middleware = node.properties.middleware || [];
524
+ const middlewareStr = `[${middleware.map((m) => `'${m.replace(/'/g, "''")}'`).join(',')}]`;
525
+ pending = routeWriter.addRow([
526
+ (0, exports.escapeCSVField)(node.id),
527
+ (0, exports.escapeCSVField)(node.properties.name || ''),
528
+ (0, exports.escapeCSVField)(node.properties.filePath || ''),
529
+ (0, exports.escapeCSVField)(keysStr),
530
+ (0, exports.escapeCSVField)(errorKeysStr),
531
+ (0, exports.escapeCSVField)(middlewareStr),
532
+ (0, exports.escapeCSVField)(String(node.properties.method ?? '')),
533
+ (0, exports.escapeCSVField)(String(node.properties.handlerSymbolId ?? '')),
534
+ ].join(','));
535
+ break;
536
+ }
537
+ case 'Tool':
538
+ pending = toolWriter.addRow([
539
+ (0, exports.escapeCSVField)(node.id),
540
+ (0, exports.escapeCSVField)(node.properties.name || ''),
541
+ (0, exports.escapeCSVField)(node.properties.filePath || ''),
542
+ (0, exports.escapeCSVField)(formatFtsDescription(node.properties.description || '')),
543
+ ].join(','));
544
+ break;
545
+ case 'BasicBlock':
546
+ pending = basicBlockWriter.addRow((0, exports.buildBasicBlockRow)(node));
547
+ break;
548
+ case 'ExternalService': {
549
+ // 合成外部 RPC 服务节点(无源码):content 取空,行/列为 -1,其余字段
550
+ // 直接取 node.properties,列序与 multiLangHeader 严格对齐。
551
+ const content = await extractContent(node, contentCache);
552
+ pending = externalServiceWriter.addRow([
553
+ (0, exports.escapeCSVField)(node.id),
554
+ (0, exports.escapeCSVField)(node.properties.name || ''),
555
+ (0, exports.escapeCSVField)(node.properties.filePath || ''),
556
+ (0, exports.escapeCSVNumber)(node.properties.startLine, -1),
557
+ (0, exports.escapeCSVNumber)(node.properties.endLine, -1),
558
+ (0, exports.escapeCSVField)(content),
559
+ (0, exports.escapeCSVField)(formatFtsDescription(node.properties.description || '')),
560
+ ].join(','));
561
+ break;
562
+ }
563
+ default: {
564
+ // Code element nodes (Function, Class, Interface, CodeElement)
565
+ const writer = codeWriterMap[node.label];
566
+ if (writer) {
567
+ const content = await extractContent(node, contentCache);
568
+ const row = [
569
+ (0, exports.escapeCSVField)(node.id),
570
+ (0, exports.escapeCSVField)(node.properties.name || ''),
571
+ (0, exports.escapeCSVField)(node.properties.filePath || ''),
572
+ (0, exports.escapeCSVNumber)(node.properties.startLine, -1),
573
+ (0, exports.escapeCSVNumber)(node.properties.endLine, -1),
574
+ node.properties.isExported ? 'true' : 'false',
575
+ (0, exports.escapeCSVField)(content),
576
+ (0, exports.escapeCSVField)(formatFtsDescription(node.properties.description || '')),
577
+ ];
578
+ if (node.label === 'Class') {
579
+ row.push((0, exports.escapeCSVField)(formatCSVStringArray(node.properties.frameworkAnnotations)));
580
+ }
581
+ pending = writer.addRow(row.join(','));
582
+ }
583
+ else {
584
+ // Multi-language node types (Struct, Impl, Trait, Macro, etc.)
585
+ const mlWriter = multiLangWriters.get(node.label);
586
+ if (mlWriter) {
587
+ const content = await extractContent(node, contentCache);
588
+ pending = mlWriter.addRow([
589
+ (0, exports.escapeCSVField)(node.id),
590
+ (0, exports.escapeCSVField)(node.properties.name || ''),
591
+ (0, exports.escapeCSVField)(node.properties.filePath || ''),
592
+ (0, exports.escapeCSVNumber)(node.properties.startLine, -1),
593
+ (0, exports.escapeCSVNumber)(node.properties.endLine, -1),
594
+ (0, exports.escapeCSVField)(content),
595
+ (0, exports.escapeCSVField)(formatFtsDescription(node.properties.description || '')),
596
+ ...(node.label === 'Property'
597
+ ? [(0, exports.escapeCSVField)(node.properties.declaredType || '')]
598
+ : []),
599
+ ].join(','));
600
+ }
601
+ else {
602
+ // Unknown label: not in codeWriterMap or multiLangWriters, so there
603
+ // is no CSV table for it and it is intentionally NOT persisted —
604
+ // `pending` stays undefined, so the loop awaits nothing. Made
605
+ // explicit so a future node type isn't silently dropped here: wire
606
+ // it into one of the writer maps above (or this branch).
607
+ }
608
+ }
609
+ break;
610
+ }
611
+ }
612
+ if (pending)
613
+ await pending;
614
+ }
615
+ // Finish all node writers
616
+ const allWriters = [
617
+ fileWriter,
618
+ folderWriter,
619
+ functionWriter,
620
+ classWriter,
621
+ interfaceWriter,
622
+ methodWriter,
623
+ codeElemWriter,
624
+ communityWriter,
625
+ processWriter,
626
+ sectionWriter,
627
+ routeWriter,
628
+ toolWriter,
629
+ basicBlockWriter,
630
+ externalServiceWriter,
631
+ ...multiLangWriters.values(),
632
+ ];
633
+ await Promise.all(allWriters.map((w) => w.finish()));
634
+ // Build the node-file manifest now (all writers are flushed; `.rows` is
635
+ // final). Hoisted above the relationship pass so `onNodePhaseComplete` can
636
+ // hand the caller a complete node manifest to start COPY-ing while we keep
637
+ // generating relationship CSVs below (#2203 overlap). The same map is
638
+ // returned, so the result is unchanged when no callback is supplied.
639
+ const nodeFiles = new Map();
640
+ const tableMap = [
641
+ ['File', fileWriter],
642
+ ['Folder', folderWriter],
643
+ ['Function', functionWriter],
644
+ ['Class', classWriter],
645
+ ['Interface', interfaceWriter],
646
+ ['Method', methodWriter],
647
+ ['CodeElement', codeElemWriter],
648
+ ['Community', communityWriter],
649
+ ['Process', processWriter],
650
+ ['Section', sectionWriter],
651
+ ['Route', routeWriter],
652
+ ['Tool', toolWriter],
653
+ ['BasicBlock', basicBlockWriter],
654
+ ['ExternalService', externalServiceWriter],
655
+ ...Array.from(multiLangWriters.entries()).map(([name, w]) => [name, w]),
656
+ ];
657
+ for (const [name, writer] of tableMap) {
658
+ if (writer.rows > 0) {
659
+ nodeFiles.set(name, {
660
+ csvPath: path_1.default.join(csvDir, `${name.toLowerCase()}.csv`),
661
+ rows: writer.rows,
662
+ });
663
+ }
664
+ }
665
+ // Node CSVs are on disk; relationship CSVs have not been touched yet. Hand
666
+ // the manifest to the caller (not awaited — the rel pass runs concurrently).
667
+ onNodePhaseComplete?.(nodeFiles);
668
+ // --- Stream relationships directly to per-FROM→TO-label-pair files ---
669
+ // (#2203 U2) Route every edge to its pair file in this single pass. The old
670
+ // monolithic relations.csv — and its line-by-line re-read + per-edge regex
671
+ // re-split in loadGraphToLbug — are gone, so the ~1M-edge set is written and
672
+ // read once instead of twice. The router applies the SAME label-derivation +
673
+ // validTables filter as the legacy splitRelCsvByLabelPair, so the per-pair
674
+ // files are byte-identical (asserted by the differential test).
675
+ const relRouter = new rel_pair_routing_js_1.RelPairRouter(csvDir, exports.REL_CSV_HEADER, rel_pair_routing_js_1.VALID_NODE_TABLES, exports.DECLARED_RELATION_PAIRS);
676
+ try {
677
+ let emitted = 0;
678
+ for (const rel of orderedRelationships(graph, sortOutput)) {
679
+ const pending = relRouter.route(rel.sourceId, rel.targetId, (0, exports.buildRelRow)(rel), rel.type);
680
+ if (pending)
681
+ await pending;
682
+ // Periodically hand the event loop back so the overlapped node COPY and
683
+ // write-stream drains run instead of starving behind this synchronous
684
+ // loop (#2226 F4). No effect on emitted bytes — pure scheduling.
685
+ if (++emitted % REL_YIELD_EVERY === 0)
686
+ await new Promise((r) => setImmediate(r));
687
+ }
688
+ await relRouter.close();
689
+ }
690
+ catch (err) {
691
+ relRouter.destroy();
692
+ // Rethrow the real stream error (EMFILE / disk-full) rather than the generic
693
+ // AbortError a pending drain-await rejects with — mirrors the retained
694
+ // splitRelCsvByLabelPair's `throw streamError ?? err`.
695
+ throw relRouter.lastError ?? err;
696
+ }
697
+ return {
698
+ nodeFiles,
699
+ relsByPair: relRouter.byPair,
700
+ relHeader: exports.REL_CSV_HEADER,
701
+ skippedRels: relRouter.skipped,
702
+ totalValidRels: relRouter.total,
703
+ };
704
+ }
705
+ finally {
706
+ // Restore original process listener limit on every path (success or throw).
707
+ process.setMaxListeners(prevMax);
708
+ }
709
+ };
710
+ exports.streamAllCSVsToDisk = streamAllCSVsToDisk;