gitnexus 1.6.9 → 1.6.10-aptos.0
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 +211 -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 +197 -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 +10 -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 +5 -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 +28 -0
- package/dist/core/move/consistency.js +98 -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 +49 -0
- package/dist/core/move/move-ingest.js +320 -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 +3 -3
- package/dist/core/run-analyze.js +1001 -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/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
|
@@ -27,8 +27,20 @@ import type { SymbolDefinition } from './symbol-definition.js';
|
|
|
27
27
|
export type ScopeId = string;
|
|
28
28
|
/** Stable symbol-definition identifier (graph nodeId). */
|
|
29
29
|
export type DefId = string;
|
|
30
|
-
/**
|
|
31
|
-
|
|
30
|
+
/**
|
|
31
|
+
* Kinds of lexical scope a `Scope` node can represent.
|
|
32
|
+
*
|
|
33
|
+
* `Object` is a hoist boundary ONLY: an object/record literal body
|
|
34
|
+
* (TS/JS `{...}`, Kotlin anonymous `object {...}`). Members are
|
|
35
|
+
* reachable via property access, never as bare identifiers, so
|
|
36
|
+
* scope-chain walkers (`scope/walkers.ts`) must skip an `Object`
|
|
37
|
+
* scope's own bindings while still traversing past it to the parent
|
|
38
|
+
* (#2545/#2551) -- unlike `Block`, where a nested closure legitimately
|
|
39
|
+
* DOES see a sibling `let`/`const` from an enclosing `if`/`for`/`while`,
|
|
40
|
+
* a nested closure inside an object literal must NOT see a sibling
|
|
41
|
+
* property's name as a free identifier.
|
|
42
|
+
*/
|
|
43
|
+
export type ScopeKind = 'Module' | 'Namespace' | 'Class' | 'Function' | 'Block' | 'Expression' | 'Object';
|
|
32
44
|
/** Source-text range. 1-based `startLine`/`endLine`; 0-based `startCol`/`endCol`. */
|
|
33
45
|
export interface Range {
|
|
34
46
|
readonly startLine: number;
|
|
@@ -85,6 +97,9 @@ export type ParsedImport =
|
|
|
85
97
|
readonly localName: string;
|
|
86
98
|
readonly importedName: string;
|
|
87
99
|
readonly targetRaw: string;
|
|
100
|
+
/** Provider-specific imported symbol category when module and symbol
|
|
101
|
+
* namespaces have distinct resolution rules (for example PHP). */
|
|
102
|
+
readonly importedSymbolKind?: 'type' | 'function' | 'const';
|
|
88
103
|
/**
|
|
89
104
|
* Set by providers when `targetRaw` already names the imported symbol
|
|
90
105
|
* rather than only its containing module. Consumers that compose
|
|
@@ -107,6 +122,8 @@ export type ParsedImport =
|
|
|
107
122
|
readonly alias: string;
|
|
108
123
|
readonly targetRaw: string;
|
|
109
124
|
/** See the same field on the `named` variant. */
|
|
125
|
+
readonly importedSymbolKind?: 'type' | 'function' | 'const';
|
|
126
|
+
/** See the same field on the `named` variant. */
|
|
110
127
|
readonly targetIncludesImportedName?: boolean;
|
|
111
128
|
}
|
|
112
129
|
/**
|
|
@@ -372,7 +389,7 @@ export interface Reference {
|
|
|
372
389
|
readonly toDef: DefId;
|
|
373
390
|
/** Location of the reference in source. */
|
|
374
391
|
readonly atRange: Range;
|
|
375
|
-
readonly kind: 'call' | 'read' | 'write' | 'type-reference' | 'inherits' | 'import-use' | 'macro';
|
|
392
|
+
readonly kind: 'call' | 'read' | 'write' | 'type-reference' | 'inherits' | 'import-use' | 'value-ref' | 'macro';
|
|
376
393
|
readonly confidence: number;
|
|
377
394
|
readonly evidence: readonly ResolutionEvidence[];
|
|
378
395
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/scope-resolution/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAI/D,4FAA4F;AAC5F,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC;AAE7B,0DAA0D;AAC1D,MAAM,MAAM,KAAK,GAAG,MAAM,CAAC;AAE3B
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/scope-resolution/types.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/ai-context.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* AI Context Generator
|
|
3
3
|
*
|
|
4
4
|
* Creates AGENTS.md and CLAUDE.md with full inline GitNexus context.
|
|
5
|
-
* AGENTS.md is the standard read by Cursor, Windsurf, OpenCode, Codex, Cline, etc.
|
|
5
|
+
* AGENTS.md is the standard read by Cursor, Windsurf, OpenCode, Codex, Cline, CodeBuddy, Qoder, etc.
|
|
6
6
|
* CLAUDE.md is for Claude Code which only reads that file.
|
|
7
7
|
*/
|
|
8
8
|
import { type GeneratedSkillInfo } from './skill-gen.js';
|
package/dist/cli/ai-context.js
CHANGED
|
@@ -2,12 +2,13 @@
|
|
|
2
2
|
* AI Context Generator
|
|
3
3
|
*
|
|
4
4
|
* Creates AGENTS.md and CLAUDE.md with full inline GitNexus context.
|
|
5
|
-
* AGENTS.md is the standard read by Cursor, Windsurf, OpenCode, Codex, Cline, etc.
|
|
5
|
+
* AGENTS.md is the standard read by Cursor, Windsurf, OpenCode, Codex, Cline, CodeBuddy, Qoder, etc.
|
|
6
6
|
* CLAUDE.md is for Claude Code which only reads that file.
|
|
7
7
|
*/
|
|
8
8
|
import fs from 'fs/promises';
|
|
9
9
|
import path from 'path';
|
|
10
10
|
import { fileURLToPath } from 'url';
|
|
11
|
+
import { STANDARD_SKILL_CATALOG } from './standard-skills.js';
|
|
11
12
|
import { logger } from '../core/logger.js';
|
|
12
13
|
// ESM equivalent of __dirname
|
|
13
14
|
const __filename = fileURLToPath(import.meta.url);
|
|
@@ -81,22 +82,19 @@ export function generateGitNexusContent(projectName, stats, opts = {}) {
|
|
|
81
82
|
const { generatedSkills, groupNames, noStats, skipSkills, runnerPath = '.gitnexus/run.cjs', defaultBranch = 'main', hasPdg = false, } = opts;
|
|
82
83
|
const generatedRows = generatedSkills && generatedSkills.length > 0
|
|
83
84
|
? generatedSkills
|
|
84
|
-
.map((s) => `| Work in the ${s.label} area (${s.symbolCount} symbols) | \`.claude/skills
|
|
85
|
+
.map((s) => `| Work in the ${s.label} area (${s.symbolCount} symbols) | \`.claude/skills/${s.name}/SKILL.md\` |`)
|
|
85
86
|
.join('\n')
|
|
86
87
|
: '';
|
|
87
88
|
// Standard skill rows reference files installed by installSkills(). When
|
|
88
89
|
// --skip-skills suppresses that install, these rows must be omitted — else
|
|
89
90
|
// AGENTS.md/CLAUDE.md would direct agents to read files that don't exist.
|
|
90
|
-
// Community skills (generatedRows) live
|
|
91
|
+
// Community skills (generatedRows) live directly under .claude/skills/ and
|
|
91
92
|
// are independent of --skip-skills, so they remain when present.
|
|
92
93
|
const standardSkillsRows = skipSkills
|
|
93
94
|
? ''
|
|
94
|
-
:
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
| Rename / extract / split / refactor | \`.claude/skills/gitnexus/gitnexus-refactoring/SKILL.md\` |
|
|
98
|
-
| Tools, resources, schema reference | \`.claude/skills/gitnexus/gitnexus-guide/SKILL.md\` |
|
|
99
|
-
| Index, status, clean, wiki CLI commands | \`.claude/skills/gitnexus/gitnexus-cli/SKILL.md\` |`;
|
|
95
|
+
: STANDARD_SKILL_CATALOG.filter((skill) => skill.distributions.project)
|
|
96
|
+
.map((skill) => `| ${skill.agentTableTask} | \`.claude/skills/${skill.name}/SKILL.md\` |`)
|
|
97
|
+
.join('\n');
|
|
100
98
|
const tableBody = [standardSkillsRows, generatedRows].filter(Boolean).join('\n');
|
|
101
99
|
const skillsTable = tableBody
|
|
102
100
|
? `| Task | Read this skill file |
|
|
@@ -253,40 +251,14 @@ async function upsertGitNexusSection(filePath, content, projectName, stats, noSt
|
|
|
253
251
|
return 'appended';
|
|
254
252
|
}
|
|
255
253
|
/**
|
|
256
|
-
* Install GitNexus skills
|
|
254
|
+
* Install GitNexus skills as direct children of .claude/skills/
|
|
257
255
|
* Works natively with Claude Code, Cursor, and GitHub Copilot
|
|
258
256
|
*/
|
|
259
257
|
async function installSkills(repoPath) {
|
|
260
|
-
const skillsDir = path.join(repoPath, '.claude', 'skills'
|
|
258
|
+
const skillsDir = path.join(repoPath, '.claude', 'skills');
|
|
259
|
+
const legacySkillsDir = path.join(skillsDir, 'gitnexus');
|
|
261
260
|
const installedSkills = [];
|
|
262
|
-
|
|
263
|
-
const skills = [
|
|
264
|
-
{
|
|
265
|
-
name: 'gitnexus-exploring',
|
|
266
|
-
description: 'Use when the user asks how code works, wants to understand architecture, trace execution flows, or explore unfamiliar parts of the codebase. Examples: "How does X work?", "What calls this function?", "Show me the auth flow"',
|
|
267
|
-
},
|
|
268
|
-
{
|
|
269
|
-
name: 'gitnexus-debugging',
|
|
270
|
-
description: 'Use when the user is debugging a bug, tracing an error, or asking why something fails. Examples: "Why is X failing?", "Where does this error come from?", "Trace this bug"',
|
|
271
|
-
},
|
|
272
|
-
{
|
|
273
|
-
name: 'gitnexus-impact-analysis',
|
|
274
|
-
description: 'Use when the user wants to know what will break if they change something, or needs safety analysis before editing code. Examples: "Is it safe to change X?", "What depends on this?", "What will break?"',
|
|
275
|
-
},
|
|
276
|
-
{
|
|
277
|
-
name: 'gitnexus-refactoring',
|
|
278
|
-
description: 'Use when the user wants to rename, extract, split, move, or restructure code safely. Examples: "Rename this function", "Extract this into a module", "Refactor this class", "Move this to a separate file"',
|
|
279
|
-
},
|
|
280
|
-
{
|
|
281
|
-
name: 'gitnexus-guide',
|
|
282
|
-
description: 'Use when the user asks about GitNexus itself — available tools, how to query the knowledge graph, MCP resources, graph schema, or workflow reference. Examples: "What GitNexus tools are available?", "How do I use GitNexus?"',
|
|
283
|
-
},
|
|
284
|
-
{
|
|
285
|
-
name: 'gitnexus-cli',
|
|
286
|
-
description: 'Use when the user needs to run GitNexus CLI commands like analyze/index a repo, check status, clean the index, generate a wiki, or list indexed repos. Examples: "Index this repo", "Reanalyze the codebase", "Generate a wiki"',
|
|
287
|
-
},
|
|
288
|
-
];
|
|
289
|
-
for (const skill of skills) {
|
|
261
|
+
for (const skill of STANDARD_SKILL_CATALOG.filter((entry) => entry.distributions.project && entry.distributions.npm)) {
|
|
290
262
|
const skillDir = path.join(skillsDir, skill.name);
|
|
291
263
|
const skillPath = path.join(skillDir, 'SKILL.md');
|
|
292
264
|
try {
|
|
@@ -302,18 +274,27 @@ async function installSkills(repoPath) {
|
|
|
302
274
|
// Fallback: generate minimal skill content
|
|
303
275
|
skillContent = `---
|
|
304
276
|
name: ${skill.name}
|
|
305
|
-
description: ${skill.
|
|
277
|
+
description: ${skill.fallbackDescription}
|
|
306
278
|
---
|
|
307
279
|
|
|
308
280
|
# ${skill.name.charAt(0).toUpperCase() + skill.name.slice(1)}
|
|
309
281
|
|
|
310
|
-
${skill.
|
|
282
|
+
${skill.fallbackDescription}
|
|
311
283
|
|
|
312
284
|
Use GitNexus tools to accomplish this task.
|
|
313
285
|
`;
|
|
314
286
|
}
|
|
315
287
|
await fs.writeFile(skillPath, skillContent, 'utf-8');
|
|
316
288
|
installedSkills.push(skill.name);
|
|
289
|
+
// Previous releases installed these known standard skills one level too
|
|
290
|
+
// deep. Remove only the child owned by this installer; unknown siblings
|
|
291
|
+
// under the legacy grouping directory may be user-authored and survive.
|
|
292
|
+
try {
|
|
293
|
+
await fs.rm(path.join(legacySkillsDir, skill.name), { recursive: true, force: true });
|
|
294
|
+
}
|
|
295
|
+
catch (err) {
|
|
296
|
+
logger.warn({ err }, `Warning: Could not remove legacy skill ${skill.name}:`);
|
|
297
|
+
}
|
|
317
298
|
}
|
|
318
299
|
catch (err) {
|
|
319
300
|
// Skip on error, don't fail the whole process
|
|
@@ -366,15 +347,15 @@ export async function generateAIContextFiles(repoPath, storagePath, projectName,
|
|
|
366
347
|
createdFiles.push('AGENTS.md (skipped via --skip-agents-md)');
|
|
367
348
|
createdFiles.push('CLAUDE.md (skipped via --skip-agents-md)');
|
|
368
349
|
}
|
|
369
|
-
// Install skills
|
|
350
|
+
// Install standard skills directly under .claude/skills/ (unless --skip-skills)
|
|
370
351
|
if (!options?.skipSkills) {
|
|
371
352
|
const installedSkills = await installSkills(repoPath);
|
|
372
353
|
if (installedSkills.length > 0) {
|
|
373
|
-
createdFiles.push(`.claude/skills/gitnexus
|
|
354
|
+
createdFiles.push(`.claude/skills/gitnexus-*/ (${installedSkills.length} skills)`);
|
|
374
355
|
}
|
|
375
356
|
}
|
|
376
357
|
else {
|
|
377
|
-
createdFiles.push('.claude/skills/gitnexus
|
|
358
|
+
createdFiles.push('.claude/skills/gitnexus-*/ (skipped via --skip-skills)');
|
|
378
359
|
}
|
|
379
360
|
return { files: createdFiles };
|
|
380
361
|
}
|
package/dist/cli/analyze.d.ts
CHANGED
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
* This CLI wrapper handles: heap management, progress bar, SIGINT,
|
|
8
8
|
* skill generation (--skills), summary output, and process.exit().
|
|
9
9
|
*/
|
|
10
|
+
import { type AnalyzerRunnerIdentity } from '../storage/repo-manager.js';
|
|
10
11
|
/**
|
|
11
12
|
* RAM-aware re-exec heap cap (MB): `0.75 × effective RAM`, clamped to
|
|
12
13
|
* `>= DEFAULT_HEAP_MB`. Kept BELOW physical RAM on purpose — a cap `>=` RAM makes
|
|
@@ -55,7 +56,7 @@ export interface AnalyzeOptions {
|
|
|
55
56
|
* default-on case.
|
|
56
57
|
*/
|
|
57
58
|
stats?: boolean;
|
|
58
|
-
/** Skip installing standard GitNexus skill files
|
|
59
|
+
/** Skip installing standard GitNexus skill files directly under .claude/skills/. */
|
|
59
60
|
skipSkills?: boolean;
|
|
60
61
|
/**
|
|
61
62
|
* Default branch for the generated regression-compare example (#243). From
|
|
@@ -138,4 +139,6 @@ export interface AnalyzeOptions {
|
|
|
138
139
|
* without booting the full analyze pipeline (#742 review).
|
|
139
140
|
*/
|
|
140
141
|
export declare const shouldGenerateCommunitySkillFiles: (options: Pick<AnalyzeOptions, "skills" | "indexOnly"> | undefined, pipelineResult: unknown) => boolean;
|
|
141
|
-
export declare const analyzeCommand: (inputPath?: string, options?: AnalyzeOptions) => Promise<void>;
|
|
142
|
+
export declare const analyzeCommand: (inputPath?: string, options?: AnalyzeOptions, runnerIdentityAtBootstrap?: AnalyzerRunnerIdentity) => Promise<void>;
|
|
143
|
+
/** Commander entrypoint used only by the capture-before-import lazy bootstrap. */
|
|
144
|
+
export declare const analyzeCommandWithRunnerIdentity: (runnerIdentityAtBootstrap: AnalyzerRunnerIdentity, inputPath?: string, options?: AnalyzeOptions) => Promise<void>;
|
package/dist/cli/analyze.js
CHANGED
|
@@ -12,13 +12,14 @@ import os from 'os';
|
|
|
12
12
|
import { spawn } from 'child_process';
|
|
13
13
|
import v8 from 'v8';
|
|
14
14
|
import cliProgress from 'cli-progress';
|
|
15
|
-
import { isLbugReady } from '../core/lbug/lbug-adapter.js';
|
|
15
|
+
import { isLbugReady, LbugWipeError } from '../core/lbug/lbug-adapter.js';
|
|
16
16
|
import { boundedCheckpointBeforeExit } from '../core/lbug/shutdown-helpers.js';
|
|
17
|
-
import { isLbugCheckpointIoError, isWalCorruptionError, parseWalCheckpointThreshold, WAL_RECOVERY_SUGGESTION, } from '../core/lbug/lbug-config.js';
|
|
17
|
+
import { getOsPageSize, isLbugCheckpointIoError, isLbugCheckpointBusyError, isLbugPageSizeFrameError, isPageSizeAwareLadybug, isWalCorruptionError, parseWalCheckpointThreshold, WAL_RECOVERY_SUGGESTION, } from '../core/lbug/lbug-config.js';
|
|
18
18
|
import { getStoragePaths, getGlobalRegistryPath, RegistryNameCollisionError, AnalysisNotFinalizedError, assertAnalysisFinalized, } from '../storage/repo-manager.js';
|
|
19
19
|
import { getGitRoot, hasGitDir, getDefaultBranch } from '../storage/git.js';
|
|
20
20
|
import { loadAnalyzeConfig, mergeAnalyzeOptions, resolveDefaultBranch, validateBranchName, GitNexusRcError, } from './analyze-config.js';
|
|
21
21
|
import { runFullAnalysis } from '../core/run-analyze.js';
|
|
22
|
+
import { getRuntimeFingerprint } from '../core/platform/capabilities.js';
|
|
22
23
|
import { getMaxFileSizeBannerMessage } from '../core/ingestion/utils/max-file-size.js';
|
|
23
24
|
import { warnMissingOptionalGrammars, getOptionalGrammarExtensions } from './optional-grammars.js';
|
|
24
25
|
import { glob } from 'glob';
|
|
@@ -27,8 +28,9 @@ import { cliError } from './cli-message.js';
|
|
|
27
28
|
import { EMBEDDING_DIMS_ERROR, normalizeEmbeddingDims } from './embedding-dims.js';
|
|
28
29
|
import { formatElapsed } from './format-elapsed.js';
|
|
29
30
|
import { isHfDownloadFailure } from '../core/embeddings/hf-env.js';
|
|
30
|
-
import { safeUrl } from '../core/embeddings/http-client.js';
|
|
31
|
-
import { isLocalEmbeddingRuntimeBlockerMessage } from '../core/embeddings/runtime-support.js';
|
|
31
|
+
import { isHttpEmbeddingDimsError, isHttpEmbeddingError, isHttpMode, safeUrl, } from '../core/embeddings/http-client.js';
|
|
32
|
+
import { isLocalEmbeddingRuntimeBlockerMessage, isMissingLocalEmbeddingStackMessage, localEmbeddingPrefixUnloadableMessage, localEmbeddingStackMissingMessage, } from '../core/embeddings/runtime-support.js';
|
|
33
|
+
import { ANALYZE_EMBEDDING_INSTALL_TIMEOUT_MS, getEmbeddingInstallTimeoutMs, getEmbeddingRuntimeDir, installEmbeddingRuntime, isPrefixRuntimeLoadable, resolveEmbeddingRuntime, } from '../core/embeddings/runtime-install.js';
|
|
32
34
|
import { warnIfNpm11NpxRisk } from './resolve-invocation.js';
|
|
33
35
|
// Capture stderr.write at module load BEFORE anything (LadybugDB native
|
|
34
36
|
// init, progress bar, console redirection) can monkey-patch it. The
|
|
@@ -39,6 +41,16 @@ import { warnIfNpm11NpxRisk } from './resolve-invocation.js';
|
|
|
39
41
|
const realStderrWrite = process.stderr.write.bind(process.stderr);
|
|
40
42
|
const realStdoutWrite = process.stdout.write.bind(process.stdout);
|
|
41
43
|
const writeFatalToStderr = (label, err) => {
|
|
44
|
+
// Walk to the innermost error tagged `userActionable` (set on errors whose
|
|
45
|
+
// remediation is an operator action — missing/old external tool, stale
|
|
46
|
+
// config). Render those as a single line; stack/cause are noise for them.
|
|
47
|
+
for (let cur = err, depth = 0; cur instanceof Error && depth < 5; depth++) {
|
|
48
|
+
if (cur.userActionable) {
|
|
49
|
+
realStderrWrite(`\n ${label}: ${cur.message}\n`);
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
cur = cur.cause;
|
|
53
|
+
}
|
|
42
54
|
const isErr = err instanceof Error;
|
|
43
55
|
const message = isErr ? err.message : String(err);
|
|
44
56
|
realStderrWrite(`\n ${label}: ${message}\n`);
|
|
@@ -483,7 +495,7 @@ const restoreAnalyzeEnv = (snap) => {
|
|
|
483
495
|
* without booting the full analyze pipeline (#742 review).
|
|
484
496
|
*/
|
|
485
497
|
export const shouldGenerateCommunitySkillFiles = (options, pipelineResult) => Boolean(options?.skills && pipelineResult && !options?.indexOnly);
|
|
486
|
-
export const analyzeCommand = async (inputPath, options) => {
|
|
498
|
+
export const analyzeCommand = async (inputPath, options, runnerIdentityAtBootstrap) => {
|
|
487
499
|
if (await ensureHeap())
|
|
488
500
|
return;
|
|
489
501
|
forceHeapOOMForTestIfEnabled();
|
|
@@ -504,7 +516,7 @@ export const analyzeCommand = async (inputPath, options) => {
|
|
|
504
516
|
// pre-call values.
|
|
505
517
|
const envSnap = snapshotAnalyzeEnv();
|
|
506
518
|
try {
|
|
507
|
-
await analyzeCommandImpl(inputPath, options);
|
|
519
|
+
await analyzeCommandImpl(inputPath, options, runnerIdentityAtBootstrap);
|
|
508
520
|
}
|
|
509
521
|
finally {
|
|
510
522
|
restoreAnalyzeEnv(envSnap);
|
|
@@ -521,7 +533,9 @@ export const analyzeCommand = async (inputPath, options) => {
|
|
|
521
533
|
process.exit(typeof process.exitCode === 'number' ? process.exitCode : 1);
|
|
522
534
|
}
|
|
523
535
|
};
|
|
524
|
-
|
|
536
|
+
/** Commander entrypoint used only by the capture-before-import lazy bootstrap. */
|
|
537
|
+
export const analyzeCommandWithRunnerIdentity = async (runnerIdentityAtBootstrap, inputPath, options) => analyzeCommand(inputPath, options, runnerIdentityAtBootstrap);
|
|
538
|
+
const analyzeCommandImpl = async (inputPath, cliOptions, runnerIdentityAtBootstrap) => {
|
|
525
539
|
console.log('\n GitNexus Analyzer\n');
|
|
526
540
|
// ── Resolve the target repo root ──────────────────────────────────
|
|
527
541
|
// Resolved FIRST because `.gitnexusrc` is read from the repo root (not the
|
|
@@ -797,6 +811,52 @@ const analyzeCommandImpl = async (inputPath, cliOptions) => {
|
|
|
797
811
|
console.log(' Note: custom HTTP embeddings require BOTH --embedding-base-url and --embedding-model ' +
|
|
798
812
|
'(or the matching env vars). Falling back to local ONNX embeddings.\n');
|
|
799
813
|
}
|
|
814
|
+
// On-demand embedding runtime (#2370): when the optional stack was pruned at
|
|
815
|
+
// install time (proxy-blocked NuGet download in onnxruntime-node's
|
|
816
|
+
// postinstall), heal it here instead of failing later in the pipeline. The
|
|
817
|
+
// install goes through the user's npm registry config (mirrors/proxies
|
|
818
|
+
// apply) with --ignore-scripts, so no NuGet download is attempted. Runs
|
|
819
|
+
// before bar.start() like the sibling validations above.
|
|
820
|
+
if (embeddingsEnabled && !isHttpMode()) {
|
|
821
|
+
const resolved = resolveEmbeddingRuntime();
|
|
822
|
+
// Resolved-but-unloadable (a populated prefix on a Node with no
|
|
823
|
+
// module.registerHooks), or nothing installed on such a Node: fail fast with
|
|
824
|
+
// capability guidance instead of dying mid-pipeline over an unusable prefix
|
|
825
|
+
// or downloading a runtime the loader can't reach. A package-sourced stack
|
|
826
|
+
// never needs the hook, so it is excluded. --embeddings was explicitly
|
|
827
|
+
// requested and this failure is deterministic, so fail fast rather than
|
|
828
|
+
// silently degrading to BM25 (distinct from a transient install timeout).
|
|
829
|
+
if (!isPrefixRuntimeLoadable() && (resolved === null || resolved.source === 'runtime-prefix')) {
|
|
830
|
+
cliError(` ${localEmbeddingPrefixUnloadableMessage().replace(/\n/g, '\n ')}\n`, {
|
|
831
|
+
recoveryHint: 'local-embedding-stack-missing',
|
|
832
|
+
});
|
|
833
|
+
process.exitCode = 1;
|
|
834
|
+
return;
|
|
835
|
+
}
|
|
836
|
+
// On-demand embedding runtime (#2370): when the optional stack was pruned at
|
|
837
|
+
// install time (proxy-blocked NuGet download in onnxruntime-node's
|
|
838
|
+
// postinstall), heal it here instead of failing later in the pipeline. The
|
|
839
|
+
// install goes through the user's npm registry config (mirrors/proxies
|
|
840
|
+
// apply) with --ignore-scripts, so no NuGet download is attempted.
|
|
841
|
+
if (resolved === null) {
|
|
842
|
+
console.log(` Local embedding runtime is not installed (optional packages were skipped at install time).\n` +
|
|
843
|
+
` Downloading it now from your npm registry into ${getEmbeddingRuntimeDir()} …\n` +
|
|
844
|
+
` (one-time; rerun manually anytime with \`gitnexus embeddings install\`)\n`);
|
|
845
|
+
try {
|
|
846
|
+
// Short deadline (env override still wins): analyze is interactive, so a
|
|
847
|
+
// blackholed proxy must not stall the whole index run for the 10-minute
|
|
848
|
+
// default — fail over to the guidance below instead.
|
|
849
|
+
await installEmbeddingRuntime({}, getEmbeddingInstallTimeoutMs(ANALYZE_EMBEDDING_INSTALL_TIMEOUT_MS));
|
|
850
|
+
console.log(' Embedding runtime installed.\n');
|
|
851
|
+
}
|
|
852
|
+
catch (err) {
|
|
853
|
+
cliError(` Could not install the embedding runtime: ${err instanceof Error ? err.message : String(err)}\n\n` +
|
|
854
|
+
` ${localEmbeddingStackMissingMessage().replace(/\n/g, '\n ')}\n`, { recoveryHint: 'local-embedding-stack-missing' });
|
|
855
|
+
process.exitCode = 1;
|
|
856
|
+
return;
|
|
857
|
+
}
|
|
858
|
+
}
|
|
859
|
+
}
|
|
800
860
|
if (options.repairFts && options.force) {
|
|
801
861
|
cliError(' Cannot combine `--repair-fts` with `--force`. ' +
|
|
802
862
|
'Use `--repair-fts` for fast FTS-only repair, or `--force` for a full rebuild.\n');
|
|
@@ -940,7 +1000,7 @@ const analyzeCommandImpl = async (inputPath, cliOptions) => {
|
|
|
940
1000
|
const skipAll = options.indexOnly;
|
|
941
1001
|
const skipAgentsMd = skipAll || options.skipAgentsMd;
|
|
942
1002
|
const skipSkills = skipAll || options.skipSkills;
|
|
943
|
-
const
|
|
1003
|
+
const runOptions = {
|
|
944
1004
|
// Pipeline re-index — OR'd with --skills because skill generation
|
|
945
1005
|
// needs a fresh pipelineResult. Has no bearing on the registry
|
|
946
1006
|
// collision guard (see allowDuplicateName below).
|
|
@@ -987,12 +1047,17 @@ const analyzeCommandImpl = async (inputPath, cliOptions) => {
|
|
|
987
1047
|
// in LadybugDB's ClientContext destructor after --pdg writes (#2264). The
|
|
988
1048
|
// CHECKPOINT keeps the index durable; process exit reclaims the handles.
|
|
989
1049
|
skipNativeCloseOnExit: true,
|
|
990
|
-
}
|
|
1050
|
+
};
|
|
1051
|
+
const runCallbacks = {
|
|
991
1052
|
onProgress: (_phase, percent, message) => {
|
|
992
1053
|
updateBar(percent, message);
|
|
993
1054
|
},
|
|
994
1055
|
onLog: barLog,
|
|
995
|
-
}
|
|
1056
|
+
};
|
|
1057
|
+
const bootstrapArgs = runnerIdentityAtBootstrap
|
|
1058
|
+
? [runnerIdentityAtBootstrap]
|
|
1059
|
+
: [];
|
|
1060
|
+
const result = await runFullAnalysis(repoPath, runOptions, runCallbacks, ...bootstrapArgs);
|
|
996
1061
|
if (result.alreadyUpToDate) {
|
|
997
1062
|
// Even the fast path must prove the repo is discoverable. A prior
|
|
998
1063
|
// run can write meta.json and then fail before registerRepo(); in
|
|
@@ -1181,7 +1246,15 @@ const analyzeCommandImpl = async (inputPath, cliOptions) => {
|
|
|
1181
1246
|
return;
|
|
1182
1247
|
}
|
|
1183
1248
|
if (isLbugCheckpointIoError(err)) {
|
|
1249
|
+
// #2599: when the checkpoint IO error also looks busy/locked, another
|
|
1250
|
+
// handle holds the store open — name that actionable cause alongside the
|
|
1251
|
+
// threshold hint (the original error is preserved so the hint still fires).
|
|
1252
|
+
const heldOpen = isLbugCheckpointBusyError(err)
|
|
1253
|
+
? ` Another process may hold the store open (a running \`gitnexus mcp\` server, or a\n` +
|
|
1254
|
+
` stale reader) — close other GitNexus processes on this repo, then retry.\n`
|
|
1255
|
+
: '';
|
|
1184
1256
|
cliError(` LadybugDB failed while rotating/removing WAL checkpoint files.\n` +
|
|
1257
|
+
heldOpen +
|
|
1185
1258
|
` This can happen when auto-checkpoint runs at the default threshold (~16MB).\n` +
|
|
1186
1259
|
` Retry with a larger checkpoint threshold to reduce checkpoint frequency:\n` +
|
|
1187
1260
|
` gitnexus analyze --wal-checkpoint-threshold ${RECOMMENDED_WAL_CHECKPOINT_THRESHOLD}\n` +
|
|
@@ -1190,6 +1263,63 @@ const analyzeCommandImpl = async (inputPath, cliOptions) => {
|
|
|
1190
1263
|
process.exitCode = 1;
|
|
1191
1264
|
return;
|
|
1192
1265
|
}
|
|
1266
|
+
// DB-family wipe failure (#2409, tri-review 4669518496 P2-4): the rebuild
|
|
1267
|
+
// could not verify the LadybugDB file family was removed — usually another
|
|
1268
|
+
// process (MCP server, serve worker, antivirus) holding the index open.
|
|
1269
|
+
// Keyed on the error *type* (repo norm from #2385), never message text.
|
|
1270
|
+
// The message itself is fully self-contained (survivor paths + stop-MCP /
|
|
1271
|
+
// AV-exclusion / re-run guidance) because the serve worker forwards only
|
|
1272
|
+
// `err.message` over IPC — this branch just renders it without the
|
|
1273
|
+
// raw-stack fallback below.
|
|
1274
|
+
if (err instanceof LbugWipeError) {
|
|
1275
|
+
cliError(` ${msg.replace(/\n/g, '\n ')}\n`, {
|
|
1276
|
+
recoveryHint: 'lbug-wipe-failed',
|
|
1277
|
+
});
|
|
1278
|
+
process.exitCode = 1;
|
|
1279
|
+
return;
|
|
1280
|
+
}
|
|
1281
|
+
// Buffer-manager frame-release failure on non-4K-page kernels (#1231).
|
|
1282
|
+
// LadybugDB <= 0.17.x assumed 4 KiB OS pages when releasing evicted
|
|
1283
|
+
// frames; Raspberry Pi 5 (16 KiB kernel pages) and other arm64 systems
|
|
1284
|
+
// crash mid-COPY with a raw native message. 0.18.0 detects the page size
|
|
1285
|
+
// at runtime, so the actionable fix depends on which side of that
|
|
1286
|
+
// boundary the installed @ladybugdb/core is.
|
|
1287
|
+
if (isLbugPageSizeFrameError(err)) {
|
|
1288
|
+
const pageSize = getOsPageSize();
|
|
1289
|
+
const ladybug = getRuntimeFingerprint().ladybugdb;
|
|
1290
|
+
const pageLine = pageSize !== undefined && pageSize !== 4096
|
|
1291
|
+
? ` Detected OS page size: ${pageSize} bytes (non-4K — e.g. Raspberry Pi 5 16K kernel, Asahi Linux).\n`
|
|
1292
|
+
: '';
|
|
1293
|
+
// The upgrade variant must not assert version facts about an unknown
|
|
1294
|
+
// version — mirror the doctor-side wording rule (#2424 review R2).
|
|
1295
|
+
const upgradeIntro = ladybug === undefined
|
|
1296
|
+
? ` The installed @ladybugdb/core version is unknown — it may predate the\n` +
|
|
1297
|
+
` runtime OS-page-size detection added in 0.18.0.\n`
|
|
1298
|
+
: ` The installed @ladybugdb/core (${ladybug}) assumes 4 KiB pages in its buffer\n` +
|
|
1299
|
+
` manager.\n`;
|
|
1300
|
+
const guidance = isPageSizeAwareLadybug(ladybug)
|
|
1301
|
+
? ` The installed @ladybugdb/core (${ladybug}) already detects the OS page size at runtime,\n` +
|
|
1302
|
+
` so this configuration was expected to work. Please report it:\n` +
|
|
1303
|
+
` https://github.com/abhigyanpatwari/GitNexus/issues/1231\n` +
|
|
1304
|
+
` and include: gitnexus --version, node --version, getconf PAGE_SIZE, uname -a,\n` +
|
|
1305
|
+
` and the full error message above.\n`
|
|
1306
|
+
: upgradeIntro +
|
|
1307
|
+
` Upgrade GitNexus to a release that bundles @ladybugdb/core >= 0.18.0\n` +
|
|
1308
|
+
` (gitnexus >= 1.6.9), which detects the OS page size at runtime:\n` +
|
|
1309
|
+
` npm install -g gitnexus@latest\n` +
|
|
1310
|
+
` Last-resort workaround on Raspberry Pi 5: boot the 4 KiB-page kernel\n` +
|
|
1311
|
+
` (config.txt: kernel=kernel8.img), at the cost of Pi 5 optimizations.\n`;
|
|
1312
|
+
// Embed the raw native text (indented, no stack) so "the full error
|
|
1313
|
+
// message above" is fulfillable — same idiom as the LbugWipeError
|
|
1314
|
+
// branch. The errno suffix and the 0.18.0 guard's frame/granule numbers
|
|
1315
|
+
// are the discriminating triage content (#2424 review P2).
|
|
1316
|
+
cliError(` LadybugDB's buffer manager failed to release frame memory.\n` +
|
|
1317
|
+
` ${msg.replace(/\n/g, '\n ')}\n` +
|
|
1318
|
+
pageLine +
|
|
1319
|
+
guidance, { recoveryHint: 'lbug-page-size', pageSize, ladybugVersion: ladybug });
|
|
1320
|
+
process.exitCode = 1;
|
|
1321
|
+
return;
|
|
1322
|
+
}
|
|
1193
1323
|
// Local embedding runtime unsupported on this platform (macOS Intel ships no
|
|
1194
1324
|
// darwin/x64 ONNX native binding, #1515). The guard threw before importing
|
|
1195
1325
|
// transformers.js, so this is a clean, actionable GitNexus message. Checked
|
|
@@ -1203,10 +1333,66 @@ const analyzeCommandImpl = async (inputPath, cliOptions) => {
|
|
|
1203
1333
|
process.exitCode = 1;
|
|
1204
1334
|
return;
|
|
1205
1335
|
}
|
|
1336
|
+
// The optional embedding stack (@huggingface/transformers → onnxruntime-node)
|
|
1337
|
+
// was pruned at install time — usually a proxy-blocked NuGet download during
|
|
1338
|
+
// onnxruntime-node's postinstall (#2370). Checked before the generic
|
|
1339
|
+
// module-not-found "installation may be corrupt" hint below, which would
|
|
1340
|
+
// otherwise misdiagnose a deliberate optional-dependency skip.
|
|
1341
|
+
if (isMissingLocalEmbeddingStackMessage(msg)) {
|
|
1342
|
+
cliError(` ${msg.replace(/\n/g, '\n ')}\n`, {
|
|
1343
|
+
recoveryHint: 'local-embedding-stack-missing',
|
|
1344
|
+
});
|
|
1345
|
+
process.exitCode = 1;
|
|
1346
|
+
return;
|
|
1347
|
+
}
|
|
1348
|
+
// Malformed GITNEXUS_EMBEDDING_DIMS env var (#2385). readConfig() throws a
|
|
1349
|
+
// plain Error (a config mistake, not an endpoint failure), surfacing here from
|
|
1350
|
+
// httpEmbed()->readConfig() inside the analysis run. Show a clean config
|
|
1351
|
+
// message rather than a raw stack dump. The --embedding-dims CLI flag is
|
|
1352
|
+
// validated up front (EMBEDDING_DIMS_ERROR); this covers the env-var path.
|
|
1353
|
+
// Checked before the endpoint/HF branches: it is a plain Error, so
|
|
1354
|
+
// isHttpEmbeddingError() is false and the HF network heuristic must not claim it.
|
|
1355
|
+
if (isHttpEmbeddingDimsError(msg)) {
|
|
1356
|
+
cliError(` ${msg.replace(/\n/g, '\n ')}\n`, {
|
|
1357
|
+
recoveryHint: 'embedding-dims-invalid',
|
|
1358
|
+
});
|
|
1359
|
+
process.exitCode = 1;
|
|
1360
|
+
return;
|
|
1361
|
+
}
|
|
1362
|
+
// Custom HTTP embedding endpoint failure (#2385). When a `--embedding-base-url`
|
|
1363
|
+
// is configured, HTTP mode never downloads a model — so a failure talking to
|
|
1364
|
+
// that endpoint must NOT show the huggingface-download guidance. Keyed on the
|
|
1365
|
+
// error *type* (HttpEmbeddingError), not its message text, so it stays correct
|
|
1366
|
+
// regardless of locale or wording. Checked before the HF branch, whose network
|
|
1367
|
+
// heuristic (`fetch failed` / `ECONNREFUSED`) would otherwise also match a
|
|
1368
|
+
// wrapped endpoint-connection error. The header is deliberately neutral: this
|
|
1369
|
+
// type covers both never-reached failures (connection/timeout/DNS) and
|
|
1370
|
+
// reached-but-failed ones (4xx/5xx, dimension/shape mismatch), so it must not
|
|
1371
|
+
// assert "unreachable". The thrown `msg` carries the specific reason (and the
|
|
1372
|
+
// masked URL where one applies), so it is surfaced verbatim.
|
|
1373
|
+
if (isHttpEmbeddingError(err)) {
|
|
1374
|
+
cliError(` The custom embedding endpoint request failed.\n` +
|
|
1375
|
+
` ${msg.replace(/\n/g, '\n ')}\n` +
|
|
1376
|
+
` Suggestions:\n` +
|
|
1377
|
+
` 1. Verify the endpoint URL is reachable and running ` +
|
|
1378
|
+
`(--embedding-base-url / GITNEXUS_EMBEDDING_URL: host, port, /v1 path).\n` +
|
|
1379
|
+
` 2. Confirm the model name and embedding dimensions match what the endpoint serves.\n` +
|
|
1380
|
+
` 3. Re-run without --embeddings to index without vectors.\n`, { recoveryHint: 'http-embedding-endpoint-error' });
|
|
1381
|
+
process.exitCode = 1;
|
|
1382
|
+
return;
|
|
1383
|
+
}
|
|
1384
|
+
// isHttpMode() is a pure presence probe (URL+MODEL) that never throws — a
|
|
1385
|
+
// malformed GITNEXUS_EMBEDDING_DIMS is handled by the dims branch above — so
|
|
1386
|
+
// no defensive try/catch is needed here (#2385).
|
|
1387
|
+
const inHttpMode = isHttpMode();
|
|
1206
1388
|
// HF download failure — show clean guidance without the raw stack trace.
|
|
1207
1389
|
// Checked before writeFatalToStderr so the user sees one focused message
|
|
1208
1390
|
// rather than a stack-trace dump followed by a second remediation block.
|
|
1209
|
-
|
|
1391
|
+
// Gated on !inHttpMode: with a custom endpoint configured no model download
|
|
1392
|
+
// is ever attempted, so a network error there is the endpoint's, handled by
|
|
1393
|
+
// the HttpEmbeddingError branch above — never HF's (#2385).
|
|
1394
|
+
if ((isHfDownloadFailure(msg) || msg.includes('Failed to download embedding model')) &&
|
|
1395
|
+
!inHttpMode) {
|
|
1210
1396
|
cliError(` The embedding model could not be downloaded.\n` +
|
|
1211
1397
|
` huggingface.co may be unreachable from your network\n` +
|
|
1212
1398
|
` (e.g. behind a corporate proxy or a regional firewall).\n` +
|
package/dist/cli/clean.js
CHANGED
|
@@ -8,7 +8,7 @@ import fs from 'fs/promises';
|
|
|
8
8
|
import path from 'path';
|
|
9
9
|
import { logger } from '../core/logger.js';
|
|
10
10
|
import { findRepo, unregisterRepo, listRegisteredRepos, assertSafeStoragePath, getStoragePaths, removeBranchIndex, UnsafeStoragePathError, } from '../storage/repo-manager.js';
|
|
11
|
-
import {
|
|
11
|
+
import { cleanParkedLbugSidecars, inspectLbugSidecars, listParkedLbugSidecars, } from '../core/lbug/sidecar-recovery.js';
|
|
12
12
|
import { t } from './i18n/index.js';
|
|
13
13
|
export const cleanCommand = async (options) => {
|
|
14
14
|
// --branch <name>: remove a single non-primary branch's index (#2106 R7).
|
|
@@ -62,7 +62,13 @@ export const cleanCommand = async (options) => {
|
|
|
62
62
|
}
|
|
63
63
|
const lbugPath = path.join(repo.storagePath, 'lbug');
|
|
64
64
|
const state = await inspectLbugSidecars(lbugPath);
|
|
65
|
-
|
|
65
|
+
// Single roster authority (this shipping review, FIX 5): the aggregate
|
|
66
|
+
// covers both parked-sidecar families — the timestamped missing-shadow
|
|
67
|
+
// WAL quarantines AND the fixed-name `.dirty-recovery` parks (`.next`
|
|
68
|
+
// residues included) left by a dirty-flag recovery rebuild (#2409). The
|
|
69
|
+
// previous inline concatenations here were how the `.next` residue
|
|
70
|
+
// stayed invisible to this surface.
|
|
71
|
+
const quarantined = await listParkedLbugSidecars(lbugPath);
|
|
66
72
|
console.log(t('clean.lbugSidecars.state', { state: state.kind }));
|
|
67
73
|
if (quarantined.length === 0) {
|
|
68
74
|
console.log(t('clean.lbugSidecars.none'));
|
|
@@ -76,8 +82,16 @@ export const cleanCommand = async (options) => {
|
|
|
76
82
|
console.log(`\n${t('common.runForceConfirm')}`);
|
|
77
83
|
return;
|
|
78
84
|
}
|
|
79
|
-
const deleted = await
|
|
85
|
+
const { deleted, failed } = await cleanParkedLbugSidecars(lbugPath);
|
|
80
86
|
console.log(t('clean.lbugSidecars.deleted', { count: deleted.length }));
|
|
87
|
+
// A locked parked file no longer crashes the clean mid-command (FIX 5)
|
|
88
|
+
// — the rest were deleted above; report what remains and why.
|
|
89
|
+
if (failed.length > 0) {
|
|
90
|
+
console.log(t('clean.lbugSidecars.failed', { count: failed.length }));
|
|
91
|
+
for (const file of failed) {
|
|
92
|
+
console.log(` - ${file}`);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
81
95
|
return;
|
|
82
96
|
}
|
|
83
97
|
// --all flag: clean all indexed repos
|
|
@@ -12,7 +12,7 @@ import { type CliMessageKey, type CliMessageVars } from './i18n/index.js';
|
|
|
12
12
|
* Consumers can import this type to narrow log-record `recoveryHint`
|
|
13
13
|
* fields without restating the literal list.
|
|
14
14
|
*/
|
|
15
|
-
export type RecoveryHint = 'wal-corruption' | 'wal-checkpoint-threshold' | 'heap-oom-respawn' | 'native-worker-abort' | 'hf-endpoint-unreachable' | 'local-embedding-unsupported' | 'large-repo' | 'npm-resolution' | 'module-not-found' | 'gitnexusrc-invalid' | 'default-branch-invalid';
|
|
15
|
+
export type RecoveryHint = 'wal-corruption' | 'wal-checkpoint-threshold' | 'lbug-wipe-failed' | 'lbug-page-size' | 'heap-oom-respawn' | 'native-worker-abort' | 'hf-endpoint-unreachable' | 'http-embedding-endpoint-error' | 'embedding-dims-invalid' | 'local-embedding-unsupported' | 'local-embedding-stack-missing' | 'large-repo' | 'npm-resolution' | 'module-not-found' | 'gitnexusrc-invalid' | 'default-branch-invalid';
|
|
16
16
|
/**
|
|
17
17
|
* Common shape for the optional structured-field bag passed to
|
|
18
18
|
* `cliError`/`cliWarn`/`cliInfo`. Typed so the `recoveryHint` slot is
|