gitnexus 1.6.11-rc.8 → 1.6.11
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 +95 -26
- package/dist/_shared/graph/types.d.ts +81 -2
- package/dist/_shared/graph/types.d.ts.map +1 -1
- package/dist/_shared/integrations/circuit-breaker.d.ts.map +1 -1
- package/dist/_shared/integrations/circuit-breaker.js.map +1 -1
- package/dist/_shared/integrations/resilient-fetch.d.ts.map +1 -1
- 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 -1
- package/dist/_shared/languages.d.ts.map +1 -1
- package/dist/_shared/languages.js +1 -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 +4 -0
- package/dist/_shared/lbug/schema-constants.js.map +1 -1
- package/dist/_shared/scope-resolution/evidence-weights.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/finalize-algorithm.js +1 -0
- package/dist/_shared/scope-resolution/finalize-algorithm.js.map +1 -1
- package/dist/_shared/scope-resolution/language-classification.d.ts +3 -0
- package/dist/_shared/scope-resolution/language-classification.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/language-classification.js +4 -0
- package/dist/_shared/scope-resolution/language-classification.js.map +1 -1
- package/dist/_shared/scope-resolution/reference-site.d.ts +10 -0
- package/dist/_shared/scope-resolution/reference-site.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/registries/field-registry.js.map +1 -1
- package/dist/_shared/scope-resolution/registries/method-registry.js.map +1 -1
- package/dist/_shared/scope-resolution/scope-tree.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/scope-tree.js.map +1 -1
- package/dist/_shared/scope-resolution/types.d.ts +15 -0
- package/dist/_shared/scope-resolution/types.d.ts.map +1 -1
- package/dist/cli/ai-context.d.ts +4 -0
- package/dist/cli/ai-context.js +90 -14
- package/dist/cli/analyze-config.js +14 -0
- package/dist/cli/analyze-options.d.ts +14 -0
- package/dist/cli/analyze-watch.d.ts +20 -0
- package/dist/cli/analyze-watch.js +434 -0
- package/dist/cli/analyze.js +27 -9
- package/dist/cli/auto-sync.d.ts +1 -0
- package/dist/cli/auto-sync.js +107 -0
- package/dist/cli/command-banner.d.ts +15 -0
- package/dist/cli/command-banner.js +42 -0
- package/dist/cli/detect-changes-format.js +21 -0
- package/dist/cli/doctor.d.ts +7 -0
- package/dist/cli/doctor.js +14 -0
- package/dist/cli/group.js +7 -1
- package/dist/cli/help-i18n.js +4 -0
- package/dist/cli/i18n/en.d.ts +18 -3
- package/dist/cli/i18n/en.js +18 -3
- package/dist/cli/i18n/resources.d.ts +33 -3
- package/dist/cli/i18n/zh-CN.d.ts +15 -0
- package/dist/cli/i18n/zh-CN.js +18 -3
- package/dist/cli/index.js +34 -7
- package/dist/cli/mcp.d.ts +15 -0
- package/dist/cli/mcp.js +44 -0
- package/dist/cli/optional-grammars.d.ts +3 -2
- package/dist/cli/optional-grammars.js +19 -3
- package/dist/cli/setup.js +41 -15
- package/dist/cli/update-notice.d.ts +34 -0
- package/dist/cli/update-notice.js +91 -0
- package/dist/cli/update.d.ts +21 -0
- package/dist/cli/update.js +93 -0
- package/dist/cli/watch.d.ts +1 -20
- package/dist/cli/watch.js +5 -371
- package/dist/core/analysis-feature-registry.d.ts +2 -0
- package/dist/core/analysis-feature-registry.js +15 -0
- package/dist/core/analyzer-identity.js +21 -3
- package/dist/core/auto-sync/analysis-worker-launch.d.ts +30 -0
- package/dist/core/auto-sync/analysis-worker-launch.js +166 -0
- package/dist/core/auto-sync/config.d.ts +33 -0
- package/dist/core/auto-sync/config.js +320 -0
- package/dist/core/auto-sync/index.d.ts +6 -0
- package/dist/core/auto-sync/index.js +6 -0
- package/dist/core/auto-sync/path-security.d.ts +9 -0
- package/dist/core/auto-sync/path-security.js +251 -0
- package/dist/core/auto-sync/repo.d.ts +1 -0
- package/dist/core/auto-sync/repo.js +6 -0
- package/dist/core/auto-sync/runner.d.ts +44 -0
- package/dist/core/auto-sync/runner.js +428 -0
- package/dist/core/auto-sync/starter.d.ts +50 -0
- package/dist/core/auto-sync/starter.js +497 -0
- package/dist/core/auto-sync/state.d.ts +37 -0
- package/dist/core/auto-sync/state.js +119 -0
- package/dist/core/group/config-parser.js +8 -1
- package/dist/core/group/cross-impact.d.ts +3 -0
- package/dist/core/group/cross-impact.js +36 -4
- package/dist/core/group/extractors/http-patterns/java.js +22 -8
- package/dist/core/group/extractors/http-patterns/kotlin.js +86 -31
- package/dist/core/group/extractors/http-patterns/node.js +145 -8
- package/dist/core/group/extractors/http-patterns/python.js +11 -7
- package/dist/core/group/extractors/http-route-extractor.js +63 -17
- package/dist/core/group/extractors/java-workspace-extractor.js +244 -31
- package/dist/core/group/group-lock.js +5 -6
- package/dist/core/group/normalization.d.ts +38 -1
- package/dist/core/group/normalization.js +59 -3
- package/dist/core/group/service.d.ts +11 -0
- package/dist/core/group/service.js +13 -1
- package/dist/core/group/storage.js +2 -2
- package/dist/core/group/sync.d.ts +24 -1
- package/dist/core/group/sync.js +46 -8
- package/dist/core/group/types.d.ts +13 -0
- package/dist/core/incremental/derived-writeback.d.ts +36 -0
- package/dist/core/incremental/derived-writeback.js +68 -0
- package/dist/core/incremental/spring-config-drift.d.ts +12 -0
- package/dist/core/incremental/spring-config-drift.js +46 -0
- package/dist/core/incremental/subgraph-extract.d.ts +7 -4
- package/dist/core/incremental/subgraph-extract.js +30 -5
- package/dist/core/ingestion/asyncapi/document.d.ts +226 -0
- package/dist/core/ingestion/asyncapi/document.js +758 -0
- package/dist/core/ingestion/asyncapi/protocol.d.ts +79 -0
- package/dist/core/ingestion/asyncapi/protocol.js +203 -0
- package/dist/core/ingestion/call-extractors/configs/zig.d.ts +2 -0
- package/dist/core/ingestion/call-extractors/configs/zig.js +4 -0
- package/dist/core/ingestion/call-extractors/zig-static-gating.d.ts +100 -0
- package/dist/core/ingestion/call-extractors/zig-static-gating.js +319 -0
- package/dist/core/ingestion/call-processor.js +3 -1
- package/dist/core/ingestion/class-extractors/configs/zig.d.ts +2 -0
- package/dist/core/ingestion/class-extractors/configs/zig.js +32 -0
- package/dist/core/ingestion/class-extractors/generic.js +4 -1
- package/dist/core/ingestion/class-types.d.ts +6 -2
- package/dist/core/ingestion/destination-key.d.ts +59 -0
- package/dist/core/ingestion/destination-key.js +61 -0
- package/dist/core/ingestion/entry-point-scoring.d.ts +6 -2
- package/dist/core/ingestion/entry-point-scoring.js +8 -44
- package/dist/core/ingestion/export-detection.d.ts +37 -0
- package/dist/core/ingestion/export-detection.js +60 -0
- package/dist/core/ingestion/field-extractors/configs/zig.d.ts +8 -0
- package/dist/core/ingestion/field-extractors/configs/zig.js +49 -0
- package/dist/core/ingestion/field-extractors/generic.d.ts +1 -1
- package/dist/core/ingestion/field-extractors/generic.js +12 -1
- package/dist/core/ingestion/frameworks/spring/actuator-runtime.d.ts +26 -0
- package/dist/core/ingestion/frameworks/spring/actuator-runtime.js +843 -0
- package/dist/core/ingestion/frameworks/spring/analysis-features.d.ts +5 -0
- package/dist/core/ingestion/frameworks/spring/analysis-features.js +9 -0
- package/dist/core/ingestion/frameworks/spring/annotation-arguments.js +8 -1
- package/dist/core/ingestion/frameworks/spring/argument-facts.d.ts +80 -0
- package/dist/core/ingestion/frameworks/spring/argument-facts.js +85 -0
- package/dist/core/ingestion/frameworks/spring/config-bindings.d.ts +1 -0
- package/dist/core/ingestion/frameworks/spring/config-bindings.js +2 -1
- package/dist/core/ingestion/frameworks/spring/destinations.d.ts +539 -0
- package/dist/core/ingestion/frameworks/spring/destinations.js +840 -0
- package/dist/core/ingestion/frameworks/spring/dynamic-lookups.d.ts +22 -0
- package/dist/core/ingestion/frameworks/spring/dynamic-lookups.js +124 -0
- package/dist/core/ingestion/frameworks/spring/message-producers.d.ts +78 -0
- package/dist/core/ingestion/frameworks/spring/message-producers.js +90 -0
- package/dist/core/ingestion/frameworks/spring/non-http-handlers.d.ts +29 -0
- package/dist/core/ingestion/frameworks/spring/vendor-prefixes.d.ts +7 -0
- package/dist/core/ingestion/frameworks/spring/vendor-prefixes.js +22 -0
- package/dist/core/ingestion/import-resolvers/configs/zig.d.ts +13 -0
- package/dist/core/ingestion/import-resolvers/configs/zig.js +26 -0
- package/dist/core/ingestion/import-resolvers/zig.d.ts +34 -0
- package/dist/core/ingestion/import-resolvers/zig.js +193 -0
- package/dist/core/ingestion/language-config.d.ts +177 -0
- package/dist/core/ingestion/language-config.js +719 -0
- package/dist/core/ingestion/language-provider.d.ts +178 -1
- package/dist/core/ingestion/language-provider.js +22 -0
- package/dist/core/ingestion/languages/csharp/razor-view-components.d.ts +62 -0
- package/dist/core/ingestion/languages/csharp/razor-view-components.js +954 -0
- package/dist/core/ingestion/languages/csharp/resolution-config.d.ts +3 -0
- package/dist/core/ingestion/languages/csharp/resolution-config.js +6 -1
- package/dist/core/ingestion/languages/csharp/scope-resolver.js +8 -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 +1 -1
- package/dist/core/ingestion/languages/java/analysis-features.js +14 -6
- package/dist/core/ingestion/languages/java/capture-side-channel.d.ts +8 -0
- package/dist/core/ingestion/languages/java/capture-side-channel.js +34 -0
- package/dist/core/ingestion/languages/java/captures.js +22 -1
- package/dist/core/ingestion/languages/java/lombok-synthesizer.d.ts +42 -0
- package/dist/core/ingestion/languages/java/lombok-synthesizer.js +439 -0
- package/dist/core/ingestion/languages/java/scope-resolver.js +2 -0
- package/dist/core/ingestion/languages/java/spring-actuator.d.ts +2 -0
- package/dist/core/ingestion/languages/java/spring-actuator.js +62 -0
- package/dist/core/ingestion/languages/java/spring-di.d.ts +17 -1
- package/dist/core/ingestion/languages/java/spring-di.js +44 -2
- package/dist/core/ingestion/languages/java/spring-dynamic-lookup.d.ts +8 -0
- package/dist/core/ingestion/languages/java/spring-dynamic-lookup.js +62 -0
- package/dist/core/ingestion/languages/java/spring-message-producers.d.ts +20 -0
- package/dist/core/ingestion/languages/java/spring-message-producers.js +83 -0
- package/dist/core/ingestion/languages/java/spring-non-http-handlers.d.ts +11 -1
- package/dist/core/ingestion/languages/java/spring-non-http-handlers.js +13 -3
- package/dist/core/ingestion/languages/java.js +18 -8
- package/dist/core/ingestion/languages/jvm/accessor-synthesis.d.ts +99 -0
- package/dist/core/ingestion/languages/jvm/accessor-synthesis.js +173 -0
- package/dist/core/ingestion/languages/jvm/beanspec.d.ts +17 -0
- package/dist/core/ingestion/languages/jvm/beanspec.js +42 -0
- package/dist/core/ingestion/languages/kotlin/capture-side-channel.d.ts +15 -0
- package/dist/core/ingestion/languages/kotlin/capture-side-channel.js +50 -0
- package/dist/core/ingestion/languages/kotlin/captures.js +24 -1
- package/dist/core/ingestion/languages/kotlin/lombok-synthesizer.d.ts +26 -0
- package/dist/core/ingestion/languages/kotlin/lombok-synthesizer.js +417 -0
- package/dist/core/ingestion/languages/kotlin/scope-resolver.js +4 -0
- package/dist/core/ingestion/languages/kotlin/spring-actuator.d.ts +4 -0
- package/dist/core/ingestion/languages/kotlin/spring-actuator.js +172 -0
- package/dist/core/ingestion/languages/kotlin/spring-config-bindings.d.ts +18 -0
- package/dist/core/ingestion/languages/kotlin/spring-config-bindings.js +411 -0
- package/dist/core/ingestion/languages/kotlin/spring-di.d.ts +51 -1
- package/dist/core/ingestion/languages/kotlin/spring-di.js +86 -6
- package/dist/core/ingestion/languages/kotlin/spring-dynamic-lookup.d.ts +8 -0
- package/dist/core/ingestion/languages/kotlin/spring-dynamic-lookup.js +77 -0
- package/dist/core/ingestion/languages/kotlin/spring-message-producers.d.ts +17 -0
- package/dist/core/ingestion/languages/kotlin/spring-message-producers.js +119 -0
- package/dist/core/ingestion/languages/kotlin/spring-non-http-handlers.d.ts +16 -0
- package/dist/core/ingestion/languages/kotlin/spring-non-http-handlers.js +77 -2
- package/dist/core/ingestion/languages/kotlin.js +24 -0
- package/dist/core/ingestion/languages/python.js +2 -0
- package/dist/core/ingestion/languages/rust/query.js +8 -8
- package/dist/core/ingestion/languages/zig/captures.d.ts +260 -0
- package/dist/core/ingestion/languages/zig/captures.js +2070 -0
- package/dist/core/ingestion/languages/zig/index.d.ts +4 -0
- package/dist/core/ingestion/languages/zig/index.js +4 -0
- package/dist/core/ingestion/languages/zig/interpret.d.ts +36 -0
- package/dist/core/ingestion/languages/zig/interpret.js +176 -0
- package/dist/core/ingestion/languages/zig/query.d.ts +3 -0
- package/dist/core/ingestion/languages/zig/query.js +426 -0
- package/dist/core/ingestion/languages/zig/range-binding.d.ts +37 -0
- package/dist/core/ingestion/languages/zig/range-binding.js +373 -0
- package/dist/core/ingestion/languages/zig/scope-resolver.d.ts +12 -0
- package/dist/core/ingestion/languages/zig/scope-resolver.js +58 -0
- package/dist/core/ingestion/languages/zig/simple-hooks.d.ts +25 -0
- package/dist/core/ingestion/languages/zig/simple-hooks.js +143 -0
- package/dist/core/ingestion/languages/zig.d.ts +32 -0
- package/dist/core/ingestion/languages/zig.js +130 -0
- package/dist/core/ingestion/method-extractors/configs/zig.d.ts +2 -0
- package/dist/core/ingestion/method-extractors/configs/zig.js +120 -0
- package/dist/core/ingestion/method-extractors/generic.js +16 -4
- package/dist/core/ingestion/method-types.d.ts +10 -4
- package/dist/core/ingestion/model/field-registry.d.ts +3 -3
- package/dist/core/ingestion/model/field-registry.js +11 -7
- package/dist/core/ingestion/model/method-registry.d.ts +3 -3
- package/dist/core/ingestion/model/method-registry.js +13 -8
- package/dist/core/ingestion/model/registration-table.js +3 -0
- package/dist/core/ingestion/model/type-registry.js +8 -4
- package/dist/core/ingestion/pipeline-phases/di.js +47 -14
- package/dist/core/ingestion/pipeline-phases/index.d.ts +1 -0
- package/dist/core/ingestion/pipeline-phases/index.js +1 -0
- package/dist/core/ingestion/pipeline-phases/parse-impl.d.ts +7 -1
- package/dist/core/ingestion/pipeline-phases/parse-impl.js +79 -91
- package/dist/core/ingestion/pipeline-phases/parse.d.ts +17 -0
- package/dist/core/ingestion/pipeline-phases/processes.d.ts +2 -1
- package/dist/core/ingestion/pipeline-phases/processes.js +39 -4
- package/dist/core/ingestion/pipeline-phases/routes.js +27 -18
- package/dist/core/ingestion/pipeline-phases/runner.d.ts +4 -1
- package/dist/core/ingestion/pipeline-phases/runner.js +34 -14
- package/dist/core/ingestion/pipeline-phases/scan.js +82 -1
- package/dist/core/ingestion/pipeline-phases/spring-auto-configuration.d.ts +2 -0
- package/dist/core/ingestion/pipeline-phases/spring-auto-configuration.js +8 -0
- package/dist/core/ingestion/pipeline-phases/spring-destinations.d.ts +123 -0
- package/dist/core/ingestion/pipeline-phases/spring-destinations.js +688 -0
- package/dist/core/ingestion/pipeline.d.ts +30 -1
- package/dist/core/ingestion/pipeline.js +52 -14
- package/dist/core/ingestion/resolve-references.js +5 -0
- package/dist/core/ingestion/route-extractors/constant-resolver.d.ts +16 -0
- package/dist/core/ingestion/route-extractors/constant-resolver.js +10 -0
- package/dist/core/ingestion/route-extractors/java-const-resolver.d.ts +27 -1
- package/dist/core/ingestion/route-extractors/java-const-resolver.js +161 -13
- package/dist/core/ingestion/route-extractors/kotlin-const-resolver.d.ts +12 -18
- package/dist/core/ingestion/route-extractors/kotlin-const-resolver.js +214 -33
- package/dist/core/ingestion/route-extractors/kotlin-spring.d.ts +13 -0
- package/dist/core/ingestion/route-extractors/kotlin-spring.js +259 -0
- package/dist/core/ingestion/route-extractors/python-decorator-handler.d.ts +6 -0
- package/dist/core/ingestion/route-extractors/python-decorator-handler.js +16 -0
- package/dist/core/ingestion/route-extractors/spring-shared.d.ts +30 -1
- package/dist/core/ingestion/route-extractors/spring-shared.js +77 -9
- package/dist/core/ingestion/route-extractors/spring.js +9 -5
- package/dist/core/ingestion/scope-extractor.js +8 -0
- package/dist/core/ingestion/scope-resolution/contract/scope-resolver.d.ts +62 -0
- package/dist/core/ingestion/scope-resolution/graph-bridge/edges.d.ts +4 -0
- package/dist/core/ingestion/scope-resolution/graph-bridge/edges.js +2 -0
- package/dist/core/ingestion/scope-resolution/graph-bridge/ids.js +28 -0
- package/dist/core/ingestion/scope-resolution/graph-bridge/node-lookup.js +11 -2
- package/dist/core/ingestion/scope-resolution/graph-bridge/references-to-edges.d.ts +23 -2
- package/dist/core/ingestion/scope-resolution/graph-bridge/references-to-edges.js +24 -3
- package/dist/core/ingestion/scope-resolution/passes/callable-value-flow.d.ts +11 -1
- package/dist/core/ingestion/scope-resolution/passes/callable-value-flow.js +26 -6
- package/dist/core/ingestion/scope-resolution/passes/compound-receiver.d.ts +11 -0
- package/dist/core/ingestion/scope-resolution/passes/compound-receiver.js +29 -3
- package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.d.ts +8 -1
- package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.js +35 -9
- package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.d.ts +1 -4
- package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.js +277 -9
- package/dist/core/ingestion/scope-resolution/pipeline/registry.js +2 -0
- package/dist/core/ingestion/scope-resolution/pipeline/run.js +7 -3
- package/dist/core/ingestion/scope-resolution/scope/walkers.d.ts +43 -9
- package/dist/core/ingestion/scope-resolution/scope/walkers.js +71 -10
- package/dist/core/ingestion/tree-sitter-queries.d.ts +1 -0
- package/dist/core/ingestion/tree-sitter-queries.js +161 -0
- package/dist/core/ingestion/type-extractors/zig.d.ts +2 -0
- package/dist/core/ingestion/type-extractors/zig.js +17 -0
- package/dist/core/ingestion/utils/ast-helpers.d.ts +40 -1
- package/dist/core/ingestion/utils/ast-helpers.js +124 -6
- package/dist/core/ingestion/utils/callable-flow-captures.d.ts +9 -0
- package/dist/core/ingestion/utils/callable-flow-captures.js +75 -14
- package/dist/core/ingestion/utils/test-file-path.d.ts +28 -0
- package/dist/core/ingestion/utils/test-file-path.js +87 -0
- package/dist/core/ingestion/variable-extractors/configs/zig.d.ts +2 -0
- package/dist/core/ingestion/variable-extractors/configs/zig.js +71 -0
- package/dist/core/ingestion/workers/parse-worker.js +85 -14
- package/dist/core/install-context.d.ts +4 -0
- package/dist/core/install-context.js +152 -0
- package/dist/core/lbug/csv-generator.d.ts +10 -1
- package/dist/core/lbug/csv-generator.js +92 -22
- package/dist/core/lbug/graph-emit-sink.d.ts +3 -2
- package/dist/core/lbug/graph-emit-sink.js +4 -2
- package/dist/core/lbug/lbug-adapter.d.ts +100 -5
- package/dist/core/lbug/lbug-adapter.js +236 -24
- package/dist/core/lbug/schema.d.ts +6 -5
- package/dist/core/lbug/schema.js +84 -22
- package/dist/core/net/url-guard.d.ts +6 -0
- package/dist/core/net/url-guard.js +147 -0
- package/dist/core/package-version.d.ts +5 -0
- package/dist/core/package-version.js +10 -0
- package/dist/core/run-analyze.d.ts +21 -4
- package/dist/core/run-analyze.js +426 -117
- package/dist/core/search/fts-indexes.d.ts +19 -1
- package/dist/core/search/fts-indexes.js +28 -1
- package/dist/core/tree-sitter/parser-loader.js +16 -0
- package/dist/core/update-cache.d.ts +39 -0
- package/dist/core/update-cache.js +141 -0
- package/dist/core/update-check.d.ts +31 -0
- package/dist/core/update-check.js +274 -0
- package/dist/mcp/local/local-backend.d.ts +27 -13
- package/dist/mcp/local/local-backend.js +148 -60
- package/dist/mcp/repository-policy.d.ts +5 -1
- package/dist/mcp/repository-policy.js +48 -4
- package/dist/mcp/resources.js +10 -1
- package/dist/mcp/server.js +8 -9
- package/dist/mcp/tools.js +32 -22
- package/dist/server/analyze-launch.d.ts +2 -0
- package/dist/server/analyze-launch.js +2 -0
- package/dist/server/analyze-worker-protocol.d.ts +6 -1
- package/dist/server/analyze-worker.d.ts +1 -0
- package/dist/server/analyze-worker.js +38 -20
- package/dist/server/api.d.ts +5 -1
- package/dist/server/api.js +105 -88
- package/dist/server/git-clone.d.ts +40 -16
- package/dist/server/git-clone.js +253 -199
- package/dist/server/grep-params.d.ts +18 -0
- package/dist/server/grep-params.js +83 -0
- package/dist/server/grep-scan.d.ts +23 -0
- package/dist/server/grep-scan.js +107 -0
- package/dist/server/grep-worker.d.ts +1 -0
- package/dist/server/grep-worker.js +12 -0
- package/dist/server/mcp-http.d.ts +8 -0
- package/dist/server/mcp-http.js +16 -1
- package/dist/server/update-controller.d.ts +29 -0
- package/dist/server/update-controller.js +82 -0
- package/dist/storage/file-lock.d.ts +15 -0
- package/dist/storage/file-lock.js +155 -0
- package/dist/storage/fs-atomic.d.ts +24 -0
- package/dist/storage/fs-atomic.js +86 -2
- package/dist/storage/global-dir.d.ts +2 -0
- package/dist/storage/global-dir.js +6 -0
- package/dist/storage/parse-cache.d.ts +45 -7
- package/dist/storage/parse-cache.js +189 -42
- package/dist/storage/parsedfile-store.d.ts +41 -60
- package/dist/storage/parsedfile-store.js +247 -171
- package/dist/storage/repo-manager.d.ts +10 -4
- package/dist/storage/repo-manager.js +35 -25
- package/dist/storage/repo-meta.d.ts +34 -0
- package/dist/storage/v8-sidecar.d.ts +48 -0
- package/dist/storage/v8-sidecar.js +347 -0
- package/dist/types/pipeline.d.ts +14 -0
- package/dist/utils/process-identity.d.ts +2 -0
- package/dist/utils/process-identity.js +35 -0
- package/package.json +10 -4
- package/scripts/assert-web-assets.mjs +35 -0
- package/scripts/build-web.js +72 -0
- package/scripts/build.js +31 -28
- package/scripts/cross-platform-tests.ts +5 -0
- package/skills/gitnexus-cli.md +5 -1
- package/web/assets/ProcessFlowModal-DAeX2BHW.js +24 -0
- package/web/assets/{abnfDiagram-QNN2D4NM-Cq2djWWe.js → abnfDiagram-PAR5IXJI-J3OdeHLl.js} +1 -1
- package/web/assets/{agent-BWAXPjC5.js → agent-BMRqXorA.js} +6 -4
- package/web/assets/architecture-7GRP2DOG-M7G3SWCO-G3sWyX6M.js +1 -0
- package/web/assets/architectureDiagram-2PNWDENW-ysKcRlGT.js +36 -0
- package/web/assets/blockDiagram-PUWGUBOA-oLXTa1lY.js +129 -0
- package/web/assets/c4Diagram-3NLNHZP5-D3iu4eC0.js +38 -0
- package/web/assets/{chunk-2SREHG4O-Dip42xOq.js → chunk-2NMSUPJH-B24w-wng.js} +1 -1
- package/web/assets/{chunk-VJFVEZTB-CX66F2ep.js → chunk-32MCUW2P-ByUyt0Sa.js} +3 -3
- package/web/assets/{chunk-4RFN2BYJ-DHHWuC-n.js → chunk-3NPNU5GP-DocZ07Sg.js} +1 -1
- package/web/assets/{chunk-XNMVGMAZ-Cg_LnPtj.js → chunk-3SMGFRGC-CAu4JRLv.js} +1 -1
- package/web/assets/{chunk-W44A43WB-BN8EQc_u.js → chunk-4CAJECRU-DRYMwG9z.js} +1 -1
- package/web/assets/chunk-4OADUZ5Q-CxrSvOwZ.js +10 -0
- package/web/assets/{chunk-DMV4VAQV-Bn6WXDSX.js → chunk-5IQCK5RY-CCMhl4so.js} +2 -2
- package/web/assets/{chunk-RRFMTAIC-CMN0wcYA.js → chunk-5MVFYWFU-Db9KvrYO.js} +1 -1
- package/web/assets/chunk-CLS4B6BI-Uvx5QNsu.js +168 -0
- package/web/assets/chunk-DZP67EKU-B3Mt380j.js +70 -0
- package/web/assets/{chunk-6L755F7B-CMhLBxi2.js → chunk-EICP7K5X-CqwE9hui.js} +1 -1
- package/web/assets/{chunk-BI6VK774-D0oaWk8V.js → chunk-GDY2UAB4-CtQQR0a8.js} +1 -1
- package/web/assets/chunk-H7VHZCWX-CE1nAmt6.js +1 -0
- package/web/assets/chunk-IJBDOHL6-BUKtY6oF.js +1 -0
- package/web/assets/{chunk-OIYT25JQ-CQ6KOZGX.js → chunk-JFFVMJIA-0fJenqia.js} +1 -1
- package/web/assets/{chunk-HNC4WDU7-DoU3KnA7.js → chunk-JZGDI5JK-BeTMSSkJ.js} +1 -1
- package/web/assets/{chunk-EQFTRU2I-1ix7TzW9.js → chunk-KD6SPIPN-Qp1Pflah.js} +1 -1
- package/web/assets/chunk-NF366YI6-CpSpya3n.js +231 -0
- package/web/assets/chunk-NUDPKBEF-CU1-BQIW.js +34 -0
- package/web/assets/{chunk-SATU7PGQ-B1zhgOvc.js → chunk-OJINMHTS-zOCQe4eI.js} +1 -1
- package/web/assets/{chunk-E5QJAATJ-dh-5CtIV.js → chunk-Q6NGPIAH-yyBomb63.js} +1 -1
- package/web/assets/chunk-QJSWEUOL-D_rf9gPD.js +128 -0
- package/web/assets/chunk-R7JDMUKV-CRoqKpD6.js +1 -0
- package/web/assets/{chunk-VE5CLXGZ-C1vB7wpY.js → chunk-RCXAM2GK-CUqrWQDV.js} +1 -1
- package/web/assets/{chunk-66DQ2XMT-CM0xjFAN.js → chunk-RT4MAWR3-zXy9-Lvt.js} +1 -1
- package/web/assets/{chunk-TZUXEDM2-B7p9AcTw.js → chunk-SFMINX4W-J2UrvMpD.js} +1 -1
- package/web/assets/{chunk-LORZLZWG-B57uGw2N.js → chunk-SLDQ463B-CHY6e_bQ.js} +2 -2
- package/web/assets/{chunk-FWYVLQTC-BgDItRzJ.js → chunk-TCEHX7R3-CXPDEVbm.js} +1 -1
- package/web/assets/{chunk-224SPVON-B8gxtXpy.js → chunk-VQC2EELJ-Dc8fIy4R.js} +1 -1
- package/web/assets/chunk-VRZKL3EH-DB3KixTQ.js +1 -0
- package/web/assets/{chunk-A7VWPJGB-B4O3oQdQ.js → chunk-VTHDQ7BV-b7FsPQZO.js} +1 -1
- package/web/assets/chunk-VY2OSTJR-Dkgc3Brg.js +2 -0
- package/web/assets/chunk-WUBWJARI-7FwILJ3k.js +2 -0
- package/web/assets/{chunk-D6VWDJW2-BxcBdZ9c.js → chunk-YBMQ5JGJ-BSnyWZmd.js} +1 -1
- package/web/assets/chunk-YDMLL4PJ-IHhMngTz.js +2 -0
- package/web/assets/chunk-Z6V44ARX-BjCEsF0Q.js +62 -0
- package/web/assets/chunk-ZJJ7VQJP-Dz089b-K.js +321 -0
- package/web/assets/chunk-ZNLK7HRR-B0iFpmW4.js +1 -0
- package/web/assets/chunk-ZQN7UHIL-Cy7KAjQt.js +1 -0
- package/web/assets/{chunk-L5GCOVLC-CE2w8Nm_.js → chunk-ZS6VBONO-DBjJO0w9.js} +2 -2
- package/web/assets/{chunk-NV3KIAZN-5yvcpMiu.js → chunk-ZUNWM646-DNRJyNPe.js} +1 -1
- package/web/assets/classDiagram-FGAMPOII-C5Ibyode.js +1 -0
- package/web/assets/classDiagram-v2-AI5RJEK4-C5Ibyode.js +1 -0
- package/web/assets/{cose-bilkent-RZA4XIPR-BHpK4Crp.js → cose-bilkent-Q72C2OJ3-DMeFXnK8.js} +1 -1
- package/web/assets/cynefin-OW5HDTMX-6OCTWOGG-vlqakYcO.js +1 -0
- package/web/assets/{cynefinDiagram-TR7LZUCG-C3Iar9lZ.js → cynefinDiagram-2OOWUY4M-BY6DZkTt.js} +1 -1
- package/web/assets/dagre-MPVFI544-DWO70fy_.js +4 -0
- package/web/assets/diagram-AE4NWXFW-f7JRVRUL.js +24 -0
- package/web/assets/{diagram-L7DVE3PN-GIRyVUtt.js → diagram-BUJID5UG-BXZv1rCS.js} +2 -2
- package/web/assets/{diagram-JCD7PQ7C-DC5-9FRr.js → diagram-C44CZ5NI-CRNfvjCq.js} +1 -1
- package/web/assets/diagram-EYOLEXXS-DZOjKQVE.js +30 -0
- package/web/assets/diagram-P7B6PWOJ-D3SQmw3_.js +3 -0
- package/web/assets/{ebnfDiagram-DRHRQJWO-D8_CI4ZF.js → ebnfDiagram-FTPZ3PV6-jKWpIDN2.js} +1 -1
- package/web/assets/erDiagram-H3ERR26V-BqJntEuJ.js +99 -0
- package/web/assets/eventmodeling-NTZA5JFV-WKSWQHFS-Bq4FqtBL.js +1 -0
- package/web/assets/flowDiagram-YHGXBVSY-Dnlk2bEu.js +1 -0
- package/web/assets/ganttDiagram-RWFTB7ED-Bl6Y1K5T.js +292 -0
- package/web/assets/gitGraph-4MIJSDKK-JH2HKYUO-B3yc4GkH.js +1 -0
- package/web/assets/gitGraphDiagram-MAR6GKOP-CkNvsrdw.js +106 -0
- package/web/assets/{index-CJDpyH-n.css → index-C2_aej58.css} +1 -1
- package/web/assets/{index-DDRie6_8.js → index-Dj3vQOHK.js} +51 -51
- package/web/assets/info-A6RAGUB7-3TX3OFWW-BM3N5_Dv.js +1 -0
- package/web/assets/infoDiagram-LV547AFH-COkFutAf.js +2 -0
- package/web/assets/{ishikawaDiagram-4JDSWWDM-DmqWtjkl.js → ishikawaDiagram-PUJQGNDS-Bb8FylSR.js} +2 -2
- package/web/assets/{journeyDiagram-QUS3FAKT-XAzVzrQW.js → journeyDiagram-EW5QJT4W-BzoHUBhM.js} +4 -4
- package/web/assets/{kanban-definition-D4L7SQKK-YurRnmYn.js → kanban-definition-JSQERAZB-Uy2Pi0yQ.js} +4 -4
- package/web/assets/katex-CZ4GXH2S-C0Fcou7U.js +257 -0
- package/web/assets/{mindmap-definition-66QP5TD6-ChrWWnil.js → mindmap-definition-VBJCLQLM-B-CnOnt_.js} +3 -3
- package/web/assets/packet-AYTQ26CC-MKII6P3Y-Bd52ZE3V.js +1 -0
- package/web/assets/{pegDiagram-YKIO5C6U-QGeQLEq2.js → pegDiagram-7WILOQTJ-D9sneKXg.js} +1 -1
- package/web/assets/pie-WAS4IAKB-6B4OPMJ5-DW5Xy69Z.js +1 -0
- package/web/assets/pieDiagram-EFA7CBSB-Dx2NQofL.js +39 -0
- package/web/assets/{quadrantDiagram-VO5QLCXA-B7098wSc.js → quadrantDiagram-WARVYA7P-DPKL9_0A.js} +3 -3
- package/web/assets/radar-RG4KPBEZ-UPTR3XUL-CkzibT2h.js +1 -0
- package/web/assets/railroad-74A4TZTK-MEFUPFMS-D9zF-mDN.js +1 -0
- package/web/assets/railroad-abnf-HS5TGJTU-R5YG2S5D-ruacjUbX.js +1 -0
- package/web/assets/railroad-ebnf-LZEXJU2U-G5QEX2L6-S1zc5OiO.js +1 -0
- package/web/assets/railroad-peg-WCYAUIDC-H5I2ZRY2-Cbcr0XzY.js +1 -0
- package/web/assets/{railroadDiagram-M77LTMSB-AXu4vxk_.js → railroadDiagram-5NIQVNLQ-DsweTo14.js} +1 -1
- package/web/assets/{requirementDiagram-RASO5HTO-B-l8InpK.js → requirementDiagram-SXREGOKZ-CXwdNSVR.js} +4 -4
- package/web/assets/{sankeyDiagram-F32LOJ6L-Kd7zjJgX.js → sankeyDiagram-VV74M2VP-CA6jtP9P.js} +3 -3
- package/web/assets/{sequenceDiagram-URATNSBD-BlcdY9DS.js → sequenceDiagram-52ZFIFDL-k_5rEbzm.js} +15 -15
- package/web/assets/src-Df5C1Nz4.js +1 -0
- package/web/assets/stateDiagram-3QAKPIVI-BejHTf31.js +1 -0
- package/web/assets/stateDiagram-v2-HN2P4RDZ-BrfoRuOc.js +1 -0
- package/web/assets/swimlanes-QLVP42QD-CQSVO5D6.js +1 -0
- package/web/assets/swimlanesDiagram-JKPDBFCN-DrWB9kcD.js +8 -0
- package/web/assets/{timeline-definition-WJXWRH4I-DUfp1R3E.js → timeline-definition-GS45XAXW-C0Ks8rPP.js} +4 -4
- package/web/assets/treeView-Q6P3EWNA-ZRJGANNQ-DmKOCo6L.js +1 -0
- package/web/assets/treemap-WGGIJYW6-K64VN5AS-DO3xY92U.js +1 -0
- package/web/assets/{vennDiagram-K3VCMQLI-Bj-FN-XS.js → vennDiagram-QIQU2ZRJ-rgPiS837.js} +3 -3
- package/web/assets/wardley-WFR3VGLG-D67OWCCH-DiDPBNft.js +1 -0
- package/web/assets/wardleyDiagram-U6YNM66N-DRVr7SPi.js +78 -0
- package/web/assets/{xychartDiagram-5VRUVLCW-CK_rbSWE.js → xychartDiagram-XJAZEDNM-COtlZzYb.js} +3 -3
- package/web/index.html +19 -17
- package/web/assets/ProcessFlowModal-Badh2Pbg.js +0 -24
- package/web/assets/architecture-TIHT7OUA-V6N4J3SY-fTePvLoe.js +0 -1
- package/web/assets/architectureDiagram-OT7VKSJ7-mKEXxkeF.js +0 -36
- package/web/assets/blockDiagram-54WLDVWM-Dg_hrRWE.js +0 -132
- package/web/assets/c4Diagram-X2LASM7V-CnhoT4aV.js +0 -10
- package/web/assets/chunk-2AEHWXPW-CV4r6-1I.js +0 -127
- package/web/assets/chunk-5VCL7Z4A-CQ-2dYWj.js +0 -1
- package/web/assets/chunk-6BELYETK-ChsYtfHW.js +0 -1
- package/web/assets/chunk-7CWYLC5S-DRgGkkpF.js +0 -2
- package/web/assets/chunk-7FYTHRHK-CsmYIswB.js +0 -32
- package/web/assets/chunk-KRXBNO2N-C-UNuKKf.js +0 -1
- package/web/assets/chunk-LAHSG3N2-Bz4hcn0N.js +0 -321
- package/web/assets/chunk-LIEV3EAG-pyKGssV3.js +0 -1
- package/web/assets/chunk-NLANEA3F-XpH_NPA5.js +0 -62
- package/web/assets/chunk-PE7DX7ZZ-CCvRVj43.js +0 -10
- package/web/assets/chunk-Q67WD55A-BWCH2SVz.js +0 -156
- package/web/assets/chunk-SZD42YQK-ijyKKVr1.js +0 -70
- package/web/assets/chunk-TFPGFQPA-Dj6a-0pC.js +0 -231
- package/web/assets/chunk-TGVD4F4B-BMc31Gj2.js +0 -2
- package/web/assets/chunk-UAT7B5JY-DW-A_fpI.js +0 -1
- package/web/assets/chunk-VY5UBI4V-yxPQAWxw.js +0 -1
- package/web/assets/chunk-WJBAP47W-BckNkuEN.js +0 -1
- package/web/assets/classDiagram-VPOSVPXH-BjOiXA_C.js +0 -1
- package/web/assets/classDiagram-v2-5VFNUXQA-BjOiXA_C.js +0 -1
- package/web/assets/cynefin-VYW2F7L2-2VAHYKR6-DAsF6GZv.js +0 -1
- package/web/assets/dagre-K64A6Z3X-CUwi79mA.js +0 -4
- package/web/assets/diagram-2TLGJV2N-C2F5Nfym.js +0 -30
- package/web/assets/diagram-KFBZAVDW-Dfmf_4ti.js +0 -3
- package/web/assets/diagram-YP3FGXHI-CyNFYtkd.js +0 -24
- package/web/assets/erDiagram-SZLJLQMB-CohQjznC.js +0 -85
- package/web/assets/eventmodeling-45OFAUF4-AOUJWSLX-BvTc6iQi.js +0 -1
- package/web/assets/flowDiagram-BWE6NHOH-B6RnEvD9.js +0 -1
- package/web/assets/ganttDiagram-2QTCJSNI-Cks_mEcF.js +0 -292
- package/web/assets/gitGraph-TEB2WS4Q-U5VWYIBC-Dy7CCSZ5.js +0 -1
- package/web/assets/gitGraphDiagram-VVZAVV5G-CG41cIVc.js +0 -106
- package/web/assets/info-DKCQHKI2-DX6KST54-BLJg1ikX.js +0 -1
- package/web/assets/infoDiagram-FY4PZKRE-BJ3vPVwW.js +0 -2
- package/web/assets/katex-C5OPUE3Q-Bnbavtmu.js +0 -257
- package/web/assets/packet-7NZHBO7P-5WG45QPS-KUxcuvaA.js +0 -1
- package/web/assets/pie-RZYD4A2V-2OCZ2VTD-DPs08kJY.js +0 -1
- package/web/assets/pieDiagram-YPY3TKG5-BuT3MYzm.js +0 -39
- package/web/assets/radar-I7S5WNFK-EPLSA35B-w5F0K3a7.js +0 -1
- package/web/assets/railroad-3IZDKUUU-PWFQV6Y6-Bu668yqY.js +0 -1
- package/web/assets/railroad-abnf-AHOZXSZD-JYYJX3BS-B6ghpETS.js +0 -1
- package/web/assets/railroad-ebnf-EBAXGLYW-RBZ4ONAP-D-XmHh3M.js +0 -1
- package/web/assets/railroad-peg-LSFZ7HO6-KHNPXGPG-mhkrhzEn.js +0 -1
- package/web/assets/src-C5sx_gMp.js +0 -1
- package/web/assets/stateDiagram-DODFXNG5-DTdHc-fF.js +0 -1
- package/web/assets/stateDiagram-v2-JNMM5JRA-DioNLDDo.js +0 -1
- package/web/assets/swimlanes-OSWOYLSK-CA0ofdwY.js +0 -2
- package/web/assets/swimlanesDiagram-RHGX2RDE-PkwUdckC.js +0 -8
- package/web/assets/treeView-QDETBFTQ-EHYTSQNO-C5lpBgPm.js +0 -1
- package/web/assets/treemap-6X3UGDF4-CCWCF7EK-BB0ZyO-B.js +0 -1
- package/web/assets/wardley-OPB4EBWU-6OWERDVT-CEA3Nq0j.js +0 -1
- package/web/assets/wardleyDiagram-XK6FUAWV-CVV0dHFr.js +0 -78
- /package/web/assets/{sizeCapture-5GORAGP4-BEqQzsxs.js → sizeCapture-FGA5AGYP-BEqQzsxs.js} +0 -0
|
@@ -3,7 +3,7 @@ import JavaScript from 'tree-sitter-javascript';
|
|
|
3
3
|
import TypeScript from 'tree-sitter-typescript';
|
|
4
4
|
import { compilePatterns, runCompiledPatterns, unquoteLiteral, } from '../tree-sitter-scanner.js';
|
|
5
5
|
import { MAX_FOLD_LENGTH } from '../../../ingestion/route-extractors/constant-resolver.js';
|
|
6
|
-
import { DATA_ROUTE_TABLE_SOURCE, scanDataRouteTables, } from '../../../ingestion/route-extractors/data-route-table.js';
|
|
6
|
+
import { DATA_ROUTE_TABLE_SOURCE, propertyName, scanDataRouteTables, } from '../../../ingestion/route-extractors/data-route-table.js';
|
|
7
7
|
import { extractNestRoutes } from '../../../ingestion/route-extractors/nest.js';
|
|
8
8
|
import { normalizeExtractedRoutePath } from '../../../ingestion/route-extractors/route-path.js';
|
|
9
9
|
import { buildJsRepoFacts, extractJsModuleFacts, isAxiosNamespace, isHttpClientRef, resolveJsPathExpression, } from '../../../ingestion/route-extractors/js-const-resolver.js';
|
|
@@ -123,6 +123,35 @@ const AXIOS_OBJECT_SPEC = {
|
|
|
123
123
|
arguments: (arguments (object) @options))
|
|
124
124
|
`,
|
|
125
125
|
};
|
|
126
|
+
// ─── Consumer: wrapped client X.request({ url, method }) ────────────
|
|
127
|
+
// Enterprise wrapper shape: an axios instance (or a named request helper)
|
|
128
|
+
// re-exported under a local name — `httpClient.request({ url, method })`
|
|
129
|
+
// from `@winex-plugin/win-request`, `$http.request(...)`. Generic names
|
|
130
|
+
// like `api` need axios.create/import proof (`isHttpClientRef`); spelling
|
|
131
|
+
// alone is too common (graphql-request helpers, domain `api` objects).
|
|
132
|
+
// The member property is `request` (not an HTTP verb), so this cannot
|
|
133
|
+
// collide with the Express provider pattern (`router.get`) or the axios
|
|
134
|
+
// member form (`axios.get`). Option keys are resolved programmatically,
|
|
135
|
+
// same as the jQuery ajax / axios object forms.
|
|
136
|
+
//
|
|
137
|
+
// The query captures the receiver so scan can reject unrelated
|
|
138
|
+
// `.request({ url })` APIs (`cy.request`, `queue.request`).
|
|
139
|
+
const REQUEST_OBJECT_SPEC = {
|
|
140
|
+
meta: {},
|
|
141
|
+
query: `
|
|
142
|
+
(call_expression
|
|
143
|
+
function: (member_expression
|
|
144
|
+
object: (_) @obj
|
|
145
|
+
property: (property_identifier) @fn (#eq? @fn "request"))
|
|
146
|
+
arguments: (arguments . (object) @options))
|
|
147
|
+
`,
|
|
148
|
+
};
|
|
149
|
+
/**
|
|
150
|
+
* Receivers admitted as wrapped HTTP clients without axios.create proof.
|
|
151
|
+
* Spelling-only: the last identifier in `obj.text` (`this.$http` → `$http`).
|
|
152
|
+
* Keep this set small — every extra name is a false-positive surface.
|
|
153
|
+
*/
|
|
154
|
+
const WRAPPED_REQUEST_RECEIVERS = new Set(['httpClient', '$http']);
|
|
126
155
|
function compileBundle(language, name) {
|
|
127
156
|
const mk = (spec, suffix) => compilePatterns({
|
|
128
157
|
name: `${name}-${suffix}`,
|
|
@@ -137,6 +166,7 @@ function compileBundle(language, name) {
|
|
|
137
166
|
jqueryShorthand: mk(JQUERY_SHORTHAND_SPEC, 'jquery-shorthand'),
|
|
138
167
|
jqueryAjax: mk(JQUERY_AJAX_SPEC, 'jquery-ajax'),
|
|
139
168
|
axiosObject: mk(AXIOS_OBJECT_SPEC, 'axios-object'),
|
|
169
|
+
requestObject: mk(REQUEST_OBJECT_SPEC, 'request-object'),
|
|
140
170
|
};
|
|
141
171
|
}
|
|
142
172
|
const JAVASCRIPT_BUNDLE = compileBundle(JavaScript, 'javascript-http');
|
|
@@ -148,6 +178,7 @@ const TSX_BUNDLE = compileBundle(TypeScript.tsx, 'tsx-http');
|
|
|
148
178
|
* of `keyNames`. Returns null when no matching pair is present or the
|
|
149
179
|
* value is not a string literal. Used by the jQuery ajax / axios object
|
|
150
180
|
* consumers to resolve `url` / `method` / `type` keys in any order.
|
|
181
|
+
* Keys use shared `propertyName` so quoted `"method"` matches `method`.
|
|
151
182
|
*/
|
|
152
183
|
function readStringProp(objectNode, keyNames) {
|
|
153
184
|
for (let i = 0; i < objectNode.namedChildCount; i++) {
|
|
@@ -158,7 +189,8 @@ function readStringProp(objectNode, keyNames) {
|
|
|
158
189
|
const valueNode = pair.childForFieldName('value');
|
|
159
190
|
if (!keyNode || !valueNode)
|
|
160
191
|
continue;
|
|
161
|
-
|
|
192
|
+
const key = propertyName(keyNode);
|
|
193
|
+
if (key === null || !keyNames.includes(key))
|
|
162
194
|
continue;
|
|
163
195
|
if (valueNode.type !== 'string' && valueNode.type !== 'template_string')
|
|
164
196
|
continue;
|
|
@@ -168,6 +200,77 @@ function readStringProp(objectNode, keyNames) {
|
|
|
168
200
|
}
|
|
169
201
|
return null;
|
|
170
202
|
}
|
|
203
|
+
/**
|
|
204
|
+
* Verb for wrapped `X.request({ url, method|type })`. Absent key → GET
|
|
205
|
+
* (same default as fetch-without-options / jQuery ajax). Present but not a
|
|
206
|
+
* string/template, supplied only via object spread, or later overwritten by
|
|
207
|
+
* a duplicate key / spread → `*` so matching can still link without pinning GET.
|
|
208
|
+
* Later properties win, matching JavaScript object-literal evaluation.
|
|
209
|
+
*/
|
|
210
|
+
function readRequestMethod(objectNode, keyNames = ['method', 'type']) {
|
|
211
|
+
let last = { kind: 'absent' };
|
|
212
|
+
for (let i = 0; i < objectNode.namedChildCount; i++) {
|
|
213
|
+
const child = objectNode.namedChild(i);
|
|
214
|
+
if (!child)
|
|
215
|
+
continue;
|
|
216
|
+
if (child.type === 'spread_element') {
|
|
217
|
+
last = { kind: 'unknown' };
|
|
218
|
+
continue;
|
|
219
|
+
}
|
|
220
|
+
if (child.type === 'shorthand_property_identifier' ||
|
|
221
|
+
child.type === 'shorthand_property_identifier_pattern') {
|
|
222
|
+
if (keyNames.includes(child.text))
|
|
223
|
+
last = { kind: 'unknown' };
|
|
224
|
+
continue;
|
|
225
|
+
}
|
|
226
|
+
if (child.type !== 'pair')
|
|
227
|
+
continue;
|
|
228
|
+
const keyNode = child.childForFieldName('key');
|
|
229
|
+
const valueNode = child.childForFieldName('value');
|
|
230
|
+
if (!keyNode)
|
|
231
|
+
continue;
|
|
232
|
+
const key = propertyName(keyNode);
|
|
233
|
+
if (key === null || !keyNames.includes(key))
|
|
234
|
+
continue;
|
|
235
|
+
if (!valueNode || (valueNode.type !== 'string' && valueNode.type !== 'template_string')) {
|
|
236
|
+
last = { kind: 'unknown' };
|
|
237
|
+
continue;
|
|
238
|
+
}
|
|
239
|
+
const lit = unquoteLiteral(valueNode.text);
|
|
240
|
+
if (lit === null || lit.includes('${')) {
|
|
241
|
+
last = { kind: 'unknown' };
|
|
242
|
+
continue;
|
|
243
|
+
}
|
|
244
|
+
last = { kind: 'literal', value: lit };
|
|
245
|
+
}
|
|
246
|
+
if (last.kind === 'literal')
|
|
247
|
+
return last.value.toUpperCase();
|
|
248
|
+
if (last.kind === 'unknown')
|
|
249
|
+
return '*';
|
|
250
|
+
return 'GET';
|
|
251
|
+
}
|
|
252
|
+
function wrappedRequestReceiverName(receiver) {
|
|
253
|
+
const parts = receiver.split('.');
|
|
254
|
+
return parts[parts.length - 1] ?? receiver;
|
|
255
|
+
}
|
|
256
|
+
/** Axios module / axios.create instance, or a registered wrapper identifier. */
|
|
257
|
+
function isAdmittedWrappedRequestReceiver(receiver, fileKey, facts) {
|
|
258
|
+
if (WRAPPED_REQUEST_RECEIVERS.has(wrappedRequestReceiverName(receiver)))
|
|
259
|
+
return true;
|
|
260
|
+
try {
|
|
261
|
+
const isModule = facts === null || fileKey === undefined
|
|
262
|
+
? receiver === 'axios'
|
|
263
|
+
: isAxiosNamespace(fileKey, receiver, facts);
|
|
264
|
+
if (isModule)
|
|
265
|
+
return true;
|
|
266
|
+
if (!facts || fileKey === undefined)
|
|
267
|
+
return false;
|
|
268
|
+
return isHttpClientRef(fileKey, receiver, facts);
|
|
269
|
+
}
|
|
270
|
+
catch {
|
|
271
|
+
return false;
|
|
272
|
+
}
|
|
273
|
+
}
|
|
171
274
|
/**
|
|
172
275
|
* Map each named import's LOCAL binding to its DECLARED export name and source
|
|
173
276
|
* module, by walking the file's `import { x as y } from 'm'` statements. Lets
|
|
@@ -335,9 +438,10 @@ function resolveFactsFor(repoContext, fileRel) {
|
|
|
335
438
|
*
|
|
336
439
|
* `/{param}` matches every one-segment provider route in the group, and
|
|
337
440
|
* `matching.exclude_links_param_only_paths` defaults to `false`. A path whose
|
|
338
|
-
* leading term is an unresolved placeholder is refused
|
|
339
|
-
*
|
|
340
|
-
*
|
|
441
|
+
* leading term is an unresolved placeholder is refused unless the next
|
|
442
|
+
* character is `/` — that is the gateway-prefix shape
|
|
443
|
+
* `` `${serviceClient}/api/v1/x` `` that `stripLeadingTemplatePrefix` keeps.
|
|
444
|
+
* Bare `{param}` and `{param}api/x` stay rejected: nothing pins a route.
|
|
341
445
|
*/
|
|
342
446
|
function looksLikeHttpPath(path) {
|
|
343
447
|
if (path === '')
|
|
@@ -352,7 +456,7 @@ function looksLikeHttpPath(path) {
|
|
|
352
456
|
const shape = path.replace(/\$\{[^}]+\}/g, '{param}');
|
|
353
457
|
if (/\s/.test(shape))
|
|
354
458
|
return false;
|
|
355
|
-
if (shape.startsWith('{param}'))
|
|
459
|
+
if (shape.startsWith('{param}') && !shape.startsWith('{param}/'))
|
|
356
460
|
return false;
|
|
357
461
|
// An all-digit string is a path only when it is written as one. A leading
|
|
358
462
|
// slash is that evidence: `client.get('/123')` is a route whose segment the
|
|
@@ -613,8 +717,7 @@ function scanBundle(bundle, tree, repoContext, fileRel) {
|
|
|
613
717
|
const path = readStringProp(optionsNode, ['url']);
|
|
614
718
|
if (path === null)
|
|
615
719
|
continue;
|
|
616
|
-
const
|
|
617
|
-
const method = (rawMethod ?? 'GET').toUpperCase();
|
|
720
|
+
const method = readRequestMethod(optionsNode, ['method']);
|
|
618
721
|
out.push({
|
|
619
722
|
role: 'consumer',
|
|
620
723
|
framework: 'axios',
|
|
@@ -625,6 +728,40 @@ function scanBundle(bundle, tree, repoContext, fileRel) {
|
|
|
625
728
|
confidence: 0.7,
|
|
626
729
|
});
|
|
627
730
|
}
|
|
731
|
+
// Consumer: wrapped client `X.request({ url, method })` — the shared
|
|
732
|
+
// enterprise axios-instance shape (`httpClient.request` from
|
|
733
|
+
// win-request and friends). Emit the raw url (templates intact) so
|
|
734
|
+
// shared `normalizeConsumerPath` can strip a leading `${…}` gateway
|
|
735
|
+
// prefix and fold mid/tail interpolations to `{param}`. A plugin-side
|
|
736
|
+
// longest-slash-segment reducer would truncate those mid-templates
|
|
737
|
+
// before the shared normalizer ever saw them. This scan drops only
|
|
738
|
+
// static relative urls (no `${`, no leading `/`, not `https?://`).
|
|
739
|
+
// That filter is request-wrapper-specific: fetch/axios member forms
|
|
740
|
+
// already admit absolute urls and leave host stripping to
|
|
741
|
+
// `normalizeConsumerPath`.
|
|
742
|
+
for (const match of runCompiledPatterns(bundle.requestObject, tree)) {
|
|
743
|
+
const optionsNode = match.captures.options;
|
|
744
|
+
const objNode = match.captures.obj;
|
|
745
|
+
if (!optionsNode || !objNode)
|
|
746
|
+
continue;
|
|
747
|
+
if (!isAdmittedWrappedRequestReceiver(objNode.text, fileKey, facts))
|
|
748
|
+
continue;
|
|
749
|
+
const rawUrl = readStringProp(optionsNode, ['url']);
|
|
750
|
+
if (rawUrl === null)
|
|
751
|
+
continue;
|
|
752
|
+
const url = rawUrl.trim();
|
|
753
|
+
if (!url.includes('${') && !url.startsWith('/') && !/^https?:\/\//i.test(url))
|
|
754
|
+
continue;
|
|
755
|
+
out.push({
|
|
756
|
+
role: 'consumer',
|
|
757
|
+
framework: 'request',
|
|
758
|
+
method: readRequestMethod(optionsNode),
|
|
759
|
+
path: url,
|
|
760
|
+
name: null,
|
|
761
|
+
line: optionsNode.startPosition.row + 1,
|
|
762
|
+
confidence: 0.65,
|
|
763
|
+
});
|
|
764
|
+
}
|
|
628
765
|
for (const route of scanDataRouteTables(tree)) {
|
|
629
766
|
const imported = route.handlerLocalName === undefined ? undefined : importMap.get(route.handlerLocalName);
|
|
630
767
|
out.push({
|
|
@@ -1028,13 +1028,17 @@ export const PYTHON_HTTP_PLUGIN = {
|
|
|
1028
1028
|
name: 'python-http',
|
|
1029
1029
|
language: Python,
|
|
1030
1030
|
// routeCoverage intentionally LEFT at the default 'partial' (#2138 Part 2).
|
|
1031
|
-
//
|
|
1032
|
-
//
|
|
1033
|
-
//
|
|
1034
|
-
//
|
|
1035
|
-
//
|
|
1036
|
-
//
|
|
1037
|
-
//
|
|
1031
|
+
// 'complete' is now an active data-loss risk rather than a no-op: FastAPI and
|
|
1032
|
+
// Flask decorator routes do carry a handlerName (Python's
|
|
1033
|
+
// `decoratorRouteHandlerName` hook reads the `decorated_definition`), so their
|
|
1034
|
+
// files can resolve every handlerSymbolId and become parse-skip candidates.
|
|
1035
|
+
// The flag asserts more than that — it asserts ingestion emits a Route node
|
|
1036
|
+
// for EVERY provider route this scan() finds, and it does not: Flask's
|
|
1037
|
+
// imperative `add_url_rule('/p', view_func=handler)` registration below has no
|
|
1038
|
+
// ingestion counterpart, so skipping a file that mixes it with resolved
|
|
1039
|
+
// decorator routes would drop those providers. `hasConsumerSignals` is kept
|
|
1040
|
+
// (and is a true superset of scan()'s consumer shapes) so the consumer half of
|
|
1041
|
+
// the precondition already holds once provider parity is closed.
|
|
1038
1042
|
// Consumer signals scan() can detect: `requests.<verb>`/`requests.request`,
|
|
1039
1043
|
// `httpx` (sync/async client), the `uri=`/`url=` keyword/variable wrapper
|
|
1040
1044
|
// calls, plus aiohttp/urllib. Conservative — over-matching only costs a parse.
|
|
@@ -261,13 +261,56 @@ export function normalizeHttpPath(p) {
|
|
|
261
261
|
return s === '' ? '/' : s;
|
|
262
262
|
}
|
|
263
263
|
/**
|
|
264
|
-
*
|
|
265
|
-
*
|
|
266
|
-
*
|
|
267
|
-
*
|
|
264
|
+
* Strip LEADING template interpolations from a consumer url as gateway/host
|
|
265
|
+
* bindings — the enterprise wrapper shape `` `${serviceClient}/api/v1/x` ``
|
|
266
|
+
* where `${serviceClient}` selects the gateway service, not a route segment.
|
|
267
|
+
* This is consumer-path framework semantics (mirrors how an absolute
|
|
268
|
+
* `https://host/path` url keeps only its path), so it lives here rather than
|
|
269
|
+
* in any one language plugin:
|
|
270
|
+
* - `` `${c}/api/x` `` → `/api/x` (clean prefix; `${c}${d}/api/x` → `/api/x`)
|
|
271
|
+
* - `` `${c}/api/x/${id}` ``→ `/api/x/${id}` (mid/tail interpolations are left for the `{param}` pass)
|
|
272
|
+
* Returns null when the stripped remainder is not a single-slash path:
|
|
273
|
+
* - remainder without `/` — relative fragment (`${c}api/x`) or scheme/host
|
|
274
|
+
* (`${scheme}://${host}/api/x`); whether it is a path depends on
|
|
275
|
+
* unverifiable runtime state, so it is dropped rather than guessed at;
|
|
276
|
+
* - remainder starting with `//` — protocol-relative (`${proto}//host/api/x`);
|
|
277
|
+
* keeping it would later collapse to `/host/api/x`.
|
|
278
|
+
*
|
|
279
|
+
* The `?` in a query string cannot leak into the brace matching: `${...}`
|
|
280
|
+
* spans are matched by braces here (before any `{param}` replacement), and
|
|
281
|
+
* `normalizeHttpPath` splits on `?` only after the whole `${...}` span —
|
|
282
|
+
* including any `?` inside it — has been collapsed to `{param}`. So
|
|
283
|
+
* `` `${c}/api/x?id=${id}` `` reduces to `/api/x` on both orderings.
|
|
284
|
+
*/
|
|
285
|
+
function stripLeadingTemplatePrefix(url) {
|
|
286
|
+
if (!url.startsWith('${'))
|
|
287
|
+
return url;
|
|
288
|
+
const rest = url.replace(/^(?:\$\{[^}]*\})+/, '');
|
|
289
|
+
return rest.startsWith('/') && !rest.startsWith('//') ? rest : null;
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Placeholder substituted for `${...}` before WHATWG `URL` parsing so the
|
|
293
|
+
* parser cannot percent-encode our own `{param}` markers. A genuine encoded
|
|
294
|
+
* segment like `%7Bfoo%7D` then survives as a literal, instead of being
|
|
295
|
+
* rewritten into braces and folded into `{param}`.
|
|
296
|
+
*
|
|
297
|
+
* Private-use U+E000 cannot appear in a real URL path, so a literal
|
|
298
|
+
* `__gitnexus_http_param__` segment is not rewritten into `{param}`.
|
|
268
299
|
*/
|
|
300
|
+
const CONSUMER_PARAM_SENTINEL = '\uE000';
|
|
301
|
+
const CONSUMER_PARAM_SENTINEL_ENC = '%ee%80%80';
|
|
302
|
+
function restoreConsumerParamSentinel(pathOnly) {
|
|
303
|
+
return pathOnly
|
|
304
|
+
.split(CONSUMER_PARAM_SENTINEL)
|
|
305
|
+
.join('{param}')
|
|
306
|
+
.replace(new RegExp(CONSUMER_PARAM_SENTINEL_ENC, 'gi'), '{param}');
|
|
307
|
+
}
|
|
308
|
+
/** Canonicalize a consumer URL after `stripLeadingTemplatePrefix`. */
|
|
269
309
|
function normalizeConsumerPath(url) {
|
|
270
|
-
const
|
|
310
|
+
const stripped = stripLeadingTemplatePrefix(url.trim());
|
|
311
|
+
if (stripped === null)
|
|
312
|
+
return null;
|
|
313
|
+
const templated = stripped.replace(/\$\{[^}]+\}/g, CONSUMER_PARAM_SENTINEL).trim();
|
|
271
314
|
let pathOnly = templated;
|
|
272
315
|
if (/^https?:\/\//i.test(templated)) {
|
|
273
316
|
try {
|
|
@@ -277,6 +320,7 @@ function normalizeConsumerPath(url) {
|
|
|
277
320
|
pathOnly = templated.replace(/^https?:\/\/[^/]+/i, '');
|
|
278
321
|
}
|
|
279
322
|
}
|
|
323
|
+
pathOnly = restoreConsumerParamSentinel(pathOnly);
|
|
280
324
|
const normalized = normalizeHttpPath(pathOnly || '/');
|
|
281
325
|
const segments = normalized
|
|
282
326
|
.split('/')
|
|
@@ -571,7 +615,7 @@ export class HttpRouteExtractor {
|
|
|
571
615
|
// removes any candidate that still needs scanning for outbound calls.
|
|
572
616
|
const coveredFiles = new Set();
|
|
573
617
|
const graphProviders = dbExecutor != null
|
|
574
|
-
? await this.extractProvidersGraph(dbExecutor, getDetections, resolveDetectionSymbol, coveredFiles)
|
|
618
|
+
? await this.extractProvidersGraph(dbExecutor, getDetections, resolveDetectionSymbol, loadFileSymbols, coveredFiles)
|
|
575
619
|
: [];
|
|
576
620
|
// Consumer-safety gate (#2138 Part 2): `extractProvidersGraph` marks a file
|
|
577
621
|
// covered on *provider* grounds (all HANDLES_ROUTE rows resolved + a
|
|
@@ -619,7 +663,7 @@ export class HttpRouteExtractor {
|
|
|
619
663
|
});
|
|
620
664
|
}
|
|
621
665
|
// ─── Graph-assisted providers ──────────────────────────────────────
|
|
622
|
-
async extractProvidersGraph(db, getDetections, resolveSymbol, coveredFiles) {
|
|
666
|
+
async extractProvidersGraph(db, getDetections, resolveSymbol, loadFileSymbols, coveredFiles) {
|
|
623
667
|
const out = [];
|
|
624
668
|
// Per-file coverage tracking (#2138 Part 2): a file is "fully graph-covered"
|
|
625
669
|
// when every one of its HANDLES_ROUTE rows resolved a handlerSymbolId AND its
|
|
@@ -672,16 +716,11 @@ export class HttpRouteExtractor {
|
|
|
672
716
|
method = 'GET';
|
|
673
717
|
symbolUid = handlerSymbolId;
|
|
674
718
|
if (filePath) {
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
symPath = String(hit.filePath ?? hit[2]) || filePath;
|
|
681
|
-
}
|
|
682
|
-
}
|
|
683
|
-
catch {
|
|
684
|
-
/* keep the authoritative uid + basename fallback */
|
|
719
|
+
const syms = await loadFileSymbols(filePath);
|
|
720
|
+
const hit = syms.find((s) => String(s.uid ?? s[0]) === handlerSymbolId);
|
|
721
|
+
if (hit) {
|
|
722
|
+
symbolName = String(hit.name ?? hit[1]) || symbolName;
|
|
723
|
+
symPath = String(hit.filePath ?? hit[2]) || filePath;
|
|
685
724
|
}
|
|
686
725
|
}
|
|
687
726
|
}
|
|
@@ -891,6 +930,13 @@ export class HttpRouteExtractor {
|
|
|
891
930
|
if (d.role !== 'consumer')
|
|
892
931
|
continue;
|
|
893
932
|
const pathNorm = normalizeConsumerPath(d.path);
|
|
933
|
+
// A consumer url that cannot be reduced to a routable path (e.g. a
|
|
934
|
+
// leading template binding that is neither a clean prefix nor a
|
|
935
|
+
// remainder that starts with `/`) is dropped here rather than emitted
|
|
936
|
+
// as a never-matching contract — same treatment the plugins give
|
|
937
|
+
// static relative urls at scan time.
|
|
938
|
+
if (pathNorm === null)
|
|
939
|
+
continue;
|
|
894
940
|
// Resolve the function CONTAINING the fetch/axios call so the consumer
|
|
895
941
|
// contract carries a real symbolUid (was always '' — the gap that left
|
|
896
942
|
// cross-repo trace/impact unable to traverse HTTP links).
|