gitnexus 1.6.8-rc.8 → 1.6.8
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 +3 -3
- package/dist/_shared/graph/types.d.ts +31 -1
- package/dist/_shared/graph/types.d.ts.map +1 -1
- package/dist/_shared/language-detection.d.ts.map +1 -1
- package/dist/_shared/language-detection.js +11 -1
- package/dist/_shared/language-detection.js.map +1 -1
- package/dist/_shared/lbug/schema-constants.d.ts +1 -1
- package/dist/_shared/lbug/schema-constants.d.ts.map +1 -1
- package/dist/_shared/lbug/schema-constants.js +6 -0
- package/dist/_shared/lbug/schema-constants.js.map +1 -1
- package/dist/_shared/scope-resolution/parsed-file.d.ts +21 -0
- package/dist/_shared/scope-resolution/parsed-file.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/symbol-definition.d.ts +6 -0
- package/dist/_shared/scope-resolution/symbol-definition.d.ts.map +1 -1
- package/dist/cli/ai-context.d.ts +31 -1
- package/dist/cli/ai-context.js +18 -16
- package/dist/cli/analyze-config.js +11 -0
- package/dist/cli/analyze.d.ts +14 -0
- package/dist/cli/analyze.js +98 -0
- package/dist/cli/embedding-dims.d.ts +33 -0
- package/dist/cli/embedding-dims.js +39 -0
- package/dist/cli/eval-server.d.ts +8 -0
- package/dist/cli/eval-server.js +242 -2
- package/dist/cli/help-i18n.js +19 -0
- package/dist/cli/i18n/en.d.ts +15 -1
- package/dist/cli/i18n/en.js +15 -1
- package/dist/cli/i18n/resources.d.ts +29 -1
- package/dist/cli/i18n/zh-CN.d.ts +14 -0
- package/dist/cli/i18n/zh-CN.js +15 -1
- package/dist/cli/index.js +89 -1
- package/dist/cli/mcp.d.ts +6 -1
- package/dist/cli/mcp.js +26 -1
- package/dist/cli/optional-grammars.d.ts +6 -8
- package/dist/cli/optional-grammars.js +8 -11
- package/dist/cli/setup.d.ts +3 -1
- package/dist/cli/setup.js +67 -17
- package/dist/cli/skill-gen.js +2 -1
- package/dist/cli/tool.d.ts +19 -1
- package/dist/cli/tool.js +96 -3
- package/dist/core/embeddings/hf-env.d.ts +0 -66
- package/dist/core/embeddings/http-client.d.ts +7 -0
- package/dist/core/embeddings/http-client.js +5 -3
- package/dist/core/embeddings/server-mapping.d.ts +1 -1
- package/dist/core/embeddings/server-mapping.js +7 -3
- package/dist/core/graph/import-cycles.d.ts +10 -0
- package/dist/core/graph/import-cycles.js +103 -0
- package/dist/core/group/cross-impact.d.ts +2 -1
- package/dist/core/group/cross-impact.js +5 -1
- package/dist/core/group/extractors/grpc-patterns/proto.js +10 -6
- package/dist/core/group/extractors/http-patterns/kotlin.js +7 -7
- package/dist/core/group/extractors/http-route-extractor.d.ts +24 -0
- package/dist/core/group/extractors/http-route-extractor.js +22 -4
- package/dist/core/group/extractors/include-extractor.js +22 -13
- package/dist/core/group/sync.d.ts +27 -1
- package/dist/core/group/sync.js +0 -0
- package/dist/core/incremental/subgraph-extract.js +18 -1
- package/dist/core/ingestion/cfg/cfg-builder.d.ts +114 -0
- package/dist/core/ingestion/cfg/cfg-builder.js +196 -0
- package/dist/core/ingestion/cfg/collect.d.ts +51 -0
- package/dist/core/ingestion/cfg/collect.js +77 -0
- package/dist/core/ingestion/cfg/control-dependence.d.ts +58 -0
- package/dist/core/ingestion/cfg/control-dependence.js +182 -0
- package/dist/core/ingestion/cfg/control-flow-context.d.ts +106 -0
- package/dist/core/ingestion/cfg/control-flow-context.js +124 -0
- package/dist/core/ingestion/cfg/emit.d.ts +293 -0
- package/dist/core/ingestion/cfg/emit.js +646 -0
- package/dist/core/ingestion/cfg/post-dominators.d.ts +79 -0
- package/dist/core/ingestion/cfg/post-dominators.js +176 -0
- package/dist/core/ingestion/cfg/reaching-def-reason-codec.d.ts +106 -0
- package/dist/core/ingestion/cfg/reaching-def-reason-codec.js +133 -0
- package/dist/core/ingestion/cfg/reaching-defs-graph.d.ts +18 -0
- package/dist/core/ingestion/cfg/reaching-defs-graph.js +312 -0
- package/dist/core/ingestion/cfg/reaching-defs.d.ts +162 -0
- package/dist/core/ingestion/cfg/reaching-defs.js +785 -0
- package/dist/core/ingestion/cfg/synthetic-escape.d.ts +124 -0
- package/dist/core/ingestion/cfg/synthetic-escape.js +300 -0
- package/dist/core/ingestion/cfg/traversal-result.d.ts +20 -0
- package/dist/core/ingestion/cfg/traversal-result.js +2 -0
- package/dist/core/ingestion/cfg/types.d.ts +274 -0
- package/dist/core/ingestion/cfg/types.js +13 -0
- package/dist/core/ingestion/cfg/visitors/c-cpp-harvest.d.ts +111 -0
- package/dist/core/ingestion/cfg/visitors/c-cpp-harvest.js +541 -0
- package/dist/core/ingestion/cfg/visitors/c-cpp.d.ts +74 -0
- package/dist/core/ingestion/cfg/visitors/c-cpp.js +584 -0
- package/dist/core/ingestion/cfg/visitors/call-site-harvest.d.ts +195 -0
- package/dist/core/ingestion/cfg/visitors/call-site-harvest.js +350 -0
- package/dist/core/ingestion/cfg/visitors/csharp-harvest.d.ts +124 -0
- package/dist/core/ingestion/cfg/visitors/csharp-harvest.js +589 -0
- package/dist/core/ingestion/cfg/visitors/csharp.d.ts +87 -0
- package/dist/core/ingestion/cfg/visitors/csharp.js +867 -0
- package/dist/core/ingestion/cfg/visitors/dart-harvest.d.ts +278 -0
- package/dist/core/ingestion/cfg/visitors/dart-harvest.js +870 -0
- package/dist/core/ingestion/cfg/visitors/dart.d.ts +119 -0
- package/dist/core/ingestion/cfg/visitors/dart.js +836 -0
- package/dist/core/ingestion/cfg/visitors/go-harvest.d.ts +160 -0
- package/dist/core/ingestion/cfg/visitors/go-harvest.js +621 -0
- package/dist/core/ingestion/cfg/visitors/go.d.ts +108 -0
- package/dist/core/ingestion/cfg/visitors/go.js +638 -0
- package/dist/core/ingestion/cfg/visitors/java-harvest.d.ts +108 -0
- package/dist/core/ingestion/cfg/visitors/java-harvest.js +513 -0
- package/dist/core/ingestion/cfg/visitors/java.d.ts +101 -0
- package/dist/core/ingestion/cfg/visitors/java.js +812 -0
- package/dist/core/ingestion/cfg/visitors/kotlin-harvest.d.ts +253 -0
- package/dist/core/ingestion/cfg/visitors/kotlin-harvest.js +719 -0
- package/dist/core/ingestion/cfg/visitors/kotlin.d.ts +121 -0
- package/dist/core/ingestion/cfg/visitors/kotlin.js +809 -0
- package/dist/core/ingestion/cfg/visitors/php-harvest.d.ts +172 -0
- package/dist/core/ingestion/cfg/visitors/php-harvest.js +626 -0
- package/dist/core/ingestion/cfg/visitors/php.d.ts +96 -0
- package/dist/core/ingestion/cfg/visitors/php.js +721 -0
- package/dist/core/ingestion/cfg/visitors/python-harvest.d.ts +212 -0
- package/dist/core/ingestion/cfg/visitors/python-harvest.js +739 -0
- package/dist/core/ingestion/cfg/visitors/python.d.ts +103 -0
- package/dist/core/ingestion/cfg/visitors/python.js +558 -0
- package/dist/core/ingestion/cfg/visitors/ruby-harvest.d.ts +223 -0
- package/dist/core/ingestion/cfg/visitors/ruby-harvest.js +587 -0
- package/dist/core/ingestion/cfg/visitors/ruby.d.ts +112 -0
- package/dist/core/ingestion/cfg/visitors/ruby.js +756 -0
- package/dist/core/ingestion/cfg/visitors/rust-harvest.d.ts +324 -0
- package/dist/core/ingestion/cfg/visitors/rust-harvest.js +873 -0
- package/dist/core/ingestion/cfg/visitors/rust.d.ts +95 -0
- package/dist/core/ingestion/cfg/visitors/rust.js +558 -0
- package/dist/core/ingestion/cfg/visitors/scope-tree-harvest.d.ts +87 -0
- package/dist/core/ingestion/cfg/visitors/scope-tree-harvest.js +116 -0
- package/dist/core/ingestion/cfg/visitors/swift-harvest.d.ts +255 -0
- package/dist/core/ingestion/cfg/visitors/swift-harvest.js +679 -0
- package/dist/core/ingestion/cfg/visitors/swift.d.ts +116 -0
- package/dist/core/ingestion/cfg/visitors/swift.js +787 -0
- package/dist/core/ingestion/cfg/visitors/typescript-harvest.d.ts +149 -0
- package/dist/core/ingestion/cfg/visitors/typescript-harvest.js +1056 -0
- package/dist/core/ingestion/cfg/visitors/typescript.d.ts +66 -0
- package/dist/core/ingestion/cfg/visitors/typescript.js +583 -0
- package/dist/core/ingestion/import-resolvers/utils.js +2 -0
- package/dist/core/ingestion/language-provider.d.ts +23 -2
- package/dist/core/ingestion/languages/c-cpp.js +17 -5
- package/dist/core/ingestion/languages/cobol.js +4 -0
- package/dist/core/ingestion/languages/cpp/arity-metadata.js +41 -2
- package/dist/core/ingestion/languages/cpp/captures.js +50 -1
- package/dist/core/ingestion/languages/cpp/conversion-rank.d.ts +2 -0
- package/dist/core/ingestion/languages/cpp/conversion-rank.js +89 -0
- package/dist/core/ingestion/languages/cpp/header-scan.d.ts +1 -1
- package/dist/core/ingestion/languages/cpp/header-scan.js +2 -2
- package/dist/core/ingestion/languages/cpp/inline-namespaces.js +7 -2
- package/dist/core/ingestion/languages/cpp/member-lookup.js +2 -1
- package/dist/core/ingestion/languages/cpp/query.js +23 -0
- package/dist/core/ingestion/languages/cpp/scope-resolver.js +2 -1
- package/dist/core/ingestion/languages/csharp.js +2 -0
- package/dist/core/ingestion/languages/dart.js +2 -0
- package/dist/core/ingestion/languages/go.js +2 -0
- package/dist/core/ingestion/languages/java.js +3 -0
- package/dist/core/ingestion/languages/kotlin/query.js +3 -2
- package/dist/core/ingestion/languages/kotlin.js +8 -1
- package/dist/core/ingestion/languages/php.js +2 -0
- package/dist/core/ingestion/languages/python.js +2 -0
- package/dist/core/ingestion/languages/ruby.js +2 -0
- package/dist/core/ingestion/languages/rust.js +2 -0
- package/dist/core/ingestion/languages/swift.js +2 -0
- package/dist/core/ingestion/languages/typescript.js +5 -0
- package/dist/core/ingestion/languages/vue.js +6 -0
- package/dist/core/ingestion/method-extractors/configs/c-cpp.js +6 -13
- package/dist/core/ingestion/method-extractors/generic.js +1 -0
- package/dist/core/ingestion/method-types.d.ts +2 -0
- package/dist/core/ingestion/model/symbol-table.d.ts +1 -0
- package/dist/core/ingestion/model/symbol-table.js +1 -0
- package/dist/core/ingestion/mro-processor.js +109 -0
- package/dist/core/ingestion/parsing-processor.js +44 -0
- package/dist/core/ingestion/pipeline-phases/call-summaries.d.ts +26 -0
- package/dist/core/ingestion/pipeline-phases/call-summaries.js +46 -0
- 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.d.ts +0 -21
- package/dist/core/ingestion/pipeline-phases/parse-impl.js +18 -1
- package/dist/core/ingestion/pipeline-phases/routes.d.ts +10 -0
- package/dist/core/ingestion/pipeline-phases/routes.js +30 -1
- package/dist/core/ingestion/pipeline-phases/taint-summaries.d.ts +30 -0
- package/dist/core/ingestion/pipeline-phases/taint-summaries.js +81 -0
- package/dist/core/ingestion/pipeline.d.ts +92 -10
- package/dist/core/ingestion/pipeline.js +11 -2
- package/dist/core/ingestion/scope-extractor.js +12 -2
- package/dist/core/ingestion/scope-resolution/contract/scope-resolver.d.ts +9 -0
- package/dist/core/ingestion/scope-resolution/graph-bridge/callee-id-sink.d.ts +75 -0
- package/dist/core/ingestion/scope-resolution/graph-bridge/callee-id-sink.js +67 -0
- package/dist/core/ingestion/scope-resolution/graph-bridge/edges.d.ts +12 -2
- package/dist/core/ingestion/scope-resolution/graph-bridge/edges.js +14 -2
- package/dist/core/ingestion/scope-resolution/graph-bridge/references-to-edges.d.ts +6 -1
- package/dist/core/ingestion/scope-resolution/graph-bridge/references-to-edges.js +13 -1
- package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.d.ts +9 -1
- package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.js +28 -2
- package/dist/core/ingestion/scope-resolution/passes/overload-narrowing.d.ts +4 -0
- package/dist/core/ingestion/scope-resolution/passes/overload-narrowing.js +9 -0
- package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.d.ts +6 -1
- package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.js +174 -40
- package/dist/core/ingestion/scope-resolution/pipeline/phase.d.ts +24 -0
- package/dist/core/ingestion/scope-resolution/pipeline/phase.js +276 -190
- package/dist/core/ingestion/scope-resolution/pipeline/reconcile-ownership.js +43 -3
- package/dist/core/ingestion/scope-resolution/pipeline/run.d.ts +75 -0
- package/dist/core/ingestion/scope-resolution/pipeline/run.js +349 -1
- package/dist/core/ingestion/scope-resolution/resolution-outcome.d.ts +1 -1
- package/dist/core/ingestion/taint/call-summary-codec.d.ts +75 -0
- package/dist/core/ingestion/taint/call-summary-codec.js +128 -0
- package/dist/core/ingestion/taint/call-summary-emit.d.ts +43 -0
- package/dist/core/ingestion/taint/call-summary-emit.js +70 -0
- package/dist/core/ingestion/taint/call-summary-harvest.d.ts +77 -0
- package/dist/core/ingestion/taint/call-summary-harvest.js +179 -0
- package/dist/core/ingestion/taint/call-summary-model.d.ts +47 -0
- package/dist/core/ingestion/taint/call-summary-model.js +25 -0
- package/dist/core/ingestion/taint/emit.d.ts +125 -0
- package/dist/core/ingestion/taint/emit.js +208 -0
- package/dist/core/ingestion/taint/interproc-emit.d.ts +50 -0
- package/dist/core/ingestion/taint/interproc-emit.js +88 -0
- package/dist/core/ingestion/taint/interproc-solver.d.ts +110 -0
- package/dist/core/ingestion/taint/interproc-solver.js +312 -0
- package/dist/core/ingestion/taint/match.d.ts +153 -0
- package/dist/core/ingestion/taint/match.js +278 -0
- package/dist/core/ingestion/taint/path-codec.d.ts +134 -0
- package/dist/core/ingestion/taint/path-codec.js +190 -0
- package/dist/core/ingestion/taint/propagate.d.ts +216 -0
- package/dist/core/ingestion/taint/propagate.js +659 -0
- package/dist/core/ingestion/taint/site-safety.d.ts +29 -0
- package/dist/core/ingestion/taint/site-safety.js +98 -0
- package/dist/core/ingestion/taint/source-sink-config.d.ts +107 -23
- package/dist/core/ingestion/taint/source-sink-config.js +35 -12
- package/dist/core/ingestion/taint/source-sink-registry.d.ts +6 -4
- package/dist/core/ingestion/taint/source-sink-registry.js +6 -4
- package/dist/core/ingestion/taint/summary-harvest-driver.d.ts +80 -0
- package/dist/core/ingestion/taint/summary-harvest-driver.js +179 -0
- package/dist/core/ingestion/taint/summary-harvest.d.ts +89 -0
- package/dist/core/ingestion/taint/summary-harvest.js +537 -0
- package/dist/core/ingestion/taint/summary-model.d.ts +200 -0
- package/dist/core/ingestion/taint/summary-model.js +86 -0
- package/dist/core/ingestion/taint/typescript-model.d.ts +38 -0
- package/dist/core/ingestion/taint/typescript-model.js +102 -0
- package/dist/core/ingestion/type-extractors/c-cpp.js +21 -0
- package/dist/core/ingestion/utils/env.d.ts +7 -0
- package/dist/core/ingestion/utils/env.js +12 -0
- package/dist/core/ingestion/utils/method-props.js +1 -0
- package/dist/core/ingestion/workers/clone-safety.d.ts +109 -0
- package/dist/core/ingestion/workers/clone-safety.js +465 -0
- package/dist/core/ingestion/workers/parse-worker.d.ts +23 -0
- package/dist/core/ingestion/workers/parse-worker.js +81 -53
- package/dist/core/ingestion/workers/post-result.d.ts +22 -0
- package/dist/core/ingestion/workers/post-result.js +87 -0
- package/dist/core/ingestion/workers/result-merge.d.ts +20 -0
- package/dist/core/ingestion/workers/result-merge.js +43 -0
- package/dist/core/ingestion/workers/worker-pool.d.ts +15 -40
- package/dist/core/ingestion/workers/worker-pool.js +43 -16
- package/dist/core/lbug/csv-generator.d.ts +51 -3
- package/dist/core/lbug/csv-generator.js +369 -255
- package/dist/core/lbug/lbug-adapter.d.ts +58 -18
- package/dist/core/lbug/lbug-adapter.js +346 -84
- package/dist/core/lbug/lbug-config.d.ts +19 -0
- package/dist/core/lbug/lbug-config.js +29 -0
- package/dist/core/lbug/pdg-emit-sink.d.ts +127 -0
- package/dist/core/lbug/pdg-emit-sink.js +358 -0
- package/dist/core/lbug/pool-adapter.d.ts +35 -0
- package/dist/core/lbug/pool-adapter.js +90 -1
- package/dist/core/lbug/rel-pair-routing.d.ts +54 -0
- package/dist/core/lbug/rel-pair-routing.js +140 -0
- package/dist/core/lbug/schema.d.ts +2 -2
- package/dist/core/lbug/schema.js +3 -0
- package/dist/core/logger.d.ts +0 -5
- package/dist/core/run-analyze.d.ts +96 -0
- package/dist/core/run-analyze.js +207 -3
- package/dist/core/tree-sitter/parser-loader.js +5 -4
- package/dist/core/tree-sitter/safe-parse.d.ts +0 -5
- package/dist/core/tree-sitter/vendored-grammars.d.ts +39 -0
- package/dist/core/tree-sitter/vendored-grammars.js +57 -0
- package/dist/core/wiki/generator.js +3 -1
- package/dist/core/wiki/graph-queries.d.ts +6 -0
- package/dist/core/wiki/graph-queries.js +9 -1
- package/dist/mcp/http-transport.d.ts +134 -0
- package/dist/mcp/http-transport.js +503 -0
- package/dist/mcp/local/local-backend.d.ts +110 -24
- package/dist/mcp/local/local-backend.js +1225 -19
- package/dist/mcp/local/pdg-impact.d.ts +384 -0
- package/dist/mcp/local/pdg-impact.js +1972 -0
- package/dist/mcp/resources.js +13 -1
- package/dist/mcp/tools.d.ts +12 -0
- package/dist/mcp/tools.js +214 -7
- package/dist/server/analyze-launch.d.ts +29 -0
- package/dist/server/analyze-launch.js +137 -0
- package/dist/server/analyze-upload.d.ts +33 -0
- package/dist/server/analyze-upload.js +123 -0
- package/dist/server/analyze-worker-ipc.d.ts +58 -0
- package/dist/server/analyze-worker-ipc.js +16 -0
- package/dist/server/analyze-worker.d.ts +17 -1
- package/dist/server/analyze-worker.js +7 -1
- package/dist/server/api.d.ts +17 -0
- package/dist/server/api.js +132 -168
- package/dist/server/git-clone.d.ts +43 -2
- package/dist/server/git-clone.js +211 -16
- package/dist/server/mcp-http.d.ts +5 -6
- package/dist/server/mcp-http.js +9 -82
- package/dist/server/middleware.d.ts +40 -0
- package/dist/server/middleware.js +92 -0
- package/dist/server/private-ip.d.ts +1 -0
- package/dist/server/private-ip.js +15 -0
- package/dist/server/upload-ingest.d.ts +56 -0
- package/dist/server/upload-ingest.js +276 -0
- package/dist/server/upload-paths.d.ts +37 -0
- package/dist/server/upload-paths.js +57 -0
- package/dist/server/upload-sweep.d.ts +20 -0
- package/dist/server/upload-sweep.js +57 -0
- package/dist/storage/git.js +5 -8
- package/dist/storage/parse-cache.d.ts +22 -1
- package/dist/storage/parse-cache.js +44 -10
- package/dist/storage/repo-manager.d.ts +121 -10
- package/dist/storage/repo-manager.js +43 -5
- package/dist/types/pipeline.d.ts +9 -0
- package/hooks/antigravity/gitnexus-antigravity-hook.cjs +110 -10
- package/hooks/claude/gitnexus-hook.cjs +110 -13
- package/hooks/claude/hook-db-lock-probe.cjs +513 -26
- package/package.json +8 -2
- package/scripts/assert-publish-grammar-coverage.cjs +31 -0
- package/scripts/build-tree-sitter-grammars.cjs +16 -10
- package/scripts/cross-platform-tests.ts +1 -0
- package/skills/gitnexus-debugging.md +16 -4
- package/skills/gitnexus-exploring.md +3 -3
- package/skills/gitnexus-guide.md +33 -0
- package/skills/gitnexus-pdg-query.md +89 -0
- package/skills/gitnexus-refactoring.md +1 -1
- package/skills/gitnexus-taint-analysis.md +178 -0
- package/vendor/tree-sitter-c/package.json +1 -1
- package/vendor/tree-sitter-dart/package.json +1 -1
- package/vendor/tree-sitter-kotlin/package.json +1 -1
- package/vendor/tree-sitter-proto/package.json +1 -1
- package/vendor/tree-sitter-swift/package.json +1 -1
- package/web/assets/{agent-CKPMqImC.js → agent-D3Xd7zZE.js} +123 -123
- package/web/assets/architecture-7EHR7CIX-6QZW5X65-DxJw65fT.js +1 -0
- package/web/assets/architectureDiagram-UL44E2DR-ChH9xW-N.js +36 -0
- package/web/assets/{blockDiagram-7IZFK4PR-B4niSLvR.js → blockDiagram-7IZFK4PR-BkWhpzWB.js} +1 -1
- package/web/assets/{c4Diagram-Y2BXMSZH-DIzEXalR.js → c4Diagram-Y2BXMSZH-DtBvpzWD.js} +1 -1
- package/web/assets/{chunk-3SSMPTDK-BzGeeheI.js → chunk-3SSMPTDK-B4_etUhr.js} +2 -2
- package/web/assets/{chunk-5IMINLNL-CnTLsXIV.js → chunk-5IMINLNL-DOdTeQri.js} +1 -1
- package/web/assets/{chunk-5VCL7Z4A-w1BCx98Z.js → chunk-5VCL7Z4A-CQ-2dYWj.js} +1 -1
- package/web/assets/chunk-6764PJDD-DpIS7hxD.js +1 -0
- package/web/assets/{chunk-67TQ5CYL-CChC2cAv.js → chunk-67TQ5CYL-4sNPJU1q.js} +3 -3
- package/web/assets/{chunk-7W6UQGC5-CgFyfZ6k.js → chunk-7W6UQGC5-KyEG0HQg.js} +1 -1
- package/web/assets/{chunk-AZZRMDJM-5E9ARdDQ.js → chunk-AZZRMDJM-y-xJBuMz.js} +1 -1
- package/web/assets/{chunk-INKRHTLW-ELpfuk9h.js → chunk-INKRHTLW-Nu4ri9P-.js} +1 -1
- package/web/assets/{chunk-JQRUD6KW-Dcq_Qnyy.js → chunk-JQRUD6KW-Dbva2Z17.js} +1 -1
- package/web/assets/{chunk-KGFNY3KK-W-VR57xb.js → chunk-KGFNY3KK-JGMJvKCK.js} +1 -1
- package/web/assets/chunk-KGYTTC2M-CWC_c3H9.js +161 -0
- package/web/assets/{chunk-KNLZD3CH-BuZBOcso.js → chunk-KNLZD3CH-BGlP6X9R.js} +1 -1
- package/web/assets/{chunk-KRXBNO2N-DH2NPM7I.js → chunk-KRXBNO2N-BW5o0KUN.js} +1 -1
- package/web/assets/{chunk-LCXTWHL2-Dfmux4m1.js → chunk-LCXTWHL2-zoomRtWX.js} +1 -1
- package/web/assets/{chunk-LII3EMHJ-3X33tCpU.js → chunk-LII3EMHJ-D-jm-dLa.js} +1 -1
- package/web/assets/{chunk-QA3QBVWF-D5Ha3GgB.js → chunk-QA3QBVWF-BgRW3SXd.js} +1 -1
- package/web/assets/{chunk-RG4AUYOV-CAkzcoRj.js → chunk-RG4AUYOV-DD0B2N2B.js} +1 -1
- package/web/assets/{chunk-T2UQINTJ-kGYG7ppP.js → chunk-T2UQINTJ-DSBqkzH7.js} +1 -1
- package/web/assets/chunk-T5OCTHI4-DdZvN-9i.js +1 -0
- package/web/assets/{chunk-UY5QBCOK-Du-c56gs.js → chunk-UY5QBCOK-DyF0vyGd.js} +1 -1
- package/web/assets/{chunk-W44A43WB-lrCpuupA.js → chunk-W44A43WB-JqMLIpR0.js} +1 -1
- package/web/assets/{chunk-ZXARS5L4-CSZRiyOf.js → chunk-ZXARS5L4-CxN8oiwI.js} +1 -1
- package/web/assets/classDiagram-KGZ6W3CR-DJm9BgF-.js +1 -0
- package/web/assets/classDiagram-v2-72OJOZXJ-DJm9BgF-.js +1 -0
- package/web/assets/{context-builder-_HS0v2ma.js → context-builder-BHiFUA8O.js} +10 -2
- package/web/assets/{cose-bilkent-UX7MHV2Q-BHv2bbtl.js → cose-bilkent-UX7MHV2Q-D71wNYRJ.js} +1 -1
- package/web/assets/dagre-ND4H6XIP-BIkxmhcu.js +4 -0
- package/web/assets/diagram-3NCE3AQN-BTa6iH0T.js +43 -0
- package/web/assets/diagram-GF46GFSD-DZDV0vBj.js +24 -0
- package/web/assets/{diagram-HNR7UZ2L-fUWreZzx.js → diagram-HNR7UZ2L-DFCfd5LI.js} +2 -2
- package/web/assets/diagram-QXG6HAR7-BzM--Jj0.js +24 -0
- package/web/assets/diagram-WEQXMOUZ-DFFwz0k4.js +10 -0
- package/web/assets/{erDiagram-L5TCEMPS-QN2eEP1e.js → erDiagram-L5TCEMPS-CfHMJJqo.js} +1 -1
- package/web/assets/eventmodeling-FCH6USID-MREXMVOE-BQm9QzEa.js +1 -0
- package/web/assets/{flowDiagram-H6V6AXG4-CXbXImlN.js → flowDiagram-H6V6AXG4-Be805QiJ.js} +3 -3
- package/web/assets/{ganttDiagram-JCBTUEKG-BHQssTz6.js → ganttDiagram-JCBTUEKG-D3iL2Aet.js} +1 -1
- package/web/assets/gitGraph-WXDBUCRP-R675I2BI-Cr_Bm2Nb.js +1 -0
- package/web/assets/gitGraphDiagram-S2ZK5IYY-CPIDgxGm.js +106 -0
- package/web/assets/index-BvYev1UJ.js +635 -0
- package/web/assets/index-_lgn7hs5.css +2 -0
- package/web/assets/info-J43DQDTF-KCYPFFUO-Cs4p2oyk.js +1 -0
- package/web/assets/infoDiagram-3YFTVSEB-Y7BKSoke.js +2 -0
- package/web/assets/{ishikawaDiagram-BNXS4ZKH-6LKOvBfp.js → ishikawaDiagram-BNXS4ZKH-CT4SHFuI.js} +1 -1
- package/web/assets/{journeyDiagram-M6C3CM3L-DNPYCpvq.js → journeyDiagram-M6C3CM3L-CvArszLo.js} +1 -1
- package/web/assets/{kanban-definition-75IXJCU3-DgDi9oJT.js → kanban-definition-75IXJCU3-C6yDxr7N.js} +3 -3
- package/web/assets/{katex-K3KEBU37-CrVLz8l7.js → katex-K3KEBU37-CTc5BslQ.js} +1 -1
- package/web/assets/{mindmap-definition-2TDM6QVE-CwR5sBB-.js → mindmap-definition-2TDM6QVE-BOc2WEne.js} +1 -1
- package/web/assets/packet-YPE3B663-LP52Z2RK-CKCrztD2.js +1 -0
- package/web/assets/pie-LRSECV5Y-TCRJHUBD-BB7pHqoD.js +1 -0
- package/web/assets/{pieDiagram-CU6KROY3-By8g6f6B.js → pieDiagram-CU6KROY3-Cvc0f_Pd.js} +1 -1
- package/web/assets/{quadrantDiagram-VICAPDV7-bAm6Hi_5.js → quadrantDiagram-VICAPDV7-yXSZ2lLz.js} +1 -1
- package/web/assets/radar-GUYGQ44K-RDLRG3WG-DhoTOcuK.js +1 -0
- package/web/assets/{requirementDiagram-JXO7QTGE-7oDcJ1_J.js → requirementDiagram-JXO7QTGE-BRcZvHs4.js} +1 -1
- package/web/assets/{sankeyDiagram-URQDO5SZ-LFJz53u5.js → sankeyDiagram-URQDO5SZ-1qEjlFIB.js} +1 -1
- package/web/assets/{sequenceDiagram-VS2MUI6T-FySeKCUy.js → sequenceDiagram-VS2MUI6T-PcSCuvrB.js} +3 -3
- package/web/assets/stateDiagram-7D4R322I-D6qYSV1E.js +1 -0
- package/web/assets/stateDiagram-v2-36443NZ5-Bg-ImOSX.js +1 -0
- package/web/assets/{timeline-definition-O6YCAMPW-Ds2CnVZK.js → timeline-definition-O6YCAMPW-QWkh01xw.js} +1 -1
- package/web/assets/treeView-BLDUP644-QA4HXRO3-ODehyGKL.js +1 -0
- package/web/assets/treemap-LRROVOQU-LLAWBHMP-BfpgC-7o.js +1 -0
- package/web/assets/{vennDiagram-MWXL3ELB-DUIEwXWp.js → vennDiagram-MWXL3ELB-ak4DfwuM.js} +3 -3
- package/web/assets/wardley-L42UT6IY-5TKZOOLJ-CNeL6VHE.js +1 -0
- package/web/assets/{wardleyDiagram-CUQ6CDDI-DEiFPQih.js → wardleyDiagram-CUQ6CDDI-CTzR4Loq.js} +1 -1
- package/web/assets/{xychartDiagram-N2JHSOCM-BUbayhST.js → xychartDiagram-N2JHSOCM-DA1BEaQz.js} +1 -1
- package/web/index.html +13 -15
- package/scripts/materialize-vendor-grammars.cjs +0 -97
- package/web/assets/architecture-7EHR7CIX-6QZW5X65-BETj2x4g.js +0 -1
- package/web/assets/architectureDiagram-UL44E2DR-D1EXI0zA.js +0 -36
- package/web/assets/chunk-2T2R6R2M-n6s9JZqv.js +0 -4
- package/web/assets/chunk-2UTLFMKG-CMBB1TMN.js +0 -1
- package/web/assets/chunk-4R4BOZG6-mKhL59ul.js +0 -159
- package/web/assets/chunk-6764PJDD-ChwMM2z4.js +0 -1
- package/web/assets/chunk-7J6CGLKN-DT-b53FT.js +0 -10
- package/web/assets/chunk-C62D2QBJ-CDAWj26E.js +0 -1
- package/web/assets/chunk-CEXFNPSA-D68Tk6ls.js +0 -1
- package/web/assets/chunk-CilyBKbf.js +0 -1
- package/web/assets/chunk-J5EP6P6S-DxWW0yvu.js +0 -1
- package/web/assets/chunk-KGYTTC2M-C6PHeuay.js +0 -1
- package/web/assets/chunk-RERM46MO-DQNbXtfw.js +0 -1
- package/web/assets/chunk-RKZBBQEN-BmTPLSyv.js +0 -1
- package/web/assets/chunk-RLI5ZMPA-DExu2DOK.js +0 -1
- package/web/assets/chunk-T5OCTHI4--9wWpVws.js +0 -1
- package/web/assets/chunk-UP6H54XL-DsKdC6jC.js +0 -1
- package/web/assets/chunk-UXSXWOXI-DR81EqLr.js +0 -1
- package/web/assets/classDiagram-KGZ6W3CR-Bv93af_b.js +0 -1
- package/web/assets/classDiagram-v2-72OJOZXJ-CLfEqHUa.js +0 -1
- package/web/assets/dagre-ND4H6XIP-DsIr9MOv.js +0 -4
- package/web/assets/diagram-3NCE3AQN-BqAtKUpW.js +0 -43
- package/web/assets/diagram-GF46GFSD-CaBG6n6o.js +0 -24
- package/web/assets/diagram-QXG6HAR7-CZ-O3rcV.js +0 -24
- package/web/assets/diagram-WEQXMOUZ-P4lSL4GH.js +0 -10
- package/web/assets/eventmodeling-FCH6USID-MREXMVOE-B3myHUst.js +0 -1
- package/web/assets/gitGraph-WXDBUCRP-R675I2BI-DF3rtf4A.js +0 -1
- package/web/assets/gitGraphDiagram-S2ZK5IYY-CCwVLT__.js +0 -106
- package/web/assets/index-BKWA-m7o.css +0 -2
- package/web/assets/index-CG6q8eTs.js +0 -626
- package/web/assets/info-J43DQDTF-KCYPFFUO-R4XV_akJ.js +0 -1
- package/web/assets/infoDiagram-3YFTVSEB-DmLICZx1.js +0 -2
- package/web/assets/packet-YPE3B663-LP52Z2RK-CgQPdNZa.js +0 -1
- package/web/assets/pie-LRSECV5Y-TCRJHUBD-BzWOwc_c.js +0 -1
- package/web/assets/radar-GUYGQ44K-RDLRG3WG-B7KG0FN7.js +0 -1
- package/web/assets/stateDiagram-7D4R322I-CB2nABwH.js +0 -1
- package/web/assets/stateDiagram-v2-36443NZ5-COBGd2RL.js +0 -1
- package/web/assets/treeView-BLDUP644-QA4HXRO3-CRSxEwLO.js +0 -1
- package/web/assets/treemap-LRROVOQU-LLAWBHMP-a0PfKoVn.js +0 -1
- package/web/assets/wardley-L42UT6IY-5TKZOOLJ-BKQ6e5mC.js +0 -1
- /package/web/assets/{chunk-AQ6EADP3-CCFje6lL.js → chunk-AQ6EADP3-CZhslHi-.js} +0 -0
package/dist/cli/tool.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Direct CLI Tool Commands
|
|
3
3
|
*
|
|
4
|
-
* Exposes GitNexus tools (query, context, impact, cypher) as direct CLI commands.
|
|
4
|
+
* Exposes GitNexus tools (query, context, impact, cypher, check) as direct CLI commands.
|
|
5
5
|
* Bypasses MCP entirely — invokes LocalBackend directly for minimal overhead.
|
|
6
6
|
*
|
|
7
7
|
* Usage:
|
|
@@ -62,7 +62,8 @@ export async function queryCommand(queryText, options) {
|
|
|
62
62
|
}
|
|
63
63
|
const backend = await getBackend();
|
|
64
64
|
const result = await backend.callTool('query', {
|
|
65
|
-
|
|
65
|
+
// #2175: canonical param is search_query; the backend still accepts legacy "query".
|
|
66
|
+
search_query: queryText,
|
|
66
67
|
task_context: options?.context,
|
|
67
68
|
goal: options?.goal,
|
|
68
69
|
limit: options?.limit ? parseInt(options.limit) : undefined,
|
|
@@ -119,12 +120,23 @@ export async function impactCommand(target, options) {
|
|
|
119
120
|
const rawOffset = parseInt(options?.offset ?? '', 10);
|
|
120
121
|
const parsedLimit = Number.isFinite(rawLimit) ? rawLimit : undefined;
|
|
121
122
|
const parsedOffset = Number.isFinite(rawOffset) ? rawOffset : undefined;
|
|
123
|
+
// `--line` is a PDG-only statement anchor (1-based source line). Parse it to
|
|
124
|
+
// an integer when provided and thread it ONLY when present, so the backend's
|
|
125
|
+
// line-without-pdg / non-positive-integer validation fires on the real value
|
|
126
|
+
// rather than on a silently-dropped flag. A non-numeric `--line` parses to
|
|
127
|
+
// NaN, which the backend rejects as a non-positive integer (loud, not silent).
|
|
128
|
+
const parsedLine = options?.line !== undefined ? parseInt(options.line, 10) : undefined;
|
|
122
129
|
const result = await backend.callTool('impact', {
|
|
123
130
|
target: target || undefined,
|
|
124
131
|
target_uid: options?.uid,
|
|
125
132
|
file_path: options?.file,
|
|
126
133
|
kind: options?.kind,
|
|
127
134
|
direction: options?.direction || 'upstream',
|
|
135
|
+
// Forward the engine selector; backend validates the enum (callgraph/pdg)
|
|
136
|
+
// and treats the default 'callgraph' identically to an omitted mode.
|
|
137
|
+
mode: options?.mode,
|
|
138
|
+
// PDG-only statement anchor — forwarded only when --line was given.
|
|
139
|
+
...(parsedLine !== undefined ? { line: parsedLine } : {}),
|
|
128
140
|
maxDepth: options?.depth ? parseInt(options.depth, 10) : undefined,
|
|
129
141
|
includeTests: options?.includeTests ?? false,
|
|
130
142
|
repo: options?.repo,
|
|
@@ -154,7 +166,8 @@ export async function cypherCommand(query, options) {
|
|
|
154
166
|
}
|
|
155
167
|
const backend = await getBackend();
|
|
156
168
|
const result = await backend.callTool('cypher', {
|
|
157
|
-
query
|
|
169
|
+
// #2175: canonical param is statement; the backend still accepts legacy "query".
|
|
170
|
+
statement: query,
|
|
158
171
|
repo: options?.repo,
|
|
159
172
|
branch: options?.branch,
|
|
160
173
|
});
|
|
@@ -170,3 +183,83 @@ export async function detectChangesCommand(options) {
|
|
|
170
183
|
});
|
|
171
184
|
output(formatDetectChangesResult(result));
|
|
172
185
|
}
|
|
186
|
+
export async function checkCommand(options) {
|
|
187
|
+
if (!options?.cycles) {
|
|
188
|
+
process.stderr.write('Usage: gitnexus check --cycles [--json]\n');
|
|
189
|
+
process.exitCode = 1;
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
try {
|
|
193
|
+
const backend = await getBackend();
|
|
194
|
+
const result = await backend.callTool('check', {
|
|
195
|
+
cycles: true,
|
|
196
|
+
repo: options.repo,
|
|
197
|
+
branch: options.branch,
|
|
198
|
+
});
|
|
199
|
+
if (result?.error) {
|
|
200
|
+
output(result);
|
|
201
|
+
process.exitCode = 1;
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
if (options.json) {
|
|
205
|
+
output(result);
|
|
206
|
+
}
|
|
207
|
+
else if (result.cycleCount === 0) {
|
|
208
|
+
output('No circular imports found.');
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
output(result.cycles.map((cycle) => cycle.files.join(' -> ')).join('\n'));
|
|
212
|
+
}
|
|
213
|
+
if (result.cycleCount > 0)
|
|
214
|
+
process.exitCode = 1;
|
|
215
|
+
}
|
|
216
|
+
catch (error) {
|
|
217
|
+
output({ error: error instanceof Error ? error.message : String(error) });
|
|
218
|
+
process.exitCode = 1;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
export async function traceCommand(from, to, options) {
|
|
222
|
+
if (options?.fromUid?.startsWith('--') || options?.toUid?.startsWith('--')) {
|
|
223
|
+
cliErrorKey('tool.usage.trace');
|
|
224
|
+
process.exit(1);
|
|
225
|
+
}
|
|
226
|
+
if ((!from?.trim() && !options?.fromUid) || (!to?.trim() && !options?.toUid)) {
|
|
227
|
+
cliErrorKey('tool.usage.trace');
|
|
228
|
+
process.exit(1);
|
|
229
|
+
}
|
|
230
|
+
// Reject a non-numeric / non-positive --depth up front rather than forwarding
|
|
231
|
+
// NaN (which the backend would silently treat as the default).
|
|
232
|
+
if (options?.depth !== undefined) {
|
|
233
|
+
const parsedDepth = Number(options.depth);
|
|
234
|
+
if (!Number.isInteger(parsedDepth) || parsedDepth < 1) {
|
|
235
|
+
cliErrorKey('tool.usage.trace');
|
|
236
|
+
process.exit(1);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
try {
|
|
240
|
+
const backend = await getBackend();
|
|
241
|
+
const result = await backend.callTool('trace', {
|
|
242
|
+
from: from || undefined,
|
|
243
|
+
from_uid: options?.fromUid,
|
|
244
|
+
from_file: options?.fromFile,
|
|
245
|
+
to: to || undefined,
|
|
246
|
+
to_uid: options?.toUid,
|
|
247
|
+
to_file: options?.toFile,
|
|
248
|
+
maxDepth: options?.depth ? parseInt(options.depth, 10) : undefined,
|
|
249
|
+
includeTests: options?.includeTests ?? false,
|
|
250
|
+
repo: options?.repo,
|
|
251
|
+
branch: options?.branch,
|
|
252
|
+
});
|
|
253
|
+
output(result);
|
|
254
|
+
}
|
|
255
|
+
catch (err) {
|
|
256
|
+
output({
|
|
257
|
+
status: 'error',
|
|
258
|
+
error: (err instanceof Error ? err.message : String(err)) || 'Trace analysis failed unexpectedly',
|
|
259
|
+
from: { name: from },
|
|
260
|
+
to: { name: to },
|
|
261
|
+
suggestion: 'Try gitnexus context <symbol> to see connections, or check if an interface bridges them.',
|
|
262
|
+
});
|
|
263
|
+
process.exit(1);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
@@ -13,66 +13,6 @@ export declare const CB_RESET_TIMEOUT_MS = 60000;
|
|
|
13
13
|
export declare const HF_MAX_TIMEOUT_MS: number;
|
|
14
14
|
/** Upper bound clamped on the env-override attempt count. */
|
|
15
15
|
export declare const HF_MAX_ATTEMPTS_CAP = 10;
|
|
16
|
-
/**
|
|
17
|
-
* @internal Exported only for unit tests and the two embedder entry points
|
|
18
|
-
* (`core/embeddings/embedder.ts` + `mcp/core/embedder.ts`). Not part of the
|
|
19
|
-
* public package API.
|
|
20
|
-
*
|
|
21
|
-
* Minimal subset of `@huggingface/transformers`' `env` object that gitnexus
|
|
22
|
-
* mutates. Defining a local structural type keeps this helper free of a
|
|
23
|
-
* transitive dependency on transformers' generated `.d.ts` while still
|
|
24
|
-
* giving full type-checking on the two fields we actually touch.
|
|
25
|
-
*/
|
|
26
|
-
export interface HfEnvSubset {
|
|
27
|
-
cacheDir: string;
|
|
28
|
-
remoteHost: string;
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* @internal Exported only for unit tests and the two embedder entry points
|
|
32
|
-
* (`core/embeddings/embedder.ts` + `mcp/core/embedder.ts`). Not part of the
|
|
33
|
-
* public package API.
|
|
34
|
-
*
|
|
35
|
-
* Apply user-controlled HuggingFace environment overrides to the
|
|
36
|
-
* `@huggingface/transformers` `env` object. Centralises the two env-var
|
|
37
|
-
* bridges so every gitnexus embedder entry point (the analyze pipeline
|
|
38
|
-
* and the MCP server) behaves identically.
|
|
39
|
-
*
|
|
40
|
-
* - **`HF_HOME`** → `env.cacheDir` (default: `~/.cache/huggingface`).
|
|
41
|
-
* transformers.js otherwise defaults to `./node_modules/.cache` inside
|
|
42
|
-
* its own install dir, which is unwritable when gitnexus is installed
|
|
43
|
-
* globally (e.g. `/usr/lib/node_modules/`).
|
|
44
|
-
*
|
|
45
|
-
* - **`HF_ENDPOINT`** → `env.remoteHost` (#1205). transformers.js does
|
|
46
|
-
* not read `HF_ENDPOINT` on its own — it reads `env.remoteHost` —
|
|
47
|
-
* even though `HF_ENDPOINT` is the standard env var the upstream
|
|
48
|
-
* `huggingface_hub` Python client and the official HF mirror docs
|
|
49
|
-
* tell users to set. Bridging the two unblocks `--embeddings` for
|
|
50
|
-
* users behind networks where `huggingface.co` is unreachable
|
|
51
|
-
* (corporate proxies, the GFW, air-gapped mirrors). The trailing
|
|
52
|
-
* slash is normalised because transformers.js builds URLs by string
|
|
53
|
-
* concatenation and a missing slash silently falls through to its
|
|
54
|
-
* default `huggingface.co/...` host.
|
|
55
|
-
*
|
|
56
|
-
* Mutation rather than return-and-apply because callers already hold a
|
|
57
|
-
* reference to the live `env` object imported from
|
|
58
|
-
* `@huggingface/transformers` — passing the same reference in keeps the
|
|
59
|
-
* call site a single line at each entry point.
|
|
60
|
-
*/
|
|
61
|
-
export declare function applyHfEnvOverrides(env: HfEnvSubset): void;
|
|
62
|
-
/**
|
|
63
|
-
* @internal Exported for unit tests and the two embedder entry points.
|
|
64
|
-
*
|
|
65
|
-
* Returns true when an error message indicates a network-level fetch failure
|
|
66
|
-
* during HuggingFace model download (e.g. `TypeError: fetch failed`,
|
|
67
|
-
* `ECONNREFUSED`, `ENOTFOUND`, `ETIMEDOUT`, `ECONNRESET`).
|
|
68
|
-
*
|
|
69
|
-
* These errors are not device-specific and cannot be fixed by falling back to
|
|
70
|
-
* a different ONNX device — the caller should rethrow immediately with
|
|
71
|
-
* guidance about `HF_ENDPOINT`.
|
|
72
|
-
*/
|
|
73
|
-
export declare function isNetworkFetchError(message: string): boolean;
|
|
74
|
-
/** @internal Used by `withHfDownloadRetry` to mark a circuit-open rejection. */
|
|
75
|
-
export declare const CIRCUIT_OPEN_TAG = "hf-circuit-open";
|
|
76
16
|
/**
|
|
77
17
|
* Module-level singleton shared by both embedder entry points
|
|
78
18
|
* (`core/embeddings/embedder.ts` + `mcp/core/embedder.ts`). Per-process
|
|
@@ -82,18 +22,12 @@ export declare const CIRCUIT_OPEN_TAG = "hf-circuit-open";
|
|
|
82
22
|
* recovery-time stampedes).
|
|
83
23
|
*/
|
|
84
24
|
export declare const hfDownloadCircuit: CircuitBreaker;
|
|
85
|
-
/** @internal Returns true for errors that should abort without retry (circuit-open). */
|
|
86
|
-
export declare function isHfCircuitOpenError(message: string): boolean;
|
|
87
25
|
/**
|
|
88
26
|
* Returns true for any HuggingFace download failure that warrants showing the
|
|
89
27
|
* `HF_ENDPOINT` remediation hint: either a raw network error or a
|
|
90
28
|
* circuit-open rejection (which itself was caused by repeated network errors).
|
|
91
29
|
*/
|
|
92
30
|
export declare function isHfDownloadFailure(message: string): boolean;
|
|
93
|
-
/** @internal Wraps `fn` in a hard time-limit. The timeout error contains
|
|
94
|
-
* `ETIMEDOUT` so that `isNetworkFetchError` classifies it correctly.
|
|
95
|
-
*/
|
|
96
|
-
export declare function withDownloadTimeout<T>(fn: () => Promise<T>, timeoutMs: number): Promise<T>;
|
|
97
31
|
export interface HfRetryOptions {
|
|
98
32
|
/** Maximum total attempts including the initial one (default: `HF_MAX_ATTEMPTS`). */
|
|
99
33
|
maxAttempts?: number;
|
|
@@ -19,6 +19,13 @@ export declare const isHttpMode: () => boolean;
|
|
|
19
19
|
* if HTTP mode is not active or no explicit dimensions are set.
|
|
20
20
|
*/
|
|
21
21
|
export declare const getHttpDimensions: () => number | undefined;
|
|
22
|
+
/**
|
|
23
|
+
* Return a safe representation of a URL for logs and error messages.
|
|
24
|
+
* Strips query string (may contain tokens) and userinfo (may contain
|
|
25
|
+
* credentials), keeping protocol + host + path. Exported so the CLI's
|
|
26
|
+
* custom-endpoint confirmation can mask the same way.
|
|
27
|
+
*/
|
|
28
|
+
export declare const safeUrl: (url: string) => string;
|
|
22
29
|
/**
|
|
23
30
|
* Embed texts via the HTTP backend, splitting into batches.
|
|
24
31
|
* Reads config from env vars on every call.
|
|
@@ -56,10 +56,12 @@ export const isHttpMode = () => readConfig() !== null;
|
|
|
56
56
|
*/
|
|
57
57
|
export const getHttpDimensions = () => readConfig()?.dimensions;
|
|
58
58
|
/**
|
|
59
|
-
* Return a safe representation of a URL for error messages.
|
|
60
|
-
* Strips query string (may contain tokens) and userinfo
|
|
59
|
+
* Return a safe representation of a URL for logs and error messages.
|
|
60
|
+
* Strips query string (may contain tokens) and userinfo (may contain
|
|
61
|
+
* credentials), keeping protocol + host + path. Exported so the CLI's
|
|
62
|
+
* custom-endpoint confirmation can mask the same way.
|
|
61
63
|
*/
|
|
62
|
-
const safeUrl = (url) => {
|
|
64
|
+
export const safeUrl = (url) => {
|
|
63
65
|
try {
|
|
64
66
|
const u = new URL(url);
|
|
65
67
|
return `${u.protocol}//${u.host}${u.pathname}`;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Server Mapping Configuration
|
|
3
3
|
*
|
|
4
|
-
* Reads
|
|
4
|
+
* Reads getGlobalDir()/server-mapping.json to map repo names to service names.
|
|
5
5
|
* Used in embedding text to enrich metadata with microservice context.
|
|
6
6
|
*/
|
|
7
7
|
/**
|
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Server Mapping Configuration
|
|
3
3
|
*
|
|
4
|
-
* Reads
|
|
4
|
+
* Reads getGlobalDir()/server-mapping.json to map repo names to service names.
|
|
5
5
|
* Used in embedding text to enrich metadata with microservice context.
|
|
6
6
|
*/
|
|
7
7
|
import fs from 'fs/promises';
|
|
8
8
|
import path from 'path';
|
|
9
|
-
import
|
|
10
|
-
|
|
9
|
+
import { getGlobalDir } from '../../storage/repo-manager.js';
|
|
10
|
+
// Sourced from getGlobalDir() so it honors GITNEXUS_HOME (the Docker image sets
|
|
11
|
+
// GITNEXUS_HOME=/data/gitnexus); falls back to ~/.gitnexus when unset. Wrapped in
|
|
12
|
+
// path.resolve() for parity with the clone/upload roots (git-clone.ts CLONE_ROOT,
|
|
13
|
+
// upload-paths.ts UPLOAD_ROOT) so a relative GITNEXUS_HOME still yields an absolute path.
|
|
14
|
+
const MAPPING_FILE = path.resolve(path.join(getGlobalDir(), 'server-mapping.json'));
|
|
11
15
|
let cachedMapping = null;
|
|
12
16
|
/**
|
|
13
17
|
* Read the server mapping file and return the serverName for a given repoName.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
interface ImportEdge {
|
|
2
|
+
source: string;
|
|
3
|
+
target: string;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Return one deterministic concrete cycle for every cyclic strongly connected
|
|
7
|
+
* component in the file import graph.
|
|
8
|
+
*/
|
|
9
|
+
export declare function findImportCycles(edges: ImportEdge[]): string[][];
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
function findCyclePath(component, adjacency) {
|
|
2
|
+
const allowed = new Set(component);
|
|
3
|
+
const start = component[0];
|
|
4
|
+
const parents = new Map([[start, null]]);
|
|
5
|
+
const queue = [start];
|
|
6
|
+
for (let index = 0; index < queue.length; index += 1) {
|
|
7
|
+
const node = queue[index];
|
|
8
|
+
for (const next of adjacency.get(node) ?? []) {
|
|
9
|
+
if (!allowed.has(next))
|
|
10
|
+
continue;
|
|
11
|
+
if (next === start) {
|
|
12
|
+
const path = [];
|
|
13
|
+
let cursor = node;
|
|
14
|
+
while (cursor !== null) {
|
|
15
|
+
path.push(cursor);
|
|
16
|
+
cursor = parents.get(cursor) ?? null;
|
|
17
|
+
}
|
|
18
|
+
path.reverse();
|
|
19
|
+
return [...path, start];
|
|
20
|
+
}
|
|
21
|
+
if (parents.has(next))
|
|
22
|
+
continue;
|
|
23
|
+
parents.set(next, node);
|
|
24
|
+
queue.push(next);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
throw new Error('Invariant violation: no cycle found through SCC root.');
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Return one deterministic concrete cycle for every cyclic strongly connected
|
|
31
|
+
* component in the file import graph.
|
|
32
|
+
*/
|
|
33
|
+
export function findImportCycles(edges) {
|
|
34
|
+
const adjacency = new Map();
|
|
35
|
+
for (const { source, target } of edges) {
|
|
36
|
+
if (!source || !target)
|
|
37
|
+
continue;
|
|
38
|
+
const targets = adjacency.get(source) ?? new Set();
|
|
39
|
+
targets.add(target);
|
|
40
|
+
adjacency.set(source, targets);
|
|
41
|
+
if (!adjacency.has(target))
|
|
42
|
+
adjacency.set(target, new Set());
|
|
43
|
+
}
|
|
44
|
+
const sortedAdjacency = new Map([...adjacency].map(([node, targets]) => [node, [...targets].sort()]));
|
|
45
|
+
const reverseAdjacency = new Map();
|
|
46
|
+
for (const node of sortedAdjacency.keys())
|
|
47
|
+
reverseAdjacency.set(node, []);
|
|
48
|
+
for (const [source, targets] of sortedAdjacency) {
|
|
49
|
+
for (const target of targets)
|
|
50
|
+
reverseAdjacency.get(target).push(source);
|
|
51
|
+
}
|
|
52
|
+
for (const sources of reverseAdjacency.values())
|
|
53
|
+
sources.sort();
|
|
54
|
+
const visited = new Set();
|
|
55
|
+
const finishOrder = [];
|
|
56
|
+
const components = [];
|
|
57
|
+
for (const start of [...sortedAdjacency.keys()].sort()) {
|
|
58
|
+
if (visited.has(start))
|
|
59
|
+
continue;
|
|
60
|
+
visited.add(start);
|
|
61
|
+
const stack = [{ node: start, nextIndex: 0 }];
|
|
62
|
+
while (stack.length > 0) {
|
|
63
|
+
const frame = stack[stack.length - 1];
|
|
64
|
+
const neighbors = sortedAdjacency.get(frame.node) ?? [];
|
|
65
|
+
if (frame.nextIndex < neighbors.length) {
|
|
66
|
+
const next = neighbors[frame.nextIndex++];
|
|
67
|
+
if (!visited.has(next)) {
|
|
68
|
+
visited.add(next);
|
|
69
|
+
stack.push({ node: next, nextIndex: 0 });
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
finishOrder.push(frame.node);
|
|
74
|
+
stack.pop();
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
visited.clear();
|
|
79
|
+
for (let index = finishOrder.length - 1; index >= 0; index -= 1) {
|
|
80
|
+
const start = finishOrder[index];
|
|
81
|
+
if (visited.has(start))
|
|
82
|
+
continue;
|
|
83
|
+
const component = [];
|
|
84
|
+
const stack = [start];
|
|
85
|
+
visited.add(start);
|
|
86
|
+
while (stack.length > 0) {
|
|
87
|
+
const node = stack.pop();
|
|
88
|
+
component.push(node);
|
|
89
|
+
for (const next of reverseAdjacency.get(node) ?? []) {
|
|
90
|
+
if (visited.has(next))
|
|
91
|
+
continue;
|
|
92
|
+
visited.add(next);
|
|
93
|
+
stack.push(next);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
component.sort();
|
|
97
|
+
components.push(component);
|
|
98
|
+
}
|
|
99
|
+
return components
|
|
100
|
+
.filter((component) => component.length > 1 || (sortedAdjacency.get(component[0]) ?? []).includes(component[0]))
|
|
101
|
+
.sort((a, b) => (a[0] < b[0] ? -1 : a[0] > b[0] ? 1 : 0))
|
|
102
|
+
.map((component) => findCyclePath(component, sortedAdjacency));
|
|
103
|
+
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Cross-repo impact (Phase 1 local walk + Phase 2 bridge fan-out).
|
|
3
3
|
* All bridge Cypher for this feature lives in this module.
|
|
4
4
|
*/
|
|
5
|
-
import type { GroupImpactResult } from './types.js';
|
|
5
|
+
import type { CrossRepoImpact, GroupImpactResult } from './types.js';
|
|
6
6
|
import type { GroupToolPort } from './service.js';
|
|
7
7
|
/** Cross-boundary hops beyond this value are clamped (multi-hop reserved for future work). */
|
|
8
8
|
export declare const MAX_SUPPORTED_CROSS_DEPTH = 1;
|
|
@@ -79,6 +79,7 @@ export declare function collectImpactSymbolUids(local: unknown, servicePrefix: s
|
|
|
79
79
|
uids: string[];
|
|
80
80
|
targetFilePath?: string;
|
|
81
81
|
};
|
|
82
|
+
export declare function mergeRisk(localRisk: string, cross: CrossRepoImpact[]): string;
|
|
82
83
|
export declare function runGroupImpact(deps: RunGroupImpactDeps, params: Record<string, unknown>): Promise<GroupImpactResult | {
|
|
83
84
|
error: string;
|
|
84
85
|
}>;
|
|
@@ -251,7 +251,11 @@ function extractProcessNames(impact) {
|
|
|
251
251
|
return [];
|
|
252
252
|
return o.affected_processes.map((p) => String(p.name ?? '')).filter(Boolean);
|
|
253
253
|
}
|
|
254
|
-
|
|
254
|
+
// Exported so the U4 PDG-result interchangeability contract (KTD8) can assert
|
|
255
|
+
// permanently that a PDG `risk:'UNKNOWN'` never coalesces to a confident `LOW`.
|
|
256
|
+
// No behavior change — `'UNKNOWN'` was already handled correctly at the
|
|
257
|
+
// `(localRisk === 'LOW' || localRisk === 'UNKNOWN')` branch below.
|
|
258
|
+
export function mergeRisk(localRisk, cross) {
|
|
255
259
|
const highConf = cross.some((c) => c.contract.confidence >= 0.85);
|
|
256
260
|
if (localRisk === 'CRITICAL')
|
|
257
261
|
return 'CRITICAL';
|
|
@@ -1,23 +1,27 @@
|
|
|
1
1
|
import { createRequire } from 'node:module';
|
|
2
|
+
import { requireVendoredGrammar } from '../../../tree-sitter/vendored-grammars.js';
|
|
2
3
|
import { compilePatterns, runCompiledPatterns, } from '../tree-sitter-scanner.js';
|
|
3
4
|
/**
|
|
4
5
|
* Protobuf (.proto) tree-sitter plugin for gRPC contract extraction.
|
|
5
6
|
*
|
|
6
|
-
* Uses `tree-sitter-proto` (coder3101/tree-sitter-proto)
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* string-sanitizing parser.
|
|
7
|
+
* Uses `tree-sitter-proto` (coder3101/tree-sitter-proto), loaded from
|
|
8
|
+
* `vendor/` by absolute path (NEVER copied into node_modules — see
|
|
9
|
+
* vendored-grammars.ts / #2111). If the grammar's binding cannot be loaded
|
|
10
|
+
* (e.g. no prebuild for an unusual platform), the plugin exports `null` and the
|
|
11
|
+
* orchestrator falls back to the existing manual string-sanitizing parser.
|
|
11
12
|
*
|
|
12
13
|
* The grammar is vendored in `vendor/tree-sitter-proto/` with
|
|
13
14
|
* parser.c regenerated against tree-sitter-cli 0.24 (ABI version 14)
|
|
14
15
|
* so it is compatible with the project's tree-sitter 0.21.1 runtime
|
|
15
16
|
* (which loads ABI 13–14).
|
|
16
17
|
*/
|
|
18
|
+
// Only for `tree-sitter` (a real npm dependency) in the smoke-test below;
|
|
19
|
+
// the vendored grammar goes through requireVendoredGrammar (never a bare
|
|
20
|
+
// `_require('tree-sitter-proto')`, which would force a node_modules copy — #2111).
|
|
17
21
|
const _require = createRequire(import.meta.url);
|
|
18
22
|
let ProtoGrammar = null;
|
|
19
23
|
try {
|
|
20
|
-
ProtoGrammar =
|
|
24
|
+
ProtoGrammar = requireVendoredGrammar('tree-sitter-proto');
|
|
21
25
|
}
|
|
22
26
|
catch {
|
|
23
27
|
// Grammar not installed — PROTO_GRPC_PLUGIN will be null.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { requireVendoredGrammar } from '../../../tree-sitter/vendored-grammars.js';
|
|
2
2
|
import { compilePatterns, runCompiledPatterns, unquoteLiteral, } from '../tree-sitter-scanner.js';
|
|
3
3
|
/**
|
|
4
4
|
* Kotlin HTTP plugin (Spring providers + consumers).
|
|
@@ -52,15 +52,15 @@ import { compilePatterns, runCompiledPatterns, unquoteLiteral, } from '../tree-s
|
|
|
52
52
|
* value_argument
|
|
53
53
|
* string_literal ← the path
|
|
54
54
|
*
|
|
55
|
-
* tree-sitter-kotlin is
|
|
56
|
-
*
|
|
57
|
-
*
|
|
55
|
+
* tree-sitter-kotlin is a vendored grammar loaded from `vendor/` by absolute
|
|
56
|
+
* path (NEVER copied into node_modules — see vendored-grammars.ts / #2111) —
|
|
57
|
+
* when its native binding is unavailable the plugin gracefully exports `null`
|
|
58
|
+
* and `http-patterns/index.ts` skips registration for `.kt`/`.kts` files.
|
|
58
59
|
*/
|
|
59
|
-
|
|
60
|
-
/** Loaded lazily; null when the grammar binding isn't installed. */
|
|
60
|
+
/** Loaded lazily; null when the grammar binding isn't available. */
|
|
61
61
|
let Kotlin = null;
|
|
62
62
|
try {
|
|
63
|
-
Kotlin =
|
|
63
|
+
Kotlin = requireVendoredGrammar('tree-sitter-kotlin');
|
|
64
64
|
}
|
|
65
65
|
catch {
|
|
66
66
|
Kotlin = null;
|
|
@@ -1,5 +1,29 @@
|
|
|
1
1
|
import type { ContractExtractor, CypherExecutor } from '../contract-extractor.js';
|
|
2
2
|
import type { ExtractedContract, RepoHandle } from '../types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Language-agnostic orchestrator for HTTP route (provider + consumer)
|
|
5
|
+
* contract extraction. Two strategies, in order of preference per role:
|
|
6
|
+
*
|
|
7
|
+
* 1. **Graph-assisted (Strategy A)** — if a per-repo LadybugDB executor
|
|
8
|
+
* is available, read `HANDLES_ROUTE` / `FETCHES` Cypher edges that
|
|
9
|
+
* the ingestion pipeline already produced via tree-sitter. This is
|
|
10
|
+
* the preferred path because the graph has richer symbol metadata
|
|
11
|
+
* (real uids, class/method structure, etc.).
|
|
12
|
+
*
|
|
13
|
+
* 2. **Source-scan supplement (Strategy B)** — parse files directly with
|
|
14
|
+
* the per-language plugin registry in `./http-patterns/`. Used to
|
|
15
|
+
* fill gaps when graph extraction only covers part of a polyglot repo
|
|
16
|
+
* (e.g. Java graph routes plus Go source-scan routes). Graph entries
|
|
17
|
+
* remain authoritative for duplicate contract IDs because they carry
|
|
18
|
+
* richer symbol metadata. Each plugin owns its tree-sitter grammar
|
|
19
|
+
* and query sources — this orchestrator imports NO grammars or query
|
|
20
|
+
* strings.
|
|
21
|
+
*
|
|
22
|
+
* Adding a new language for Strategy B is a one-file edit in
|
|
23
|
+
* `http-patterns/index.ts`: register a new `HttpLanguagePlugin` and
|
|
24
|
+
* widen `HTTP_SCAN_GLOB` if needed.
|
|
25
|
+
*/
|
|
26
|
+
export declare const HANDLES_ROUTE_QUERY = "\nMATCH (handlerFile:File)-[r:CodeRelation {type: 'HANDLES_ROUTE'}]->(route:Route)\nRETURN handlerFile.id AS fileId, handlerFile.filePath AS filePath,\n route.name AS routePath, route.id AS routeId,\n route.method AS routeMethod,\n route.responseKeys AS responseKeys,\n r.reason AS routeSource";
|
|
3
27
|
/**
|
|
4
28
|
* Canonicalize a provider-side HTTP path for contract-id generation:
|
|
5
29
|
* - strip query string
|
|
@@ -4,6 +4,7 @@ import Parser from 'tree-sitter';
|
|
|
4
4
|
import { createIgnoreFilter } from '../../../config/ignore-service.js';
|
|
5
5
|
import { readSafe } from './fs-utils.js';
|
|
6
6
|
import { parseSourceSafe } from '../../tree-sitter/safe-parse.js';
|
|
7
|
+
import { logger } from '../../logger.js';
|
|
7
8
|
import { getPluginForFile, HTTP_SCAN_GLOB, } from './http-patterns/index.js';
|
|
8
9
|
/**
|
|
9
10
|
* Language-agnostic orchestrator for HTTP route (provider + consumer)
|
|
@@ -29,10 +30,14 @@ import { getPluginForFile, HTTP_SCAN_GLOB, } from './http-patterns/index.js';
|
|
|
29
30
|
* widen `HTTP_SCAN_GLOB` if needed.
|
|
30
31
|
*/
|
|
31
32
|
// ─── Graph-assisted queries ──────────────────────────────────────────
|
|
32
|
-
|
|
33
|
+
// Exported so integration tests can run the exact production query against a
|
|
34
|
+
// real LadybugDB (guards the Route.method column contract — see
|
|
35
|
+
// route-method-roundtrip.test.ts).
|
|
36
|
+
export const HANDLES_ROUTE_QUERY = `
|
|
33
37
|
MATCH (handlerFile:File)-[r:CodeRelation {type: 'HANDLES_ROUTE'}]->(route:Route)
|
|
34
38
|
RETURN handlerFile.id AS fileId, handlerFile.filePath AS filePath,
|
|
35
39
|
route.name AS routePath, route.id AS routeId,
|
|
40
|
+
route.method AS routeMethod,
|
|
36
41
|
route.responseKeys AS responseKeys,
|
|
37
42
|
r.reason AS routeSource`;
|
|
38
43
|
const FETCHES_QUERY = `
|
|
@@ -273,14 +278,26 @@ export class HttpRouteExtractor {
|
|
|
273
278
|
try {
|
|
274
279
|
rows = await db(HANDLES_ROUTE_QUERY);
|
|
275
280
|
}
|
|
276
|
-
catch {
|
|
281
|
+
catch (err) {
|
|
282
|
+
// A failure here silently disables the entire graph-assisted HTTP
|
|
283
|
+
// provider path (the source-scan fallback still runs and masks most
|
|
284
|
+
// of the damage), so surface it at debug level to make a total
|
|
285
|
+
// outage observable instead of invisible.
|
|
286
|
+
logger.debug(`[http-route-extractor] HANDLES_ROUTE query failed; graph providers skipped: ${err instanceof Error ? err.message : String(err)}`);
|
|
277
287
|
return [];
|
|
278
288
|
}
|
|
279
289
|
for (const row of rows) {
|
|
280
290
|
const filePath = String(row.filePath ?? '');
|
|
281
291
|
const routePath = String(row.routePath ?? '');
|
|
282
292
|
const routeSource = String(row.routeSource ?? row.routeReason ?? '');
|
|
283
|
-
|
|
293
|
+
// Prefer the HTTP verb persisted on the Route node by the ingestion
|
|
294
|
+
// routes phase (Spring/Laravel framework routes and decorator routes
|
|
295
|
+
// carry it). Fall back to parsing it out of the edge reason for
|
|
296
|
+
// older indexes or filesystem routes that never stored a method.
|
|
297
|
+
const graphMethod = String(row.routeMethod ?? '')
|
|
298
|
+
.trim()
|
|
299
|
+
.toUpperCase();
|
|
300
|
+
let method = (graphMethod || null) ?? methodFromRouteReason(routeSource);
|
|
284
301
|
// Look up handler name (and backfill method if missing) from the
|
|
285
302
|
// plugin's scan of the handler file. This replaces the old
|
|
286
303
|
// regex-based `inferMethodFromFileScan` and `pickJavaHandlerName`
|
|
@@ -396,7 +413,8 @@ export class HttpRouteExtractor {
|
|
|
396
413
|
try {
|
|
397
414
|
rows = await db(FETCHES_QUERY);
|
|
398
415
|
}
|
|
399
|
-
catch {
|
|
416
|
+
catch (err) {
|
|
417
|
+
logger.debug(`[http-route-extractor] FETCHES query failed; graph consumers skipped: ${err instanceof Error ? err.message : String(err)}`);
|
|
400
418
|
return [];
|
|
401
419
|
}
|
|
402
420
|
for (const row of rows) {
|