gitnexus 1.6.8-rc.8 → 1.6.8

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 (439) hide show
  1. package/README.md +3 -3
  2. package/dist/_shared/graph/types.d.ts +31 -1
  3. package/dist/_shared/graph/types.d.ts.map +1 -1
  4. package/dist/_shared/language-detection.d.ts.map +1 -1
  5. package/dist/_shared/language-detection.js +11 -1
  6. package/dist/_shared/language-detection.js.map +1 -1
  7. package/dist/_shared/lbug/schema-constants.d.ts +1 -1
  8. package/dist/_shared/lbug/schema-constants.d.ts.map +1 -1
  9. package/dist/_shared/lbug/schema-constants.js +6 -0
  10. package/dist/_shared/lbug/schema-constants.js.map +1 -1
  11. package/dist/_shared/scope-resolution/parsed-file.d.ts +21 -0
  12. package/dist/_shared/scope-resolution/parsed-file.d.ts.map +1 -1
  13. package/dist/_shared/scope-resolution/symbol-definition.d.ts +6 -0
  14. package/dist/_shared/scope-resolution/symbol-definition.d.ts.map +1 -1
  15. package/dist/cli/ai-context.d.ts +31 -1
  16. package/dist/cli/ai-context.js +18 -16
  17. package/dist/cli/analyze-config.js +11 -0
  18. package/dist/cli/analyze.d.ts +14 -0
  19. package/dist/cli/analyze.js +98 -0
  20. package/dist/cli/embedding-dims.d.ts +33 -0
  21. package/dist/cli/embedding-dims.js +39 -0
  22. package/dist/cli/eval-server.d.ts +8 -0
  23. package/dist/cli/eval-server.js +242 -2
  24. package/dist/cli/help-i18n.js +19 -0
  25. package/dist/cli/i18n/en.d.ts +15 -1
  26. package/dist/cli/i18n/en.js +15 -1
  27. package/dist/cli/i18n/resources.d.ts +29 -1
  28. package/dist/cli/i18n/zh-CN.d.ts +14 -0
  29. package/dist/cli/i18n/zh-CN.js +15 -1
  30. package/dist/cli/index.js +89 -1
  31. package/dist/cli/mcp.d.ts +6 -1
  32. package/dist/cli/mcp.js +26 -1
  33. package/dist/cli/optional-grammars.d.ts +6 -8
  34. package/dist/cli/optional-grammars.js +8 -11
  35. package/dist/cli/setup.d.ts +3 -1
  36. package/dist/cli/setup.js +67 -17
  37. package/dist/cli/skill-gen.js +2 -1
  38. package/dist/cli/tool.d.ts +19 -1
  39. package/dist/cli/tool.js +96 -3
  40. package/dist/core/embeddings/hf-env.d.ts +0 -66
  41. package/dist/core/embeddings/http-client.d.ts +7 -0
  42. package/dist/core/embeddings/http-client.js +5 -3
  43. package/dist/core/embeddings/server-mapping.d.ts +1 -1
  44. package/dist/core/embeddings/server-mapping.js +7 -3
  45. package/dist/core/graph/import-cycles.d.ts +10 -0
  46. package/dist/core/graph/import-cycles.js +103 -0
  47. package/dist/core/group/cross-impact.d.ts +2 -1
  48. package/dist/core/group/cross-impact.js +5 -1
  49. package/dist/core/group/extractors/grpc-patterns/proto.js +10 -6
  50. package/dist/core/group/extractors/http-patterns/kotlin.js +7 -7
  51. package/dist/core/group/extractors/http-route-extractor.d.ts +24 -0
  52. package/dist/core/group/extractors/http-route-extractor.js +22 -4
  53. package/dist/core/group/extractors/include-extractor.js +22 -13
  54. package/dist/core/group/sync.d.ts +27 -1
  55. package/dist/core/group/sync.js +0 -0
  56. package/dist/core/incremental/subgraph-extract.js +18 -1
  57. package/dist/core/ingestion/cfg/cfg-builder.d.ts +114 -0
  58. package/dist/core/ingestion/cfg/cfg-builder.js +196 -0
  59. package/dist/core/ingestion/cfg/collect.d.ts +51 -0
  60. package/dist/core/ingestion/cfg/collect.js +77 -0
  61. package/dist/core/ingestion/cfg/control-dependence.d.ts +58 -0
  62. package/dist/core/ingestion/cfg/control-dependence.js +182 -0
  63. package/dist/core/ingestion/cfg/control-flow-context.d.ts +106 -0
  64. package/dist/core/ingestion/cfg/control-flow-context.js +124 -0
  65. package/dist/core/ingestion/cfg/emit.d.ts +293 -0
  66. package/dist/core/ingestion/cfg/emit.js +646 -0
  67. package/dist/core/ingestion/cfg/post-dominators.d.ts +79 -0
  68. package/dist/core/ingestion/cfg/post-dominators.js +176 -0
  69. package/dist/core/ingestion/cfg/reaching-def-reason-codec.d.ts +106 -0
  70. package/dist/core/ingestion/cfg/reaching-def-reason-codec.js +133 -0
  71. package/dist/core/ingestion/cfg/reaching-defs-graph.d.ts +18 -0
  72. package/dist/core/ingestion/cfg/reaching-defs-graph.js +312 -0
  73. package/dist/core/ingestion/cfg/reaching-defs.d.ts +162 -0
  74. package/dist/core/ingestion/cfg/reaching-defs.js +785 -0
  75. package/dist/core/ingestion/cfg/synthetic-escape.d.ts +124 -0
  76. package/dist/core/ingestion/cfg/synthetic-escape.js +300 -0
  77. package/dist/core/ingestion/cfg/traversal-result.d.ts +20 -0
  78. package/dist/core/ingestion/cfg/traversal-result.js +2 -0
  79. package/dist/core/ingestion/cfg/types.d.ts +274 -0
  80. package/dist/core/ingestion/cfg/types.js +13 -0
  81. package/dist/core/ingestion/cfg/visitors/c-cpp-harvest.d.ts +111 -0
  82. package/dist/core/ingestion/cfg/visitors/c-cpp-harvest.js +541 -0
  83. package/dist/core/ingestion/cfg/visitors/c-cpp.d.ts +74 -0
  84. package/dist/core/ingestion/cfg/visitors/c-cpp.js +584 -0
  85. package/dist/core/ingestion/cfg/visitors/call-site-harvest.d.ts +195 -0
  86. package/dist/core/ingestion/cfg/visitors/call-site-harvest.js +350 -0
  87. package/dist/core/ingestion/cfg/visitors/csharp-harvest.d.ts +124 -0
  88. package/dist/core/ingestion/cfg/visitors/csharp-harvest.js +589 -0
  89. package/dist/core/ingestion/cfg/visitors/csharp.d.ts +87 -0
  90. package/dist/core/ingestion/cfg/visitors/csharp.js +867 -0
  91. package/dist/core/ingestion/cfg/visitors/dart-harvest.d.ts +278 -0
  92. package/dist/core/ingestion/cfg/visitors/dart-harvest.js +870 -0
  93. package/dist/core/ingestion/cfg/visitors/dart.d.ts +119 -0
  94. package/dist/core/ingestion/cfg/visitors/dart.js +836 -0
  95. package/dist/core/ingestion/cfg/visitors/go-harvest.d.ts +160 -0
  96. package/dist/core/ingestion/cfg/visitors/go-harvest.js +621 -0
  97. package/dist/core/ingestion/cfg/visitors/go.d.ts +108 -0
  98. package/dist/core/ingestion/cfg/visitors/go.js +638 -0
  99. package/dist/core/ingestion/cfg/visitors/java-harvest.d.ts +108 -0
  100. package/dist/core/ingestion/cfg/visitors/java-harvest.js +513 -0
  101. package/dist/core/ingestion/cfg/visitors/java.d.ts +101 -0
  102. package/dist/core/ingestion/cfg/visitors/java.js +812 -0
  103. package/dist/core/ingestion/cfg/visitors/kotlin-harvest.d.ts +253 -0
  104. package/dist/core/ingestion/cfg/visitors/kotlin-harvest.js +719 -0
  105. package/dist/core/ingestion/cfg/visitors/kotlin.d.ts +121 -0
  106. package/dist/core/ingestion/cfg/visitors/kotlin.js +809 -0
  107. package/dist/core/ingestion/cfg/visitors/php-harvest.d.ts +172 -0
  108. package/dist/core/ingestion/cfg/visitors/php-harvest.js +626 -0
  109. package/dist/core/ingestion/cfg/visitors/php.d.ts +96 -0
  110. package/dist/core/ingestion/cfg/visitors/php.js +721 -0
  111. package/dist/core/ingestion/cfg/visitors/python-harvest.d.ts +212 -0
  112. package/dist/core/ingestion/cfg/visitors/python-harvest.js +739 -0
  113. package/dist/core/ingestion/cfg/visitors/python.d.ts +103 -0
  114. package/dist/core/ingestion/cfg/visitors/python.js +558 -0
  115. package/dist/core/ingestion/cfg/visitors/ruby-harvest.d.ts +223 -0
  116. package/dist/core/ingestion/cfg/visitors/ruby-harvest.js +587 -0
  117. package/dist/core/ingestion/cfg/visitors/ruby.d.ts +112 -0
  118. package/dist/core/ingestion/cfg/visitors/ruby.js +756 -0
  119. package/dist/core/ingestion/cfg/visitors/rust-harvest.d.ts +324 -0
  120. package/dist/core/ingestion/cfg/visitors/rust-harvest.js +873 -0
  121. package/dist/core/ingestion/cfg/visitors/rust.d.ts +95 -0
  122. package/dist/core/ingestion/cfg/visitors/rust.js +558 -0
  123. package/dist/core/ingestion/cfg/visitors/scope-tree-harvest.d.ts +87 -0
  124. package/dist/core/ingestion/cfg/visitors/scope-tree-harvest.js +116 -0
  125. package/dist/core/ingestion/cfg/visitors/swift-harvest.d.ts +255 -0
  126. package/dist/core/ingestion/cfg/visitors/swift-harvest.js +679 -0
  127. package/dist/core/ingestion/cfg/visitors/swift.d.ts +116 -0
  128. package/dist/core/ingestion/cfg/visitors/swift.js +787 -0
  129. package/dist/core/ingestion/cfg/visitors/typescript-harvest.d.ts +149 -0
  130. package/dist/core/ingestion/cfg/visitors/typescript-harvest.js +1056 -0
  131. package/dist/core/ingestion/cfg/visitors/typescript.d.ts +66 -0
  132. package/dist/core/ingestion/cfg/visitors/typescript.js +583 -0
  133. package/dist/core/ingestion/import-resolvers/utils.js +2 -0
  134. package/dist/core/ingestion/language-provider.d.ts +23 -2
  135. package/dist/core/ingestion/languages/c-cpp.js +17 -5
  136. package/dist/core/ingestion/languages/cobol.js +4 -0
  137. package/dist/core/ingestion/languages/cpp/arity-metadata.js +41 -2
  138. package/dist/core/ingestion/languages/cpp/captures.js +50 -1
  139. package/dist/core/ingestion/languages/cpp/conversion-rank.d.ts +2 -0
  140. package/dist/core/ingestion/languages/cpp/conversion-rank.js +89 -0
  141. package/dist/core/ingestion/languages/cpp/header-scan.d.ts +1 -1
  142. package/dist/core/ingestion/languages/cpp/header-scan.js +2 -2
  143. package/dist/core/ingestion/languages/cpp/inline-namespaces.js +7 -2
  144. package/dist/core/ingestion/languages/cpp/member-lookup.js +2 -1
  145. package/dist/core/ingestion/languages/cpp/query.js +23 -0
  146. package/dist/core/ingestion/languages/cpp/scope-resolver.js +2 -1
  147. package/dist/core/ingestion/languages/csharp.js +2 -0
  148. package/dist/core/ingestion/languages/dart.js +2 -0
  149. package/dist/core/ingestion/languages/go.js +2 -0
  150. package/dist/core/ingestion/languages/java.js +3 -0
  151. package/dist/core/ingestion/languages/kotlin/query.js +3 -2
  152. package/dist/core/ingestion/languages/kotlin.js +8 -1
  153. package/dist/core/ingestion/languages/php.js +2 -0
  154. package/dist/core/ingestion/languages/python.js +2 -0
  155. package/dist/core/ingestion/languages/ruby.js +2 -0
  156. package/dist/core/ingestion/languages/rust.js +2 -0
  157. package/dist/core/ingestion/languages/swift.js +2 -0
  158. package/dist/core/ingestion/languages/typescript.js +5 -0
  159. package/dist/core/ingestion/languages/vue.js +6 -0
  160. package/dist/core/ingestion/method-extractors/configs/c-cpp.js +6 -13
  161. package/dist/core/ingestion/method-extractors/generic.js +1 -0
  162. package/dist/core/ingestion/method-types.d.ts +2 -0
  163. package/dist/core/ingestion/model/symbol-table.d.ts +1 -0
  164. package/dist/core/ingestion/model/symbol-table.js +1 -0
  165. package/dist/core/ingestion/mro-processor.js +109 -0
  166. package/dist/core/ingestion/parsing-processor.js +44 -0
  167. package/dist/core/ingestion/pipeline-phases/call-summaries.d.ts +26 -0
  168. package/dist/core/ingestion/pipeline-phases/call-summaries.js +46 -0
  169. package/dist/core/ingestion/pipeline-phases/index.d.ts +2 -0
  170. package/dist/core/ingestion/pipeline-phases/index.js +2 -0
  171. package/dist/core/ingestion/pipeline-phases/parse-impl.d.ts +0 -21
  172. package/dist/core/ingestion/pipeline-phases/parse-impl.js +18 -1
  173. package/dist/core/ingestion/pipeline-phases/routes.d.ts +10 -0
  174. package/dist/core/ingestion/pipeline-phases/routes.js +30 -1
  175. package/dist/core/ingestion/pipeline-phases/taint-summaries.d.ts +30 -0
  176. package/dist/core/ingestion/pipeline-phases/taint-summaries.js +81 -0
  177. package/dist/core/ingestion/pipeline.d.ts +92 -10
  178. package/dist/core/ingestion/pipeline.js +11 -2
  179. package/dist/core/ingestion/scope-extractor.js +12 -2
  180. package/dist/core/ingestion/scope-resolution/contract/scope-resolver.d.ts +9 -0
  181. package/dist/core/ingestion/scope-resolution/graph-bridge/callee-id-sink.d.ts +75 -0
  182. package/dist/core/ingestion/scope-resolution/graph-bridge/callee-id-sink.js +67 -0
  183. package/dist/core/ingestion/scope-resolution/graph-bridge/edges.d.ts +12 -2
  184. package/dist/core/ingestion/scope-resolution/graph-bridge/edges.js +14 -2
  185. package/dist/core/ingestion/scope-resolution/graph-bridge/references-to-edges.d.ts +6 -1
  186. package/dist/core/ingestion/scope-resolution/graph-bridge/references-to-edges.js +13 -1
  187. package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.d.ts +9 -1
  188. package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.js +28 -2
  189. package/dist/core/ingestion/scope-resolution/passes/overload-narrowing.d.ts +4 -0
  190. package/dist/core/ingestion/scope-resolution/passes/overload-narrowing.js +9 -0
  191. package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.d.ts +6 -1
  192. package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.js +174 -40
  193. package/dist/core/ingestion/scope-resolution/pipeline/phase.d.ts +24 -0
  194. package/dist/core/ingestion/scope-resolution/pipeline/phase.js +276 -190
  195. package/dist/core/ingestion/scope-resolution/pipeline/reconcile-ownership.js +43 -3
  196. package/dist/core/ingestion/scope-resolution/pipeline/run.d.ts +75 -0
  197. package/dist/core/ingestion/scope-resolution/pipeline/run.js +349 -1
  198. package/dist/core/ingestion/scope-resolution/resolution-outcome.d.ts +1 -1
  199. package/dist/core/ingestion/taint/call-summary-codec.d.ts +75 -0
  200. package/dist/core/ingestion/taint/call-summary-codec.js +128 -0
  201. package/dist/core/ingestion/taint/call-summary-emit.d.ts +43 -0
  202. package/dist/core/ingestion/taint/call-summary-emit.js +70 -0
  203. package/dist/core/ingestion/taint/call-summary-harvest.d.ts +77 -0
  204. package/dist/core/ingestion/taint/call-summary-harvest.js +179 -0
  205. package/dist/core/ingestion/taint/call-summary-model.d.ts +47 -0
  206. package/dist/core/ingestion/taint/call-summary-model.js +25 -0
  207. package/dist/core/ingestion/taint/emit.d.ts +125 -0
  208. package/dist/core/ingestion/taint/emit.js +208 -0
  209. package/dist/core/ingestion/taint/interproc-emit.d.ts +50 -0
  210. package/dist/core/ingestion/taint/interproc-emit.js +88 -0
  211. package/dist/core/ingestion/taint/interproc-solver.d.ts +110 -0
  212. package/dist/core/ingestion/taint/interproc-solver.js +312 -0
  213. package/dist/core/ingestion/taint/match.d.ts +153 -0
  214. package/dist/core/ingestion/taint/match.js +278 -0
  215. package/dist/core/ingestion/taint/path-codec.d.ts +134 -0
  216. package/dist/core/ingestion/taint/path-codec.js +190 -0
  217. package/dist/core/ingestion/taint/propagate.d.ts +216 -0
  218. package/dist/core/ingestion/taint/propagate.js +659 -0
  219. package/dist/core/ingestion/taint/site-safety.d.ts +29 -0
  220. package/dist/core/ingestion/taint/site-safety.js +98 -0
  221. package/dist/core/ingestion/taint/source-sink-config.d.ts +107 -23
  222. package/dist/core/ingestion/taint/source-sink-config.js +35 -12
  223. package/dist/core/ingestion/taint/source-sink-registry.d.ts +6 -4
  224. package/dist/core/ingestion/taint/source-sink-registry.js +6 -4
  225. package/dist/core/ingestion/taint/summary-harvest-driver.d.ts +80 -0
  226. package/dist/core/ingestion/taint/summary-harvest-driver.js +179 -0
  227. package/dist/core/ingestion/taint/summary-harvest.d.ts +89 -0
  228. package/dist/core/ingestion/taint/summary-harvest.js +537 -0
  229. package/dist/core/ingestion/taint/summary-model.d.ts +200 -0
  230. package/dist/core/ingestion/taint/summary-model.js +86 -0
  231. package/dist/core/ingestion/taint/typescript-model.d.ts +38 -0
  232. package/dist/core/ingestion/taint/typescript-model.js +102 -0
  233. package/dist/core/ingestion/type-extractors/c-cpp.js +21 -0
  234. package/dist/core/ingestion/utils/env.d.ts +7 -0
  235. package/dist/core/ingestion/utils/env.js +12 -0
  236. package/dist/core/ingestion/utils/method-props.js +1 -0
  237. package/dist/core/ingestion/workers/clone-safety.d.ts +109 -0
  238. package/dist/core/ingestion/workers/clone-safety.js +465 -0
  239. package/dist/core/ingestion/workers/parse-worker.d.ts +23 -0
  240. package/dist/core/ingestion/workers/parse-worker.js +81 -53
  241. package/dist/core/ingestion/workers/post-result.d.ts +22 -0
  242. package/dist/core/ingestion/workers/post-result.js +87 -0
  243. package/dist/core/ingestion/workers/result-merge.d.ts +20 -0
  244. package/dist/core/ingestion/workers/result-merge.js +43 -0
  245. package/dist/core/ingestion/workers/worker-pool.d.ts +15 -40
  246. package/dist/core/ingestion/workers/worker-pool.js +43 -16
  247. package/dist/core/lbug/csv-generator.d.ts +51 -3
  248. package/dist/core/lbug/csv-generator.js +369 -255
  249. package/dist/core/lbug/lbug-adapter.d.ts +58 -18
  250. package/dist/core/lbug/lbug-adapter.js +346 -84
  251. package/dist/core/lbug/lbug-config.d.ts +19 -0
  252. package/dist/core/lbug/lbug-config.js +29 -0
  253. package/dist/core/lbug/pdg-emit-sink.d.ts +127 -0
  254. package/dist/core/lbug/pdg-emit-sink.js +358 -0
  255. package/dist/core/lbug/pool-adapter.d.ts +35 -0
  256. package/dist/core/lbug/pool-adapter.js +90 -1
  257. package/dist/core/lbug/rel-pair-routing.d.ts +54 -0
  258. package/dist/core/lbug/rel-pair-routing.js +140 -0
  259. package/dist/core/lbug/schema.d.ts +2 -2
  260. package/dist/core/lbug/schema.js +3 -0
  261. package/dist/core/logger.d.ts +0 -5
  262. package/dist/core/run-analyze.d.ts +96 -0
  263. package/dist/core/run-analyze.js +207 -3
  264. package/dist/core/tree-sitter/parser-loader.js +5 -4
  265. package/dist/core/tree-sitter/safe-parse.d.ts +0 -5
  266. package/dist/core/tree-sitter/vendored-grammars.d.ts +39 -0
  267. package/dist/core/tree-sitter/vendored-grammars.js +57 -0
  268. package/dist/core/wiki/generator.js +3 -1
  269. package/dist/core/wiki/graph-queries.d.ts +6 -0
  270. package/dist/core/wiki/graph-queries.js +9 -1
  271. package/dist/mcp/http-transport.d.ts +134 -0
  272. package/dist/mcp/http-transport.js +503 -0
  273. package/dist/mcp/local/local-backend.d.ts +110 -24
  274. package/dist/mcp/local/local-backend.js +1225 -19
  275. package/dist/mcp/local/pdg-impact.d.ts +384 -0
  276. package/dist/mcp/local/pdg-impact.js +1972 -0
  277. package/dist/mcp/resources.js +13 -1
  278. package/dist/mcp/tools.d.ts +12 -0
  279. package/dist/mcp/tools.js +214 -7
  280. package/dist/server/analyze-launch.d.ts +29 -0
  281. package/dist/server/analyze-launch.js +137 -0
  282. package/dist/server/analyze-upload.d.ts +33 -0
  283. package/dist/server/analyze-upload.js +123 -0
  284. package/dist/server/analyze-worker-ipc.d.ts +58 -0
  285. package/dist/server/analyze-worker-ipc.js +16 -0
  286. package/dist/server/analyze-worker.d.ts +17 -1
  287. package/dist/server/analyze-worker.js +7 -1
  288. package/dist/server/api.d.ts +17 -0
  289. package/dist/server/api.js +132 -168
  290. package/dist/server/git-clone.d.ts +43 -2
  291. package/dist/server/git-clone.js +211 -16
  292. package/dist/server/mcp-http.d.ts +5 -6
  293. package/dist/server/mcp-http.js +9 -82
  294. package/dist/server/middleware.d.ts +40 -0
  295. package/dist/server/middleware.js +92 -0
  296. package/dist/server/private-ip.d.ts +1 -0
  297. package/dist/server/private-ip.js +15 -0
  298. package/dist/server/upload-ingest.d.ts +56 -0
  299. package/dist/server/upload-ingest.js +276 -0
  300. package/dist/server/upload-paths.d.ts +37 -0
  301. package/dist/server/upload-paths.js +57 -0
  302. package/dist/server/upload-sweep.d.ts +20 -0
  303. package/dist/server/upload-sweep.js +57 -0
  304. package/dist/storage/git.js +5 -8
  305. package/dist/storage/parse-cache.d.ts +22 -1
  306. package/dist/storage/parse-cache.js +44 -10
  307. package/dist/storage/repo-manager.d.ts +121 -10
  308. package/dist/storage/repo-manager.js +43 -5
  309. package/dist/types/pipeline.d.ts +9 -0
  310. package/hooks/antigravity/gitnexus-antigravity-hook.cjs +110 -10
  311. package/hooks/claude/gitnexus-hook.cjs +110 -13
  312. package/hooks/claude/hook-db-lock-probe.cjs +513 -26
  313. package/package.json +8 -2
  314. package/scripts/assert-publish-grammar-coverage.cjs +31 -0
  315. package/scripts/build-tree-sitter-grammars.cjs +16 -10
  316. package/scripts/cross-platform-tests.ts +1 -0
  317. package/skills/gitnexus-debugging.md +16 -4
  318. package/skills/gitnexus-exploring.md +3 -3
  319. package/skills/gitnexus-guide.md +33 -0
  320. package/skills/gitnexus-pdg-query.md +89 -0
  321. package/skills/gitnexus-refactoring.md +1 -1
  322. package/skills/gitnexus-taint-analysis.md +178 -0
  323. package/vendor/tree-sitter-c/package.json +1 -1
  324. package/vendor/tree-sitter-dart/package.json +1 -1
  325. package/vendor/tree-sitter-kotlin/package.json +1 -1
  326. package/vendor/tree-sitter-proto/package.json +1 -1
  327. package/vendor/tree-sitter-swift/package.json +1 -1
  328. package/web/assets/{agent-CKPMqImC.js → agent-D3Xd7zZE.js} +123 -123
  329. package/web/assets/architecture-7EHR7CIX-6QZW5X65-DxJw65fT.js +1 -0
  330. package/web/assets/architectureDiagram-UL44E2DR-ChH9xW-N.js +36 -0
  331. package/web/assets/{blockDiagram-7IZFK4PR-B4niSLvR.js → blockDiagram-7IZFK4PR-BkWhpzWB.js} +1 -1
  332. package/web/assets/{c4Diagram-Y2BXMSZH-DIzEXalR.js → c4Diagram-Y2BXMSZH-DtBvpzWD.js} +1 -1
  333. package/web/assets/{chunk-3SSMPTDK-BzGeeheI.js → chunk-3SSMPTDK-B4_etUhr.js} +2 -2
  334. package/web/assets/{chunk-5IMINLNL-CnTLsXIV.js → chunk-5IMINLNL-DOdTeQri.js} +1 -1
  335. package/web/assets/{chunk-5VCL7Z4A-w1BCx98Z.js → chunk-5VCL7Z4A-CQ-2dYWj.js} +1 -1
  336. package/web/assets/chunk-6764PJDD-DpIS7hxD.js +1 -0
  337. package/web/assets/{chunk-67TQ5CYL-CChC2cAv.js → chunk-67TQ5CYL-4sNPJU1q.js} +3 -3
  338. package/web/assets/{chunk-7W6UQGC5-CgFyfZ6k.js → chunk-7W6UQGC5-KyEG0HQg.js} +1 -1
  339. package/web/assets/{chunk-AZZRMDJM-5E9ARdDQ.js → chunk-AZZRMDJM-y-xJBuMz.js} +1 -1
  340. package/web/assets/{chunk-INKRHTLW-ELpfuk9h.js → chunk-INKRHTLW-Nu4ri9P-.js} +1 -1
  341. package/web/assets/{chunk-JQRUD6KW-Dcq_Qnyy.js → chunk-JQRUD6KW-Dbva2Z17.js} +1 -1
  342. package/web/assets/{chunk-KGFNY3KK-W-VR57xb.js → chunk-KGFNY3KK-JGMJvKCK.js} +1 -1
  343. package/web/assets/chunk-KGYTTC2M-CWC_c3H9.js +161 -0
  344. package/web/assets/{chunk-KNLZD3CH-BuZBOcso.js → chunk-KNLZD3CH-BGlP6X9R.js} +1 -1
  345. package/web/assets/{chunk-KRXBNO2N-DH2NPM7I.js → chunk-KRXBNO2N-BW5o0KUN.js} +1 -1
  346. package/web/assets/{chunk-LCXTWHL2-Dfmux4m1.js → chunk-LCXTWHL2-zoomRtWX.js} +1 -1
  347. package/web/assets/{chunk-LII3EMHJ-3X33tCpU.js → chunk-LII3EMHJ-D-jm-dLa.js} +1 -1
  348. package/web/assets/{chunk-QA3QBVWF-D5Ha3GgB.js → chunk-QA3QBVWF-BgRW3SXd.js} +1 -1
  349. package/web/assets/{chunk-RG4AUYOV-CAkzcoRj.js → chunk-RG4AUYOV-DD0B2N2B.js} +1 -1
  350. package/web/assets/{chunk-T2UQINTJ-kGYG7ppP.js → chunk-T2UQINTJ-DSBqkzH7.js} +1 -1
  351. package/web/assets/chunk-T5OCTHI4-DdZvN-9i.js +1 -0
  352. package/web/assets/{chunk-UY5QBCOK-Du-c56gs.js → chunk-UY5QBCOK-DyF0vyGd.js} +1 -1
  353. package/web/assets/{chunk-W44A43WB-lrCpuupA.js → chunk-W44A43WB-JqMLIpR0.js} +1 -1
  354. package/web/assets/{chunk-ZXARS5L4-CSZRiyOf.js → chunk-ZXARS5L4-CxN8oiwI.js} +1 -1
  355. package/web/assets/classDiagram-KGZ6W3CR-DJm9BgF-.js +1 -0
  356. package/web/assets/classDiagram-v2-72OJOZXJ-DJm9BgF-.js +1 -0
  357. package/web/assets/{context-builder-_HS0v2ma.js → context-builder-BHiFUA8O.js} +10 -2
  358. package/web/assets/{cose-bilkent-UX7MHV2Q-BHv2bbtl.js → cose-bilkent-UX7MHV2Q-D71wNYRJ.js} +1 -1
  359. package/web/assets/dagre-ND4H6XIP-BIkxmhcu.js +4 -0
  360. package/web/assets/diagram-3NCE3AQN-BTa6iH0T.js +43 -0
  361. package/web/assets/diagram-GF46GFSD-DZDV0vBj.js +24 -0
  362. package/web/assets/{diagram-HNR7UZ2L-fUWreZzx.js → diagram-HNR7UZ2L-DFCfd5LI.js} +2 -2
  363. package/web/assets/diagram-QXG6HAR7-BzM--Jj0.js +24 -0
  364. package/web/assets/diagram-WEQXMOUZ-DFFwz0k4.js +10 -0
  365. package/web/assets/{erDiagram-L5TCEMPS-QN2eEP1e.js → erDiagram-L5TCEMPS-CfHMJJqo.js} +1 -1
  366. package/web/assets/eventmodeling-FCH6USID-MREXMVOE-BQm9QzEa.js +1 -0
  367. package/web/assets/{flowDiagram-H6V6AXG4-CXbXImlN.js → flowDiagram-H6V6AXG4-Be805QiJ.js} +3 -3
  368. package/web/assets/{ganttDiagram-JCBTUEKG-BHQssTz6.js → ganttDiagram-JCBTUEKG-D3iL2Aet.js} +1 -1
  369. package/web/assets/gitGraph-WXDBUCRP-R675I2BI-Cr_Bm2Nb.js +1 -0
  370. package/web/assets/gitGraphDiagram-S2ZK5IYY-CPIDgxGm.js +106 -0
  371. package/web/assets/index-BvYev1UJ.js +635 -0
  372. package/web/assets/index-_lgn7hs5.css +2 -0
  373. package/web/assets/info-J43DQDTF-KCYPFFUO-Cs4p2oyk.js +1 -0
  374. package/web/assets/infoDiagram-3YFTVSEB-Y7BKSoke.js +2 -0
  375. package/web/assets/{ishikawaDiagram-BNXS4ZKH-6LKOvBfp.js → ishikawaDiagram-BNXS4ZKH-CT4SHFuI.js} +1 -1
  376. package/web/assets/{journeyDiagram-M6C3CM3L-DNPYCpvq.js → journeyDiagram-M6C3CM3L-CvArszLo.js} +1 -1
  377. package/web/assets/{kanban-definition-75IXJCU3-DgDi9oJT.js → kanban-definition-75IXJCU3-C6yDxr7N.js} +3 -3
  378. package/web/assets/{katex-K3KEBU37-CrVLz8l7.js → katex-K3KEBU37-CTc5BslQ.js} +1 -1
  379. package/web/assets/{mindmap-definition-2TDM6QVE-CwR5sBB-.js → mindmap-definition-2TDM6QVE-BOc2WEne.js} +1 -1
  380. package/web/assets/packet-YPE3B663-LP52Z2RK-CKCrztD2.js +1 -0
  381. package/web/assets/pie-LRSECV5Y-TCRJHUBD-BB7pHqoD.js +1 -0
  382. package/web/assets/{pieDiagram-CU6KROY3-By8g6f6B.js → pieDiagram-CU6KROY3-Cvc0f_Pd.js} +1 -1
  383. package/web/assets/{quadrantDiagram-VICAPDV7-bAm6Hi_5.js → quadrantDiagram-VICAPDV7-yXSZ2lLz.js} +1 -1
  384. package/web/assets/radar-GUYGQ44K-RDLRG3WG-DhoTOcuK.js +1 -0
  385. package/web/assets/{requirementDiagram-JXO7QTGE-7oDcJ1_J.js → requirementDiagram-JXO7QTGE-BRcZvHs4.js} +1 -1
  386. package/web/assets/{sankeyDiagram-URQDO5SZ-LFJz53u5.js → sankeyDiagram-URQDO5SZ-1qEjlFIB.js} +1 -1
  387. package/web/assets/{sequenceDiagram-VS2MUI6T-FySeKCUy.js → sequenceDiagram-VS2MUI6T-PcSCuvrB.js} +3 -3
  388. package/web/assets/stateDiagram-7D4R322I-D6qYSV1E.js +1 -0
  389. package/web/assets/stateDiagram-v2-36443NZ5-Bg-ImOSX.js +1 -0
  390. package/web/assets/{timeline-definition-O6YCAMPW-Ds2CnVZK.js → timeline-definition-O6YCAMPW-QWkh01xw.js} +1 -1
  391. package/web/assets/treeView-BLDUP644-QA4HXRO3-ODehyGKL.js +1 -0
  392. package/web/assets/treemap-LRROVOQU-LLAWBHMP-BfpgC-7o.js +1 -0
  393. package/web/assets/{vennDiagram-MWXL3ELB-DUIEwXWp.js → vennDiagram-MWXL3ELB-ak4DfwuM.js} +3 -3
  394. package/web/assets/wardley-L42UT6IY-5TKZOOLJ-CNeL6VHE.js +1 -0
  395. package/web/assets/{wardleyDiagram-CUQ6CDDI-DEiFPQih.js → wardleyDiagram-CUQ6CDDI-CTzR4Loq.js} +1 -1
  396. package/web/assets/{xychartDiagram-N2JHSOCM-BUbayhST.js → xychartDiagram-N2JHSOCM-DA1BEaQz.js} +1 -1
  397. package/web/index.html +13 -15
  398. package/scripts/materialize-vendor-grammars.cjs +0 -97
  399. package/web/assets/architecture-7EHR7CIX-6QZW5X65-BETj2x4g.js +0 -1
  400. package/web/assets/architectureDiagram-UL44E2DR-D1EXI0zA.js +0 -36
  401. package/web/assets/chunk-2T2R6R2M-n6s9JZqv.js +0 -4
  402. package/web/assets/chunk-2UTLFMKG-CMBB1TMN.js +0 -1
  403. package/web/assets/chunk-4R4BOZG6-mKhL59ul.js +0 -159
  404. package/web/assets/chunk-6764PJDD-ChwMM2z4.js +0 -1
  405. package/web/assets/chunk-7J6CGLKN-DT-b53FT.js +0 -10
  406. package/web/assets/chunk-C62D2QBJ-CDAWj26E.js +0 -1
  407. package/web/assets/chunk-CEXFNPSA-D68Tk6ls.js +0 -1
  408. package/web/assets/chunk-CilyBKbf.js +0 -1
  409. package/web/assets/chunk-J5EP6P6S-DxWW0yvu.js +0 -1
  410. package/web/assets/chunk-KGYTTC2M-C6PHeuay.js +0 -1
  411. package/web/assets/chunk-RERM46MO-DQNbXtfw.js +0 -1
  412. package/web/assets/chunk-RKZBBQEN-BmTPLSyv.js +0 -1
  413. package/web/assets/chunk-RLI5ZMPA-DExu2DOK.js +0 -1
  414. package/web/assets/chunk-T5OCTHI4--9wWpVws.js +0 -1
  415. package/web/assets/chunk-UP6H54XL-DsKdC6jC.js +0 -1
  416. package/web/assets/chunk-UXSXWOXI-DR81EqLr.js +0 -1
  417. package/web/assets/classDiagram-KGZ6W3CR-Bv93af_b.js +0 -1
  418. package/web/assets/classDiagram-v2-72OJOZXJ-CLfEqHUa.js +0 -1
  419. package/web/assets/dagre-ND4H6XIP-DsIr9MOv.js +0 -4
  420. package/web/assets/diagram-3NCE3AQN-BqAtKUpW.js +0 -43
  421. package/web/assets/diagram-GF46GFSD-CaBG6n6o.js +0 -24
  422. package/web/assets/diagram-QXG6HAR7-CZ-O3rcV.js +0 -24
  423. package/web/assets/diagram-WEQXMOUZ-P4lSL4GH.js +0 -10
  424. package/web/assets/eventmodeling-FCH6USID-MREXMVOE-B3myHUst.js +0 -1
  425. package/web/assets/gitGraph-WXDBUCRP-R675I2BI-DF3rtf4A.js +0 -1
  426. package/web/assets/gitGraphDiagram-S2ZK5IYY-CCwVLT__.js +0 -106
  427. package/web/assets/index-BKWA-m7o.css +0 -2
  428. package/web/assets/index-CG6q8eTs.js +0 -626
  429. package/web/assets/info-J43DQDTF-KCYPFFUO-R4XV_akJ.js +0 -1
  430. package/web/assets/infoDiagram-3YFTVSEB-DmLICZx1.js +0 -2
  431. package/web/assets/packet-YPE3B663-LP52Z2RK-CgQPdNZa.js +0 -1
  432. package/web/assets/pie-LRSECV5Y-TCRJHUBD-BzWOwc_c.js +0 -1
  433. package/web/assets/radar-GUYGQ44K-RDLRG3WG-B7KG0FN7.js +0 -1
  434. package/web/assets/stateDiagram-7D4R322I-CB2nABwH.js +0 -1
  435. package/web/assets/stateDiagram-v2-36443NZ5-COBGd2RL.js +0 -1
  436. package/web/assets/treeView-BLDUP644-QA4HXRO3-CRSxEwLO.js +0 -1
  437. package/web/assets/treemap-LRROVOQU-LLAWBHMP-a0PfKoVn.js +0 -1
  438. package/web/assets/wardley-L42UT6IY-5TKZOOLJ-BKQ6e5mC.js +0 -1
  439. /package/web/assets/{chunk-AQ6EADP3-CCFje6lL.js → chunk-AQ6EADP3-CZhslHi-.js} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gitnexus",
