gitnexus 1.6.9 → 1.6.10-aptos.1
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 +236 -53
- package/dist/_shared/graph/types.d.ts +67 -3
- package/dist/_shared/graph/types.d.ts.map +1 -1
- package/dist/_shared/index.d.ts +1 -0
- package/dist/_shared/index.d.ts.map +1 -1
- package/dist/_shared/index.js.map +1 -1
- package/dist/_shared/integrations/resilient-fetch.d.ts +3 -1
- package/dist/_shared/integrations/resilient-fetch.d.ts.map +1 -1
- package/dist/_shared/integrations/resilient-fetch.js +4 -3
- package/dist/_shared/integrations/resilient-fetch.js.map +1 -1
- package/dist/_shared/language-detection.d.ts.map +1 -1
- package/dist/_shared/language-detection.js +2 -0
- package/dist/_shared/language-detection.js.map +1 -1
- package/dist/_shared/languages.d.ts +2 -0
- package/dist/_shared/languages.d.ts.map +1 -1
- package/dist/_shared/languages.js +2 -0
- package/dist/_shared/languages.js.map +1 -1
- package/dist/_shared/lbug/schema-constants.d.ts +2 -2
- package/dist/_shared/lbug/schema-constants.d.ts.map +1 -1
- package/dist/_shared/lbug/schema-constants.js +8 -0
- package/dist/_shared/lbug/schema-constants.js.map +1 -1
- package/dist/_shared/pipeline.d.ts +1 -1
- package/dist/_shared/pipeline.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/callable-flow-site.d.ts +110 -0
- package/dist/_shared/scope-resolution/callable-flow-site.d.ts.map +1 -0
- package/dist/_shared/scope-resolution/callable-flow-site.js +11 -0
- package/dist/_shared/scope-resolution/callable-flow-site.js.map +1 -0
- package/dist/_shared/scope-resolution/finalize-algorithm.d.ts +1 -1
- package/dist/_shared/scope-resolution/finalize-algorithm.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/finalize-algorithm.js +1 -1
- package/dist/_shared/scope-resolution/finalize-algorithm.js.map +1 -1
- package/dist/_shared/scope-resolution/language-classification.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/language-classification.js +1 -0
- package/dist/_shared/scope-resolution/language-classification.js.map +1 -1
- package/dist/_shared/scope-resolution/parsed-file.d.ts +7 -0
- package/dist/_shared/scope-resolution/parsed-file.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/reference-site.d.ts +9 -1
- package/dist/_shared/scope-resolution/reference-site.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/types.d.ts +20 -3
- package/dist/_shared/scope-resolution/types.d.ts.map +1 -1
- package/dist/cli/ai-context.d.ts +1 -1
- package/dist/cli/ai-context.js +25 -44
- package/dist/cli/analyze.d.ts +5 -2
- package/dist/cli/analyze.js +205 -11
- package/dist/cli/clean.js +17 -3
- package/dist/cli/cli-message.d.ts +1 -1
- package/dist/cli/doctor.d.ts +18 -0
- package/dist/cli/doctor.js +96 -5
- package/dist/cli/editor-targets.d.ts +17 -2
- package/dist/cli/editor-targets.js +44 -0
- package/dist/cli/embeddings.d.ts +12 -0
- package/dist/cli/embeddings.js +49 -0
- package/dist/cli/eval-server.d.ts +23 -1
- package/dist/cli/eval-server.js +126 -8
- package/dist/cli/help-i18n.js +6 -0
- package/dist/cli/i18n/en.d.ts +18 -8
- package/dist/cli/i18n/en.js +18 -8
- package/dist/cli/i18n/resources.d.ts +28 -8
- package/dist/cli/i18n/zh-CN.d.ts +10 -0
- package/dist/cli/i18n/zh-CN.js +18 -8
- package/dist/cli/index.js +21 -7
- package/dist/cli/lazy-action.d.ts +7 -0
- package/dist/cli/lazy-action.js +27 -0
- package/dist/cli/mcp.js +6 -3
- package/dist/cli/move-availability.d.ts +5 -0
- package/dist/cli/move-availability.js +11 -0
- package/dist/cli/setup.d.ts +8 -0
- package/dist/cli/setup.js +230 -32
- package/dist/cli/skill-gen.js +38 -18
- package/dist/cli/standard-skills.d.ts +76 -0
- package/dist/cli/standard-skills.js +45 -0
- package/dist/cli/status.d.ts +4 -1
- package/dist/cli/status.js +57 -4
- package/dist/cli/tool.js +11 -0
- package/dist/cli/uninstall.js +77 -18
- package/dist/cli/wiki.d.ts +1 -0
- package/dist/cli/wiki.js +7 -1
- package/dist/config/ignore-service.d.ts +2 -0
- package/dist/config/ignore-service.js +27 -0
- package/dist/core/analysis-features.d.ts +21 -0
- package/dist/core/analysis-features.js +59 -0
- package/dist/core/analyzer-identity.d.ts +74 -0
- package/dist/core/analyzer-identity.js +1820 -0
- package/dist/core/augmentation/engine.js +13 -8
- package/dist/core/embeddings/embedder.d.ts +3 -2
- package/dist/core/embeddings/embedder.js +24 -7
- package/dist/core/embeddings/embedding-identity.d.ts +11 -0
- package/dist/core/embeddings/embedding-identity.js +24 -0
- package/dist/core/embeddings/embedding-pipeline.d.ts +36 -1
- package/dist/core/embeddings/embedding-pipeline.js +100 -9
- package/dist/core/embeddings/http-client.d.ts +33 -3
- package/dist/core/embeddings/http-client.js +237 -25
- package/dist/core/embeddings/node-module-compat.d.ts +25 -0
- package/dist/core/embeddings/node-module-compat.js +25 -0
- package/dist/core/embeddings/onnxruntime-common-resolver.js +8 -5
- package/dist/core/embeddings/onnxruntime-node-resolver.js +33 -7
- package/dist/core/embeddings/runtime-install.d.ts +119 -0
- package/dist/core/embeddings/runtime-install.js +372 -0
- package/dist/core/embeddings/runtime-support.d.ts +48 -17
- package/dist/core/embeddings/runtime-support.js +96 -0
- package/dist/core/git-staleness.js +1 -1
- package/dist/core/group/bridge-db.js +2 -0
- package/dist/core/group/extractors/http-patterns/python.js +246 -108
- package/dist/core/group/extractors/manifest-extractor.js +4 -0
- package/dist/core/incremental/escalation-gate.d.ts +38 -0
- package/dist/core/incremental/escalation-gate.js +48 -0
- package/dist/core/incremental/shadow-candidates.d.ts +3 -3
- package/dist/core/incremental/shadow-candidates.js +3 -3
- package/dist/core/incremental/subgraph-extract.d.ts +2 -2
- package/dist/core/incremental/subgraph-extract.js +2 -2
- package/dist/core/index-freshness.d.ts +5 -0
- package/dist/core/index-freshness.js +13 -0
- package/dist/core/ingestion/class-extractors/configs/jvm.js +29 -0
- package/dist/core/ingestion/cobol/cobol-preprocessor.js +1 -1
- package/dist/core/ingestion/cobol/jcl-processor.js +9 -8
- package/dist/core/ingestion/cobol-processor.js +27 -26
- package/dist/core/ingestion/community-processor.d.ts +51 -1
- package/dist/core/ingestion/community-processor.js +323 -64
- package/dist/core/ingestion/emit-references.js +7 -2
- package/dist/core/ingestion/filesystem-walker.js +4 -0
- package/dist/core/ingestion/frameworks/spring/analysis-features.d.ts +3 -0
- package/dist/core/ingestion/frameworks/spring/analysis-features.js +7 -0
- package/dist/core/ingestion/frameworks/spring/bean-candidates.d.ts +30 -0
- package/dist/core/ingestion/frameworks/spring/bean-candidates.js +182 -0
- package/dist/core/ingestion/frameworks/spring/bean-catalog.d.ts +12 -0
- package/dist/core/ingestion/frameworks/spring/bean-catalog.js +26 -0
- package/dist/core/ingestion/frameworks/spring/config-bindings.d.ts +24 -0
- package/dist/core/ingestion/frameworks/spring/config-bindings.js +115 -0
- package/dist/core/ingestion/languages/c/captures.js +56 -0
- package/dist/core/ingestion/languages/c/query.js +17 -0
- package/dist/core/ingestion/languages/c/scope-resolver.js +6 -0
- package/dist/core/ingestion/languages/cobol/captures.js +93 -0
- package/dist/core/ingestion/languages/cobol/scope-resolver.js +7 -0
- package/dist/core/ingestion/languages/cpp/captures.js +365 -75
- package/dist/core/ingestion/languages/cpp/scope-resolver.js +14 -0
- package/dist/core/ingestion/languages/csharp/captures.js +25 -0
- package/dist/core/ingestion/languages/dart/captures.js +90 -2
- package/dist/core/ingestion/languages/dart/extension-type-preprocess.d.ts +7 -0
- package/dist/core/ingestion/languages/dart/extension-type-preprocess.js +30 -0
- package/dist/core/ingestion/languages/dart.js +2 -0
- package/dist/core/ingestion/languages/go/captures.js +34 -0
- package/dist/core/ingestion/languages/index.d.ts +1 -0
- package/dist/core/ingestion/languages/index.js +2 -0
- package/dist/core/ingestion/languages/java/analysis-features.d.ts +3 -0
- package/dist/core/ingestion/languages/java/analysis-features.js +13 -0
- package/dist/core/ingestion/languages/java/capture-side-channel.d.ts +22 -0
- package/dist/core/ingestion/languages/java/capture-side-channel.js +58 -0
- package/dist/core/ingestion/languages/java/captures.d.ts +4 -3
- package/dist/core/ingestion/languages/java/captures.js +193 -17
- package/dist/core/ingestion/languages/java/package-facts.d.ts +5 -0
- package/dist/core/ingestion/languages/java/package-facts.js +9 -0
- package/dist/core/ingestion/languages/java/package-siblings.d.ts +3 -16
- package/dist/core/ingestion/languages/java/package-siblings.js +8 -147
- package/dist/core/ingestion/languages/java/query.js +23 -0
- package/dist/core/ingestion/languages/java/scope-resolver.js +23 -0
- package/dist/core/ingestion/languages/java/spring-bean-metadata.d.ts +2 -0
- package/dist/core/ingestion/languages/java/spring-bean-metadata.js +8 -0
- package/dist/core/ingestion/languages/java/spring-config-bindings.d.ts +23 -0
- package/dist/core/ingestion/languages/java/spring-config-bindings.js +215 -0
- package/dist/core/ingestion/languages/java.js +3 -0
- package/dist/core/ingestion/languages/javascript/captures.js +16 -0
- package/dist/core/ingestion/languages/javascript/query.js +21 -0
- package/dist/core/ingestion/languages/jvm/package-facts.d.ts +35 -0
- package/dist/core/ingestion/languages/jvm/package-facts.js +40 -0
- package/dist/core/ingestion/languages/jvm/package-siblings.d.ts +14 -0
- package/dist/core/ingestion/languages/jvm/package-siblings.js +129 -0
- package/dist/core/ingestion/languages/kotlin/capture-side-channel.d.ts +17 -3
- package/dist/core/ingestion/languages/kotlin/capture-side-channel.js +42 -8
- package/dist/core/ingestion/languages/kotlin/captures.js +59 -0
- package/dist/core/ingestion/languages/kotlin/package-facts.d.ts +5 -0
- package/dist/core/ingestion/languages/kotlin/package-facts.js +9 -0
- package/dist/core/ingestion/languages/kotlin/package-siblings.d.ts +4 -0
- package/dist/core/ingestion/languages/kotlin/package-siblings.js +8 -0
- package/dist/core/ingestion/languages/kotlin/query.js +19 -0
- package/dist/core/ingestion/languages/kotlin/scope-resolver.js +9 -1
- package/dist/core/ingestion/languages/kotlin/spring-bean-metadata.d.ts +2 -0
- package/dist/core/ingestion/languages/kotlin/spring-bean-metadata.js +8 -0
- package/dist/core/ingestion/languages/kotlin.js +5 -6
- package/dist/core/ingestion/languages/move.d.ts +1 -0
- package/dist/core/ingestion/languages/move.js +27 -0
- package/dist/core/ingestion/languages/php/captures.js +40 -0
- package/dist/core/ingestion/languages/php/import-decomposer.js +12 -0
- package/dist/core/ingestion/languages/php/import-target.d.ts +2 -1
- package/dist/core/ingestion/languages/php/import-target.js +110 -2
- package/dist/core/ingestion/languages/php/interpret.js +10 -0
- package/dist/core/ingestion/languages/php/scope-resolver.js +1 -1
- package/dist/core/ingestion/languages/python/captures.d.ts +3 -4
- package/dist/core/ingestion/languages/python/captures.js +24 -5
- package/dist/core/ingestion/languages/python/interpret.js +4 -0
- package/dist/core/ingestion/languages/python/receiver-binding.d.ts +15 -2
- package/dist/core/ingestion/languages/python/receiver-binding.js +96 -2
- package/dist/core/ingestion/languages/python/simple-hooks.d.ts +5 -5
- package/dist/core/ingestion/languages/python/simple-hooks.js +15 -5
- package/dist/core/ingestion/languages/ruby/captures.js +42 -0
- package/dist/core/ingestion/languages/rust/captures.js +13 -0
- package/dist/core/ingestion/languages/rust/interpret.js +18 -0
- package/dist/core/ingestion/languages/rust/query.js +9 -0
- package/dist/core/ingestion/languages/rust/range-binding.js +6 -2
- package/dist/core/ingestion/languages/swift/captures.js +12 -0
- package/dist/core/ingestion/languages/typescript/captures.js +21 -0
- package/dist/core/ingestion/languages/typescript/nuxt-auto-imports.js +2 -1
- package/dist/core/ingestion/languages/typescript/query.js +37 -0
- package/dist/core/ingestion/markdown-processor.js +3 -2
- package/dist/core/ingestion/model/registration-table.js +1 -0
- package/dist/core/ingestion/parsing-processor.d.ts +3 -1
- package/dist/core/ingestion/parsing-processor.js +36 -1
- package/dist/core/ingestion/pipeline-phases/index.d.ts +2 -0
- package/dist/core/ingestion/pipeline-phases/index.js +2 -0
- package/dist/core/ingestion/pipeline-phases/parse-impl.js +56 -2
- package/dist/core/ingestion/pipeline-phases/parse.d.ts +0 -2
- package/dist/core/ingestion/pipeline-phases/parse.js +12 -3
- package/dist/core/ingestion/pipeline-phases/processes.d.ts +8 -0
- package/dist/core/ingestion/pipeline-phases/processes.js +11 -1
- package/dist/core/ingestion/pipeline-phases/spring-config.d.ts +37 -0
- package/dist/core/ingestion/pipeline-phases/spring-config.js +433 -0
- package/dist/core/ingestion/pipeline-phases/standalone-ingest.d.ts +16 -0
- package/dist/core/ingestion/pipeline-phases/standalone-ingest.js +6 -0
- package/dist/core/ingestion/pipeline.d.ts +4 -2
- package/dist/core/ingestion/pipeline.js +14 -2
- package/dist/core/ingestion/resolve-references.js +12 -0
- package/dist/core/ingestion/route-extractors/constant-resolver.d.ts +83 -0
- package/dist/core/ingestion/route-extractors/constant-resolver.js +131 -0
- package/dist/core/ingestion/route-extractors/python-const-resolver.d.ts +75 -0
- package/dist/core/ingestion/route-extractors/python-const-resolver.js +299 -0
- package/dist/core/ingestion/scope-extractor.js +306 -43
- package/dist/core/ingestion/scope-resolution/contract/scope-resolver.d.ts +71 -2
- package/dist/core/ingestion/scope-resolution/graph-bridge/callee-id-sink.d.ts +7 -7
- package/dist/core/ingestion/scope-resolution/graph-bridge/callee-id-sink.js +8 -7
- package/dist/core/ingestion/scope-resolution/graph-bridge/edges.d.ts +3 -1
- package/dist/core/ingestion/scope-resolution/graph-bridge/edges.js +6 -0
- package/dist/core/ingestion/scope-resolution/graph-bridge/ids.js +1 -0
- package/dist/core/ingestion/scope-resolution/graph-bridge/node-lookup.js +4 -1
- package/dist/core/ingestion/scope-resolution/graph-bridge/references-to-edges.js +7 -2
- package/dist/core/ingestion/scope-resolution/passes/callable-value-flow.d.ts +47 -0
- package/dist/core/ingestion/scope-resolution/passes/callable-value-flow.js +1138 -0
- package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.d.ts +16 -4
- package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.js +97 -1
- package/dist/core/ingestion/scope-resolution/passes/property-dispatch.d.ts +60 -0
- package/dist/core/ingestion/scope-resolution/passes/property-dispatch.js +111 -0
- package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.d.ts +4 -3
- package/dist/core/ingestion/scope-resolution/pipeline/phase.d.ts +5 -0
- package/dist/core/ingestion/scope-resolution/pipeline/phase.js +25 -38
- package/dist/core/ingestion/scope-resolution/pipeline/run.d.ts +6 -0
- package/dist/core/ingestion/scope-resolution/pipeline/run.js +147 -35
- package/dist/core/ingestion/scope-resolution/resolution-outcome.d.ts +1 -1
- package/dist/core/ingestion/scope-resolution/scope/walkers.js +73 -44
- package/dist/core/ingestion/taint/typescript-model.js +34 -2
- package/dist/core/ingestion/tree-sitter-queries.d.ts +2 -2
- package/dist/core/ingestion/tree-sitter-queries.js +23 -2
- package/dist/core/ingestion/type-extractors/jvm.js +17 -2
- package/dist/core/ingestion/utils/ast-helpers.d.ts +1 -0
- package/dist/core/ingestion/utils/ast-helpers.js +153 -2
- package/dist/core/ingestion/utils/callable-flow-captures.d.ts +94 -0
- package/dist/core/ingestion/utils/callable-flow-captures.js +878 -0
- package/dist/core/ingestion/utils/line-base.d.ts +20 -0
- package/dist/core/ingestion/utils/line-base.js +20 -0
- package/dist/core/ingestion/utils/symbol-labels.d.ts +21 -0
- package/dist/core/ingestion/utils/symbol-labels.js +45 -0
- package/dist/core/ingestion/workers/parse-worker.d.ts +34 -0
- package/dist/core/ingestion/workers/parse-worker.js +40 -5
- package/dist/core/ingestion/workers/result-merge.js +4 -0
- package/dist/core/ingestion/workers/worker-pool.d.ts +28 -0
- package/dist/core/ingestion/workers/worker-pool.js +128 -28
- package/dist/core/lbug/csv-generator.d.ts +15 -0
- package/dist/core/lbug/csv-generator.js +124 -27
- package/dist/core/lbug/cypher-escape.d.ts +20 -0
- package/dist/core/lbug/cypher-escape.js +20 -0
- package/dist/core/lbug/extension-load-error.d.ts +67 -0
- package/dist/core/lbug/extension-load-error.js +326 -0
- package/dist/core/lbug/extension-loader.d.ts +17 -2
- package/dist/core/lbug/extension-loader.js +38 -13
- package/dist/core/lbug/lbug-adapter.d.ts +203 -2
- package/dist/core/lbug/lbug-adapter.js +527 -86
- package/dist/core/lbug/lbug-config.d.ts +56 -2
- package/dist/core/lbug/lbug-config.js +267 -7
- package/dist/core/lbug/move-columns.d.ts +7 -0
- package/dist/core/lbug/move-columns.js +86 -0
- package/dist/core/lbug/native-check.d.ts +40 -0
- package/dist/core/lbug/native-check.js +90 -0
- package/dist/core/lbug/node-table-layout.d.ts +29 -0
- package/dist/core/lbug/node-table-layout.js +119 -0
- package/dist/core/lbug/pool-adapter.d.ts +23 -1
- package/dist/core/lbug/pool-adapter.js +115 -8
- package/dist/core/lbug/schema.d.ts +4 -3
- package/dist/core/lbug/schema.js +16 -16
- package/dist/core/lbug/sidecar-recovery.d.ts +172 -0
- package/dist/core/lbug/sidecar-recovery.js +418 -16
- package/dist/core/lbug/wal-checkpoint-driver.js +3 -0
- package/dist/core/move/artifact-download.d.ts +19 -0
- package/dist/core/move/artifact-download.js +179 -0
- package/dist/core/move/compiler-facts.d.ts +120 -0
- package/dist/core/move/compiler-facts.js +9 -0
- package/dist/core/move/consistency.d.ts +74 -0
- package/dist/core/move/consistency.js +182 -0
- package/dist/core/move/constants.d.ts +98 -0
- package/dist/core/move/constants.js +136 -0
- package/dist/core/move/discovery.d.ts +10 -0
- package/dist/core/move/discovery.js +22 -0
- package/dist/core/move/entry-points.d.ts +14 -0
- package/dist/core/move/entry-points.js +40 -0
- package/dist/core/move/facts-mapper.d.ts +75 -0
- package/dist/core/move/facts-mapper.js +534 -0
- package/dist/core/move/install-lock.d.ts +14 -0
- package/dist/core/move/install-lock.js +102 -0
- package/dist/core/move/install.d.ts +39 -0
- package/dist/core/move/install.js +391 -0
- package/dist/core/move/mcp-client.d.ts +115 -0
- package/dist/core/move/mcp-client.js +436 -0
- package/dist/core/move/move-ingest.d.ts +52 -0
- package/dist/core/move/move-ingest.js +403 -0
- package/dist/core/move/provision.d.ts +19 -0
- package/dist/core/move/provision.js +91 -0
- package/dist/core/move/release.d.ts +6 -0
- package/dist/core/move/release.js +10 -0
- package/dist/core/move/symbol-id.d.ts +35 -0
- package/dist/core/move/symbol-id.js +65 -0
- package/dist/core/move/type-parser.d.ts +11 -0
- package/dist/core/move/type-parser.js +38 -0
- package/dist/core/platform/capabilities.d.ts +0 -1
- package/dist/core/platform/capabilities.js +39 -8
- package/dist/core/run-analyze.d.ts +9 -3
- package/dist/core/run-analyze.js +1002 -184
- package/dist/core/search/fts-indexes.d.ts +31 -0
- package/dist/core/search/fts-indexes.js +73 -0
- package/dist/core/search/fts-schema.js +2 -0
- package/dist/core/tree-sitter/safe-parse.d.ts +8 -3
- package/dist/core/tree-sitter/safe-parse.js +21 -7
- package/dist/core/wiki/graph-queries.js +6 -5
- package/dist/core/wiki/llm-client.d.ts +8 -2
- package/dist/core/wiki/llm-client.js +41 -5
- package/dist/mcp/core/embedder.js +16 -2
- package/dist/mcp/http-transport.d.ts +5 -0
- package/dist/mcp/http-transport.js +19 -5
- package/dist/mcp/local/bean-metadata.d.ts +2 -0
- package/dist/mcp/local/bean-metadata.js +25 -0
- package/dist/mcp/local/line-display.d.ts +22 -0
- package/dist/mcp/local/line-display.js +3 -0
- package/dist/mcp/local/local-backend.d.ts +19 -1
- package/dist/mcp/local/local-backend.js +402 -155
- package/dist/mcp/local/pdg-impact.d.ts +5 -3
- package/dist/mcp/local/pdg-impact.js +5 -2
- package/dist/mcp/output-budget.d.ts +5 -0
- package/dist/mcp/output-budget.js +52 -0
- package/dist/mcp/read-only-policy.d.ts +12 -0
- package/dist/mcp/read-only-policy.js +102 -0
- package/dist/mcp/repository-policy.d.ts +34 -0
- package/dist/mcp/repository-policy.js +328 -0
- package/dist/mcp/resources.js +32 -5
- package/dist/mcp/server.d.ts +5 -2
- package/dist/mcp/server.js +29 -9
- package/dist/mcp/tools.d.ts +0 -8
- package/dist/mcp/tools.js +102 -5
- package/dist/server/analyze-job.d.ts +3 -0
- package/dist/server/analyze-job.js +17 -0
- package/dist/server/analyze-launch.d.ts +6 -0
- package/dist/server/analyze-launch.js +82 -6
- package/dist/server/analyze-worker-core.d.ts +2 -1
- package/dist/server/analyze-worker-core.js +5 -2
- package/dist/server/analyze-worker.js +29 -6
- package/dist/server/api.d.ts +30 -0
- package/dist/server/api.js +120 -34
- package/dist/server/mcp-http.d.ts +1 -1
- package/dist/server/mcp-http.js +4 -2
- package/dist/server/upload-ingest.js +2 -1
- package/dist/server/validation.js +2 -1
- package/dist/storage/git.d.ts +31 -0
- package/dist/storage/git.js +111 -1
- package/dist/storage/parse-cache.js +7 -1
- package/dist/storage/parsedfile-store.d.ts +8 -0
- package/dist/storage/parsedfile-store.js +165 -1
- package/dist/storage/repo-manager.d.ts +194 -2
- package/dist/storage/repo-manager.js +56 -1
- package/dist/types/pipeline.d.ts +7 -0
- package/hooks/antigravity/gitnexus-antigravity-hook.cjs +50 -3
- package/hooks/claude/gitnexus-hook.cjs +59 -9
- package/hooks/claude/pre-tool-use.sh +0 -0
- package/hooks/claude/session-start.sh +0 -0
- package/package.json +21 -15
- package/scripts/cross-platform-tests.ts +56 -0
- package/scripts/ensure-fts.ts +43 -0
- package/scripts/install-duckdb-extension.mjs +85 -24
- package/scripts/run-cross-platform.ts +61 -6
- package/scripts/shard-arg.ts +30 -0
- package/scripts/sync-plugin-manifests.mjs +192 -0
- package/skills/gitnexus-lfg/README.md +55 -0
- package/skills/gitnexus-lfg/SKILL.md +86 -0
- package/skills/gitnexus-plan/README.md +142 -0
- package/skills/gitnexus-plan/SKILL.md +348 -0
- package/skills/gitnexus-plan/references/context-ledger.md +137 -0
- package/skills/gitnexus-plan/references/context-pack.md +126 -0
- package/skills/gitnexus-plan/references/evidence-provenance.md +272 -0
- package/skills/gitnexus-plan/references/pdg-slice.md +109 -0
- package/skills/gitnexus-plan/references/plan-template.md +201 -0
- package/skills/gitnexus-plan/scripts/evidence-provenance.mjs +2084 -0
- package/skills/gitnexus-review/SKILL.md +273 -0
- package/skills/gitnexus-review/ci-personas/ci-adversarial-lens.md +42 -0
- package/skills/gitnexus-review/ci-personas/ci-blast-radius-lens.md +39 -0
- package/skills/gitnexus-review/ci-personas/ci-correctness-lens.md +37 -0
- package/skills/gitnexus-review/ci-personas/ci-coverage-lens.md +40 -0
- package/skills/gitnexus-review/ci-personas/ci-critic-lens.md +42 -0
- package/skills/gitnexus-review/ci-personas/ci-security-lens.md +39 -0
- package/skills/gitnexus-work/README.md +71 -0
- package/skills/gitnexus-work/SKILL.md +269 -0
- package/skills/gitnexus-work/references/evidence-provenance.md +272 -0
- package/skills/gitnexus-work/scripts/evidence-provenance.mjs +2084 -0
- package/web/assets/ProcessFlowModal-B_bfBySy.js +22 -0
- package/web/assets/__vite-browser-external-bMKyYQkO.js +1 -0
- package/web/assets/agent-Bqxn-abU.js +626 -0
- package/web/assets/architecture-7EHR7CIX-6QZW5X65-BVWFvYz2.js +1 -0
- package/web/assets/architectureDiagram-UL44E2DR-CmG3uPWf.js +36 -0
- package/web/assets/{blockDiagram-7IZFK4PR-BkWhpzWB.js → blockDiagram-7IZFK4PR-DBefcjof.js} +7 -7
- package/web/assets/{c4Diagram-Y2BXMSZH-DtBvpzWD.js → c4Diagram-Y2BXMSZH-EjWnjEJl.js} +6 -6
- package/web/assets/chunk-2T2R6R2M-Bb6Sy3_j.js +4 -0
- package/web/assets/chunk-2UTLFMKG-CXlhF3Pt.js +1 -0
- package/web/assets/chunk-3SSMPTDK-rPsRM1x0.js +321 -0
- package/web/assets/chunk-4R4BOZG6-Be_F0JoX.js +159 -0
- package/web/assets/{chunk-6764PJDD-DpIS7hxD.js → chunk-6764PJDD-C7xxk063.js} +1 -1
- package/web/assets/chunk-67TQ5CYL-CA7OhIEf.js +124 -0
- package/web/assets/chunk-7FYTHRHK-CsmYIswB.js +32 -0
- package/web/assets/chunk-7J6CGLKN-BlKwgXKs.js +10 -0
- package/web/assets/chunk-7W6UQGC5-pyKGssV3.js +1 -0
- package/web/assets/chunk-C62D2QBJ-3gdL8EKc.js +1 -0
- package/web/assets/chunk-CEXFNPSA-CjwtMDkc.js +1 -0
- package/web/assets/{chunk-INKRHTLW-Nu4ri9P-.js → chunk-INKRHTLW-Ckl3_KkO.js} +13 -13
- package/web/assets/chunk-J5EP6P6S-L19oz55R.js +1 -0
- package/web/assets/{chunk-KGFNY3KK-JGMJvKCK.js → chunk-KGFNY3KK-BZeP-55u.js} +17 -17
- package/web/assets/chunk-KGYTTC2M-zm6n242I.js +1 -0
- package/web/assets/{chunk-KRXBNO2N-BW5o0KUN.js → chunk-KRXBNO2N-C-UNuKKf.js} +1 -1
- package/web/assets/{chunk-LCXTWHL2-CfLLCywY.js → chunk-LCXTWHL2-C162wE5z.js} +5 -5
- package/web/assets/chunk-LII3EMHJ-BL6lKJ_P.js +1 -0
- package/web/assets/chunk-LRIF4GLE-n59lhprL.js +1 -0
- package/web/assets/chunk-QA3QBVWF-DVXPOIxe.js +2 -0
- package/web/assets/chunk-RERM46MO-B5dAdWpP.js +1 -0
- package/web/assets/chunk-RG4AUYOV-ZNgyLFq6.js +206 -0
- package/web/assets/chunk-RKZBBQEN-MyIQbGgD.js +1 -0
- package/web/assets/chunk-RLI5ZMPA-CkXZ0y0U.js +1 -0
- package/web/assets/chunk-T2UQINTJ-BEyXhZWe.js +1 -0
- package/web/assets/chunk-UP6H54XL-BG-n7qDp.js +1 -0
- package/web/assets/chunk-UXSXWOXI-CW1_r5cS.js +1 -0
- package/web/assets/chunk-UY5QBCOK-ByqTVLvh.js +1 -0
- package/web/assets/chunk-VU6ZFW4Y-BLeasdkU.js +2 -0
- package/web/assets/{chunk-W44A43WB-JqMLIpR0.js → chunk-W44A43WB-BN8EQc_u.js} +1 -1
- package/web/assets/chunk-ZXARS5L4-C3v-4Fsw.js +1 -0
- package/web/assets/classDiagram-KGZ6W3CR-olpO3fMe.js +1 -0
- package/web/assets/classDiagram-v2-72OJOZXJ-olpO3fMe.js +1 -0
- package/web/assets/cose-bilkent-UX7MHV2Q-BmnZ7Mvj.js +1 -0
- package/web/assets/dagre-ND4H6XIP-CY4iIF7v.js +4 -0
- package/web/assets/diagram-3NCE3AQN-CO6QpzEE.js +43 -0
- package/web/assets/diagram-GF46GFSD-B2atbzmU.js +24 -0
- package/web/assets/diagram-HNR7UZ2L-DVRltWbL.js +3 -0
- package/web/assets/diagram-QXG6HAR7-DR6AHD2h.js +24 -0
- package/web/assets/diagram-WEQXMOUZ-DkpoMwTL.js +10 -0
- package/web/assets/erDiagram-L5TCEMPS-n8g_90bc.js +85 -0
- package/web/assets/eventmodeling-FCH6USID-MREXMVOE-CgFBM7e-.js +1 -0
- package/web/assets/flowDiagram-H6V6AXG4-SGMDiCkB.js +162 -0
- package/web/assets/ganttDiagram-JCBTUEKG-Cb3UBqRS.js +292 -0
- package/web/assets/gitGraph-WXDBUCRP-R675I2BI-DCJv7SII.js +1 -0
- package/web/assets/gitGraphDiagram-S2ZK5IYY-Bs9CR7tq.js +106 -0
- package/web/assets/index-CX_fADmQ.css +2 -0
- package/web/assets/index-D1Z3dGGz.js +575 -0
- package/web/assets/info-J43DQDTF-KCYPFFUO-BfNy-9Nd.js +1 -0
- package/web/assets/infoDiagram-3YFTVSEB-T368on4D.js +2 -0
- package/web/assets/{ishikawaDiagram-BNXS4ZKH-DfYpxnE5.js → ishikawaDiagram-BNXS4ZKH-XpjJRU9h.js} +6 -6
- package/web/assets/journeyDiagram-M6C3CM3L-C6wjooas.js +139 -0
- package/web/assets/kanban-definition-75IXJCU3-5_UVY79g.js +89 -0
- package/web/assets/{katex-K3KEBU37-CTc5BslQ.js → katex-K3KEBU37-qRQBy-EZ.js} +2 -2
- package/web/assets/{mindmap-definition-2TDM6QVE-DypvbOMQ.js → mindmap-definition-2TDM6QVE-8xDLzk2e.js} +29 -29
- package/web/assets/node-Ct_zna8U.js +8 -0
- package/web/assets/packet-YPE3B663-LP52Z2RK-D4qkeG9k.js +1 -0
- package/web/assets/pie-LRSECV5Y-TCRJHUBD-B_yMKyQa.js +1 -0
- package/web/assets/pieDiagram-CU6KROY3-Bv4LpAbr.js +30 -0
- package/web/assets/preload-helper-Czpn1I53.js +1 -0
- package/web/assets/{quadrantDiagram-VICAPDV7-yXSZ2lLz.js → quadrantDiagram-VICAPDV7-DR54jOeR.js} +6 -6
- package/web/assets/radar-GUYGQ44K-RDLRG3WG-DeD6yN_0.js +1 -0
- package/web/assets/requirementDiagram-JXO7QTGE-PEkg7sKC.js +84 -0
- package/web/assets/rolldown-runtime-QTnfLwEv.js +1 -0
- package/web/assets/sankeyDiagram-URQDO5SZ-DDWEtjcs.js +40 -0
- package/web/assets/sdk-CzHHH8tD.js +37 -0
- package/web/assets/sequenceDiagram-VS2MUI6T-Bv-uwANx.js +162 -0
- package/web/assets/src-JV30wyV8.js +1 -0
- package/web/assets/stateDiagram-7D4R322I-DVNjmkEq.js +1 -0
- package/web/assets/stateDiagram-v2-36443NZ5-CyN4Fh7_.js +1 -0
- package/web/assets/timeline-definition-O6YCAMPW-Qmsuo7qS.js +120 -0
- package/web/assets/treeView-BLDUP644-QA4HXRO3-CDuSYnd4.js +1 -0
- package/web/assets/treemap-LRROVOQU-LLAWBHMP-imazucyJ.js +1 -0
- package/web/assets/vennDiagram-MWXL3ELB-BD1iK1SX.js +34 -0
- package/web/assets/wardley-L42UT6IY-5TKZOOLJ-DqrT9tB8.js +1 -0
- package/web/assets/wardleyDiagram-CUQ6CDDI-D6TzLVob.js +78 -0
- package/web/assets/{xychartDiagram-N2JHSOCM-BOLm0eNm.js → xychartDiagram-N2JHSOCM-CoZ_Tits.js} +6 -6
- package/web/index.html +18 -10
- package/skills/gitnexus-pr-review.md +0 -163
- package/web/assets/agent-Dli_x7bU.js +0 -660
- package/web/assets/architecture-7EHR7CIX-6QZW5X65-DxJw65fT.js +0 -1
- package/web/assets/architectureDiagram-UL44E2DR-dEkqUZN9.js +0 -36
- package/web/assets/chunk-3SSMPTDK-B4_etUhr.js +0 -321
- package/web/assets/chunk-67TQ5CYL-4sNPJU1q.js +0 -124
- package/web/assets/chunk-7W6UQGC5-KyEG0HQg.js +0 -1
- package/web/assets/chunk-KGYTTC2M-CWC_c3H9.js +0 -161
- package/web/assets/chunk-LII3EMHJ-D-jm-dLa.js +0 -1
- package/web/assets/chunk-QA3QBVWF-BgRW3SXd.js +0 -2
- package/web/assets/chunk-RG4AUYOV-CqWzWsV3.js +0 -206
- package/web/assets/chunk-T2UQINTJ-DSBqkzH7.js +0 -1
- package/web/assets/chunk-UY5QBCOK-DyF0vyGd.js +0 -1
- package/web/assets/chunk-ZXARS5L4-CxN8oiwI.js +0 -1
- package/web/assets/classDiagram-KGZ6W3CR-CMne4tG9.js +0 -1
- package/web/assets/classDiagram-v2-72OJOZXJ-CMne4tG9.js +0 -1
- package/web/assets/cose-bilkent-UX7MHV2Q-D71wNYRJ.js +0 -1
- package/web/assets/dagre-ND4H6XIP-Co5rRx9X.js +0 -4
- package/web/assets/diagram-3NCE3AQN-DBp4O00j.js +0 -43
- package/web/assets/diagram-GF46GFSD-6N_8yS0i.js +0 -24
- package/web/assets/diagram-HNR7UZ2L-DFCfd5LI.js +0 -3
- package/web/assets/diagram-QXG6HAR7-Di093rFg.js +0 -24
- package/web/assets/diagram-WEQXMOUZ-DZWi4SUN.js +0 -10
- package/web/assets/erDiagram-L5TCEMPS-8X1y6R4Y.js +0 -85
- package/web/assets/eventmodeling-FCH6USID-MREXMVOE-BQm9QzEa.js +0 -1
- package/web/assets/flowDiagram-H6V6AXG4-CMpY8Ufn.js +0 -162
- package/web/assets/ganttDiagram-JCBTUEKG-D3iL2Aet.js +0 -292
- package/web/assets/gitGraph-WXDBUCRP-R675I2BI-Cr_Bm2Nb.js +0 -1
- package/web/assets/gitGraphDiagram-S2ZK5IYY-CPIDgxGm.js +0 -106
- package/web/assets/index-KctnI3Vq.js +0 -635
- package/web/assets/index-_lgn7hs5.css +0 -2
- package/web/assets/info-J43DQDTF-KCYPFFUO-Cs4p2oyk.js +0 -1
- package/web/assets/infoDiagram-3YFTVSEB-BaLMZkUg.js +0 -2
- package/web/assets/journeyDiagram-M6C3CM3L-CvArszLo.js +0 -139
- package/web/assets/kanban-definition-75IXJCU3-CpfVLLf9.js +0 -89
- package/web/assets/packet-YPE3B663-LP52Z2RK-CKCrztD2.js +0 -1
- package/web/assets/pie-LRSECV5Y-TCRJHUBD-BB7pHqoD.js +0 -1
- package/web/assets/pieDiagram-CU6KROY3-s27EFWgP.js +0 -30
- package/web/assets/radar-GUYGQ44K-RDLRG3WG-DhoTOcuK.js +0 -1
- package/web/assets/requirementDiagram-JXO7QTGE-CWhqInuf.js +0 -84
- package/web/assets/sankeyDiagram-URQDO5SZ-1qEjlFIB.js +0 -40
- package/web/assets/sequenceDiagram-VS2MUI6T-RyTlZ5cR.js +0 -162
- package/web/assets/stateDiagram-7D4R322I-DTjVfX4A.js +0 -1
- package/web/assets/stateDiagram-v2-36443NZ5-xY9_k9_Q.js +0 -1
- package/web/assets/timeline-definition-O6YCAMPW-DrrqLYAf.js +0 -120
- package/web/assets/treeView-BLDUP644-QA4HXRO3-ODehyGKL.js +0 -1
- package/web/assets/treemap-LRROVOQU-LLAWBHMP-BfpgC-7o.js +0 -1
- package/web/assets/vennDiagram-MWXL3ELB-B0RkWAim.js +0 -34
- package/web/assets/wardley-L42UT6IY-5TKZOOLJ-CNeL6VHE.js +0 -1
- package/web/assets/wardleyDiagram-CUQ6CDDI-boUxiQ5F.js +0 -78
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type ExtensionLoadDiagnosis } from './extension-load-error.js';
|
|
1
2
|
/**
|
|
2
3
|
* Lifecycle policy for an optional DuckDB extension.
|
|
3
4
|
*
|
|
@@ -20,6 +21,12 @@ export interface ExtensionCapability {
|
|
|
20
21
|
loaded: boolean;
|
|
21
22
|
/** Human-readable reason when `loaded` is false. */
|
|
22
23
|
reason?: string;
|
|
24
|
+
/**
|
|
25
|
+
* Classified diagnosis of `reason`, computed ONCE at mark-unavailable time so
|
|
26
|
+
* per-request surfaces (ftsDegradedWarning on /api/search + MCP query) read the
|
|
27
|
+
* cached remedy instead of re-inspecting the extension file on every call (#2383 F3).
|
|
28
|
+
*/
|
|
29
|
+
diagnosis?: ExtensionLoadDiagnosis;
|
|
23
30
|
}
|
|
24
31
|
/** Per-call overrides applied on top of `ExtensionManager` defaults. */
|
|
25
32
|
export interface ExtensionEnsureOptions {
|
|
@@ -29,7 +36,7 @@ export interface ExtensionEnsureOptions {
|
|
|
29
36
|
export interface ExtensionManagerOptions {
|
|
30
37
|
policy?: ExtensionInstallPolicy;
|
|
31
38
|
installTimeoutMs?: number;
|
|
32
|
-
installExtension?: (extensionName: string, timeoutMs: number) => Promise<ExtensionInstallResult>;
|
|
39
|
+
installExtension?: (extensionName: string, timeoutMs: number, loadError?: string) => Promise<ExtensionInstallResult>;
|
|
33
40
|
warn?: (message: string) => void;
|
|
34
41
|
}
|
|
35
42
|
export declare const getExtensionInstallPolicy: () => ExtensionInstallPolicy;
|
|
@@ -58,7 +65,7 @@ export declare const getExtensionInstallChildProcessArgs: (extensionName: string
|
|
|
58
65
|
* If the child exceeds `timeoutMs` the parent kills it with SIGKILL and
|
|
59
66
|
* resolves with `timedOut: true`.
|
|
60
67
|
*/
|
|
61
|
-
export declare const installDuckDbExtensionOutOfProcess: (extensionName: string, timeoutMs?: number) => Promise<ExtensionInstallResult>;
|
|
68
|
+
export declare const installDuckDbExtensionOutOfProcess: (extensionName: string, timeoutMs?: number, loadError?: string) => Promise<ExtensionInstallResult>;
|
|
62
69
|
/**
|
|
63
70
|
* Centralized lifecycle manager for optional LadybugDB extensions.
|
|
64
71
|
*
|
|
@@ -90,6 +97,14 @@ export declare class ExtensionManager {
|
|
|
90
97
|
* paths are expected to degrade gracefully.
|
|
91
98
|
*/
|
|
92
99
|
ensure(query: (sql: string) => Promise<unknown>, name: string, label: string, opts?: ExtensionEnsureOptions): Promise<boolean>;
|
|
100
|
+
/**
|
|
101
|
+
* Attempt `LOAD EXTENSION <name>`; returns `null` on success and the
|
|
102
|
+
* collapsed error message on failure. The message is the load-side ground
|
|
103
|
+
* truth — LadybugDB distinguishes a missing extension file from a present
|
|
104
|
+
* but unloadable one (wrong platform, truncated download, version mismatch),
|
|
105
|
+
* and discarding it left users staring at "not pre-installed" when the file
|
|
106
|
+
* existed all along (#2374).
|
|
107
|
+
*/
|
|
93
108
|
private tryLoad;
|
|
94
109
|
private markLoaded;
|
|
95
110
|
private markUnavailable;
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import { spawn } from 'child_process';
|
|
2
2
|
import { fileURLToPath } from 'node:url';
|
|
3
3
|
import { LBUG_MAX_DB_SIZE } from './lbug-config.js';
|
|
4
|
+
import { diagnoseExtensionLoad } from './extension-load-error.js';
|
|
4
5
|
import { logger } from '../logger.js';
|
|
5
6
|
const DEFAULT_EXTENSION_INSTALL_TIMEOUT_MS = 15_000;
|
|
6
7
|
const EXTENSION_NAME_PATTERN = /^[A-Za-z][A-Za-z0-9_]*$/;
|
|
7
8
|
const alreadyAvailable = (message) => message.includes('already loaded') ||
|
|
8
9
|
message.includes('already installed') ||
|
|
9
10
|
message.includes('already exists');
|
|
11
|
+
/** LadybugDB errors are multi-line; collapse for single-line warn/reason strings. */
|
|
12
|
+
const oneLine = (value) => value.replace(/\s+/g, ' ').trim();
|
|
10
13
|
const resolvePolicyFromEnv = () => {
|
|
11
14
|
const raw = process.env.GITNEXUS_LBUG_EXTENSION_INSTALL;
|
|
12
15
|
if (raw === 'load-only' || raw === 'never' || raw === 'auto')
|
|
@@ -51,7 +54,7 @@ export const getExtensionInstallChildProcessArgs = (extensionName, maxDbSize = L
|
|
|
51
54
|
* If the child exceeds `timeoutMs` the parent kills it with SIGKILL and
|
|
52
55
|
* resolves with `timedOut: true`.
|
|
53
56
|
*/
|
|
54
|
-
export const installDuckDbExtensionOutOfProcess = async (extensionName, timeoutMs = getExtensionInstallTimeoutMs()) => {
|
|
57
|
+
export const installDuckDbExtensionOutOfProcess = async (extensionName, timeoutMs = getExtensionInstallTimeoutMs(), loadError) => {
|
|
55
58
|
if (!EXTENSION_NAME_PATTERN.test(extensionName)) {
|
|
56
59
|
throw new Error(`Invalid DuckDB extension name: ${extensionName}`);
|
|
57
60
|
}
|
|
@@ -60,6 +63,9 @@ export const installDuckDbExtensionOutOfProcess = async (extensionName, timeoutM
|
|
|
60
63
|
env: {
|
|
61
64
|
...process.env,
|
|
62
65
|
GITNEXUS_LBUG_EXTENSION_NAME: extensionName,
|
|
66
|
+
// The child picks INSTALL vs FORCE INSTALL from this LOAD error so it
|
|
67
|
+
// only re-downloads when the on-disk extension file is actually broken.
|
|
68
|
+
...(loadError ? { GITNEXUS_LBUG_EXTENSION_LOAD_ERROR: loadError } : {}),
|
|
63
69
|
},
|
|
64
70
|
stdio: ['ignore', 'ignore', 'pipe'],
|
|
65
71
|
windowsHide: true,
|
|
@@ -78,7 +84,7 @@ export const installDuckDbExtensionOutOfProcess = async (extensionName, timeoutM
|
|
|
78
84
|
resolve({
|
|
79
85
|
success: false,
|
|
80
86
|
timedOut: true,
|
|
81
|
-
message: `
|
|
87
|
+
message: `extension install for ${extensionName} timed out after ${timeoutMs}ms`,
|
|
82
88
|
});
|
|
83
89
|
}, timeoutMs);
|
|
84
90
|
child.on('error', (err) => {
|
|
@@ -97,8 +103,8 @@ export const installDuckDbExtensionOutOfProcess = async (extensionName, timeoutM
|
|
|
97
103
|
success: code === 0,
|
|
98
104
|
timedOut: false,
|
|
99
105
|
message: code === 0
|
|
100
|
-
? `
|
|
101
|
-
: `
|
|
106
|
+
? `extension install for ${extensionName} completed`
|
|
107
|
+
: `extension install for ${extensionName} failed with ${signal ?? `exit code ${code}`}${stderr ? `: ${stderr.trim()}` : ''}`,
|
|
102
108
|
});
|
|
103
109
|
});
|
|
104
110
|
});
|
|
@@ -152,46 +158,65 @@ export class ExtensionManager {
|
|
|
152
158
|
this.markUnavailable(name, label, 'extension install policy is "never"', warn);
|
|
153
159
|
return false;
|
|
154
160
|
}
|
|
155
|
-
|
|
161
|
+
const loadError = await this.tryLoad(query, name);
|
|
162
|
+
if (loadError === null) {
|
|
156
163
|
this.markLoaded(name);
|
|
157
164
|
return true;
|
|
158
165
|
}
|
|
159
166
|
if (policy === 'load-only') {
|
|
160
|
-
this.markUnavailable(name, label,
|
|
167
|
+
this.markUnavailable(name, label, `load-only policy (no install attempted); LOAD ${name} failed: ${loadError}`, warn);
|
|
161
168
|
return false;
|
|
162
169
|
}
|
|
163
170
|
let install = this.installAttempted.get(name);
|
|
164
171
|
if (!install) {
|
|
165
172
|
const installFn = this.options.installExtension ?? installDuckDbExtensionOutOfProcess;
|
|
166
|
-
|
|
173
|
+
// Hand the child the LOAD error so it re-downloads (FORCE) only when the
|
|
174
|
+
// present extension file is provably broken, not on every LOAD failure.
|
|
175
|
+
install = await installFn(name, timeoutMs, loadError);
|
|
167
176
|
this.installAttempted.set(name, install);
|
|
168
177
|
}
|
|
169
178
|
if (!install.success) {
|
|
170
|
-
this.markUnavailable(name, label, install.message
|
|
179
|
+
this.markUnavailable(name, label, `${install.message}; LOAD ${name} had failed: ${loadError}`, warn);
|
|
171
180
|
return false;
|
|
172
181
|
}
|
|
173
|
-
|
|
182
|
+
const retryError = await this.tryLoad(query, name);
|
|
183
|
+
if (retryError === null) {
|
|
174
184
|
this.markLoaded(name);
|
|
175
185
|
return true;
|
|
176
186
|
}
|
|
177
|
-
this.markUnavailable(name, label, `LOAD ${name} failed after successful INSTALL`, warn);
|
|
187
|
+
this.markUnavailable(name, label, `LOAD ${name} failed after successful INSTALL: ${retryError}`, warn);
|
|
178
188
|
return false;
|
|
179
189
|
}
|
|
190
|
+
/**
|
|
191
|
+
* Attempt `LOAD EXTENSION <name>`; returns `null` on success and the
|
|
192
|
+
* collapsed error message on failure. The message is the load-side ground
|
|
193
|
+
* truth — LadybugDB distinguishes a missing extension file from a present
|
|
194
|
+
* but unloadable one (wrong platform, truncated download, version mismatch),
|
|
195
|
+
* and discarding it left users staring at "not pre-installed" when the file
|
|
196
|
+
* existed all along (#2374).
|
|
197
|
+
*/
|
|
180
198
|
async tryLoad(query, name) {
|
|
181
199
|
try {
|
|
182
200
|
await query(`LOAD EXTENSION ${name}`);
|
|
183
|
-
return
|
|
201
|
+
return null;
|
|
184
202
|
}
|
|
185
203
|
catch (err) {
|
|
186
204
|
const msg = err instanceof Error ? err.message : String(err);
|
|
187
|
-
return alreadyAvailable(msg);
|
|
205
|
+
return alreadyAvailable(msg) ? null : oneLine(msg);
|
|
188
206
|
}
|
|
189
207
|
}
|
|
190
208
|
markLoaded(name) {
|
|
191
209
|
this.capabilities.set(name, { name, loaded: true });
|
|
192
210
|
}
|
|
193
211
|
markUnavailable(name, label, reason, warn) {
|
|
194
|
-
|
|
212
|
+
// Classify once here (the single load-failure sink, run per Database not per
|
|
213
|
+
// request) so the hot per-request warning path does no file I/O (#2383 F3).
|
|
214
|
+
this.capabilities.set(name, {
|
|
215
|
+
name,
|
|
216
|
+
loaded: false,
|
|
217
|
+
reason,
|
|
218
|
+
diagnosis: diagnoseExtensionLoad(reason, label),
|
|
219
|
+
});
|
|
195
220
|
const key = `${name}:${reason}`;
|
|
196
221
|
if (this.warnedKeys.has(key))
|
|
197
222
|
return;
|
|
@@ -2,7 +2,7 @@ import lbug from '@ladybugdb/core';
|
|
|
2
2
|
import { KnowledgeGraph } from '../graph/types.js';
|
|
3
3
|
import { NodeTableName } from './schema.js';
|
|
4
4
|
import type { PdgEmitManifest } from './pdg-emit-sink.js';
|
|
5
|
-
import type
|
|
5
|
+
import { type CachedEmbedding } from '../embeddings/types.js';
|
|
6
6
|
import { type ExtensionEnsureOptions } from './extension-loader.js';
|
|
7
7
|
/** Result of splitting the relationship CSV into per-label-pair files. */
|
|
8
8
|
export interface RelCsvSplitResult {
|
|
@@ -83,6 +83,21 @@ pdgEmitManifest?: PdgEmitManifest) => Promise<{
|
|
|
83
83
|
warnings: string[];
|
|
84
84
|
}>;
|
|
85
85
|
export declare const COPY_CSV_OPTS = "(HEADER=true, ESCAPE='\"', DELIM=',', QUOTE='\"', PARALLEL=false, auto_detect=false)";
|
|
86
|
+
/**
|
|
87
|
+
* Fallback: insert relationships one-by-one if COPY fails.
|
|
88
|
+
*
|
|
89
|
+
* Exported for the quoted-id round-trip tests in
|
|
90
|
+
* `test/integration/lbug-core-adapter.test.ts` (the `DELETE_FILES_CHUNK_SIZE`
|
|
91
|
+
* exported-for-tests precedent); production callers stay in this module.
|
|
92
|
+
* Bails silently when the adapter singleton is closed.
|
|
93
|
+
*
|
|
94
|
+
* KNOWN PRE-EXISTING NARROWING (distinct from the `''` escaping bug, NOT
|
|
95
|
+
* fixed here): the row regex below matches CSV fields with `[^"]*`, so an id
|
|
96
|
+
* containing a double quote (CSV-escaped as `""`) never matches and the edge
|
|
97
|
+
* is skipped. Tracked as part of the quote-in-id divergence documented in
|
|
98
|
+
* `rel-pair-routing.ts`.
|
|
99
|
+
*/
|
|
100
|
+
export declare const fallbackRelationshipInserts: (validRelLines: string[], validTables: Set<string>, getNodeLabel: (id: string) => string) => Promise<void>;
|
|
86
101
|
export declare const getCopyQuery: (table: NodeTableName, filePath: string) => string;
|
|
87
102
|
/**
|
|
88
103
|
* Insert a single node to LadybugDB
|
|
@@ -198,6 +213,76 @@ export declare const safeClose: () => Promise<void>;
|
|
|
198
213
|
*/
|
|
199
214
|
export declare const closeLbugBeforeExit: () => Promise<void>;
|
|
200
215
|
export declare const closeLbug: () => Promise<void>;
|
|
216
|
+
/**
|
|
217
|
+
* Thrown by {@link wipeLbugDbFiles} when a data-bearing member of the
|
|
218
|
+
* LadybugDB file family is still present after the bounded
|
|
219
|
+
* remove-and-verify retries (#2409, tri-review 4669518496 P2-4), and by
|
|
220
|
+
* run-analyze's dirty-recovery block when the crashed run's sidecars can
|
|
221
|
+
* neither be parked nor removed (this shipping review, FIX 1 — same lock
|
|
222
|
+
* class, same remediation, and the CLI already renders this type).
|
|
223
|
+
*
|
|
224
|
+
* Classify by TYPE (`err instanceof LbugWipeError`) — the repo norm from
|
|
225
|
+
* #2385 — never by message text. The MESSAGE is nonetheless fully
|
|
226
|
+
* self-contained (headline + blocked paths + remediation) because
|
|
227
|
+
* `gitnexus serve` forwards only `err.message` over worker IPC
|
|
228
|
+
* (analyze-worker-core.ts), so the serve surface has nothing but this
|
|
229
|
+
* string to show the user. The holder framing deliberately covers the
|
|
230
|
+
* own-process case (FIX 2, finder A): the blocking handle is often a
|
|
231
|
+
* lingering one from THIS process's just-closed DB or a transient AV scan
|
|
232
|
+
* — not necessarily another process — so an immediate re-run often
|
|
233
|
+
* succeeds.
|
|
234
|
+
*/
|
|
235
|
+
export declare class LbugWipeError extends Error {
|
|
236
|
+
/** Paths still present (or unverifiable) after all retries. */
|
|
237
|
+
readonly survivors: readonly string[];
|
|
238
|
+
constructor(survivors: readonly string[], options?: {
|
|
239
|
+
headline?: string;
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Remove the LadybugDB file family and VERIFY each member is really gone.
|
|
244
|
+
*
|
|
245
|
+
* Owns the canonical 4-file family list — `<lbugPath>`, `.wal`, `.shadow`,
|
|
246
|
+
* `.lock` — so run-analyze's two wipe sites (full rebuild + the #2409
|
|
247
|
+
* escalation valve) can never drift apart. `.shadow` is included because a
|
|
248
|
+
* checkpoint-in-flight crash leaves a shadow sidecar, and a stale shadow next
|
|
249
|
+
* to a freshly created DB file is replay poison on the next open (#2409).
|
|
250
|
+
*
|
|
251
|
+
* Verification contract (tri-review 4669518496 P2-4 — the old inline loops
|
|
252
|
+
* swallowed rm failures and let `initLbug` reopen a still-populated DB the
|
|
253
|
+
* run believed it wiped): after `fs.rm({ recursive, force })`, each path is
|
|
254
|
+
* probed and counts as GONE only when the probe rejects with **ENOENT**. A
|
|
255
|
+
* resolving probe, or a rejection in the EPERM/EBUSY/EACCES class (Windows
|
|
256
|
+
* delete-pending / handle-release lag — see HANDLE_RELEASE_LOCK_CODES in
|
|
257
|
+
* lbug-config.ts), or any other code means the path is not verifiably gone:
|
|
258
|
+
* it is retried on the shared handle-release budget
|
|
259
|
+
* (HANDLE_RELEASE_PROBE_ATTEMPTS × linear HANDLE_RELEASE_PROBE_DELAY_MS,
|
|
260
|
+
* lbug-config.ts — the previous private mirror constants were
|
|
261
|
+
* documentation-coupled copies) and then handled by CLASS (this shipping
|
|
262
|
+
* review, FIX 2):
|
|
263
|
+
*
|
|
264
|
+
* - DATA-BEARING members (`<lbugPath>`, `.wal`, `.shadow`) — a survivor
|
|
265
|
+
* means the reopen would resurrect rows this run believes wiped: throw
|
|
266
|
+
* a typed {@link LbugWipeError}.
|
|
267
|
+
* - `.lock` — contentless: `initLbug` recreates it, and a genuinely held
|
|
268
|
+
* lock surfaces as initLbug's own lock-busy classification (a better
|
|
269
|
+
* error than this one). A `.lock`-only survivor (an AV-held
|
|
270
|
+
* delete-pending handle outlasting the budget previously failed a
|
|
271
|
+
* perfectly sound rebuild) logs a warning and CONTINUES.
|
|
272
|
+
*
|
|
273
|
+
* Linux unlinked-but-open (name gone, holder keeps the old inode) probes
|
|
274
|
+
* ENOENT and is accepted by design — both production wipe sites run after a
|
|
275
|
+
* real `closeLbug()`.
|
|
276
|
+
*
|
|
277
|
+
* Deliberately OUT of this contract: `cleanupOldKuzuFiles`
|
|
278
|
+
* (repo-manager.ts) sweeps the LEGACY kuzu-era file family during storage
|
|
279
|
+
* migration — different family, best-effort by design; and
|
|
280
|
+
* `sweepStaleSidecars` (lbug-config.ts) is a test-fixture-gated open-retry
|
|
281
|
+
* fallback that must never delete production files. Neither wipes the live
|
|
282
|
+
* DB the run is about to recreate, so neither needs (or may share) the
|
|
283
|
+
* loud-failure contract here.
|
|
284
|
+
*/
|
|
285
|
+
export declare const wipeLbugDbFiles: (lbugPath: string) => Promise<void>;
|
|
201
286
|
export declare const isLbugReady: () => boolean;
|
|
202
287
|
/**
|
|
203
288
|
* Delete all nodes (and their relationships) for a specific file from LadybugDB
|
|
@@ -208,6 +293,43 @@ export declare const isLbugReady: () => boolean;
|
|
|
208
293
|
export declare const deleteNodesForFile: (filePath: string, dbPath?: string) => Promise<{
|
|
209
294
|
deletedNodes: number;
|
|
210
295
|
}>;
|
|
296
|
+
/**
|
|
297
|
+
* Chunk size for {@link deleteNodesForFiles}. 200 paths keeps each
|
|
298
|
+
* statement ~13KB (well inside parser limits) while a ~700-file write set
|
|
299
|
+
* still collapses from ~13,000 statements to 124: 31 statements per chunk
|
|
300
|
+
* (1 CodeEmbedding join-delete + 30 filePath-bearing node tables — the
|
|
301
|
+
* 32-table NODE_TABLES roster minus Community/Process) × 4 chunks. The
|
|
302
|
+
* original "~40" claim under-counted the per-chunk statement fan-out
|
|
303
|
+
* (tri-review 4669518496 accuracy sweep).
|
|
304
|
+
*/
|
|
305
|
+
export declare const DELETE_FILES_CHUNK_SIZE = 200;
|
|
306
|
+
/**
|
|
307
|
+
* Batched variant of {@link deleteNodesForFile} for the incremental
|
|
308
|
+
* writeback (#2409). One `DETACH DELETE … WHERE n.filePath IN […]` per
|
|
309
|
+
* node table per chunk of paths, instead of a count + delete per table
|
|
310
|
+
* per FILE. The per-file loop issued ~13,000 single-row write
|
|
311
|
+
* transactions on a ~700-file write set — a WAL-append storm that made
|
|
312
|
+
* the incremental path slower than a full rebuild and is the write
|
|
313
|
+
* pattern behind the native mid-writeback deaths reported in #2409.
|
|
314
|
+
*
|
|
315
|
+
* NO general error swallowing: a zero-match chunk is a no-op success by
|
|
316
|
+
* construction (every node table except Community/Process has a filePath
|
|
317
|
+
* column), so anything thrown here is a real engine failure the caller
|
|
318
|
+
* must see — silently skipping was exactly how #2409 hid its root cause.
|
|
319
|
+
* The single tolerated exception (FIX 4) is the missing-embedding-table
|
|
320
|
+
* binder error on the embedding join-delete: a DB created without
|
|
321
|
+
* EMBEDDING_SCHEMA cannot own embedding rows, so skipping that one
|
|
322
|
+
* statement is sound, while failing would brick every incremental run on
|
|
323
|
+
* such a DB until `--force`. Statement count per chunk is unchanged by the
|
|
324
|
+
* multi-label join: 1 embedding join-delete + 30 node-table deletes = 31
|
|
325
|
+
* (the rejected per-label fallback shape would have been 19 + 30 = 49).
|
|
326
|
+
* Singleton-connection only: the analyze writeback owns the write lock,
|
|
327
|
+
* and `queryAndDrain` routes through `withConnLock` for it (the WAL
|
|
328
|
+
* checkpoint driver is live during this).
|
|
329
|
+
*/
|
|
330
|
+
export declare const deleteNodesForFiles: (filePaths: readonly string[], options?: {
|
|
331
|
+
onChunk?: (filesDone: number, filesTotal: number) => void;
|
|
332
|
+
}) => Promise<void>;
|
|
211
333
|
export declare const getEmbeddingTableName: () => string;
|
|
212
334
|
/**
|
|
213
335
|
* Return the distinct repo-relative paths of files that import
|
|
@@ -225,6 +347,30 @@ export declare const getEmbeddingTableName: () => string;
|
|
|
225
347
|
* exports.
|
|
226
348
|
*/
|
|
227
349
|
export declare const queryImporters: (targetFilePath: string) => Promise<string[]>;
|
|
350
|
+
/**
|
|
351
|
+
* Batched variant of {@link queryImporters} for the incremental importer
|
|
352
|
+
* BFS (#2409): distinct importers of ANY of the target paths, one query per
|
|
353
|
+
* chunk per BFS depth instead of one query per frontier FILE (a ~700-file
|
|
354
|
+
* frontier was ~700 sequential round-trips, each taking the connection lock
|
|
355
|
+
* against the live WAL checkpoint driver — ~5.6s of the writeback measured).
|
|
356
|
+
*
|
|
357
|
+
* Same contract as the singular form: reads the pre-pipeline DB state and
|
|
358
|
+
* swallows per-chunk query failures into a smaller result (correctness
|
|
359
|
+
* degrades on that branch — under-expansion means possibly-stale edges —
|
|
360
|
+
* but the DB stays writable and the writeback proceeds). Unlike the singular
|
|
361
|
+
* form the degradation is not silent (tri-review 4669518496 P2-5): every
|
|
362
|
+
* dropped chunk is logged and reported through `options.onChunkFailure`, so
|
|
363
|
+
* the orchestrator can count it into the #2410 crash diagnostics
|
|
364
|
+
* (`incrementalInProgress.droppedImporterChunks`).
|
|
365
|
+
*/
|
|
366
|
+
export declare const queryImportersBatch: (targetFilePaths: readonly string[], options?: {
|
|
367
|
+
/**
|
|
368
|
+
* Invoked once per chunk whose IMPORTS query failed and was dropped from
|
|
369
|
+
* the expansion. Observability only — the degrade-don't-fail contract is
|
|
370
|
+
* unchanged (the result just shrinks by the failed chunk's importers).
|
|
371
|
+
*/
|
|
372
|
+
onChunkFailure?: (chunkIndex: number, chunkSize: number, err: unknown) => void;
|
|
373
|
+
}) => Promise<string[]>;
|
|
228
374
|
/**
|
|
229
375
|
* Drop every Community and Process node (and their MEMBER_OF /
|
|
230
376
|
* STEP_IN_PROCESS edges via DETACH DELETE). Used at the start of an
|
|
@@ -338,6 +484,40 @@ export declare const createFTSIndex: (tableName: string, indexName: string, prop
|
|
|
338
484
|
* failure propagates so the caller can log it.
|
|
339
485
|
*/
|
|
340
486
|
export declare const createVectorIndex: () => Promise<boolean>;
|
|
487
|
+
/**
|
|
488
|
+
* Make DML against {@link EMBEDDING_TABLE_NAME} legal on the writable
|
|
489
|
+
* connection when it can be, and report whether it is.
|
|
490
|
+
*
|
|
491
|
+
* LadybugDB refuses EVERY mutation of a table carrying an HNSW index while
|
|
492
|
+
* the VECTOR extension is not loaded on that connection: `DELETE` fails with
|
|
493
|
+
* "Trying to delete from an index on table CodeEmbedding but its extension is
|
|
494
|
+
* not loaded", `CREATE` with the matching "insert into an index" variant,
|
|
495
|
+
* `DROP TABLE` is refused while the index references it, and `SET` — even on
|
|
496
|
+
* a NON-indexed property — segfaults the process outright. Probed against
|
|
497
|
+
* @ladybugdb/core 0.18.2 (the lockfile-pinned version) and 0.18.0 — every
|
|
498
|
+
* result identical on both (#2623).
|
|
499
|
+
*
|
|
500
|
+
* Dropping the index is NOT an available recovery: `CALL DROP_VECTOR_INDEX`
|
|
501
|
+
* is itself a VECTOR-extension function and resolves to "Catalog exception:
|
|
502
|
+
* function DROP_VECTOR_INDEX is not defined" in exactly the state it would
|
|
503
|
+
* need to rescue. Loading the extension is the only in-place repair, which is
|
|
504
|
+
* why this returns a verdict instead of attempting a fixup.
|
|
505
|
+
*
|
|
506
|
+
* `true` = embedding-row DML is safe: either VECTOR is now loaded, or the
|
|
507
|
+
* table carries no index to trip over. `false` = genuinely blocked (index
|
|
508
|
+
* present, extension unloadable); the analyze orchestrator answers that by
|
|
509
|
+
* escalating to the wipe-and-rebuild write plan instead of failing
|
|
510
|
+
* mid-writeback.
|
|
511
|
+
*
|
|
512
|
+
* Cheap by construction: one local `SHOW_INDEXES` read settles the common
|
|
513
|
+
* "this repo never built an embedding index" case without touching the
|
|
514
|
+
* extension machinery at all, so a VECTOR-less machine is not charged a
|
|
515
|
+
* bounded INSTALL attempt on every incremental analyze. `SHOW_INDEXES` is
|
|
516
|
+
* readable WITHOUT the extension and reports `extension_loaded` per index, so
|
|
517
|
+
* no error-string sniffing is needed; it runs through the unprepared
|
|
518
|
+
* `conn.query()` path like every other `CALL` procedure here (#2114).
|
|
519
|
+
*/
|
|
520
|
+
export declare const ensureEmbeddingRowDmlSafe: () => Promise<boolean>;
|
|
341
521
|
/**
|
|
342
522
|
* Lazy-create an FTS index, caching the fact in-process.
|
|
343
523
|
*
|
|
@@ -373,6 +553,27 @@ export declare const queryFTS: (tableName: string, indexName: string, query: str
|
|
|
373
553
|
[key: string]: any;
|
|
374
554
|
}>>;
|
|
375
555
|
/**
|
|
376
|
-
*
|
|
556
|
+
* True for the two benign "nothing to drop" `DROP_FTS_INDEX` failures —
|
|
557
|
+
* both catalog/binder exceptions, LadybugDB's classes for "this name isn't
|
|
558
|
+
* bound to anything right now" (probe-verified end-to-end through
|
|
559
|
+
* `dropFTSIndex`'s real `conn.query()` path against @ladybugdb/core
|
|
560
|
+
* 0.18.x): the named index was never created (`Binder exception: Table <T>
|
|
561
|
+
* doesn't have an index with name <name>.`), or the FTS extension/function
|
|
562
|
+
* isn't registered at all (`Catalog exception: function DROP_FTS_INDEX is
|
|
563
|
+
* not defined...`). A real engine failure — e.g. the `Runtime exception:
|
|
564
|
+
* FTS index '<name>' is inconsistent: ...` class from #2589 — is a
|
|
565
|
+
* DIFFERENT exception class (an execution-time failure, not a catalog/bind
|
|
566
|
+
* lookup miss), so this returns false for it. Anchored to the START of the
|
|
567
|
+
* message (not a bare substring search): every probed LadybugDB error leads
|
|
568
|
+
* with its exception class, and anchoring means a future message that merely
|
|
569
|
+
* mentions "Binder exception" or "Catalog exception" further in in the body
|
|
570
|
+
* of an otherwise-genuine failure can't be misclassified as benign. Pure
|
|
571
|
+
* string logic so it is unit-testable without a native LadybugDB connection.
|
|
572
|
+
*/
|
|
573
|
+
export declare const isBenignDropFtsIndexError: (message: string) => boolean;
|
|
574
|
+
/**
|
|
575
|
+
* Drop an FTS index. Tolerates only {@link isBenignDropFtsIndexError} —
|
|
576
|
+
* anything else rethrows instead of being silently masked, which previously
|
|
577
|
+
* let a corrupted index persist across analyze runs undetected.
|
|
377
578
|
*/
|
|
378
579
|
export declare const dropFTSIndex: (tableName: string, indexName: string) => Promise<void>;
|