gitnexus 1.6.5-rc.2 → 1.6.5-rc.21

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 (288) hide show
  1. package/README.md +1 -1
  2. package/dist/_shared/scope-resolution/method-dispatch-index.d.ts +26 -0
  3. package/dist/_shared/scope-resolution/method-dispatch-index.d.ts.map +1 -1
  4. package/dist/_shared/scope-resolution/method-dispatch-index.js +22 -3
  5. package/dist/_shared/scope-resolution/method-dispatch-index.js.map +1 -1
  6. package/dist/_shared/scope-resolution/registries/lookup-core.js +18 -1
  7. package/dist/_shared/scope-resolution/registries/lookup-core.js.map +1 -1
  8. package/dist/cli/ai-context.d.ts +1 -0
  9. package/dist/cli/ai-context.js +30 -12
  10. package/dist/cli/analyze.d.ts +18 -0
  11. package/dist/cli/analyze.js +33 -4
  12. package/dist/cli/augment.d.ts +1 -1
  13. package/dist/cli/augment.js +1 -1
  14. package/dist/cli/index.js +6 -1
  15. package/dist/cli/setup.js +6 -0
  16. package/dist/core/augmentation/engine.d.ts +2 -2
  17. package/dist/core/augmentation/engine.js +26 -6
  18. package/dist/core/embeddings/ast-utils.js +2 -1
  19. package/dist/core/embeddings/http-client.js +22 -6
  20. package/dist/core/group/extractors/grpc-extractor.js +2 -1
  21. package/dist/core/group/extractors/http-patterns/python.js +175 -0
  22. package/dist/core/group/extractors/http-route-extractor.js +2 -1
  23. package/dist/core/group/extractors/include-extractor.js +2 -1
  24. package/dist/core/group/extractors/thrift-extractor.js +2 -1
  25. package/dist/core/group/extractors/tree-sitter-scanner.js +2 -1
  26. package/dist/core/incremental/shadow-candidates.d.ts +44 -0
  27. package/dist/core/incremental/shadow-candidates.js +74 -0
  28. package/dist/core/incremental/subgraph-extract.d.ts +64 -0
  29. package/dist/core/incremental/subgraph-extract.js +111 -0
  30. package/dist/core/ingestion/call-processor.js +166 -47
  31. package/dist/core/ingestion/community-processor.js +18 -0
  32. package/dist/core/ingestion/heritage-processor.js +3 -2
  33. package/dist/core/ingestion/import-processor.js +2 -1
  34. package/dist/core/ingestion/import-resolvers/standard.d.ts +5 -0
  35. package/dist/core/ingestion/import-resolvers/standard.js +27 -1
  36. package/dist/core/ingestion/import-resolvers/utils.js +4 -0
  37. package/dist/core/ingestion/languages/c/arity-metadata.d.ts +14 -0
  38. package/dist/core/ingestion/languages/c/arity-metadata.js +94 -0
  39. package/dist/core/ingestion/languages/c/arity.d.ts +6 -0
  40. package/dist/core/ingestion/languages/c/arity.js +18 -0
  41. package/dist/core/ingestion/languages/c/captures.d.ts +2 -0
  42. package/dist/core/ingestion/languages/c/captures.js +105 -0
  43. package/dist/core/ingestion/languages/c/header-scan.d.ts +7 -0
  44. package/dist/core/ingestion/languages/c/header-scan.js +55 -0
  45. package/dist/core/ingestion/languages/c/import-decomposer.d.ts +8 -0
  46. package/dist/core/ingestion/languages/c/import-decomposer.js +50 -0
  47. package/dist/core/ingestion/languages/c/import-target.d.ts +14 -0
  48. package/dist/core/ingestion/languages/c/import-target.js +57 -0
  49. package/dist/core/ingestion/languages/c/index.d.ts +11 -0
  50. package/dist/core/ingestion/languages/c/index.js +11 -0
  51. package/dist/core/ingestion/languages/c/interpret.d.ts +14 -0
  52. package/dist/core/ingestion/languages/c/interpret.js +48 -0
  53. package/dist/core/ingestion/languages/c/merge-bindings.d.ts +7 -0
  54. package/dist/core/ingestion/languages/c/merge-bindings.js +23 -0
  55. package/dist/core/ingestion/languages/c/query.d.ts +3 -0
  56. package/dist/core/ingestion/languages/c/query.js +161 -0
  57. package/dist/core/ingestion/languages/c/scope-resolver.d.ts +13 -0
  58. package/dist/core/ingestion/languages/c/scope-resolver.js +60 -0
  59. package/dist/core/ingestion/languages/c/simple-hooks.d.ts +14 -0
  60. package/dist/core/ingestion/languages/c/simple-hooks.js +19 -0
  61. package/dist/core/ingestion/languages/c/static-linkage.d.ts +13 -0
  62. package/dist/core/ingestion/languages/c/static-linkage.js +57 -0
  63. package/dist/core/ingestion/languages/c-cpp.js +10 -0
  64. package/dist/core/ingestion/languages/csharp/captures.js +2 -1
  65. package/dist/core/ingestion/languages/csharp/namespace-siblings.js +3 -2
  66. package/dist/core/ingestion/languages/go/captures.js +2 -1
  67. package/dist/core/ingestion/languages/go/range-binding.js +2 -1
  68. package/dist/core/ingestion/languages/java/arity-metadata.d.ts +18 -0
  69. package/dist/core/ingestion/languages/java/arity-metadata.js +40 -0
  70. package/dist/core/ingestion/languages/java/arity.d.ts +10 -0
  71. package/dist/core/ingestion/languages/java/arity.js +24 -0
  72. package/dist/core/ingestion/languages/java/cache-stats.d.ts +15 -0
  73. package/dist/core/ingestion/languages/java/cache-stats.js +26 -0
  74. package/dist/core/ingestion/languages/java/captures.d.ts +17 -0
  75. package/dist/core/ingestion/languages/java/captures.js +187 -0
  76. package/dist/core/ingestion/languages/java/import-decomposer.d.ts +18 -0
  77. package/dist/core/ingestion/languages/java/import-decomposer.js +85 -0
  78. package/dist/core/ingestion/languages/java/import-target.d.ts +17 -0
  79. package/dist/core/ingestion/languages/java/import-target.js +100 -0
  80. package/dist/core/ingestion/languages/java/index.d.ts +29 -0
  81. package/dist/core/ingestion/languages/java/index.js +29 -0
  82. package/dist/core/ingestion/languages/java/interpret.d.ts +13 -0
  83. package/dist/core/ingestion/languages/java/interpret.js +131 -0
  84. package/dist/core/ingestion/languages/java/merge-bindings.d.ts +12 -0
  85. package/dist/core/ingestion/languages/java/merge-bindings.js +40 -0
  86. package/dist/core/ingestion/languages/java/query.d.ts +30 -0
  87. package/dist/core/ingestion/languages/java/query.js +192 -0
  88. package/dist/core/ingestion/languages/java/receiver-binding.d.ts +11 -0
  89. package/dist/core/ingestion/languages/java/receiver-binding.js +95 -0
  90. package/dist/core/ingestion/languages/java/scope-resolver.d.ts +50 -0
  91. package/dist/core/ingestion/languages/java/scope-resolver.js +74 -0
  92. package/dist/core/ingestion/languages/java/simple-hooks.d.ts +13 -0
  93. package/dist/core/ingestion/languages/java/simple-hooks.js +34 -0
  94. package/dist/core/ingestion/languages/java.js +11 -0
  95. package/dist/core/ingestion/languages/php/arity-metadata.d.ts +28 -0
  96. package/dist/core/ingestion/languages/php/arity-metadata.js +63 -0
  97. package/dist/core/ingestion/languages/php/arity.d.ts +25 -0
  98. package/dist/core/ingestion/languages/php/arity.js +40 -0
  99. package/dist/core/ingestion/languages/php/cache-stats.d.ts +15 -0
  100. package/dist/core/ingestion/languages/php/cache-stats.js +26 -0
  101. package/dist/core/ingestion/languages/php/captures.d.ts +34 -0
  102. package/dist/core/ingestion/languages/php/captures.js +739 -0
  103. package/dist/core/ingestion/languages/php/import-decomposer.d.ts +28 -0
  104. package/dist/core/ingestion/languages/php/import-decomposer.js +265 -0
  105. package/dist/core/ingestion/languages/php/import-target.d.ts +47 -0
  106. package/dist/core/ingestion/languages/php/import-target.js +100 -0
  107. package/dist/core/ingestion/languages/php/index.d.ts +68 -0
  108. package/dist/core/ingestion/languages/php/index.js +72 -0
  109. package/dist/core/ingestion/languages/php/interpret.d.ts +36 -0
  110. package/dist/core/ingestion/languages/php/interpret.js +241 -0
  111. package/dist/core/ingestion/languages/php/merge-bindings.d.ts +19 -0
  112. package/dist/core/ingestion/languages/php/merge-bindings.js +47 -0
  113. package/dist/core/ingestion/languages/php/namespace-siblings.d.ts +51 -0
  114. package/dist/core/ingestion/languages/php/namespace-siblings.js +288 -0
  115. package/dist/core/ingestion/languages/php/query.d.ts +32 -0
  116. package/dist/core/ingestion/languages/php/query.js +326 -0
  117. package/dist/core/ingestion/languages/php/receiver-binding.d.ts +36 -0
  118. package/dist/core/ingestion/languages/php/receiver-binding.js +128 -0
  119. package/dist/core/ingestion/languages/php/scope-resolver.d.ts +23 -0
  120. package/dist/core/ingestion/languages/php/scope-resolver.js +358 -0
  121. package/dist/core/ingestion/languages/php/simple-hooks.d.ts +42 -0
  122. package/dist/core/ingestion/languages/php/simple-hooks.js +111 -0
  123. package/dist/core/ingestion/languages/php.d.ts +0 -7
  124. package/dist/core/ingestion/languages/php.js +15 -0
  125. package/dist/core/ingestion/languages/python/captures.js +2 -1
  126. package/dist/core/ingestion/languages/typescript/captures.js +2 -1
  127. package/dist/core/ingestion/parsing-processor.d.ts +22 -2
  128. package/dist/core/ingestion/parsing-processor.js +85 -50
  129. package/dist/core/ingestion/pipeline-phases/parse-impl.d.ts +5 -0
  130. package/dist/core/ingestion/pipeline-phases/parse-impl.js +119 -11
  131. package/dist/core/ingestion/pipeline-phases/parse.d.ts +14 -0
  132. package/dist/core/ingestion/pipeline.d.ts +13 -0
  133. package/dist/core/ingestion/registry-primary-flag.js +2 -0
  134. package/dist/core/ingestion/scope-resolution/contract/scope-resolver.d.ts +65 -0
  135. package/dist/core/ingestion/scope-resolution/graph-bridge/method-dispatch.d.ts +1 -1
  136. package/dist/core/ingestion/scope-resolution/graph-bridge/method-dispatch.js +12 -2
  137. package/dist/core/ingestion/scope-resolution/graph-bridge/node-lookup.js +5 -0
  138. package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.d.ts +25 -1
  139. package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.js +79 -7
  140. package/dist/core/ingestion/scope-resolution/passes/overload-narrowing.d.ts +7 -3
  141. package/dist/core/ingestion/scope-resolution/passes/overload-narrowing.js +24 -4
  142. package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.js +21 -2
  143. package/dist/core/ingestion/scope-resolution/pipeline/phase.js +13 -1
  144. package/dist/core/ingestion/scope-resolution/pipeline/registry.js +6 -0
  145. package/dist/core/ingestion/scope-resolution/pipeline/run.d.ts +17 -0
  146. package/dist/core/ingestion/scope-resolution/pipeline/run.js +31 -7
  147. package/dist/core/ingestion/tree-sitter-queries.d.ts +1 -1
  148. package/dist/core/ingestion/tree-sitter-queries.js +10 -0
  149. package/dist/core/ingestion/workers/parse-worker.js +2 -1
  150. package/dist/core/lbug/lbug-adapter.d.ts +26 -0
  151. package/dist/core/lbug/lbug-adapter.js +174 -40
  152. package/dist/core/lbug/pool-adapter.js +19 -2
  153. package/dist/core/run-analyze.d.ts +2 -0
  154. package/dist/core/run-analyze.js +323 -29
  155. package/dist/core/tree-sitter/safe-parse.d.ts +6 -0
  156. package/dist/core/tree-sitter/safe-parse.js +32 -0
  157. package/dist/server/git-clone.js +10 -13
  158. package/dist/storage/file-hash.d.ts +47 -0
  159. package/dist/storage/file-hash.js +86 -0
  160. package/dist/storage/git.d.ts +17 -6
  161. package/dist/storage/git.js +46 -12
  162. package/dist/storage/parse-cache.d.ts +67 -0
  163. package/dist/storage/parse-cache.js +182 -0
  164. package/dist/storage/repo-manager.d.ts +41 -1
  165. package/dist/storage/repo-manager.js +17 -2
  166. package/hooks/claude/gitnexus-hook.cjs +8 -1
  167. package/hooks/claude/hook-lock.cjs +119 -0
  168. package/package.json +1 -1
  169. package/web/assets/{agent-BpHQleHE.js → agent-BG6RCOzz.js} +1 -1
  170. package/web/assets/architecture-7EHR7CIX-6QZW5X65-F-tujre-.js +1 -0
  171. package/web/assets/architectureDiagram-UL44E2DR-2GL7nOvO.js +36 -0
  172. package/web/assets/blockDiagram-7IZFK4PR-5AjX0pPU.js +132 -0
  173. package/web/assets/{c4Diagram-DFAF54RM-DeJV1rCn.js → c4Diagram-Y2BXMSZH-hLOeq7xC.js} +2 -2
  174. package/web/assets/chunk-2T2R6R2M-B_pq_2nf.js +4 -0
  175. package/web/assets/chunk-2UTLFMKG-CpoohCFN.js +1 -0
  176. package/web/assets/{chunk-7RZVMHOQ-BdIU-RGO.js → chunk-3SSMPTDK-CfqpR3Nr.js} +1 -1
  177. package/web/assets/chunk-4R4BOZG6-D3gm7tYj.js +159 -0
  178. package/web/assets/chunk-6764PJDD-WcI965eO.js +1 -0
  179. package/web/assets/chunk-AQ6EADP3-BpMj3rQl.js +1 -0
  180. package/web/assets/{chunk-KSICW3F5-C2tZmXwv.js → chunk-AZZRMDJM-DSoCJlUA.js} +1 -1
  181. package/web/assets/chunk-C62D2QBJ-CvFF2PnB.js +1 -0
  182. package/web/assets/chunk-CEXFNPSA-DdNtJtrF.js +1 -0
  183. package/web/assets/chunk-J5EP6P6S-DtcVaAJI.js +1 -0
  184. package/web/assets/{chunk-AEOMTBSW-D7qjBMHW.js → chunk-JQRUD6KW-DElaNjc0.js} +1 -1
  185. package/web/assets/chunk-KGYTTC2M-D0K5or7e.js +1 -0
  186. package/web/assets/chunk-KRXBNO2N-DpR8iDt8.js +1 -0
  187. package/web/assets/chunk-LCXTWHL2-DdMObOEk.js +231 -0
  188. package/web/assets/chunk-LII3EMHJ-I78zXtzi.js +1 -0
  189. package/web/assets/chunk-RERM46MO-Betu1cSy.js +1 -0
  190. package/web/assets/chunk-RG4AUYOV-BUCJ2JP5.js +206 -0
  191. package/web/assets/chunk-RKZBBQEN-Cutpza0t.js +1 -0
  192. package/web/assets/chunk-RLI5ZMPA-BFUxCvX2.js +1 -0
  193. package/web/assets/chunk-T5OCTHI4-DKwlkuvB.js +1 -0
  194. package/web/assets/chunk-UP6H54XL-0YWa0NDg.js +1 -0
  195. package/web/assets/chunk-UXSXWOXI-CSz0OXpz.js +1 -0
  196. package/web/assets/chunk-W44A43WB-AOmgoT-X.js +1 -0
  197. package/web/assets/{chunk-RWUO3TPN-DTWzAhQ1.js → chunk-ZXARS5L4-DIzgxjMw.js} +1 -1
  198. package/web/assets/classDiagram-KGZ6W3CR-BT-rn7LF.js +1 -0
  199. package/web/assets/classDiagram-v2-72OJOZXJ-uR3nDadY.js +1 -0
  200. package/web/assets/{cose-bilkent-PNC4W37J-DdZq7Qz_.js → cose-bilkent-UX7MHV2Q-DCSCD1TK.js} +1 -1
  201. package/web/assets/dagre-ND4H6XIP-CsciHSij.js +4 -0
  202. package/web/assets/diagram-3NCE3AQN-BKUT5Rpc.js +43 -0
  203. package/web/assets/diagram-GF46GFSD-Dxb4hZSo.js +24 -0
  204. package/web/assets/diagram-HNR7UZ2L-D3qus9Cn.js +3 -0
  205. package/web/assets/diagram-QXG6HAR7-r9BMLGGP.js +24 -0
  206. package/web/assets/diagram-WEQXMOUZ-BGXqs7-m.js +10 -0
  207. package/web/assets/{erDiagram-GCSMX5X6-DfdN6iqF.js → erDiagram-L5TCEMPS-LgSWVrkZ.js} +2 -2
  208. package/web/assets/eventmodeling-FCH6USID-MREXMVOE-By7r3bla.js +1 -0
  209. package/web/assets/flowDiagram-H6V6AXG4-Bj_vV5ky.js +162 -0
  210. package/web/assets/ganttDiagram-JCBTUEKG-B1eVITSh.js +292 -0
  211. package/web/assets/gitGraph-WXDBUCRP-R675I2BI-ClEP6RdE.js +1 -0
  212. package/web/assets/gitGraphDiagram-S2ZK5IYY-BP0R-_FD.js +106 -0
  213. package/web/assets/{index-3NUCUW2s.js → index-oL-ZNYwb.js} +80 -81
  214. package/web/assets/info-J43DQDTF-KCYPFFUO-bBJRjmP5.js +1 -0
  215. package/web/assets/infoDiagram-3YFTVSEB-Dmj4OEO3.js +2 -0
  216. package/web/assets/{ishikawaDiagram-YMYX4NHK-BF8AtDaj.js → ishikawaDiagram-BNXS4ZKH-B3NgQ4lJ.js} +2 -2
  217. package/web/assets/{journeyDiagram-SO5T7YLQ-BW8oKa3N.js → journeyDiagram-M6C3CM3L-DALmL4_N.js} +3 -3
  218. package/web/assets/{kanban-definition-LJHFXRCJ-DzbOsR-2.js → kanban-definition-75IXJCU3-AvVbHpnN.js} +4 -4
  219. package/web/assets/{katex-GD7MH7QM-CJiOjBBJ.js → katex-K3KEBU37-CqF6_ZN-.js} +1 -1
  220. package/web/assets/{mindmap-definition-2EUWGEK5-BIXGQALq.js → mindmap-definition-2TDM6QVE-B5c9VOzs.js} +28 -28
  221. package/web/assets/packet-YPE3B663-LP52Z2RK-1ZCldnu3.js +1 -0
  222. package/web/assets/pie-LRSECV5Y-TCRJHUBD-EhjHC5EE.js +1 -0
  223. package/web/assets/pieDiagram-CU6KROY3-Po2HSSR4.js +30 -0
  224. package/web/assets/quadrantDiagram-VICAPDV7-C47UxSZD.js +7 -0
  225. package/web/assets/radar-GUYGQ44K-RDLRG3WG-CvXjgxlW.js +1 -0
  226. package/web/assets/{requirementDiagram-M5DCFWZL-CzUUrhQD.js → requirementDiagram-JXO7QTGE-CpECN_Hq.js} +6 -6
  227. package/web/assets/sankeyDiagram-URQDO5SZ-B3b7cLrS.js +40 -0
  228. package/web/assets/sequenceDiagram-VS2MUI6T-CRJ95oVP.js +162 -0
  229. package/web/assets/stateDiagram-7D4R322I-C7U9b3ks.js +1 -0
  230. package/web/assets/stateDiagram-v2-36443NZ5-BQajbtov.js +1 -0
  231. package/web/assets/{timeline-definition-5SPVSISX-DkMiGj4Z.js → timeline-definition-O6YCAMPW-rtbk6BBo.js} +4 -4
  232. package/web/assets/treeView-BLDUP644-QA4HXRO3-R2o5gwfP.js +1 -0
  233. package/web/assets/treemap-LRROVOQU-LLAWBHMP-Cesmac_u.js +1 -0
  234. package/web/assets/{vennDiagram-IE5QUKF5-BCxMmf9q.js → vennDiagram-MWXL3ELB-W8Yoaayh.js} +3 -3
  235. package/web/assets/wardley-L42UT6IY-5TKZOOLJ-B9HYoRgA.js +1 -0
  236. package/web/assets/wardleyDiagram-CUQ6CDDI-DIZw5Abj.js +78 -0
  237. package/web/assets/{xychartDiagram-ZHJ5623Y-DZ7fP1_3.js → xychartDiagram-N2JHSOCM-DGRtrj4P.js} +3 -3
  238. package/web/index.html +2 -2
  239. package/web/assets/architecture-YZFGNWBL-S5CXDPWN-BUzkWgDl.js +0 -1
  240. package/web/assets/architectureDiagram-EMZXCZ2Q-CXbzok1G.js +0 -36
  241. package/web/assets/blockDiagram-IGV67L2C-DA1QJ4ZB.js +0 -132
  242. package/web/assets/chunk-3GS5O3IE-B8hpnia8.js +0 -231
  243. package/web/assets/chunk-3YCYZ6SJ-B-BVu21C.js +0 -1
  244. package/web/assets/chunk-6NTNNK5N-DW-jYSDr.js +0 -1
  245. package/web/assets/chunk-A34GCYZU-BbZl-IKy.js +0 -1
  246. package/web/assets/chunk-DJ7UZH7F-B5tMfF87.js +0 -1
  247. package/web/assets/chunk-DKKBVRCY-Djm-6K_e.js +0 -4
  248. package/web/assets/chunk-DU5LTGQ6-QPoynYcp.js +0 -1
  249. package/web/assets/chunk-FXACKDTF-jieSmbe2.js +0 -159
  250. package/web/assets/chunk-H3VCZNTA-8EMHZ3SV.js +0 -1
  251. package/web/assets/chunk-HN6EAY2L-CgE_agsD.js +0 -1
  252. package/web/assets/chunk-O5ABG6QK-DEZV1O19.js +0 -1
  253. package/web/assets/chunk-PK6DOVAG-BXv0JnsJ.js +0 -206
  254. package/web/assets/chunk-RNJOYNJ4-BiBkF9dN.js +0 -1
  255. package/web/assets/chunk-TBF5ZNIQ-BSl6s9lT.js +0 -1
  256. package/web/assets/chunk-TU3PZOEN-DE5Qhc0N.js +0 -1
  257. package/web/assets/chunk-TYMNRAUI-D1NDLIMG.js +0 -1
  258. package/web/assets/chunk-VELTKBKT-C9dVN39o.js +0 -1
  259. package/web/assets/chunk-W7ZLLLMY-Bu-cdLzs.js +0 -1
  260. package/web/assets/chunk-WSB5WSVC-Dor71SOz.js +0 -1
  261. package/web/assets/chunk-XGPFEOL4-CUonLRle.js +0 -1
  262. package/web/assets/classDiagram-PPOCWD7C-Cdd6UdVv.js +0 -1
  263. package/web/assets/classDiagram-v2-23LJLIIU-DNhxY2Ib.js +0 -1
  264. package/web/assets/dagre-E77IOHMT-Cfj_6e17.js +0 -4
  265. package/web/assets/diagram-H7BISOXX-BNvpsrBv.js +0 -43
  266. package/web/assets/diagram-JC5VWROH-Cn0rtDbJ.js +0 -24
  267. package/web/assets/diagram-LXUTUG65-CHfoVKNm.js +0 -10
  268. package/web/assets/diagram-WEHSV5V5-BLxHksnu.js +0 -24
  269. package/web/assets/flowDiagram-OTCZ4VVT-aAZw4c_M.js +0 -162
  270. package/web/assets/ganttDiagram-MUNLMDZQ-BEfC_7Or.js +0 -292
  271. package/web/assets/gitGraph-7Q5UKJZL-54BCDZD5-B6ZeRLP0.js +0 -1
  272. package/web/assets/gitGraphDiagram-3HKGZ4G3-CG0kC8Q5.js +0 -106
  273. package/web/assets/info-OMHHGYJF-BF2H5H6G-BIOsZy0W.js +0 -1
  274. package/web/assets/infoDiagram-MN7RKWGX-DUoMH-pq.js +0 -2
  275. package/web/assets/packet-4T2RLAQJ-EV4IVRXR-Bs7ysNMU.js +0 -1
  276. package/web/assets/pie-ZZUOXDRM-N23DN5KN-Csi8nnbH.js +0 -1
  277. package/web/assets/pieDiagram-3IATQBI2-QY-u7P6a.js +0 -30
  278. package/web/assets/quadrantDiagram-E256RVCF-Di4aNiU8.js +0 -7
  279. package/web/assets/radar-PYXPWWZC-P6TP7ZYP-DJlyXh2-.js +0 -1
  280. package/web/assets/sankeyDiagram-L3NBLAOT-D2fbMiIU.js +0 -10
  281. package/web/assets/sequenceDiagram-ZOUHS735-BNdkqguh.js +0 -157
  282. package/web/assets/stateDiagram-MLPALWAM-51_Q2w2L.js +0 -1
  283. package/web/assets/stateDiagram-v2-B5LQ5ZB2-8nHs2aNE.js +0 -1
  284. package/web/assets/treeView-SZITEDCU-5DXDK3XO-Cy6P0_CZ.js +0 -1
  285. package/web/assets/treemap-W4RFUUIX-WYLRDWKO-C_pp1R7A.js +0 -1
  286. package/web/assets/wardley-RL74JXVD-BCRCBASE-CMStJhpn.js +0 -1
  287. package/web/assets/wardleyDiagram-XU3VSMPF-ijlLF77s.js +0 -20
  288. /package/web/assets/{context-builder-CqQNhRj1.js → context-builder-CG-ydtp4.js} +0 -0