3
- "version": "1.6.8-rc.8",
3
+ "version": "1.6.8",
4
4
  "description": "Graph-powered code intelligence for AI agents. Index any codebase, query via MCP or CLI.",
5
5
  "author": "Abhigyan Patwari",
6
6
  "license": "PolyForm-Noncommercial-1.0.0",
@@ -49,7 +49,7 @@
49
49
  "test:watch": "vitest",
50
50
  "test:coverage": "vitest run --coverage",
51
51
  "test:cross-platform": "tsx scripts/run-cross-platform.ts",
52
- "postinstall": "node scripts/materialize-vendor-grammars.cjs && node scripts/build-tree-sitter-grammars.cjs",
52
+ "postinstall": "node scripts/build-tree-sitter-grammars.cjs",
53
53
  "assert-publish-coverage": "node scripts/assert-publish-grammar-coverage.cjs",
54
54
  "prepare": "node scripts/build.js",
55
55
  "prepack": "node scripts/assert-publish-grammar-coverage.cjs && node scripts/build.js"
@@ -59,6 +59,7 @@
59
59
  "@ladybugdb/core": "^0.17.0",
60
60
  "@modelcontextprotocol/sdk": "^1.0.0",
61
61
  "@scarf/scarf": "^1.4.0",
62
+ "busboy": "^1.6.0",
62
63
  "cli-progress": "^3.12.0",
