gitnexus 1.6.10-rc.21 → 1.6.10-rc.211
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 +212 -22
- package/dist/_shared/graph/types.d.ts +27 -8
- package/dist/_shared/graph/types.d.ts.map +1 -1
- package/dist/_shared/index.d.ts +4 -3
- package/dist/_shared/index.d.ts.map +1 -1
- package/dist/_shared/index.js +1 -1
- package/dist/_shared/index.js.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 +19 -1
- package/dist/_shared/integrations/resilient-fetch.d.ts.map +1 -1
- package/dist/_shared/integrations/resilient-fetch.js +23 -10
- package/dist/_shared/integrations/resilient-fetch.js.map +1 -1
- package/dist/_shared/language-detection.d.ts.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 +3 -0
- package/dist/_shared/lbug/schema-constants.js.map +1 -1
- package/dist/_shared/scope-resolution/callable-flow-site.d.ts +110 -0
- package/dist/_shared/scope-resolution/callable-flow-site.d.ts.map +1 -0
- package/dist/_shared/scope-resolution/callable-flow-site.js +11 -0
- package/dist/_shared/scope-resolution/callable-flow-site.js.map +1 -0
- package/dist/_shared/scope-resolution/evidence-weights.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/finalize-algorithm.d.ts +6 -1
- package/dist/_shared/scope-resolution/finalize-algorithm.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/finalize-algorithm.js +316 -37
- package/dist/_shared/scope-resolution/finalize-algorithm.js.map +1 -1
- package/dist/_shared/scope-resolution/parsed-file.d.ts +7 -0
- package/dist/_shared/scope-resolution/parsed-file.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/reference-site.d.ts +124 -1
- 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/lookup-core.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/registries/lookup-core.js +58 -2
- package/dist/_shared/scope-resolution/registries/lookup-core.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/symbol-definition.d.ts +47 -0
- package/dist/_shared/scope-resolution/symbol-definition.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/types.d.ts +297 -5
- package/dist/_shared/scope-resolution/types.d.ts.map +1 -1
- package/dist/cli/ai-context.d.ts +10 -2
- package/dist/cli/ai-context.js +128 -61
- package/dist/cli/analyze-config.d.ts +1 -1
- package/dist/cli/analyze-options.d.ts +131 -0
- package/dist/cli/analyze-options.js +1 -0
- package/dist/cli/analyze.d.ts +25 -114
- package/dist/cli/analyze.js +194 -36
- package/dist/cli/cli-message.d.ts +1 -1
- package/dist/cli/detect-changes-format.js +19 -2
- package/dist/cli/doctor.d.ts +23 -0
- package/dist/cli/doctor.js +72 -9
- package/dist/cli/editor-targets.js +6 -0
- package/dist/cli/eval-server.d.ts +23 -1
- package/dist/cli/eval-server.js +128 -9
- package/dist/cli/format-symbol.d.ts +15 -0
- package/dist/cli/format-symbol.js +17 -0
- package/dist/cli/generated-skill.d.ts +17 -0
- package/dist/cli/generated-skill.js +1 -0
- package/dist/cli/group.js +23 -2
- package/dist/cli/help-i18n.js +3 -0
- package/dist/cli/i18n/en.d.ts +17 -8
- package/dist/cli/i18n/en.js +19 -8
- package/dist/cli/i18n/resources.d.ts +26 -8
- package/dist/cli/i18n/zh-CN.d.ts +9 -0
- package/dist/cli/i18n/zh-CN.js +17 -8
- package/dist/cli/index.js +16 -9
- package/dist/cli/lazy-action.d.ts +7 -0
- package/dist/cli/lazy-action.js +27 -0
- package/dist/cli/mcp.js +6 -3
- package/dist/cli/resolve-invocation.d.ts +7 -3
- package/dist/cli/resolve-invocation.js +7 -3
- package/dist/cli/setup.d.ts +8 -0
- package/dist/cli/setup.js +30 -7
- package/dist/cli/skill-gen.d.ts +1 -6
- package/dist/cli/skill-gen.js +88 -18
- package/dist/cli/standard-skills.d.ts +76 -0
- package/dist/cli/standard-skills.js +45 -0
- package/dist/cli/status.d.ts +4 -1
- package/dist/cli/status.js +57 -4
- package/dist/cli/tool.d.ts +1 -0
- package/dist/cli/tool.js +75 -7
- package/dist/cli/uninstall.js +7 -2
- package/dist/cli/wiki.d.ts +1 -0
- package/dist/cli/wiki.js +59 -10
- package/dist/config/ignore-service.d.ts +2 -0
- package/dist/config/ignore-service.js +31 -4
- package/dist/core/analysis-features.d.ts +21 -0
- package/dist/core/analysis-features.js +59 -0
- package/dist/core/analyzer-identity.d.ts +154 -0
- package/dist/core/analyzer-identity.js +2158 -0
- package/dist/core/augmentation/engine.js +95 -76
- package/dist/core/embedding-checkpoint.d.ts +143 -0
- package/dist/core/embedding-checkpoint.js +221 -0
- package/dist/core/embedding-count.d.ts +61 -0
- package/dist/core/embedding-count.js +69 -0
- package/dist/core/embeddings/ast-utils.js +9 -1
- package/dist/core/embeddings/embedder.d.ts +3 -2
- package/dist/core/embeddings/embedder.js +8 -5
- package/dist/core/embeddings/embedding-identity.d.ts +11 -0
- package/dist/core/embeddings/embedding-identity.js +24 -0
- package/dist/core/embeddings/embedding-pipeline.d.ts +24 -1
- package/dist/core/embeddings/embedding-pipeline.js +341 -19
- package/dist/core/embeddings/http-client.d.ts +10 -2
- package/dist/core/embeddings/http-client.js +282 -47
- package/dist/core/embeddings/node-module-compat.d.ts +4 -2
- package/dist/core/embeddings/node-module-compat.js +4 -2
- package/dist/core/embeddings/onnxruntime-common-resolver.js +5 -5
- package/dist/core/embeddings/onnxruntime-node-resolver.js +2 -2
- package/dist/core/embeddings/runtime-install.js +1 -1
- package/dist/core/git-staleness.js +1 -1
- package/dist/core/graph/graph.js +3 -0
- package/dist/core/graph/import-cycles.d.ts +194 -3
- package/dist/core/graph/import-cycles.js +522 -73
- package/dist/core/graph/types.d.ts +18 -0
- package/dist/core/group/bridge-db.js +5 -27
- package/dist/core/group/cross-impact.d.ts +21 -0
- package/dist/core/group/cross-impact.js +128 -15
- package/dist/core/group/cross-trace.js +27 -16
- package/dist/core/group/extractors/http-patterns/java.js +91 -14
- package/dist/core/group/extractors/http-patterns/node.js +19 -0
- package/dist/core/group/extractors/http-patterns/types.d.ts +8 -0
- package/dist/core/group/extractors/http-route-extractor.d.ts +1 -0
- package/dist/core/group/extractors/http-route-extractor.js +122 -48
- package/dist/core/group/extractors/include-extractor.js +20 -2
- package/dist/core/group/extractors/manifest-extractor.d.ts +1 -1
- package/dist/core/group/extractors/manifest-extractor.js +7 -7
- package/dist/core/group/service.js +10 -1
- package/dist/core/group/storage.js +2 -33
- package/dist/core/group/types.d.ts +18 -0
- package/dist/core/incremental/subgraph-extract.d.ts +9 -6
- package/dist/core/incremental/subgraph-extract.js +33 -10
- package/dist/core/index-freshness.d.ts +80 -0
- package/dist/core/index-freshness.js +120 -0
- package/dist/core/ingestion/call-processor.d.ts +13 -1
- package/dist/core/ingestion/call-processor.js +110 -3
- package/dist/core/ingestion/cfg/callee-cell-format.d.ts +42 -0
- package/dist/core/ingestion/cfg/callee-cell-format.js +42 -0
- package/dist/core/ingestion/cfg/emit.d.ts +8 -23
- package/dist/core/ingestion/cfg/emit.js +9 -23
- package/dist/core/ingestion/class-extractors/configs/go.js +10 -5
- package/dist/core/ingestion/class-extractors/configs/jvm.js +29 -0
- package/dist/core/ingestion/cluster-enricher.js +8 -4
- package/dist/core/ingestion/cobol/cobol-preprocessor.js +1 -1
- package/dist/core/ingestion/community-processor.d.ts +21 -3
- package/dist/core/ingestion/community-processor.js +88 -83
- package/dist/core/ingestion/di-extractors/index.d.ts +22 -34
- package/dist/core/ingestion/di-extractors/index.js +17 -18
- package/dist/core/ingestion/di-extractors/spring.d.ts +27 -5
- package/dist/core/ingestion/di-extractors/spring.js +87 -3
- package/dist/core/ingestion/di-extractors/types.d.ts +60 -0
- package/dist/core/ingestion/di-extractors/types.js +15 -0
- package/dist/core/ingestion/emit-references.js +4 -0
- package/dist/core/ingestion/filesystem-walker.js +16 -12
- package/dist/core/ingestion/finalize-orchestrator.js +1 -0
- package/dist/core/ingestion/frameworks/spring/analysis-features.d.ts +9 -0
- package/dist/core/ingestion/frameworks/spring/analysis-features.js +41 -0
- package/dist/core/ingestion/frameworks/spring/annotation-arguments.d.ts +13 -0
- package/dist/core/ingestion/frameworks/spring/annotation-arguments.js +227 -0
- package/dist/core/ingestion/frameworks/spring/aop-candidates.d.ts +15 -0
- package/dist/core/ingestion/frameworks/spring/aop-candidates.js +85 -0
- package/dist/core/ingestion/frameworks/spring/aop.d.ts +118 -0
- package/dist/core/ingestion/frameworks/spring/aop.js +476 -0
- package/dist/core/ingestion/frameworks/spring/auto-configuration.d.ts +8 -0
- package/dist/core/ingestion/frameworks/spring/auto-configuration.js +16 -0
- package/dist/core/ingestion/frameworks/spring/bean-candidates.d.ts +30 -0
- package/dist/core/ingestion/frameworks/spring/bean-candidates.js +182 -0
- package/dist/core/ingestion/frameworks/spring/bean-catalog.d.ts +12 -0
- package/dist/core/ingestion/frameworks/spring/bean-catalog.js +27 -0
- package/dist/core/ingestion/frameworks/spring/bean-factories.d.ts +33 -0
- package/dist/core/ingestion/frameworks/spring/bean-factories.js +65 -0
- package/dist/core/ingestion/frameworks/spring/conditionals.d.ts +25 -0
- package/dist/core/ingestion/frameworks/spring/conditionals.js +319 -0
- package/dist/core/ingestion/frameworks/spring/config-bindings.d.ts +24 -0
- package/dist/core/ingestion/frameworks/spring/config-bindings.js +115 -0
- package/dist/core/ingestion/frameworks/spring/di-metadata.d.ts +48 -0
- package/dist/core/ingestion/frameworks/spring/di-metadata.js +379 -0
- package/dist/core/ingestion/frameworks/spring/non-http-handlers.d.ts +28 -0
- package/dist/core/ingestion/frameworks/spring/non-http-handlers.js +152 -0
- package/dist/core/ingestion/frameworks/spring/resource-injection.d.ts +5 -0
- package/dist/core/ingestion/frameworks/spring/resource-injection.js +91 -0
- package/dist/core/ingestion/import-resolvers/configs/csharp.js +5 -1
- package/dist/core/ingestion/import-resolvers/configs/swift.js +13 -0
- package/dist/core/ingestion/import-resolvers/csharp.d.ts +9 -1
- package/dist/core/ingestion/import-resolvers/csharp.js +234 -27
- package/dist/core/ingestion/import-resolvers/go.d.ts +11 -1
- package/dist/core/ingestion/import-resolvers/go.js +44 -17
- package/dist/core/ingestion/import-resolvers/jvm.d.ts +2 -2
- package/dist/core/ingestion/import-resolvers/node-workspace-packages.d.ts +90 -0
- package/dist/core/ingestion/import-resolvers/node-workspace-packages.js +428 -0
- package/dist/core/ingestion/import-resolvers/package-dir-index.d.ts +124 -0
- package/dist/core/ingestion/import-resolvers/package-dir-index.js +223 -0
- package/dist/core/ingestion/import-resolvers/pass-cache.d.ts +50 -0
- package/dist/core/ingestion/import-resolvers/pass-cache.js +60 -0
- package/dist/core/ingestion/import-resolvers/per-file-set.d.ts +71 -0
- package/dist/core/ingestion/import-resolvers/per-file-set.js +11 -0
- package/dist/core/ingestion/import-resolvers/php.d.ts +1 -1
- package/dist/core/ingestion/import-resolvers/php.js +27 -8
- package/dist/core/ingestion/import-resolvers/python-file-index.d.ts +201 -0
- package/dist/core/ingestion/import-resolvers/python-file-index.js +302 -0
- package/dist/core/ingestion/import-resolvers/python.js +25 -6
- package/dist/core/ingestion/import-resolvers/ruby.d.ts +1 -1
- package/dist/core/ingestion/import-resolvers/rust.d.ts +2 -2
- package/dist/core/ingestion/import-resolvers/standard.d.ts +1 -1
- package/dist/core/ingestion/import-resolvers/types.d.ts +1 -12
- package/dist/core/ingestion/import-resolvers/utils.d.ts +65 -6
- package/dist/core/ingestion/import-resolvers/utils.js +215 -36
- package/dist/core/ingestion/import-resolvers/workspace-file-index.d.ts +72 -0
- package/dist/core/ingestion/import-resolvers/workspace-file-index.js +58 -0
- package/dist/core/ingestion/language-config.d.ts +20 -1
- package/dist/core/ingestion/language-config.js +18 -23
- package/dist/core/ingestion/language-provider.d.ts +133 -7
- package/dist/core/ingestion/languages/c/captures.js +63 -0
- package/dist/core/ingestion/languages/c/import-target.js +12 -16
- package/dist/core/ingestion/languages/c/query.js +17 -0
- package/dist/core/ingestion/languages/c/scope-resolver.js +26 -19
- package/dist/core/ingestion/languages/c/static-linkage.js +12 -16
- package/dist/core/ingestion/languages/c-cpp.js +13 -0
- package/dist/core/ingestion/languages/cobol/captures.js +93 -0
- package/dist/core/ingestion/languages/cobol/scope-resolver.js +34 -20
- package/dist/core/ingestion/languages/cobol.js +13 -0
- package/dist/core/ingestion/languages/cpp/adl.d.ts +2 -2
- package/dist/core/ingestion/languages/cpp/adl.js +67 -44
- package/dist/core/ingestion/languages/cpp/captures.js +222 -3
- package/dist/core/ingestion/languages/cpp/file-local-linkage.js +11 -15
- package/dist/core/ingestion/languages/cpp/inline-namespaces.d.ts +28 -8
- package/dist/core/ingestion/languages/cpp/inline-namespaces.js +242 -68
- package/dist/core/ingestion/languages/cpp/interpret.d.ts +2 -0
- package/dist/core/ingestion/languages/cpp/interpret.js +126 -6
- package/dist/core/ingestion/languages/cpp/query.js +106 -0
- package/dist/core/ingestion/languages/cpp/scope-resolver.js +62 -20
- package/dist/core/ingestion/languages/csharp/accessor-unwrap.d.ts +2 -15
- package/dist/core/ingestion/languages/csharp/accessor-unwrap.js +18 -10
- package/dist/core/ingestion/languages/csharp/captures.js +44 -0
- package/dist/core/ingestion/languages/csharp/import-target.js +46 -72
- package/dist/core/ingestion/languages/csharp/namespace-siblings.js +5 -1
- package/dist/core/ingestion/languages/csharp/query.js +25 -5
- package/dist/core/ingestion/languages/csharp/scope-resolver.js +75 -2
- package/dist/core/ingestion/languages/dart/captures.d.ts +10 -0
- package/dist/core/ingestion/languages/dart/captures.js +686 -16
- package/dist/core/ingestion/languages/dart/extension-type-preprocess.d.ts +7 -0
- package/dist/core/ingestion/languages/dart/extension-type-preprocess.js +30 -0
- package/dist/core/ingestion/languages/dart/import-target.js +32 -9
- package/dist/core/ingestion/languages/dart/index.d.ts +1 -1
- package/dist/core/ingestion/languages/dart/index.js +1 -1
- package/dist/core/ingestion/languages/dart/query.js +98 -1
- package/dist/core/ingestion/languages/dart/scope-resolver.js +14 -3
- package/dist/core/ingestion/languages/dart/simple-hooks.js +9 -0
- package/dist/core/ingestion/languages/dart.js +8 -1
- package/dist/core/ingestion/languages/go/captures.js +142 -3
- package/dist/core/ingestion/languages/go/generic-type-parameters.d.ts +31 -0
- package/dist/core/ingestion/languages/go/generic-type-parameters.js +140 -0
- package/dist/core/ingestion/languages/go/import-target.d.ts +3 -10
- package/dist/core/ingestion/languages/go/import-target.js +34 -30
- package/dist/core/ingestion/languages/go/index.d.ts +1 -1
- package/dist/core/ingestion/languages/go/interface-impls.d.ts +9 -1
- package/dist/core/ingestion/languages/go/interface-impls.js +693 -87
- package/dist/core/ingestion/languages/go/interpret.d.ts +2 -0
- package/dist/core/ingestion/languages/go/interpret.js +22 -8
- package/dist/core/ingestion/languages/go/method-owners.js +31 -12
- package/dist/core/ingestion/languages/go/package-clause.d.ts +46 -0
- package/dist/core/ingestion/languages/go/package-clause.js +75 -0
- package/dist/core/ingestion/languages/go/package-siblings.js +7 -11
- package/dist/core/ingestion/languages/go/query.js +56 -3
- package/dist/core/ingestion/languages/go/scope-resolver.js +39 -0
- package/dist/core/ingestion/languages/go.js +9 -0
- package/dist/core/ingestion/languages/java/analysis-features.d.ts +7 -0
- package/dist/core/ingestion/languages/java/analysis-features.js +25 -0
- package/dist/core/ingestion/languages/java/capture-side-channel.d.ts +38 -0
- package/dist/core/ingestion/languages/java/capture-side-channel.js +124 -0
- package/dist/core/ingestion/languages/java/captures.d.ts +4 -3
- package/dist/core/ingestion/languages/java/captures.js +321 -49
- package/dist/core/ingestion/languages/java/import-target.d.ts +49 -9
- package/dist/core/ingestion/languages/java/import-target.js +68 -88
- package/dist/core/ingestion/languages/java/interpret.js +3 -2
- package/dist/core/ingestion/languages/java/module-resolution.d.ts +62 -0
- package/dist/core/ingestion/languages/java/module-resolution.js +142 -0
- package/dist/core/ingestion/languages/java/package-facts.d.ts +5 -0
- package/dist/core/ingestion/languages/java/package-facts.js +9 -0
- package/dist/core/ingestion/languages/java/package-siblings.d.ts +3 -16
- package/dist/core/ingestion/languages/java/package-siblings.js +8 -147
- package/dist/core/ingestion/languages/java/query.js +39 -3
- package/dist/core/ingestion/languages/java/record-components.d.ts +14 -0
- package/dist/core/ingestion/languages/java/record-components.js +185 -0
- package/dist/core/ingestion/languages/java/scope-resolver.js +35 -2
- package/dist/core/ingestion/languages/java/spring-aop.d.ts +12 -0
- package/dist/core/ingestion/languages/java/spring-aop.js +49 -0
- package/dist/core/ingestion/languages/java/spring-bean-metadata.d.ts +2 -0
- package/dist/core/ingestion/languages/java/spring-bean-metadata.js +8 -0
- package/dist/core/ingestion/languages/java/spring-conditionals.d.ts +11 -0
- package/dist/core/ingestion/languages/java/spring-conditionals.js +48 -0
- package/dist/core/ingestion/languages/java/spring-config-bindings.d.ts +23 -0
- package/dist/core/ingestion/languages/java/spring-config-bindings.js +215 -0
- package/dist/core/ingestion/languages/java/spring-di.d.ts +20 -0
- package/dist/core/ingestion/languages/java/spring-di.js +160 -0
- package/dist/core/ingestion/languages/java/spring-non-http-handlers.d.ts +7 -0
- package/dist/core/ingestion/languages/java/spring-non-http-handlers.js +32 -0
- package/dist/core/ingestion/languages/java.js +76 -3
- package/dist/core/ingestion/languages/javascript/captures.d.ts +6 -1
- package/dist/core/ingestion/languages/javascript/captures.js +278 -4
- package/dist/core/ingestion/languages/javascript/import-target.d.ts +17 -21
- package/dist/core/ingestion/languages/javascript/import-target.js +24 -41
- package/dist/core/ingestion/languages/javascript/index.d.ts +54 -5
- package/dist/core/ingestion/languages/javascript/index.js +54 -5
- package/dist/core/ingestion/languages/javascript/query.d.ts +1 -0
- package/dist/core/ingestion/languages/javascript/query.js +232 -5
- package/dist/core/ingestion/languages/javascript/scope-resolver.js +12 -0
- package/dist/core/ingestion/languages/javascript/simple-hooks.js +2 -1
- package/dist/core/ingestion/languages/jvm/package-facts.d.ts +35 -0
- package/dist/core/ingestion/languages/jvm/package-facts.js +40 -0
- package/dist/core/ingestion/languages/jvm/package-siblings.d.ts +14 -0
- package/dist/core/ingestion/languages/jvm/package-siblings.js +197 -0
- package/dist/core/ingestion/languages/kotlin/capture-side-channel.d.ts +40 -3
- package/dist/core/ingestion/languages/kotlin/capture-side-channel.js +111 -8
- package/dist/core/ingestion/languages/kotlin/captures.js +112 -0
- package/dist/core/ingestion/languages/kotlin/import-target.d.ts +8 -1
- package/dist/core/ingestion/languages/kotlin/import-target.js +20 -123
- package/dist/core/ingestion/languages/kotlin/index.d.ts +1 -0
- package/dist/core/ingestion/languages/kotlin/index.js +1 -0
- package/dist/core/ingestion/languages/kotlin/module-resolution.d.ts +22 -0
- package/dist/core/ingestion/languages/kotlin/module-resolution.js +108 -0
- package/dist/core/ingestion/languages/kotlin/package-facts.d.ts +5 -0
- package/dist/core/ingestion/languages/kotlin/package-facts.js +9 -0
- package/dist/core/ingestion/languages/kotlin/package-siblings.d.ts +4 -0
- package/dist/core/ingestion/languages/kotlin/package-siblings.js +8 -0
- package/dist/core/ingestion/languages/kotlin/query.js +47 -2
- package/dist/core/ingestion/languages/kotlin/scope-resolver.js +36 -3
- package/dist/core/ingestion/languages/kotlin/spring-aop.d.ts +12 -0
- package/dist/core/ingestion/languages/kotlin/spring-aop.js +64 -0
- package/dist/core/ingestion/languages/kotlin/spring-bean-metadata.d.ts +2 -0
- package/dist/core/ingestion/languages/kotlin/spring-bean-metadata.js +8 -0
- package/dist/core/ingestion/languages/kotlin/spring-conditionals.d.ts +12 -0
- package/dist/core/ingestion/languages/kotlin/spring-conditionals.js +49 -0
- package/dist/core/ingestion/languages/kotlin/spring-di.d.ts +20 -0
- package/dist/core/ingestion/languages/kotlin/spring-di.js +299 -0
- package/dist/core/ingestion/languages/kotlin/spring-non-http-handlers.d.ts +10 -0
- package/dist/core/ingestion/languages/kotlin/spring-non-http-handlers.js +41 -0
- package/dist/core/ingestion/languages/kotlin.js +5 -6
- package/dist/core/ingestion/languages/php/captures.d.ts +5 -0
- package/dist/core/ingestion/languages/php/captures.js +359 -51
- package/dist/core/ingestion/languages/php/import-decomposer.js +12 -0
- package/dist/core/ingestion/languages/php/import-target.d.ts +2 -1
- package/dist/core/ingestion/languages/php/import-target.js +229 -7
- package/dist/core/ingestion/languages/php/interpret.js +10 -0
- package/dist/core/ingestion/languages/php/query.js +31 -0
- package/dist/core/ingestion/languages/php/scope-resolver.js +1 -1
- package/dist/core/ingestion/languages/python/arity-metadata.d.ts +1 -0
- package/dist/core/ingestion/languages/python/arity-metadata.js +1 -0
- package/dist/core/ingestion/languages/python/captures.d.ts +3 -4
- package/dist/core/ingestion/languages/python/captures.js +53 -5
- package/dist/core/ingestion/languages/python/import-decomposer.js +22 -1
- package/dist/core/ingestion/languages/python/import-target.d.ts +42 -1
- package/dist/core/ingestion/languages/python/import-target.js +277 -91
- package/dist/core/ingestion/languages/python/index.d.ts +1 -1
- package/dist/core/ingestion/languages/python/index.js +1 -1
- package/dist/core/ingestion/languages/python/interpret.d.ts +52 -0
- package/dist/core/ingestion/languages/python/interpret.js +249 -3
- package/dist/core/ingestion/languages/python/query.js +9 -0
- package/dist/core/ingestion/languages/python/receiver-binding.d.ts +17 -2
- package/dist/core/ingestion/languages/python/receiver-binding.js +192 -2
- package/dist/core/ingestion/languages/python/scope-resolver.js +27 -4
- package/dist/core/ingestion/languages/python/simple-hooks.d.ts +5 -5
- package/dist/core/ingestion/languages/python/simple-hooks.js +9 -5
- package/dist/core/ingestion/languages/ruby/captures.js +200 -0
- package/dist/core/ingestion/languages/ruby/import-target.js +7 -5
- package/dist/core/ingestion/languages/ruby/query.js +93 -0
- package/dist/core/ingestion/languages/ruby/scope-resolver.js +2 -0
- package/dist/core/ingestion/languages/ruby/simple-hooks.d.ts +1 -1
- package/dist/core/ingestion/languages/ruby/simple-hooks.js +22 -1
- package/dist/core/ingestion/languages/rust/captures.js +52 -1
- package/dist/core/ingestion/languages/rust/interpret.js +18 -0
- package/dist/core/ingestion/languages/rust/method-owners.js +11 -1
- package/dist/core/ingestion/languages/rust/module-path.d.ts +126 -0
- package/dist/core/ingestion/languages/rust/module-path.js +214 -0
- package/dist/core/ingestion/languages/rust/qualified-call.d.ts +41 -0
- package/dist/core/ingestion/languages/rust/qualified-call.js +481 -0
- package/dist/core/ingestion/languages/rust/query.js +48 -6
- package/dist/core/ingestion/languages/rust/range-binding.d.ts +1 -11
- package/dist/core/ingestion/languages/rust/range-binding.js +149 -63
- package/dist/core/ingestion/languages/rust/scope-resolver.js +21 -2
- package/dist/core/ingestion/languages/rust.js +17 -0
- package/dist/core/ingestion/languages/swift/captures.js +99 -3
- package/dist/core/ingestion/languages/swift/conditional-directive-preprocess.d.ts +48 -0
- package/dist/core/ingestion/languages/swift/conditional-directive-preprocess.js +253 -0
- package/dist/core/ingestion/languages/swift/import-target.js +4 -9
- package/dist/core/ingestion/languages/swift/query.js +17 -0
- package/dist/core/ingestion/languages/swift/receiver-binding.d.ts +8 -0
- package/dist/core/ingestion/languages/swift/receiver-binding.js +6 -2
- package/dist/core/ingestion/languages/swift.js +2 -0
- package/dist/core/ingestion/languages/typescript/captures.d.ts +90 -1
- package/dist/core/ingestion/languages/typescript/captures.js +288 -5
- package/dist/core/ingestion/languages/typescript/cjs-export-assignment.d.ts +134 -0
- package/dist/core/ingestion/languages/typescript/cjs-export-assignment.js +523 -0
- package/dist/core/ingestion/languages/typescript/cjs-module-exports.d.ts +54 -0
- package/dist/core/ingestion/languages/typescript/cjs-module-exports.js +191 -0
- package/dist/core/ingestion/languages/typescript/file-candidates.d.ts +29 -0
- package/dist/core/ingestion/languages/typescript/file-candidates.js +70 -0
- package/dist/core/ingestion/languages/typescript/import-decomposer.d.ts +28 -1
- package/dist/core/ingestion/languages/typescript/import-decomposer.js +125 -10
- package/dist/core/ingestion/languages/typescript/import-target.d.ts +25 -37
- package/dist/core/ingestion/languages/typescript/import-target.js +24 -26
- package/dist/core/ingestion/languages/typescript/interpret.d.ts +21 -1
- package/dist/core/ingestion/languages/typescript/interpret.js +45 -5
- package/dist/core/ingestion/languages/typescript/module-resolution.d.ts +48 -0
- package/dist/core/ingestion/languages/typescript/module-resolution.js +171 -0
- package/dist/core/ingestion/languages/typescript/nuxt-auto-imports.js +2 -1
- package/dist/core/ingestion/languages/typescript/query.d.ts +1 -0
- package/dist/core/ingestion/languages/typescript/query.js +340 -14
- package/dist/core/ingestion/languages/typescript/receiver-binding.d.ts +17 -0
- package/dist/core/ingestion/languages/typescript/receiver-binding.js +27 -0
- package/dist/core/ingestion/languages/typescript/scope-resolver.js +27 -40
- package/dist/core/ingestion/languages/typescript/simple-hooks.d.ts +0 -10
- package/dist/core/ingestion/languages/typescript/simple-hooks.js +22 -22
- package/dist/core/ingestion/languages/typescript/tsconfig.d.ts +59 -0
- package/dist/core/ingestion/languages/typescript/tsconfig.js +291 -0
- package/dist/core/ingestion/languages/typescript.js +87 -1
- package/dist/core/ingestion/languages/vue/import-target.d.ts +6 -22
- package/dist/core/ingestion/languages/vue/import-target.js +11 -47
- package/dist/core/ingestion/languages/vue/scope-resolver.js +4 -2
- package/dist/core/ingestion/local-symbol-pruner.js +11 -11
- package/dist/core/ingestion/method-extractors/configs/csharp.js +1 -0
- package/dist/core/ingestion/method-extractors/generic.js +1 -0
- package/dist/core/ingestion/method-types.d.ts +16 -0
- package/dist/core/ingestion/parsing-processor.js +32 -1
- package/dist/core/ingestion/pipeline-phases/di.d.ts +8 -33
- package/dist/core/ingestion/pipeline-phases/di.js +275 -157
- package/dist/core/ingestion/pipeline-phases/index.d.ts +3 -0
- package/dist/core/ingestion/pipeline-phases/index.js +3 -0
- package/dist/core/ingestion/pipeline-phases/parse-impl.d.ts +15 -0
- package/dist/core/ingestion/pipeline-phases/parse-impl.js +158 -3
- package/dist/core/ingestion/pipeline-phases/parse.js +5 -0
- package/dist/core/ingestion/pipeline-phases/processes.d.ts +11 -2
- package/dist/core/ingestion/pipeline-phases/processes.js +102 -7
- package/dist/core/ingestion/pipeline-phases/routes.js +56 -10
- package/dist/core/ingestion/pipeline-phases/spring-aop.d.ts +34 -0
- package/dist/core/ingestion/pipeline-phases/spring-aop.js +439 -0
- package/dist/core/ingestion/pipeline-phases/spring-auto-configuration.d.ts +34 -0
- package/dist/core/ingestion/pipeline-phases/spring-auto-configuration.js +255 -0
- package/dist/core/ingestion/pipeline-phases/spring-config.d.ts +37 -0
- package/dist/core/ingestion/pipeline-phases/spring-config.js +433 -0
- package/dist/core/ingestion/pipeline-phases/types.d.ts +7 -0
- package/dist/core/ingestion/pipeline.d.ts +27 -3
- package/dist/core/ingestion/pipeline.js +62 -12
- package/dist/core/ingestion/process-processor.d.ts +109 -2
- package/dist/core/ingestion/process-processor.js +464 -52
- package/dist/core/ingestion/resolve-references.d.ts +6 -1
- package/dist/core/ingestion/resolve-references.js +78 -6
- package/dist/core/ingestion/route-extractors/data-route-table.d.ts +25 -0
- package/dist/core/ingestion/route-extractors/data-route-table.js +864 -0
- package/dist/core/ingestion/route-extractors/dispatch-guard.d.ts +96 -0
- package/dist/core/ingestion/route-extractors/dispatch-guard.js +1184 -0
- package/dist/core/ingestion/route-extractors/spring-shared.d.ts +11 -0
- package/dist/core/ingestion/route-extractors/spring-shared.js +89 -0
- package/dist/core/ingestion/route-extractors/spring.js +109 -24
- package/dist/core/ingestion/scope-extractor-bridge.js +9 -1
- package/dist/core/ingestion/scope-extractor.d.ts +22 -7
- package/dist/core/ingestion/scope-extractor.js +617 -59
- package/dist/core/ingestion/scope-resolution/contract/scope-resolver.d.ts +381 -22
- package/dist/core/ingestion/scope-resolution/contract/scope-resolver.js +16 -5
- package/dist/core/ingestion/scope-resolution/graph-bridge/callee-id-sink.d.ts +7 -7
- package/dist/core/ingestion/scope-resolution/graph-bridge/callee-id-sink.js +8 -7
- package/dist/core/ingestion/scope-resolution/graph-bridge/edges.d.ts +15 -1
- package/dist/core/ingestion/scope-resolution/graph-bridge/edges.js +53 -0
- package/dist/core/ingestion/scope-resolution/graph-bridge/ids.d.ts +20 -15
- package/dist/core/ingestion/scope-resolution/graph-bridge/ids.js +275 -41
- package/dist/core/ingestion/scope-resolution/graph-bridge/imports-to-edges.d.ts +123 -0
- package/dist/core/ingestion/scope-resolution/graph-bridge/imports-to-edges.js +171 -17
- package/dist/core/ingestion/scope-resolution/graph-bridge/node-lookup.d.ts +56 -1
- package/dist/core/ingestion/scope-resolution/graph-bridge/node-lookup.js +130 -32
- package/dist/core/ingestion/scope-resolution/graph-bridge/references-to-edges.d.ts +30 -1
- package/dist/core/ingestion/scope-resolution/graph-bridge/references-to-edges.js +46 -3
- package/dist/core/ingestion/scope-resolution/passes/callable-value-flow.d.ts +64 -0
- package/dist/core/ingestion/scope-resolution/passes/callable-value-flow.js +1233 -0
- package/dist/core/ingestion/scope-resolution/passes/compound-receiver.d.ts +107 -5
- package/dist/core/ingestion/scope-resolution/passes/compound-receiver.js +590 -33
- package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.d.ts +19 -4
- package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.js +160 -4
- package/dist/core/ingestion/scope-resolution/passes/imported-value-refs.d.ts +34 -0
- package/dist/core/ingestion/scope-resolution/passes/imported-value-refs.js +62 -0
- package/dist/core/ingestion/scope-resolution/passes/property-dispatch.d.ts +64 -0
- package/dist/core/ingestion/scope-resolution/passes/property-dispatch.js +118 -0
- package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.d.ts +109 -8
- package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.js +931 -92
- package/dist/core/ingestion/scope-resolution/passes/return-shape-members.d.ts +58 -0
- package/dist/core/ingestion/scope-resolution/passes/return-shape-members.js +458 -0
- package/dist/core/ingestion/scope-resolution/passes/unique-name-properties.d.ts +180 -0
- package/dist/core/ingestion/scope-resolution/passes/unique-name-properties.js +418 -0
- package/dist/core/ingestion/scope-resolution/pipeline/phase.d.ts +34 -0
- package/dist/core/ingestion/scope-resolution/pipeline/phase.js +82 -38
- package/dist/core/ingestion/scope-resolution/pipeline/run.d.ts +61 -1
- package/dist/core/ingestion/scope-resolution/pipeline/run.js +384 -48
- package/dist/core/ingestion/scope-resolution/resolution-outcome.d.ts +112 -2
- package/dist/core/ingestion/scope-resolution/resolution-outcome.js +38 -1
- package/dist/core/ingestion/scope-resolution/scope/namespace-targets.d.ts +25 -3
- package/dist/core/ingestion/scope-resolution/scope/namespace-targets.js +36 -16
- package/dist/core/ingestion/scope-resolution/scope/walkers.d.ts +210 -9
- package/dist/core/ingestion/scope-resolution/scope/walkers.js +968 -56
- package/dist/core/ingestion/scope-resolution/summary-maps.d.ts +28 -0
- package/dist/core/ingestion/scope-resolution/summary-maps.js +50 -0
- package/dist/core/ingestion/scope-resolution/undecided-satisfaction.d.ts +55 -0
- package/dist/core/ingestion/scope-resolution/undecided-satisfaction.js +37 -0
- package/dist/core/ingestion/scope-resolution/unresolved-receivers.d.ts +109 -0
- package/dist/core/ingestion/scope-resolution/unresolved-receivers.js +204 -0
- package/dist/core/ingestion/scope-resolution/utils/definition-id.d.ts +13 -0
- package/dist/core/ingestion/scope-resolution/utils/definition-id.js +19 -0
- package/dist/core/ingestion/scope-resolution/utils/generic-instantiation.d.ts +171 -0
- package/dist/core/ingestion/scope-resolution/utils/generic-instantiation.js +218 -0
- package/dist/core/ingestion/scope-resolution/workspace-index-types.d.ts +34 -0
- package/dist/core/ingestion/scope-resolution/workspace-index-types.js +15 -0
- package/dist/core/ingestion/scope-resolution/workspace-index.d.ts +7 -20
- package/dist/core/ingestion/taint/typescript-model.js +34 -2
- package/dist/core/ingestion/tree-sitter-queries.d.ts +11 -11
- package/dist/core/ingestion/tree-sitter-queries.js +688 -5
- package/dist/core/ingestion/type-env.js +11 -7
- package/dist/core/ingestion/type-extractors/jvm.js +17 -2
- package/dist/core/ingestion/type-extractors/shared.d.ts +17 -0
- package/dist/core/ingestion/type-extractors/shared.js +16 -0
- package/dist/core/ingestion/type-extractors/types.d.ts +12 -0
- package/dist/core/ingestion/type-extractors/typescript.d.ts +20 -0
- package/dist/core/ingestion/type-extractors/typescript.js +26 -0
- package/dist/core/ingestion/utils/ast-helpers.d.ts +311 -14
- package/dist/core/ingestion/utils/ast-helpers.js +745 -48
- package/dist/core/ingestion/utils/call-analysis.d.ts +27 -22
- package/dist/core/ingestion/utils/call-analysis.js +202 -7
- package/dist/core/ingestion/utils/callable-flow-captures.d.ts +153 -0
- package/dist/core/ingestion/utils/callable-flow-captures.js +928 -0
- package/dist/core/ingestion/utils/callable-labels.d.ts +25 -0
- package/dist/core/ingestion/utils/callable-labels.js +31 -0
- package/dist/core/ingestion/utils/effective-ram.d.ts +40 -0
- package/dist/core/ingestion/utils/effective-ram.js +58 -0
- package/dist/core/ingestion/utils/line-base.d.ts +14 -0
- package/dist/core/ingestion/utils/line-base.js +14 -0
- package/dist/core/ingestion/utils/method-props.d.ts +27 -4
- package/dist/core/ingestion/utils/method-props.js +29 -4
- package/dist/core/ingestion/utils/receiver-chain-captures.d.ts +31 -0
- package/dist/core/ingestion/utils/receiver-chain-captures.js +57 -0
- package/dist/core/ingestion/utils/receiver-chain-codec.d.ts +89 -0
- package/dist/core/ingestion/utils/receiver-chain-codec.js +182 -0
- package/dist/core/ingestion/utils/scope-tree-walk.d.ts +22 -0
- package/dist/core/ingestion/utils/scope-tree-walk.js +33 -0
- package/dist/core/ingestion/utils/template-arguments.d.ts +96 -0
- package/dist/core/ingestion/utils/template-arguments.js +196 -0
- package/dist/core/ingestion/utils/type-parameters.d.ts +49 -0
- package/dist/core/ingestion/utils/type-parameters.js +206 -0
- package/dist/core/ingestion/workers/callable-id.d.ts +72 -0
- package/dist/core/ingestion/workers/callable-id.js +116 -0
- package/dist/core/ingestion/workers/parse-worker.d.ts +14 -1
- package/dist/core/ingestion/workers/parse-worker.js +409 -39
- package/dist/core/ingestion/workers/worker-pool.d.ts +34 -27
- package/dist/core/ingestion/workers/worker-pool.js +133 -25
- package/dist/core/lbug/csv-generator.d.ts +27 -0
- package/dist/core/lbug/csv-generator.js +80 -17
- package/dist/core/lbug/extension-load-error.d.ts +2 -2
- package/dist/core/lbug/extension-load-error.js +44 -27
- package/dist/core/lbug/extension-loader.d.ts +29 -0
- package/dist/core/lbug/extension-loader.js +32 -7
- package/dist/core/lbug/graph-emit-sink.d.ts +264 -0
- package/dist/core/lbug/graph-emit-sink.js +581 -0
- package/dist/core/lbug/lbug-adapter.d.ts +337 -3
- package/dist/core/lbug/lbug-adapter.js +772 -67
- package/dist/core/lbug/lbug-config.d.ts +93 -6
- package/dist/core/lbug/lbug-config.js +269 -9
- package/dist/core/lbug/native-check.d.ts +39 -0
- package/dist/core/lbug/native-check.js +323 -46
- package/dist/core/lbug/pdg-emit-sink.d.ts +13 -4
- package/dist/core/lbug/pdg-emit-sink.js +21 -111
- package/dist/core/lbug/pool-adapter.d.ts +23 -1
- package/dist/core/lbug/pool-adapter.js +115 -7
- package/dist/core/lbug/query-batch.d.ts +75 -0
- package/dist/core/lbug/query-batch.js +102 -0
- package/dist/core/lbug/rel-pair-routing.d.ts +160 -2
- package/dist/core/lbug/rel-pair-routing.js +228 -10
- package/dist/core/lbug/schema.d.ts +162 -3
- package/dist/core/lbug/schema.js +392 -157
- package/dist/core/lbug/sidecar-recovery.d.ts +1 -0
- package/dist/core/lbug/sidecar-recovery.js +1 -1
- package/dist/core/lbug/sync-csv-writer.d.ts +47 -0
- package/dist/core/lbug/sync-csv-writer.js +108 -0
- package/dist/core/lbug/wal-checkpoint-driver.js +3 -0
- package/dist/core/platform/capabilities.d.ts +0 -1
- package/dist/core/platform/capabilities.js +12 -7
- package/dist/core/run-analyze.d.ts +150 -3
- package/dist/core/run-analyze.js +1562 -151
- package/dist/core/search/bm25-index.d.ts +11 -0
- package/dist/core/search/bm25-index.js +60 -26
- package/dist/core/search/fts-indexes.d.ts +167 -2
- package/dist/core/search/fts-indexes.js +264 -10
- package/dist/core/wiki/graph-queries.js +145 -112
- package/dist/core/wiki/llm-client.d.ts +37 -5
- package/dist/core/wiki/llm-client.js +88 -17
- package/dist/core/wiki/prompts.d.ts +19 -0
- package/dist/core/wiki/prompts.js +20 -1
- package/dist/lib/utils.d.ts +113 -0
- package/dist/lib/utils.js +185 -0
- package/dist/mcp/http-transport.d.ts +5 -0
- package/dist/mcp/http-transport.js +19 -5
- package/dist/mcp/local/aop-metadata.d.ts +77 -0
- package/dist/mcp/local/aop-metadata.js +227 -0
- package/dist/mcp/local/bean-metadata.d.ts +3 -0
- package/dist/mcp/local/bean-metadata.js +46 -0
- package/dist/mcp/local/local-backend.d.ts +167 -6
- package/dist/mcp/local/local-backend.js +1756 -405
- package/dist/mcp/local/path-predicate.d.ts +19 -0
- package/dist/mcp/local/path-predicate.js +21 -0
- package/dist/mcp/local/pdg-impact.d.ts +132 -10
- package/dist/mcp/local/pdg-impact.js +391 -98
- package/dist/mcp/output-budget.d.ts +5 -0
- package/dist/mcp/output-budget.js +52 -0
- package/dist/mcp/read-only-policy.d.ts +12 -0
- package/dist/mcp/read-only-policy.js +102 -0
- package/dist/mcp/repository-policy.d.ts +35 -0
- package/dist/mcp/repository-policy.js +333 -0
- package/dist/mcp/resources.js +34 -7
- package/dist/mcp/server.d.ts +5 -2
- package/dist/mcp/server.js +48 -18
- package/dist/mcp/tools.d.ts +8 -8
- package/dist/mcp/tools.js +91 -20
- package/dist/server/analyze-job.d.ts +40 -2
- package/dist/server/analyze-job.js +30 -2
- package/dist/server/analyze-launch.d.ts +1 -1
- package/dist/server/analyze-launch.js +79 -10
- package/dist/server/analyze-worker-core.d.ts +3 -2
- package/dist/server/analyze-worker-core.js +15 -3
- package/dist/server/analyze-worker-ipc.d.ts +1 -1
- package/dist/server/analyze-worker-ipc.js +4 -0
- package/dist/server/analyze-worker-protocol.d.ts +59 -0
- package/dist/server/analyze-worker-protocol.js +1 -0
- package/dist/server/analyze-worker.d.ts +1 -17
- package/dist/server/analyze-worker.js +29 -6
- package/dist/server/api.d.ts +2 -11
- package/dist/server/api.js +200 -155
- package/dist/server/embed-run-outcome.d.ts +89 -0
- package/dist/server/embed-run-outcome.js +88 -0
- package/dist/server/git-clone.js +6 -2
- package/dist/server/mcp-http.d.ts +1 -1
- package/dist/server/mcp-http.js +4 -2
- package/dist/server/middleware.d.ts +116 -9
- package/dist/server/middleware.js +291 -22
- package/dist/server/sse-progress.d.ts +41 -0
- package/dist/server/sse-progress.js +125 -0
- package/dist/server/upload-ingest.js +2 -1
- package/dist/server/validation.js +2 -1
- package/dist/storage/branch-index.d.ts +11 -6
- package/dist/storage/branch-index.js +15 -7
- package/dist/storage/file-hash.js +2 -2
- package/dist/storage/fs-atomic.d.ts +25 -0
- package/dist/storage/fs-atomic.js +42 -0
- package/dist/storage/git.d.ts +165 -0
- package/dist/storage/git.js +352 -3
- package/dist/storage/index-lock.d.ts +83 -0
- package/dist/storage/index-lock.js +654 -0
- package/dist/storage/parse-cache.js +482 -1
- package/dist/storage/parsedfile-store.d.ts +8 -0
- package/dist/storage/parsedfile-store.js +235 -1
- package/dist/storage/repo-manager.d.ts +29 -309
- package/dist/storage/repo-manager.js +187 -165
- package/dist/storage/repo-meta.d.ts +530 -0
- package/dist/storage/repo-meta.js +100 -0
- package/dist/types/pipeline.d.ts +37 -0
- package/hooks/antigravity/gitnexus-antigravity-hook.cjs +1 -1
- package/hooks/claude/gitnexus-hook.cjs +1 -1
- package/hooks/claude/resolve-analyze-cmd.cjs +80 -13
- package/package.json +20 -12
- package/scripts/cross-platform-shard.ts +143 -0
- package/scripts/cross-platform-tests.ts +94 -0
- package/scripts/ensure-fts.ts +14 -3
- package/scripts/run-cross-platform.ts +36 -10
- package/scripts/sync-plugin-manifests.mjs +192 -0
- package/skills/gitnexus-cli.md +3 -3
- package/skills/gitnexus-debugging.md +37 -7
- package/skills/gitnexus-exploring.md +26 -4
- package/skills/gitnexus-impact-analysis.md +71 -10
- package/skills/gitnexus-lfg/README.md +55 -0
- package/skills/gitnexus-lfg/SKILL.md +86 -0
- package/skills/gitnexus-plan/README.md +147 -0
- package/skills/gitnexus-plan/SKILL.md +348 -0
- package/skills/gitnexus-plan/references/context-ledger.md +137 -0
- package/skills/gitnexus-plan/references/context-pack.md +126 -0
- package/skills/gitnexus-plan/references/evidence-provenance.md +309 -0
- package/skills/gitnexus-plan/references/pdg-slice.md +109 -0
- package/skills/gitnexus-plan/references/plan-template.md +201 -0
- package/skills/gitnexus-plan/scripts/evidence-provenance.mjs +2366 -0
- package/skills/gitnexus-refactoring.md +48 -5
- package/skills/gitnexus-review/SKILL.md +279 -0
- package/skills/gitnexus-review/ci-personas/ci-adversarial-lens.md +42 -0
- package/skills/gitnexus-review/ci-personas/ci-blast-radius-lens.md +39 -0
- package/skills/gitnexus-review/ci-personas/ci-correctness-lens.md +37 -0
- package/skills/gitnexus-review/ci-personas/ci-coverage-lens.md +40 -0
- package/skills/gitnexus-review/ci-personas/ci-critic-lens.md +42 -0
- package/skills/gitnexus-review/ci-personas/ci-security-lens.md +39 -0
- package/skills/gitnexus-taint-analysis.md +13 -7
- package/skills/gitnexus-work/README.md +71 -0
- package/skills/gitnexus-work/SKILL.md +272 -0
- package/skills/gitnexus-work/references/evidence-provenance.md +309 -0
- package/skills/gitnexus-work/scripts/evidence-provenance.mjs +2366 -0
- package/vendor/leiden/utils.cjs +28 -1
- package/web/assets/ProcessFlowModal-Badh2Pbg.js +24 -0
- package/web/assets/__vite-browser-external-bMKyYQkO.js +1 -0
- package/web/assets/abnfDiagram-QNN2D4NM-Cq2djWWe.js +1 -0
- package/web/assets/agent-DIzEQ1JJ.js +626 -0
- package/web/assets/architecture-TIHT7OUA-V6N4J3SY-fTePvLoe.js +1 -0
- package/web/assets/architectureDiagram-OT7VKSJ7-mKEXxkeF.js +36 -0
- package/web/assets/blockDiagram-54WLDVWM-Dg_hrRWE.js +132 -0
- package/web/assets/{c4Diagram-Y2BXMSZH-DOXVs7-C.js → c4Diagram-X2LASM7V-CnhoT4aV.js} +6 -6
- package/web/assets/chunk-224SPVON-B8gxtXpy.js +1 -0
- package/web/assets/chunk-2AEHWXPW-CV4r6-1I.js +127 -0
- package/web/assets/chunk-2SREHG4O-Dip42xOq.js +1 -0
- package/web/assets/chunk-4RFN2BYJ-DHHWuC-n.js +1 -0
- package/web/assets/chunk-66DQ2XMT-CM0xjFAN.js +1 -0
- package/web/assets/chunk-6BELYETK-ChsYtfHW.js +1 -0
- package/web/assets/chunk-6L755F7B-CMhLBxi2.js +1 -0
- package/web/assets/chunk-7CWYLC5S-DRgGkkpF.js +2 -0
- package/web/assets/chunk-A7VWPJGB-B4O3oQdQ.js +1 -0
- package/web/assets/chunk-BI6VK774-D0oaWk8V.js +1 -0
- package/web/assets/chunk-D6VWDJW2-BxcBdZ9c.js +2 -0
- package/web/assets/chunk-DMV4VAQV-Bn6WXDSX.js +4 -0
- package/web/assets/chunk-E5QJAATJ-dh-5CtIV.js +2 -0
- package/web/assets/chunk-EQFTRU2I-1ix7TzW9.js +2 -0
- package/web/assets/chunk-FWYVLQTC-BgDItRzJ.js +1 -0
- package/web/assets/chunk-HNC4WDU7-DoU3KnA7.js +1 -0
- package/web/assets/chunk-L5GCOVLC-CE2w8Nm_.js +161 -0
- package/web/assets/chunk-LAHSG3N2-Bz4hcn0N.js +321 -0
- package/web/assets/chunk-LORZLZWG-B57uGw2N.js +88 -0
- package/web/assets/chunk-NLANEA3F-XpH_NPA5.js +62 -0
- package/web/assets/chunk-NV3KIAZN-5yvcpMiu.js +1 -0
- package/web/assets/chunk-OIYT25JQ-CQ6KOZGX.js +1 -0
- package/web/assets/chunk-PE7DX7ZZ-CCvRVj43.js +10 -0
- package/web/assets/chunk-Q67WD55A-BWCH2SVz.js +156 -0
- package/web/assets/chunk-RRFMTAIC-CMN0wcYA.js +1 -0
- package/web/assets/{chunk-RLI5ZMPA-CkXZ0y0U.js → chunk-SATU7PGQ-B1zhgOvc.js} +1 -1
- package/web/assets/chunk-STOV2HOB-GnExfzIX.js +1 -0
- package/web/assets/chunk-SZD42YQK-ijyKKVr1.js +70 -0
- package/web/assets/chunk-TFPGFQPA-Dj6a-0pC.js +231 -0
- package/web/assets/chunk-TGVD4F4B-BMc31Gj2.js +2 -0
- package/web/assets/chunk-TZUXEDM2-B7p9AcTw.js +1 -0
- package/web/assets/chunk-UAT7B5JY-DW-A_fpI.js +1 -0
- package/web/assets/{chunk-6764PJDD-C7xxk063.js → chunk-VE5CLXGZ-C1vB7wpY.js} +1 -1
- package/web/assets/chunk-VJFVEZTB-CX66F2ep.js +206 -0
- package/web/assets/chunk-VY5UBI4V-yxPQAWxw.js +1 -0
- package/web/assets/chunk-WJBAP47W-BckNkuEN.js +1 -0
- package/web/assets/chunk-XNMVGMAZ-Cg_LnPtj.js +1 -0
- package/web/assets/classDiagram-VPOSVPXH-BjOiXA_C.js +1 -0
- package/web/assets/classDiagram-v2-5VFNUXQA-BjOiXA_C.js +1 -0
- package/web/assets/{cose-bilkent-UX7MHV2Q-BmnZ7Mvj.js → cose-bilkent-RZA4XIPR-BHpK4Crp.js} +1 -1
- package/web/assets/cynefin-VYW2F7L2-2VAHYKR6-DAsF6GZv.js +1 -0
- package/web/assets/cynefinDiagram-TR7LZUCG-C3Iar9lZ.js +62 -0
- package/web/assets/dagre-K64A6Z3X-CUwi79mA.js +4 -0
- package/web/assets/diagram-2TLGJV2N-C2F5Nfym.js +30 -0
- package/web/assets/diagram-JCD7PQ7C-DC5-9FRr.js +24 -0
- package/web/assets/diagram-KFBZAVDW-Dfmf_4ti.js +3 -0
- package/web/assets/diagram-L7DVE3PN-GIRyVUtt.js +41 -0
- package/web/assets/diagram-YP3FGXHI-CyNFYtkd.js +24 -0
- package/web/assets/ebnfDiagram-DRHRQJWO-D8_CI4ZF.js +1 -0
- package/web/assets/erDiagram-SZLJLQMB-CohQjznC.js +85 -0
- package/web/assets/eventmodeling-45OFAUF4-AOUJWSLX-BvTc6iQi.js +1 -0
- package/web/assets/flowDiagram-BWE6NHOH-B6RnEvD9.js +1 -0
- package/web/assets/ganttDiagram-2QTCJSNI-Cks_mEcF.js +292 -0
- package/web/assets/gitGraph-TEB2WS4Q-U5VWYIBC-Dy7CCSZ5.js +1 -0
- package/web/assets/gitGraphDiagram-VVZAVV5G-CG41cIVc.js +106 -0
- package/web/assets/{index-B4eB4dNZ.js → index-BBNl0qfX.js} +51 -51
- package/web/assets/index-CJDpyH-n.css +2 -0
- package/web/assets/info-DKCQHKI2-DX6KST54-BLJg1ikX.js +1 -0
- package/web/assets/infoDiagram-FY4PZKRE-BJ3vPVwW.js +2 -0
- package/web/assets/{ishikawaDiagram-BNXS4ZKH-BLjivjXL.js → ishikawaDiagram-4JDSWWDM-DmqWtjkl.js} +6 -6
- package/web/assets/{journeyDiagram-M6C3CM3L-Cetgs3NH.js → journeyDiagram-QUS3FAKT-XAzVzrQW.js} +6 -6
- package/web/assets/{kanban-definition-75IXJCU3-DMlCaIpf.js → kanban-definition-D4L7SQKK-YurRnmYn.js} +27 -27
- package/web/assets/katex-C5OPUE3Q-Bnbavtmu.js +257 -0
- package/web/assets/{mindmap-definition-2TDM6QVE-B4GbXQBc.js → mindmap-definition-66QP5TD6-ChrWWnil.js} +29 -29
- package/web/assets/node-Ct_zna8U.js +8 -0
- package/web/assets/packet-7NZHBO7P-5WG45QPS-KUxcuvaA.js +1 -0
- package/web/assets/pegDiagram-YKIO5C6U-QGeQLEq2.js +1 -0
- package/web/assets/pie-RZYD4A2V-2OCZ2VTD-DPs08kJY.js +1 -0
- package/web/assets/pieDiagram-YPY3TKG5-BuT3MYzm.js +39 -0
- package/web/assets/preload-helper-Czpn1I53.js +1 -0
- package/web/assets/{quadrantDiagram-VICAPDV7-B1TQnlm0.js → quadrantDiagram-VO5QLCXA-B7098wSc.js} +6 -6
- package/web/assets/radar-I7S5WNFK-EPLSA35B-w5F0K3a7.js +1 -0
- package/web/assets/railroad-3IZDKUUU-PWFQV6Y6-Bu668yqY.js +1 -0
- package/web/assets/railroad-abnf-AHOZXSZD-JYYJX3BS-B6ghpETS.js +1 -0
- package/web/assets/railroad-ebnf-EBAXGLYW-RBZ4ONAP-D-XmHh3M.js +1 -0
- package/web/assets/railroad-peg-LSFZ7HO6-KHNPXGPG-mhkrhzEn.js +1 -0
- package/web/assets/railroadDiagram-M77LTMSB-AXu4vxk_.js +1 -0
- package/web/assets/requirementDiagram-RASO5HTO-B-l8InpK.js +84 -0
- package/web/assets/sankeyDiagram-F32LOJ6L-Kd7zjJgX.js +40 -0
- package/web/assets/sdk-CzHHH8tD.js +37 -0
- package/web/assets/sequenceDiagram-URATNSBD-BlcdY9DS.js +162 -0
- package/web/assets/sizeCapture-5GORAGP4-BEqQzsxs.js +1 -0
- package/web/assets/src-C5sx_gMp.js +1 -0
- package/web/assets/stateDiagram-DODFXNG5-DTdHc-fF.js +1 -0
- package/web/assets/stateDiagram-v2-JNMM5JRA-DioNLDDo.js +1 -0
- package/web/assets/swimlanes-OSWOYLSK-CA0ofdwY.js +2 -0
- package/web/assets/swimlanesDiagram-RHGX2RDE-PkwUdckC.js +8 -0
- package/web/assets/timeline-definition-WJXWRH4I-DUfp1R3E.js +120 -0
- package/web/assets/treeView-QDETBFTQ-EHYTSQNO-C5lpBgPm.js +1 -0
- package/web/assets/treemap-6X3UGDF4-CCWCF7EK-BB0ZyO-B.js +1 -0
- package/web/assets/vennDiagram-K3VCMQLI-Bj-FN-XS.js +34 -0
- package/web/assets/wardley-OPB4EBWU-6OWERDVT-CEA3Nq0j.js +1 -0
- package/web/assets/wardleyDiagram-XK6FUAWV-CVV0dHFr.js +78 -0
- package/web/assets/xychartDiagram-5VRUVLCW-CK_rbSWE.js +7 -0
- package/web/index.html +17 -15
- package/dist/core/ingestion/languages/python/index-stats.d.ts +0 -18
- package/dist/core/ingestion/languages/python/index-stats.js +0 -25
- package/skills/gitnexus-pr-review.md +0 -163
- package/web/assets/ProcessFlowModal-Dna7GkwO.js +0 -22
- package/web/assets/agent-DNYDy-KA.js +0 -660
- package/web/assets/architecture-7EHR7CIX-6QZW5X65-BVWFvYz2.js +0 -1
- package/web/assets/architectureDiagram-UL44E2DR-BU5ZRITg.js +0 -36
- package/web/assets/blockDiagram-7IZFK4PR-Dut1BpTV.js +0 -132
- package/web/assets/chunk-2T2R6R2M-pkw2oXHH.js +0 -4
- package/web/assets/chunk-2UTLFMKG-CXlhF3Pt.js +0 -1
- package/web/assets/chunk-3SSMPTDK-rPsRM1x0.js +0 -321
- package/web/assets/chunk-4R4BOZG6-Be_F0JoX.js +0 -159
- package/web/assets/chunk-67TQ5CYL-zxhDWgyF.js +0 -124
- package/web/assets/chunk-7J6CGLKN-AmkN8jJN.js +0 -10
- package/web/assets/chunk-C62D2QBJ-3gdL8EKc.js +0 -1
- package/web/assets/chunk-CEXFNPSA-CjwtMDkc.js +0 -1
- package/web/assets/chunk-INKRHTLW-D9BM9HWZ.js +0 -70
- package/web/assets/chunk-J5EP6P6S-L19oz55R.js +0 -1
- package/web/assets/chunk-KGFNY3KK-tD2F6wxK.js +0 -62
- package/web/assets/chunk-KGYTTC2M-zm6n242I.js +0 -1
- package/web/assets/chunk-KNLZD3CH-BGlP6X9R.js +0 -1
- package/web/assets/chunk-LCXTWHL2-Ba9JK-6F.js +0 -231
- package/web/assets/chunk-LII3EMHJ-EGx-eBIu.js +0 -1
- package/web/assets/chunk-LRIF4GLE-C3_PqUBq.js +0 -1
- package/web/assets/chunk-QA3QBVWF-D4cSJBf6.js +0 -2
- package/web/assets/chunk-RERM46MO-B5dAdWpP.js +0 -1
- package/web/assets/chunk-RG4AUYOV-OqBBMwuQ.js +0 -206
- package/web/assets/chunk-RKZBBQEN-MyIQbGgD.js +0 -1
- package/web/assets/chunk-T2UQINTJ-BJusEiGe.js +0 -1
- package/web/assets/chunk-UP6H54XL-BG-n7qDp.js +0 -1
- package/web/assets/chunk-UXSXWOXI-CW1_r5cS.js +0 -1
- package/web/assets/chunk-UY5QBCOK-BCpUlARQ.js +0 -1
- package/web/assets/chunk-VU6ZFW4Y-BeXVk45_.js +0 -2
- package/web/assets/chunk-ZXARS5L4-BI_qR2Nm.js +0 -1
- package/web/assets/classDiagram-KGZ6W3CR-D9zSIg0x.js +0 -1
- package/web/assets/classDiagram-v2-72OJOZXJ-D9zSIg0x.js +0 -1
- package/web/assets/dagre-ND4H6XIP-CpcV5kbl.js +0 -4
- package/web/assets/diagram-3NCE3AQN-6SMxBRpj.js +0 -43
- package/web/assets/diagram-GF46GFSD-BZEdNcRZ.js +0 -24
- package/web/assets/diagram-HNR7UZ2L-DxKW2a2Y.js +0 -3
- package/web/assets/diagram-QXG6HAR7-HfTHcXX_.js +0 -24
- package/web/assets/diagram-WEQXMOUZ-CyijUS8r.js +0 -10
- package/web/assets/erDiagram-L5TCEMPS-D0fvpWEX.js +0 -85
- package/web/assets/eventmodeling-FCH6USID-MREXMVOE-CgFBM7e-.js +0 -1
- package/web/assets/flowDiagram-H6V6AXG4-Bvr9bbhk.js +0 -162
- package/web/assets/ganttDiagram-JCBTUEKG-TzODrLzv.js +0 -292
- package/web/assets/gitGraph-WXDBUCRP-R675I2BI-DCJv7SII.js +0 -1
- package/web/assets/gitGraphDiagram-S2ZK5IYY-ONQSwJIY.js +0 -106
- package/web/assets/index-CX_fADmQ.css +0 -2
- package/web/assets/info-J43DQDTF-KCYPFFUO-BfNy-9Nd.js +0 -1
- package/web/assets/infoDiagram-3YFTVSEB-DIPVUIQ6.js +0 -2
- package/web/assets/katex-K3KEBU37-qRQBy-EZ.js +0 -261
- package/web/assets/packet-YPE3B663-LP52Z2RK-D4qkeG9k.js +0 -1
- package/web/assets/pie-LRSECV5Y-TCRJHUBD-B_yMKyQa.js +0 -1
- package/web/assets/pieDiagram-CU6KROY3-D3YC_xyg.js +0 -30
- package/web/assets/radar-GUYGQ44K-RDLRG3WG-DeD6yN_0.js +0 -1
- package/web/assets/requirementDiagram-JXO7QTGE-f8wczLQf.js +0 -84
- package/web/assets/sankeyDiagram-URQDO5SZ-BTxzG5j0.js +0 -40
- package/web/assets/sequenceDiagram-VS2MUI6T-DuamM-IR.js +0 -162
- package/web/assets/src-BNCXICdA.js +0 -1
- package/web/assets/stateDiagram-7D4R322I-Ch2pEUcw.js +0 -1
- package/web/assets/stateDiagram-v2-36443NZ5-7ANuoZLL.js +0 -1
- package/web/assets/timeline-definition-O6YCAMPW-07BR8R8G.js +0 -120
- package/web/assets/treeView-BLDUP644-QA4HXRO3-CDuSYnd4.js +0 -1
- package/web/assets/treemap-LRROVOQU-LLAWBHMP-imazucyJ.js +0 -1
- package/web/assets/vennDiagram-MWXL3ELB-BQX2ossk.js +0 -34
- package/web/assets/wardley-L42UT6IY-5TKZOOLJ-DqrT9tB8.js +0 -1
- package/web/assets/wardleyDiagram-CUQ6CDDI-CGIJBBiK.js +0 -78
- package/web/assets/xychartDiagram-N2JHSOCM-B3HNMuWp.js +0 -7
- /package/web/assets/{chunk-7W6UQGC5-pyKGssV3.js → chunk-LIEV3EAG-pyKGssV3.js} +0 -0
|
@@ -49,6 +49,9 @@ export declare function emitFreeCallFallback(graph: KnowledgeGraph, scopes: Scop
|
|
|
49
49
|
readonly startCol: number;
|
|
50
50
|
};
|
|
51
51
|
}, callerParsed: ParsedFile, scopes: ScopeResolutionIndexes, parsedFiles: readonly ParsedFile[]) => readonly SymbolDefinition[] | undefined;
|
|
52
|
+
/** Module-qualified free-call resolver (#2730) — see
|
|
53
|
+
* `ScopeResolver.resolveQualifiedFreeCall`. */
|
|
54
|
+
readonly resolveQualifiedFreeCall?: ScopeResolver['resolveQualifiedFreeCall'];
|
|
52
55
|
readonly conversionRankFn?: ConversionRankFn;
|
|
53
56
|
readonly conversionOnlyArgTypePrefixes?: readonly string[];
|
|
54
57
|
/** Optional per-language constraint hook threaded into
|
|
@@ -57,11 +60,23 @@ export declare function emitFreeCallFallback(graph: KnowledgeGraph, scopes: Scop
|
|
|
57
60
|
* fail at the call site. Three-valued; `'unknown'` keeps the
|
|
58
61
|
* candidate (monotonicity). */
|
|
59
62
|
readonly constraintCompatibility?: ScopeResolver['constraintCompatibility'];
|
|
63
|
+
/** Platform/language built-in names (e.g. `fetch`, `setTimeout`) that
|
|
64
|
+
* are never real repository declarations. Gates the finalize-bucket
|
|
65
|
+
* guard below (#2545) -- see `hasGenuineLexicalBinding`. */
|
|
66
|
+
readonly isBuiltInName?: (name: string) => boolean;
|
|
67
|
+
/** Instance-ownership gate (#2550): a free call may resolve to a
|
|
68
|
+
* `Method` only when the caller's enclosing class chain (self + MRO)
|
|
69
|
+
* contains the method's owner. See
|
|
70
|
+
* `ScopeResolver.freeCallsRequireInstanceOwnership`. */
|
|
71
|
+
readonly freeCallsRequireInstanceOwnership?: boolean;
|
|
60
72
|
readonly recordResolutionOutcome?: ResolutionOutcomeRecorder;
|
|
61
|
-
/**
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
*
|
|
73
|
+
/** Call sites owned by a later precise pass (for example callable-value-flow). */
|
|
74
|
+
readonly skipSites?: ReadonlySet<string>;
|
|
75
|
+
/** Resolved-callee-id capture sink (#2227 U2). Threaded in under `--pdg`
|
|
76
|
+
* OR for callable-flow's direct-target index (#2437, position-filtered);
|
|
77
|
+
* `undefined` ⇒ zero overhead, byte-identity (R4). Captured at the CALLS
|
|
78
|
+
* emit below BEFORE the collapsed `seen` dedup (KTD6) so same-target
|
|
79
|
+
* multi-line calls are still recorded per site. */
|
|
65
80
|
readonly calleeIdSink?: CalleeIdSink;
|
|
66
81
|
}): number;
|
|
67
82
|
/**
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
* generalization plan.
|
|
18
18
|
*/
|
|
19
19
|
import { resolveCallerGraphId, resolveDefGraphId } from '../graph-bridge/ids.js';
|
|
20
|
-
import { findAllCallableBindingsInScope, findCallableBindingInScope, findCallableBindingsAndAdlBlocker, resolveInheritanceBaseInScope, } from '../scope/walkers.js';
|
|
20
|
+
import { findAllCallableBindingCandidatesInScope, findAllCallableBindingsInScope, findCallableBindingInScope, findCallableBindingsAndAdlBlocker, findEnclosingClassDef, resolveInheritanceBaseInScope, } from '../scope/walkers.js';
|
|
21
21
|
import { isOverloadAmbiguousAfterNormalization, narrowOverloadCandidates, } from './overload-narrowing.js';
|
|
22
22
|
export function emitFreeCallFallback(graph, scopes, parsedFiles, nodeLookup, _referenceIndex, handledSites, model, workspaceIndex, options = {}) {
|
|
23
23
|
let emitted = 0;
|
|
@@ -32,6 +32,11 @@ export function emitFreeCallFallback(graph, scopes, parsedFiles, nodeLookup, _re
|
|
|
32
32
|
// defs.byId.values() at every constructor call. Same simple-name keying
|
|
33
33
|
// and class-like kind filter the previous per-site scan applied.
|
|
34
34
|
const globalClassesBySimpleName = buildGlobalClassIndex(scopes);
|
|
35
|
+
// Workspace file-path set for `resolveQualifiedFreeCall` (a module path maps
|
|
36
|
+
// to a file by language convention). Built lazily and once: languages without
|
|
37
|
+
// the hook never pay for it.
|
|
38
|
+
let allFilePathsMemo;
|
|
39
|
+
const allFilePaths = () => (allFilePathsMemo ??= new Set(parsedFiles.map((p) => p.filePath)));
|
|
35
40
|
// Per-pass memo of pickUniqueGlobalCallable's post-filter candidate list,
|
|
36
41
|
// keyed (simpleName, callerFilePath). Only created when no per-caller
|
|
37
42
|
// visibility filter applies (the list is then a pure function of name+file —
|
|
@@ -40,12 +45,50 @@ export function emitFreeCallFallback(graph, scopes, parsedFiles, nodeLookup, _re
|
|
|
40
45
|
const scopeDefsCache = options.isCallableVisibleFromCaller === undefined
|
|
41
46
|
? new Map()
|
|
42
47
|
: undefined;
|
|
48
|
+
const enclosingInstanceOwnerByScope = options.freeCallsRequireInstanceOwnership === true
|
|
49
|
+
? new Map()
|
|
50
|
+
: undefined;
|
|
51
|
+
const reachableInstanceOwnersByOwner = options.freeCallsRequireInstanceOwnership === true
|
|
52
|
+
? new Map()
|
|
53
|
+
: undefined;
|
|
54
|
+
const instanceOwnerKey = (ownerId) => {
|
|
55
|
+
const owner = scopes.defs.get(ownerId);
|
|
56
|
+
const qualifiedName = owner?.qualifiedName;
|
|
57
|
+
if (qualifiedName === undefined || qualifiedName === '')
|
|
58
|
+
return ownerId;
|
|
59
|
+
const namespacePrefix = owner.namespacePrefix ?? '';
|
|
60
|
+
return `${namespacePrefix.length}:${namespacePrefix}:${qualifiedName}`;
|
|
61
|
+
};
|
|
62
|
+
const isReachableInstanceOwner = (scopeId, ownerId) => {
|
|
63
|
+
let enclosing = enclosingInstanceOwnerByScope?.get(scopeId);
|
|
64
|
+
if (enclosing === undefined) {
|
|
65
|
+
enclosing = findEnclosingClassDef(scopeId, scopes) ?? null;
|
|
66
|
+
enclosingInstanceOwnerByScope?.set(scopeId, enclosing);
|
|
67
|
+
}
|
|
68
|
+
if (enclosing === null)
|
|
69
|
+
return false;
|
|
70
|
+
let owners = reachableInstanceOwnersByOwner?.get(enclosing.nodeId);
|
|
71
|
+
if (owners === undefined) {
|
|
72
|
+
const mutableOwners = new Set([instanceOwnerKey(enclosing.nodeId)]);
|
|
73
|
+
for (const inheritedOwnerId of scopes.methodDispatch.mroFor(enclosing.nodeId)) {
|
|
74
|
+
mutableOwners.add(instanceOwnerKey(inheritedOwnerId));
|
|
75
|
+
}
|
|
76
|
+
owners = mutableOwners;
|
|
77
|
+
reachableInstanceOwnersByOwner?.set(enclosing.nodeId, owners);
|
|
78
|
+
}
|
|
79
|
+
return owners.has(instanceOwnerKey(ownerId));
|
|
80
|
+
};
|
|
43
81
|
for (const parsed of parsedFiles) {
|
|
82
|
+
const bindingCandidatesByScope = options.freeCallsRequireInstanceOwnership === true
|
|
83
|
+
? new Map()
|
|
84
|
+
: undefined;
|
|
44
85
|
for (const site of parsed.referenceSites) {
|
|
45
86
|
if (site.kind !== 'call')
|
|
46
87
|
continue;
|
|
47
88
|
if (site.explicitReceiver !== undefined)
|
|
48
89
|
continue;
|
|
90
|
+
if (options.skipSites?.has(siteKey(parsed.filePath, site)) === true)
|
|
91
|
+
continue;
|
|
49
92
|
// Constructor form (`new User(...)`): resolve the class, then
|
|
50
93
|
// emit CALLS to its explicit Constructor def (when present) or
|
|
51
94
|
// to the Class node itself (implicit constructor). Legacy emits
|
|
@@ -80,6 +123,18 @@ export function emitFreeCallFallback(graph, scopes, parsedFiles, nodeLookup, _re
|
|
|
80
123
|
}
|
|
81
124
|
}
|
|
82
125
|
}
|
|
126
|
+
// Module-qualified free call (`mod::fn()`): the source named the module
|
|
127
|
+
// explicitly, so that path outranks every lexical tier below — otherwise
|
|
128
|
+
// the scope-chain walk binds the bare tail to a same-named definition in
|
|
129
|
+
// the caller's own file and emits a self-loop instead of the real
|
|
130
|
+
// cross-module edge (#2730). Only fires when the language populated
|
|
131
|
+
// `rawQualifiedName` AND provides the hook; `undefined` falls through to
|
|
132
|
+
// the unchanged chain, so this tier is strictly additive.
|
|
133
|
+
if (fnDef === undefined &&
|
|
134
|
+
options.resolveQualifiedFreeCall !== undefined &&
|
|
135
|
+
site.rawQualifiedName !== undefined) {
|
|
136
|
+
fnDef = options.resolveQualifiedFreeCall(site, parsed, scopes, workspaceIndex, allFilePaths());
|
|
137
|
+
}
|
|
83
138
|
// Implicit-this overload narrowing: an unqualified call inside
|
|
84
139
|
// a method body might be calling a sibling overload on the
|
|
85
140
|
// enclosing class. When the workspace has multiple methods of
|
|
@@ -106,9 +161,82 @@ export function emitFreeCallFallback(graph, scopes, parsedFiles, nodeLookup, _re
|
|
|
106
161
|
// (local shadows import). When a conversion-rank function is
|
|
107
162
|
// available AND the binding scope contains multiple overloads,
|
|
108
163
|
// refine with narrowOverloadCandidates (#1578).
|
|
109
|
-
|
|
110
|
-
if (
|
|
111
|
-
|
|
164
|
+
let bindingCandidates;
|
|
165
|
+
if (bindingCandidatesByScope !== undefined) {
|
|
166
|
+
let byName = bindingCandidatesByScope.get(site.inScope);
|
|
167
|
+
if (byName === undefined) {
|
|
168
|
+
byName = new Map();
|
|
169
|
+
bindingCandidatesByScope.set(site.inScope, byName);
|
|
170
|
+
}
|
|
171
|
+
bindingCandidates = byName.get(site.name);
|
|
172
|
+
if (bindingCandidates === undefined) {
|
|
173
|
+
bindingCandidates = findAllCallableBindingCandidatesInScope(site.inScope, site.name, scopes);
|
|
174
|
+
byName.set(site.name, bindingCandidates);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
let eligibleBindingCandidates;
|
|
178
|
+
if (bindingCandidates === undefined) {
|
|
179
|
+
fnDef = findCallableBindingInScope(site.inScope, site.name, scopes);
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
eligibleBindingCandidates = bindingCandidates.filter((candidate) => {
|
|
183
|
+
const def = candidate.def;
|
|
184
|
+
if (def.type !== 'Method' ||
|
|
185
|
+
def.ownerId === undefined ||
|
|
186
|
+
def.filePath !== parsed.filePath) {
|
|
187
|
+
return true;
|
|
188
|
+
}
|
|
189
|
+
const ownerReachable = isReachableInstanceOwner(site.inScope, def.ownerId);
|
|
190
|
+
const staticallyImported = candidate.bindings.some((binding) => binding.visibility === 'static-member-import');
|
|
191
|
+
return ownerReachable || staticallyImported;
|
|
192
|
+
});
|
|
193
|
+
fnDef = eligibleBindingCandidates[0]?.def;
|
|
194
|
+
if (fnDef === undefined && bindingCandidates.length > 0) {
|
|
195
|
+
recordSuppressedOutcome(options.recordResolutionOutcome, {
|
|
196
|
+
phase: 'free-call-fallback',
|
|
197
|
+
filePath: parsed.filePath,
|
|
198
|
+
name: site.name,
|
|
199
|
+
range: site.atRange,
|
|
200
|
+
reason: 'free-call-instance-ownership',
|
|
201
|
+
candidates: bindingCandidates.map((candidate) => candidate.def),
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
if (fnDef !== undefined &&
|
|
206
|
+
options.isBuiltInName?.(site.name) === true &&
|
|
207
|
+
fnDef.filePath === parsed.filePath &&
|
|
208
|
+
eligibleBindingCandidates?.some((candidate) => candidate.bindings.some((binding) => binding.visibility === 'static-member-import')) !== true &&
|
|
209
|
+
!hasGenuineLexicalBinding(site.inScope, site.name, scopes)) {
|
|
210
|
+
// A platform/language built-in (e.g. `fetch`, `setTimeout`)
|
|
211
|
+
// with no binding reachable via the TRUE lexical scope chain
|
|
212
|
+
// (Scope.bindings only) -- the match came solely from
|
|
213
|
+
// finalize's per-file "local + imports + wildcards" bucket,
|
|
214
|
+
// which flattens every declaration in the file onto the
|
|
215
|
+
// module scope regardless of true nesting depth
|
|
216
|
+
// (gitnexus-shared's `materializeBindings`). That flattening
|
|
217
|
+
// is correct for its purpose (cross-file import targets) but
|
|
218
|
+
// over-matches same-file built-in-shadowing declarations that
|
|
219
|
+
// were never really module-scope-visible -- e.g. a Cloudflare
|
|
220
|
+
// Worker's `export default { fetch(req) {} }` handler (#2545).
|
|
221
|
+
// Leave the call unresolved rather than emit a false edge.
|
|
222
|
+
//
|
|
223
|
+
// `fnDef.filePath === parsed.filePath` is the load-bearing
|
|
224
|
+
// guard against a real regression: `materializeBindings`'s
|
|
225
|
+
// flat bucket is per-file, so the leak this guard targets is
|
|
226
|
+
// ALWAYS same-file. A cross-file match at this point can only
|
|
227
|
+
// come from a genuine import/namespace/workspace-FQN channel
|
|
228
|
+
// (the separate, gated `pickUniqueGlobalCallable` global
|
|
229
|
+
// fallback runs later and isn't what populated `fnDef` here)
|
|
230
|
+
// -- e.g. `import { fetch } from './fetch-polyfill'` must
|
|
231
|
+
// keep resolving. Without this check, that import silently
|
|
232
|
+
// stopped resolving (verified via a scratch probe fixture).
|
|
233
|
+
fnDef = undefined;
|
|
234
|
+
}
|
|
235
|
+
if (fnDef !== undefined &&
|
|
236
|
+
(options.conversionRankFn !== undefined || bindingCandidates !== undefined)) {
|
|
237
|
+
const allCallables = eligibleBindingCandidates === undefined
|
|
238
|
+
? findAllCallableBindingsInScope(site.inScope, site.name, scopes)
|
|
239
|
+
: eligibleBindingCandidates.map((candidate) => candidate.def);
|
|
112
240
|
if (allCallables.length > 1) {
|
|
113
241
|
const narrowed = narrowOverloadCandidates(allCallables, site.arity, site.argumentTypes, {
|
|
114
242
|
argumentTypeClasses: site.argumentTypeClasses,
|
|
@@ -707,3 +835,31 @@ export function pickImplicitThisOverload(site, scopes, workspaceIndex, model, ho
|
|
|
707
835
|
return undefined;
|
|
708
836
|
return candidates[0];
|
|
709
837
|
}
|
|
838
|
+
/**
|
|
839
|
+
* True when `name` is bound somewhere along the TRUE lexical scope
|
|
840
|
+
* chain from `startScope` -- i.e. via `Scope.bindings` (the raw,
|
|
841
|
+
* nesting-aware per-scope map built during extraction), NOT via
|
|
842
|
+
* finalize's `indexes.bindings` module-scope bucket (which flattens
|
|
843
|
+
* every declaration in the file onto the module scope regardless of
|
|
844
|
+
* true nesting -- see `hasGenuineLexicalBinding`'s caller for why that
|
|
845
|
+
* distinction matters, #2545).
|
|
846
|
+
*/
|
|
847
|
+
function hasGenuineLexicalBinding(startScope, name, scopes) {
|
|
848
|
+
let currentId = startScope;
|
|
849
|
+
const visited = new Set();
|
|
850
|
+
while (currentId !== null) {
|
|
851
|
+
if (visited.has(currentId))
|
|
852
|
+
return false;
|
|
853
|
+
visited.add(currentId);
|
|
854
|
+
const scope = scopes.scopeTree.getScope(currentId);
|
|
855
|
+
if (scope === undefined)
|
|
856
|
+
return false;
|
|
857
|
+
// `Object` scopes (object/record literal bodies) are a hoist
|
|
858
|
+
// boundary only -- never a genuine lexical binding, not even to
|
|
859
|
+
// their own nested children (#2551, mirrors scope/walkers.ts).
|
|
860
|
+
if (scope.kind !== 'Object' && scope.bindings.get(name) !== undefined)
|
|
861
|
+
return true;
|
|
862
|
+
currentId = scope.parent;
|
|
863
|
+
}
|
|
864
|
+
return false;
|
|
865
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cross-file value references, resolved post-finalize (A2).
|
|
3
|
+
*
|
|
4
|
+
* `resolveReferenceSites` runs against the registries, and — as its own
|
|
5
|
+
* comment says — "imports live in finalized bindings the registries can't
|
|
6
|
+
* see". That is why free CALLS need `emitFreeCallFallback`. Reads had no
|
|
7
|
+
* equivalent, so a module-scope `const` read from another file resolved to
|
|
8
|
+
* nothing: `import { DEFAULT_FETCH_LIMIT } from './config.js'` followed by a
|
|
9
|
+
* bare use produced no edge, while a CALL through the very same import
|
|
10
|
+
* statement resolved fine. "Who imports this constant?" — the question behind
|
|
11
|
+
* every constants refactor and dead-code trim — was unanswerable across files.
|
|
12
|
+
*
|
|
13
|
+
* This is the read/write counterpart to that call fallback, and it reuses the
|
|
14
|
+
* walker built for finalized bindings rather than inventing a lookup.
|
|
15
|
+
*
|
|
16
|
+
* DELIBERATELY CROSS-FILE ONLY. Same-file reads already resolve through the
|
|
17
|
+
* registries, so re-resolving them here would add nothing — and would add
|
|
18
|
+
* something unwanted: `findValueBindingInScope` accepts `Const`/`Variable`,
|
|
19
|
+
* which includes BLOCK-LOCAL values. Emitting an edge to one of those keeps
|
|
20
|
+
* alive exactly the inert local symbols `pruneLocalSymbols` exists to drop,
|
|
21
|
+
* inflating every indexed repo. A def in another file cannot be a block-local
|
|
22
|
+
* of this one, so the file guard is what keeps this pass proportional.
|
|
23
|
+
*/
|
|
24
|
+
import type { ParsedFile } from '../../../../_shared/index.js';
|
|
25
|
+
import type { KnowledgeGraph } from '../../../graph/types.js';
|
|
26
|
+
import type { ScopeResolutionIndexes } from '../../model/scope-resolution-indexes.js';
|
|
27
|
+
import type { GraphNodeLookup } from '../graph-bridge/node-lookup.js';
|
|
28
|
+
export interface ImportedValueRefStats {
|
|
29
|
+
/** Cross-file value references resolved through finalized bindings. */
|
|
30
|
+
readonly emitted: number;
|
|
31
|
+
}
|
|
32
|
+
export declare function emitImportedValueReferences(graph: KnowledgeGraph, indexes: ScopeResolutionIndexes, parsedFiles: readonly ParsedFile[], nodeLookup: GraphNodeLookup,
|
|
33
|
+
/** Sites an earlier pass already owns — never re-resolved here. */
|
|
34
|
+
skipSites: ReadonlySet<string>): ImportedValueRefStats;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cross-file value references, resolved post-finalize (A2).
|
|
3
|
+
*
|
|
4
|
+
* `resolveReferenceSites` runs against the registries, and — as its own
|
|
5
|
+
* comment says — "imports live in finalized bindings the registries can't
|
|
6
|
+
* see". That is why free CALLS need `emitFreeCallFallback`. Reads had no
|
|
7
|
+
* equivalent, so a module-scope `const` read from another file resolved to
|
|
8
|
+
* nothing: `import { DEFAULT_FETCH_LIMIT } from './config.js'` followed by a
|
|
9
|
+
* bare use produced no edge, while a CALL through the very same import
|
|
10
|
+
* statement resolved fine. "Who imports this constant?" — the question behind
|
|
11
|
+
* every constants refactor and dead-code trim — was unanswerable across files.
|
|
12
|
+
*
|
|
13
|
+
* This is the read/write counterpart to that call fallback, and it reuses the
|
|
14
|
+
* walker built for finalized bindings rather than inventing a lookup.
|
|
15
|
+
*
|
|
16
|
+
* DELIBERATELY CROSS-FILE ONLY. Same-file reads already resolve through the
|
|
17
|
+
* registries, so re-resolving them here would add nothing — and would add
|
|
18
|
+
* something unwanted: `findValueBindingInScope` accepts `Const`/`Variable`,
|
|
19
|
+
* which includes BLOCK-LOCAL values. Emitting an edge to one of those keeps
|
|
20
|
+
* alive exactly the inert local symbols `pruneLocalSymbols` exists to drop,
|
|
21
|
+
* inflating every indexed repo. A def in another file cannot be a block-local
|
|
22
|
+
* of this one, so the file guard is what keeps this pass proportional.
|
|
23
|
+
*/
|
|
24
|
+
import { tryEmitEdge } from '../graph-bridge/edges.js';
|
|
25
|
+
import { findValueBindingInScope } from '../scope/walkers.js';
|
|
26
|
+
import { callableFlowSiteKey } from './callable-value-flow.js';
|
|
27
|
+
/**
|
|
28
|
+
* Confidence for a reference resolved through a finalized import binding.
|
|
29
|
+
* This is a PRECISE resolution — the import names the def — so it carries the
|
|
30
|
+
* ordinary emission confidence, not the reduced tier used for name inference.
|
|
31
|
+
*/
|
|
32
|
+
const IMPORTED_VALUE_CONFIDENCE = 0.9;
|
|
33
|
+
export function emitImportedValueReferences(graph, indexes, parsedFiles, nodeLookup,
|
|
34
|
+
/** Sites an earlier pass already owns — never re-resolved here. */
|
|
35
|
+
skipSites) {
|
|
36
|
+
let emitted = 0;
|
|
37
|
+
const seen = new Set();
|
|
38
|
+
for (const parsed of parsedFiles) {
|
|
39
|
+
for (const site of parsed.referenceSites) {
|
|
40
|
+
if (site.kind !== 'read' && site.kind !== 'write')
|
|
41
|
+
continue;
|
|
42
|
+
// A member read (`obj.field`) is the receiver-bound passes' business;
|
|
43
|
+
// this pass exists for the BARE identifier an import binds.
|
|
44
|
+
if (site.explicitReceiver !== undefined)
|
|
45
|
+
continue;
|
|
46
|
+
const siteKey = callableFlowSiteKey(parsed.filePath, site.atRange);
|
|
47
|
+
if (skipSites.has(siteKey))
|
|
48
|
+
continue;
|
|
49
|
+
const def = findValueBindingInScope(site.inScope, site.name, indexes);
|
|
50
|
+
if (def === undefined)
|
|
51
|
+
continue;
|
|
52
|
+
// See the header: same-file hits are already resolved, and accepting
|
|
53
|
+
// them here would start emitting edges to block-local values.
|
|
54
|
+
if (def.filePath === parsed.filePath)
|
|
55
|
+
continue;
|
|
56
|
+
if (tryEmitEdge(graph, indexes, nodeLookup, site, def, 'import-resolved', seen, IMPORTED_VALUE_CONFIDENCE)) {
|
|
57
|
+
emitted++;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return { emitted };
|
|
62
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `emitPropertyDispatchCalls` — value-ref registration edges + field-based
|
|
3
|
+
* dispatch for functions registered as object-literal property values
|
|
4
|
+
* (#2437).
|
|
5
|
+
*
|
|
6
|
+
* A provider-hook registration (`{ emitScopeCaptures: emitCppScopeCaptures }`)
|
|
7
|
+
* emits a USES reference edge — a registration is not an invocation (Kythe
|
|
8
|
+
* `ref` vs `ref/call`; Joern `METHOD_REF`). The invocation happens later
|
|
9
|
+
* through the property (`provider.emitScopeCaptures(...)`) — a dispatch the
|
|
10
|
+
* receiver-bound pass cannot resolve because object literals are not
|
|
11
|
+
* IMPLEMENTS-linked implementors. This pass closes that soundness gap the
|
|
12
|
+
* field-based way (Feldthaus et al., ICSE'13; CodeQL `impliedReceiverStep`):
|
|
13
|
+
* key registrations by property name and connect every member-call site
|
|
14
|
+
* `x.<key>(...)` to every function registered under `<key>`.
|
|
15
|
+
*
|
|
16
|
+
* This pass is the SINGLE owner of `value-ref` resolution. The shared
|
|
17
|
+
* registries only consult pre-finalize local bindings — imported names live
|
|
18
|
+
* in finalized bindings (the same reason free calls need
|
|
19
|
+
* `emitFreeCallFallback`) — so `resolveReferenceSites` skips `value-ref`
|
|
20
|
+
* sites and this pass resolves them post-finalize via
|
|
21
|
+
* `findCallableBindingInScope` (Function/Method/Constructor only — the
|
|
22
|
+
* callable gate that keeps `{ port: DEFAULT_PORT }` from emitting anything).
|
|
23
|
+
*
|
|
24
|
+
* Precision posture (mirrors `emitInterfaceDispatchFor`):
|
|
25
|
+
* - reason `'property-dispatch'` keeps synthesized CALLS auditable;
|
|
26
|
+
* - dispatch confidence 0.7 sits below the 0.85 resolved baseline;
|
|
27
|
+
* - a per-key fan-out cap drops promiscuous names (`handler`, `callback`)
|
|
28
|
+
* entirely rather than truncating silently — property-name collisions
|
|
29
|
+
* across unrelated objects are the documented field-based failure mode.
|
|
30
|
+
*
|
|
31
|
+
* Ordering: runs AFTER the precise emit passes. `graph.addRelationship` is
|
|
32
|
+
* first-write-wins on the position-keyed edge id, so a site that already
|
|
33
|
+
* resolved precisely to the same target keeps its precise edge.
|
|
34
|
+
*
|
|
35
|
+
* Language-neutral: consumes only `value-ref` sites (any language that
|
|
36
|
+
* emits the capture participates) and generic member-call sites.
|
|
37
|
+
*/
|
|
38
|
+
import type { ParsedFile } from '../../../../_shared/index.js';
|
|
39
|
+
import type { KnowledgeGraph } from '../../../graph/types.js';
|
|
40
|
+
import type { ScopeResolutionIndexes } from '../../model/scope-resolution-indexes.js';
|
|
41
|
+
import type { GraphNodeLookup } from '../graph-bridge/node-lookup.js';
|
|
42
|
+
import type { CalleeIdSink } from '../graph-bridge/callee-id-sink.js';
|
|
43
|
+
/**
|
|
44
|
+
* Keys registered by more than this many distinct functions are skipped —
|
|
45
|
+
* dispatch through such a name says nothing about which function runs.
|
|
46
|
+
* Calibrated on this repo's own provider tables: `emitScopeCaptures` has 16
|
|
47
|
+
* legitimate registrations (one per language provider), so the cap sits at
|
|
48
|
+
* 2× that — dropping the motivating key was the failure the first value (8)
|
|
49
|
+
* had. ponytail: flat cap; revisit with per-receiver narrowing if real
|
|
50
|
+
* repos show useful keys being dropped (§12 of the #2437 plan).
|
|
51
|
+
*
|
|
52
|
+
* Override via `GITNEXUS_MAX_PROPERTY_DISPATCH_FANOUT` env var for repos with
|
|
53
|
+
* legitimate high-fanout property keys (e.g. large Vue codebases where
|
|
54
|
+
* `validator` exceeds the default).
|
|
55
|
+
*/
|
|
56
|
+
export declare const MAX_PROPERTY_DISPATCH_FANOUT: number;
|
|
57
|
+
/** Below the 0.85 resolved baseline; same discount idea as interface-dispatch. */
|
|
58
|
+
export declare const PROPERTY_DISPATCH_CONFIDENCE = 0.7;
|
|
59
|
+
export declare function emitPropertyDispatchCalls(graph: KnowledgeGraph, scopes: ScopeResolutionIndexes, parsedFiles: readonly ParsedFile[], nodeLookup: GraphNodeLookup, calleeIdSink?: CalleeIdSink): {
|
|
60
|
+
usesEmitted: number;
|
|
61
|
+
callsEmitted: number;
|
|
62
|
+
skippedKeys: number;
|
|
63
|
+
skippedKeyNames: readonly string[];
|
|
64
|
+
};
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `emitPropertyDispatchCalls` — value-ref registration edges + field-based
|
|
3
|
+
* dispatch for functions registered as object-literal property values
|
|
4
|
+
* (#2437).
|
|
5
|
+
*
|
|
6
|
+
* A provider-hook registration (`{ emitScopeCaptures: emitCppScopeCaptures }`)
|
|
7
|
+
* emits a USES reference edge — a registration is not an invocation (Kythe
|
|
8
|
+
* `ref` vs `ref/call`; Joern `METHOD_REF`). The invocation happens later
|
|
9
|
+
* through the property (`provider.emitScopeCaptures(...)`) — a dispatch the
|
|
10
|
+
* receiver-bound pass cannot resolve because object literals are not
|
|
11
|
+
* IMPLEMENTS-linked implementors. This pass closes that soundness gap the
|
|
12
|
+
* field-based way (Feldthaus et al., ICSE'13; CodeQL `impliedReceiverStep`):
|
|
13
|
+
* key registrations by property name and connect every member-call site
|
|
14
|
+
* `x.<key>(...)` to every function registered under `<key>`.
|
|
15
|
+
*
|
|
16
|
+
* This pass is the SINGLE owner of `value-ref` resolution. The shared
|
|
17
|
+
* registries only consult pre-finalize local bindings — imported names live
|
|
18
|
+
* in finalized bindings (the same reason free calls need
|
|
19
|
+
* `emitFreeCallFallback`) — so `resolveReferenceSites` skips `value-ref`
|
|
20
|
+
* sites and this pass resolves them post-finalize via
|
|
21
|
+
* `findCallableBindingInScope` (Function/Method/Constructor only — the
|
|
22
|
+
* callable gate that keeps `{ port: DEFAULT_PORT }` from emitting anything).
|
|
23
|
+
*
|
|
24
|
+
* Precision posture (mirrors `emitInterfaceDispatchFor`):
|
|
25
|
+
* - reason `'property-dispatch'` keeps synthesized CALLS auditable;
|
|
26
|
+
* - dispatch confidence 0.7 sits below the 0.85 resolved baseline;
|
|
27
|
+
* - a per-key fan-out cap drops promiscuous names (`handler`, `callback`)
|
|
28
|
+
* entirely rather than truncating silently — property-name collisions
|
|
29
|
+
* across unrelated objects are the documented field-based failure mode.
|
|
30
|
+
*
|
|
31
|
+
* Ordering: runs AFTER the precise emit passes. `graph.addRelationship` is
|
|
32
|
+
* first-write-wins on the position-keyed edge id, so a site that already
|
|
33
|
+
* resolved precisely to the same target keeps its precise edge.
|
|
34
|
+
*
|
|
35
|
+
* Language-neutral: consumes only `value-ref` sites (any language that
|
|
36
|
+
* emits the capture participates) and generic member-call sites.
|
|
37
|
+
*/
|
|
38
|
+
import { tryEmitEdge } from '../graph-bridge/edges.js';
|
|
39
|
+
import { findCallableBindingInScope } from '../scope/walkers.js';
|
|
40
|
+
/**
|
|
41
|
+
* Keys registered by more than this many distinct functions are skipped —
|
|
42
|
+
* dispatch through such a name says nothing about which function runs.
|
|
43
|
+
* Calibrated on this repo's own provider tables: `emitScopeCaptures` has 16
|
|
44
|
+
* legitimate registrations (one per language provider), so the cap sits at
|
|
45
|
+
* 2× that — dropping the motivating key was the failure the first value (8)
|
|
46
|
+
* had. ponytail: flat cap; revisit with per-receiver narrowing if real
|
|
47
|
+
* repos show useful keys being dropped (§12 of the #2437 plan).
|
|
48
|
+
*
|
|
49
|
+
* Override via `GITNEXUS_MAX_PROPERTY_DISPATCH_FANOUT` env var for repos with
|
|
50
|
+
* legitimate high-fanout property keys (e.g. large Vue codebases where
|
|
51
|
+
* `validator` exceeds the default).
|
|
52
|
+
*/
|
|
53
|
+
export const MAX_PROPERTY_DISPATCH_FANOUT = (() => {
|
|
54
|
+
const env = Number(process.env.GITNEXUS_MAX_PROPERTY_DISPATCH_FANOUT);
|
|
55
|
+
return Number.isInteger(env) && env >= 1 ? env : 32;
|
|
56
|
+
})();
|
|
57
|
+
/** Below the 0.85 resolved baseline; same discount idea as interface-dispatch. */
|
|
58
|
+
export const PROPERTY_DISPATCH_CONFIDENCE = 0.7;
|
|
59
|
+
export function emitPropertyDispatchCalls(graph, scopes, parsedFiles, nodeLookup, calleeIdSink) {
|
|
60
|
+
const seen = new Set();
|
|
61
|
+
let usesEmitted = 0;
|
|
62
|
+
// Sweep 1 — resolve every value-ref site: emit the USES registration edge
|
|
63
|
+
// and index dispatchable registrations by property key.
|
|
64
|
+
const registrations = new Map();
|
|
65
|
+
for (const parsed of parsedFiles) {
|
|
66
|
+
for (const site of parsed.referenceSites) {
|
|
67
|
+
if (site.kind !== 'value-ref')
|
|
68
|
+
continue;
|
|
69
|
+
const def = findCallableBindingInScope(site.inScope, site.name, scopes);
|
|
70
|
+
if (def === undefined)
|
|
71
|
+
continue;
|
|
72
|
+
const ok = tryEmitEdge(graph, scopes, nodeLookup, site, def, 'scope-resolution: value-ref', seen);
|
|
73
|
+
if (ok)
|
|
74
|
+
usesEmitted++;
|
|
75
|
+
if (site.propertyKey === undefined)
|
|
76
|
+
continue;
|
|
77
|
+
let byDef = registrations.get(site.propertyKey);
|
|
78
|
+
if (byDef === undefined) {
|
|
79
|
+
byDef = new Map();
|
|
80
|
+
registrations.set(site.propertyKey, byDef);
|
|
81
|
+
}
|
|
82
|
+
byDef.set(def.nodeId, def);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
// Keep the dropped key NAMES (bounded) — an over-cap key means no CALLS
|
|
86
|
+
// are synthesized through it, and a count alone leaves the operator unable
|
|
87
|
+
// to tell WHICH hook table lost coverage (#2522 review).
|
|
88
|
+
let skippedKeys = 0;
|
|
89
|
+
const skippedKeyNames = [];
|
|
90
|
+
for (const [key, defs] of registrations) {
|
|
91
|
+
if (defs.size > MAX_PROPERTY_DISPATCH_FANOUT) {
|
|
92
|
+
registrations.delete(key);
|
|
93
|
+
skippedKeys++;
|
|
94
|
+
if (skippedKeyNames.length < 20)
|
|
95
|
+
skippedKeyNames.push(key);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
// Sweep 2 — synthesize CALLS from member-call sites through registered keys.
|
|
99
|
+
let callsEmitted = 0;
|
|
100
|
+
if (registrations.size > 0) {
|
|
101
|
+
for (const parsed of parsedFiles) {
|
|
102
|
+
const calleeCapture = calleeIdSink !== undefined ? { sink: calleeIdSink, filePath: parsed.filePath } : undefined;
|
|
103
|
+
for (const site of parsed.referenceSites) {
|
|
104
|
+
if (site.kind !== 'call' || site.callForm !== 'member')
|
|
105
|
+
continue;
|
|
106
|
+
const defs = registrations.get(site.name);
|
|
107
|
+
if (defs === undefined)
|
|
108
|
+
continue;
|
|
109
|
+
for (const def of defs.values()) {
|
|
110
|
+
const ok = tryEmitEdge(graph, scopes, nodeLookup, site, def, 'property-dispatch', seen, PROPERTY_DISPATCH_CONFIDENCE, false, calleeCapture);
|
|
111
|
+
if (ok)
|
|
112
|
+
callsEmitted++;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return { usesEmitted, callsEmitted, skippedKeys, skippedKeyNames };
|
|
118
|
+
}
|