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
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generic-instantiation compatibility for interface-dispatch fan-out (#2912).
|
|
3
|
+
*
|
|
4
|
+
* ── THE PROBLEM ──────────────────────────────────────────────────────────────
|
|
5
|
+
*
|
|
6
|
+
* Heritage edges are stored between DECLARATIONS, and a declaration answers for
|
|
7
|
+
* every instantiation of itself: `class UserValidator : IValidator<string>` and
|
|
8
|
+
* `class IntValidator : IValidator<int>` both land in `IValidator`'s subtype
|
|
9
|
+
* list, indistinguishable once the arguments are erased. A call through an
|
|
10
|
+
* `IValidator<string>` receiver then fans out to `IntValidator.Check(int)` — a
|
|
11
|
+
* target no runtime dispatch can produce, because the two instantiations are
|
|
12
|
+
* unrelated types.
|
|
13
|
+
*
|
|
14
|
+
* ── THE MODEL ────────────────────────────────────────────────────────────────
|
|
15
|
+
*
|
|
16
|
+
* The subtype closure is walked carrying a SUBSTITUTION, exactly as a type
|
|
17
|
+
* checker would. Each hop takes the arguments the supertype is currently known
|
|
18
|
+
* to be instantiated with and the arguments the subtype WROTE on that supertype,
|
|
19
|
+
* and unifies them positionally:
|
|
20
|
+
*
|
|
21
|
+
* receiver `IValidator<string>` → super args ['string']
|
|
22
|
+
* `UserValidator : IValidator<string>` ['string'] ≡ ['string'] → keep
|
|
23
|
+
* `IntValidator : IValidator<int>` ['int'] ✗ → prune
|
|
24
|
+
* `Wrapper<T> : IValidator<T>` ['T'] binds T = string → keep,
|
|
25
|
+
* and the next hop sees `Wrapper` instantiated with ['string'], so
|
|
26
|
+
* `IntWrapper : Wrapper<int>` prunes and `StrWrapper : Wrapper<string>`
|
|
27
|
+
* survives.
|
|
28
|
+
*
|
|
29
|
+
* ── WHY EVERY UNCERTAINTY FAILS OPEN ─────────────────────────────────────────
|
|
30
|
+
*
|
|
31
|
+
* Dispatch fan-out is an over-approximation by design: a missing edge is a
|
|
32
|
+
* silently wrong answer to "what can this call reach", while a surplus edge is
|
|
33
|
+
* the pre-existing, documented imprecision. So this only ever prunes on POSITIVE
|
|
34
|
+
* evidence that two instantiations differ, and returns `compatible` for every
|
|
35
|
+
* shape it cannot decide — unknown arguments on either side, an arity it cannot
|
|
36
|
+
* line up, or an argument that might be a type variable this pipeline did not
|
|
37
|
+
* capture. `SymbolDefinition.typeParameters` and `ReferenceSite.typeArguments`
|
|
38
|
+
* are both absent for languages whose captures do not populate them, and absence
|
|
39
|
+
* means "unknown", never "not generic"; a language that captures neither is
|
|
40
|
+
* therefore left with exactly the pre-#2912 fan-out.
|
|
41
|
+
*
|
|
42
|
+
* That is also why the arguments are RESOLVED rather than string-compared. Two
|
|
43
|
+
* spellings that differ are only certainly different types when both bind to
|
|
44
|
+
* something this pipeline can see — an imported `User` and a `Models.User` are
|
|
45
|
+
* one type, and a lone `T` may be a type variable the capture layer never
|
|
46
|
+
* recorded. The caller supplies the evidence (scope lookup + built-in names);
|
|
47
|
+
* anything it cannot ground keeps the target.
|
|
48
|
+
*/
|
|
49
|
+
import type { TypeParameter } from '../../../../_shared/index.js';
|
|
50
|
+
/**
|
|
51
|
+
* What a written type argument turned out to name, as far as the pipeline can
|
|
52
|
+
* tell from where it was written.
|
|
53
|
+
*
|
|
54
|
+
* A spelling is GROUNDED when either field answers: it bound to a declaration,
|
|
55
|
+
* or the language calls the name built in. Two grounded arguments that are not
|
|
56
|
+
* the same type are the only evidence that licenses a prune. An ungrounded
|
|
57
|
+
* spelling is `unknown` — it may be an external type, but it may equally be a
|
|
58
|
+
* TYPE VARIABLE in a language whose captures do not record type parameters, and
|
|
59
|
+
* pruning on that would delete `class Box<T> : IValidator<T>` from every
|
|
60
|
+
* instantiation's fan-out.
|
|
61
|
+
*/
|
|
62
|
+
export interface GroundedTypeArgument {
|
|
63
|
+
/** Identity of the declaration this spelling bound to, when it bound to one.
|
|
64
|
+
* Comparing identities rather than spellings is what makes `Models.User` and
|
|
65
|
+
* an imported `User` one type. */
|
|
66
|
+
readonly definitionId?: string;
|
|
67
|
+
/** The language declares this name built in (`string`, `int`). */
|
|
68
|
+
readonly builtIn: boolean;
|
|
69
|
+
/**
|
|
70
|
+
* The name is a TYPE PARAMETER of a declaration enclosing where it was
|
|
71
|
+
* written — the `T` of `void Run<T>(IValidator<T> v)` at the call site, or of
|
|
72
|
+
* an outer class around a nested one's heritage clause.
|
|
73
|
+
*
|
|
74
|
+
* It stands for a different type at every instantiation, so it cannot be
|
|
75
|
+
* compared with anything, and it must be recognised SEPARATELY from
|
|
76
|
+
* ungrounded: a bounded `T extends User` grounds to its bound's declaration,
|
|
77
|
+
* and comparing that bound against a concrete argument would prune every
|
|
78
|
+
* implementor of a call written through `IValidator<T>`.
|
|
79
|
+
*/
|
|
80
|
+
readonly typeVariable?: boolean;
|
|
81
|
+
}
|
|
82
|
+
/** Resolve a written type argument from the scope it was written in. */
|
|
83
|
+
type TypeArgumentResolver = (name: string) => GroundedTypeArgument;
|
|
84
|
+
/**
|
|
85
|
+
* Generic arguments written on a heritage clause, keyed by the GRAPH-ID pair of
|
|
86
|
+
* the edge they were written on — see {@link heritageTypeArgumentsKey}.
|
|
87
|
+
*
|
|
88
|
+
* Graph ids rather than def ids because that is the identity the heritage edge
|
|
89
|
+
* itself carries, and because same-file partial declarations share one node: a
|
|
90
|
+
* base listed on any part is the base of the whole type. Absent for every
|
|
91
|
+
* non-generic base, for every language whose captures do not record arguments,
|
|
92
|
+
* and for heritage that never passes through the inheritance pre-pass (Ruby's
|
|
93
|
+
* `include`, Go's structural implements) — all of which read as "unknown".
|
|
94
|
+
*/
|
|
95
|
+
export type HeritageTypeArguments = ReadonlyMap<string, readonly string[]>;
|
|
96
|
+
/**
|
|
97
|
+
* Records one heritage edge's instantiation, from whichever pass emitted that
|
|
98
|
+
* edge — the generic inheritance pre-pass, or a language's own
|
|
99
|
+
* `ScopeResolver.emitHeritageEdges` for heritage the pre-pass cannot express
|
|
100
|
+
* (Rust `impl Trait for S`, Dart's `implements` markers).
|
|
101
|
+
*
|
|
102
|
+
* The ids MUST be the same pair the emitted edge carries, because the dispatch
|
|
103
|
+
* walk looks the instantiation up by the edge it is crossing. Recording nothing
|
|
104
|
+
* is always safe: absence reads as "unknown" and keeps every target.
|
|
105
|
+
*/
|
|
106
|
+
export type HeritageTypeArgumentSink = (subtypeGraphId: string, supertypeGraphId: string, typeArguments: readonly string[]) => void;
|
|
107
|
+
/** Key for {@link HeritageTypeArguments}. NUL-separated because a graph id
|
|
108
|
+
* embeds a file path, and a path may legally contain every other separator a
|
|
109
|
+
* reader would reach for first — `:`, `|`, even a space. */
|
|
110
|
+
export declare function heritageTypeArgumentsKey(subtypeGraphId: string, supertypeGraphId: string): string;
|
|
111
|
+
/** One hop of the subtype closure, expressed as a substitution problem. */
|
|
112
|
+
export interface HeritageInstantiationStep {
|
|
113
|
+
/**
|
|
114
|
+
* Arguments the SUPERTYPE is currently known to be instantiated with, in
|
|
115
|
+
* declaration order — `['string']` for a receiver typed `IValidator<string>`.
|
|
116
|
+
* `undefined` when the instantiation is unknown, which keeps every subtype.
|
|
117
|
+
*/
|
|
118
|
+
readonly supertypeArguments: readonly string[] | undefined;
|
|
119
|
+
/**
|
|
120
|
+
* Arguments the SUBTYPE wrote on the supertype in its own heritage clause —
|
|
121
|
+
* `['string']` for `: IValidator<string>`, `['T']` for `: IValidator<T>`.
|
|
122
|
+
* `undefined` when the subtype named the supertype without arguments, or when
|
|
123
|
+
* the language's captures did not record them.
|
|
124
|
+
*/
|
|
125
|
+
readonly heritageArguments: readonly string[] | undefined;
|
|
126
|
+
/** The SUBTYPE's own declared type parameters, in declaration order. */
|
|
127
|
+
readonly subtypeParameters: readonly TypeParameter[] | undefined;
|
|
128
|
+
/**
|
|
129
|
+
* Does an EMPTY `subtypeParameters` mean "this declaration is not generic"?
|
|
130
|
+
*
|
|
131
|
+
* The distinction decides whether an unresolvable argument may be pruned on.
|
|
132
|
+
* `SymbolDefinition.typeParameters` is absent both for a plain `class C :
|
|
133
|
+
* IValidator<string>` and for every declaration in a language whose captures
|
|
134
|
+
* record no parameters at all — and the two demand opposite answers, because
|
|
135
|
+
* in the second case the `T` of `class Box<T> : IValidator<T>` is also absent
|
|
136
|
+
* and would be read as a concrete type named "T".
|
|
137
|
+
*
|
|
138
|
+
* True when the caller has evidence the parameters ARE recorded: this
|
|
139
|
+
* declaration itself lists some, or some declaration in the same language run
|
|
140
|
+
* does. False leaves an unresolvable argument unusable as evidence, which is
|
|
141
|
+
* the pre-#2912 fan-out for that language.
|
|
142
|
+
*/
|
|
143
|
+
readonly subtypeParametersComplete: boolean;
|
|
144
|
+
/** Ground a supertype argument — resolved from the RECEIVER's scope. */
|
|
145
|
+
readonly resolveSupertypeArgument: TypeArgumentResolver;
|
|
146
|
+
/** Ground a heritage argument — resolved from where the HERITAGE was written,
|
|
147
|
+
* a different scope from the call site and usually a different file. */
|
|
148
|
+
readonly resolveHeritageArgument: TypeArgumentResolver;
|
|
149
|
+
/** Optional language normalization applied to both sides before they are
|
|
150
|
+
* compared, for aliases that denote one type (C# `string` / `String`). */
|
|
151
|
+
readonly normalize?: (name: string) => string;
|
|
152
|
+
}
|
|
153
|
+
interface HeritageInstantiationResult {
|
|
154
|
+
/** False ONLY when the two instantiations are provably different types. */
|
|
155
|
+
readonly compatible: boolean;
|
|
156
|
+
/**
|
|
157
|
+
* What the SUBTYPE is instantiated with, for the next hop of the walk:
|
|
158
|
+
* its own type parameters resolved through this step's bindings. `undefined`
|
|
159
|
+
* whenever any parameter stayed unbound — a partially known list would have to
|
|
160
|
+
* be tracked per slot, and the whole-list unknown is the fail-open reading.
|
|
161
|
+
*/
|
|
162
|
+
readonly subtypeArguments: readonly string[] | undefined;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Unify one heritage hop and carry the substitution to the subtype.
|
|
166
|
+
*
|
|
167
|
+
* Pure and total: no lookups of its own, no throwing, and every branch it cannot
|
|
168
|
+
* decide answers {@link UNKNOWN} — compatible, with an unknown instantiation.
|
|
169
|
+
*/
|
|
170
|
+
export declare function stepHeritageInstantiation(step: HeritageInstantiationStep): HeritageInstantiationResult;
|
|
171
|
+
export {};
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generic-instantiation compatibility for interface-dispatch fan-out (#2912).
|
|
3
|
+
*
|
|
4
|
+
* ── THE PROBLEM ──────────────────────────────────────────────────────────────
|
|
5
|
+
*
|
|
6
|
+
* Heritage edges are stored between DECLARATIONS, and a declaration answers for
|
|
7
|
+
* every instantiation of itself: `class UserValidator : IValidator<string>` and
|
|
8
|
+
* `class IntValidator : IValidator<int>` both land in `IValidator`'s subtype
|
|
9
|
+
* list, indistinguishable once the arguments are erased. A call through an
|
|
10
|
+
* `IValidator<string>` receiver then fans out to `IntValidator.Check(int)` — a
|
|
11
|
+
* target no runtime dispatch can produce, because the two instantiations are
|
|
12
|
+
* unrelated types.
|
|
13
|
+
*
|
|
14
|
+
* ── THE MODEL ────────────────────────────────────────────────────────────────
|
|
15
|
+
*
|
|
16
|
+
* The subtype closure is walked carrying a SUBSTITUTION, exactly as a type
|
|
17
|
+
* checker would. Each hop takes the arguments the supertype is currently known
|
|
18
|
+
* to be instantiated with and the arguments the subtype WROTE on that supertype,
|
|
19
|
+
* and unifies them positionally:
|
|
20
|
+
*
|
|
21
|
+
* receiver `IValidator<string>` → super args ['string']
|
|
22
|
+
* `UserValidator : IValidator<string>` ['string'] ≡ ['string'] → keep
|
|
23
|
+
* `IntValidator : IValidator<int>` ['int'] ✗ → prune
|
|
24
|
+
* `Wrapper<T> : IValidator<T>` ['T'] binds T = string → keep,
|
|
25
|
+
* and the next hop sees `Wrapper` instantiated with ['string'], so
|
|
26
|
+
* `IntWrapper : Wrapper<int>` prunes and `StrWrapper : Wrapper<string>`
|
|
27
|
+
* survives.
|
|
28
|
+
*
|
|
29
|
+
* ── WHY EVERY UNCERTAINTY FAILS OPEN ─────────────────────────────────────────
|
|
30
|
+
*
|
|
31
|
+
* Dispatch fan-out is an over-approximation by design: a missing edge is a
|
|
32
|
+
* silently wrong answer to "what can this call reach", while a surplus edge is
|
|
33
|
+
* the pre-existing, documented imprecision. So this only ever prunes on POSITIVE
|
|
34
|
+
* evidence that two instantiations differ, and returns `compatible` for every
|
|
35
|
+
* shape it cannot decide — unknown arguments on either side, an arity it cannot
|
|
36
|
+
* line up, or an argument that might be a type variable this pipeline did not
|
|
37
|
+
* capture. `SymbolDefinition.typeParameters` and `ReferenceSite.typeArguments`
|
|
38
|
+
* are both absent for languages whose captures do not populate them, and absence
|
|
39
|
+
* means "unknown", never "not generic"; a language that captures neither is
|
|
40
|
+
* therefore left with exactly the pre-#2912 fan-out.
|
|
41
|
+
*
|
|
42
|
+
* That is also why the arguments are RESOLVED rather than string-compared. Two
|
|
43
|
+
* spellings that differ are only certainly different types when both bind to
|
|
44
|
+
* something this pipeline can see — an imported `User` and a `Models.User` are
|
|
45
|
+
* one type, and a lone `T` may be a type variable the capture layer never
|
|
46
|
+
* recorded. The caller supplies the evidence (scope lookup + built-in names);
|
|
47
|
+
* anything it cannot ground keeps the target.
|
|
48
|
+
*/
|
|
49
|
+
/** Key for {@link HeritageTypeArguments}. NUL-separated because a graph id
|
|
50
|
+
* embeds a file path, and a path may legally contain every other separator a
|
|
51
|
+
* reader would reach for first — `:`, `|`, even a space. */
|
|
52
|
+
export function heritageTypeArgumentsKey(subtypeGraphId, supertypeGraphId) {
|
|
53
|
+
return `${subtypeGraphId}\u0000${supertypeGraphId}`;
|
|
54
|
+
}
|
|
55
|
+
const UNKNOWN = { compatible: true, subtypeArguments: undefined };
|
|
56
|
+
/** Stand-in for a language that declares no `normalizeTypeArgument`. Module
|
|
57
|
+
* level so the 15 that do not are not charged a closure per hop. */
|
|
58
|
+
const identity = (name) => name;
|
|
59
|
+
/** A resolved declaration, or a name the language calls built in. Anything else
|
|
60
|
+
* might be a type variable nobody captured. */
|
|
61
|
+
function grounded(type) {
|
|
62
|
+
return type.definitionId !== undefined || type.builtIn;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Does this spelling name a SET of types rather than one — a Java wildcard
|
|
66
|
+
* (`?`, `? extends User`, `? super User`), a Kotlin star projection (`*`) or
|
|
67
|
+
* use-site variance (`out User`, `in User`)?
|
|
68
|
+
*
|
|
69
|
+
* Nullable decoration (`User?`, `string?`) matches the `?` test too. Keeping it
|
|
70
|
+
* in is deliberate: an argument that may or may not be null is still the same
|
|
71
|
+
* type for dispatch purposes, so the only cost is declining to prune a position
|
|
72
|
+
* that could have been pruned — the direction every other uncertainty here
|
|
73
|
+
* takes.
|
|
74
|
+
*/
|
|
75
|
+
function isWildcard(name) {
|
|
76
|
+
return WILDCARD_MARK.test(name) || USE_SITE_VARIANCE.test(name);
|
|
77
|
+
}
|
|
78
|
+
const WILDCARD_MARK = /[?*]/;
|
|
79
|
+
/** Leading whitespace is matched rather than trimmed off, so a spelling that
|
|
80
|
+
* carries none — the overwhelming majority — costs no allocation. */
|
|
81
|
+
const USE_SITE_VARIANCE = /^\s*(?:out|in)\s/;
|
|
82
|
+
/** Drop insignificant whitespace so two spellings of one instantiation compare
|
|
83
|
+
* equal: `Map<string, User>` and `Map<string,User>` are the same type, and
|
|
84
|
+
* which one a capture produced depends on how the source was written. */
|
|
85
|
+
function compact(name) {
|
|
86
|
+
return name.replace(INSIGNIFICANT_WHITESPACE, '');
|
|
87
|
+
}
|
|
88
|
+
const INSIGNIFICANT_WHITESPACE = /\s+/g;
|
|
89
|
+
/** Last segment of a qualified spelling: `java.lang.String` → `String`,
|
|
90
|
+
* `System::Text::Encoding` → `Encoding`. Used only when a name did not
|
|
91
|
+
* resolve, so the qualifier is exactly the part nothing can check. */
|
|
92
|
+
function simpleName(name) {
|
|
93
|
+
const cut = Math.max(name.lastIndexOf('.'), name.lastIndexOf(':'));
|
|
94
|
+
return cut === -1 ? name : name.slice(cut + 1);
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Unify one heritage hop and carry the substitution to the subtype.
|
|
98
|
+
*
|
|
99
|
+
* Pure and total: no lookups of its own, no throwing, and every branch it cannot
|
|
100
|
+
* decide answers {@link UNKNOWN} — compatible, with an unknown instantiation.
|
|
101
|
+
*/
|
|
102
|
+
export function stepHeritageInstantiation(step) {
|
|
103
|
+
const { supertypeArguments, heritageArguments, subtypeParameters } = step;
|
|
104
|
+
if (supertypeArguments === undefined || heritageArguments === undefined)
|
|
105
|
+
return UNKNOWN;
|
|
106
|
+
// An arity that does not line up means one of the two lists is not what this
|
|
107
|
+
// code thinks it is (a spelling the argument splitter read differently, a
|
|
108
|
+
// partial specialization, a variadic parameter pack). Nothing positive can be
|
|
109
|
+
// concluded from a mismatched pairing, so nothing is.
|
|
110
|
+
if (supertypeArguments.length !== heritageArguments.length)
|
|
111
|
+
return UNKNOWN;
|
|
112
|
+
const normalize = step.normalize ?? identity;
|
|
113
|
+
const bindings = new Map();
|
|
114
|
+
for (let i = 0; i < heritageArguments.length; i++) {
|
|
115
|
+
const written = heritageArguments[i];
|
|
116
|
+
const actual = supertypeArguments[i];
|
|
117
|
+
// A type VARIABLE of the subtype binds rather than compares: `Wrapper<T> :
|
|
118
|
+
// IValidator<T>` under an `IValidator<string>` receiver means T = string.
|
|
119
|
+
if (subtypeParameters?.some((p) => p.name === written) === true) {
|
|
120
|
+
const previous = bindings.get(written);
|
|
121
|
+
if (previous !== undefined) {
|
|
122
|
+
// The SAME variable in a second position must receive the same type:
|
|
123
|
+
// `class C<T> : Pair<T, T>` cannot be a `Pair<string, int>`, and
|
|
124
|
+
// overwriting the first binding would both accept that and hand the
|
|
125
|
+
// next hop a substitution the subtype never had. Unify instead — but
|
|
126
|
+
// prune only on the evidence the concrete path below demands, since two
|
|
127
|
+
// spellings that differ are not yet two types.
|
|
128
|
+
const first = step.resolveSupertypeArgument(previous);
|
|
129
|
+
const second = step.resolveSupertypeArgument(actual);
|
|
130
|
+
if (isWildcard(previous) ||
|
|
131
|
+
isWildcard(actual) ||
|
|
132
|
+
first.typeVariable === true ||
|
|
133
|
+
second.typeVariable === true) {
|
|
134
|
+
return UNKNOWN;
|
|
135
|
+
}
|
|
136
|
+
if (compact(normalize(previous)) === compact(normalize(actual)))
|
|
137
|
+
continue;
|
|
138
|
+
if (first.definitionId !== undefined && second.definitionId !== undefined) {
|
|
139
|
+
if (first.definitionId === second.definitionId)
|
|
140
|
+
continue;
|
|
141
|
+
return { compatible: false, subtypeArguments: undefined };
|
|
142
|
+
}
|
|
143
|
+
if (grounded(first) && grounded(second)) {
|
|
144
|
+
return { compatible: false, subtypeArguments: undefined };
|
|
145
|
+
}
|
|
146
|
+
// One side names something this pipeline cannot see. The position is
|
|
147
|
+
// undecided, and so is the binding it would have carried onward.
|
|
148
|
+
return UNKNOWN;
|
|
149
|
+
}
|
|
150
|
+
bindings.set(written, actual);
|
|
151
|
+
continue;
|
|
152
|
+
}
|
|
153
|
+
// A WILDCARD names a set of types, not one: `Repo<? extends User>` holds a
|
|
154
|
+
// `Repo<User>` perfectly well, and Kotlin's `Repo<*>` or `Repo<out User>`
|
|
155
|
+
// say the same thing in their own spelling. Comparing one against a
|
|
156
|
+
// concrete argument answers a question neither spelling asked, so the
|
|
157
|
+
// position is simply unknown. Nullable decoration (`User?`, `string?`) trips
|
|
158
|
+
// the same test, which costs a little precision in the safe direction.
|
|
159
|
+
if (isWildcard(written) || isWildcard(actual))
|
|
160
|
+
continue;
|
|
161
|
+
// Normalized once and reused by the simple-name compare below, so both
|
|
162
|
+
// comparisons are visibly made on the same normalization.
|
|
163
|
+
const writtenKey = compact(normalize(written));
|
|
164
|
+
const actualKey = compact(normalize(actual));
|
|
165
|
+
if (writtenKey === actualKey)
|
|
166
|
+
continue;
|
|
167
|
+
// Differing spellings, which is not yet a difference of TYPE. Resolve both
|
|
168
|
+
// where each was written and compare what they bound to: an imported `User`
|
|
169
|
+
// and a `Models.User` are one declaration, and a declaration is what the
|
|
170
|
+
// instantiation is actually about.
|
|
171
|
+
const heritageType = step.resolveHeritageArgument(written);
|
|
172
|
+
const supertypeType = step.resolveSupertypeArgument(actual);
|
|
173
|
+
// A type PARAMETER in scope where it was written stands for a different type
|
|
174
|
+
// at every instantiation, so it is not comparable with anything — and
|
|
175
|
+
// `subtypeParametersComplete` says nothing about it, because that flag is
|
|
176
|
+
// evidence about the SUBTYPE's parameter list while this `T` belongs to the
|
|
177
|
+
// enclosing generic method or class at the other end. Without this branch a
|
|
178
|
+
// call written `void Run<T>(IValidator<T> v) { v.Check(x); }` prunes every
|
|
179
|
+
// implementor: `T` is unbounded, so it grounds to nothing, and a bounded one
|
|
180
|
+
// grounds to its BOUND and compares unequal to the concrete argument.
|
|
181
|
+
if (heritageType.typeVariable === true || supertypeType.typeVariable === true)
|
|
182
|
+
return UNKNOWN;
|
|
183
|
+
if (heritageType.definitionId !== undefined && supertypeType.definitionId !== undefined) {
|
|
184
|
+
if (heritageType.definitionId === supertypeType.definitionId)
|
|
185
|
+
continue;
|
|
186
|
+
return { compatible: false, subtypeArguments: undefined };
|
|
187
|
+
}
|
|
188
|
+
// At least one side names something outside this workspace — `String`,
|
|
189
|
+
// `HttpClient`, a generated type. That is the COMMON case for a generic
|
|
190
|
+
// argument, so refusing to decide here would make the whole filter inert;
|
|
191
|
+
// what is compared instead is the simple name, which cannot tell
|
|
192
|
+
// `a.User` from `b.User` (kept, the over-approximating direction) but does
|
|
193
|
+
// tell `String` from `Integer`.
|
|
194
|
+
if (simpleName(writtenKey) === simpleName(actualKey))
|
|
195
|
+
continue;
|
|
196
|
+
// The one thing a spelling difference must not be read as: a TYPE VARIABLE
|
|
197
|
+
// this pipeline never captured. Where the subtype's parameter list is not
|
|
198
|
+
// known to be complete, only a pair of grounded names — resolved or built
|
|
199
|
+
// in — is safe to prune on. A variable that IS captured never reaches here:
|
|
200
|
+
// the subtype's own bind above, and any other declaration's through the
|
|
201
|
+
// `typeVariable` test, which is why that test has to be reliable — see the
|
|
202
|
+
// type-parameter captures on generic METHODS.
|
|
203
|
+
if (!step.subtypeParametersComplete && !(grounded(heritageType) && grounded(supertypeType))) {
|
|
204
|
+
return UNKNOWN;
|
|
205
|
+
}
|
|
206
|
+
return { compatible: false, subtypeArguments: undefined };
|
|
207
|
+
}
|
|
208
|
+
if (subtypeParameters === undefined || subtypeParameters.length === 0)
|
|
209
|
+
return UNKNOWN;
|
|
210
|
+
const subtypeArguments = [];
|
|
211
|
+
for (const parameter of subtypeParameters) {
|
|
212
|
+
const bound = bindings.get(parameter.name);
|
|
213
|
+
if (bound === undefined)
|
|
214
|
+
return UNKNOWN;
|
|
215
|
+
subtypeArguments.push(bound);
|
|
216
|
+
}
|
|
217
|
+
return { compatible: true, subtypeArguments };
|
|
218
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The shape of `WorkspaceResolutionIndex` — the scope-tied lookup tables built
|
|
3
|
+
* once per resolution run.
|
|
4
|
+
*
|
|
5
|
+
* A leaf module by design: it imports nothing from this package, so
|
|
6
|
+
* `scope/walkers.ts` can type its `index` parameters against the contract
|
|
7
|
+
* without importing the builder module that itself calls into `walkers.ts`.
|
|
8
|
+
* `./workspace-index.ts` re-exports this type, so consumers may keep importing
|
|
9
|
+
* `WorkspaceResolutionIndex` alongside `buildWorkspaceResolutionIndex` from
|
|
10
|
+
* there.
|
|
11
|
+
*
|
|
12
|
+
* See `./workspace-index.ts` for what belongs in this index versus what belongs
|
|
13
|
+
* on `SemanticModel`, and for the builder itself.
|
|
14
|
+
*/
|
|
15
|
+
import type { Scope, ScopeId, SymbolDefinition } from '../../../_shared/index.js';
|
|
16
|
+
export interface WorkspaceResolutionIndex {
|
|
17
|
+
/** Class def `nodeId` → that class's `Scope`. */
|
|
18
|
+
readonly classScopeByDefId: ReadonlyMap<string, Scope>;
|
|
19
|
+
/** Inverse of `classScopeByDefId`: class `Scope.id` → class def `nodeId`.
|
|
20
|
+
* Built in the same pass; used by the implicit-`this` overload picker
|
|
21
|
+
* in `free-call-fallback.ts` to skip an O(C) reverse scan. */
|
|
22
|
+
readonly classScopeIdToDefId: ReadonlyMap<ScopeId, string>;
|
|
23
|
+
/** Module scope by file path. */
|
|
24
|
+
readonly moduleScopeByFile: ReadonlyMap<string, Scope>;
|
|
25
|
+
/** Precomputed `simpleName → first module-local callable def` (the
|
|
26
|
+
* workspace-wide fallback of `findExportedDefByName`). Materialized here
|
|
27
|
+
* ONCE from the resident module scopes so that fallback is an O(1) lookup
|
|
28
|
+
* instead of an O(files) scan over every module scope's bindings on each
|
|
29
|
+
* unresolved free call — which, under the disk-backed scopeTree, would
|
|
30
|
+
* otherwise fault every module scope in from disk per call (the throughput
|
|
31
|
+
* killer). "First module-local callable in `moduleScopeByFile` order" is the
|
|
32
|
+
* exact semantics the old scan returned, so it is byte-identical. */
|
|
33
|
+
readonly exportedCallableByName: ReadonlyMap<string, SymbolDefinition>;
|
|
34
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The shape of `WorkspaceResolutionIndex` — the scope-tied lookup tables built
|
|
3
|
+
* once per resolution run.
|
|
4
|
+
*
|
|
5
|
+
* A leaf module by design: it imports nothing from this package, so
|
|
6
|
+
* `scope/walkers.ts` can type its `index` parameters against the contract
|
|
7
|
+
* without importing the builder module that itself calls into `walkers.ts`.
|
|
8
|
+
* `./workspace-index.ts` re-exports this type, so consumers may keep importing
|
|
9
|
+
* `WorkspaceResolutionIndex` alongside `buildWorkspaceResolutionIndex` from
|
|
10
|
+
* there.
|
|
11
|
+
*
|
|
12
|
+
* See `./workspace-index.ts` for what belongs in this index versus what belongs
|
|
13
|
+
* on `SemanticModel`, and for the builder itself.
|
|
14
|
+
*/
|
|
15
|
+
export {};
|
|
@@ -38,26 +38,13 @@
|
|
|
38
38
|
*
|
|
39
39
|
* Build cost is O(totalScopes). Read-only after construction.
|
|
40
40
|
*/
|
|
41
|
-
import type { ParsedFile,
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
readonly classScopeIdToDefId: ReadonlyMap<ScopeId, string>;
|
|
49
|
-
/** Module scope by file path. */
|
|
50
|
-
readonly moduleScopeByFile: ReadonlyMap<string, Scope>;
|
|
51
|
-
/** Precomputed `simpleName → first module-local callable def` (the
|
|
52
|
-
* workspace-wide fallback of `findExportedDefByName`). Materialized here
|
|
53
|
-
* ONCE from the resident module scopes so that fallback is an O(1) lookup
|
|
54
|
-
* instead of an O(files) scan over every module scope's bindings on each
|
|
55
|
-
* unresolved free call — which, under the disk-backed scopeTree, would
|
|
56
|
-
* otherwise fault every module scope in from disk per call (the throughput
|
|
57
|
-
* killer). "First module-local callable in `moduleScopeByFile` order" is the
|
|
58
|
-
* exact semantics the old scan returned, so it is byte-identical. */
|
|
59
|
-
readonly exportedCallableByName: ReadonlyMap<string, SymbolDefinition>;
|
|
60
|
-
}
|
|
41
|
+
import type { ParsedFile, ScopeTree } from '../../../_shared/index.js';
|
|
42
|
+
import type { WorkspaceResolutionIndex } from './workspace-index-types.js';
|
|
43
|
+
/** The index *shape* lives in the leaf `./workspace-index-types.js` so
|
|
44
|
+
* `scope/walkers.ts` — which this builder calls into — can type against it
|
|
45
|
+
* without importing this module back. Re-exported here so consumers keep
|
|
46
|
+
* importing the type and the builder from one place. */
|
|
47
|
+
export type { WorkspaceResolutionIndex } from './workspace-index-types.js';
|
|
61
48
|
/**
|
|
62
49
|
* Build the workspace scope-lookup index. When `scopeTree` is supplied (the live
|
|
63
50
|
* pipeline), the `Scope`-valued maps are id-backed views that delegate to it —
|
|
@@ -35,10 +35,14 @@ export const TS_JS_TAINT_MODEL = {
|
|
|
35
35
|
},
|
|
36
36
|
],
|
|
37
37
|
sinks: [
|
|
38
|
-
// Command execution —
|
|
38
|
+
// Command execution — shell strings are arg 0; argv-form APIs also treat
|
|
39
|
+
// the argv array at arg 1 as command/option injection surface.
|
|
39
40
|
{ name: 'exec', kind: 'command-injection', args: [0], module: 'child_process' },
|
|
40
41
|
{ name: 'execSync', kind: 'command-injection', args: [0], module: 'child_process' },
|
|
41
|
-
{ name: 'spawn', kind: 'command-injection', args: [0], module: 'child_process' },
|
|
42
|
+
{ name: 'spawn', kind: 'command-injection', args: [0, 1], module: 'child_process' },
|
|
43
|
+
{ name: 'spawnSync', kind: 'command-injection', args: [0, 1], module: 'child_process' },
|
|
44
|
+
{ name: 'execFile', kind: 'command-injection', args: [0, 1], module: 'child_process' },
|
|
45
|
+
{ name: 'execFileSync', kind: 'command-injection', args: [0, 1], module: 'child_process' },
|
|
42
46
|
// Code evaluation. `eval` takes code at 0; `new Function(...)` treats
|
|
43
47
|
// EVERY argument as source text (params + body), so `args` is omitted
|
|
44
48
|
// (= all positions) rather than pinned to 0.
|
|
@@ -53,9 +57,37 @@ export const TS_JS_TAINT_MODEL = {
|
|
|
53
57
|
// (mysql2/pg/knex handles go by many names; receiver-conventional).
|
|
54
58
|
{ name: 'query', kind: 'sql-injection', args: [0], anyReceiver: true },
|
|
55
59
|
{ name: 'execute', kind: 'sql-injection', args: [0], anyReceiver: true },
|
|
60
|
+
// Modern DB libraries expose shorter method names with high collision
|
|
61
|
+
// rates (`map.get`, `task.run`, ...), so keep these receiver-conventional.
|
|
62
|
+
{
|
|
63
|
+
name: 'run',
|
|
64
|
+
kind: 'sql-injection',
|
|
65
|
+
args: [0],
|
|
66
|
+
receivers: ['db', 'database', 'conn', 'client', 'pool', 'stmt', 'statement', 'prepared'],
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
name: 'all',
|
|
70
|
+
kind: 'sql-injection',
|
|
71
|
+
args: [0],
|
|
72
|
+
receivers: ['db', 'database', 'conn', 'client', 'pool', 'stmt', 'statement', 'prepared'],
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
name: 'get',
|
|
76
|
+
kind: 'sql-injection',
|
|
77
|
+
args: [0],
|
|
78
|
+
receivers: ['db', 'database', 'conn', 'client', 'pool', 'stmt', 'statement', 'prepared'],
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
name: 'values',
|
|
82
|
+
kind: 'sql-injection',
|
|
83
|
+
args: [0],
|
|
84
|
+
receivers: ['db', 'database', 'conn', 'client', 'pool'],
|
|
85
|
+
},
|
|
86
|
+
{ name: 'raw', kind: 'sql-injection', args: [0], receivers: ['db', 'knex', 'sequelize'] },
|
|
56
87
|
// Reflected XSS — Express response writes, conventional receiver `res`.
|
|
57
88
|
{ name: 'send', kind: 'xss', args: [0], receivers: ['res'] },
|
|
58
89
|
{ name: 'write', kind: 'xss', args: [0], receivers: ['res'] },
|
|
90
|
+
{ name: 'render', kind: 'xss', args: [0, 1], receivers: ['res'] },
|
|
59
91
|
],
|
|
60
92
|
sanitizers: [
|
|
61
93
|
// URL-encoding: neutralizes markup injection AND path separators
|