63
64
  "commander": "^14.0.3",
64
65
  "cors": "^2.8.5",
@@ -93,6 +94,11 @@
93
94
  "uuid": "^14.0.0"
94
95
  },
95
96
  "devDependencies": {
97
+ "@babel/generator": "^7.29.7",
98
+ "@babel/parser": "^7.29.7",
99
+ "@babel/traverse": "^7.29.7",
100
+ "@babel/types": "^7.29.7",
101
+ "@types/busboy": "^1.5.4",
96
102
  "@types/cli-progress": "^3.11.6",
97
103
  "@types/cors": "^2.8.17",
98
104
  "@types/express": "^5.0.6",
@@ -112,6 +112,24 @@ function findCoverageProblems({ grammars }) {
112
112
  return problems;
113
113
  }
114
114
 
115
+ /**
116
+ * Stray local source-build outputs under `vendor/<name>/build/`. These would
117
+ * ship in the tarball (`files: ["vendor"]` overrides .gitignore/.npmignore) AND
118
+ * shadow the committed prebuilds — `node-gyp-build` resolves `build/Release`
119
+ * BEFORE `prebuilds/`, so a consumer on the publisher's platform would load the
120
+ * stray (possibly stale/wrong) binding instead of the curated prebuild. The
121
+ * build dir is gitignored and only appears if a maintainer source-built locally
122
+ * (e.g. on a no-prebuild platform); refuse to publish it. (#2144 review.)
123
+ */
124
+ function findStrayBuildArtifacts(vendorDir) {
125
+ if (!fs.existsSync(vendorDir)) return [];
126
+ return fs
127
+ .readdirSync(vendorDir)
128
+ .filter((d) => /^tree-sitter-/.test(d))
129
+ .filter((d) => fs.existsSync(path.join(vendorDir, d, 'build')))
130
+ .map((d) => `vendor/${d}/build`);
131
+ }
132
+
115
133
  function collectGrammars(vendorDir, shipsVendorSource) {
116
134
  if (!fs.existsSync(vendorDir)) return [];
117
135
  return fs
@@ -141,6 +159,18 @@ function main() {
141
159
  process.exit(1);
142
160
  }
143
161
 
162
+ const stray = findStrayBuildArtifacts(vendorDir);
163
+ if (stray.length > 0) {
164
+ console.error(
165
+ '[publish-guard] Refusing to publish — stray source-build output under vendor/ would\n' +
166
+ 'ship and shadow the committed prebuilds (node-gyp-build loads build/Release before\n' +
167
+ 'prebuilds/):',
168
+ );
169
+ for (const s of stray) console.error(` - ${s}`);
170
+ console.error('\nFix: remove it before packing, e.g. `rm -rf gitnexus/vendor/*/build`.');
171
+ process.exit(1);
172
+ }
173
+
144
174
  const problems = findCoverageProblems({ grammars });
145
175
  if (problems.length > 0) {
146
176
  console.error('[publish-guard] Refusing to publish — a vendored grammar would ship unusable:');
@@ -163,6 +193,7 @@ if (require.main === module) main();
163
193
 
164
194
  module.exports = {
165
195
  findCoverageProblems,
196
+ findStrayBuildArtifacts,
166
197
  filesShipsVendorSource,
167
198
  isBuildableFromSource,
168
199
  sourceBuildSet,
@@ -1,19 +1,25 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
- * Activate the vendored tree-sitter native bindings after
4
- * materialize-vendor-grammars.cjs. One registry-driven script replaces the
5
- * former per-grammar build-tree-sitter-<name>.cjs files (they were ~95%
6
- * identical).
3
+ * Activate the vendored tree-sitter native bindings IN PLACE under `vendor/`.
4
+ * One registry-driven script replaces the former per-grammar
5
+ * build-tree-sitter-<name>.cjs files (they were ~95% identical).
6
+ *
7
+ * The grammars (tree-sitter-c/dart/proto/swift/kotlin) are loaded from
8
+ * `vendor/<name>/` by absolute path at runtime (see
9
+ * src/core/tree-sitter/vendored-grammars.ts) and are NEVER copied into
10
+ * node_modules — an undeclared package under node_modules is "extraneous" to
11
+ * every subsequent npm/npx reify, which prunes/relocates it (Windows
12
+ * `EPERM: …, symlink` + a silent grammar deletion on the 2nd run; #2111/#1728).
7
13
  *
8
14
  * For each grammar the resolution order is identical:
9
- * 1. If the package isn't materialized (no binding.gyp) or the binding is
15
+ * 1. If the vendored source is absent (no binding.gyp) or the binding is
10
16
  * already built, do nothing.
11
17
  * 2. Prefer a committed prebuild for this platform-arch (toolchain-free) via
12
- * node-gyp-build — the goal once build-tree-sitter-prebuilds.yml has
13
- * populated all six tuples.
18
+ * node-gyp-build — `vendor/<name>/prebuilds/` ships all six tuples, so on a
19
+ * supported platform this returns immediately and writes nothing.
14
20
  * 3. Otherwise source-build from the vendored grammar source (binding.gyp +
15
- * src/) so parsing still works on any toolchain host — e.g. CI, before the
16
- * prebuilds land.
21
+ * src/) into `vendor/<name>/build/` (gitignored) so parsing still works on
22
+ * a toolchain host that lacks a matching prebuild.
17
23
  *
18
24
  * HARD INVARIANT: this runs in `gitnexus`'s postinstall, so it MUST NEVER throw
19
25
  * or exit non-zero — a failure for any single grammar must not break the install.
@@ -53,7 +59,7 @@ function buildGrammar(short) {
53
59
  return;
54
60
  }
55
61
 
56
- const dir = path.join(__dirname, '..', 'node_modules', `tree-sitter-${short}`);
62
+ const dir = path.join(__dirname, '..', 'vendor', `tree-sitter-${short}`);
57
63
  const bindingGyp = path.join(dir, 'binding.gyp');
58
64
  const bindingNode = path.join(dir, 'build', 'Release', `tree_sitter_${short}_binding.node`);
59
65
 
@@ -37,6 +37,7 @@ const PLATFORM_LOGIC = [
37
37
  'test/unit/repo-manager.test.ts',
38
38
  'test/unit/repo-manager-finalize-invariant.test.ts',
39
39
  'test/unit/hooks.test.ts',
40
+ 'test/unit/hook-db-lock-probe.test.ts',
40
41
  'test/unit/cursor-hook.test.ts',
41
42
  'test/unit/sidecar-recovery.test.ts',
42
43
  'test/unit/pool-wal-recovery.test.ts',
@@ -16,10 +16,10 @@ description: "Use when the user is debugging a bug, tracing an error, or asking
16
16
  ## Workflow
17
17
 
18
18
  ```
19
- 1. query({query: "<error or symptom>"}) → Find related execution flows
19
+ 1. query({search_query: "<error or symptom>"}) → Find related execution flows
20
20
  2. context({name: "<suspect>"}) → See callers/callees/processes
21
21
  3. READ gitnexus://repo/{name}/process/{name} → Trace execution flow
22
- 4. cypher({query: "MATCH path..."}) → Custom traces if needed
22
+ 4. cypher({statement: "MATCH path..."}) → Custom traces if needed
23
23
  ```
24
24
 
25
25
  > If "Index is stale" → run `node .gitnexus/run.cjs analyze` in terminal.
@@ -45,13 +45,14 @@ description: "Use when the user is debugging a bug, tracing an error, or asking
45
45
  | Intermittent failure | `context` → look for external calls, async deps |
46
46
  | Performance issue | `context` → find symbols with many callers (hot paths) |
47
47
  | Recent regression | `detect_changes` to see what your changes affect |
48
+ | "How does A reach B?" | `trace` between the two symbols — shortest call chain in one call |
48
49
 
49
50
  ## Tools
50
51
 
51
52
  **query** — find code related to error:
52
53
 
53
54
  ```
54
- query({query: "payment validation error"})
55
+ query({search_query: "payment validation error"})
55
56
  → Processes: CheckoutFlow, ErrorHandling
56
57
  → Symbols: validatePayment, handlePaymentError, PaymentException
57
58
  ```
@@ -72,10 +73,21 @@ MATCH path = (a)-[:CodeRelation {type: 'CALLS'}*1..2]->(b:Function {name: "valid
72
73
  RETURN [n IN nodes(path) | n.name] AS chain
73
74
  ```
74
75
 
76
+ **trace** — shortest call chain between two symbols ("how does A reach B?"), one call instead of chaining `context` hops:
77
+
78
+ ```
79
+ trace({ from: "processCheckout", to: "fetchRates" })
80
+ → status: ok, hopCount: 3
81
+ → hops: processCheckout → validatePayment → verifyCard → fetchRates
82
+ → edges: CALLS (1.0), CALLS (0.95), CALLS (1.0)
83
+ ```
84
+
85
+ When no path exists, `trace` reports the furthest reachable node — exactly where the chain breaks (dynamic dispatch, reflection, or an external boundary).
86
+
75
87
  ## Example: "Payment endpoint returns 500 intermittently"
76
88
 
77
89
  ```
78
- 1. query({query: "payment error handling"})
90
+ 1. query({search_query: "payment error handling"})
79
91
  → Processes: CheckoutFlow, ErrorHandling
80
92
  → Symbols: validatePayment, handlePaymentError
81
93
 
@@ -18,7 +18,7 @@ description: "Use when the user asks how code works, wants to understand archite
18
18
  ```
19
19
  1. READ gitnexus://repos → Discover indexed repos
20
20
  2. READ gitnexus://repo/{name}/context → Codebase overview, check staleness
21
- 3. query({query: "<what you want to understand>"}) → Find related execution flows
21
+ 3. query({search_query: "<what you want to understand>"}) → Find related execution flows
22
22
  4. context({name: "<symbol>"}) → Deep dive on specific symbol
23
23
  5. READ gitnexus://repo/{name}/process/{name} → Trace full execution flow
24
24
  ```
@@ -50,7 +50,7 @@ description: "Use when the user asks how code works, wants to understand archite
50
50
  **query** — find execution flows related to a concept:
51
51
 
52
52
  ```
53
- query({query: "payment processing"})
53
+ query({search_query: "payment processing"})
54
54
  → Processes: CheckoutFlow, RefundFlow, WebhookHandler
55
55
  → Symbols grouped by flow with file locations
56
56
  ```
@@ -68,7 +68,7 @@ context({name: "validateUser"})
68
68
 
69
69
  ```
70
70
  1. READ gitnexus://repo/my-app/context → 918 symbols, 45 processes
71
- 2. query({query: "payment processing"})
71
+ 2. query({search_query: "payment processing"})
72
72
  → CheckoutFlow: processPayment → validateCard → chargeStripe
73
73
  → RefundFlow: initiateRefund → calculateRefund → processRefund
74
74
  3. context({name: "processPayment"})
@@ -35,9 +35,13 @@ For any task involving code understanding, debugging, impact analysis, or refact
35
35
  | `query` | Process-grouped code intelligence — execution flows related to a concept |
36
36
  | `context` | 360-degree symbol view — categorized refs, processes it participates in |
37
37
  | `impact` | Symbol blast radius — what breaks at depth 1/2/3 with confidence |
38
+ | `trace` | Shortest path between two symbols — "how does A reach B?" in one call |
38
39
  | `detect_changes` | Git-diff impact — what do your current changes affect |
39
40
  | `rename` | Multi-file coordinated rename with confidence-tagged edits |
40
41
  | `cypher` | Raw graph queries (read `gitnexus://repo/{name}/schema` first) |
42
+ | `explain` | Persisted taint findings — source→sink data flows (needs `analyze --pdg`) |
43
+ | `pdg_query` | Control/data dependence — what gates X (CDG) / where Y flows (REACHING_DEF); needs `analyze --pdg` |
44
+ | `check` | Check graph invariants such as circular imports |
41
45
  | `list_repos` | Discover indexed repos (paginated — `limit`/`offset`) |
42
46
 
43
47
  ### Paginating `list_repos`
@@ -71,6 +75,35 @@ list_repos { offset: 400 } → repos 401–437, hasMore false
71
75
 
72
76
  Notes: `offset` ≥ `total` returns an empty page (with `total` still reported). Out-of-range or malformed `limit`/`offset` (non-integer, `limit` outside `[1, 200]`, `offset < 0`) are rejected with a clear error — `limit` above the max is rejected, not silently capped. The order is deterministic (lower-cased name, then path), so paging never skips or duplicates an entry while the registry is unchanged.
73
77
 
78
+ ### Taint findings (`explain`)
79
+
80
+ `explain` returns intra-procedural taint findings (`TAINTED` edges) recorded by `gitnexus analyze --pdg` — each with a sink category (command-injection, code-injection, path-traversal, sql-injection, xss), source/sink lines, and the ordered hop path with the variable carried on each hop.
81
+
82
+ - `explain {}` — enumerate all findings for the repo (bounded by `limit`, deterministic order)
83
+ - `explain { target: "src/vuln.ts" }` — findings in a file (suffix path match accepted)
84
+ - `explain { target: "runUserCommand" }` — findings in a function (resolved like `context`; ambiguous names return ranked candidates)
85
+
86
+ A repo indexed without `--pdg` returns a clear "no taint layer" note. Caveats: findings are intra-procedural only — cross-function, closure/callback, property/field, and implicit flows are not modeled, so the absence of a finding is **not** proof of safety. `SANITIZES` (sanitizer-kill) edges are queryable via `cypher`.
87
+
88
+ ### Control & data dependence (`pdg_query`)
89
+
90
+ `pdg_query` reads the control/data-dependence layers `gitnexus analyze --pdg` records (CDG + REACHING_DEF, basic-block granular) — the control/data analog of `explain`. It is **always anchored** (a `target` file path or symbol, resolved like `context`) and has two modes:
91
+
92
+ - `pdg_query { mode: "controls", target: "..." }` — CDG: "under what condition does X run?". Each edge is a controlling predicate block → dependent block with the branch sense (`'T'`/`'F'`) in `reason`; an edge into an early `return`/`throw` is flagged `guard: true` (guard-clause discovery — the sense depends on the predicate, so don't filter guards by a fixed label).
93
+ - `pdg_query { mode: "flows", target: "...", variable?: "..." }` — REACHING_DEF def→use edges within the function; pass `variable` to trace one binding.
94
+
95
+ A repo indexed without `--pdg` returns a "no PDG layer" note (or "status unknown" when the layer can't be confirmed). Intra-procedural only — cross-function flow is taint's domain (`explain`). The raw CDG/REACHING_DEF edges are also queryable via `cypher`. See the `gitnexus-pdg-query` skill for the full query surface.
96
+
97
+ ### Shortest path between two symbols (`trace`)
98
+
99
+ `trace` answers "how does A reach B?" in one call — the shortest directed path over `CALLS` (plus `HAS_METHOD`, so a class-rooted trace descends into its methods) instead of chaining 3–8 `context`/`impact` hops by hand.
100
+
101
+ - `trace { from: "validateUser", to: "executeQuery" }` — shortest path between two symbols.
102
+ - Disambiguate common names with `from_uid`/`to_uid` (zero-ambiguity) or `from_file`/`to_file`; an ambiguous name returns ranked candidates.
103
+ - `maxDepth` (default 10, max 30) bounds the search; `includeTests` (default false) lets the traversal pass through test-file symbols.
104
+
105
+ Returns ordered `hops` (each `{ name, filePath, startLine }`) and an aligned `edges[]` of `{ relType, confidence }`, so call hops and containment (`HAS_METHOD`) hops stay distinguishable. When no path exists it reports the **furthest** reachable node (where the chain breaks) and sets `truncated: true` if a traversal cap was hit first. Every result carries a `status`: `ok` / `no_path` / `ambiguous` / `not_found` / `error`.
106
+
74
107
  ## Resources Reference
75
108
 
76
109
  Lightweight reads (~100-500 tokens) for navigation:
@@ -0,0 +1,89 @@
1
+ ---
2
+ name: gitnexus-pdg-query
3
+ description: "Use when querying or extending GitNexus's PDG control/data-dependence surface (the `pdg_query` MCP tool, CDG/REACHING_DEF edges), or reasoning about \"what controls X\" / \"where does Y flow\" / guard clauses. Examples: \"what guards this statement?\", \"trace this variable within the function\", \"why is the pdg_query result empty?\", \"add a CDG query\"."
4
+ ---
5
+
6
+ # PDG query surface with GitNexus
7
+
8
+ Expert knowledge for the `pdg_query` MCP tool and the control/data-dependence
9
+ edges it reads — the opt-in `--pdg` program-dependence layers. Read this before
10
+ touching `gitnexus/src/mcp/local/local-backend.ts` (`_pdgQueryImpl`) or the
11
+ `pdg_query` tool def, or when explaining a `pdg_query` result.
12
+
13
+ ## When to Use
14
+
15
+ - "Under what condition does this statement run?" (guarding predicates).
16
+ - "Where does this variable flow inside the function?" (def→use).
17
+ - Guard-clause discovery (early-return guards — subsumes the #559 heuristic).
18
+ - Extending or reviewing `pdg_query` / the CDG / REACHING_DEF read path.
19
+ - Debugging an empty or surprising `pdg_query` result.
20
+
21
+ ## The layered substrate (build order)
22
+
23
+ `pdg_query` runs **on** the same graph taint runs on. Each layer is opt-in
24
+ behind `--pdg`; a default `analyze` run records none of them (byte-identical).
25
+
26
+ ```
27
+ L1 CFG per-function basic blocks + control-flow edges (M1 #2081)
28
+ L2 REACHING_DEF GEN/KILL def→use data dependence (pure solver) (M2 #2082)
29
+ L5 CDG Ferrante control dependence (post-dominators) (M5 #2085)
30
+ ```
31
+
32
+ All three are `BasicBlock → BasicBlock` edges in the single `CodeRelation` table
33
+ (keyed by the `type` property). There is **no** `Function → BasicBlock` edge.
34
+
35
+ ## The two modes
36
+
37
+ - `pdg_query({ mode: 'controls', target })` — CDG. For the anchored function,
38
+ each edge: controlling predicate block → dependent block + branch sense in
39
+ `label` (`'T'` = predicate's true/taken arm, `'F'` = false/fall-through). An
40
+ edge into an early-return/throw block is flagged `guard: true`.
41
+ - `pdg_query({ mode: 'flows', target, variable? })` — REACHING_DEF def→use
42
+ edges; `variable` filters to one binding.
43
+
44
+ `target` is **required** — a file path or a symbol/function name (resolved like
45
+ `context()`). There is no anchorless mode (see below).
46
+
47
+ ## The corrected guard-clause Cypher
48
+
49
+ The RFC #567 §2 form (`[:CDG {label:'F'}]`) does **not** run as written. Edges
50
+ are values of the single `CodeRelation` table's `type` property, and the branch
51
+ sense is in `reason`, NOT a `label` column:
52
+
53
+ ```cypher
54
+ MATCH (pred:BasicBlock)-[r:CodeRelation {type: 'CDG'}]->(dep:BasicBlock)
55
+ WHERE dep.text STARTS WITH 'return' OR dep.text STARTS WITH 'throw'
56
+ RETURN pred.startLine, r.reason AS branch, dep.startLine, dep.text
57
+ ```
58
+
59
+ `r.reason` is the sense the predicate took to reach the early exit. For
60
+ `if (!ok) return;` the return rides the predicate's **true** arm (`'T'`) and the
61
+ protected body rides the **false** arm (`'F'`) — polarity depends on the guard,
62
+ so don't hard-code one sense.
63
+
64
+ ## Gotchas (the load-bearing ones)
65
+
66
+ - **Always anchored + LIMIT-bounded.** LadybugDB has no rel-property index, so
67
+ an unanchored `[:CDG*]`/`[:REACHING_DEF*]` path scan is unbounded. `pdg_query`
68
+ requires `target` and bounds the page; raw `cypher` callers must anchor on a
69
+ file id-prefix or symbol span themselves.
70
+ - **BasicBlock↔symbol join is reconstructed.** No `Function→BasicBlock` edge:
71
+ the block is matched by its id-prefix (`BasicBlock:<file>:<fnStartLine>:…`)
72
+ plus `startLine` within the symbol's span. BasicBlock `startLine` is **1-based**
73
+ while the symbol node's `startLine`/`endLine` are **0-based**, so **both** bounds
74
+ are shifted `+1` (`[symStart+1, symEnd+1]`): the upper `+1` keeps a guard/def/use
75
+ on the function's **final line**, the lower `+1` excludes an adjacent function's
76
+ block on the line directly **above**. Same-line / nested functions anchor coarsely.
77
+ - **No PDG layer ⇒ a note, not an error.** If the repo wasn't indexed with
78
+ `--pdg` the tool returns `{ results: [], note: "no PDG layer …" }` (cheap meta
79
+ probe on `RepoMeta.pdg.maxCdgEdgesPerFunction` / `maxReachingDefEdgesPerFunction`).
80
+ - **CDG labels are binary in M5/M6.** Every `switch`-case arm is `'T'`; per-case
81
+ conditions are not yet distinguished.
82
+ - **Intra-procedural only.** Cross-function flow is taint's domain (`explain`).
83
+
84
+ ## Mirror, don't fork
85
+
86
+ `_pdgQueryImpl` is the front half of `_explainImpl` (WAL wrapper, meta no-layer
87
+ probe, limit validation, `resolveSymbolCandidates` anchoring) with CDG/
88
+ REACHING_DEF instead of TAINTED — and none of taint's path-codec / interproc
89
+ `TAINT_PATH` machinery. Reuse those shared helpers; do not re-implement them.
@@ -17,7 +17,7 @@ description: "Use when the user wants to rename, extract, split, move, or restru
17
17
 
18
18
  ```
19
19
  1. impact({target: "X", direction: "upstream"}) → Map all dependents
20
- 2. query({query: "X"}) → Find execution flows involving X
20
+ 2. query({search_query: "X"}) → Find execution flows involving X
21
21
  3. context({name: "X"}) → See all incoming/outgoing refs
22
22
  4. Plan update order: interfaces → implementations → callers → tests
23
23
  ```
@@ -0,0 +1,178 @@
1
+ ---
2
+ name: gitnexus-taint-analysis
3
+ description: "Use when working on, reviewing, or extending GitNexus's CFG/taint/PDG subsystem (the `--pdg` layers), or when reasoning about source→sink data-flow findings. Examples: \"How does taint analysis work here?\", \"Why didn't explain find this flow?\", \"Add a new sink/source\", \"Review the interprocedural taint code\"."
4
+ ---
5
+
6
+ # CFG & Taint Analysis with GitNexus
7
+
8
+ Expert knowledge for the opt-in `--pdg` program-analysis subsystem: control-flow
9
+ graphs, reaching definitions, and intra- + inter-procedural taint. Read this
10
+ before touching `gitnexus/src/core/ingestion/cfg/**` or
11
+ `gitnexus/src/core/ingestion/taint/**`, or when explaining a finding.
12
+
13
+ ## When to Use
14
+
15
+ - "How does the taint engine work / why is this flow (not) reported?"
16
+ - Adding a source, sink, or sanitizer to the model.
17
+ - Extending or reviewing the CFG / reaching-defs / taint / summary code.
18
+ - Understanding the `explain` MCP tool's findings (intra- vs inter-procedural).
19
+ - Debugging a false positive or false negative in `--pdg` output.
20
+
21
+ ## The layered substrate (build order)
22
+
23
+ Taint runs **on** the graph, not beside it. Each layer is opt-in behind `--pdg`
24
+ and a default `analyze` run is **byte-identical** (the golden parity gate is the
25
+ hard floor for every change here).
26
+
27
+ ```
28
+ L1 CFG per-function basic blocks + control-flow edges (M1 #2081)
29
+ L2 REACHING_DEF GEN/KILL def→use data dependence (pure solver) (M2 #2082)
30
+ L3 Taint (intra) source→sink over RD facts, minus sanitizers (M3 #2083)
31
+ L4 Taint (inter) per-function summaries composed over CALLS (M4 #2084)
32
+ ```
33
+
34
+ - **Worker-built, main-thread-solved.** The parse worker builds each function's
35
+ CFG + harvests def/use + call-site facts onto `ParsedFile.cfgSideChannel`
36
+ (plain, structured-clone-safe data — never AST nodes). The main thread runs
37
+ the pure solvers. NEVER re-parse on the main thread (re-introduces the #1983
38
+ OOM).
39
+ - **In-phase emit (KTD1).** L1–L4-harvest all run INSIDE the scope-resolution
40
+ pdg window (`scope-resolution/pipeline/run.ts`, gated `input.pdg === true`),
41
+ because the disk-backed ParsedFile store is cleared when that phase ends — a
42
+ standalone post-`mro` phase would read empty data. The cross-function fixpoint
43
+ (L4) is the exception: it runs in its OWN registered phase (`taintSummaries`)
44
+ AFTER scope-resolution, because it needs the COMPLETE call graph, and consumes
45
+ small plain summary data threaded out via `ScopeResolutionOutput`.
46
+ - **Pure-solver contract.** `computeReachingDefs`, `computeTaintFlows`,
47
+ `harvestFunctionSummary`, and `solveInterprocTaint` are pure and deterministic
48
+ (no graph, no I/O, no logger; sorted outputs). Snapshot tests and
49
+ content-derived edge ids depend on it.
50
+
51
+ ## Intra-procedural taint (L3)
52
+
53
+ Forward reachability over RD facts from matched **sources** to matched **sinks**,
54
+ killed by **sanitizers**. Key design points worth internalizing:
55
+
56
+ - **Occurrence-tagged sites.** A flat per-arg binding set cannot tell
57
+ `exec(escape(x))` (safe) from `exec(x)` (finding); the harvest records nested
58
+ call structure (`SiteRecord.parent`/via-tags) so sanitizer interposition is
59
+ precise.
60
+ - **Kind-set sanitizer model.** A taint carries a set of *neutralized*
61
+ `SinkKind`s; a sink fires unless its kind is in the set. So `escape(req.body)`
62
+ suppresses `res.send` (xss) but STILL fires `db.query` (sql) — a kind-blind
63
+ kill would be a suppressed live injection (the forbidden FN direction).
64
+ `path.basename(t)` neutralizes path-traversal only, not command-injection.
65
+ - **Statement-level finding identity.** NOT block-pair (block conflation drops
66
+ distinct findings; `exec(req.body, req.query)` is two findings).
67
+ - Persisted as `TAINTED` edges (BasicBlock→BasicBlock); the path rides the
68
+ `reason` column via the shared versioned codec (`taint/path-codec.ts`).
69
+
70
+ ## Interprocedural taint (L4) — the functional/summary method
71
+
72
+ The production approach (Sharir-Pnueli 1981; the same shape as Meta's Pysa and
73
+ Mariana Trench, and FB Infer) — NOT full IFDS tabulation. Each function is
74
+ reduced to a compact **summary**, and summaries are composed over the already-
75
+ resolved `CALLS` graph.
76
+
77
+ **Summary shape** (`taint/summary-model.ts`, whole-parameter granularity):
78
+
79
+ | Edge | Meaning | Analogue |
80
+ |------|---------|----------|
81
+ | `param→return` | a param flows to the return value | TITO — **reserved** (the floor already covers its recall; precision pass deferred) |
82
+ | `param→callee-arg` | a param flows into arg *j* of a call (carries the path's neutralized sink kinds) | TITO into callee |
83
+ | `param→sink` | a param reaches a modelled sink | partial/triggered sink |
84
+ | `source→return` | the function generates+returns a source | generative — **composed** via the caller's `callResults` |
85
+ | `source→callee-arg` | a generated source flows into a call | fixpoint SEED |
86
+ | `callResults` | a user-function call's result flows to a sink/return/callee-arg in the caller | composes with callee `source→return` |
87
+
88
+ **The fixpoint** (`taint/interproc-solver.ts`): the unit is `(function,
89
+ parameter, source)`. Seed from `source→callee-arg`, propagate via
90
+ `param→callee-arg`, fire a finding when a tainted param meets `param→sink`.
91
+
92
+ - **Cycle-safe by monotonicity.** The tainted-set is monotone over a finite
93
+ lattice (`fn × param × source`), so the worklist converges — a recursive call
94
+ just re-proposes an already-visited entry. SCC condensation would only refine
95
+ processing order; correctness/termination don't require it.
96
+ - **Source-discriminated state (load-bearing).** Key the state by the SOURCE
97
+ too. Keying only by `(fn, param)` collapses multi-source flows: a sink param
98
+ tainted by source A is marked visited and a later flow from source B is dropped
99
+ before firing — the recurring multi-source bug class. (Bit M3; bit M4 U9.)
100
+ - **Name-based call join.** Match a summary's call-arg edge to a `CALLS` edge by
101
+ CALLEE NAME, not call-site line — line-base parity (CFG 1-based vs reference
102
+ site) is fragile; the callee identity is exact and context-insensitivity
103
+ taints the callee's param identically at every call site.
104
+ - Persisted as `TAINT_PATH` edges (Function→Function), function-level hop chain
105
+ in `reason` via the same codec; confidence < the intra-procedural 1.0.
106
+
107
+ **Context-insensitivity** is the accepted trade-off at this tier: one summary
108
+ per function, return/call-site merging accepted (security-conservative). Expect
109
+ some FP from merging; the bigger FN sources are unmodeled features (below).
110
+
111
+ ## Known false-negative classes (documented, deferred)
112
+
113
+ The largest is **closures/callbacks** (`arr.forEach(() => sink(y))`) — taint
114
+ into a callback is dropped without per-library models (true of CodeQL's JS libs
115
+ too). Also deferred: field/property flows (`obj.x = taint; sink(obj.y)`),
116
+ field-sensitive access paths, guard-style sanitizers, implicit/control-dependence
117
+ flows, promise/async-await threading, and **destructured/rest params before a
118
+ tainted simple param** (the summary port index is the binding ordinal, not the
119
+ formal arg position — needs a formal-param index threaded from the worker
120
+ `BindingEntry`). The interprocedural join is also context-insensitive: when one
121
+ caller invokes two distinct **same-named callees**, a flow into one
122
+ over-attributes to both (sound — over-report, never a missed flow). Absence of a
123
+ finding is NOT proof of safety.
124
+
125
+ ## GitNexus-specific gotchas
126
+
127
+ - **Function↔CFG join.** `FunctionCfg.functionStartLine` is 1-based; `Function`/
128
+ `Method` node `startLine` is 0-based — join at `startLine - 1`. Function nodes
129
+ have no column, so same-line functions (`{a:()=>x(), b:()=>y()}`) are
130
+ ambiguous → drop (the summary driver counts `unresolved`) rather than
131
+ cross-wire.
132
+ - **No rel-property index (S1).** Kuzu has no secondary index on relationship
133
+ properties, and unanchored `[:TAINTED*]`/`[:TAINT_PATH*]` queries explode.
134
+ TAINT_PATH is therefore MATERIALIZED + anchored at analyze time, never
135
+ traversed live; `explain` reads it source-anchored + LIMIT-guarded.
136
+ - **`explain` is the only discovery surface.** `TAINTED`/`TAINT_PATH` are
137
+ deliberately OUT of `VALID_RELATION_TYPES` (impact's allow-list) and the web
138
+ schema (pinned in `security.test.ts`). `explain` enumerates both layers
139
+ (cross-function findings carry `interprocedural: true`).
140
+ - **One shared codec.** Both the emit path and `explain` import
141
+ `taint/path-codec.ts`. Two hand-rolled copies of a wire format drift — never
142
+ fork it. New metadata extends the format WITHIN the version when writer +
143
+ reader ship together.
144
+ - **Cache versioning.** A worker-harvest shape change bumps the parse-cache pdg
145
+ NAMESPACE (`pdg:N`), NOT `SCHEMA_BUMP` (which cold-invalidates every user).
146
+ Persisted-graph/config changes ride `RepoMeta.pdg`'s key-union mismatch →
147
+ full writeback. Model content rides `taintModelVersion`.
148
+
149
+ ## Adding a source / sink / sanitizer
150
+
151
+ Edit the language model in `taint/typescript-model.ts` (registered via the
152
+ explicit `registerBuiltinTaintModels` seam, keyed by `SupportedLanguages`). The
153
+ spec is hashable data (no functions). A sanitizer's `neutralizes` lists the
154
+ EXACT sink kinds it defends — never a blanket kill. Add a fixture + assert the
155
+ finding (or its absence) in `test/unit/taint/` (real-source harness:
156
+ `test/helpers/ts-cfg-harness.ts`); the end-to-end proof is
157
+ `test/integration/cfg/`.
158
+
159
+ ## Validation checklist for any `--pdg` change
160
+
161
+ ```
162
+ 1. tsc clean (schema additions are exhaustiveness-checked; watch the
163
+ api.ts getNodeQuery runtime read-path if a node label is added).
164
+ 2. Targeted vitest by directory (test/unit/taint, test/unit/cfg,
165
+ test/integration/cfg) — verify by ISOLATION, not full-suite exit
166
+ (known load-flakes). `node scripts/build.js` before worker/integration runs.
167
+ 3. Flag-off golden byte-identical (pipeline-graph-golden.test.ts).
168
+ 4. bench/cfg/measure.mjs --check (no fingerprint drift / budget regression).
169
+ 5. detect_changes() before commit; impact({direction:'upstream'}) before
170
+ editing shared symbols (KnowledgeGraph, RepoMeta, RelationshipType, codec).
171
+ ```
172
+
173
+ ## Prior art (for deeper design questions)
174
+
175
+ Sharir & Pnueli 1981 (functional approach); Reps-Horwitz-Sagiv IFDS (POPL 1995);
176
+ FlowDroid/StubDroid (access-path summaries); Pysa & Mariana Trench (TITO /
177
+ propagations, parallel SCC fixpoint); CodeQL Models-as-Data (the richest port
178
+ notation, incl. callback ports); Infer (content-keyed incremental summaries).
@@ -6,7 +6,7 @@
6
6
  "license": "MIT",
7
7
  "main": "bindings/node/index.js",
8
8
  "types": "bindings/node/index.d.ts",
9
- "_vendoredBy": "gitnexus - runtime package derived from tree-sitter-c@0.21.4 (tree-sitter/tree-sitter-c). HELD at 0.21.4 for ABI compatibility with the bundled tree-sitter@0.21.1 runtime (#1242/#858) — do not bump without the runtime upgrade. Vendored because upstream ships native prebuilds for only 4 of 6 platforms (no linux-arm64/win32-arm64, #2116), and tree-sitter-c is a REQUIRED grammar whose source build hard-fails `npm install` on a toolchain-less ARM host. GitNexus cross-builds all six prebuilds via .github/workflows/build-tree-sitter-prebuilds.yml; the C source (binding.gyp + src/) is ALSO vendored so build-tree-sitter-c.cjs can source-build the binding on a toolchain host when no prebuild matches (e.g. CI before prebuilds land). Copied to node_modules/ by materialize-vendor-grammars.cjs (no scripts.install here — #836/#1728).",
9
+ "_vendoredBy": "gitnexus - runtime package derived from tree-sitter-c@0.21.4 (tree-sitter/tree-sitter-c). HELD at 0.21.4 for ABI compatibility with the bundled tree-sitter@0.21.1 runtime (#1242/#858) — do not bump without the runtime upgrade. Vendored because upstream ships native prebuilds for only 4 of 6 platforms (no linux-arm64/win32-arm64, #2116), and tree-sitter-c is a REQUIRED grammar whose source build hard-fails `npm install` on a toolchain-less ARM host. GitNexus cross-builds all six prebuilds via .github/workflows/build-tree-sitter-prebuilds.yml; the C source (binding.gyp + src/) is ALSO vendored so build-tree-sitter-grammars.cjs can source-build the binding on a toolchain host when no prebuild matches (e.g. CI before prebuilds land). Loaded from vendor/ by absolute path at runtime (vendored-grammars.ts) — NEVER copied to node_modules (#2111) (no scripts.install here — #836/#1728).",
10
10
  "peerDependencies": {
11
11
  "tree-sitter": "^0.21.0"
12
12
  },
@@ -6,7 +6,7 @@
6
6
  "license": "ISC",
7
7
  "main": "bindings/node",
8
8
  "types": "bindings/node",
9
- "_vendoredBy": "gitnexus - pinned to UserNobody14/tree-sitter-dart commit 80e23c07b64494f7e21090bb3450223ef0b192f4. Copied to node_modules/ by materialize-vendor-grammars.cjs; native build via build-tree-sitter-dart.cjs (#1728, #836).",
9
+ "_vendoredBy": "gitnexus - pinned to UserNobody14/tree-sitter-dart commit 80e23c07b64494f7e21090bb3450223ef0b192f4. Loaded from vendor/ by absolute path at runtime (vendored-grammars.ts) — NEVER copied to node_modules (#2111); native build via build-tree-sitter-grammars.cjs (#1728, #836).",
10
10
  "peerDependencies": {
11
11
  "tree-sitter": "^0.21.0"
12
12
  },
@@ -6,7 +6,7 @@
6
6
  "license": "MIT",
7
7
  "main": "bindings/node/index.js",
8
8
  "types": "bindings/node/index.d.ts",
9
- "_vendoredBy": "gitnexus - runtime package derived from tree-sitter-kotlin@0.3.8 (fwcd). Unlike Swift's upstream-shipped prebuilds, upstream tree-sitter-kotlin ships SOURCE ONLY (no prebuilds/); the native prebuilds/ here are GitNexus-cross-built by .github/workflows/build-tree-sitter-prebuilds.yml. The grammar source (parser.c/scanner.c/binding.gyp + src/) is ALSO vendored so build-tree-sitter-kotlin.cjs can source-build the binding on a toolchain host when no prebuild matches (e.g. CI before prebuilds land). The generated parser.c is large (~23 MB on disk; it compresses heavily in git); once the prebuilds cover every platform-arch the source serves only as the fallback. Copied to node_modules/ by materialize-vendor-grammars.cjs (no scripts.install here — #836/#1728).",
9
+ "_vendoredBy": "gitnexus - runtime package derived from tree-sitter-kotlin@0.3.8 (fwcd). Unlike Swift's upstream-shipped prebuilds, upstream tree-sitter-kotlin ships SOURCE ONLY (no prebuilds/); the native prebuilds/ here are GitNexus-cross-built by .github/workflows/build-tree-sitter-prebuilds.yml. The grammar source (parser.c/scanner.c/binding.gyp + src/) is ALSO vendored so build-tree-sitter-grammars.cjs can source-build the binding on a toolchain host when no prebuild matches (e.g. CI before prebuilds land). The generated parser.c is large (~23 MB on disk; it compresses heavily in git); once the prebuilds cover every platform-arch the source serves only as the fallback. Loaded from vendor/ by absolute path at runtime (vendored-grammars.ts) — NEVER copied to node_modules (#2111) (no scripts.install here — #836/#1728).",
10
10
  "peerDependencies": {
11
11
  "tree-sitter": "^0.21.0"
12
12
  },
@@ -5,7 +5,7 @@
5
5
  "repository": "https://github.com/coder3101/tree-sitter-proto",
6
6
  "license": "MIT",
7
7
  "main": "bindings/node",
8
- "_vendoredBy": "gitnexus — materialized to node_modules/ by materialize-vendor-grammars.cjs; native build via build-tree-sitter-proto.cjs. Do NOT re-add dependencies or an install script (#836, #1728).",
8
+ "_vendoredBy": "gitnexus — loaded from vendor/ by absolute path at runtime (vendored-grammars.ts) — NEVER copied to node_modules (#2111); native build via build-tree-sitter-grammars.cjs. Do NOT re-add dependencies or an install script (#836, #1728).",
9
9
  "peerDependencies": {
10
10
  "tree-sitter": ">=0.21.0"
11
11
  }
@@ -9,7 +9,7 @@
9
9
  "type": "git",
10
10
  "url": "git+https://github.com/alex-pinkus/tree-sitter-swift.git"
11
11
  },
12
- "_vendoredBy": "gitnexus - runtime package derived from official tree-sitter-swift@0.7.1 (gitHead 88bfd19a89be9d0481b14566fb6160cccea2fe0a). Unified with Dart/Proto/Kotlin/C: the grammar source (parser.c/scanner.c/binding.gyp + src/) is ALSO vendored so build-tree-sitter-grammars.cjs can source-build the binding on a toolchain host when no prebuild matches (e.g. CI before prebuilds land); src/parser.c is the ABI-14 default (~18 MB on disk, compresses heavily in git — the upstream parser_abi13.c alternate is not vendored). The native prebuilds/ are GitNexus-cross-built by .github/workflows/build-tree-sitter-prebuilds.yml (originally upstream-shipped). Build activation runs via gitnexus/scripts/build-tree-sitter-grammars.cjs after materialize-vendor-grammars.cjs (no scripts.install here — avoids #836 / #1728).",
12
+ "_vendoredBy": "gitnexus - runtime package derived from official tree-sitter-swift@0.7.1 (gitHead 88bfd19a89be9d0481b14566fb6160cccea2fe0a). Unified with Dart/Proto/Kotlin/C: the grammar source (parser.c/scanner.c/binding.gyp + src/) is ALSO vendored so build-tree-sitter-grammars.cjs can source-build the binding on a toolchain host when no prebuild matches (e.g. CI before prebuilds land); src/parser.c is the ABI-14 default (~18 MB on disk, compresses heavily in git — the upstream parser_abi13.c alternate is not vendored). The native prebuilds/ are GitNexus-cross-built by .github/workflows/build-tree-sitter-prebuilds.yml (originally upstream-shipped). Build activation runs via gitnexus/scripts/build-tree-sitter-grammars.cjs (no scripts.install here — avoids #836 / #1728).",
13
13
  "peerDependencies": {
14
14
  "tree-sitter": "^0.21.1 || ^0.22.1"
15
15
  },