gitnexus 1.6.10-rc.99 → 1.6.10
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 +177 -18
- package/dist/_shared/graph/types.d.ts +21 -2
- package/dist/_shared/graph/types.d.ts.map +1 -1
- package/dist/_shared/index.d.ts +3 -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 +16 -0
- package/dist/_shared/integrations/resilient-fetch.d.ts.map +1 -1
- package/dist/_shared/integrations/resilient-fetch.js +19 -7
- 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/evidence-weights.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/finalize-algorithm.d.ts +5 -0
- package/dist/_shared/scope-resolution/finalize-algorithm.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/finalize-algorithm.js +315 -36
- package/dist/_shared/scope-resolution/finalize-algorithm.js.map +1 -1
- package/dist/_shared/scope-resolution/reference-site.d.ts +115 -0
- package/dist/_shared/scope-resolution/reference-site.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/registries/field-registry.js.map +1 -1
- package/dist/_shared/scope-resolution/registries/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 +278 -3
- package/dist/_shared/scope-resolution/types.d.ts.map +1 -1
- package/dist/cli/ai-context.d.ts +3 -2
- package/dist/cli/ai-context.js +71 -16
- 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 +21 -113
- package/dist/cli/analyze.js +172 -29
- package/dist/cli/cli-message.d.ts +1 -1
- package/dist/cli/detect-changes-format.js +19 -2
- package/dist/cli/doctor.d.ts +12 -0
- package/dist/cli/doctor.js +32 -5
- package/dist/cli/editor-targets.js +6 -0
- package/dist/cli/eval-server.js +2 -1
- 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 +229 -21
- package/dist/cli/help-i18n.js +1 -2
- package/dist/cli/i18n/en.d.ts +11 -9
- package/dist/cli/i18n/en.js +13 -9
- package/dist/cli/i18n/resources.d.ts +15 -11
- package/dist/cli/i18n/zh-CN.d.ts +4 -2
- package/dist/cli/i18n/zh-CN.js +11 -9
- package/dist/cli/index.js +8 -4
- package/dist/cli/resolve-invocation.d.ts +7 -3
- package/dist/cli/resolve-invocation.js +7 -3
- package/dist/cli/setup.js +4 -3
- package/dist/cli/skill-gen.d.ts +1 -6
- package/dist/cli/tool.d.ts +1 -0
- package/dist/cli/tool.js +74 -17
- package/dist/cli/wiki.js +53 -10
- package/dist/config/ignore-service.d.ts +2 -0
- package/dist/config/ignore-service.js +54 -13
- package/dist/core/analyzer-identity.d.ts +80 -0
- package/dist/core/analyzer-identity.js +364 -26
- package/dist/core/augmentation/engine.js +86 -71
- 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/embedding-pipeline.d.ts +8 -0
- package/dist/core/embeddings/embedding-pipeline.js +253 -14
- package/dist/core/embeddings/http-client.d.ts +5 -0
- package/dist/core/embeddings/http-client.js +142 -27
- 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.d.ts +204 -1
- package/dist/core/group/bridge-db.js +401 -28
- package/dist/core/group/completeness.d.ts +130 -0
- package/dist/core/group/completeness.js +83 -0
- package/dist/core/group/config-parser.js +0 -5
- package/dist/core/group/cross-impact.d.ts +46 -1
- package/dist/core/group/cross-impact.js +220 -19
- package/dist/core/group/cross-trace.d.ts +32 -11
- package/dist/core/group/cross-trace.js +114 -20
- package/dist/core/group/extractors/http-patterns/java.js +278 -22
- package/dist/core/group/extractors/http-patterns/node.js +332 -216
- 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/extractors/python-workspace-extractor.js +5 -2
- package/dist/core/group/group-lock.d.ts +31 -0
- package/dist/core/group/group-lock.js +166 -0
- package/dist/core/group/service.js +297 -16
- package/dist/core/group/storage.d.ts +3 -0
- package/dist/core/group/storage.js +7 -39
- package/dist/core/group/sync.d.ts +49 -3
- package/dist/core/group/sync.js +0 -0
- package/dist/core/group/types.d.ts +183 -8
- package/dist/core/group/types.js +28 -1
- 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 +77 -2
- package/dist/core/index-freshness.js +109 -2
- 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/cluster-enricher.js +8 -4
- package/dist/core/ingestion/community-processor.d.ts +21 -3
- package/dist/core/ingestion/community-processor.js +81 -82
- package/dist/core/ingestion/di-extractors/index.d.ts +9 -33
- package/dist/core/ingestion/di-extractors/spring.d.ts +1 -1
- package/dist/core/ingestion/di-extractors/spring.js +8 -1
- 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/filesystem-walker.js +30 -14
- package/dist/core/ingestion/finalize-orchestrator.js +1 -0
- package/dist/core/ingestion/frameworks/spring/analysis-features.d.ts +6 -0
- package/dist/core/ingestion/frameworks/spring/analysis-features.js +35 -1
- 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-catalog.js +1 -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/di-metadata.d.ts +3 -0
- package/dist/core/ingestion/frameworks/spring/di-metadata.js +162 -13
- 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 +429 -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 +65 -19
- 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 +29 -1
- package/dist/core/ingestion/language-config.js +110 -35
- package/dist/core/ingestion/language-provider.d.ts +209 -7
- package/dist/core/ingestion/language-provider.js +37 -0
- package/dist/core/ingestion/languages/c/captures.js +7 -0
- package/dist/core/ingestion/languages/c/import-target.js +12 -16
- package/dist/core/ingestion/languages/c/scope-resolver.js +20 -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/scope-resolver.js +27 -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 +14 -2
- 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 +48 -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 +19 -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 +598 -16
- 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 +6 -1
- package/dist/core/ingestion/languages/go/captures.js +108 -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 +4 -0
- package/dist/core/ingestion/languages/java/analysis-features.js +12 -0
- package/dist/core/ingestion/languages/java/capture-side-channel.d.ts +12 -0
- package/dist/core/ingestion/languages/java/capture-side-channel.js +48 -0
- package/dist/core/ingestion/languages/java/captures.js +77 -32
- 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/query.js +15 -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 +10 -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-conditionals.d.ts +11 -0
- package/dist/core/ingestion/languages/java/spring-conditionals.js +48 -0
- package/dist/core/ingestion/languages/java/spring-di.d.ts +4 -1
- package/dist/core/ingestion/languages/java/spring-di.js +41 -9
- 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 +94 -3
- package/dist/core/ingestion/languages/javascript/captures.d.ts +6 -1
- package/dist/core/ingestion/languages/javascript/captures.js +262 -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 +211 -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-siblings.js +77 -9
- package/dist/core/ingestion/languages/kotlin/capture-side-channel.d.ts +15 -0
- package/dist/core/ingestion/languages/kotlin/capture-side-channel.js +48 -0
- package/dist/core/ingestion/languages/kotlin/captures.js +43 -1
- 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/query.js +28 -2
- package/dist/core/ingestion/languages/kotlin/scope-resolver.js +23 -2
- 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-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 +2 -0
- package/dist/core/ingestion/languages/kotlin/spring-di.js +60 -11
- 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/php/captures.d.ts +5 -0
- package/dist/core/ingestion/languages/php/captures.js +319 -51
- package/dist/core/ingestion/languages/php/import-target.d.ts +3 -4
- package/dist/core/ingestion/languages/php/import-target.js +192 -62
- package/dist/core/ingestion/languages/php/query.js +31 -0
- 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.js +29 -0
- 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 -7
- package/dist/core/ingestion/languages/python/query.js +9 -0
- package/dist/core/ingestion/languages/python/receiver-binding.d.ts +8 -6
- package/dist/core/ingestion/languages/python/receiver-binding.js +108 -12
- package/dist/core/ingestion/languages/python/scope-resolver.js +27 -4
- package/dist/core/ingestion/languages/python/simple-hooks.js +2 -8
- package/dist/core/ingestion/languages/python.js +13 -0
- package/dist/core/ingestion/languages/ruby/captures.js +158 -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 +39 -1
- 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 +39 -6
- 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 +87 -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 +267 -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/convex-endpoint-metadata.d.ts +7 -0
- package/dist/core/ingestion/languages/typescript/convex-endpoint-metadata.js +92 -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/query.d.ts +1 -0
- package/dist/core/ingestion/languages/typescript/query.js +303 -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 +292 -0
- package/dist/core/ingestion/languages/typescript.js +93 -2
- 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/pipeline-phases/di.d.ts +1 -1
- package/dist/core/ingestion/pipeline-phases/di.js +136 -21
- package/dist/core/ingestion/pipeline-phases/index.d.ts +2 -0
- package/dist/core/ingestion/pipeline-phases/index.js +2 -0
- package/dist/core/ingestion/pipeline-phases/parse-impl.d.ts +15 -0
- package/dist/core/ingestion/pipeline-phases/parse-impl.js +154 -4
- package/dist/core/ingestion/pipeline-phases/parse.js +5 -0
- package/dist/core/ingestion/pipeline-phases/processes.d.ts +3 -2
- package/dist/core/ingestion/pipeline-phases/processes.js +91 -6
- package/dist/core/ingestion/pipeline-phases/routes.js +116 -25
- 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/types.d.ts +7 -0
- package/dist/core/ingestion/pipeline.d.ts +26 -2
- package/dist/core/ingestion/pipeline.js +60 -11
- 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 +66 -6
- package/dist/core/ingestion/route-extractors/constant-resolver.d.ts +8 -2
- package/dist/core/ingestion/route-extractors/constant-resolver.js +11 -7
- package/dist/core/ingestion/route-extractors/data-route-table.d.ts +40 -0
- package/dist/core/ingestion/route-extractors/data-route-table.js +876 -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/java-const-resolver.d.ts +114 -0
- package/dist/core/ingestion/route-extractors/java-const-resolver.js +569 -0
- package/dist/core/ingestion/route-extractors/js-const-resolver.d.ts +192 -0
- package/dist/core/ingestion/route-extractors/js-const-resolver.js +1033 -0
- package/dist/core/ingestion/route-extractors/nest.d.ts +53 -0
- package/dist/core/ingestion/route-extractors/nest.js +523 -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 +214 -29
- 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 +309 -15
- package/dist/core/ingestion/scope-resolution/contract/scope-resolver.d.ts +311 -21
- package/dist/core/ingestion/scope-resolution/contract/scope-resolver.js +16 -5
- package/dist/core/ingestion/scope-resolution/graph-bridge/edges.d.ts +12 -0
- package/dist/core/ingestion/scope-resolution/graph-bridge/edges.js +47 -0
- package/dist/core/ingestion/scope-resolution/graph-bridge/ids.d.ts +20 -15
- package/dist/core/ingestion/scope-resolution/graph-bridge/ids.js +280 -42
- 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 +58 -1
- package/dist/core/ingestion/scope-resolution/graph-bridge/node-lookup.js +137 -34
- 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 +39 -1
- package/dist/core/ingestion/scope-resolution/passes/callable-value-flow.d.ts +18 -1
- package/dist/core/ingestion/scope-resolution/passes/callable-value-flow.js +113 -18
- 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 +3 -0
- package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.js +101 -41
- 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 +5 -1
- package/dist/core/ingestion/scope-resolution/passes/property-dispatch.js +8 -1
- package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.d.ts +105 -5
- 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 +29 -0
- package/dist/core/ingestion/scope-resolution/pipeline/phase.js +57 -0
- package/dist/core/ingestion/scope-resolution/pipeline/run.d.ts +55 -1
- package/dist/core/ingestion/scope-resolution/pipeline/run.js +241 -19
- 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 +905 -22
- 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/tree-sitter-queries.d.ts +11 -11
- package/dist/core/ingestion/tree-sitter-queries.js +678 -4
- package/dist/core/ingestion/type-env.js +11 -7
- 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 +297 -15
- package/dist/core/ingestion/utils/ast-helpers.js +578 -46
- 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 +59 -0
- package/dist/core/ingestion/utils/callable-flow-captures.js +51 -1
- 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 +80 -0
- package/dist/core/ingestion/workers/callable-id.js +125 -0
- package/dist/core/ingestion/workers/parse-worker.d.ts +14 -1
- package/dist/core/ingestion/workers/parse-worker.js +493 -54
- package/dist/core/ingestion/workers/worker-pool.d.ts +20 -27
- package/dist/core/ingestion/workers/worker-pool.js +91 -3
- package/dist/core/lbug/csv-generator.d.ts +27 -0
- package/dist/core/lbug/csv-generator.js +72 -17
- package/dist/core/lbug/extension-load-error.js +13 -2
- package/dist/core/lbug/extension-loader.d.ts +29 -0
- package/dist/core/lbug/extension-loader.js +31 -6
- 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 +290 -11
- package/dist/core/lbug/lbug-adapter.js +652 -69
- package/dist/core/lbug/native-check.d.ts +21 -0
- package/dist/core/lbug/native-check.js +248 -32
- 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 +9 -0
- package/dist/core/lbug/pool-adapter.js +164 -14
- 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 +163 -4
- package/dist/core/lbug/schema.js +404 -159
- package/dist/core/lbug/sync-csv-writer.d.ts +47 -0
- package/dist/core/lbug/sync-csv-writer.js +108 -0
- package/dist/core/run-analyze.d.ts +147 -0
- package/dist/core/run-analyze.js +1215 -179
- 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 +150 -9
- package/dist/core/search/fts-indexes.js +241 -23
- package/dist/core/wiki/graph-queries.js +145 -112
- package/dist/core/wiki/llm-client.d.ts +29 -3
- package/dist/core/wiki/llm-client.js +47 -12
- 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/local/aop-metadata.d.ts +77 -0
- package/dist/mcp/local/aop-metadata.js +227 -0
- package/dist/mcp/local/bean-metadata.d.ts +2 -1
- package/dist/mcp/local/bean-metadata.js +22 -1
- package/dist/mcp/local/convex-metadata.d.ts +8 -0
- package/dist/mcp/local/convex-metadata.js +45 -0
- package/dist/mcp/local/local-backend.d.ts +174 -11
- package/dist/mcp/local/local-backend.js +1678 -331
- 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/repository-policy.d.ts +1 -0
- package/dist/mcp/repository-policy.js +5 -0
- package/dist/mcp/resources.js +26 -4
- package/dist/mcp/server.js +23 -13
- package/dist/mcp/tools.d.ts +8 -0
- package/dist/mcp/tools.js +76 -23
- package/dist/server/analyze-job.d.ts +37 -2
- package/dist/server/analyze-job.js +13 -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 +1 -1
- package/dist/server/analyze-worker-core.js +10 -1
- 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/api.d.ts +2 -11
- package/dist/server/api.js +164 -163
- 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/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/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 +131 -0
- package/dist/storage/git.js +236 -2
- package/dist/storage/index-lock.d.ts +102 -0
- package/dist/storage/index-lock.js +660 -0
- package/dist/storage/parse-cache.js +588 -6
- package/dist/storage/parsedfile-store.js +76 -6
- package/dist/storage/repo-manager.d.ts +54 -441
- package/dist/storage/repo-manager.js +312 -221
- 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 +11 -2
- package/scripts/cross-platform-shard.ts +153 -0
- package/scripts/cross-platform-tests.ts +122 -0
- package/scripts/run-cross-platform.ts +16 -5
- 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-plan/README.md +11 -6
- package/skills/gitnexus-plan/references/evidence-provenance.md +49 -12
- package/skills/gitnexus-plan/scripts/evidence-provenance.mjs +654 -372
- package/skills/gitnexus-refactoring.md +48 -5
- package/skills/gitnexus-review/SKILL.md +12 -6
- package/skills/gitnexus-review/ci-personas/ci-adversarial-lens.md +1 -1
- package/skills/gitnexus-review/ci-personas/ci-blast-radius-lens.md +1 -1
- package/skills/gitnexus-review/ci-personas/ci-correctness-lens.md +1 -1
- package/skills/gitnexus-review/ci-personas/ci-coverage-lens.md +1 -1
- package/skills/gitnexus-review/ci-personas/ci-critic-lens.md +1 -1
- package/skills/gitnexus-review/ci-personas/ci-security-lens.md +1 -1
- package/skills/gitnexus-taint-analysis.md +13 -7
- package/skills/gitnexus-work/SKILL.md +4 -1
- package/skills/gitnexus-work/references/evidence-provenance.md +49 -12
- package/skills/gitnexus-work/scripts/evidence-provenance.mjs +654 -372
- package/vendor/leiden/utils.cjs +28 -1
- package/web/assets/ProcessFlowModal-Badh2Pbg.js +24 -0
- package/web/assets/{__vite-browser-external-bMKyYQkO.js → __vite-browser-external-COxE8F0G.js} +1 -1
- package/web/assets/abnfDiagram-QNN2D4NM-Cq2djWWe.js +1 -0
- package/web/assets/agent-Dr4l5EOp.js +662 -0
- package/web/assets/architecture-TIHT7OUA-V6N4J3SY-fTePvLoe.js +1 -0
- package/web/assets/architectureDiagram-OT7VKSJ7-mKEXxkeF.js +36 -0
- package/web/assets/{blockDiagram-7IZFK4PR-DBefcjof.js → blockDiagram-54WLDVWM-Dg_hrRWE.js} +4 -4
- package/web/assets/{c4Diagram-Y2BXMSZH-EjWnjEJl.js → c4Diagram-X2LASM7V-CnhoT4aV.js} +2 -2
- 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-LII3EMHJ-BL6lKJ_P.js → chunk-6L755F7B-CMhLBxi2.js} +1 -1
- package/web/assets/{chunk-QA3QBVWF-DVXPOIxe.js → chunk-7CWYLC5S-DRgGkkpF.js} +1 -1
- package/web/assets/{chunk-ZXARS5L4-C3v-4Fsw.js → chunk-A7VWPJGB-B4O3oQdQ.js} +1 -1
- 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-INKRHTLW-Ckl3_KkO.js → chunk-SZD42YQK-ijyKKVr1.js} +21 -21
- package/web/assets/{chunk-LCXTWHL2-C162wE5z.js → chunk-TFPGFQPA-Dj6a-0pC.js} +3 -3
- 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-RG4AUYOV-ZNgyLFq6.js → chunk-VJFVEZTB-CX66F2ep.js} +3 -3
- 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-HNR7UZ2L-DVRltWbL.js → diagram-KFBZAVDW-Dfmf_4ti.js} +3 -3
- 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/error-D9MtuG9s.js +1 -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-D7mTFcvQ.js → index-2zdvEdzg.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-XpjJRU9h.js → ishikawaDiagram-4JDSWWDM-DmqWtjkl.js} +2 -2
- package/web/assets/{journeyDiagram-M6C3CM3L-C6wjooas.js → journeyDiagram-QUS3FAKT-XAzVzrQW.js} +3 -3
- package/web/assets/{kanban-definition-75IXJCU3-5_UVY79g.js → kanban-definition-D4L7SQKK-YurRnmYn.js} +6 -6
- package/web/assets/katex-C5OPUE3Q-Bnbavtmu.js +257 -0
- package/web/assets/{mindmap-definition-2TDM6QVE-8xDLzk2e.js → mindmap-definition-66QP5TD6-ChrWWnil.js} +5 -5
- package/web/assets/node.browser-U-KyT5AW.js +1 -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/{quadrantDiagram-VICAPDV7-DR54jOeR.js → quadrantDiagram-VO5QLCXA-B7098wSc.js} +3 -3
- 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-JXO7QTGE-PEkg7sKC.js → requirementDiagram-RASO5HTO-B-l8InpK.js} +4 -4
- package/web/assets/{sankeyDiagram-URQDO5SZ-DDWEtjcs.js → sankeyDiagram-F32LOJ6L-Kd7zjJgX.js} +3 -3
- package/web/assets/{sequenceDiagram-VS2MUI6T-Bv-uwANx.js → sequenceDiagram-URATNSBD-BlcdY9DS.js} +7 -7
- 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-O6YCAMPW-Qmsuo7qS.js → timeline-definition-WJXWRH4I-DUfp1R3E.js} +3 -3
- 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 +16 -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/web/assets/ProcessFlowModal-CwkpVkv-.js +0 -22
- package/web/assets/agent-Ds-lkZjX.js +0 -626
- package/web/assets/architecture-7EHR7CIX-6QZW5X65-BVWFvYz2.js +0 -1
- package/web/assets/architectureDiagram-UL44E2DR-CmG3uPWf.js +0 -36
- package/web/assets/chunk-2T2R6R2M-Bb6Sy3_j.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-CA7OhIEf.js +0 -124
- package/web/assets/chunk-7J6CGLKN-BlKwgXKs.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-J5EP6P6S-L19oz55R.js +0 -1
- package/web/assets/chunk-KGFNY3KK-BZeP-55u.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-LRIF4GLE-n59lhprL.js +0 -1
- package/web/assets/chunk-RERM46MO-B5dAdWpP.js +0 -1
- package/web/assets/chunk-RKZBBQEN-MyIQbGgD.js +0 -1
- package/web/assets/chunk-T2UQINTJ-BEyXhZWe.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-ByqTVLvh.js +0 -1
- package/web/assets/chunk-VU6ZFW4Y-BLeasdkU.js +0 -2
- package/web/assets/classDiagram-KGZ6W3CR-olpO3fMe.js +0 -1
- package/web/assets/classDiagram-v2-72OJOZXJ-olpO3fMe.js +0 -1
- package/web/assets/dagre-ND4H6XIP-CY4iIF7v.js +0 -4
- package/web/assets/diagram-3NCE3AQN-CO6QpzEE.js +0 -43
- package/web/assets/diagram-GF46GFSD-B2atbzmU.js +0 -24
- package/web/assets/diagram-QXG6HAR7-DR6AHD2h.js +0 -24
- package/web/assets/diagram-WEQXMOUZ-DkpoMwTL.js +0 -10
- package/web/assets/erDiagram-L5TCEMPS-n8g_90bc.js +0 -85
- package/web/assets/eventmodeling-FCH6USID-MREXMVOE-CgFBM7e-.js +0 -1
- package/web/assets/flowDiagram-H6V6AXG4-SGMDiCkB.js +0 -162
- package/web/assets/ganttDiagram-JCBTUEKG-Cb3UBqRS.js +0 -292
- package/web/assets/gitGraph-WXDBUCRP-R675I2BI-DCJv7SII.js +0 -1
- package/web/assets/gitGraphDiagram-S2ZK5IYY-Bs9CR7tq.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-T368on4D.js +0 -2
- package/web/assets/katex-K3KEBU37-qRQBy-EZ.js +0 -261
- package/web/assets/node-Ct_zna8U.js +0 -8
- 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-Bv4LpAbr.js +0 -30
- package/web/assets/radar-GUYGQ44K-RDLRG3WG-DeD6yN_0.js +0 -1
- package/web/assets/sdk-CzHHH8tD.js +0 -37
- package/web/assets/src-Cv1eWg0o.js +0 -1
- package/web/assets/stateDiagram-7D4R322I-DVNjmkEq.js +0 -1
- package/web/assets/stateDiagram-v2-36443NZ5-CyN4Fh7_.js +0 -1
- 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-BD1iK1SX.js +0 -34
- package/web/assets/wardley-L42UT6IY-5TKZOOLJ-DqrT9tB8.js +0 -1
- package/web/assets/wardleyDiagram-CUQ6CDDI-D6TzLVob.js +0 -78
- package/web/assets/xychartDiagram-N2JHSOCM-CoZ_Tits.js +0 -7
- /package/web/assets/{chunk-7W6UQGC5-pyKGssV3.js → chunk-LIEV3EAG-pyKGssV3.js} +0 -0
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PRECISE member resolution through a call result's RETURN SHAPE (R3-5).
|
|
3
|
+
*
|
|
4
|
+
* The last unanswered question from three rounds of blind-spot reports was
|
|
5
|
+
* "who reads `wickRatio`?", where the field is produced by several functions
|
|
6
|
+
* that each return an anonymous object containing it. Name inference must
|
|
7
|
+
* refuse that — a read of `spike.wickRatio` could mean any producer, and a
|
|
8
|
+
* wrong edge in the pre-edit safety gate is worse than a missing one — so no
|
|
9
|
+
* amount of narrowing gets there. It needs EVIDENCE instead of inference.
|
|
10
|
+
*
|
|
11
|
+
* The evidence already exists in two halves that had never been joined:
|
|
12
|
+
*
|
|
13
|
+
* 1. The call-result type binding. `const alert = formatSpikeAlert(row)`
|
|
14
|
+
* binds `alert` to a `TypeRef` whose `rawName` is the callee. That
|
|
15
|
+
* machinery predates this work; it simply had nothing to resolve to when
|
|
16
|
+
* the callee returned an anonymous literal, because an anonymous literal
|
|
17
|
+
* named nothing.
|
|
18
|
+
* 2. R3-4 gave it a name. A returned literal's keys are now owned by the
|
|
19
|
+
* producing function, so `formatSpikeAlert.wickRatio` is a real symbol.
|
|
20
|
+
*
|
|
21
|
+
* Joining them turns a refusal into a precise answer:
|
|
22
|
+
*
|
|
23
|
+
* const alert = formatSpikeAlert(row);
|
|
24
|
+
* alert.wickRatio → Property:…:formatSpikeAlert.wickRatio
|
|
25
|
+
*
|
|
26
|
+
* and it works for exactly the case narrowing cannot: several producers sharing
|
|
27
|
+
* a field name are no longer competitors, because the receiver says WHICH one.
|
|
28
|
+
* That is why this runs before the unique-name fallback and registers its sites
|
|
29
|
+
* as handled — a precise answer must never be second-guessed by a name match.
|
|
30
|
+
*
|
|
31
|
+
* BOUND, deliberately. This only fires where the value is BOUND to a name the
|
|
32
|
+
* type binding could attach to. A field read off a bare parameter
|
|
33
|
+
* (`function f(spike) { return spike.wickRatio }`) still has no receiver type
|
|
34
|
+
* here, because typing it requires the CALLER's type to flow in — that is
|
|
35
|
+
* inter-procedural and genuinely larger. Those reads keep falling through to
|
|
36
|
+
* name inference, and keep being reported when it declines.
|
|
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 { PropertyNameIndex } from './unique-name-properties.js';
|
|
43
|
+
export interface ReturnShapeMemberStats {
|
|
44
|
+
/** ACCESSES edges resolved through a call result's return shape. */
|
|
45
|
+
readonly emitted: number;
|
|
46
|
+
/**
|
|
47
|
+
* Sites where the receiver WAS typed to a producer but that producer owns no
|
|
48
|
+
* member of this name. Reported rather than dropped: it means the read and
|
|
49
|
+
* the shape disagree, which is either a stale field name or a producer this
|
|
50
|
+
* pass mis-attributed, and both are worth seeing.
|
|
51
|
+
*/
|
|
52
|
+
readonly memberNotOnShape: number;
|
|
53
|
+
}
|
|
54
|
+
export declare function emitReturnShapeMemberAccesses(graph: KnowledgeGraph, indexes: ScopeResolutionIndexes, parsedFiles: readonly ParsedFile[], nodeLookup: GraphNodeLookup,
|
|
55
|
+
/** Sites a precise pass already owns — never re-resolved here. */
|
|
56
|
+
skipSites: ReadonlySet<string>, propertyNameIndex: PropertyNameIndex,
|
|
57
|
+
/** Sites this pass resolves, so the name fallback leaves them alone. */
|
|
58
|
+
handledSink: Set<string>): ReturnShapeMemberStats;
|
|
@@ -0,0 +1,458 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PRECISE member resolution through a call result's RETURN SHAPE (R3-5).
|
|
3
|
+
*
|
|
4
|
+
* The last unanswered question from three rounds of blind-spot reports was
|
|
5
|
+
* "who reads `wickRatio`?", where the field is produced by several functions
|
|
6
|
+
* that each return an anonymous object containing it. Name inference must
|
|
7
|
+
* refuse that — a read of `spike.wickRatio` could mean any producer, and a
|
|
8
|
+
* wrong edge in the pre-edit safety gate is worse than a missing one — so no
|
|
9
|
+
* amount of narrowing gets there. It needs EVIDENCE instead of inference.
|
|
10
|
+
*
|
|
11
|
+
* The evidence already exists in two halves that had never been joined:
|
|
12
|
+
*
|
|
13
|
+
* 1. The call-result type binding. `const alert = formatSpikeAlert(row)`
|
|
14
|
+
* binds `alert` to a `TypeRef` whose `rawName` is the callee. That
|
|
15
|
+
* machinery predates this work; it simply had nothing to resolve to when
|
|
16
|
+
* the callee returned an anonymous literal, because an anonymous literal
|
|
17
|
+
* named nothing.
|
|
18
|
+
* 2. R3-4 gave it a name. A returned literal's keys are now owned by the
|
|
19
|
+
* producing function, so `formatSpikeAlert.wickRatio` is a real symbol.
|
|
20
|
+
*
|
|
21
|
+
* Joining them turns a refusal into a precise answer:
|
|
22
|
+
*
|
|
23
|
+
* const alert = formatSpikeAlert(row);
|
|
24
|
+
* alert.wickRatio → Property:…:formatSpikeAlert.wickRatio
|
|
25
|
+
*
|
|
26
|
+
* and it works for exactly the case narrowing cannot: several producers sharing
|
|
27
|
+
* a field name are no longer competitors, because the receiver says WHICH one.
|
|
28
|
+
* That is why this runs before the unique-name fallback and registers its sites
|
|
29
|
+
* as handled — a precise answer must never be second-guessed by a name match.
|
|
30
|
+
*
|
|
31
|
+
* BOUND, deliberately. This only fires where the value is BOUND to a name the
|
|
32
|
+
* type binding could attach to. A field read off a bare parameter
|
|
33
|
+
* (`function f(spike) { return spike.wickRatio }`) still has no receiver type
|
|
34
|
+
* here, because typing it requires the CALLER's type to flow in — that is
|
|
35
|
+
* inter-procedural and genuinely larger. Those reads keep falling through to
|
|
36
|
+
* name inference, and keep being reported when it declines.
|
|
37
|
+
*/
|
|
38
|
+
import { resolveCallerGraphId } from '../graph-bridge/ids.js';
|
|
39
|
+
import { findCallableBindingInScope, findClassBindingInScope, findReceiverTypeBinding, } from '../scope/walkers.js';
|
|
40
|
+
import { callableFlowSiteKey } from './callable-value-flow.js';
|
|
41
|
+
/**
|
|
42
|
+
* Confidence for a return-shape member. This is a PRECISE resolution — the
|
|
43
|
+
* receiver's binding names the producing function and the member is owned by
|
|
44
|
+
* it — so it carries the ordinary emission confidence, not the reduced tier
|
|
45
|
+
* name inference uses. Nothing here is guessed.
|
|
46
|
+
*/
|
|
47
|
+
const RETURN_SHAPE_CONFIDENCE = 0.9;
|
|
48
|
+
const EDGE_REASON = 'scope-resolution: return-shape member';
|
|
49
|
+
/**
|
|
50
|
+
* Does this Property node id name `<owner>.<member>`?
|
|
51
|
+
*
|
|
52
|
+
* Ids carry an optional position suffix for function-local symbols
|
|
53
|
+
* (`…:buildFlat.field@33:4`), so the owner segment is matched up to a `@` or
|
|
54
|
+
* the end rather than by equality.
|
|
55
|
+
*/
|
|
56
|
+
function idNamesMember(id, owner, member) {
|
|
57
|
+
const needle = `:${owner}.${member}`;
|
|
58
|
+
const at = id.indexOf(needle);
|
|
59
|
+
if (at === -1)
|
|
60
|
+
return false;
|
|
61
|
+
const after = id.slice(at + needle.length);
|
|
62
|
+
return after.length === 0 || after.startsWith('@');
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Key a parameter cell by the scope it BINDS IN plus its name.
|
|
66
|
+
*
|
|
67
|
+
* Not by its definition id, which is what the first attempt used: a parameter
|
|
68
|
+
* is not reachable through `findValueBindingInScope` (its predicate
|
|
69
|
+
* `isOwnableValueLabel` lists Const / Variable / Property / Static, because it
|
|
70
|
+
* exists for OWNERSHIP registration and a parameter is owned by nothing), and
|
|
71
|
+
* measured, it is not reachable as a `local` binding either — the join found the
|
|
72
|
+
* formal and then resolved no def at all.
|
|
73
|
+
*
|
|
74
|
+
* The scope plus the name is enough and needs no def: the `formal` site already
|
|
75
|
+
* states the scope its parameter binds in, and a read of that name anywhere
|
|
76
|
+
* inside that scope's subtree refers to it unless something nearer shadows it —
|
|
77
|
+
* which {@link parameterProducerFor} handles by stopping at the first scope that
|
|
78
|
+
* BINDS the name.
|
|
79
|
+
*/
|
|
80
|
+
function parameterCellKey(scope, name) {
|
|
81
|
+
return `${scope}\u0000${name}`;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Does `scope` BIND `name` itself — with or without a type or a definition?
|
|
85
|
+
*
|
|
86
|
+
* The question the parameter walk has to ask before it climbs, and it is NOT
|
|
87
|
+
* "does this scope hold a parameter producer", which is what the first attempt
|
|
88
|
+
* asked. A `const`, a `for…of` binder, a catch binding and a parameter are all
|
|
89
|
+
* nearer declarations of the name, and none of them is in the producer map — so
|
|
90
|
+
* a walk that consults only that map climbs straight past the nearer binding and
|
|
91
|
+
* types the shadow from an enclosing parameter's callers.
|
|
92
|
+
*
|
|
93
|
+
* Reads the scope's OWN tables rather than `lookupBindingsAt`, for the same
|
|
94
|
+
* reason `isNamespaceNameShadowed` does: the question here is what this scope
|
|
95
|
+
* declares LOCALLY, and the finalized/augmented import channels answer a
|
|
96
|
+
* different one — routing through them would let a module-level import of the
|
|
97
|
+
* name count as a shadow of itself.
|
|
98
|
+
*
|
|
99
|
+
* `ownedDefs` is consulted alongside `bindings` because a language may register
|
|
100
|
+
* a declaration without a binding entry of its own; the sibling guard reads both
|
|
101
|
+
* for that reason, and here an extra STOP only ever costs an edge.
|
|
102
|
+
*/
|
|
103
|
+
function scopeBindsName(scope, name) {
|
|
104
|
+
return (scope.bindings.has(name) ||
|
|
105
|
+
scope.typeBindings.has(name) ||
|
|
106
|
+
scope.lexicalNames?.has(name) === true ||
|
|
107
|
+
scope.ownedDefs.some((def) => {
|
|
108
|
+
const qualifiedName = def.qualifiedName;
|
|
109
|
+
if (qualifiedName === undefined)
|
|
110
|
+
return false;
|
|
111
|
+
const dot = qualifiedName.lastIndexOf('.');
|
|
112
|
+
return (dot === -1 ? qualifiedName : qualifiedName.slice(dot + 1)) === name;
|
|
113
|
+
}));
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* The caller-derived producer for `name` as read at `startScope`, or undefined.
|
|
117
|
+
*
|
|
118
|
+
* A cell is keyed by the scope its parameter BINDS IN, so a read nested below
|
|
119
|
+
* that scope has to climb to reach it — through a nested block, a class body, a
|
|
120
|
+
* `catch`. The climb is the whole reason this walk exists, and it is also the
|
|
121
|
+
* whole risk: every scope crossed is a scope that might declare the name itself.
|
|
122
|
+
*
|
|
123
|
+
* So the walk stops at the FIRST scope that binds the name at all, not at the
|
|
124
|
+
* first scope that happens to hold a producer. `{ const item = rows[0]; …
|
|
125
|
+
* item.wickRatio }` inside `f(item, rows)` is the shape that separates the two:
|
|
126
|
+
* the block declares `item`, the producer map does not know that name, and a
|
|
127
|
+
* producer-only walk climbs past it to the formal and types a value the callers
|
|
128
|
+
* never supplied.
|
|
129
|
+
*
|
|
130
|
+
* A CALLABLE boundary stops the walk even when nothing visible binds the name,
|
|
131
|
+
* because a parameter list is the one binder this pass cannot see through: an
|
|
132
|
+
* anonymous arrow is dropped by `collectFunctions` (it cannot be named), so it
|
|
133
|
+
* emits no `formal` site and `items.map((spike) => spike.wickRatio)` presents a
|
|
134
|
+
* scope that looks EMPTY while in fact rebinding `spike`. Crossing it types an
|
|
135
|
+
* array element from the enclosing parameter's callers, at 0.9. The price is a
|
|
136
|
+
* closure that genuinely reads an enclosing parameter, which now declines — the
|
|
137
|
+
* trade this pass is built to make, since a wrong answer at the precise tier is
|
|
138
|
+
* one no `minConfidence` floor can filter out, while a missing one still falls
|
|
139
|
+
* through to the 0.5 name tier.
|
|
140
|
+
*
|
|
141
|
+
* NO VISITED SET, deliberately, unlike the sibling walks in `walkers.ts`. Those
|
|
142
|
+
* fail closed on a parent cycle; this one cannot meet a cycle to fail on. Both
|
|
143
|
+
* constructions of this tree (`buildScopeTree`, and `TransitionalScopeTree`
|
|
144
|
+
* which validates through it) enforce that a parent's range STRICTLY contains
|
|
145
|
+
* its child's and throw otherwise, and strict containment is well-founded — a
|
|
146
|
+
* cycle would need a scope strictly containing itself. A per-site `Set` here
|
|
147
|
+
* would be defence against a state the builder rejects, allocated once for every
|
|
148
|
+
* read/write site in the repo.
|
|
149
|
+
*/
|
|
150
|
+
function parameterProducerFor(startScope, name, parameterProducers, indexes) {
|
|
151
|
+
let cursor = startScope;
|
|
152
|
+
while (cursor !== null) {
|
|
153
|
+
const producer = parameterProducers.get(parameterCellKey(cursor, name));
|
|
154
|
+
if (producer !== undefined && producer.length > 0)
|
|
155
|
+
return producer;
|
|
156
|
+
const scope = indexes.scopeTree.getScope(cursor);
|
|
157
|
+
if (scope === undefined)
|
|
158
|
+
return undefined;
|
|
159
|
+
if (scopeBindsName(scope, name))
|
|
160
|
+
return undefined;
|
|
161
|
+
if (scope.kind === 'Function')
|
|
162
|
+
return undefined;
|
|
163
|
+
cursor = scope.parent;
|
|
164
|
+
}
|
|
165
|
+
return undefined;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Producer names for PARAMETERS, derived from what their callers pass (W2-2).
|
|
169
|
+
*
|
|
170
|
+
* `function f(spike) { return spike.wickRatio }` has nothing to type `spike`
|
|
171
|
+
* from — that is the standing limit of R3-5 and the reason the 0.5 name tier
|
|
172
|
+
* exists at all. Measured on the reporting repo, it is also the LARGEST one:
|
|
173
|
+
* 11,012 of 13,672 property edges (81%) rest on that name guess.
|
|
174
|
+
*
|
|
175
|
+
* The two facts needed to answer it were already being extracted, for a
|
|
176
|
+
* different purpose. `callable-flow-captures` synthesizes, for JS and TS among
|
|
177
|
+
* others:
|
|
178
|
+
*
|
|
179
|
+
* formal owner=f binding=spike parameter-index=0
|
|
180
|
+
* argument source=s parameter-index=0 direct-callee-name=f
|
|
181
|
+
*
|
|
182
|
+
* so joining them on `(callee, parameterIndex)` says which cell reaches which
|
|
183
|
+
* parameter, and the argument's own binding is typed by the same
|
|
184
|
+
* `findReceiverTypeBinding` used for a directly-bound receiver. No new capture,
|
|
185
|
+
* no parse-time change, and deliberately NOT a change to the callable-value-flow
|
|
186
|
+
* solver that owns these sites — that pass is guarded by a fingerprint
|
|
187
|
+
* correctness gate, so this reads the same facts and computes its own map.
|
|
188
|
+
*
|
|
189
|
+
* A parameter with callers passing DIFFERENT producers resolves to nothing.
|
|
190
|
+
* Picking one would fabricate at the 0.9 PRECISE tier, which no `minConfidence`
|
|
191
|
+
* floor can filter out — the same reason `buildConstantMap` drops an ambiguous
|
|
192
|
+
* constant instead of taking the first.
|
|
193
|
+
*
|
|
194
|
+
* COVERAGE, measured rather than assumed. The synthesis skips an argument that
|
|
195
|
+
* is itself a call result (`f(makeSignal())` emits no argument site, by an
|
|
196
|
+
* explicit `continue` in `callable-flow-captures`), so only the bound spelling
|
|
197
|
+
* `const s = makeSignal(); f(s)` is served. That looked fatal until counted: in
|
|
198
|
+
* the reporting repo bare-identifier arguments outnumber call-result arguments
|
|
199
|
+
* 2,563 to 50. The captured spelling is the dominant one by 51:1.
|
|
200
|
+
*/
|
|
201
|
+
function buildParameterProducers(indexes, parsedFiles) {
|
|
202
|
+
/** parameter def id -> producer name, or CONFLICT once callers disagree. */
|
|
203
|
+
const producers = new Map();
|
|
204
|
+
const conflicted = new Set();
|
|
205
|
+
// Formals keyed by the file that declares them, so two same-named functions
|
|
206
|
+
// in different files cannot answer for each other — the same file identity
|
|
207
|
+
// the member join below relies on.
|
|
208
|
+
//
|
|
209
|
+
// AMBIGUITY IS REFUSED HERE TOO, not settled by arrival order. The file is
|
|
210
|
+
// only one of the two axes a name can collide on: `ownerName` is a BARE
|
|
211
|
+
// identifier, and `emitFormalFacts` emits one `formal` per parameter of every
|
|
212
|
+
// callable it collects — nested functions and class methods included. So a
|
|
213
|
+
// free `parse` and a `parse` nested inside it, or a free `apply` and
|
|
214
|
+
// `Runner.apply`, key this map identically within ONE file. A plain `.set`
|
|
215
|
+
// lets the last one visited win, which hands a caller's producer to a
|
|
216
|
+
// parameter that caller never reached; the edge that follows is emitted at the
|
|
217
|
+
// 0.9 PRECISE tier, above every `minConfidence` floor, while the genuine
|
|
218
|
+
// consumer is left untyped. Poisoning the key costs both callables their edge
|
|
219
|
+
// and fabricates neither — the same discipline the `producers` map applies to
|
|
220
|
+
// disagreeing callers thirty lines below.
|
|
221
|
+
const formals = new Map();
|
|
222
|
+
/** Formal keys claimed by two DIFFERENT parameters — unable to answer. */
|
|
223
|
+
const ambiguousFormals = new Set();
|
|
224
|
+
for (const parsed of parsedFiles) {
|
|
225
|
+
for (const flow of parsed.callableFlowSites ?? []) {
|
|
226
|
+
if (flow.kind !== 'formal')
|
|
227
|
+
continue;
|
|
228
|
+
const formalKey = `${parsed.filePath}\u0000${flow.ownerName}\u0000${flow.parameterIndex}`;
|
|
229
|
+
if (ambiguousFormals.has(formalKey))
|
|
230
|
+
continue;
|
|
231
|
+
const claimed = formals.get(formalKey);
|
|
232
|
+
if (claimed !== undefined) {
|
|
233
|
+
// The same cell restated is not a disagreement — only a formal naming a
|
|
234
|
+
// DIFFERENT parameter leaves the key unable to answer.
|
|
235
|
+
if (claimed.inScope === flow.binding.inScope && claimed.name === flow.binding.name) {
|
|
236
|
+
continue;
|
|
237
|
+
}
|
|
238
|
+
formals.delete(formalKey);
|
|
239
|
+
ambiguousFormals.add(formalKey);
|
|
240
|
+
continue;
|
|
241
|
+
}
|
|
242
|
+
formals.set(formalKey, flow.binding);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
if (formals.size === 0)
|
|
246
|
+
return producers;
|
|
247
|
+
for (const parsed of parsedFiles) {
|
|
248
|
+
for (const flow of parsed.callableFlowSites ?? []) {
|
|
249
|
+
if (flow.kind !== 'argument')
|
|
250
|
+
continue;
|
|
251
|
+
const callee = flow.directCalleeName;
|
|
252
|
+
if (callee === undefined || callee.length === 0)
|
|
253
|
+
continue;
|
|
254
|
+
// Resolve the callee from the CALL SITE, so the formal is looked up in the
|
|
255
|
+
// file that actually declares the function rather than the one calling it.
|
|
256
|
+
const calleeDef = findCallableBindingInScope(flow.source.inScope, callee, indexes);
|
|
257
|
+
if (calleeDef?.filePath === undefined)
|
|
258
|
+
continue;
|
|
259
|
+
const binding = formals.get(`${calleeDef.filePath}\u0000${callee}\u0000${flow.parameterIndex}`);
|
|
260
|
+
if (binding === undefined)
|
|
261
|
+
continue;
|
|
262
|
+
const cell = parameterCellKey(binding.inScope, binding.name);
|
|
263
|
+
if (conflicted.has(cell))
|
|
264
|
+
continue;
|
|
265
|
+
const producer = findReceiverTypeBinding(flow.source.inScope, flow.source.name, indexes)?.rawName;
|
|
266
|
+
if (producer === undefined || producer.length === 0)
|
|
267
|
+
continue;
|
|
268
|
+
const existing = producers.get(cell);
|
|
269
|
+
if (existing !== undefined && existing !== producer) {
|
|
270
|
+
// Two callers, two producers. Which shape this parameter holds depends
|
|
271
|
+
// on the call, and this pass answers at the precise tier or not at all.
|
|
272
|
+
producers.delete(cell);
|
|
273
|
+
conflicted.add(cell);
|
|
274
|
+
continue;
|
|
275
|
+
}
|
|
276
|
+
producers.set(cell, producer);
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
return producers;
|
|
280
|
+
}
|
|
281
|
+
export function emitReturnShapeMemberAccesses(graph, indexes, parsedFiles, nodeLookup,
|
|
282
|
+
/** Sites a precise pass already owns — never re-resolved here. */
|
|
283
|
+
skipSites, propertyNameIndex,
|
|
284
|
+
/** Sites this pass resolves, so the name fallback leaves them alone. */
|
|
285
|
+
handledSink) {
|
|
286
|
+
let emitted = 0;
|
|
287
|
+
let memberNotOnShape = 0;
|
|
288
|
+
const seen = new Set();
|
|
289
|
+
// The files of the language being resolved. `parsedFiles` is already scoped to
|
|
290
|
+
// it, so this needs no new plumbing — it is the same restriction the sibling
|
|
291
|
+
// unique-name pass gets from `candidatesForLanguage`.
|
|
292
|
+
//
|
|
293
|
+
// The file guard below is not sufficient on its own, and the reason is worth
|
|
294
|
+
// keeping: a receiver typed by CONSTRUCTION (`const cfg = new Loyalty()`)
|
|
295
|
+
// resolves `Loyalty` through the shared class registry, which is polyglot. The
|
|
296
|
+
// producer then legitimately resolves to `Loyalty.java`, its members
|
|
297
|
+
// legitimately live in that same file, and a file-equality check waves the
|
|
298
|
+
// cross-language edge straight through. Restricting to the current language's
|
|
299
|
+
// own files is what actually closes it.
|
|
300
|
+
const ownFilePaths = new Set(parsedFiles.map((p) => p.filePath));
|
|
301
|
+
// Caller-derived parameter types (W2-2) — see `buildParameterProducers`.
|
|
302
|
+
const parameterProducers = buildParameterProducers(indexes, parsedFiles);
|
|
303
|
+
for (const parsed of parsedFiles) {
|
|
304
|
+
for (const site of parsed.referenceSites) {
|
|
305
|
+
if (site.kind !== 'read' && site.kind !== 'write')
|
|
306
|
+
continue;
|
|
307
|
+
const receiver = site.explicitReceiver?.name;
|
|
308
|
+
if (receiver === undefined || receiver.length === 0)
|
|
309
|
+
continue;
|
|
310
|
+
const siteKey = callableFlowSiteKey(parsed.filePath, site.atRange);
|
|
311
|
+
if (skipSites.has(siteKey))
|
|
312
|
+
continue;
|
|
313
|
+
// The receiver's binding names the PRODUCER, not a class. That is the
|
|
314
|
+
// whole point: `formatSpikeAlert` is a function, and before R3-4 there
|
|
315
|
+
// was nothing named after it to look a member up on.
|
|
316
|
+
const typeRef = findReceiverTypeBinding(site.inScope, receiver, indexes);
|
|
317
|
+
let producerRef = typeRef?.rawName;
|
|
318
|
+
// W2-2. A receiver with no binding of its own may still be a PARAMETER
|
|
319
|
+
// whose callers all pass the same producer. Consulted only where the
|
|
320
|
+
// direct binding declined, so a receiver that already had a type keeps it.
|
|
321
|
+
if (producerRef === undefined || producerRef.length === 0) {
|
|
322
|
+
producerRef = parameterProducerFor(site.inScope, receiver, parameterProducers, indexes);
|
|
323
|
+
}
|
|
324
|
+
if (producerRef === undefined || producerRef.length === 0)
|
|
325
|
+
continue;
|
|
326
|
+
// R3-4 qualifies a returned key by the producing function's own name, so
|
|
327
|
+
// the owner segment to match is the LAST one. For a plain producer this is
|
|
328
|
+
// a no-op.
|
|
329
|
+
let producer = producerRef.slice(producerRef.lastIndexOf('.') + 1);
|
|
330
|
+
if (producer.length === 0)
|
|
331
|
+
continue;
|
|
332
|
+
// Resolve the producer to a real definition and keep only members that
|
|
333
|
+
// live in ITS file.
|
|
334
|
+
//
|
|
335
|
+
// Without this the join is textual over a whole-graph index: any node
|
|
336
|
+
// whose id happens to read `<producer>.<member>` matches, in any file and
|
|
337
|
+
// any LANGUAGE. Measured, that fabricated a 0.9-confidence edge from a JS
|
|
338
|
+
// component to a Java field — and 0.9 is the precise tier, so a
|
|
339
|
+
// `minConfidence` floor cannot filter it out. The sibling unique-name pass
|
|
340
|
+
// was given a per-language restriction for exactly this; this pass
|
|
341
|
+
// consumes the same shared index and had none.
|
|
342
|
+
//
|
|
343
|
+
// The file identity is the evidence, not a heuristic: R3-4 anchors a
|
|
344
|
+
// returned literal's keys to the function that returns them, so the
|
|
345
|
+
// member's node necessarily sits in the same file as that function. A
|
|
346
|
+
// candidate elsewhere is a different symbol wearing the same name.
|
|
347
|
+
// A CALLABLE lookup, not a value one: the producer is the function whose
|
|
348
|
+
// return shape owns the member. It also resolves through finalized import
|
|
349
|
+
// bindings, so a producer imported from another file still yields its own
|
|
350
|
+
// file — the guard restricts to the RIGHT file, it does not force same-file.
|
|
351
|
+
// Three guards, and they catch different shapes — none is redundant:
|
|
352
|
+
//
|
|
353
|
+
// producerDef — the producer must RESOLVE. This is the one that stops
|
|
354
|
+
// the measured cross-language leak: `new Loyalty()` in JS
|
|
355
|
+
// yields `producerRef = 'Loyalty'`, and a Java class does
|
|
356
|
+
// not resolve as a callable from a JS scope, so the pass
|
|
357
|
+
// declines instead of name-matching into `Loyalty.java`.
|
|
358
|
+
// Mutation-verified by `polyglot-property-isolation`.
|
|
359
|
+
// filePath — among same-named producers, keep the members of the one
|
|
360
|
+
// actually resolved. Defence in depth for the case where
|
|
361
|
+
// the producer DOES resolve and a same-named function
|
|
362
|
+
// exists in another file.
|
|
363
|
+
// ownFilePaths — a receiver typed by construction resolves through the
|
|
364
|
+
// shared, POLYGLOT class registry, so a producer can
|
|
365
|
+
// resolve into another language with its members
|
|
366
|
+
// legitimately in that same file. File equality passes
|
|
367
|
+
// there; only the language restriction closes it.
|
|
368
|
+
const producerDef = findCallableBindingInScope(site.inScope, producerRef, indexes);
|
|
369
|
+
let producerFile = producerDef?.filePath;
|
|
370
|
+
// MEMBER-CALL PRODUCERS (W2-1). Tried only where the callable lookup above
|
|
371
|
+
// DECLINED, so every reference that resolved before resolves identically —
|
|
372
|
+
// this adds a case, it does not reroute the existing one.
|
|
373
|
+
//
|
|
374
|
+
// `const r = svc.make()` binds the spelling `svc.make`. Slicing that to its
|
|
375
|
+
// last segment leaves `make`, which is a METHOD and so never a callable
|
|
376
|
+
// binding in scope; the lookup failed and the pass declined. The limit was
|
|
377
|
+
// documented as needing inter-procedural receiver typing, but measured, the
|
|
378
|
+
// pipeline had already done the hard part: `svc.make()` resolves to its
|
|
379
|
+
// Method node as an ordinary CALLS edge, and R3-4 anchors the returned
|
|
380
|
+
// literal's keys to that method, so `SignalService.make.secretFlag` already
|
|
381
|
+
// existed as a node. Only this join was missing.
|
|
382
|
+
//
|
|
383
|
+
// Nothing new is inferred. The receiver is typed by the SAME predicate that
|
|
384
|
+
// typed `r` above, and it must resolve to a class of its own — a receiver
|
|
385
|
+
// that cannot be typed still declines. The owner segment is then TWO parts
|
|
386
|
+
// (`SignalService.make`) rather than one, which is exactly how R3-4
|
|
387
|
+
// qualifies a key returned from a method, and it is what separates two
|
|
388
|
+
// methods on one class that return the same key name from each other and
|
|
389
|
+
// from a free function of that name.
|
|
390
|
+
if (producerFile === undefined) {
|
|
391
|
+
const dotAt = producerRef.lastIndexOf('.');
|
|
392
|
+
if (dotAt <= 0)
|
|
393
|
+
continue;
|
|
394
|
+
const receiverExpr = producerRef.slice(0, dotAt);
|
|
395
|
+
const methodName = producerRef.slice(dotAt + 1);
|
|
396
|
+
if (methodName.length === 0)
|
|
397
|
+
continue;
|
|
398
|
+
const ownerType = findReceiverTypeBinding(site.inScope, receiverExpr, indexes)?.rawName;
|
|
399
|
+
if (ownerType === undefined || ownerType.length === 0)
|
|
400
|
+
continue;
|
|
401
|
+
const ownerDef = findClassBindingInScope(site.inScope, ownerType, indexes);
|
|
402
|
+
if (ownerDef === undefined)
|
|
403
|
+
continue;
|
|
404
|
+
producer = `${ownerType}.${methodName}`;
|
|
405
|
+
producerFile = ownerDef.filePath;
|
|
406
|
+
}
|
|
407
|
+
if (producerFile === undefined)
|
|
408
|
+
continue;
|
|
409
|
+
if (!ownFilePaths.has(producerFile))
|
|
410
|
+
continue;
|
|
411
|
+
const candidates = propertyNameIndex.get(site.name);
|
|
412
|
+
if (candidates === undefined)
|
|
413
|
+
continue;
|
|
414
|
+
const owned = candidates.filter((c) => c.filePath === producerFile && idNamesMember(c.id, producer, site.name));
|
|
415
|
+
// Exactly one, or nothing. Two nodes claiming `<producer>.<member>` would
|
|
416
|
+
// mean the id qualifier failed to separate them, and picking between them
|
|
417
|
+
// would be the guess this pass exists to avoid.
|
|
418
|
+
if (owned.length !== 1) {
|
|
419
|
+
if (owned.length === 0) {
|
|
420
|
+
memberNotOnShape++;
|
|
421
|
+
// CLAIM THE SITE ANYWAY. This branch is the strongest NEGATIVE
|
|
422
|
+
// evidence the pipeline can produce: the receiver is typed to a
|
|
423
|
+
// producer, that producer's shape is known, and it owns no member of
|
|
424
|
+
// this name. Falling through let the 0.5 name fallback answer a
|
|
425
|
+
// question the precise pass had just DISPROVED — measured, it linked
|
|
426
|
+
// a read to an unrelated same-named key in another file. Disproving a
|
|
427
|
+
// member and then inventing it one pass later is worse than either
|
|
428
|
+
// answer alone.
|
|
429
|
+
handledSink.add(siteKey);
|
|
430
|
+
}
|
|
431
|
+
continue;
|
|
432
|
+
}
|
|
433
|
+
const target = owned[0];
|
|
434
|
+
const callerGraphId = resolveCallerGraphId(site.inScope, indexes, nodeLookup, site.atRange);
|
|
435
|
+
if (callerGraphId === undefined)
|
|
436
|
+
continue;
|
|
437
|
+
if (callerGraphId === target.id)
|
|
438
|
+
continue;
|
|
439
|
+
const dedupKey = `ACCESSES:${callerGraphId}->${target.id}:${site.atRange.startLine}:${site.atRange.startCol}`;
|
|
440
|
+
if (seen.has(dedupKey))
|
|
441
|
+
continue;
|
|
442
|
+
seen.add(dedupKey);
|
|
443
|
+
graph.addRelationship({
|
|
444
|
+
id: `rel:${dedupKey}`,
|
|
445
|
+
sourceId: callerGraphId,
|
|
446
|
+
targetId: target.id,
|
|
447
|
+
type: 'ACCESSES',
|
|
448
|
+
confidence: RETURN_SHAPE_CONFIDENCE,
|
|
449
|
+
reason: `${EDGE_REASON}: ${site.kind}`,
|
|
450
|
+
evidence: [],
|
|
451
|
+
});
|
|
452
|
+
// Claim the site so the name fallback cannot re-answer it differently.
|
|
453
|
+
handledSink.add(siteKey);
|
|
454
|
+
emitted++;
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
return { emitted, memberNotOnShape };
|
|
458
|
+
}
|