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.
- package/README.md +1 -1
- package/dist/_shared/scope-resolution/method-dispatch-index.d.ts +26 -0
- package/dist/_shared/scope-resolution/method-dispatch-index.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/method-dispatch-index.js +22 -3
- package/dist/_shared/scope-resolution/method-dispatch-index.js.map +1 -1
- package/dist/_shared/scope-resolution/registries/lookup-core.js +18 -1
- package/dist/_shared/scope-resolution/registries/lookup-core.js.map +1 -1
- package/dist/cli/ai-context.d.ts +1 -0
- package/dist/cli/ai-context.js +30 -12
- package/dist/cli/analyze.d.ts +18 -0
- package/dist/cli/analyze.js +33 -4
- package/dist/cli/augment.d.ts +1 -1
- package/dist/cli/augment.js +1 -1
- package/dist/cli/index.js +6 -1
- package/dist/cli/setup.js +6 -0
- package/dist/core/augmentation/engine.d.ts +2 -2
- package/dist/core/augmentation/engine.js +26 -6
- package/dist/core/embeddings/ast-utils.js +2 -1
- package/dist/core/embeddings/http-client.js +22 -6
- package/dist/core/group/extractors/grpc-extractor.js +2 -1
- package/dist/core/group/extractors/http-patterns/python.js +175 -0
- package/dist/core/group/extractors/http-route-extractor.js +2 -1
- package/dist/core/group/extractors/include-extractor.js +2 -1
- package/dist/core/group/extractors/thrift-extractor.js +2 -1
- package/dist/core/group/extractors/tree-sitter-scanner.js +2 -1
- package/dist/core/incremental/shadow-candidates.d.ts +44 -0
- package/dist/core/incremental/shadow-candidates.js +74 -0
- package/dist/core/incremental/subgraph-extract.d.ts +64 -0
- package/dist/core/incremental/subgraph-extract.js +111 -0
- package/dist/core/ingestion/call-processor.js +166 -47
- package/dist/core/ingestion/community-processor.js +18 -0
- package/dist/core/ingestion/heritage-processor.js +3 -2
- package/dist/core/ingestion/import-processor.js +2 -1
- package/dist/core/ingestion/import-resolvers/standard.d.ts +5 -0
- package/dist/core/ingestion/import-resolvers/standard.js +27 -1
- package/dist/core/ingestion/import-resolvers/utils.js +4 -0
- package/dist/core/ingestion/languages/c/arity-metadata.d.ts +14 -0
- package/dist/core/ingestion/languages/c/arity-metadata.js +94 -0
- package/dist/core/ingestion/languages/c/arity.d.ts +6 -0
- package/dist/core/ingestion/languages/c/arity.js +18 -0
- package/dist/core/ingestion/languages/c/captures.d.ts +2 -0
- package/dist/core/ingestion/languages/c/captures.js +105 -0
- package/dist/core/ingestion/languages/c/header-scan.d.ts +7 -0
- package/dist/core/ingestion/languages/c/header-scan.js +55 -0
- package/dist/core/ingestion/languages/c/import-decomposer.d.ts +8 -0
- package/dist/core/ingestion/languages/c/import-decomposer.js +50 -0
- package/dist/core/ingestion/languages/c/import-target.d.ts +14 -0
- package/dist/core/ingestion/languages/c/import-target.js +57 -0
- package/dist/core/ingestion/languages/c/index.d.ts +11 -0
- package/dist/core/ingestion/languages/c/index.js +11 -0
- package/dist/core/ingestion/languages/c/interpret.d.ts +14 -0
- package/dist/core/ingestion/languages/c/interpret.js +48 -0
- package/dist/core/ingestion/languages/c/merge-bindings.d.ts +7 -0
- package/dist/core/ingestion/languages/c/merge-bindings.js +23 -0
- package/dist/core/ingestion/languages/c/query.d.ts +3 -0
- package/dist/core/ingestion/languages/c/query.js +161 -0
- package/dist/core/ingestion/languages/c/scope-resolver.d.ts +13 -0
- package/dist/core/ingestion/languages/c/scope-resolver.js +60 -0
- package/dist/core/ingestion/languages/c/simple-hooks.d.ts +14 -0
- package/dist/core/ingestion/languages/c/simple-hooks.js +19 -0
- package/dist/core/ingestion/languages/c/static-linkage.d.ts +13 -0
- package/dist/core/ingestion/languages/c/static-linkage.js +57 -0
- package/dist/core/ingestion/languages/c-cpp.js +10 -0
- package/dist/core/ingestion/languages/csharp/captures.js +2 -1
- package/dist/core/ingestion/languages/csharp/namespace-siblings.js +3 -2
- package/dist/core/ingestion/languages/go/captures.js +2 -1
- package/dist/core/ingestion/languages/go/range-binding.js +2 -1
- package/dist/core/ingestion/languages/java/arity-metadata.d.ts +18 -0
- package/dist/core/ingestion/languages/java/arity-metadata.js +40 -0
- package/dist/core/ingestion/languages/java/arity.d.ts +10 -0
- package/dist/core/ingestion/languages/java/arity.js +24 -0
- package/dist/core/ingestion/languages/java/cache-stats.d.ts +15 -0
- package/dist/core/ingestion/languages/java/cache-stats.js +26 -0
- package/dist/core/ingestion/languages/java/captures.d.ts +17 -0
- package/dist/core/ingestion/languages/java/captures.js +187 -0
- package/dist/core/ingestion/languages/java/import-decomposer.d.ts +18 -0
- package/dist/core/ingestion/languages/java/import-decomposer.js +85 -0
- package/dist/core/ingestion/languages/java/import-target.d.ts +17 -0
- package/dist/core/ingestion/languages/java/import-target.js +100 -0
- package/dist/core/ingestion/languages/java/index.d.ts +29 -0
- package/dist/core/ingestion/languages/java/index.js +29 -0
- package/dist/core/ingestion/languages/java/interpret.d.ts +13 -0
- package/dist/core/ingestion/languages/java/interpret.js +131 -0
- package/dist/core/ingestion/languages/java/merge-bindings.d.ts +12 -0
- package/dist/core/ingestion/languages/java/merge-bindings.js +40 -0
- package/dist/core/ingestion/languages/java/query.d.ts +30 -0
- package/dist/core/ingestion/languages/java/query.js +192 -0
- package/dist/core/ingestion/languages/java/receiver-binding.d.ts +11 -0
- package/dist/core/ingestion/languages/java/receiver-binding.js +95 -0
- package/dist/core/ingestion/languages/java/scope-resolver.d.ts +50 -0
- package/dist/core/ingestion/languages/java/scope-resolver.js +74 -0
- package/dist/core/ingestion/languages/java/simple-hooks.d.ts +13 -0
- package/dist/core/ingestion/languages/java/simple-hooks.js +34 -0
- package/dist/core/ingestion/languages/java.js +11 -0
- package/dist/core/ingestion/languages/php/arity-metadata.d.ts +28 -0
- package/dist/core/ingestion/languages/php/arity-metadata.js +63 -0
- package/dist/core/ingestion/languages/php/arity.d.ts +25 -0
- package/dist/core/ingestion/languages/php/arity.js +40 -0
- package/dist/core/ingestion/languages/php/cache-stats.d.ts +15 -0
- package/dist/core/ingestion/languages/php/cache-stats.js +26 -0
- package/dist/core/ingestion/languages/php/captures.d.ts +34 -0
- package/dist/core/ingestion/languages/php/captures.js +739 -0
- package/dist/core/ingestion/languages/php/import-decomposer.d.ts +28 -0
- package/dist/core/ingestion/languages/php/import-decomposer.js +265 -0
- package/dist/core/ingestion/languages/php/import-target.d.ts +47 -0
- package/dist/core/ingestion/languages/php/import-target.js +100 -0
- package/dist/core/ingestion/languages/php/index.d.ts +68 -0
- package/dist/core/ingestion/languages/php/index.js +72 -0
- package/dist/core/ingestion/languages/php/interpret.d.ts +36 -0
- package/dist/core/ingestion/languages/php/interpret.js +241 -0
- package/dist/core/ingestion/languages/php/merge-bindings.d.ts +19 -0
- package/dist/core/ingestion/languages/php/merge-bindings.js +47 -0
- package/dist/core/ingestion/languages/php/namespace-siblings.d.ts +51 -0
- package/dist/core/ingestion/languages/php/namespace-siblings.js +288 -0
- package/dist/core/ingestion/languages/php/query.d.ts +32 -0
- package/dist/core/ingestion/languages/php/query.js +326 -0
- package/dist/core/ingestion/languages/php/receiver-binding.d.ts +36 -0
- package/dist/core/ingestion/languages/php/receiver-binding.js +128 -0
- package/dist/core/ingestion/languages/php/scope-resolver.d.ts +23 -0
- package/dist/core/ingestion/languages/php/scope-resolver.js +358 -0
- package/dist/core/ingestion/languages/php/simple-hooks.d.ts +42 -0
- package/dist/core/ingestion/languages/php/simple-hooks.js +111 -0
- package/dist/core/ingestion/languages/php.d.ts +0 -7
- package/dist/core/ingestion/languages/php.js +15 -0
- package/dist/core/ingestion/languages/python/captures.js +2 -1
- package/dist/core/ingestion/languages/typescript/captures.js +2 -1
- package/dist/core/ingestion/parsing-processor.d.ts +22 -2
- package/dist/core/ingestion/parsing-processor.js +85 -50
- package/dist/core/ingestion/pipeline-phases/parse-impl.d.ts +5 -0
- package/dist/core/ingestion/pipeline-phases/parse-impl.js +119 -11
- package/dist/core/ingestion/pipeline-phases/parse.d.ts +14 -0
- package/dist/core/ingestion/pipeline.d.ts +13 -0
- package/dist/core/ingestion/registry-primary-flag.js +2 -0
- package/dist/core/ingestion/scope-resolution/contract/scope-resolver.d.ts +65 -0
- package/dist/core/ingestion/scope-resolution/graph-bridge/method-dispatch.d.ts +1 -1
- package/dist/core/ingestion/scope-resolution/graph-bridge/method-dispatch.js +12 -2
- package/dist/core/ingestion/scope-resolution/graph-bridge/node-lookup.js +5 -0
- package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.d.ts +25 -1
- package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.js +79 -7
- package/dist/core/ingestion/scope-resolution/passes/overload-narrowing.d.ts +7 -3
- package/dist/core/ingestion/scope-resolution/passes/overload-narrowing.js +24 -4
- package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.js +21 -2
- package/dist/core/ingestion/scope-resolution/pipeline/phase.js +13 -1
- package/dist/core/ingestion/scope-resolution/pipeline/registry.js +6 -0
- package/dist/core/ingestion/scope-resolution/pipeline/run.d.ts +17 -0
- package/dist/core/ingestion/scope-resolution/pipeline/run.js +31 -7
- package/dist/core/ingestion/tree-sitter-queries.d.ts +1 -1
- package/dist/core/ingestion/tree-sitter-queries.js +10 -0
- package/dist/core/ingestion/workers/parse-worker.js +2 -1
- package/dist/core/lbug/lbug-adapter.d.ts +26 -0
- package/dist/core/lbug/lbug-adapter.js +174 -40
- package/dist/core/lbug/pool-adapter.js +19 -2
- package/dist/core/run-analyze.d.ts +2 -0
- package/dist/core/run-analyze.js +323 -29
- package/dist/core/tree-sitter/safe-parse.d.ts +6 -0
- package/dist/core/tree-sitter/safe-parse.js +32 -0
- package/dist/server/git-clone.js +10 -13
- package/dist/storage/file-hash.d.ts +47 -0
- package/dist/storage/file-hash.js +86 -0
- package/dist/storage/git.d.ts +17 -6
- package/dist/storage/git.js +46 -12
- package/dist/storage/parse-cache.d.ts +67 -0
- package/dist/storage/parse-cache.js +182 -0
- package/dist/storage/repo-manager.d.ts +41 -1
- package/dist/storage/repo-manager.js +17 -2
- package/hooks/claude/gitnexus-hook.cjs +8 -1
- package/hooks/claude/hook-lock.cjs +119 -0
- package/package.json +1 -1
- package/web/assets/{agent-BpHQleHE.js → agent-BG6RCOzz.js} +1 -1
- package/web/assets/architecture-7EHR7CIX-6QZW5X65-F-tujre-.js +1 -0
- package/web/assets/architectureDiagram-UL44E2DR-2GL7nOvO.js +36 -0
- package/web/assets/blockDiagram-7IZFK4PR-5AjX0pPU.js +132 -0
- package/web/assets/{c4Diagram-DFAF54RM-DeJV1rCn.js → c4Diagram-Y2BXMSZH-hLOeq7xC.js} +2 -2
- package/web/assets/chunk-2T2R6R2M-B_pq_2nf.js +4 -0
- package/web/assets/chunk-2UTLFMKG-CpoohCFN.js +1 -0
- package/web/assets/{chunk-7RZVMHOQ-BdIU-RGO.js → chunk-3SSMPTDK-CfqpR3Nr.js} +1 -1
- package/web/assets/chunk-4R4BOZG6-D3gm7tYj.js +159 -0
- package/web/assets/chunk-6764PJDD-WcI965eO.js +1 -0
- package/web/assets/chunk-AQ6EADP3-BpMj3rQl.js +1 -0
- package/web/assets/{chunk-KSICW3F5-C2tZmXwv.js → chunk-AZZRMDJM-DSoCJlUA.js} +1 -1
- package/web/assets/chunk-C62D2QBJ-CvFF2PnB.js +1 -0
- package/web/assets/chunk-CEXFNPSA-DdNtJtrF.js +1 -0
- package/web/assets/chunk-J5EP6P6S-DtcVaAJI.js +1 -0
- package/web/assets/{chunk-AEOMTBSW-D7qjBMHW.js → chunk-JQRUD6KW-DElaNjc0.js} +1 -1
- package/web/assets/chunk-KGYTTC2M-D0K5or7e.js +1 -0
- package/web/assets/chunk-KRXBNO2N-DpR8iDt8.js +1 -0
- package/web/assets/chunk-LCXTWHL2-DdMObOEk.js +231 -0
- package/web/assets/chunk-LII3EMHJ-I78zXtzi.js +1 -0
- package/web/assets/chunk-RERM46MO-Betu1cSy.js +1 -0
- package/web/assets/chunk-RG4AUYOV-BUCJ2JP5.js +206 -0
- package/web/assets/chunk-RKZBBQEN-Cutpza0t.js +1 -0
- package/web/assets/chunk-RLI5ZMPA-BFUxCvX2.js +1 -0
- package/web/assets/chunk-T5OCTHI4-DKwlkuvB.js +1 -0
- package/web/assets/chunk-UP6H54XL-0YWa0NDg.js +1 -0
- package/web/assets/chunk-UXSXWOXI-CSz0OXpz.js +1 -0
- package/web/assets/chunk-W44A43WB-AOmgoT-X.js +1 -0
- package/web/assets/{chunk-RWUO3TPN-DTWzAhQ1.js → chunk-ZXARS5L4-DIzgxjMw.js} +1 -1
- package/web/assets/classDiagram-KGZ6W3CR-BT-rn7LF.js +1 -0
- package/web/assets/classDiagram-v2-72OJOZXJ-uR3nDadY.js +1 -0
- package/web/assets/{cose-bilkent-PNC4W37J-DdZq7Qz_.js → cose-bilkent-UX7MHV2Q-DCSCD1TK.js} +1 -1
- package/web/assets/dagre-ND4H6XIP-CsciHSij.js +4 -0
- package/web/assets/diagram-3NCE3AQN-BKUT5Rpc.js +43 -0
- package/web/assets/diagram-GF46GFSD-Dxb4hZSo.js +24 -0
- package/web/assets/diagram-HNR7UZ2L-D3qus9Cn.js +3 -0
- package/web/assets/diagram-QXG6HAR7-r9BMLGGP.js +24 -0
- package/web/assets/diagram-WEQXMOUZ-BGXqs7-m.js +10 -0
- package/web/assets/{erDiagram-GCSMX5X6-DfdN6iqF.js → erDiagram-L5TCEMPS-LgSWVrkZ.js} +2 -2
- package/web/assets/eventmodeling-FCH6USID-MREXMVOE-By7r3bla.js +1 -0
- package/web/assets/flowDiagram-H6V6AXG4-Bj_vV5ky.js +162 -0
- package/web/assets/ganttDiagram-JCBTUEKG-B1eVITSh.js +292 -0
- package/web/assets/gitGraph-WXDBUCRP-R675I2BI-ClEP6RdE.js +1 -0
- package/web/assets/gitGraphDiagram-S2ZK5IYY-BP0R-_FD.js +106 -0
- package/web/assets/{index-3NUCUW2s.js → index-oL-ZNYwb.js} +80 -81
- package/web/assets/info-J43DQDTF-KCYPFFUO-bBJRjmP5.js +1 -0
- package/web/assets/infoDiagram-3YFTVSEB-Dmj4OEO3.js +2 -0
- package/web/assets/{ishikawaDiagram-YMYX4NHK-BF8AtDaj.js → ishikawaDiagram-BNXS4ZKH-B3NgQ4lJ.js} +2 -2
- package/web/assets/{journeyDiagram-SO5T7YLQ-BW8oKa3N.js → journeyDiagram-M6C3CM3L-DALmL4_N.js} +3 -3
- package/web/assets/{kanban-definition-LJHFXRCJ-DzbOsR-2.js → kanban-definition-75IXJCU3-AvVbHpnN.js} +4 -4
- package/web/assets/{katex-GD7MH7QM-CJiOjBBJ.js → katex-K3KEBU37-CqF6_ZN-.js} +1 -1
- package/web/assets/{mindmap-definition-2EUWGEK5-BIXGQALq.js → mindmap-definition-2TDM6QVE-B5c9VOzs.js} +28 -28
- package/web/assets/packet-YPE3B663-LP52Z2RK-1ZCldnu3.js +1 -0
- package/web/assets/pie-LRSECV5Y-TCRJHUBD-EhjHC5EE.js +1 -0
- package/web/assets/pieDiagram-CU6KROY3-Po2HSSR4.js +30 -0
- package/web/assets/quadrantDiagram-VICAPDV7-C47UxSZD.js +7 -0
- package/web/assets/radar-GUYGQ44K-RDLRG3WG-CvXjgxlW.js +1 -0
- package/web/assets/{requirementDiagram-M5DCFWZL-CzUUrhQD.js → requirementDiagram-JXO7QTGE-CpECN_Hq.js} +6 -6
- package/web/assets/sankeyDiagram-URQDO5SZ-B3b7cLrS.js +40 -0
- package/web/assets/sequenceDiagram-VS2MUI6T-CRJ95oVP.js +162 -0
- package/web/assets/stateDiagram-7D4R322I-C7U9b3ks.js +1 -0
- package/web/assets/stateDiagram-v2-36443NZ5-BQajbtov.js +1 -0
- package/web/assets/{timeline-definition-5SPVSISX-DkMiGj4Z.js → timeline-definition-O6YCAMPW-rtbk6BBo.js} +4 -4
- package/web/assets/treeView-BLDUP644-QA4HXRO3-R2o5gwfP.js +1 -0
- package/web/assets/treemap-LRROVOQU-LLAWBHMP-Cesmac_u.js +1 -0
- package/web/assets/{vennDiagram-IE5QUKF5-BCxMmf9q.js → vennDiagram-MWXL3ELB-W8Yoaayh.js} +3 -3
- package/web/assets/wardley-L42UT6IY-5TKZOOLJ-B9HYoRgA.js +1 -0
- package/web/assets/wardleyDiagram-CUQ6CDDI-DIZw5Abj.js +78 -0
- package/web/assets/{xychartDiagram-ZHJ5623Y-DZ7fP1_3.js → xychartDiagram-N2JHSOCM-DGRtrj4P.js} +3 -3
- package/web/index.html +2 -2
- package/web/assets/architecture-YZFGNWBL-S5CXDPWN-BUzkWgDl.js +0 -1
- package/web/assets/architectureDiagram-EMZXCZ2Q-CXbzok1G.js +0 -36
- package/web/assets/blockDiagram-IGV67L2C-DA1QJ4ZB.js +0 -132
- package/web/assets/chunk-3GS5O3IE-B8hpnia8.js +0 -231
- package/web/assets/chunk-3YCYZ6SJ-B-BVu21C.js +0 -1
- package/web/assets/chunk-6NTNNK5N-DW-jYSDr.js +0 -1
- package/web/assets/chunk-A34GCYZU-BbZl-IKy.js +0 -1
- package/web/assets/chunk-DJ7UZH7F-B5tMfF87.js +0 -1
- package/web/assets/chunk-DKKBVRCY-Djm-6K_e.js +0 -4
- package/web/assets/chunk-DU5LTGQ6-QPoynYcp.js +0 -1
- package/web/assets/chunk-FXACKDTF-jieSmbe2.js +0 -159
- package/web/assets/chunk-H3VCZNTA-8EMHZ3SV.js +0 -1
- package/web/assets/chunk-HN6EAY2L-CgE_agsD.js +0 -1
- package/web/assets/chunk-O5ABG6QK-DEZV1O19.js +0 -1
- package/web/assets/chunk-PK6DOVAG-BXv0JnsJ.js +0 -206
- package/web/assets/chunk-RNJOYNJ4-BiBkF9dN.js +0 -1
- package/web/assets/chunk-TBF5ZNIQ-BSl6s9lT.js +0 -1
- package/web/assets/chunk-TU3PZOEN-DE5Qhc0N.js +0 -1
- package/web/assets/chunk-TYMNRAUI-D1NDLIMG.js +0 -1
- package/web/assets/chunk-VELTKBKT-C9dVN39o.js +0 -1
- package/web/assets/chunk-W7ZLLLMY-Bu-cdLzs.js +0 -1
- package/web/assets/chunk-WSB5WSVC-Dor71SOz.js +0 -1
- package/web/assets/chunk-XGPFEOL4-CUonLRle.js +0 -1
- package/web/assets/classDiagram-PPOCWD7C-Cdd6UdVv.js +0 -1
- package/web/assets/classDiagram-v2-23LJLIIU-DNhxY2Ib.js +0 -1
- package/web/assets/dagre-E77IOHMT-Cfj_6e17.js +0 -4
- package/web/assets/diagram-H7BISOXX-BNvpsrBv.js +0 -43
- package/web/assets/diagram-JC5VWROH-Cn0rtDbJ.js +0 -24
- package/web/assets/diagram-LXUTUG65-CHfoVKNm.js +0 -10
- package/web/assets/diagram-WEHSV5V5-BLxHksnu.js +0 -24
- package/web/assets/flowDiagram-OTCZ4VVT-aAZw4c_M.js +0 -162
- package/web/assets/ganttDiagram-MUNLMDZQ-BEfC_7Or.js +0 -292
- package/web/assets/gitGraph-7Q5UKJZL-54BCDZD5-B6ZeRLP0.js +0 -1
- package/web/assets/gitGraphDiagram-3HKGZ4G3-CG0kC8Q5.js +0 -106
- package/web/assets/info-OMHHGYJF-BF2H5H6G-BIOsZy0W.js +0 -1
- package/web/assets/infoDiagram-MN7RKWGX-DUoMH-pq.js +0 -2
- package/web/assets/packet-4T2RLAQJ-EV4IVRXR-Bs7ysNMU.js +0 -1
- package/web/assets/pie-ZZUOXDRM-N23DN5KN-Csi8nnbH.js +0 -1
- package/web/assets/pieDiagram-3IATQBI2-QY-u7P6a.js +0 -30
- package/web/assets/quadrantDiagram-E256RVCF-Di4aNiU8.js +0 -7
- package/web/assets/radar-PYXPWWZC-P6TP7ZYP-DJlyXh2-.js +0 -1
- package/web/assets/sankeyDiagram-L3NBLAOT-D2fbMiIU.js +0 -10
- package/web/assets/sequenceDiagram-ZOUHS735-BNdkqguh.js +0 -157
- package/web/assets/stateDiagram-MLPALWAM-51_Q2w2L.js +0 -1
- package/web/assets/stateDiagram-v2-B5LQ5ZB2-8nHs2aNE.js +0 -1
- package/web/assets/treeView-SZITEDCU-5DXDK3XO-Cy6P0_CZ.js +0 -1
- package/web/assets/treemap-W4RFUUIX-WYLRDWKO-C_pp1R7A.js +0 -1
- package/web/assets/wardley-RL74JXVD-BCRCBASE-CMStJhpn.js +0 -1
- package/web/assets/wardleyDiagram-XU3VSMPF-ijlLF77s.js +0 -20
- /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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
773
|
+
await drainQueryResult(results);
|
|
713
774
|
}
|
|
714
|
-
catch {
|
|
715
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|