@@ -167,6 +167,65 @@ const runWithSessionLock = async (operation) => {
167
167
  }
168
168
  };
169
169
  const normalizeCopyPath = (filePath) => filePath.replace(/\\/g, '/');
170
+ const closeQueryResult = async (result) => {
171
+ try {
172
+ await result.close();
173
+ }
174
+ catch {
175
+ // Best-effort cleanup only.
176
+ }
177
+ };
178
+ const drainQueryResult = async (queryResult) => {
179
+ const results = Array.isArray(queryResult) ? queryResult : [queryResult];
180
+ let firstError;
181
+ let hasError = false;
182
+ for (const result of results) {
183
+ try {
184
+ await result.getAll();
185
+ }
186
+ catch (err) {
187
+ if (!hasError) {
188
+ firstError = err;
189
+ hasError = true;
190
+ }
191
+ }
192
+ finally {
193
+ await closeQueryResult(result);
194
+ }
195
+ }
196
+ if (hasError)
197
+ throw firstError;
198
+ };
199
+ const readQueryRows = async (queryResult) => {
200
+ const results = Array.isArray(queryResult) ? queryResult : [queryResult];
201
+ let rows = [];
202
+ let firstError;
203
+ let hasError = false;
204
+ for (let i = 0; i < results.length; i++) {
205
+ const result = results[i];
206
+ try {
207
+ const resultRows = await result.getAll();
208
+ if (i === 0)
209
+ rows = resultRows;
210
+ }
211
+ catch (err) {
212
+ if (!hasError) {
213
+ firstError = err;
214
+ hasError = true;
215
+ }
216
+ }
217
+ finally {
218
+ await closeQueryResult(result);
219
+ }
220
+ }
221
+ if (hasError)
222
+ throw firstError;
223
+ return rows;
224
+ };
225
+ const queryAndDrain = async (targetConn, cypher) => {
226
+ const queryResult = await targetConn.query(cypher);
227
+ await drainQueryResult(queryResult);
228
+ };
170
229
  export const initLbug = async (dbPath) => {
171
230
  return runWithSessionLock(() => ensureLbugInitialized(dbPath));
172
231
  };
