gitnexus 1.6.9 → 1.6.10-aptos.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +236 -53
- package/dist/_shared/graph/types.d.ts +67 -3
- package/dist/_shared/graph/types.d.ts.map +1 -1
- package/dist/_shared/index.d.ts +1 -0
- package/dist/_shared/index.d.ts.map +1 -1
- package/dist/_shared/index.js.map +1 -1
- package/dist/_shared/integrations/resilient-fetch.d.ts +3 -1
- package/dist/_shared/integrations/resilient-fetch.d.ts.map +1 -1
- package/dist/_shared/integrations/resilient-fetch.js +4 -3
- package/dist/_shared/integrations/resilient-fetch.js.map +1 -1
- package/dist/_shared/language-detection.d.ts.map +1 -1
- package/dist/_shared/language-detection.js +2 -0
- package/dist/_shared/language-detection.js.map +1 -1
- package/dist/_shared/languages.d.ts +2 -0
- package/dist/_shared/languages.d.ts.map +1 -1
- package/dist/_shared/languages.js +2 -0
- package/dist/_shared/languages.js.map +1 -1
- package/dist/_shared/lbug/schema-constants.d.ts +2 -2
- package/dist/_shared/lbug/schema-constants.d.ts.map +1 -1
- package/dist/_shared/lbug/schema-constants.js +8 -0
- package/dist/_shared/lbug/schema-constants.js.map +1 -1
- package/dist/_shared/pipeline.d.ts +1 -1
- package/dist/_shared/pipeline.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/callable-flow-site.d.ts +110 -0
- package/dist/_shared/scope-resolution/callable-flow-site.d.ts.map +1 -0
- package/dist/_shared/scope-resolution/callable-flow-site.js +11 -0
- package/dist/_shared/scope-resolution/callable-flow-site.js.map +1 -0
- package/dist/_shared/scope-resolution/finalize-algorithm.d.ts +1 -1
- package/dist/_shared/scope-resolution/finalize-algorithm.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/finalize-algorithm.js +1 -1
- package/dist/_shared/scope-resolution/finalize-algorithm.js.map +1 -1
- package/dist/_shared/scope-resolution/language-classification.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/language-classification.js +1 -0
- package/dist/_shared/scope-resolution/language-classification.js.map +1 -1
- package/dist/_shared/scope-resolution/parsed-file.d.ts +7 -0
- package/dist/_shared/scope-resolution/parsed-file.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/reference-site.d.ts +9 -1
- package/dist/_shared/scope-resolution/reference-site.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/types.d.ts +20 -3
- package/dist/_shared/scope-resolution/types.d.ts.map +1 -1
- package/dist/cli/ai-context.d.ts +1 -1
- package/dist/cli/ai-context.js +25 -44
- package/dist/cli/analyze.d.ts +5 -2
- package/dist/cli/analyze.js +205 -11
- package/dist/cli/clean.js +17 -3
- package/dist/cli/cli-message.d.ts +1 -1
- package/dist/cli/doctor.d.ts +18 -0
- package/dist/cli/doctor.js +96 -5
- package/dist/cli/editor-targets.d.ts +17 -2
- package/dist/cli/editor-targets.js +44 -0
- package/dist/cli/embeddings.d.ts +12 -0
- package/dist/cli/embeddings.js +49 -0
- package/dist/cli/eval-server.d.ts +23 -1
- package/dist/cli/eval-server.js +126 -8
- package/dist/cli/help-i18n.js +6 -0
- package/dist/cli/i18n/en.d.ts +18 -8
- package/dist/cli/i18n/en.js +18 -8
- package/dist/cli/i18n/resources.d.ts +28 -8
- package/dist/cli/i18n/zh-CN.d.ts +10 -0
- package/dist/cli/i18n/zh-CN.js +18 -8
- package/dist/cli/index.js +21 -7
- package/dist/cli/lazy-action.d.ts +7 -0
- package/dist/cli/lazy-action.js +27 -0
- package/dist/cli/mcp.js +6 -3
- package/dist/cli/move-availability.d.ts +5 -0
- package/dist/cli/move-availability.js +11 -0
- package/dist/cli/setup.d.ts +8 -0
- package/dist/cli/setup.js +230 -32
- package/dist/cli/skill-gen.js +38 -18
- package/dist/cli/standard-skills.d.ts +76 -0
- package/dist/cli/standard-skills.js +45 -0
- package/dist/cli/status.d.ts +4 -1
- package/dist/cli/status.js +57 -4
- package/dist/cli/tool.js +11 -0
- package/dist/cli/uninstall.js +77 -18
- package/dist/cli/wiki.d.ts +1 -0
- package/dist/cli/wiki.js +7 -1
- package/dist/config/ignore-service.d.ts +2 -0
- package/dist/config/ignore-service.js +27 -0
- package/dist/core/analysis-features.d.ts +21 -0
- package/dist/core/analysis-features.js +59 -0
- package/dist/core/analyzer-identity.d.ts +74 -0
- package/dist/core/analyzer-identity.js +1820 -0
- package/dist/core/augmentation/engine.js +13 -8
- package/dist/core/embeddings/embedder.d.ts +3 -2
- package/dist/core/embeddings/embedder.js +24 -7
- package/dist/core/embeddings/embedding-identity.d.ts +11 -0
- package/dist/core/embeddings/embedding-identity.js +24 -0
- package/dist/core/embeddings/embedding-pipeline.d.ts +36 -1
- package/dist/core/embeddings/embedding-pipeline.js +100 -9
- package/dist/core/embeddings/http-client.d.ts +33 -3
- package/dist/core/embeddings/http-client.js +237 -25
- package/dist/core/embeddings/node-module-compat.d.ts +25 -0
- package/dist/core/embeddings/node-module-compat.js +25 -0
- package/dist/core/embeddings/onnxruntime-common-resolver.js +8 -5
- package/dist/core/embeddings/onnxruntime-node-resolver.js +33 -7
- package/dist/core/embeddings/runtime-install.d.ts +119 -0
- package/dist/core/embeddings/runtime-install.js +372 -0
- package/dist/core/embeddings/runtime-support.d.ts +48 -17
- package/dist/core/embeddings/runtime-support.js +96 -0
- package/dist/core/git-staleness.js +1 -1
- package/dist/core/group/bridge-db.js +2 -0
- package/dist/core/group/extractors/http-patterns/python.js +246 -108
- package/dist/core/group/extractors/manifest-extractor.js +4 -0
- package/dist/core/incremental/escalation-gate.d.ts +38 -0
- package/dist/core/incremental/escalation-gate.js +48 -0
- package/dist/core/incremental/shadow-candidates.d.ts +3 -3
- package/dist/core/incremental/shadow-candidates.js +3 -3
- package/dist/core/incremental/subgraph-extract.d.ts +2 -2
- package/dist/core/incremental/subgraph-extract.js +2 -2
- package/dist/core/index-freshness.d.ts +5 -0
- package/dist/core/index-freshness.js +13 -0
- package/dist/core/ingestion/class-extractors/configs/jvm.js +29 -0
- package/dist/core/ingestion/cobol/cobol-preprocessor.js +1 -1
- package/dist/core/ingestion/cobol/jcl-processor.js +9 -8
- package/dist/core/ingestion/cobol-processor.js +27 -26
- package/dist/core/ingestion/community-processor.d.ts +51 -1
- package/dist/core/ingestion/community-processor.js +323 -64
- package/dist/core/ingestion/emit-references.js +7 -2
- package/dist/core/ingestion/filesystem-walker.js +4 -0
- package/dist/core/ingestion/frameworks/spring/analysis-features.d.ts +3 -0
- package/dist/core/ingestion/frameworks/spring/analysis-features.js +7 -0
- package/dist/core/ingestion/frameworks/spring/bean-candidates.d.ts +30 -0
- package/dist/core/ingestion/frameworks/spring/bean-candidates.js +182 -0
- package/dist/core/ingestion/frameworks/spring/bean-catalog.d.ts +12 -0
- package/dist/core/ingestion/frameworks/spring/bean-catalog.js +26 -0
- package/dist/core/ingestion/frameworks/spring/config-bindings.d.ts +24 -0
- package/dist/core/ingestion/frameworks/spring/config-bindings.js +115 -0
- package/dist/core/ingestion/languages/c/captures.js +56 -0
- package/dist/core/ingestion/languages/c/query.js +17 -0
- package/dist/core/ingestion/languages/c/scope-resolver.js +6 -0
- package/dist/core/ingestion/languages/cobol/captures.js +93 -0
- package/dist/core/ingestion/languages/cobol/scope-resolver.js +7 -0
- package/dist/core/ingestion/languages/cpp/captures.js +365 -75
- package/dist/core/ingestion/languages/cpp/scope-resolver.js +14 -0
- package/dist/core/ingestion/languages/csharp/captures.js +25 -0
- package/dist/core/ingestion/languages/dart/captures.js +90 -2
- package/dist/core/ingestion/languages/dart/extension-type-preprocess.d.ts +7 -0
- package/dist/core/ingestion/languages/dart/extension-type-preprocess.js +30 -0
- package/dist/core/ingestion/languages/dart.js +2 -0
- package/dist/core/ingestion/languages/go/captures.js +34 -0
- package/dist/core/ingestion/languages/index.d.ts +1 -0
- package/dist/core/ingestion/languages/index.js +2 -0
- package/dist/core/ingestion/languages/java/analysis-features.d.ts +3 -0
- package/dist/core/ingestion/languages/java/analysis-features.js +13 -0
- package/dist/core/ingestion/languages/java/capture-side-channel.d.ts +22 -0
- package/dist/core/ingestion/languages/java/capture-side-channel.js +58 -0
- package/dist/core/ingestion/languages/java/captures.d.ts +4 -3
- package/dist/core/ingestion/languages/java/captures.js +193 -17
- package/dist/core/ingestion/languages/java/package-facts.d.ts +5 -0
- package/dist/core/ingestion/languages/java/package-facts.js +9 -0
- package/dist/core/ingestion/languages/java/package-siblings.d.ts +3 -16
- package/dist/core/ingestion/languages/java/package-siblings.js +8 -147
- package/dist/core/ingestion/languages/java/query.js +23 -0
- package/dist/core/ingestion/languages/java/scope-resolver.js +23 -0
- package/dist/core/ingestion/languages/java/spring-bean-metadata.d.ts +2 -0
- package/dist/core/ingestion/languages/java/spring-bean-metadata.js +8 -0
- package/dist/core/ingestion/languages/java/spring-config-bindings.d.ts +23 -0
- package/dist/core/ingestion/languages/java/spring-config-bindings.js +215 -0
- package/dist/core/ingestion/languages/java.js +3 -0
- package/dist/core/ingestion/languages/javascript/captures.js +16 -0
- package/dist/core/ingestion/languages/javascript/query.js +21 -0
- package/dist/core/ingestion/languages/jvm/package-facts.d.ts +35 -0
- package/dist/core/ingestion/languages/jvm/package-facts.js +40 -0
- package/dist/core/ingestion/languages/jvm/package-siblings.d.ts +14 -0
- package/dist/core/ingestion/languages/jvm/package-siblings.js +129 -0
- package/dist/core/ingestion/languages/kotlin/capture-side-channel.d.ts +17 -3
- package/dist/core/ingestion/languages/kotlin/capture-side-channel.js +42 -8
- package/dist/core/ingestion/languages/kotlin/captures.js +59 -0
- package/dist/core/ingestion/languages/kotlin/package-facts.d.ts +5 -0
- package/dist/core/ingestion/languages/kotlin/package-facts.js +9 -0
- package/dist/core/ingestion/languages/kotlin/package-siblings.d.ts +4 -0
- package/dist/core/ingestion/languages/kotlin/package-siblings.js +8 -0
- package/dist/core/ingestion/languages/kotlin/query.js +19 -0
- package/dist/core/ingestion/languages/kotlin/scope-resolver.js +9 -1
- package/dist/core/ingestion/languages/kotlin/spring-bean-metadata.d.ts +2 -0
- package/dist/core/ingestion/languages/kotlin/spring-bean-metadata.js +8 -0
- package/dist/core/ingestion/languages/kotlin.js +5 -6
- package/dist/core/ingestion/languages/move.d.ts +1 -0
- package/dist/core/ingestion/languages/move.js +27 -0
- package/dist/core/ingestion/languages/php/captures.js +40 -0
- package/dist/core/ingestion/languages/php/import-decomposer.js +12 -0
- package/dist/core/ingestion/languages/php/import-target.d.ts +2 -1
- package/dist/core/ingestion/languages/php/import-target.js +110 -2
- package/dist/core/ingestion/languages/php/interpret.js +10 -0
- package/dist/core/ingestion/languages/php/scope-resolver.js +1 -1
- package/dist/core/ingestion/languages/python/captures.d.ts +3 -4
- package/dist/core/ingestion/languages/python/captures.js +24 -5
- package/dist/core/ingestion/languages/python/interpret.js +4 -0
- package/dist/core/ingestion/languages/python/receiver-binding.d.ts +15 -2
- package/dist/core/ingestion/languages/python/receiver-binding.js +96 -2
- package/dist/core/ingestion/languages/python/simple-hooks.d.ts +5 -5
- package/dist/core/ingestion/languages/python/simple-hooks.js +15 -5
- package/dist/core/ingestion/languages/ruby/captures.js +42 -0
- package/dist/core/ingestion/languages/rust/captures.js +13 -0
- package/dist/core/ingestion/languages/rust/interpret.js +18 -0
- package/dist/core/ingestion/languages/rust/query.js +9 -0
- package/dist/core/ingestion/languages/rust/range-binding.js +6 -2
- package/dist/core/ingestion/languages/swift/captures.js +12 -0
- package/dist/core/ingestion/languages/typescript/captures.js +21 -0
- package/dist/core/ingestion/languages/typescript/nuxt-auto-imports.js +2 -1
- package/dist/core/ingestion/languages/typescript/query.js +37 -0
- package/dist/core/ingestion/markdown-processor.js +3 -2
- package/dist/core/ingestion/model/registration-table.js +1 -0
- package/dist/core/ingestion/parsing-processor.d.ts +3 -1
- package/dist/core/ingestion/parsing-processor.js +36 -1
- package/dist/core/ingestion/pipeline-phases/index.d.ts +2 -0
- package/dist/core/ingestion/pipeline-phases/index.js +2 -0
- package/dist/core/ingestion/pipeline-phases/parse-impl.js +56 -2
- package/dist/core/ingestion/pipeline-phases/parse.d.ts +0 -2
- package/dist/core/ingestion/pipeline-phases/parse.js +12 -3
- package/dist/core/ingestion/pipeline-phases/processes.d.ts +8 -0
- package/dist/core/ingestion/pipeline-phases/processes.js +11 -1
- package/dist/core/ingestion/pipeline-phases/spring-config.d.ts +37 -0
- package/dist/core/ingestion/pipeline-phases/spring-config.js +433 -0
- package/dist/core/ingestion/pipeline-phases/standalone-ingest.d.ts +16 -0
- package/dist/core/ingestion/pipeline-phases/standalone-ingest.js +6 -0
- package/dist/core/ingestion/pipeline.d.ts +4 -2
- package/dist/core/ingestion/pipeline.js +14 -2
- package/dist/core/ingestion/resolve-references.js +12 -0
- package/dist/core/ingestion/route-extractors/constant-resolver.d.ts +83 -0
- package/dist/core/ingestion/route-extractors/constant-resolver.js +131 -0
- package/dist/core/ingestion/route-extractors/python-const-resolver.d.ts +75 -0
- package/dist/core/ingestion/route-extractors/python-const-resolver.js +299 -0
- package/dist/core/ingestion/scope-extractor.js +306 -43
- package/dist/core/ingestion/scope-resolution/contract/scope-resolver.d.ts +71 -2
- package/dist/core/ingestion/scope-resolution/graph-bridge/callee-id-sink.d.ts +7 -7
- package/dist/core/ingestion/scope-resolution/graph-bridge/callee-id-sink.js +8 -7
- package/dist/core/ingestion/scope-resolution/graph-bridge/edges.d.ts +3 -1
- package/dist/core/ingestion/scope-resolution/graph-bridge/edges.js +6 -0
- package/dist/core/ingestion/scope-resolution/graph-bridge/ids.js +1 -0
- package/dist/core/ingestion/scope-resolution/graph-bridge/node-lookup.js +4 -1
- package/dist/core/ingestion/scope-resolution/graph-bridge/references-to-edges.js +7 -2
- package/dist/core/ingestion/scope-resolution/passes/callable-value-flow.d.ts +47 -0
- package/dist/core/ingestion/scope-resolution/passes/callable-value-flow.js +1138 -0
- package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.d.ts +16 -4
- package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.js +97 -1
- package/dist/core/ingestion/scope-resolution/passes/property-dispatch.d.ts +60 -0
- package/dist/core/ingestion/scope-resolution/passes/property-dispatch.js +111 -0
- package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.d.ts +4 -3
- package/dist/core/ingestion/scope-resolution/pipeline/phase.d.ts +5 -0
- package/dist/core/ingestion/scope-resolution/pipeline/phase.js +25 -38
- package/dist/core/ingestion/scope-resolution/pipeline/run.d.ts +6 -0
- package/dist/core/ingestion/scope-resolution/pipeline/run.js +147 -35
- package/dist/core/ingestion/scope-resolution/resolution-outcome.d.ts +1 -1
- package/dist/core/ingestion/scope-resolution/scope/walkers.js +73 -44
- package/dist/core/ingestion/taint/typescript-model.js +34 -2
- package/dist/core/ingestion/tree-sitter-queries.d.ts +2 -2
- package/dist/core/ingestion/tree-sitter-queries.js +23 -2
- package/dist/core/ingestion/type-extractors/jvm.js +17 -2
- package/dist/core/ingestion/utils/ast-helpers.d.ts +1 -0
- package/dist/core/ingestion/utils/ast-helpers.js +153 -2
- package/dist/core/ingestion/utils/callable-flow-captures.d.ts +94 -0
- package/dist/core/ingestion/utils/callable-flow-captures.js +878 -0
- package/dist/core/ingestion/utils/line-base.d.ts +20 -0
- package/dist/core/ingestion/utils/line-base.js +20 -0
- package/dist/core/ingestion/utils/symbol-labels.d.ts +21 -0
- package/dist/core/ingestion/utils/symbol-labels.js +45 -0
- package/dist/core/ingestion/workers/parse-worker.d.ts +34 -0
- package/dist/core/ingestion/workers/parse-worker.js +40 -5
- package/dist/core/ingestion/workers/result-merge.js +4 -0
- package/dist/core/ingestion/workers/worker-pool.d.ts +28 -0
- package/dist/core/ingestion/workers/worker-pool.js +128 -28
- package/dist/core/lbug/csv-generator.d.ts +15 -0
- package/dist/core/lbug/csv-generator.js +124 -27
- package/dist/core/lbug/cypher-escape.d.ts +20 -0
- package/dist/core/lbug/cypher-escape.js +20 -0
- package/dist/core/lbug/extension-load-error.d.ts +67 -0
- package/dist/core/lbug/extension-load-error.js +326 -0
- package/dist/core/lbug/extension-loader.d.ts +17 -2
- package/dist/core/lbug/extension-loader.js +38 -13
- package/dist/core/lbug/lbug-adapter.d.ts +203 -2
- package/dist/core/lbug/lbug-adapter.js +527 -86
- package/dist/core/lbug/lbug-config.d.ts +56 -2
- package/dist/core/lbug/lbug-config.js +267 -7
- package/dist/core/lbug/move-columns.d.ts +7 -0
- package/dist/core/lbug/move-columns.js +86 -0
- package/dist/core/lbug/native-check.d.ts +40 -0
- package/dist/core/lbug/native-check.js +90 -0
- package/dist/core/lbug/node-table-layout.d.ts +29 -0
- package/dist/core/lbug/node-table-layout.js +119 -0
- package/dist/core/lbug/pool-adapter.d.ts +23 -1
- package/dist/core/lbug/pool-adapter.js +115 -8
- package/dist/core/lbug/schema.d.ts +4 -3
- package/dist/core/lbug/schema.js +16 -16
- package/dist/core/lbug/sidecar-recovery.d.ts +172 -0
- package/dist/core/lbug/sidecar-recovery.js +418 -16
- package/dist/core/lbug/wal-checkpoint-driver.js +3 -0
- package/dist/core/move/artifact-download.d.ts +19 -0
- package/dist/core/move/artifact-download.js +179 -0
- package/dist/core/move/compiler-facts.d.ts +120 -0
- package/dist/core/move/compiler-facts.js +9 -0
- package/dist/core/move/consistency.d.ts +74 -0
- package/dist/core/move/consistency.js +182 -0
- package/dist/core/move/constants.d.ts +98 -0
- package/dist/core/move/constants.js +136 -0
- package/dist/core/move/discovery.d.ts +10 -0
- package/dist/core/move/discovery.js +22 -0
- package/dist/core/move/entry-points.d.ts +14 -0
- package/dist/core/move/entry-points.js +40 -0
- package/dist/core/move/facts-mapper.d.ts +75 -0
- package/dist/core/move/facts-mapper.js +534 -0
- package/dist/core/move/install-lock.d.ts +14 -0
- package/dist/core/move/install-lock.js +102 -0
- package/dist/core/move/install.d.ts +39 -0
- package/dist/core/move/install.js +391 -0
- package/dist/core/move/mcp-client.d.ts +115 -0
- package/dist/core/move/mcp-client.js +436 -0
- package/dist/core/move/move-ingest.d.ts +52 -0
- package/dist/core/move/move-ingest.js +403 -0
- package/dist/core/move/provision.d.ts +19 -0
- package/dist/core/move/provision.js +91 -0
- package/dist/core/move/release.d.ts +6 -0
- package/dist/core/move/release.js +10 -0
- package/dist/core/move/symbol-id.d.ts +35 -0
- package/dist/core/move/symbol-id.js +65 -0
- package/dist/core/move/type-parser.d.ts +11 -0
- package/dist/core/move/type-parser.js +38 -0
- package/dist/core/platform/capabilities.d.ts +0 -1
- package/dist/core/platform/capabilities.js +39 -8
- package/dist/core/run-analyze.d.ts +9 -3
- package/dist/core/run-analyze.js +1002 -184
- package/dist/core/search/fts-indexes.d.ts +31 -0
- package/dist/core/search/fts-indexes.js +73 -0
- package/dist/core/search/fts-schema.js +2 -0
- package/dist/core/tree-sitter/safe-parse.d.ts +8 -3
- package/dist/core/tree-sitter/safe-parse.js +21 -7
- package/dist/core/wiki/graph-queries.js +6 -5
- package/dist/core/wiki/llm-client.d.ts +8 -2
- package/dist/core/wiki/llm-client.js +41 -5
- package/dist/mcp/core/embedder.js +16 -2
- package/dist/mcp/http-transport.d.ts +5 -0
- package/dist/mcp/http-transport.js +19 -5
- package/dist/mcp/local/bean-metadata.d.ts +2 -0
- package/dist/mcp/local/bean-metadata.js +25 -0
- package/dist/mcp/local/line-display.d.ts +22 -0
- package/dist/mcp/local/line-display.js +3 -0
- package/dist/mcp/local/local-backend.d.ts +19 -1
- package/dist/mcp/local/local-backend.js +402 -155
- package/dist/mcp/local/pdg-impact.d.ts +5 -3
- package/dist/mcp/local/pdg-impact.js +5 -2
- package/dist/mcp/output-budget.d.ts +5 -0
- package/dist/mcp/output-budget.js +52 -0
- package/dist/mcp/read-only-policy.d.ts +12 -0
- package/dist/mcp/read-only-policy.js +102 -0
- package/dist/mcp/repository-policy.d.ts +34 -0
- package/dist/mcp/repository-policy.js +328 -0
- package/dist/mcp/resources.js +32 -5
- package/dist/mcp/server.d.ts +5 -2
- package/dist/mcp/server.js +29 -9
- package/dist/mcp/tools.d.ts +0 -8
- package/dist/mcp/tools.js +102 -5
- package/dist/server/analyze-job.d.ts +3 -0
- package/dist/server/analyze-job.js +17 -0
- package/dist/server/analyze-launch.d.ts +6 -0
- package/dist/server/analyze-launch.js +82 -6
- package/dist/server/analyze-worker-core.d.ts +2 -1
- package/dist/server/analyze-worker-core.js +5 -2
- package/dist/server/analyze-worker.js +29 -6
- package/dist/server/api.d.ts +30 -0
- package/dist/server/api.js +120 -34
- package/dist/server/mcp-http.d.ts +1 -1
- package/dist/server/mcp-http.js +4 -2
- package/dist/server/upload-ingest.js +2 -1
- package/dist/server/validation.js +2 -1
- package/dist/storage/git.d.ts +31 -0
- package/dist/storage/git.js +111 -1
- package/dist/storage/parse-cache.js +7 -1
- package/dist/storage/parsedfile-store.d.ts +8 -0
- package/dist/storage/parsedfile-store.js +165 -1
- package/dist/storage/repo-manager.d.ts +194 -2
- package/dist/storage/repo-manager.js +56 -1
- package/dist/types/pipeline.d.ts +7 -0
- package/hooks/antigravity/gitnexus-antigravity-hook.cjs +50 -3
- package/hooks/claude/gitnexus-hook.cjs +59 -9
- package/hooks/claude/pre-tool-use.sh +0 -0
- package/hooks/claude/session-start.sh +0 -0
- package/package.json +21 -15
- package/scripts/cross-platform-tests.ts +56 -0
- package/scripts/ensure-fts.ts +43 -0
- package/scripts/install-duckdb-extension.mjs +85 -24
- package/scripts/run-cross-platform.ts +61 -6
- package/scripts/shard-arg.ts +30 -0
- package/scripts/sync-plugin-manifests.mjs +192 -0
- package/skills/gitnexus-lfg/README.md +55 -0
- package/skills/gitnexus-lfg/SKILL.md +86 -0
- package/skills/gitnexus-plan/README.md +142 -0
- package/skills/gitnexus-plan/SKILL.md +348 -0
- package/skills/gitnexus-plan/references/context-ledger.md +137 -0
- package/skills/gitnexus-plan/references/context-pack.md +126 -0
- package/skills/gitnexus-plan/references/evidence-provenance.md +272 -0
- package/skills/gitnexus-plan/references/pdg-slice.md +109 -0
- package/skills/gitnexus-plan/references/plan-template.md +201 -0
- package/skills/gitnexus-plan/scripts/evidence-provenance.mjs +2084 -0
- package/skills/gitnexus-review/SKILL.md +273 -0
- package/skills/gitnexus-review/ci-personas/ci-adversarial-lens.md +42 -0
- package/skills/gitnexus-review/ci-personas/ci-blast-radius-lens.md +39 -0
- package/skills/gitnexus-review/ci-personas/ci-correctness-lens.md +37 -0
- package/skills/gitnexus-review/ci-personas/ci-coverage-lens.md +40 -0
- package/skills/gitnexus-review/ci-personas/ci-critic-lens.md +42 -0
- package/skills/gitnexus-review/ci-personas/ci-security-lens.md +39 -0
- package/skills/gitnexus-work/README.md +71 -0
- package/skills/gitnexus-work/SKILL.md +269 -0
- package/skills/gitnexus-work/references/evidence-provenance.md +272 -0
- package/skills/gitnexus-work/scripts/evidence-provenance.mjs +2084 -0
- package/web/assets/ProcessFlowModal-B_bfBySy.js +22 -0
- package/web/assets/__vite-browser-external-bMKyYQkO.js +1 -0
- package/web/assets/agent-Bqxn-abU.js +626 -0
- package/web/assets/architecture-7EHR7CIX-6QZW5X65-BVWFvYz2.js +1 -0
- package/web/assets/architectureDiagram-UL44E2DR-CmG3uPWf.js +36 -0
- package/web/assets/{blockDiagram-7IZFK4PR-BkWhpzWB.js → blockDiagram-7IZFK4PR-DBefcjof.js} +7 -7
- package/web/assets/{c4Diagram-Y2BXMSZH-DtBvpzWD.js → c4Diagram-Y2BXMSZH-EjWnjEJl.js} +6 -6
- package/web/assets/chunk-2T2R6R2M-Bb6Sy3_j.js +4 -0
- package/web/assets/chunk-2UTLFMKG-CXlhF3Pt.js +1 -0
- package/web/assets/chunk-3SSMPTDK-rPsRM1x0.js +321 -0
- package/web/assets/chunk-4R4BOZG6-Be_F0JoX.js +159 -0
- package/web/assets/{chunk-6764PJDD-DpIS7hxD.js → chunk-6764PJDD-C7xxk063.js} +1 -1
- package/web/assets/chunk-67TQ5CYL-CA7OhIEf.js +124 -0
- package/web/assets/chunk-7FYTHRHK-CsmYIswB.js +32 -0
- package/web/assets/chunk-7J6CGLKN-BlKwgXKs.js +10 -0
- package/web/assets/chunk-7W6UQGC5-pyKGssV3.js +1 -0
- package/web/assets/chunk-C62D2QBJ-3gdL8EKc.js +1 -0
- package/web/assets/chunk-CEXFNPSA-CjwtMDkc.js +1 -0
- package/web/assets/{chunk-INKRHTLW-Nu4ri9P-.js → chunk-INKRHTLW-Ckl3_KkO.js} +13 -13
- package/web/assets/chunk-J5EP6P6S-L19oz55R.js +1 -0
- package/web/assets/{chunk-KGFNY3KK-JGMJvKCK.js → chunk-KGFNY3KK-BZeP-55u.js} +17 -17
- package/web/assets/chunk-KGYTTC2M-zm6n242I.js +1 -0
- package/web/assets/{chunk-KRXBNO2N-BW5o0KUN.js → chunk-KRXBNO2N-C-UNuKKf.js} +1 -1
- package/web/assets/{chunk-LCXTWHL2-CfLLCywY.js → chunk-LCXTWHL2-C162wE5z.js} +5 -5
- package/web/assets/chunk-LII3EMHJ-BL6lKJ_P.js +1 -0
- package/web/assets/chunk-LRIF4GLE-n59lhprL.js +1 -0
- package/web/assets/chunk-QA3QBVWF-DVXPOIxe.js +2 -0
- package/web/assets/chunk-RERM46MO-B5dAdWpP.js +1 -0
- package/web/assets/chunk-RG4AUYOV-ZNgyLFq6.js +206 -0
- package/web/assets/chunk-RKZBBQEN-MyIQbGgD.js +1 -0
- package/web/assets/chunk-RLI5ZMPA-CkXZ0y0U.js +1 -0
- package/web/assets/chunk-T2UQINTJ-BEyXhZWe.js +1 -0
- package/web/assets/chunk-UP6H54XL-BG-n7qDp.js +1 -0
- package/web/assets/chunk-UXSXWOXI-CW1_r5cS.js +1 -0
- package/web/assets/chunk-UY5QBCOK-ByqTVLvh.js +1 -0
- package/web/assets/chunk-VU6ZFW4Y-BLeasdkU.js +2 -0
- package/web/assets/{chunk-W44A43WB-JqMLIpR0.js → chunk-W44A43WB-BN8EQc_u.js} +1 -1
- package/web/assets/chunk-ZXARS5L4-C3v-4Fsw.js +1 -0
- package/web/assets/classDiagram-KGZ6W3CR-olpO3fMe.js +1 -0
- package/web/assets/classDiagram-v2-72OJOZXJ-olpO3fMe.js +1 -0
- package/web/assets/cose-bilkent-UX7MHV2Q-BmnZ7Mvj.js +1 -0
- package/web/assets/dagre-ND4H6XIP-CY4iIF7v.js +4 -0
- package/web/assets/diagram-3NCE3AQN-CO6QpzEE.js +43 -0
- package/web/assets/diagram-GF46GFSD-B2atbzmU.js +24 -0
- package/web/assets/diagram-HNR7UZ2L-DVRltWbL.js +3 -0
- package/web/assets/diagram-QXG6HAR7-DR6AHD2h.js +24 -0
- package/web/assets/diagram-WEQXMOUZ-DkpoMwTL.js +10 -0
- package/web/assets/erDiagram-L5TCEMPS-n8g_90bc.js +85 -0
- package/web/assets/eventmodeling-FCH6USID-MREXMVOE-CgFBM7e-.js +1 -0
- package/web/assets/flowDiagram-H6V6AXG4-SGMDiCkB.js +162 -0
- package/web/assets/ganttDiagram-JCBTUEKG-Cb3UBqRS.js +292 -0
- package/web/assets/gitGraph-WXDBUCRP-R675I2BI-DCJv7SII.js +1 -0
- package/web/assets/gitGraphDiagram-S2ZK5IYY-Bs9CR7tq.js +106 -0
- package/web/assets/index-CX_fADmQ.css +2 -0
- package/web/assets/index-D1Z3dGGz.js +575 -0
- package/web/assets/info-J43DQDTF-KCYPFFUO-BfNy-9Nd.js +1 -0
- package/web/assets/infoDiagram-3YFTVSEB-T368on4D.js +2 -0
- package/web/assets/{ishikawaDiagram-BNXS4ZKH-DfYpxnE5.js → ishikawaDiagram-BNXS4ZKH-XpjJRU9h.js} +6 -6
- package/web/assets/journeyDiagram-M6C3CM3L-C6wjooas.js +139 -0
- package/web/assets/kanban-definition-75IXJCU3-5_UVY79g.js +89 -0
- package/web/assets/{katex-K3KEBU37-CTc5BslQ.js → katex-K3KEBU37-qRQBy-EZ.js} +2 -2
- package/web/assets/{mindmap-definition-2TDM6QVE-DypvbOMQ.js → mindmap-definition-2TDM6QVE-8xDLzk2e.js} +29 -29
- package/web/assets/node-Ct_zna8U.js +8 -0
- package/web/assets/packet-YPE3B663-LP52Z2RK-D4qkeG9k.js +1 -0
- package/web/assets/pie-LRSECV5Y-TCRJHUBD-B_yMKyQa.js +1 -0
- package/web/assets/pieDiagram-CU6KROY3-Bv4LpAbr.js +30 -0
- package/web/assets/preload-helper-Czpn1I53.js +1 -0
- package/web/assets/{quadrantDiagram-VICAPDV7-yXSZ2lLz.js → quadrantDiagram-VICAPDV7-DR54jOeR.js} +6 -6
- package/web/assets/radar-GUYGQ44K-RDLRG3WG-DeD6yN_0.js +1 -0
- package/web/assets/requirementDiagram-JXO7QTGE-PEkg7sKC.js +84 -0
- package/web/assets/rolldown-runtime-QTnfLwEv.js +1 -0
- package/web/assets/sankeyDiagram-URQDO5SZ-DDWEtjcs.js +40 -0
- package/web/assets/sdk-CzHHH8tD.js +37 -0
- package/web/assets/sequenceDiagram-VS2MUI6T-Bv-uwANx.js +162 -0
- package/web/assets/src-JV30wyV8.js +1 -0
- package/web/assets/stateDiagram-7D4R322I-DVNjmkEq.js +1 -0
- package/web/assets/stateDiagram-v2-36443NZ5-CyN4Fh7_.js +1 -0
- package/web/assets/timeline-definition-O6YCAMPW-Qmsuo7qS.js +120 -0
- package/web/assets/treeView-BLDUP644-QA4HXRO3-CDuSYnd4.js +1 -0
- package/web/assets/treemap-LRROVOQU-LLAWBHMP-imazucyJ.js +1 -0
- package/web/assets/vennDiagram-MWXL3ELB-BD1iK1SX.js +34 -0
- package/web/assets/wardley-L42UT6IY-5TKZOOLJ-DqrT9tB8.js +1 -0
- package/web/assets/wardleyDiagram-CUQ6CDDI-D6TzLVob.js +78 -0
- package/web/assets/{xychartDiagram-N2JHSOCM-BOLm0eNm.js → xychartDiagram-N2JHSOCM-CoZ_Tits.js} +6 -6
- package/web/index.html +18 -10
- package/skills/gitnexus-pr-review.md +0 -163
- package/web/assets/agent-Dli_x7bU.js +0 -660
- package/web/assets/architecture-7EHR7CIX-6QZW5X65-DxJw65fT.js +0 -1
- package/web/assets/architectureDiagram-UL44E2DR-dEkqUZN9.js +0 -36
- package/web/assets/chunk-3SSMPTDK-B4_etUhr.js +0 -321
- package/web/assets/chunk-67TQ5CYL-4sNPJU1q.js +0 -124
- package/web/assets/chunk-7W6UQGC5-KyEG0HQg.js +0 -1
- package/web/assets/chunk-KGYTTC2M-CWC_c3H9.js +0 -161
- package/web/assets/chunk-LII3EMHJ-D-jm-dLa.js +0 -1
- package/web/assets/chunk-QA3QBVWF-BgRW3SXd.js +0 -2
- package/web/assets/chunk-RG4AUYOV-CqWzWsV3.js +0 -206
- package/web/assets/chunk-T2UQINTJ-DSBqkzH7.js +0 -1
- package/web/assets/chunk-UY5QBCOK-DyF0vyGd.js +0 -1
- package/web/assets/chunk-ZXARS5L4-CxN8oiwI.js +0 -1
- package/web/assets/classDiagram-KGZ6W3CR-CMne4tG9.js +0 -1
- package/web/assets/classDiagram-v2-72OJOZXJ-CMne4tG9.js +0 -1
- package/web/assets/cose-bilkent-UX7MHV2Q-D71wNYRJ.js +0 -1
- package/web/assets/dagre-ND4H6XIP-Co5rRx9X.js +0 -4
- package/web/assets/diagram-3NCE3AQN-DBp4O00j.js +0 -43
- package/web/assets/diagram-GF46GFSD-6N_8yS0i.js +0 -24
- package/web/assets/diagram-HNR7UZ2L-DFCfd5LI.js +0 -3
- package/web/assets/diagram-QXG6HAR7-Di093rFg.js +0 -24
- package/web/assets/diagram-WEQXMOUZ-DZWi4SUN.js +0 -10
- package/web/assets/erDiagram-L5TCEMPS-8X1y6R4Y.js +0 -85
- package/web/assets/eventmodeling-FCH6USID-MREXMVOE-BQm9QzEa.js +0 -1
- package/web/assets/flowDiagram-H6V6AXG4-CMpY8Ufn.js +0 -162
- package/web/assets/ganttDiagram-JCBTUEKG-D3iL2Aet.js +0 -292
- package/web/assets/gitGraph-WXDBUCRP-R675I2BI-Cr_Bm2Nb.js +0 -1
- package/web/assets/gitGraphDiagram-S2ZK5IYY-CPIDgxGm.js +0 -106
- package/web/assets/index-KctnI3Vq.js +0 -635
- package/web/assets/index-_lgn7hs5.css +0 -2
- package/web/assets/info-J43DQDTF-KCYPFFUO-Cs4p2oyk.js +0 -1
- package/web/assets/infoDiagram-3YFTVSEB-BaLMZkUg.js +0 -2
- package/web/assets/journeyDiagram-M6C3CM3L-CvArszLo.js +0 -139
- package/web/assets/kanban-definition-75IXJCU3-CpfVLLf9.js +0 -89
- package/web/assets/packet-YPE3B663-LP52Z2RK-CKCrztD2.js +0 -1
- package/web/assets/pie-LRSECV5Y-TCRJHUBD-BB7pHqoD.js +0 -1
- package/web/assets/pieDiagram-CU6KROY3-s27EFWgP.js +0 -30
- package/web/assets/radar-GUYGQ44K-RDLRG3WG-DhoTOcuK.js +0 -1
- package/web/assets/requirementDiagram-JXO7QTGE-CWhqInuf.js +0 -84
- package/web/assets/sankeyDiagram-URQDO5SZ-1qEjlFIB.js +0 -40
- package/web/assets/sequenceDiagram-VS2MUI6T-RyTlZ5cR.js +0 -162
- package/web/assets/stateDiagram-7D4R322I-DTjVfX4A.js +0 -1
- package/web/assets/stateDiagram-v2-36443NZ5-xY9_k9_Q.js +0 -1
- package/web/assets/timeline-definition-O6YCAMPW-DrrqLYAf.js +0 -120
- package/web/assets/treeView-BLDUP644-QA4HXRO3-ODehyGKL.js +0 -1
- package/web/assets/treemap-LRROVOQU-LLAWBHMP-BfpgC-7o.js +0 -1
- package/web/assets/vennDiagram-MWXL3ELB-B0RkWAim.js +0 -34
- package/web/assets/wardley-L42UT6IY-5TKZOOLJ-CNeL6VHE.js +0 -1
- package/web/assets/wardleyDiagram-CUQ6CDDI-boUxiQ5F.js +0 -78
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Fail-closed version sync for the plugin manifest surfaces (#2445).
|
|
4
|
+
*
|
|
5
|
+
* `publish.yml` bumps only `gitnexus/package.json` when it cuts an RC, so
|
|
6
|
+
* every RC tag through v1.6.10-rc.28 shipped manifests frozen at the last
|
|
7
|
+
* stable version and failed its own unit suite (the cli-commands version
|
|
8
|
+
* contract). This script pins every version-bearing plugin surface to the
|
|
9
|
+
* package version:
|
|
10
|
+
*
|
|
11
|
+
* - gitnexus-claude-plugin/.claude-plugin/plugin.json (top-level version)
|
|
12
|
+
* - .claude-plugin/marketplace.json (plugins[gitnexus])
|
|
13
|
+
* - gitnexus-claude-plugin/.codex-plugin/plugin.json (top-level version)
|
|
14
|
+
* - .agents/plugins/marketplace.json (plugins[gitnexus])
|
|
15
|
+
* - gitnexus-claude-plugin/skills/<skill>/mcp.json (gitnexus@<version> launch arg, x10)
|
|
16
|
+
*
|
|
17
|
+
* Modes:
|
|
18
|
+
* node scripts/sync-plugin-manifests.mjs rewrite stale surfaces
|
|
19
|
+
* node scripts/sync-plugin-manifests.mjs --check verify only, exit 1 on drift
|
|
20
|
+
*
|
|
21
|
+
* Fail-closed: a missing file, unparseable JSON, an absent version field, or
|
|
22
|
+
* anything other than exactly one `gitnexus` marketplace entry aborts with a
|
|
23
|
+
* non-zero exit rather than letting a release ship a partial sync.
|
|
24
|
+
*/
|
|
25
|
+
import { readFileSync, writeFileSync } from 'node:fs';
|
|
26
|
+
import path from 'node:path';
|
|
27
|
+
import { fileURLToPath } from 'node:url';
|
|
28
|
+
|
|
29
|
+
// Plugin skill mcp.json are executable MCP definitions (they launch
|
|
30
|
+
// `npx -y gitnexus@<version> mcp` when a skill starts), not quickstart docs, so
|
|
31
|
+
// they must ship pinned to the released version and be auto-stamped here like
|
|
32
|
+
// the other surfaces — otherwise every skill invocation pulls whatever owns
|
|
33
|
+
// `gitnexus@latest`, independent of the reviewed plugin version. All ten are
|
|
34
|
+
// kept byte-identical (the shipped-skills-sync drift guard enforces it).
|
|
35
|
+
const PLUGIN_SKILL_MCP_DIRS = [
|
|
36
|
+
'gitnexus-plan',
|
|
37
|
+
'gitnexus-work',
|
|
38
|
+
'gitnexus-review',
|
|
39
|
+
'gitnexus-lfg',
|
|
40
|
+
'gitnexus-guide',
|
|
41
|
+
'gitnexus-cli',
|
|
42
|
+
'gitnexus-debugging',
|
|
43
|
+
'gitnexus-exploring',
|
|
44
|
+
'gitnexus-impact-analysis',
|
|
45
|
+
'gitnexus-refactoring',
|
|
46
|
+
];
|
|
47
|
+
|
|
48
|
+
const MANIFEST_SURFACES = [
|
|
49
|
+
{ file: 'gitnexus-claude-plugin/.claude-plugin/plugin.json', kind: 'plugin' },
|
|
50
|
+
{ file: '.claude-plugin/marketplace.json', kind: 'marketplace' },
|
|
51
|
+
{ file: 'gitnexus-claude-plugin/.codex-plugin/plugin.json', kind: 'plugin' },
|
|
52
|
+
{ file: '.agents/plugins/marketplace.json', kind: 'marketplace' },
|
|
53
|
+
...PLUGIN_SKILL_MCP_DIRS.map((name) => ({
|
|
54
|
+
file: `gitnexus-claude-plugin/skills/${name}/mcp.json`,
|
|
55
|
+
kind: 'mcp',
|
|
56
|
+
})),
|
|
57
|
+
];
|
|
58
|
+
|
|
59
|
+
const PLUGIN_NAME = 'gitnexus';
|
|
60
|
+
|
|
61
|
+
function readJson(filePath) {
|
|
62
|
+
let raw;
|
|
63
|
+
try {
|
|
64
|
+
raw = readFileSync(filePath, 'utf8');
|
|
65
|
+
} catch (err) {
|
|
66
|
+
throw new Error(`Cannot read manifest surface ${filePath}: ${err.message}`);
|
|
67
|
+
}
|
|
68
|
+
try {
|
|
69
|
+
return { raw, parsed: JSON.parse(raw) };
|
|
70
|
+
} catch (err) {
|
|
71
|
+
throw new Error(`Manifest surface ${filePath} is not valid JSON: ${err.message}`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
function versionTarget(manifest, kind, filePath) {
|
|
76
|
+
if (kind === 'plugin') {
|
|
77
|
+
if (typeof manifest.version !== 'string' || manifest.version.length === 0) {
|
|
78
|
+
throw new Error(`Manifest surface ${filePath} has no version field to sync`);
|
|
79
|
+
}
|
|
80
|
+
return manifest;
|
|
81
|
+
}
|
|
82
|
+
const entries = (Array.isArray(manifest.plugins) ? manifest.plugins : []).filter(
|
|
83
|
+
(plugin) => plugin?.name === PLUGIN_NAME,
|
|
84
|
+
);
|
|
85
|
+
if (entries.length !== 1) {
|
|
86
|
+
throw new Error(
|
|
87
|
+
`Manifest surface ${filePath} must contain exactly one "${PLUGIN_NAME}" plugin entry, found ${entries.length}`,
|
|
88
|
+
);
|
|
89
|
+
}
|
|
90
|
+
if (typeof entries[0].version !== 'string' || entries[0].version.length === 0) {
|
|
91
|
+
throw new Error(`Manifest surface ${filePath} has no version field to sync`);
|
|
92
|
+
}
|
|
93
|
+
return entries[0];
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Resolve the current pinned version and the textual needle for one surface.
|
|
98
|
+
* `plugin`/`marketplace` pin a JSON `"version"` field; `mcp` pins the version
|
|
99
|
+
* inside the `gitnexus@<version>` launch arg. Returns `{ from, needle }` where
|
|
100
|
+
* `needle(v)` renders the exact substring to match/replace for version `v`.
|
|
101
|
+
* Fail-closed on a missing/ambiguous target.
|
|
102
|
+
*/
|
|
103
|
+
function versionInfo(manifest, kind, filePath) {
|
|
104
|
+
if (kind === 'mcp') {
|
|
105
|
+
const server = manifest?.mcpServers?.[PLUGIN_NAME];
|
|
106
|
+
const args = Array.isArray(server?.args) ? server.args : [];
|
|
107
|
+
const pins = args.filter((arg) => typeof arg === 'string' && arg.startsWith(`${PLUGIN_NAME}@`));
|
|
108
|
+
if (pins.length !== 1) {
|
|
109
|
+
throw new Error(
|
|
110
|
+
`Manifest surface ${filePath} must contain exactly one "${PLUGIN_NAME}@<version>" launch arg, found ${pins.length}`,
|
|
111
|
+
);
|
|
112
|
+
}
|
|
113
|
+
const from = pins[0].slice(`${PLUGIN_NAME}@`.length);
|
|
114
|
+
if (from.length === 0) {
|
|
115
|
+
throw new Error(`Manifest surface ${filePath} has an empty ${PLUGIN_NAME}@ version`);
|
|
116
|
+
}
|
|
117
|
+
return { from, needle: (value) => `${PLUGIN_NAME}@${value}` };
|
|
118
|
+
}
|
|
119
|
+
const target = versionTarget(manifest, kind, filePath);
|
|
120
|
+
return { from: target.version, needle: (value) => `"version": "${value}"` };
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Sync (or with `check: true`, only inspect) every manifest surface under
|
|
125
|
+
* `rootDir`. Returns `{ version, synced, stale }` where `stale` lists the
|
|
126
|
+
* surfaces that did not match the package version when the run started.
|
|
127
|
+
*/
|
|
128
|
+
export function syncPluginManifests(rootDir, { check = false } = {}) {
|
|
129
|
+
const pkgPath = path.join(rootDir, 'gitnexus', 'package.json');
|
|
130
|
+
const version = readJson(pkgPath).parsed.version;
|
|
131
|
+
if (typeof version !== 'string' || version.length === 0) {
|
|
132
|
+
throw new Error(`No version found in ${pkgPath}`);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
const synced = [];
|
|
136
|
+
const stale = [];
|
|
137
|
+
for (const { file, kind } of MANIFEST_SURFACES) {
|
|
138
|
+
const manifestPath = path.join(rootDir, file);
|
|
139
|
+
const { raw, parsed } = readJson(manifestPath);
|
|
140
|
+
const { from, needle } = versionInfo(parsed, kind, manifestPath);
|
|
141
|
+
if (from === version) continue;
|
|
142
|
+
|
|
143
|
+
stale.push({ file, from });
|
|
144
|
+
if (check) continue;
|
|
145
|
+
|
|
146
|
+
// Textual surgery instead of re-serializing: JSON.stringify would refold
|
|
147
|
+
// arrays and fight prettier, turning a one-line version bump into
|
|
148
|
+
// formatting churn inside the release commit. The needle is built from
|
|
149
|
+
// the current pinned value, and anything other than exactly one
|
|
150
|
+
// occurrence aborts rather than guessing.
|
|
151
|
+
const currentNeedle = needle(from);
|
|
152
|
+
const occurrences = raw.split(currentNeedle).length - 1;
|
|
153
|
+
if (occurrences !== 1) {
|
|
154
|
+
throw new Error(
|
|
155
|
+
`Manifest surface ${manifestPath} has ${occurrences} occurrences of ${currentNeedle}; ` +
|
|
156
|
+
'expected exactly one, refusing to sync',
|
|
157
|
+
);
|
|
158
|
+
}
|
|
159
|
+
writeFileSync(manifestPath, raw.replace(currentNeedle, needle(version)));
|
|
160
|
+
synced.push(file);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
return { version, synced, stale };
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
const invokedDirectly =
|
|
167
|
+
process.argv[1] !== undefined && path.resolve(process.argv[1]) === fileURLToPath(import.meta.url);
|
|
168
|
+
|
|
169
|
+
if (invokedDirectly) {
|
|
170
|
+
const check = process.argv.includes('--check');
|
|
171
|
+
const rootDir = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..', '..');
|
|
172
|
+
const result = syncPluginManifests(rootDir, { check });
|
|
173
|
+
|
|
174
|
+
if (check && result.stale.length > 0) {
|
|
175
|
+
for (const { file, from } of result.stale) {
|
|
176
|
+
console.error(
|
|
177
|
+
`::error::${file} is at ${from} but gitnexus/package.json is at ${result.version}. ` +
|
|
178
|
+
'Run `node gitnexus/scripts/sync-plugin-manifests.mjs` and commit the result.',
|
|
179
|
+
);
|
|
180
|
+
}
|
|
181
|
+
process.exit(1);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
for (const file of result.synced) {
|
|
185
|
+
console.log(`synced ${file} -> ${result.version}`);
|
|
186
|
+
}
|
|
187
|
+
console.log(
|
|
188
|
+
result.stale.length === 0 && result.synced.length === 0
|
|
189
|
+
? `all plugin manifests already at ${result.version}`
|
|
190
|
+
: `plugin manifests now at ${result.version}`,
|
|
191
|
+
);
|
|
192
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# gitnexus-lfg — plan → gate → work → review
|
|
2
|
+
|
|
3
|
+
Thin pipeline orchestrator over three existing skills: `gitnexus-plan`
|
|
4
|
+
produces the plan (asking up front how deep to go), the user chooses at a
|
|
5
|
+
blocking gate to proceed or stop (an explicit deepen request is still
|
|
6
|
+
honored), `gitnexus-work` executes it as verified atomic commits, and
|
|
7
|
+
`gitnexus-review` reviews the result (the open PR if one exists, else the
|
|
8
|
+
branch diff against the default branch). One bounded fix cycle for review
|
|
9
|
+
findings, then a final report. It never pushes or opens a PR on its own.
|
|
10
|
+
|
|
11
|
+
## Invocation
|
|
12
|
+
|
|
13
|
+
| CLI | How to invoke |
|
|
14
|
+
|-----|---------------|
|
|
15
|
+
| **Claude Code** | `/gitnexus-lfg <task description>` or `/gitnexus-lfg docs/plans/<plan>.md` |
|
|
16
|
+
| **Codex CLI** | Ask: "run the gitnexus pipeline on <task>" (Codex reads `AGENTS.md`), or install the skill user-level (below) |
|
|
17
|
+
|
|
18
|
+
### Codex (user-level install)
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
cp -r .claude/skills/gitnexus-lfg ~/.agents/skills/gitnexus-lfg
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Optionally, for an explicit slash command, create
|
|
25
|
+
`~/.codex/prompts/gitnexus-lfg.md`:
|
|
26
|
+
|
|
27
|
+
```markdown
|
|
28
|
+
---
|
|
29
|
+
description: GitNexus pipeline — plan (depth asked up front), user gate, work, PR review
|
|
30
|
+
argument-hint: <task description or plan path>
|
|
31
|
+
---
|
|
32
|
+
Use the gitnexus-lfg skill for: $ARGUMENTS
|
|
33
|
+
|
|
34
|
+
Read `~/.agents/skills/gitnexus-lfg/SKILL.md` (prefer the repo copy at
|
|
35
|
+
`.claude/skills/gitnexus-lfg/SKILL.md` when present) and follow its lanes in
|
|
36
|
+
order, invoking the real gitnexus-plan / gitnexus-work / gitnexus-review
|
|
37
|
+
skills for each lane. Stop at the plan gate for the user's choice.
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## The three lanes
|
|
41
|
+
|
|
42
|
+
| Lane | Skill | Gate |
|
|
43
|
+
|------|-------|------|
|
|
44
|
+
| Plan | `gitnexus-plan` (`.claude/skills/gitnexus-plan/`) | Depth asked up front; blocking gate: proceed / stop |
|
|
45
|
+
| Work | `gitnexus-work` (`.claude/skills/gitnexus-work/`) | Structural drift routes back to the plan gate |
|
|
46
|
+
| Review | `gitnexus-review` (`.claude/skills/gitnexus-review/`) | One fix cycle max, then report |
|
|
47
|
+
|
|
48
|
+
## Threshold governance (maintainers)
|
|
49
|
+
|
|
50
|
+
The Lane 1 planning boundary (~35 turns) is a promoted benchmark policy from
|
|
51
|
+
the GitNexus repository's `eval/workflow_bench/` paired candidate loop.
|
|
52
|
+
Re-evaluate it offline whenever the named model or tool harness changes, and
|
|
53
|
+
at least every 90 days; update the SKILL.md threshold only after the
|
|
54
|
+
deterministic promotion gate shows no quality regression. Reading agents
|
|
55
|
+
never self-edit it from a live task.
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gitnexus-lfg
|
|
3
|
+
description: "Use when the user wants the GitNexus engineering pipeline run end-to-end on a task: gitnexus-plan (plan depth chosen up front), a blocking gate to execute with gitnexus-work or stop, finishing with a gitnexus-review of the result. Examples: \"/gitnexus-lfg Add retry support to the ingestion pipeline\", \"run the gitnexus pipeline on this\", \"plan, build and review this feature\"."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# gitnexus-lfg — plan → gate → work → review
|
|
7
|
+
|
|
8
|
+
Thin orchestrator over three existing skills. It adds no engineering logic of
|
|
9
|
+
its own — it sequences `gitnexus-plan`, `gitnexus-work`, and
|
|
10
|
+
`gitnexus-review`, with the user deciding at the plan gate. Run every lane
|
|
11
|
+
by actually invoking the named skill (read its SKILL.md and follow it);
|
|
12
|
+
never inline a summary of what the skill would have done.
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
/gitnexus-lfg <task description>
|
|
16
|
+
/gitnexus-lfg docs/plans/<existing-plan>.md # skip lane 1, start at the gate
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Lane 1 — Plan
|
|
20
|
+
|
|
21
|
+
**Boundary triage first.** If the task is plainly below the planning
|
|
22
|
+
boundary — trivial or small-bounded work an agent finishes in well under ~35
|
|
23
|
+
turns (the measured regime where a planning pass costs more than it returns;
|
|
24
|
+
measured in the GitNexus repository's `eval/workflow_bench/`) — say so and
|
|
25
|
+
offer `gitnexus-work` direct mode as an alternative to the full pipeline
|
|
26
|
+
before spending the plan lane. Honor the user's choice.
|
|
27
|
+
|
|
28
|
+
The threshold is a promoted benchmark policy measured offline, not a
|
|
29
|
+
timeless heuristic — never self-edit it from a live task. Its re-evaluation
|
|
30
|
+
governance lives in this skill's README.
|
|
31
|
+
|
|
32
|
+
Otherwise invoke `gitnexus-plan` with the task (knob overrides pass through
|
|
33
|
+
verbatim; `gitnexus-plan` owns the up-front depth question — never ask it
|
|
34
|
+
again here). If the input is already a plan file path, skip to Lane 2. The
|
|
35
|
+
plan lands in `docs/plans/` — record its path; every later lane consumes it.
|
|
36
|
+
|
|
37
|
+
## Lane 2 — The plan gate (user choice, blocking)
|
|
38
|
+
|
|
39
|
+
Present the plan's chat summary (objective, proposed changes, sequence, top
|
|
40
|
+
risks, open questions, plan path), then ask the user — as a blocking
|
|
41
|
+
question (`AskUserQuestion` in Claude Code; a numbered list in chat on CLIs
|
|
42
|
+
without a blocking tool):
|
|
43
|
+
|
|
44
|
+
1. **Proceed to work** — continue to Lane 3.
|
|
45
|
+
2. **Stop here** — the plan file is the deliverable; end the pipeline.
|
|
46
|
+
|
|
47
|
+
Depth was the user's up-front choice in Lane 1, so deepening is not offered
|
|
48
|
+
by default — but honor an explicit request for it at the gate: run
|
|
49
|
+
`gitnexus-plan` Deepen mode on the plan file and return here with the
|
|
50
|
+
strengthened plan, as many times as the user asks. Do not proceed past the
|
|
51
|
+
gate without an explicit choice — the gate is the pipeline's only checkpoint
|
|
52
|
+
and exists precisely because execution is expensive to unwind.
|
|
53
|
+
|
|
54
|
+
**Headless / non-interactive runs:** no one can answer the gate, so end the
|
|
55
|
+
pipeline after Lane 1 — the plan file is the deliverable (gate option 2) —
|
|
56
|
+
and say so in the final report. Never auto-proceed to execution.
|
|
57
|
+
|
|
58
|
+
## Lane 3 — Work
|
|
59
|
+
|
|
60
|
+
Invoke `gitnexus-work` with the plan path. It re-anchors the plan at HEAD,
|
|
61
|
+
executes the Implementation Sequence as verified atomic commits, refreshes
|
|
62
|
+
the knowledge graph when done (its Phase 4), and reports deviations. If it routes back for re-planning (structural drift), run the
|
|
63
|
+
Deepen pass and return to the Lane 2 gate rather than pushing through.
|
|
64
|
+
|
|
65
|
+
## Lane 4 — Review
|
|
66
|
+
|
|
67
|
+
Invoke `gitnexus-review` on the completed work. Pass an open PR URL/number
|
|
68
|
+
when one exists; otherwise pass the current branch. The review skill owns
|
|
69
|
+
target resolution, exact-SHA checkout/index alignment, and merge-base
|
|
70
|
+
selection. Do not duplicate that logic here. If work left local changes,
|
|
71
|
+
pass `local` as a second, separately labeled review surface.
|
|
72
|
+
|
|
73
|
+
Surface the review verdict and findings to the user. Findings the user
|
|
74
|
+
wants fixed: those within `gitnexus-work`'s direct-mode bounds (1–2 files,
|
|
75
|
+
no architectural decisions) → hand to `gitnexus-work` direct mode; anything
|
|
76
|
+
larger → offer the plan gate instead (Deepen the plan with the findings, or
|
|
77
|
+
stop). Then re-run this lane's review once. On that re-run, do not start
|
|
78
|
+
another fix cycle even if findings remain — report them and point the user
|
|
79
|
+
at `/gitnexus-work` (or the plan gate) to continue deliberately.
|
|
80
|
+
|
|
81
|
+
## Final report
|
|
82
|
+
|
|
83
|
+
One message: plan path, deepen cycles run, commits produced, verification
|
|
84
|
+
status, review verdict with unresolved findings, and what (if anything) was
|
|
85
|
+
explicitly left undone. The pipeline does not push or open a PR on its own —
|
|
86
|
+
offer both as next steps.
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
# gitnexus-plan — implementation-ready engineering plans
|
|
2
|
+
|
|
3
|
+
Generates deep, implementation-ready engineering plans by combining GitNexus
|
|
4
|
+
repository intelligence, statement-level Program Dependence Graph analysis,
|
|
5
|
+
and the agent's native targeted source verification.
|
|
6
|
+
|
|
7
|
+
## Invocation
|
|
8
|
+
|
|
9
|
+
| CLI | How to invoke | Adapter file |
|
|
10
|
+
| ----------------------------- | ------------------------------------------------------------------------------------------------------ | ---------------------------------------------- |
|
|
11
|
+
| **Claude Code** | `/gitnexus-plan <task>` | `.claude/skills/gitnexus-plan/SKILL.md` |
|
|
12
|
+
| **Codex CLI** | Ask: "run gitnexus-plan for <task>" (Codex reads `AGENTS.md`) — or install the user-level prompt below | `AGENTS.md` § Engineering planning & execution |
|
|
13
|
+
| **Any AGENTS.md-aware agent** | Ask it to "read `.claude/skills/gitnexus-plan/SKILL.md` and follow it for <task>" | `AGENTS.md` § Engineering planning & execution |
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
/gitnexus-plan Add retry support to the ingestion pipeline
|
|
17
|
+
/gitnexus-plan Fix the stale warm-cache invalidation bug in exportedTypeMap
|
|
18
|
+
/gitnexus-plan depth:deep impact_depth:3 Migrate the emit phase to streaming COPY
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Output: `docs/plans/YYYY-MM-DD-gitnexus-plan-<slug>.md` — a 13-section plan whose
|
|
22
|
+
section 11 is a machine-readable **implementation context pack** that a
|
|
23
|
+
follow-up agent can consume without re-investigating the repository. Compact
|
|
24
|
+
and full packs both include versioned evidence provenance: a canonical global
|
|
25
|
+
dirty digest and a sorted, per-layer cited-path manifest. An npm-dependency-free,
|
|
26
|
+
versioned Node helper shared byte-for-byte with `gitnexus-work` is the only
|
|
27
|
+
supported serializer, so planner and executor hash identical bytes. The same
|
|
28
|
+
helper is the only supported existing-plan reader and plan writer. Its
|
|
29
|
+
descriptor-anchored `read-plan` receipt binds the canonical path, exact base64
|
|
30
|
+
bytes, and SHA-256 digest before Deepen or execution. The writer accepts a repo-relative
|
|
31
|
+
`docs/plans/<date>-gitnexus-plan-<slug>.md` destination, rejects symlink
|
|
32
|
+
traversal and accidental replacement, and publishes the verified UTF-8
|
|
33
|
+
document through a descriptor-anchored atomic no-replace move. Deepen first
|
|
34
|
+
requires the exact canonical path and digest from one read receipt, preserves
|
|
35
|
+
the prior plan in a verified Git-admin backup, and also publishes without replacement. A safe read/write
|
|
36
|
+
failure blocks the operation; there is no
|
|
37
|
+
external-output or read-only-checkout fallback.
|
|
38
|
+
|
|
39
|
+
### Codex (user-level install)
|
|
40
|
+
|
|
41
|
+
Codex discovers SKILL.md skills from `~/.agents/skills/` (the same path the
|
|
42
|
+
other `gitnexus-*` skills install to). To make this skill auto-discoverable in
|
|
43
|
+
every Codex session:
|
|
44
|
+
|
|
45
|
+
```
|
|
46
|
+
cp -r .claude/skills/gitnexus-plan ~/.agents/skills/gitnexus-plan
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Codex prompts are user-level only (not repo-shareable). Optionally, for an
|
|
50
|
+
explicit `/gitnexus-plan` slash command, also create
|
|
51
|
+
`~/.codex/prompts/gitnexus-plan.md`:
|
|
52
|
+
|
|
53
|
+
```markdown
|
|
54
|
+
---
|
|
55
|
+
description: Implementation-ready engineering plan via GitNexus + PDG + source verification
|
|
56
|
+
argument-hint: <task description>
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
Use the gitnexus-plan skill for: $ARGUMENTS
|
|
60
|
+
|
|
61
|
+
Read `~/.agents/skills/gitnexus-plan/SKILL.md` (if this repo has its own copy at
|
|
62
|
+
`.claude/skills/gitnexus-plan/SKILL.md`, prefer that one) and follow its phases in
|
|
63
|
+
order, loading its `references/` files at the phases that call for them. Planning
|
|
64
|
+
only — never edit code; the only repo file you write is the plan document.
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## Architecture note: how GitNexus and the agent interact
|
|
68
|
+
|
|
69
|
+
Three layers, strictly ordered:
|
|
70
|
+
|
|
71
|
+
1. **GitNexus navigates** (`query` → `context` → `impact`/`trace` →
|
|
72
|
+
`cypher` last-resort). The graph answers _where to look_ and _what is
|
|
73
|
+
connected_: execution flows, callers/callees, blast radius, related tests.
|
|
74
|
+
Every call must answer a named planning question.
|
|
75
|
+
2. **PDG constrains** (`pdg_query` controls/flows, `impact {mode:"pdg",
|
|
76
|
+
direction, line}` statement slices, `explain` for taint). The
|
|
77
|
+
statement-level layers
|
|
78
|
+
answer _what gates and feeds the behavior_ inside the few functions the
|
|
79
|
+
change centers on. Results are filtered into a bounded slice
|
|
80
|
+
(`references/pdg-slice.md`), never dumped.
|
|
81
|
+
3. **The agent verifies** (targeted line-range reads). Current source is
|
|
82
|
+
authoritative; graph results are navigation hints until verified. On
|
|
83
|
+
disagreement: trust source, record the discrepancy, recommend re-indexing.
|
|
84
|
+
|
|
85
|
+
Token efficiency comes from the **context ledger**
|
|
86
|
+
(`references/context-ledger.md`): every query and read is recorded with the
|
|
87
|
+
question it answered, and nothing is re-fetched unless the source changed, a
|
|
88
|
+
contradiction surfaced, or one of the ledger's defined escalations applies
|
|
89
|
+
(summary→detail drill-down, ambiguity narrowing, a changed parameter answering
|
|
90
|
+
a new question). The ledger also enforces symbol budgets (5 primary /
|
|
91
|
+
20 related by default), pins dirty working-tree evidence as well as HEAD, and
|
|
92
|
+
uses progressive disclosure to keep the big schemas out of context until the
|
|
93
|
+
phase that needs them.
|
|
94
|
+
|
|
95
|
+
## Files
|
|
96
|
+
|
|
97
|
+
| File | Purpose |
|
|
98
|
+
| ----------------------------------- | ------------------------------------------------------------------------------------- |
|
|
99
|
+
| `SKILL.md` | The skill: phases 0–5, hard rules, config, fallback |
|
|
100
|
+
| `references/pdg-slice.md` | PDG slice construction: tools, inclusion criteria, schema, security/performance modes |
|
|
101
|
+
| `references/context-ledger.md` | Ledger schema + anti-reread rules |
|
|
102
|
+
| `references/plan-template.md` | The 13-section plan document template |
|
|
103
|
+
| `references/context-pack.md` | Implementation context pack schema + stability contract |
|
|
104
|
+
| `references/evidence-provenance.md` | Versioned byte contract for dirty-tree evidence |
|
|
105
|
+
| `scripts/evidence-provenance.mjs` | Snapshot serializer plus descriptor-anchored plan reader/writer |
|
|
106
|
+
|
|
107
|
+
## Requirements and graceful degradation
|
|
108
|
+
|
|
109
|
+
- Requires a GitNexus index; statement-level sections additionally require the
|
|
110
|
+
`--pdg` layers.
|
|
111
|
+
- Freshness is a gate, priced by category: full-plan categories (refactor,
|
|
112
|
+
security, performance, concurrency, architecture) default to
|
|
113
|
+
`freshness: strict` — a stale index (or missing PDG layer) is refreshed once with
|
|
114
|
+
`analyze --index-only [--pdg]` — run via `node .gitnexus/run.cjs` when the
|
|
115
|
+
project has one, else the installed `gitnexus` CLI
|
|
116
|
+
(`npm install -g gitnexus`), else `npx gitnexus` — before the graph is relied
|
|
117
|
+
on, but only when that runner's provenance is known-current.
|
|
118
|
+
Compact-plan categories default to `accept` (source-weighted, refresh only
|
|
119
|
+
if a graph claim becomes load-bearing). `--index-only` touches only the
|
|
120
|
+
`.gitnexus` store, never repo files. Stale analyzer provenance is a
|
|
121
|
+
disclosed **source-weighted limitation**: planning does not rebuild analyzer
|
|
122
|
+
output, and it does not use that graph for load-bearing claims.
|
|
123
|
+
- PDG layer still unavailable after that → the plan says so and skips
|
|
124
|
+
statement-level claims (never reconstructs fake edges).
|
|
125
|
+
- No GitNexus at all → fallback mode: targeted grep/read exploration, findings
|
|
126
|
+
labelled **source-derived**, with a recommendation to index.
|
|
127
|
+
- Reading or publishing a plan requires Linux `/proc/self/fd`, `O_DIRECTORY`,
|
|
128
|
+
and `O_NOFOLLOW`; publication also requires a validated absolute Python 3
|
|
129
|
+
PATH candidate with libc `renameat2(RENAME_NOREPLACE)` support, a
|
|
130
|
+
writable target repository, and a shared filesystem for the plan and
|
|
131
|
+
Git-admin vault. The writer fails closed when those guarantees are
|
|
132
|
+
unavailable; it never redirects the plan elsewhere.
|
|
133
|
+
|
|
134
|
+
## Limitations
|
|
135
|
+
|
|
136
|
+
- `pdg_query` is intra-procedural; cross-function flow comes from `explain`
|
|
137
|
+
(taint) or `impact {mode:"pdg"}` inter-procedural reach.
|
|
138
|
+
- The skill is planning-only by contract: the only repository file it writes
|
|
139
|
+
is the plan document, and the only other state it may touch is the
|
|
140
|
+
`.gitnexus` index store for a freshness refresh. It must not build
|
|
141
|
+
analyzer `dist/` output or mutate source, tests, configuration, benchmark,
|
|
142
|
+
or evaluation files. Instruction feedback is chat-only.
|