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
|
@@ -0,0 +1,436 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MoveFlowClient implementation that spawns `move-flow mcp` and communicates
|
|
3
|
+
* via MCP JSON-RPC over stdio (newline-delimited JSON).
|
|
4
|
+
*
|
|
5
|
+
* The move-flow binary (Rust/rmcp) is expected at `process.env.MOVE_FLOW`
|
|
6
|
+
* or on $PATH as `move-flow`.
|
|
7
|
+
*/
|
|
8
|
+
import { spawn, execFileSync } from 'node:child_process';
|
|
9
|
+
import { createInterface } from 'node:readline';
|
|
10
|
+
import { isCompatibleMoveFlowVersion } from './release.js';
|
|
11
|
+
function isMcpCallToolResult(v) {
|
|
12
|
+
return typeof v === 'object' && v !== null;
|
|
13
|
+
}
|
|
14
|
+
function isMcpListToolResult(v) {
|
|
15
|
+
return typeof v === 'object' && v !== null;
|
|
16
|
+
}
|
|
17
|
+
/** JSON-RPC `invalid_params` - move-flow uses it for caller/input errors
|
|
18
|
+
* (and some builds route package build failures through it). */
|
|
19
|
+
const JSON_RPC_INVALID_PARAMS = -32602;
|
|
20
|
+
/** Real Aptos packages may need several minutes for a cold compiler build. */
|
|
21
|
+
const DEFAULT_MOVE_FLOW_TOOL_TIMEOUT_MS = 300_000;
|
|
22
|
+
function resolveMoveFlowToolTimeoutMs() {
|
|
23
|
+
const configured = Number(process.env.GITNEXUS_MOVE_FLOW_TIMEOUT_MS);
|
|
24
|
+
return Number.isSafeInteger(configured) && configured > 0
|
|
25
|
+
? configured
|
|
26
|
+
: DEFAULT_MOVE_FLOW_TOOL_TIMEOUT_MS;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* A move-flow tool call that failed in user space: the package could not be
|
|
30
|
+
* built (an `isError: true` tool result whose content text carries the
|
|
31
|
+
* diagnostic, e.g. "failed to build package `<path>`: <reason>") or the request
|
|
32
|
+
* parameters were rejected (JSON-RPC -32602 invalid_params). Distinguishes
|
|
33
|
+
* caller/input errors from transport and server faults so callers can render
|
|
34
|
+
* them as user-actionable.
|
|
35
|
+
*/
|
|
36
|
+
export class MoveFlowToolCallError extends Error {
|
|
37
|
+
/** JSON-RPC error code when the failure surfaced as a protocol error. */
|
|
38
|
+
code;
|
|
39
|
+
constructor(message, opts = {}) {
|
|
40
|
+
super(message);
|
|
41
|
+
this.name = 'MoveFlowToolCallError';
|
|
42
|
+
this.code = opts.code;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Derive move-flow capabilities from a `tools/list` response.
|
|
47
|
+
*
|
|
48
|
+
* `facts` is a *query type* on `move_package_query` (a `const` in the tool's
|
|
49
|
+
* `inputSchema` QueryType enum), not a standalone tool — so we detect it by
|
|
50
|
+
* inspecting the schema. A hypothetical future standalone `move_package_facts`
|
|
51
|
+
* tool is also honoured for forward-compatibility.
|
|
52
|
+
*
|
|
53
|
+
* Accepts either bare tool-name strings or `{ name, inputSchema }` entries.
|
|
54
|
+
*/
|
|
55
|
+
export function detectMoveFlowCapabilities(tools) {
|
|
56
|
+
const names = new Set();
|
|
57
|
+
let querySchema;
|
|
58
|
+
for (const t of tools) {
|
|
59
|
+
if (typeof t === 'string') {
|
|
60
|
+
names.add(t);
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
names.add(t.name);
|
|
64
|
+
if (t.name === 'move_package_query')
|
|
65
|
+
querySchema = t.inputSchema;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
const hasFactsQuery = names.has('move_package_facts') || schemaMentionsFactsQuery(querySchema);
|
|
69
|
+
return { hasFactsQuery, hasStatusTool: names.has('move_package_status') };
|
|
70
|
+
}
|
|
71
|
+
/** True if the `move_package_query` inputSchema declares a `"facts"` query const. */
|
|
72
|
+
function schemaMentionsFactsQuery(schema) {
|
|
73
|
+
if (!schema || typeof schema !== 'object')
|
|
74
|
+
return false;
|
|
75
|
+
// Walk the JSON-schema object looking for a `const: "facts"` or
|
|
76
|
+
// `enum: [... "facts" ...]` anywhere under the QueryType definition.
|
|
77
|
+
const stack = [schema];
|
|
78
|
+
while (stack.length) {
|
|
79
|
+
const node = stack.pop();
|
|
80
|
+
if (!node || typeof node !== 'object')
|
|
81
|
+
continue;
|
|
82
|
+
const obj = node;
|
|
83
|
+
if (obj.const === 'facts')
|
|
84
|
+
return true;
|
|
85
|
+
if (Array.isArray(obj.enum) && obj.enum.includes('facts'))
|
|
86
|
+
return true;
|
|
87
|
+
for (const v of Object.values(obj)) {
|
|
88
|
+
if (v && typeof v === 'object')
|
|
89
|
+
stack.push(v);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
export class MoveFlowMcpClient {
|
|
95
|
+
proc = null;
|
|
96
|
+
requestId = 0;
|
|
97
|
+
pending = new Map();
|
|
98
|
+
initialized = false;
|
|
99
|
+
initPromise = null;
|
|
100
|
+
capsPromise = null;
|
|
101
|
+
binaryPath;
|
|
102
|
+
stderrLines = [];
|
|
103
|
+
static MAX_STDERR = 20;
|
|
104
|
+
stderrContext() {
|
|
105
|
+
if (this.stderrLines.length === 0)
|
|
106
|
+
return '';
|
|
107
|
+
return `\nstderr (last ${this.stderrLines.length} lines):\n${this.stderrLines.join('\n')}`;
|
|
108
|
+
}
|
|
109
|
+
constructor(binaryPath) {
|
|
110
|
+
this.binaryPath = binaryPath || process.env.MOVE_FLOW || 'move-flow';
|
|
111
|
+
}
|
|
112
|
+
failProcess(proc, error, killProcess = true) {
|
|
113
|
+
if (this.proc !== proc)
|
|
114
|
+
return;
|
|
115
|
+
this.proc = null;
|
|
116
|
+
this.initialized = false;
|
|
117
|
+
this.initPromise = null;
|
|
118
|
+
this.capsPromise = null;
|
|
119
|
+
for (const pending of this.pending.values()) {
|
|
120
|
+
clearTimeout(pending.timeout);
|
|
121
|
+
pending.reject(error);
|
|
122
|
+
}
|
|
123
|
+
this.pending.clear();
|
|
124
|
+
if (killProcess) {
|
|
125
|
+
try {
|
|
126
|
+
proc.kill();
|
|
127
|
+
}
|
|
128
|
+
catch {
|
|
129
|
+
/* process may already be dead */
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
async ensureStarted() {
|
|
134
|
+
if (this.initialized)
|
|
135
|
+
return;
|
|
136
|
+
if (this.initPromise)
|
|
137
|
+
return this.initPromise;
|
|
138
|
+
const start = this._start().catch((err) => {
|
|
139
|
+
// A failed startup must not poison the client for the rest of the run.
|
|
140
|
+
// Only clear the promise for this attempt so a late event from an older
|
|
141
|
+
// child cannot reset a newer retry.
|
|
142
|
+
if (this.initPromise === start) {
|
|
143
|
+
this.initialized = false;
|
|
144
|
+
this.initPromise = null;
|
|
145
|
+
this.capsPromise = null;
|
|
146
|
+
}
|
|
147
|
+
throw err;
|
|
148
|
+
});
|
|
149
|
+
this.initPromise = start;
|
|
150
|
+
return start;
|
|
151
|
+
}
|
|
152
|
+
async _start() {
|
|
153
|
+
return new Promise((resolve, reject) => {
|
|
154
|
+
this.stderrLines.length = 0;
|
|
155
|
+
const proc = spawn(this.binaryPath, ['mcp'], {
|
|
156
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
157
|
+
});
|
|
158
|
+
this.proc = proc;
|
|
159
|
+
let initId = null;
|
|
160
|
+
let initSettled = false;
|
|
161
|
+
let timeout = null;
|
|
162
|
+
let rl = null;
|
|
163
|
+
const clearInitTimeout = () => {
|
|
164
|
+
if (timeout) {
|
|
165
|
+
clearTimeout(timeout);
|
|
166
|
+
timeout = null;
|
|
167
|
+
}
|
|
168
|
+
};
|
|
169
|
+
const failInitialization = (err, killProcess = true) => {
|
|
170
|
+
if (initSettled)
|
|
171
|
+
return;
|
|
172
|
+
initSettled = true;
|
|
173
|
+
clearInitTimeout();
|
|
174
|
+
if (initId !== null)
|
|
175
|
+
this.pending.delete(initId);
|
|
176
|
+
rl?.close();
|
|
177
|
+
this.failProcess(proc, err, killProcess);
|
|
178
|
+
reject(err);
|
|
179
|
+
};
|
|
180
|
+
timeout = setTimeout(() => {
|
|
181
|
+
failInitialization(new Error('move-flow MCP server did not respond within 30s'));
|
|
182
|
+
}, 30000);
|
|
183
|
+
proc.stderr.on('data', (chunk) => {
|
|
184
|
+
for (const line of chunk.toString().split('\n')) {
|
|
185
|
+
if (!line)
|
|
186
|
+
continue;
|
|
187
|
+
this.stderrLines.push(line);
|
|
188
|
+
if (this.stderrLines.length > MoveFlowMcpClient.MAX_STDERR) {
|
|
189
|
+
this.stderrLines.shift();
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
});
|
|
193
|
+
// Absorb async EPIPE from writes to a dead child so it does not become an
|
|
194
|
+
// uncaughtException; the 'exit' handler settles in-flight requests.
|
|
195
|
+
proc.stdin.on('error', (err) => {
|
|
196
|
+
this.stderrLines.push(`stdin error: ${err.message}`);
|
|
197
|
+
if (this.stderrLines.length > MoveFlowMcpClient.MAX_STDERR) {
|
|
198
|
+
this.stderrLines.shift();
|
|
199
|
+
}
|
|
200
|
+
const wrapped = new Error(`move-flow stdin failed: ${err.message}${this.stderrContext()}`);
|
|
201
|
+
if (!initSettled)
|
|
202
|
+
failInitialization(wrapped);
|
|
203
|
+
else
|
|
204
|
+
this.failProcess(proc, wrapped);
|
|
205
|
+
});
|
|
206
|
+
proc.on('error', (err) => {
|
|
207
|
+
const wrapped = new Error(`Failed to spawn move-flow: ${err.message}${this.stderrContext()}`);
|
|
208
|
+
if (!initSettled) {
|
|
209
|
+
failInitialization(wrapped);
|
|
210
|
+
}
|
|
211
|
+
else {
|
|
212
|
+
this.failProcess(proc, wrapped);
|
|
213
|
+
}
|
|
214
|
+
});
|
|
215
|
+
proc.on('exit', (code) => {
|
|
216
|
+
if (this.proc !== proc)
|
|
217
|
+
return;
|
|
218
|
+
if (!initSettled) {
|
|
219
|
+
failInitialization(new Error(`move-flow exited with code ${code} during init${this.stderrContext()}`), false);
|
|
220
|
+
return;
|
|
221
|
+
}
|
|
222
|
+
this.failProcess(proc, new Error(`move-flow exited unexpectedly (code ${code})${this.stderrContext()}`), false);
|
|
223
|
+
});
|
|
224
|
+
rl = createInterface({ input: proc.stdout, crlfDelay: Infinity });
|
|
225
|
+
rl.on('line', (line) => {
|
|
226
|
+
if (this.proc !== proc)
|
|
227
|
+
return;
|
|
228
|
+
if (!line.trim())
|
|
229
|
+
return;
|
|
230
|
+
try {
|
|
231
|
+
const msg = JSON.parse(line);
|
|
232
|
+
if (msg.id != null) {
|
|
233
|
+
const p = this.pending.get(msg.id);
|
|
234
|
+
if (p) {
|
|
235
|
+
this.pending.delete(msg.id);
|
|
236
|
+
if (msg.error) {
|
|
237
|
+
p.reject(msg.error.code === JSON_RPC_INVALID_PARAMS
|
|
238
|
+
? new MoveFlowToolCallError(msg.error.message, { code: msg.error.code })
|
|
239
|
+
: new Error(`MCP error ${msg.error.code}: ${msg.error.message}`));
|
|
240
|
+
}
|
|
241
|
+
else {
|
|
242
|
+
p.resolve(msg.result);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
catch {
|
|
248
|
+
/* ignore non-JSON lines */
|
|
249
|
+
}
|
|
250
|
+
});
|
|
251
|
+
// Send initialize
|
|
252
|
+
initId = ++this.requestId;
|
|
253
|
+
this.pending.set(initId, {
|
|
254
|
+
resolve: () => {
|
|
255
|
+
if (initSettled)
|
|
256
|
+
return;
|
|
257
|
+
clearInitTimeout();
|
|
258
|
+
const notif = {
|
|
259
|
+
jsonrpc: '2.0',
|
|
260
|
+
method: 'notifications/initialized',
|
|
261
|
+
};
|
|
262
|
+
try {
|
|
263
|
+
this.send(notif);
|
|
264
|
+
}
|
|
265
|
+
catch (err) {
|
|
266
|
+
failInitialization(err instanceof Error ? err : new Error(String(err)));
|
|
267
|
+
return;
|
|
268
|
+
}
|
|
269
|
+
initSettled = true;
|
|
270
|
+
this.initialized = true;
|
|
271
|
+
resolve();
|
|
272
|
+
},
|
|
273
|
+
reject: (err) => {
|
|
274
|
+
failInitialization(err);
|
|
275
|
+
},
|
|
276
|
+
timeout,
|
|
277
|
+
});
|
|
278
|
+
try {
|
|
279
|
+
this.send({
|
|
280
|
+
jsonrpc: '2.0',
|
|
281
|
+
id: initId,
|
|
282
|
+
method: 'initialize',
|
|
283
|
+
params: {
|
|
284
|
+
protocolVersion: '2024-11-05',
|
|
285
|
+
capabilities: {},
|
|
286
|
+
clientInfo: { name: 'gitnexus', version: '1.0.0' },
|
|
287
|
+
},
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
catch (err) {
|
|
291
|
+
failInitialization(err instanceof Error ? err : new Error(String(err)));
|
|
292
|
+
}
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
send(msg) {
|
|
296
|
+
if (!this.proc)
|
|
297
|
+
throw new Error('move-flow MCP server is not running');
|
|
298
|
+
this.proc.stdin.write(JSON.stringify(msg) + '\n');
|
|
299
|
+
}
|
|
300
|
+
async request(method, params, timeoutMs, timeoutMessage) {
|
|
301
|
+
await this.ensureStarted();
|
|
302
|
+
const proc = this.proc;
|
|
303
|
+
if (!proc)
|
|
304
|
+
throw new Error('move-flow MCP server is not running');
|
|
305
|
+
return new Promise((resolve, reject) => {
|
|
306
|
+
const id = ++this.requestId;
|
|
307
|
+
const timeout = setTimeout(() => {
|
|
308
|
+
this.failProcess(proc, new Error(timeoutMessage));
|
|
309
|
+
}, timeoutMs);
|
|
310
|
+
this.pending.set(id, {
|
|
311
|
+
resolve: (result) => {
|
|
312
|
+
clearTimeout(timeout);
|
|
313
|
+
resolve(result);
|
|
314
|
+
},
|
|
315
|
+
reject: (error) => {
|
|
316
|
+
clearTimeout(timeout);
|
|
317
|
+
reject(error);
|
|
318
|
+
},
|
|
319
|
+
timeout,
|
|
320
|
+
});
|
|
321
|
+
try {
|
|
322
|
+
this.send({ jsonrpc: '2.0', id, method, params });
|
|
323
|
+
}
|
|
324
|
+
catch (error) {
|
|
325
|
+
this.failProcess(proc, error instanceof Error ? error : new Error(String(error)));
|
|
326
|
+
}
|
|
327
|
+
});
|
|
328
|
+
}
|
|
329
|
+
async callTool(toolName, args) {
|
|
330
|
+
const timeoutMs = resolveMoveFlowToolTimeoutMs();
|
|
331
|
+
const result = await this.request('tools/call', { name: toolName, arguments: args }, timeoutMs, `move-flow '${toolName}' timed out after ${timeoutMs}ms ` +
|
|
332
|
+
'(raise GITNEXUS_MOVE_FLOW_TIMEOUT_MS for large packages)');
|
|
333
|
+
if (!isMcpCallToolResult(result))
|
|
334
|
+
return result;
|
|
335
|
+
if (result.isError === true) {
|
|
336
|
+
const text = typeof result.content?.[0]?.text === 'string'
|
|
337
|
+
? result.content[0].text
|
|
338
|
+
: `move-flow '${toolName}' reported an unspecified tool error`;
|
|
339
|
+
throw new MoveFlowToolCallError(text);
|
|
340
|
+
}
|
|
341
|
+
if (!result.content?.[0]?.text)
|
|
342
|
+
return result;
|
|
343
|
+
try {
|
|
344
|
+
return JSON.parse(result.content[0].text);
|
|
345
|
+
}
|
|
346
|
+
catch {
|
|
347
|
+
return result.content[0].text;
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
async callGraph(packagePath) {
|
|
351
|
+
return (await this.callTool('move_package_query', {
|
|
352
|
+
package_path: packagePath,
|
|
353
|
+
query: 'call_graph',
|
|
354
|
+
}));
|
|
355
|
+
}
|
|
356
|
+
async facts(packagePath) {
|
|
357
|
+
return (await this.callTool('move_package_query', {
|
|
358
|
+
package_path: packagePath,
|
|
359
|
+
query: 'facts',
|
|
360
|
+
}));
|
|
361
|
+
}
|
|
362
|
+
async packageStatus(packagePath) {
|
|
363
|
+
try {
|
|
364
|
+
const result = await this.callTool('move_package_status', { package_path: packagePath });
|
|
365
|
+
return { ok: true, diagnostics: typeof result === 'string' ? result : '' };
|
|
366
|
+
}
|
|
367
|
+
catch (err) {
|
|
368
|
+
// A failing build arrives as isError:true with the compiler diagnostics
|
|
369
|
+
// as content text - for this tool that IS the answer, not a call failure.
|
|
370
|
+
if (err instanceof MoveFlowToolCallError) {
|
|
371
|
+
return { ok: false, diagnostics: err.message };
|
|
372
|
+
}
|
|
373
|
+
throw err;
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
/** Raw JSON-RPC request (non-`tools/call`), e.g. `tools/list`. */
|
|
377
|
+
async rpcRequest(method, params) {
|
|
378
|
+
return this.request(method, params, 30_000, `move-flow '${method}' timed out after 30s`);
|
|
379
|
+
}
|
|
380
|
+
async capabilities() {
|
|
381
|
+
if (this.capsPromise)
|
|
382
|
+
return this.capsPromise;
|
|
383
|
+
const probe = this.rpcRequest('tools/list', {}).then((listed) => {
|
|
384
|
+
const tools = (isMcpListToolResult(listed) ? (listed.tools ?? []) : []);
|
|
385
|
+
return detectMoveFlowCapabilities(tools);
|
|
386
|
+
});
|
|
387
|
+
this.capsPromise = probe;
|
|
388
|
+
void probe.catch(() => {
|
|
389
|
+
if (this.capsPromise === probe)
|
|
390
|
+
this.capsPromise = null;
|
|
391
|
+
});
|
|
392
|
+
return probe;
|
|
393
|
+
}
|
|
394
|
+
async shutdown() {
|
|
395
|
+
const proc = this.proc;
|
|
396
|
+
if (proc) {
|
|
397
|
+
proc.stdin?.end();
|
|
398
|
+
this.failProcess(proc, new Error('move-flow client shutdown'));
|
|
399
|
+
}
|
|
400
|
+
else {
|
|
401
|
+
this.initialized = false;
|
|
402
|
+
this.initPromise = null;
|
|
403
|
+
this.capsPromise = null;
|
|
404
|
+
}
|
|
405
|
+
this.stderrLines.length = 0;
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
function probeBinary(binary) {
|
|
409
|
+
try {
|
|
410
|
+
const output = execFileSync(binary, ['--version'], {
|
|
411
|
+
encoding: 'utf8',
|
|
412
|
+
stdio: ['ignore', 'pipe', 'ignore'],
|
|
413
|
+
timeout: 5000,
|
|
414
|
+
});
|
|
415
|
+
// Prerelease/build suffixes ("2.1.0-rc1") are accepted; only the major
|
|
416
|
+
// version gates protocol compatibility, and it follows the release pin.
|
|
417
|
+
const version = /(?:^|\s)v?((\d+)\.\d+\.\d+(?:[-+][0-9A-Za-z.-]+)?)(?:\s|$)/.exec(output);
|
|
418
|
+
return version !== null && isCompatibleMoveFlowVersion(version[1]) ? version[1] : null;
|
|
419
|
+
}
|
|
420
|
+
catch {
|
|
421
|
+
return null;
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
/** Construct a client for a binary that was already verified by the installer. */
|
|
425
|
+
export const createMoveFlowClient = (binaryPath) => new MoveFlowMcpClient(binaryPath);
|
|
426
|
+
/**
|
|
427
|
+
* Probe and resolve a move-flow candidate exactly once, returning null when
|
|
428
|
+
* the binary is missing or reports an incompatible major version. When
|
|
429
|
+
* `binaryPath` is provided only that path is probed; otherwise resolution is
|
|
430
|
+
* `$MOVE_FLOW` (explicit override), then `move-flow` on `$PATH`.
|
|
431
|
+
*/
|
|
432
|
+
export function tryResolveMoveFlowClient(binaryPath) {
|
|
433
|
+
const binary = binaryPath || process.env.MOVE_FLOW || 'move-flow';
|
|
434
|
+
const version = probeBinary(binary);
|
|
435
|
+
return version ? { client: createMoveFlowClient(binary), version } : null;
|
|
436
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Phase: moveIngest
|
|
3
|
+
*
|
|
4
|
+
* Compiler-first Move ingestion via the move-flow MCP server. **No raw Move
|
|
5
|
+
* source is ever read.** The `facts` query is the ONLY ingestion path: if the
|
|
6
|
+
* move-flow build doesn't expose it, the phase fails fast with a clear upgrade
|
|
7
|
+
* error before touching any package. Call edges come from the `call_graph`
|
|
8
|
+
* query.
|
|
9
|
+
*
|
|
10
|
+
* Note: move-flow's `facts` query elides all `#[test]` and `#[test_only]`
|
|
11
|
+
* symbols (functions, structs, constants). The graph therefore contains only
|
|
12
|
+
* production symbols; queries to find test functions or exclude tests from
|
|
13
|
+
* impact do not need a symbol-level test filter.
|
|
14
|
+
*
|
|
15
|
+
* @deps structure
|
|
16
|
+
* @reads scannedFiles (from structure phase)
|
|
17
|
+
* @writes graph (Module/Function/Struct/Enum/EnumVariant/Const nodes +
|
|
18
|
+
* CALLS/DEFINES/CONTAINS/FRIEND_OF/READS_RESOURCE/WRITES_RESOURCE/
|
|
19
|
+
* ACQUIRES/USES_TYPE/ENTRY_POINT_OF/IMPORTS edges)
|
|
20
|
+
*/
|
|
21
|
+
import type { PipelinePhase } from '../ingestion/pipeline-phases/types.js';
|
|
22
|
+
import type { StandaloneIngestOutput } from '../ingestion/pipeline-phases/standalone-ingest.js';
|
|
23
|
+
import { type MoveFlowClient } from './mcp-client.js';
|
|
24
|
+
import type { CallGraphMap } from './compiler-facts.js';
|
|
25
|
+
import { type MoveConsistencyIssue } from './consistency.js';
|
|
26
|
+
export interface MoveIngestOutput extends StandaloneIngestOutput {
|
|
27
|
+
/** Move package roots (absolute directories containing Move.toml). */
|
|
28
|
+
packageRoots: string[];
|
|
29
|
+
/** Module qualified names → source file path (repo-relative or package-root). */
|
|
30
|
+
moduleFileMap: ReadonlyMap<string, string>;
|
|
31
|
+
/** Function qualified names → graph node IDs. */
|
|
32
|
+
functionNodeMap: ReadonlyMap<string, string>;
|
|
33
|
+
/** Struct/enum qualified names → graph node IDs. */
|
|
34
|
+
structNodeMap: ReadonlyMap<string, string>;
|
|
35
|
+
/** Module qualified names → absolute package root. */
|
|
36
|
+
modulePackageMap: ReadonlyMap<string, string>;
|
|
37
|
+
/** Repo-relative file paths → absolute package root. */
|
|
38
|
+
filePackageMap: ReadonlyMap<string, string>;
|
|
39
|
+
/** Absolute package root → compiler call graph for that package. */
|
|
40
|
+
callGraphByPackage: ReadonlyMap<string, CallGraphMap>;
|
|
41
|
+
/** Resource references dropped during global resolution. */
|
|
42
|
+
droppedResourceRefs?: {
|
|
43
|
+
fnNodeId: string;
|
|
44
|
+
target: string;
|
|
45
|
+
}[];
|
|
46
|
+
/** Non-fatal consistency issues found after Move ingestion. */
|
|
47
|
+
consistencyIssues: MoveConsistencyIssue[];
|
|
48
|
+
}
|
|
49
|
+
export declare function createMoveIngestPhase(client: MoveFlowClient | null): PipelinePhase<MoveIngestOutput>;
|