@@ -262,7 +321,7 @@ const doInitLbug = async (dbPath) => {
262
321
  conn = opened.conn;
263
322
  for (const schemaQuery of SCHEMA_QUERIES) {
264
323
  try {
265
- await conn.query(schemaQuery);
324
+ await queryAndDrain(conn, schemaQuery);
266
325
  }
267
326
  catch (err) {
268
327
  const msg = err instanceof Error ? err.message : String(err);
@@ -312,12 +371,12 @@ export const loadGraphToLbug = async (graph, repoPath, storagePath, onProgress)
312
371
  const normalizedPath = normalizeCopyPath(csvPath);
313
372
  const copyQuery = getCopyQuery(table, normalizedPath);
314
373
  try {
315
- await conn.query(copyQuery);
374
+ await queryAndDrain(conn, copyQuery);
316
375
  }
317
376
  catch (err) {
318
377
  try {
319
378
  const retryQuery = copyQuery.replace('auto_detect=false)', 'auto_detect=false, IGNORE_ERRORS=true)');
320
- await conn.query(retryQuery);
379
+ await queryAndDrain(conn, retryQuery);
321
380
  }
322
381
  catch (retryErr) {
323
382
  const retryMsg = retryErr instanceof Error ? retryErr.message : String(retryErr);
@@ -350,12 +409,12 @@ export const loadGraphToLbug = async (graph, repoPath, storagePath, onProgress)
350
409
  log(`Loading edges: ${pairIdx}/${relsByPairMeta.size} types (${fromLabel} -> ${toLabel})`);
351
410
  }
352
411
  try {
353
- await conn.query(copyQuery);
412
+ await queryAndDrain(conn, copyQuery);
354
413
  }
355
414
  catch (err) {
356
415
  try {
357
416
  const retryQuery = copyQuery.replace('auto_detect=false)', 'auto_detect=false, IGNORE_ERRORS=true)');
358
- await conn.query(retryQuery);
417
+ await queryAndDrain(conn, retryQuery);
359
418
  }
360
419
  catch (retryErr) {
361
420
  const retryMsg = retryErr instanceof Error ? retryErr.message : String(retryErr);
@@ -475,7 +534,7 @@ const fallbackRelationshipInserts = async (validRelLines, validTables, getNodeLa
475
534
  const confidence = parseFloat(confidenceStr) || 1.0;
476
535
  const step = parseInt(stepStr) || 0;
477
536
  const esc = (s) => s.replace(/'/g, "''").replace(/\\/g, '\\\\').replace(/\n/g, '\\n').replace(/\r/g, '\\r');
478
- await conn.query(`
537
+ await queryAndDrain(conn, `
479
538
  MATCH (a:${escapeLabel(fromLabel)} {id: '${esc(fromId)}' }),
480
539
  (b:${escapeLabel(toLabel)} {id: '${esc(toId)}' })
481
540
  CREATE (a)-[:${REL_TABLE_NAME} {type: '${esc(relType)}', confidence: ${confidence}, reason: '${esc(reason)}', step: ${step}}]->(b)
@@ -589,7 +648,7 @@ export const insertNodeToLbug = async (label, properties, dbPath) => {
589
648
  if (targetDbPath) {
590
649
  const tempHandle = await openLbugConnection(lbug, targetDbPath);
591
650
  try {
592
- await tempHandle.conn.query(query);
651
+ await queryAndDrain(tempHandle.conn, query);
593
652
  return true;
594
653
  }
595
654
  finally {
@@ -598,7 +657,7 @@ export const insertNodeToLbug = async (label, properties, dbPath) => {
598
657
  }
599
658
  else if (conn) {
600
659
  // Use existing persistent connection (when called from analyze)
601
- await conn.query(query);
660
+ await queryAndDrain(conn, query);
602
661
  return true;
603
662
  }
604
663
  return false;
@@ -667,7 +726,7 @@ export const batchInsertNodesToLbug = async (nodes, dbPath) => {
667
726
  : '';
668
727
  query = `MERGE (n:${t} {id: ${escapeValue(properties.id)}}) SET n.name = ${escapeValue(properties.name)}, n.filePath = ${escapeValue(properties.filePath)}, n.startLine = ${properties.startLine || 0}, n.endLine = ${properties.endLine || 0}, n.content = ${escapeValue(properties.content || '')}${descPart}`;
669
728
  }
670
- await tempConn.query(query);
729
+ await queryAndDrain(tempConn, query);
671
730
  inserted++;
672
731
  }
673
732
  catch (e) {
@@ -686,19 +745,17 @@ export const executeQuery = async (cypher) => {
686
745
  throw new Error('LadybugDB not initialized. Call initLbug first.');
687
746
  }
688
747
  const queryResult = await conn.query(cypher);
689
- // LadybugDB uses getAll() instead of hasNext()/getNext()
690
- // Query returns QueryResult for single queries, QueryResult[] for multi-statement
691
- const result = Array.isArray(queryResult) ? queryResult[0] : queryResult;
692
- const rows = await result.getAll();
693
- return rows;
748
+ return await readQueryRows(queryResult);
694
749
  };
695
750
  export const streamQuery = async (cypher, onRow) => {
696
751
  if (!conn) {
697
752
  throw new Error('LadybugDB not initialized. Call initLbug first.');
698
753
  }
699
754
  const queryResult = await conn.query(cypher);
700
- const result = Array.isArray(queryResult) ? queryResult[0] : queryResult;
755
+ const results = Array.isArray(queryResult) ? queryResult : [queryResult];
756
+ const result = results[0];
701
757
  let rowCount = 0;
758
+ let streamError;
702
759
  try {
703
760
  while (await result.hasNext()) {
704
761
  const row = await result.getNext();
@@ -707,12 +764,17 @@ export const streamQuery = async (cypher, onRow) => {
707
764
  }
708
765
  return rowCount;
709
766
  }
767
+ catch (err) {
768
+ streamError = err;
769
+ throw err;
770
+ }
710
771
  finally {
711
772
  try {
712
- await result.close();
773
+ await drainQueryResult(results);
713
774
  }
714
- catch {
715
- // Best-effort cleanup only.
775
+ catch (err) {
776
+ if (streamError === undefined)
777
+ throw err;
716
778
  }
717
779
  }
718
780
  };
@@ -730,8 +792,7 @@ export const executePrepared = async (cypher, params) => {
730
792
  throw new Error(`Prepare failed: ${errMsg}`);
731
793
  }
732
794
  const queryResult = await conn.execute(stmt, params);
733
- const result = Array.isArray(queryResult) ? queryResult[0] : queryResult;
734
- return await result.getAll();
795
+ return await readQueryRows(queryResult);
735
796
  };
736
797
  export const executeWithReusedStatement = async (cypher, paramsList) => {
737
798
  if (!conn) {
@@ -749,7 +810,7 @@ export const executeWithReusedStatement = async (cypher, paramsList) => {
749
810
  }
750
811
  try {
751
812
  for (const params of subBatch) {
752
- await conn.execute(stmt, params);
813
+ await drainQueryResult(await conn.execute(stmt, params));
753
814
  }
754
815
  }
755
816
  catch (e) {
@@ -767,8 +828,7 @@ export const getLbugStats = async () => {
767
828
  for (const tableName of NODE_TABLES) {
768
829
  try {
769
830
  const queryResult = await conn.query(`MATCH (n:${escapeTableName(tableName)}) RETURN count(n) AS cnt`);
770
- const nodeResult = Array.isArray(queryResult) ? queryResult[0] : queryResult;
771
- const nodeRows = await nodeResult.getAll();
831
+ const nodeRows = await readQueryRows(queryResult);
772
832
  if (nodeRows.length > 0) {
773
833
  totalNodes += Number(nodeRows[0]?.cnt ?? nodeRows[0]?.[0] ?? 0);
774
834
  }
@@ -780,8 +840,7 @@ export const getLbugStats = async () => {
780
840
  let totalEdges = 0;
781
841
  try {
782
842
  const queryResult = await conn.query(`MATCH ()-[r:${REL_TABLE_NAME}]->() RETURN count(r) AS cnt`);
783
- const edgeResult = Array.isArray(queryResult) ? queryResult[0] : queryResult;
784
- const edgeRows = await edgeResult.getAll();
843
+ const edgeRows = await readQueryRows(queryResult);
785
844
  if (edgeRows.length > 0) {
786
845
  totalEdges = Number(edgeRows[0]?.cnt ?? edgeRows[0]?.[0] ?? 0);
787
846
  }
@@ -810,8 +869,7 @@ export const loadCachedEmbeddings = async () => {
810
869
  // If the query fails (column missing), we return empty cache to force a full rebuild.
811
870
  try {
812
871
  const check = await conn.query(`MATCH (e:${EMBEDDING_TABLE_NAME}) RETURN e.nodeId AS nodeId, e.chunkIndex AS chunkIndex LIMIT 1`);
813
- const checkResult = Array.isArray(check) ? check[0] : check;
814
- await checkResult.getAll();
872
+ await readQueryRows(check);
815
873
  }
816
874
  catch {
817
875
  return { embeddingNodeIds: new Set(), embeddings: [] };
@@ -833,8 +891,7 @@ export const loadCachedEmbeddings = async () => {
833
891
  throw err;
834
892
  }
835
893
  }
836
- const result = Array.isArray(rows) ? rows[0] : rows;
837
- for (const row of await result.getAll()) {
894
+ for (const row of await readQueryRows(rows)) {
838
895
  const nodeId = String(row.nodeId ?? row[0] ?? '');
839
896
  if (!nodeId)
840
897
  continue;
@@ -938,7 +995,8 @@ export const flushWAL = async () => {
938
995
  if (!conn)
939
996
  return;
940
997
  try {
941
- await conn.query('CHECKPOINT');
998
+ const checkpointResult = await conn.query('CHECKPOINT');
999
+ await drainQueryResult(checkpointResult);
942
1000
  }
943
1001
  catch {
944
1002
  /* ignore — older LadybugDB or schemaless DB may not accept it */
@@ -1036,12 +1094,11 @@ export const deleteNodesForFile = async (filePath, dbPath) => {
1036
1094
  // First count how many we'll delete
1037
1095
  const tn = escapeTableName(tableName);
1038
1096
  const countResult = await targetConn.query(`MATCH (n:${tn}) WHERE n.filePath = '${escapedPath}' RETURN count(n) AS cnt`);
1039
- const result = Array.isArray(countResult) ? countResult[0] : countResult;
1040
- const rows = await result.getAll();
1097
+ const rows = await readQueryRows(countResult);
1041
1098
  const count = Number(rows[0]?.cnt ?? rows[0]?.[0] ?? 0);
1042
1099
  if (count > 0) {
1043
1100
  // Delete nodes (and implicitly their relationships via DETACH)
1044
- await targetConn.query(`MATCH (n:${tn}) WHERE n.filePath = '${escapedPath}' DETACH DELETE n`);
1101
+ await queryAndDrain(targetConn, `MATCH (n:${tn}) WHERE n.filePath = '${escapedPath}' DETACH DELETE n`);
1045
1102
  deletedNodes += count;
1046
1103
  }
1047
1104
  }
@@ -1051,7 +1108,7 @@ export const deleteNodesForFile = async (filePath, dbPath) => {
1051
1108
  }
1052
1109
  // Also delete any embeddings for nodes in this file
1053
1110
  try {
1054
- await targetConn.query(`MATCH (e:${EMBEDDING_TABLE_NAME}) WHERE e.nodeId STARTS WITH '${escapedPath}' DELETE e`);
1111
+ await queryAndDrain(targetConn, `MATCH (e:${EMBEDDING_TABLE_NAME}) WHERE e.nodeId STARTS WITH '${escapedPath}' DELETE e`);
1055
1112
  }
1056
1113
  catch {
1057
1114
  // Embedding table may not exist or nodeId format may differ
@@ -1065,6 +1122,76 @@ export const deleteNodesForFile = async (filePath, dbPath) => {
1065
1122
  }
1066
1123
  };
1067
1124
  export const getEmbeddingTableName = () => EMBEDDING_TABLE_NAME;
1125
+ /**
1126
+ * Return the distinct repo-relative paths of files that import
1127
+ * `targetFilePath` according to the IMPORTS edges currently in the
1128
+ * DB. Used by the incremental writeback path to expand the
1129
+ * "files-to-rewrite" set so that files importing a changed file get
1130
+ * their edges (which may have been refined by cross-file resolution)
1131
+ * re-emitted, rather than left stale in the DB.
1132
+ *
1133
+ * The DB query reads the *previous* run's state — pre-pipeline, before
1134
+ * any nodes are deleted — so the returned importers are "files that
1135
+ * USED TO import the target". That's the right set to invalidate:
1136
+ * those are the files whose edges in the DB might no longer match
1137
+ * what cross-file resolution produces given the changed file's new
1138
+ * exports.
1139
+ */
1140
+ export const queryImporters = async (targetFilePath) => {
1141
+ if (!conn) {
1142
+ throw new Error('LadybugDB not initialized. Call initLbug first.');
1143
+ }
1144
+ const escaped = targetFilePath.replace(/'/g, "''");
1145
+ const cypher = `
1146
+ MATCH (a)-[r:${REL_TABLE_NAME}]->(b)
1147
+ WHERE r.type = 'IMPORTS' AND b.filePath = '${escaped}'
1148
+ RETURN DISTINCT a.filePath AS importer
1149
+ `;
1150
+ try {
1151
+ const queryResult = await conn.query(cypher);
1152
+ const result = Array.isArray(queryResult) ? queryResult[0] : queryResult;
1153
+ const rows = await result.getAll();
1154
+ const out = [];
1155
+ for (const row of rows) {
1156
+ const v = row.importer;
1157
+ if (typeof v === 'string' && v.length > 0)
1158
+ out.push(v);
1159
+ }
1160
+ return out;
1161
+ }
1162
+ catch {
1163
+ return [];
1164
+ }
1165
+ };
1166
+ /**
1167
+ * Drop every Community and Process node (and their MEMBER_OF /
1168
+ * STEP_IN_PROCESS edges via DETACH DELETE). Used at the start of an
1169
+ * incremental run so the communities and processes phases regenerate
1170
+ * them from scratch on the merged graph — required for the
1171
+ * "Leiden runs on the FULL graph" correctness invariant.
1172
+ */
1173
+ export const deleteAllCommunitiesAndProcesses = async () => {
1174
+ if (!conn) {
1175
+ throw new Error('LadybugDB not initialized. Call initLbug first.');
1176
+ }
1177
+ let nodesDeleted = 0;
1178
+ for (const label of ['Community', 'Process']) {
1179
+ try {
1180
+ const countResult = await conn.query(`MATCH (n:${label}) RETURN count(n) AS cnt`);
1181
+ const result = Array.isArray(countResult) ? countResult[0] : countResult;
1182
+ const rows = await result.getAll();
1183
+ const count = Number(rows[0]?.cnt ?? rows[0]?.[0] ?? 0);
1184
+ if (count > 0) {
1185
+ await conn.query(`MATCH (n:${label}) DETACH DELETE n`);
1186
+ nodesDeleted += count;
1187
+ }
1188
+ }
1189
+ catch {
1190
+ // Table may not exist yet on a freshly-initialized DB — fine.
1191
+ }
1192
+ }
1193
+ return { nodesDeleted };
1194
+ };
1068
1195
  // ============================================================================
1069
1196
  // Full-Text Search (FTS) Functions
1070
1197
  // ============================================================================
@@ -1088,7 +1215,7 @@ export const loadFTSExtension = async (targetConn, opts = {}) => {
1088
1215
  if (!c) {
1089
1216
  throw new Error('LadybugDB not initialized. Call initLbug first.');
1090
1217
  }
1091
- const loaded = await extensionManager.ensure((sql) => c.query(sql), 'fts', 'FTS', opts);
1218
+ const loaded = await extensionManager.ensure((sql) => queryAndDrain(c, sql), 'fts', 'FTS', opts);
1092
1219
  if (loaded && useModuleState)
1093
1220
  ftsLoaded = true;
1094
1221
  return loaded;
@@ -1102,13 +1229,21 @@ export const loadVectorExtension = async (targetConn, opts = {}) => {
1102
1229
  const useModuleState = targetConn === undefined;
1103
1230
  if (useModuleState && vectorExtensionLoaded)
1104
1231
  return true;
1232
+ // INSTALL VECTOR crashes with SIGSEGV on Windows: the KuzuDB native extension
1233
+ // installer has an unhandled error path on Windows that raises a fatal signal
1234
+ // that JS try/catch cannot intercept. Skip loading — vector/embedding search
1235
+ // is unavailable but all graph index queries still work. Do NOT set
1236
+ // vectorExtensionLoaded here: the flag means "successfully loaded", and a
1237
+ // subsequent call would otherwise short-circuit to `return true` at the top.
1238
+ if (process.platform === 'win32')
1239
+ return false;
1105
1240
  if (!isVectorExtensionSupportedByPlatform())
1106
1241
  return false;
1107
1242
  const c = targetConn ?? conn;
1108
1243
  if (!c) {
1109
1244
  throw new Error('LadybugDB not initialized. Call initLbug first.');
1110
1245
  }
1111
- const loaded = await extensionManager.ensure((sql) => c.query(sql), 'VECTOR', 'VECTOR', opts);
1246
+ const loaded = await extensionManager.ensure((sql) => queryAndDrain(c, sql), 'VECTOR', 'VECTOR', opts);
1112
1247
  if (loaded && useModuleState)
1113
1248
  vectorExtensionLoaded = true;
1114
1249
  return loaded;
@@ -1133,7 +1268,7 @@ export const createFTSIndex = async (tableName, indexName, properties, stemmer =
1133
1268
  const propList = properties.map((p) => `'${p}'`).join(', ');
1134
1269
  const query = `CALL CREATE_FTS_INDEX('${tableName}', '${indexName}', [${propList}], stemmer := '${stemmer}')`;
1135
1270
  try {
1136
- await conn.query(query);
1271
+ await queryAndDrain(conn, query);
1137
1272
  ensuredFTSIndexes.add(key);
1138
1273
  }
1139
1274
  catch (e) {
@@ -1202,8 +1337,7 @@ export const queryFTS = async (tableName, indexName, query, limit = 20, conjunct
1202
1337
  `;
1203
1338
  try {
1204
1339
  const queryResult = await conn.query(cypher);
1205
- const result = Array.isArray(queryResult) ? queryResult[0] : queryResult;
1206
- const rows = await result.getAll();
1340
+ const rows = await readQueryRows(queryResult);
1207
1341
  return rows.map((row) => {
1208
1342
  const node = row.node || row[0] || {};
1209
1343
  const score = row.score ?? row[1] ?? 0;
@@ -1232,7 +1366,7 @@ export const dropFTSIndex = async (tableName, indexName) => {
1232
1366
  throw new Error('LadybugDB not initialized. Call initLbug first.');
1233
1367
  }
1234
1368
  try {
1235
- await conn.query(`CALL DROP_FTS_INDEX('${tableName}', '${indexName}')`);
1369
+ await queryAndDrain(conn, `CALL DROP_FTS_INDEX('${tableName}', '${indexName}')`);
1236
1370
  }
1237
1371
  catch {
1238
1372
  // Index may not exist
@@ -348,7 +348,18 @@ async function doInitLbug(repoId, dbPath) {
348
348
  // install; analyze owns extension installation. If LOAD fails, search
349
349
  // features degrade gracefully and the user-facing query path proceeds.
350
350
  if (!shared.ftsLoaded) {
351
- shared.ftsLoaded = await loadFTSExtension(available[0], { policy: 'load-only' });
351
+ // Windows guard: LOAD EXTENSION fts crashes with SIGSEGV on Windows when
352
+ // the FTS extension binary is not installed locally (@ladybugdb/core native
353
+ // bug — the extension loader hits an unhandled error path that signals SIGSEGV
354
+ // rather than throwing a JS exception, so try/catch cannot protect here).
355
+ // Skip the load on Windows; bm25-index.js catches the resulting Kuzu catalog
356
+ // errors and returns empty BM25 results gracefully. Graph queries are unaffected.
357
+ if (process.platform === 'win32') {
358
+ shared.ftsLoaded = true;
359
+ }
360
+ else {
361
+ shared.ftsLoaded = await loadFTSExtension(available[0], { policy: 'load-only' });
362
+ }
352
363
  }
353
364
  // Register pool entry only after all connections are pre-warmed and FTS is
354
365
  // loaded. Concurrent executeQuery calls see either "not initialized"
@@ -404,8 +415,14 @@ export async function initLbugWithDb(repoId, existingDb, dbPath) {
404
415
  // Load FTS extension if not already loaded on this Database.
405
416
  // policy: 'load-only' — same contract as initLbug above; the read pool
406
417
  // must not block on a network install during query execution.
418
+ // Windows guard: same SIGSEGV risk as doInitLbug above — skip on Windows.
407
419
  if (!shared.ftsLoaded) {
408
- shared.ftsLoaded = await loadFTSExtension(available[0], { policy: 'load-only' });
420
+ if (process.platform === 'win32') {
421
+ shared.ftsLoaded = true;
422
+ }
423
+ else {
424
+ shared.ftsLoaded = await loadFTSExtension(available[0], { policy: 'load-only' });
425
+ }
409
426
  }
410
427
  pool.set(repoId, {
411
428
  db: existingDb,
@@ -42,6 +42,8 @@ export interface AnalyzeOptions {
42
42
  skipAgentsMd?: boolean;
43
43
  /** Omit volatile symbol/relationship counts from AGENTS.md and CLAUDE.md. */
44
44
  noStats?: boolean;
45
+ /** Skip installing standard GitNexus skill files to .claude/skills/gitnexus/. */
46
+ skipSkills?: boolean;
45
47
  /**
46
48
  * User-provided alias for the registry `name` (#829). When set,
47
49
  * forwarded to `registerRepo` so the indexed repo is stored under