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
|
@@ -1,9 +1,28 @@
|
|
|
1
|
+
import type { MixedChainStep } from '../../../_shared/index.js';
|
|
1
2
|
import type { SyntaxNode } from './ast-helpers.js';
|
|
2
3
|
/** Node types representing call expressions across supported languages. */
|
|
3
4
|
export declare const CALL_EXPRESSION_TYPES: Set<string>;
|
|
4
5
|
/**
|
|
5
6
|
* Hard limit on chain depth to prevent runaway recursion.
|
|
6
7
|
* For `a.b().c().d()`, the chain has depth 2 (b and c before d).
|
|
8
|
+
*
|
|
9
|
+
* A chain deeper than this is DISCARDED WHOLE, not truncated:
|
|
10
|
+
* `extractMixedChain` returns an undefined base and the encoder refuses to mint
|
|
11
|
+
* a partial chain, because a base-side prefix decodes cleanly as a shorter,
|
|
12
|
+
* complete-looking chain and would type the receiver against the wrong member.
|
|
13
|
+
* Correct, but it means a builder chain one hop too long contributes nothing at
|
|
14
|
+
* all rather than degrading.
|
|
15
|
+
*
|
|
16
|
+
* DELIBERATELY NOT RAISED. Measured (see bench/receiver-resolution/BASELINE.md,
|
|
17
|
+
* `fourHopChain`): a 4-step chain mints NOTHING at this cap — confirmed by
|
|
18
|
+
* probing the emitter directly — and the site still RESOLVES, because the text
|
|
19
|
+
* cascade that owns the fallback path runs to `COMPOUND_RECEIVER_MAX_DEPTH` (8)
|
|
20
|
+
* and answers where the structural fold declined.
|
|
21
|
+
*
|
|
22
|
+
* So the cap bounds which chains are typed STRUCTURALLY, not which calls
|
|
23
|
+
* resolve. Raising it moves work from the cascade to the fold without changing
|
|
24
|
+
* any edge, and the fixture that proves it is committed so the next person to
|
|
25
|
+
* reach for this number has the measurement rather than the intuition.
|
|
7
26
|
*/
|
|
8
27
|
export declare const MAX_CHAIN_DEPTH = 3;
|
|
9
28
|
/**
|
|
@@ -31,11 +50,14 @@ export declare const extractReceiverName: (nameNode: SyntaxNode) => string | und
|
|
|
31
50
|
* can be found (e.g. top-level free calls).
|
|
32
51
|
*/
|
|
33
52
|
export declare const extractReceiverNode: (nameNode: SyntaxNode) => SyntaxNode | undefined;
|
|
34
|
-
/**
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
53
|
+
/**
|
|
54
|
+
* One step in a mixed receiver chain.
|
|
55
|
+
*
|
|
56
|
+
* Owned by `gitnexus-shared` — it is part of the ScopeExtractor output
|
|
57
|
+
* contract, and resolution consumes it. Re-exported here so the producer's
|
|
58
|
+
* existing importers keep a single import site.
|
|
59
|
+
*/
|
|
60
|
+
export type { MixedChainStep };
|
|
39
61
|
/**
|
|
40
62
|
* Walk a receiver AST node that is itself a call expression, accumulating the
|
|
41
63
|
* chain of intermediate method names up to MAX_CHAIN_DEPTH.
|
|
@@ -50,26 +72,9 @@ export declare function extractCallChain(receiverCallNode: SyntaxNode): {
|
|
|
50
72
|
chain: string[];
|
|
51
73
|
baseReceiverName: string | undefined;
|
|
52
74
|
} | undefined;
|
|
53
|
-
/**
|
|
54
|
-
* Walk a receiver AST node that may interleave field accesses and method calls,
|
|
55
|
-
* building a unified chain of steps up to MAX_CHAIN_DEPTH.
|
|
56
|
-
*
|
|
57
|
-
* For `svc.getUser().address.save()`, called with the receiver of `save`
|
|
58
|
-
* (`svc.getUser().address`, a field access node):
|
|
59
|
-
* returns { chain: [{ kind:'call', name:'getUser' }, { kind:'field', name:'address' }],
|
|
60
|
-
* baseReceiverName: 'svc' }
|
|
61
|
-
*
|
|
62
|
-
* For `user.getAddress().city.getName()`, called with receiver of `getName`
|
|
63
|
-
* (`user.getAddress().city`):
|
|
64
|
-
* returns { chain: [{ kind:'call', name:'getAddress' }, { kind:'field', name:'city' }],
|
|
65
|
-
* baseReceiverName: 'user' }
|
|
66
|
-
*
|
|
67
|
-
* Pure field chains and pure call chains are special cases (all steps same kind).
|
|
68
|
-
*/
|
|
69
75
|
export declare function extractMixedChain(receiverNode: SyntaxNode): {
|
|
70
76
|
chain: MixedChainStep[];
|
|
71
77
|
baseReceiverName: string | undefined;
|
|
72
78
|
} | undefined;
|
|
73
79
|
/** Arg types per call position (literals + optional TypeEnv for ids); undefined if unusable */
|
|
74
80
|
export declare const extractCallArgTypes: (callNode: SyntaxNode, inferLiteralType: (node: SyntaxNode) => string | undefined, typeEnvLookup?: (varName: string, callNode: SyntaxNode) => string | undefined) => (string | undefined)[] | undefined;
|
|
75
|
-
export {};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { CALL_ARGUMENT_LIST_TYPES } from './ast-helpers.js';
|
|
2
|
+
import { subscriptBase } from './callable-flow-captures.js';
|
|
2
3
|
/** Node types representing call expressions across supported languages. */
|
|
3
4
|
export const CALL_EXPRESSION_TYPES = new Set([
|
|
4
5
|
'call_expression', // TS/JS/C/C++/Go/Rust
|
|
@@ -11,6 +12,24 @@ export const CALL_EXPRESSION_TYPES = new Set([
|
|
|
11
12
|
/**
|
|
12
13
|
* Hard limit on chain depth to prevent runaway recursion.
|
|
13
14
|
* For `a.b().c().d()`, the chain has depth 2 (b and c before d).
|
|
15
|
+
*
|
|
16
|
+
* A chain deeper than this is DISCARDED WHOLE, not truncated:
|
|
17
|
+
* `extractMixedChain` returns an undefined base and the encoder refuses to mint
|
|
18
|
+
* a partial chain, because a base-side prefix decodes cleanly as a shorter,
|
|
19
|
+
* complete-looking chain and would type the receiver against the wrong member.
|
|
20
|
+
* Correct, but it means a builder chain one hop too long contributes nothing at
|
|
21
|
+
* all rather than degrading.
|
|
22
|
+
*
|
|
23
|
+
* DELIBERATELY NOT RAISED. Measured (see bench/receiver-resolution/BASELINE.md,
|
|
24
|
+
* `fourHopChain`): a 4-step chain mints NOTHING at this cap — confirmed by
|
|
25
|
+
* probing the emitter directly — and the site still RESOLVES, because the text
|
|
26
|
+
* cascade that owns the fallback path runs to `COMPOUND_RECEIVER_MAX_DEPTH` (8)
|
|
27
|
+
* and answers where the structural fold declined.
|
|
28
|
+
*
|
|
29
|
+
* So the cap bounds which chains are typed STRUCTURALLY, not which calls
|
|
30
|
+
* resolve. Raising it moves work from the cascade to the fold without changing
|
|
31
|
+
* any edge, and the fixture that proves it is committed so the next person to
|
|
32
|
+
* reach for this number has the measurement rather than the intuition.
|
|
14
33
|
*/
|
|
15
34
|
export const MAX_CHAIN_DEPTH = 3;
|
|
16
35
|
/**
|
|
@@ -296,6 +315,46 @@ export const extractReceiverNode = (nameNode) => {
|
|
|
296
315
|
};
|
|
297
316
|
// ── Chained-call extraction ───────────────────────────────────────────────
|
|
298
317
|
/** Node types representing member/field access across languages. */
|
|
318
|
+
/**
|
|
319
|
+
* Await expressions, per grammar. The walk previously stopped here — an await
|
|
320
|
+
* node is neither a call nor a field access — so `(await svc.getUserAsync()).save()`
|
|
321
|
+
* minted NO chain at all and the receiver fell to the text cascade.
|
|
322
|
+
*/
|
|
323
|
+
const AWAIT_EXPRESSION_NODE_TYPES = new Set([
|
|
324
|
+
'await_expression', // TS/JS/C#/Rust
|
|
325
|
+
'await', // Python
|
|
326
|
+
]);
|
|
327
|
+
/**
|
|
328
|
+
* Subscript / index expressions, per grammar. Same story as await: the walk
|
|
329
|
+
* stopped, so `repos[0].save()` minted no chain — which is why `indexElement`
|
|
330
|
+
* is an INVISIBLE-GAP (no edge AND no recorded drop) in all 14 languages, the
|
|
331
|
+
* most uniform cell in the matrix.
|
|
332
|
+
*/
|
|
333
|
+
const SUBSCRIPT_NODE_TYPES = new Set([
|
|
334
|
+
'subscript_expression', // TS/JS/PHP/C/C++
|
|
335
|
+
'subscript', // Python
|
|
336
|
+
'index_expression', // Go/Rust
|
|
337
|
+
'element_access_expression', // C#
|
|
338
|
+
'array_access', // Java
|
|
339
|
+
'indexing_expression', // Kotlin
|
|
340
|
+
]);
|
|
341
|
+
/**
|
|
342
|
+
* Can the chain walk descend into this node, or is it the base?
|
|
343
|
+
*
|
|
344
|
+
* ONE predicate for all four branches. The call and field branches previously
|
|
345
|
+
* tested only the call/field sets, so a receiver like `x[0].f().g()` stopped at
|
|
346
|
+
* the subscript and returned the literal text `x[0]` as the base — which
|
|
347
|
+
* `isEncodableSegment` accepts, minting a chain whose base binds to nothing. And
|
|
348
|
+
* `(await f()).g.h()` returned `await f()`, rejected on whitespace, minting no
|
|
349
|
+
* chain at all. Adding a fifth step kind must not require remembering four
|
|
350
|
+
* separate call sites.
|
|
351
|
+
*/
|
|
352
|
+
function isChainableReceiverNode(node) {
|
|
353
|
+
return (CALL_EXPRESSION_TYPES.has(node.type) ||
|
|
354
|
+
FIELD_ACCESS_NODE_TYPES.has(node.type) ||
|
|
355
|
+
AWAIT_EXPRESSION_NODE_TYPES.has(node.type) ||
|
|
356
|
+
SUBSCRIPT_NODE_TYPES.has(node.type));
|
|
357
|
+
}
|
|
299
358
|
const FIELD_ACCESS_NODE_TYPES = new Set([
|
|
300
359
|
'member_expression', // TS/JS
|
|
301
360
|
'member_access_expression', // C#
|
|
@@ -381,7 +440,10 @@ export function extractCallChain(receiverCallNode) {
|
|
|
381
440
|
}
|
|
382
441
|
else {
|
|
383
442
|
// Reached a simple identifier — the base receiver
|
|
384
|
-
return {
|
|
443
|
+
return {
|
|
444
|
+
chain,
|
|
445
|
+
baseReceiverName: unwrapTransparentReceiver(innerReceiver).text || undefined,
|
|
446
|
+
};
|
|
385
447
|
}
|
|
386
448
|
}
|
|
387
449
|
return chain.length > 0 ? { chain, baseReceiverName: undefined } : undefined;
|
|
@@ -402,10 +464,91 @@ export function extractCallChain(receiverCallNode) {
|
|
|
402
464
|
*
|
|
403
465
|
* Pure field chains and pure call chains are special cases (all steps same kind).
|
|
404
466
|
*/
|
|
467
|
+
/**
|
|
468
|
+
* Node types that wrap an expression without changing what it denotes, so a
|
|
469
|
+
* receiver chain's BASE can be read through them.
|
|
470
|
+
*
|
|
471
|
+
* `svc!` (TS non-null assertion) and `(svc)` denote exactly `svc`; taking the
|
|
472
|
+
* wrapper's own text instead yields `svc!` / `(svc)`, which matches no binding
|
|
473
|
+
* and silently costs the chain its base.
|
|
474
|
+
*
|
|
475
|
+
* Deliberately EXCLUDES a cast (`x as T`, `(T)x`): a cast changes the type an
|
|
476
|
+
* expression denotes, so reading through one would type the receiver as the
|
|
477
|
+
* operand rather than as the cast target.
|
|
478
|
+
*
|
|
479
|
+
* Keyed by node type; the value is the operator text that has to TERMINATE the
|
|
480
|
+
* node for the peel to apply, or `null` for a node type that is transparent
|
|
481
|
+
* unconditionally.
|
|
482
|
+
*
|
|
483
|
+
* The gated entry exists because Swift force-unwrap (`self.a!`) is the exact
|
|
484
|
+
* semantic of TypeScript's `non_null_expression` — it yields the wrapped type —
|
|
485
|
+
* but Swift parses it as the general `postfix_expression`, which ALSO carries
|
|
486
|
+
* user-defined postfix operators. Those can return anything, so peeling that
|
|
487
|
+
* node type unconditionally would type the receiver as the operand and could
|
|
488
|
+
* produce a confidently wrong owner. Reading the operator keeps the peel to the
|
|
489
|
+
* case that is provably type-preserving.
|
|
490
|
+
*/
|
|
491
|
+
const TRANSPARENT_RECEIVER_WRAPPERS = new Map([
|
|
492
|
+
['non_null_expression', null], // TypeScript `svc!`
|
|
493
|
+
['parenthesized_expression', null], // `(svc)`
|
|
494
|
+
// NOT Swift-only: Kotlin's `!!` non-null assertion parses as the same node type
|
|
495
|
+
// and is equally type-preserving, so it is peeled too. Measured — the
|
|
496
|
+
// receiver-resolution bench moved `kotlin.nonNullAssert` VISIBLE-GAP ->
|
|
497
|
+
// RESOLVES when this landed, which is how the Kotlin effect was discovered
|
|
498
|
+
// rather than assumed. Any other grammar emitting `postfix_expression` is
|
|
499
|
+
// affected as well; the `!` gate, not the language, is what bounds this.
|
|
500
|
+
['postfix_expression', '!'], // Swift `self.a!`, Kotlin `a!!`
|
|
501
|
+
]);
|
|
502
|
+
/** Is `node` a wrapper that denotes exactly what its operand denotes? */
|
|
503
|
+
function isTransparentReceiverWrapper(node) {
|
|
504
|
+
// `node.type` is a native getter, and this predicate runs on every receiver
|
|
505
|
+
// node. Crossing it twice for two separate table lookups measured 376 ns/check
|
|
506
|
+
// against 188 ns for the single read below.
|
|
507
|
+
const operator = TRANSPARENT_RECEIVER_WRAPPERS.get(node.type);
|
|
508
|
+
// `undefined` is "not in the table"; `null` is "in the table, ungated". The
|
|
509
|
+
// two are distinguishable, so one `get` answers both questions — no separate
|
|
510
|
+
// `has` probe, and one crossing of the native `node.type` getter.
|
|
511
|
+
if (operator === undefined)
|
|
512
|
+
return false;
|
|
513
|
+
if (operator === null)
|
|
514
|
+
return true;
|
|
515
|
+
// The operator is an anonymous token, so it is not in `namedChildren`; the
|
|
516
|
+
// node's own text is the reliable place to read it. Deliberately NOT
|
|
517
|
+
// `node.lastChild` — measured 3x SLOWER (the child wrapper allocation
|
|
518
|
+
// dominates), and the token surfaces with type `bang`, not `!`.
|
|
519
|
+
return node.text.trimEnd().endsWith(operator);
|
|
520
|
+
}
|
|
521
|
+
/**
|
|
522
|
+
* Iteration bound for the wrapper peel. Its OWN constant, not `MAX_CHAIN_DEPTH`.
|
|
523
|
+
*
|
|
524
|
+
* The two answer unrelated questions — "how many chain hops do we type?" versus
|
|
525
|
+
* "how many redundant parens might someone write?" — and sharing one number
|
|
526
|
+
* meant raising the chain cap silently widened this loop as a side effect. That
|
|
527
|
+
* coupling is easy to miss precisely because the shared name reads as
|
|
528
|
+
* intentional. `((x))` nests twice; nothing real nests deeply.
|
|
529
|
+
*/
|
|
530
|
+
const MAX_TRANSPARENT_WRAPPER_DEPTH = 3;
|
|
531
|
+
/** Peel transparent wrappers off a base receiver node. */
|
|
532
|
+
function unwrapTransparentReceiver(node) {
|
|
533
|
+
let current = node;
|
|
534
|
+
for (let i = 0; i < MAX_TRANSPARENT_WRAPPER_DEPTH && isTransparentReceiverWrapper(current); i++) {
|
|
535
|
+
const inner = current.namedChildren?.find((c) => c !== null);
|
|
536
|
+
if (inner === undefined || inner === null)
|
|
537
|
+
break;
|
|
538
|
+
current = inner;
|
|
539
|
+
}
|
|
540
|
+
return current;
|
|
541
|
+
}
|
|
405
542
|
export function extractMixedChain(receiverNode) {
|
|
406
543
|
const chain = [];
|
|
407
544
|
let current = receiverNode;
|
|
408
545
|
while (chain.length < MAX_CHAIN_DEPTH) {
|
|
546
|
+
// Peel transparent wrappers at LOOP ENTRY, not only where a base is
|
|
547
|
+
// returned. `(await svc.getUserAsync()).save()` hands this walk a
|
|
548
|
+
// `parenthesized_expression`, which matches no branch below, so the walk
|
|
549
|
+
// fell straight through to the base case with an empty chain and minted
|
|
550
|
+
// nothing — the await step could never be reached.
|
|
551
|
+
current = unwrapTransparentReceiver(current);
|
|
409
552
|
if (CALL_EXPRESSION_TYPES.has(current.type)) {
|
|
410
553
|
// ── Call expression: extract method name + inner receiver ────────────
|
|
411
554
|
const funcNode = current.childForFieldName?.('function') ??
|
|
@@ -458,12 +601,14 @@ export function extractMixedChain(receiverNode) {
|
|
|
458
601
|
}
|
|
459
602
|
if (!innerReceiver)
|
|
460
603
|
break;
|
|
461
|
-
if (
|
|
462
|
-
FIELD_ACCESS_NODE_TYPES.has(innerReceiver.type)) {
|
|
604
|
+
if (isChainableReceiverNode(innerReceiver)) {
|
|
463
605
|
current = innerReceiver;
|
|
464
606
|
}
|
|
465
607
|
else {
|
|
466
|
-
return {
|
|
608
|
+
return {
|
|
609
|
+
chain,
|
|
610
|
+
baseReceiverName: unwrapTransparentReceiver(innerReceiver).text || undefined,
|
|
611
|
+
};
|
|
467
612
|
}
|
|
468
613
|
}
|
|
469
614
|
else if (FIELD_ACCESS_NODE_TYPES.has(current.type)) {
|
|
@@ -506,12 +651,62 @@ export function extractMixedChain(receiverNode) {
|
|
|
506
651
|
chain.unshift({ kind: 'field', name: propertyName });
|
|
507
652
|
if (!innerObject)
|
|
508
653
|
break;
|
|
509
|
-
if (
|
|
510
|
-
FIELD_ACCESS_NODE_TYPES.has(innerObject.type)) {
|
|
654
|
+
if (isChainableReceiverNode(innerObject)) {
|
|
511
655
|
current = innerObject;
|
|
512
656
|
}
|
|
513
657
|
else {
|
|
514
|
-
return {
|
|
658
|
+
return {
|
|
659
|
+
chain,
|
|
660
|
+
baseReceiverName: unwrapTransparentReceiver(innerObject).text || undefined,
|
|
661
|
+
};
|
|
662
|
+
}
|
|
663
|
+
}
|
|
664
|
+
else if (AWAIT_EXPRESSION_NODE_TYPES.has(current.type)) {
|
|
665
|
+
// Name-free: the awaited call's method name already lives on its own
|
|
666
|
+
// `call` step, so this records only that an await happened.
|
|
667
|
+
chain.unshift({ kind: 'await' });
|
|
668
|
+
const inner = current.childForFieldName?.('argument') ??
|
|
669
|
+
current.childForFieldName?.('expression') ??
|
|
670
|
+
current.namedChildren?.find((c) => c !== null) ??
|
|
671
|
+
null;
|
|
672
|
+
if (!inner)
|
|
673
|
+
break;
|
|
674
|
+
if (isChainableReceiverNode(inner)) {
|
|
675
|
+
current = inner;
|
|
676
|
+
}
|
|
677
|
+
else {
|
|
678
|
+
return {
|
|
679
|
+
chain,
|
|
680
|
+
baseReceiverName: unwrapTransparentReceiver(inner).text || undefined,
|
|
681
|
+
};
|
|
682
|
+
}
|
|
683
|
+
}
|
|
684
|
+
else if (SUBSCRIPT_NODE_TYPES.has(current.type)) {
|
|
685
|
+
// Name-free: a subscript key is a VALUE, not an identifier the resolver
|
|
686
|
+
// could look up, so there is no member name to record.
|
|
687
|
+
chain.unshift({ kind: 'index' });
|
|
688
|
+
// Shared per-grammar table — it knows Python's `value` and Java's `array`,
|
|
689
|
+
// which a locally-written ladder omitted (they worked only because the
|
|
690
|
+
// container happened to be the first named child, an ordering coincidence
|
|
691
|
+
// rather than a contract). Falls back for grammars whose subscript node
|
|
692
|
+
// carries no `index` field.
|
|
693
|
+
const obj = subscriptBase(current) ??
|
|
694
|
+
current.childForFieldName?.('object') ??
|
|
695
|
+
current.childForFieldName?.('argument') ??
|
|
696
|
+
current.childForFieldName?.('operand') ??
|
|
697
|
+
current.childForFieldName?.('expression') ??
|
|
698
|
+
current.namedChildren?.find((c) => c !== null) ??
|
|
699
|
+
null;
|
|
700
|
+
if (!obj)
|
|
701
|
+
break;
|
|
702
|
+
if (isChainableReceiverNode(obj)) {
|
|
703
|
+
current = obj;
|
|
704
|
+
}
|
|
705
|
+
else {
|
|
706
|
+
return {
|
|
707
|
+
chain,
|
|
708
|
+
baseReceiverName: unwrapTransparentReceiver(obj).text || undefined,
|
|
709
|
+
};
|
|
515
710
|
}
|
|
516
711
|
}
|
|
517
712
|
else if (current.type === 'selector') {
|
|
@@ -6,6 +6,53 @@
|
|
|
6
6
|
* callable signatures, protocol invocation names). The central extractor
|
|
7
7
|
* never sees a parser node and shared ingestion code never branches on a
|
|
8
8
|
* language name.
|
|
9
|
+
*
|
|
10
|
+
* ## The cell/site model
|
|
11
|
+
*
|
|
12
|
+
* A *cell* is a named storage location that may hold a callable — a variable,
|
|
13
|
+
* parameter, field or pointer, canonicalized to a binding key by the scope
|
|
14
|
+
* tree. A *site* is one observed fact about cells, emitted here as a capture
|
|
15
|
+
* match and consumed by `passes/callable-value-flow.ts`, which runs them to a
|
|
16
|
+
* fixpoint. The site kinds (`CallableFlowSite`) are:
|
|
17
|
+
*
|
|
18
|
+
* - `seed` — a cell acquires a named callable: `f = target`. Carries
|
|
19
|
+
* `@callable-flow.target-name`, the name the pass resolves against.
|
|
20
|
+
* - `copy` / `alias` — a cell takes another cell's contents, so targets flow
|
|
21
|
+
* between them.
|
|
22
|
+
* - `address` / `store` / `load` — indirection through a pointer cell.
|
|
23
|
+
* - `formal` — a parameter cell of a known function, by index.
|
|
24
|
+
* - `argument` — a callable passed at a call site, binding to that `formal`.
|
|
25
|
+
* - `invoke` — a call THROUGH a cell (`f()`), the site that ultimately becomes
|
|
26
|
+
* a `CALLS` edge once the cell's target set is known.
|
|
27
|
+
*
|
|
28
|
+
* ## The anonymous-callable convention
|
|
29
|
+
*
|
|
30
|
+
* A closure literal has no name to resolve against, so a `seed` whose source
|
|
31
|
+
* is an anonymous callable takes its **destination's** name as
|
|
32
|
+
* `@callable-flow.target-name` — `val f = { }` seeds "the cell `f` holds the
|
|
33
|
+
* callable named `f`". That is deliberately self-referential and only resolves
|
|
34
|
+
* because the binding itself is a callable target: `buildGraphTargetIndex`
|
|
35
|
+
* admits it on the label of the graph node it resolves to, which #2687 makes a
|
|
36
|
+
* `Function` for exactly this construct. Languages whose closure binding does
|
|
37
|
+
* NOT emit a callable graph node get no resolution from the convention alone
|
|
38
|
+
* (#2693).
|
|
39
|
+
*
|
|
40
|
+
* ## Adding a language
|
|
41
|
+
*
|
|
42
|
+
* Supply `CallableFlowCaptureOptions` from `<lang>/captures.ts` and call
|
|
43
|
+
* `synthesizeCallableFlowCaptures`. Two recurring traps:
|
|
44
|
+
*
|
|
45
|
+
* - A **fieldless** assignment/binding node decomposes to nothing under the
|
|
46
|
+
* shared `left`/`name`/`value` fallback in `assignmentParts`. Supply
|
|
47
|
+
* `extractAssignment` (Kotlin's `assignment`, Dart's
|
|
48
|
+
* `initialized_identifier`). Returning `undefined` falls back to the shared
|
|
49
|
+
* path, so one callback can handle the odd node and leave the rest alone.
|
|
50
|
+
* - A binding needs a `SymbolDefinition` for the pass to attach to. Captures
|
|
51
|
+
* alone are not enough: without a `@declaration.*` for the bound name, the
|
|
52
|
+
* seed has no cell to key on.
|
|
53
|
+
*
|
|
54
|
+
* `c/captures.ts` is the fullest worked example (pointers, signatures,
|
|
55
|
+
* overload selection); `dart/captures.ts` the smallest interesting one.
|
|
9
56
|
*/
|
|
10
57
|
import type { CaptureMatch, ParameterTypeClass } from '../../../_shared/index.js';
|
|
11
58
|
import { type SyntaxNode } from './ast-helpers.js';
|
|
@@ -92,3 +139,15 @@ export interface CallableFlowCaptureOptions {
|
|
|
92
139
|
* linear in AST size (the scope-capture benchmark guards the scaling ratio).
|
|
93
140
|
*/
|
|
94
141
|
export declare function synthesizeCallableFlowCaptures(root: SyntaxNode, options: CallableFlowCaptureOptions): readonly CaptureMatch[];
|
|
142
|
+
/**
|
|
143
|
+
* For a subscript/index expression, the identifier of interest is always in
|
|
144
|
+
* the container operand, never the index: `tbl[i] = h` must bind the cell
|
|
145
|
+
* `tbl` (index-insensitive, Andersen-style), not the index variable `i` —
|
|
146
|
+
* seeding `i` both pollutes a same-named formal and misses the later
|
|
147
|
+
* `tbl[i]()` join (#2522 review). Field names cover the grammars that field
|
|
148
|
+
* their subscript nodes; others keep the generic traversal.
|
|
149
|
+
*/
|
|
150
|
+
/** The container operand of a subscript node, per grammar. Exported because the
|
|
151
|
+
* receiver-chain walk needs the same per-grammar answer — two divergent field
|
|
152
|
+
* tables for one question is how a new grammar gets half-supported. */
|
|
153
|
+
export declare function subscriptBase(node: SyntaxNode): SyntaxNode | null;
|
|
@@ -6,6 +6,53 @@
|
|
|
6
6
|
* callable signatures, protocol invocation names). The central extractor
|
|
7
7
|
* never sees a parser node and shared ingestion code never branches on a
|
|
8
8
|
* language name.
|
|
9
|
+
*
|
|
10
|
+
* ## The cell/site model
|
|
11
|
+
*
|
|
12
|
+
* A *cell* is a named storage location that may hold a callable — a variable,
|
|
13
|
+
* parameter, field or pointer, canonicalized to a binding key by the scope
|
|
14
|
+
* tree. A *site* is one observed fact about cells, emitted here as a capture
|
|
15
|
+
* match and consumed by `passes/callable-value-flow.ts`, which runs them to a
|
|
16
|
+
* fixpoint. The site kinds (`CallableFlowSite`) are:
|
|
17
|
+
*
|
|
18
|
+
* - `seed` — a cell acquires a named callable: `f = target`. Carries
|
|
19
|
+
* `@callable-flow.target-name`, the name the pass resolves against.
|
|
20
|
+
* - `copy` / `alias` — a cell takes another cell's contents, so targets flow
|
|
21
|
+
* between them.
|
|
22
|
+
* - `address` / `store` / `load` — indirection through a pointer cell.
|
|
23
|
+
* - `formal` — a parameter cell of a known function, by index.
|
|
24
|
+
* - `argument` — a callable passed at a call site, binding to that `formal`.
|
|
25
|
+
* - `invoke` — a call THROUGH a cell (`f()`), the site that ultimately becomes
|
|
26
|
+
* a `CALLS` edge once the cell's target set is known.
|
|
27
|
+
*
|
|
28
|
+
* ## The anonymous-callable convention
|
|
29
|
+
*
|
|
30
|
+
* A closure literal has no name to resolve against, so a `seed` whose source
|
|
31
|
+
* is an anonymous callable takes its **destination's** name as
|
|
32
|
+
* `@callable-flow.target-name` — `val f = { }` seeds "the cell `f` holds the
|
|
33
|
+
* callable named `f`". That is deliberately self-referential and only resolves
|
|
34
|
+
* because the binding itself is a callable target: `buildGraphTargetIndex`
|
|
35
|
+
* admits it on the label of the graph node it resolves to, which #2687 makes a
|
|
36
|
+
* `Function` for exactly this construct. Languages whose closure binding does
|
|
37
|
+
* NOT emit a callable graph node get no resolution from the convention alone
|
|
38
|
+
* (#2693).
|
|
39
|
+
*
|
|
40
|
+
* ## Adding a language
|
|
41
|
+
*
|
|
42
|
+
* Supply `CallableFlowCaptureOptions` from `<lang>/captures.ts` and call
|
|
43
|
+
* `synthesizeCallableFlowCaptures`. Two recurring traps:
|
|
44
|
+
*
|
|
45
|
+
* - A **fieldless** assignment/binding node decomposes to nothing under the
|
|
46
|
+
* shared `left`/`name`/`value` fallback in `assignmentParts`. Supply
|
|
47
|
+
* `extractAssignment` (Kotlin's `assignment`, Dart's
|
|
48
|
+
* `initialized_identifier`). Returning `undefined` falls back to the shared
|
|
49
|
+
* path, so one callback can handle the odd node and leave the rest alone.
|
|
50
|
+
* - A binding needs a `SymbolDefinition` for the pass to attach to. Captures
|
|
51
|
+
* alone are not enough: without a `@declaration.*` for the bound name, the
|
|
52
|
+
* seed has no cell to key on.
|
|
53
|
+
*
|
|
54
|
+
* `c/captures.ts` is the fullest worked example (pointers, signatures,
|
|
55
|
+
* overload selection); `dart/captures.ts` the smallest interesting one.
|
|
9
56
|
*/
|
|
10
57
|
import { nodeToCapture, syntheticCapture } from './ast-helpers.js';
|
|
11
58
|
/**
|
|
@@ -733,7 +780,10 @@ function unaryOperator(node) {
|
|
|
733
780
|
* `tbl[i]()` join (#2522 review). Field names cover the grammars that field
|
|
734
781
|
* their subscript nodes; others keep the generic traversal.
|
|
735
782
|
*/
|
|
736
|
-
|
|
783
|
+
/** The container operand of a subscript node, per grammar. Exported because the
|
|
784
|
+
* receiver-chain walk needs the same per-grammar answer — two divergent field
|
|
785
|
+
* tables for one question is how a new grammar gets half-supported. */
|
|
786
|
+
export function subscriptBase(node) {
|
|
737
787
|
if (node.childForFieldName('index') === null)
|
|
738
788
|
return null;
|
|
739
789
|
return (node.childForFieldName('argument') ?? // C/C++ subscript_expression
|
|
@@ -11,3 +11,28 @@ import type { NodeLabel } from '../../../_shared/index.js';
|
|
|
11
11
|
* qualified/simple key and a ctor chain becomes a self-loop (#1928 F38 / #2046).
|
|
12
12
|
*/
|
|
13
13
|
export declare function isOverloadableCallable(label: NodeLabel | undefined): boolean;
|
|
14
|
+
/**
|
|
15
|
+
* Labels whose FUNCTION-LOCAL declarations carry the enclosing-callable +
|
|
16
|
+
* position identity of #2699 (`Function:x.ts:run.save@3:2`).
|
|
17
|
+
*
|
|
18
|
+
* Wider than {@link isOverloadableCallable} on purpose. #2695 restricted the
|
|
19
|
+
* rule to callables because the collision that produced wrong CALLS edges was
|
|
20
|
+
* between callables, and widening churned ids for symbols the local-symbol
|
|
21
|
+
* pruner mostly deletes. But the issue's ORIGINAL complaint was about values:
|
|
22
|
+
* a top-level `const handler` and a function-local `const handler` collapsed
|
|
23
|
+
* onto one `Const:v.ts:handler`, and no callable gate ever reaches that. The
|
|
24
|
+
* limitation is closed here rather than carried.
|
|
25
|
+
*
|
|
26
|
+
* Only LOCALS are affected either way: the prefix comes from
|
|
27
|
+
* `enclosingCallablePrefix`, which returns `undefined` when nothing encloses
|
|
28
|
+
* the declaration, so top-level and class-member ids are untouched — that is
|
|
29
|
+
* what keeps this off the symbols other files and stored references address.
|
|
30
|
+
* A class field stays unqualified even inside a function, because the prefix
|
|
31
|
+
* walk boundaries on class-likes.
|
|
32
|
+
*
|
|
33
|
+
* ONE definition, deliberately: the id-building phase and the resolution phase
|
|
34
|
+
* must agree on this set or the caller attaches to a node that does not exist
|
|
35
|
+
* and the edge is silently dropped — the failure mode #2714 fixed, invisible
|
|
36
|
+
* from outside because "zero dangling edges" is what it looks like.
|
|
37
|
+
*/
|
|
38
|
+
export declare function isPositionQualifiedLocalLabel(label: NodeLabel | undefined): boolean;
|
|
@@ -12,3 +12,34 @@
|
|
|
12
12
|
export function isOverloadableCallable(label) {
|
|
13
13
|
return label === 'Function' || label === 'Method' || label === 'Constructor';
|
|
14
14
|
}
|
|
15
|
+
/**
|
|
16
|
+
* Labels whose FUNCTION-LOCAL declarations carry the enclosing-callable +
|
|
17
|
+
* position identity of #2699 (`Function:x.ts:run.save@3:2`).
|
|
18
|
+
*
|
|
19
|
+
* Wider than {@link isOverloadableCallable} on purpose. #2695 restricted the
|
|
20
|
+
* rule to callables because the collision that produced wrong CALLS edges was
|
|
21
|
+
* between callables, and widening churned ids for symbols the local-symbol
|
|
22
|
+
* pruner mostly deletes. But the issue's ORIGINAL complaint was about values:
|
|
23
|
+
* a top-level `const handler` and a function-local `const handler` collapsed
|
|
24
|
+
* onto one `Const:v.ts:handler`, and no callable gate ever reaches that. The
|
|
25
|
+
* limitation is closed here rather than carried.
|
|
26
|
+
*
|
|
27
|
+
* Only LOCALS are affected either way: the prefix comes from
|
|
28
|
+
* `enclosingCallablePrefix`, which returns `undefined` when nothing encloses
|
|
29
|
+
* the declaration, so top-level and class-member ids are untouched — that is
|
|
30
|
+
* what keeps this off the symbols other files and stored references address.
|
|
31
|
+
* A class field stays unqualified even inside a function, because the prefix
|
|
32
|
+
* walk boundaries on class-likes.
|
|
33
|
+
*
|
|
34
|
+
* ONE definition, deliberately: the id-building phase and the resolution phase
|
|
35
|
+
* must agree on this set or the caller attaches to a node that does not exist
|
|
36
|
+
* and the edge is silently dropped — the failure mode #2714 fixed, invisible
|
|
37
|
+
* from outside because "zero dangling edges" is what it looks like.
|
|
38
|
+
*/
|
|
39
|
+
export function isPositionQualifiedLocalLabel(label) {
|
|
40
|
+
return (isOverloadableCallable(label) ||
|
|
41
|
+
label === 'Variable' ||
|
|
42
|
+
label === 'Const' ||
|
|
43
|
+
label === 'Property' ||
|
|
44
|
+
label === 'Static');
|
|
45
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Effective RAM in bytes: physical total, or a REAL smaller cgroup limit
|
|
3
|
+
* (#2649). `process.constrainedMemory()` returns a huge sentinel when
|
|
4
|
+
* unconstrained, and only the leaf cgroup's limit is visible (parent-slice
|
|
5
|
+
* caps are not) — so a smaller-than-physical value is trusted and anything
|
|
6
|
+
* else falls back to `os.totalmem()`. Mirrors `computeHeapCapMb`'s
|
|
7
|
+
* constrained handling in `cli/analyze.ts`; container-blind sizing told
|
|
8
|
+
* users "this machine has more memory" inside an 8GB-limited container on
|
|
9
|
+
* a 64GB host, and sized worker heap caps past the whole container.
|
|
10
|
+
*/
|
|
11
|
+
export declare function effectiveRamBytes(): number;
|
|
12
|
+
/**
|
|
13
|
+
* The RAM-aware heap cap formula (#2649), single-sourced here so the CLI
|
|
14
|
+
* respawn (`computeHeapCapMb` in `cli/analyze.ts`), and the server's
|
|
15
|
+
* analyze fork size from the same rule: `0.75 × effective RAM`, raised to
|
|
16
|
+
* the floor when RAM allows, never above `0.80 × effective RAM`.
|
|
17
|
+
*/
|
|
18
|
+
export declare function heapCapMbFor(effectiveBytes: number): number;
|
|
19
|
+
/**
|
|
20
|
+
* True when the operator has turned GitNexus's memory autopilot off
|
|
21
|
+
* (`GITNEXUS_MEMORY=off`).
|
|
22
|
+
*
|
|
23
|
+
* One switch for one concern. Memory management has two automatic behaviours —
|
|
24
|
+
* re-running analyze with a RAM-aware heap cap, and aborting the parse before
|
|
25
|
+
* V8's ineffective-mark-compact death spiral — and an operator who wants to
|
|
26
|
+
* drive manually wants both off, not one. They were previously two separate
|
|
27
|
+
* variables (`GITNEXUS_AUTO_HEAP`, `GITNEXUS_HEAP_GUARD`), which is three knobs
|
|
28
|
+
* for one intent once the worker-heap override is counted; neither had shipped,
|
|
29
|
+
* so this consolidates them rather than deprecating anything.
|
|
30
|
+
*
|
|
31
|
+
* Note the ordinary way to pin the heap is Node's own `--max-old-space-size`,
|
|
32
|
+
* which `ensureHeap` already honours as the operator's decision. This switch is
|
|
33
|
+
* for declining the autopilot WITHOUT naming a size.
|
|
34
|
+
*
|
|
35
|
+
* Lives here beside the cap formula so policy and its escape hatch are
|
|
36
|
+
* single-sourced. Read every call (not memoized) so tests can stub the env.
|
|
37
|
+
*/
|
|
38
|
+
export declare function memoryAutopilotDisabled(): boolean;
|
|
39
|
+
/** The cap for THIS machine/container: `heapCapMbFor(effectiveRamBytes())`. */
|
|
40
|
+
export declare function autoHeapCapMb(): number;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import os from 'node:os';
|
|
2
|
+
/**
|
|
3
|
+
* Effective RAM in bytes: physical total, or a REAL smaller cgroup limit
|
|
4
|
+
* (#2649). `process.constrainedMemory()` returns a huge sentinel when
|
|
5
|
+
* unconstrained, and only the leaf cgroup's limit is visible (parent-slice
|
|
6
|
+
* caps are not) — so a smaller-than-physical value is trusted and anything
|
|
7
|
+
* else falls back to `os.totalmem()`. Mirrors `computeHeapCapMb`'s
|
|
8
|
+
* constrained handling in `cli/analyze.ts`; container-blind sizing told
|
|
9
|
+
* users "this machine has more memory" inside an 8GB-limited container on
|
|
10
|
+
* a 64GB host, and sized worker heap caps past the whole container.
|
|
11
|
+
*/
|
|
12
|
+
export function effectiveRamBytes() {
|
|
13
|
+
const total = os.totalmem();
|
|
14
|
+
const constrained = typeof process.constrainedMemory === 'function' ? process.constrainedMemory() : undefined;
|
|
15
|
+
return typeof constrained === 'number' && constrained > 0 && constrained < total
|
|
16
|
+
? constrained
|
|
17
|
+
: total;
|
|
18
|
+
}
|
|
19
|
+
/** Historical floor for the auto heap cap — applied only up to 0.80 × RAM
|
|
20
|
+
* (a floor at or above physical memory swap-thrashes instead of OOMing,
|
|
21
|
+
* #2649). */
|
|
22
|
+
const HEAP_FLOOR_MB = 16384;
|
|
23
|
+
/**
|
|
24
|
+
* The RAM-aware heap cap formula (#2649), single-sourced here so the CLI
|
|
25
|
+
* respawn (`computeHeapCapMb` in `cli/analyze.ts`), and the server's
|
|
26
|
+
* analyze fork size from the same rule: `0.75 × effective RAM`, raised to
|
|
27
|
+
* the floor when RAM allows, never above `0.80 × effective RAM`.
|
|
28
|
+
*/
|
|
29
|
+
export function heapCapMbFor(effectiveBytes) {
|
|
30
|
+
const effectiveMb = Math.floor(effectiveBytes / (1024 * 1024));
|
|
31
|
+
return Math.min(Math.max(HEAP_FLOOR_MB, Math.floor(0.75 * effectiveMb)), Math.floor(0.8 * effectiveMb));
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* True when the operator has turned GitNexus's memory autopilot off
|
|
35
|
+
* (`GITNEXUS_MEMORY=off`).
|
|
36
|
+
*
|
|
37
|
+
* One switch for one concern. Memory management has two automatic behaviours —
|
|
38
|
+
* re-running analyze with a RAM-aware heap cap, and aborting the parse before
|
|
39
|
+
* V8's ineffective-mark-compact death spiral — and an operator who wants to
|
|
40
|
+
* drive manually wants both off, not one. They were previously two separate
|
|
41
|
+
* variables (`GITNEXUS_AUTO_HEAP`, `GITNEXUS_HEAP_GUARD`), which is three knobs
|
|
42
|
+
* for one intent once the worker-heap override is counted; neither had shipped,
|
|
43
|
+
* so this consolidates them rather than deprecating anything.
|
|
44
|
+
*
|
|
45
|
+
* Note the ordinary way to pin the heap is Node's own `--max-old-space-size`,
|
|
46
|
+
* which `ensureHeap` already honours as the operator's decision. This switch is
|
|
47
|
+
* for declining the autopilot WITHOUT naming a size.
|
|
48
|
+
*
|
|
49
|
+
* Lives here beside the cap formula so policy and its escape hatch are
|
|
50
|
+
* single-sourced. Read every call (not memoized) so tests can stub the env.
|
|
51
|
+
*/
|
|
52
|
+
export function memoryAutopilotDisabled() {
|
|
53
|
+
return process.env.GITNEXUS_MEMORY === 'off';
|
|
54
|
+
}
|
|
55
|
+
/** The cap for THIS machine/container: `heapCapMbFor(effectiveRamBytes())`. */
|
|
56
|
+
export function autoHeapCapMb() {
|
|
57
|
+
return heapCapMbFor(effectiveRamBytes());
|
|
58
|
+
}
|
|
@@ -18,3 +18,17 @@
|
|
|
18
18
|
* must not shift. The clamp guards degenerate inputs (line 0 / empty files).
|
|
19
19
|
*/
|
|
20
20
|
export declare const toZeroBasedLine: (oneBasedLine: number) => number;
|
|
21
|
+
/**
|
|
22
|
+
* Convert a 0-based GraphNode `startLine`/`endLine` into the 1-based line space
|
|
23
|
+
* the CFG/PDG layer uses (`BasicBlock` ids and `functionStartLine` are built
|
|
24
|
+
* from `startPosition.row + 1`).
|
|
25
|
+
*
|
|
26
|
+
* This is the INTERNAL inverse of {@link toZeroBasedLine}, for joining graph
|
|
27
|
+
* rows against that layer. It is NOT the display converter: line numbers on
|
|
28
|
+
* their way out to a human or an LLM go through `mcp/local/line-display.ts`,
|
|
29
|
+
* which is documented as a response-boundary concern and passes `undefined`
|
|
30
|
+
* through. Here the arithmetic is the point, so the input must already be a
|
|
31
|
+
* number — a caller holding a possibly-absent value checks it first, exactly as
|
|
32
|
+
* the `typeof sym.startLine === 'number'` guards in `pdg-impact.ts` do.
|
|
33
|
+
*/
|
|
34
|
+
export declare const toOneBasedLine: (zeroBasedLine: number) => number;
|