gitnexus 1.6.10-rc.98 → 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/class-extractors/configs/jvm.js +6 -6
- 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 +129 -44
- 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 +16 -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 +311 -16
- 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/jvm.js +2 -2
- package/dist/core/ingestion/type-extractors/shared.d.ts +17 -0
- package/dist/core/ingestion/type-extractors/shared.js +16 -0
- package/dist/core/ingestion/type-extractors/types.d.ts +12 -0
- package/dist/core/ingestion/type-extractors/typescript.d.ts +20 -0
- package/dist/core/ingestion/type-extractors/typescript.js +26 -0
- package/dist/core/ingestion/utils/ast-helpers.d.ts +322 -16
- package/dist/core/ingestion/utils/ast-helpers.js +727 -150
- 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 -3
- package/dist/storage/parsedfile-store.js +76 -6
- package/dist/storage/repo-manager.d.ts +54 -435
- package/dist/storage/repo-manager.js +312 -215
- 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
|
@@ -9,8 +9,9 @@
|
|
|
9
9
|
* Returning `null` lets the finalize algorithm mark the edge as
|
|
10
10
|
* `linkStatus: 'unresolved'`.
|
|
11
11
|
*/
|
|
12
|
+
import { perFileSet } from '../../import-resolvers/per-file-set.js';
|
|
13
|
+
import { getPythonFileIndex, importerAncestors, importerDirOf, } from '../../import-resolvers/python-file-index.js';
|
|
12
14
|
import { resolvePythonImportInternal } from '../../import-resolvers/python.js';
|
|
13
|
-
import { recordPythonFileIndexBuild } from './index-stats.js';
|
|
14
15
|
export function resolvePythonImportTarget(parsedImport, workspaceIndex) {
|
|
15
16
|
// WorkspaceIndex is `unknown` in the shared contract (Ring 1
|
|
16
17
|
// placeholder). The scope-resolution orchestrator hands us a
|
|
@@ -33,6 +34,56 @@ export function resolvePythonImportTarget(parsedImport, workspaceIndex) {
|
|
|
33
34
|
return null;
|
|
34
35
|
if (parsedImport.targetRaw === null || parsedImport.targetRaw === '')
|
|
35
36
|
return null;
|
|
37
|
+
const submoduleTarget = pythonImportedSubmoduleTarget(parsedImport);
|
|
38
|
+
if (submoduleTarget !== null &&
|
|
39
|
+
(parsedImport.kind === 'named' || parsedImport.kind === 'alias')) {
|
|
40
|
+
// Python's IMPORT_FROM first reads an attribute already exported by the
|
|
41
|
+
// package and only loads a same-named submodule when that attribute is
|
|
42
|
+
// absent. Preserve that precedence when parsed workspace facts are
|
|
43
|
+
// available; the flag suppresses this submodule probe in the recursive
|
|
44
|
+
// base-package lookup.
|
|
45
|
+
const packageTarget = resolvePythonImportTarget({ ...parsedImport, targetIncludesImportedName: true }, workspaceIndex);
|
|
46
|
+
if (packageTarget !== null &&
|
|
47
|
+
pythonFileExportsName(packageTarget, parsedImport.importedName, ctx.parsedFiles)) {
|
|
48
|
+
return packageTarget;
|
|
49
|
+
}
|
|
50
|
+
const submodule = resolvePythonImportTarget({
|
|
51
|
+
kind: 'namespace',
|
|
52
|
+
localName: parsedImport.localName,
|
|
53
|
+
importedName: parsedImport.importedName,
|
|
54
|
+
targetRaw: submoduleTarget,
|
|
55
|
+
}, workspaceIndex);
|
|
56
|
+
if (submodule !== null)
|
|
57
|
+
return submodule;
|
|
58
|
+
// `return packageTarget`, not `if (packageTarget !== null) return …` —
|
|
59
|
+
// falling through when it is null RE-RAN THE ENTIRE TAIL BELOW, a second
|
|
60
|
+
// time, with byte-identical arguments.
|
|
61
|
+
//
|
|
62
|
+
// `packageTarget` IS this function's tail for this import. The recursion
|
|
63
|
+
// above differs from the outer frame in exactly one field,
|
|
64
|
+
// `targetIncludesImportedName`, whose only effect is to make
|
|
65
|
+
// `pythonImportedSubmoduleTarget` return null and so skip this branch: the
|
|
66
|
+
// spread preserves `kind` (still `named`/`alias`, so the
|
|
67
|
+
// `dynamic-unresolved` guard cannot fire) and `targetRaw` (which already
|
|
68
|
+
// passed the null/empty guard), and `workspaceIndex` is the same object, so
|
|
69
|
+
// `ctx.fromFile`, `ctx.allFilePaths` and `ctx.parsedFiles` are the same
|
|
70
|
+
// references. The recursion therefore ran `resolvePythonImportInternal` →
|
|
71
|
+
// relative gate → `hasRepoCandidate` → `resolveAbsoluteFromFiles` on
|
|
72
|
+
// exactly the inputs the fallthrough would use.
|
|
73
|
+
//
|
|
74
|
+
// That tail is a pure function of (`fromFile`, `targetRaw`,
|
|
75
|
+
// `allFilePaths`): it only reads the Set and indexes memoized on the Set,
|
|
76
|
+
// and the `submodule` probe in between is equally read-only, so nothing can
|
|
77
|
+
// have changed the answer. Reaching this line means the tail already
|
|
78
|
+
// returned null; running it again returns null again, after another
|
|
79
|
+
// proximity probe and another full ancestor walk to the workspace root.
|
|
80
|
+
//
|
|
81
|
+
// Measured before this change, `from x import y` at four directory
|
|
82
|
+
// components: 24 `allFilePaths.has` probes per import, of which probes
|
|
83
|
+
// 12-23 were byte-identical repeats of 0-11. `python-import-probe-count
|
|
84
|
+
// .test.ts` is the gate.
|
|
85
|
+
return packageTarget;
|
|
86
|
+
}
|
|
36
87
|
// PEP-328 relative + single-segment proximity bare imports.
|
|
37
88
|
const internal = resolvePythonImportInternal(ctx.fromFile, parsedImport.targetRaw, ctx.allFilePaths);
|
|
38
89
|
if (internal !== null)
|
|
@@ -64,6 +115,69 @@ export function resolvePythonImportTarget(parsedImport, workspaceIndex) {
|
|
|
64
115
|
// both files exist).
|
|
65
116
|
return resolveAbsoluteFromFiles(pathLike, ctx.allFilePaths, ctx.fromFile);
|
|
66
117
|
}
|
|
118
|
+
/**
|
|
119
|
+
* Answers "does this package expose `importedName` as an attribute?" from
|
|
120
|
+
* `localDefs` alone — so it says no for a name the package only re-exports.
|
|
121
|
+
*
|
|
122
|
+
* KNOWN DIVERGENCE from `buildReexportClosures`, which since #2864 does carry
|
|
123
|
+
* re-exported names (`ParsedImport.reexportsName`). With
|
|
124
|
+
* `pkg/__init__.py: from .impl import log`, `pkg/impl.py: def log`, and a
|
|
125
|
+
* same-named `pkg/log.py`, this returns false, the caller falls through to the
|
|
126
|
+
* submodule probe, and `from pkg import log` targets `pkg/log.py` — where
|
|
127
|
+
* `log` is not a local def either, so the edge ends unresolved and the closure
|
|
128
|
+
* is never consulted, for exactly the case it was built for. CPython binds
|
|
129
|
+
* `pkg.log` to the function.
|
|
130
|
+
*
|
|
131
|
+
* NOT fixed by reusing the flag here, which is the obvious three-line change
|
|
132
|
+
* and is wrong: `reexportsName` is also set for `pkg/__init__.py: from .
|
|
133
|
+
* import log`, where CPython binds `pkg.log` to the **module** `pkg/log.py`
|
|
134
|
+
* (verified on 3.11) and returning true here would kill the correct namespace
|
|
135
|
+
* edge. Separating the two needs the re-export's own resolved target, i.e.
|
|
136
|
+
* re-entering `resolvePythonImportTarget` from a different `fromFile` — and
|
|
137
|
+
* that classification is what open issue #2882 is about, so it belongs with
|
|
138
|
+
* that fix rather than bolted on here. Not a regression: both halves behave
|
|
139
|
+
* exactly as they did before #2864.
|
|
140
|
+
*
|
|
141
|
+
* The `parsedFiles.find` this used to open with was the same O(imports x files)
|
|
142
|
+
* shape #2913 removes on the path Set, keyed on the other collection the
|
|
143
|
+
* orchestrator threads: every import whose package probe resolves scanned the
|
|
144
|
+
* whole parsed workspace, and on a repo where `from pkg import X` usually
|
|
145
|
+
* resolves that is most imports. `parsedFileByPath` replaces it with one pass
|
|
146
|
+
* per pass.
|
|
147
|
+
*/
|
|
148
|
+
function pythonFileExportsName(targetFile, importedName, parsedFiles) {
|
|
149
|
+
if (parsedFiles === undefined)
|
|
150
|
+
return false;
|
|
151
|
+
const parsed = parsedFileByPath(parsedFiles).get(targetFile);
|
|
152
|
+
if (parsed === undefined)
|
|
153
|
+
return false;
|
|
154
|
+
return parsed.localDefs.some((def) => {
|
|
155
|
+
const qualifiedName = def.qualifiedName;
|
|
156
|
+
if (qualifiedName === undefined || qualifiedName.length === 0)
|
|
157
|
+
return false;
|
|
158
|
+
const dot = qualifiedName.lastIndexOf('.');
|
|
159
|
+
return (dot === -1 ? qualifiedName : qualifiedName.slice(dot + 1)) === importedName;
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* `filePath -> ParsedFile`, memoized on the identity of the pass's
|
|
164
|
+
* `parsedFiles` array — the second stable object the orchestrator threads
|
|
165
|
+
* through `resolveImportTarget`, beside the path Set.
|
|
166
|
+
*
|
|
167
|
+
* FIRST WINS on a duplicated path, which is what `Array.prototype.find`
|
|
168
|
+
* returned, so the answer is unchanged for a workspace that somehow parsed one
|
|
169
|
+
* path twice. Values are references to the array's own elements: the Map costs
|
|
170
|
+
* one pointer per parsed file and, living in a `WeakMap` keyed on the array,
|
|
171
|
+
* is reclaimed with the pass rather than accumulating across runs (#2649).
|
|
172
|
+
*/
|
|
173
|
+
const parsedFileByPath = perFileSet((parsedFiles) => {
|
|
174
|
+
const byPath = new Map();
|
|
175
|
+
for (const file of parsedFiles) {
|
|
176
|
+
if (!byPath.has(file.filePath))
|
|
177
|
+
byPath.set(file.filePath, file);
|
|
178
|
+
}
|
|
179
|
+
return byPath;
|
|
180
|
+
});
|
|
67
181
|
/**
|
|
68
182
|
* Resolve `package/sub/module` style paths (already dot-flattened) to a
|
|
69
183
|
* concrete file in `allFilePaths`. Tries the exact path first, then walks
|
|
@@ -95,20 +209,45 @@ function resolveAbsoluteFromFiles(pathLike, allFilePaths, fromFile) {
|
|
|
95
209
|
return directFile;
|
|
96
210
|
if (allFilePaths.has(directPkg))
|
|
97
211
|
return directPkg;
|
|
212
|
+
// Both remaining tiers — the ancestor walk and the suffix fallback — can only
|
|
213
|
+
// ever land on a file whose basename is `<lastSeg>.py`, or on an `__init__.py`
|
|
214
|
+
// whose parent directory is named `<lastSeg>`. The two buckets the suffix
|
|
215
|
+
// fallback already needs therefore also decide, in O(1) and before the walk,
|
|
216
|
+
// whether the walk can hit at all: neither bucket present means no tier below
|
|
217
|
+
// can match, and one bucket absent removes that tier's probe from EVERY step
|
|
218
|
+
// of the walk. On the deep corpus that is half the walk's probes (#2913).
|
|
219
|
+
//
|
|
220
|
+
// `pythonSegmentAbsent` states this same rule for the single-segment bare
|
|
221
|
+
// tier. It is deliberately not called here: that tier needs only the answer,
|
|
222
|
+
// this one needs the candidate ARRAYS for the suffix fallback below, so
|
|
223
|
+
// sharing would mean two extra `has` lookups per import to save four lines.
|
|
224
|
+
const index = getPythonFileIndex(allFilePaths);
|
|
225
|
+
const lastSeg = pathLike.slice(pathLike.lastIndexOf('/') + 1);
|
|
226
|
+
const moduleCandidates = index.byBasename.get(`${lastSeg}.py`);
|
|
227
|
+
const packageCandidates = index.byInitParent.get(`${lastSeg}/__init__.py`);
|
|
228
|
+
const mayBeModule = moduleCandidates !== undefined;
|
|
229
|
+
// `byInitParent` skips `__init__.py` files whose parent directory name is
|
|
230
|
+
// empty (a doubled separator), so an empty `<lastSeg>` — a target spelled
|
|
231
|
+
// with a trailing dot — cannot use the bucket as proof of absence and keeps
|
|
232
|
+
// probing exactly as before.
|
|
233
|
+
const mayBePackage = packageCandidates !== undefined || lastSeg === '';
|
|
234
|
+
if (!mayBeModule && !mayBePackage)
|
|
235
|
+
return null;
|
|
98
236
|
// Ancestor walk — match the single-segment resolver's behavior at
|
|
99
|
-
// multi-segment granularity. Closest match wins.
|
|
100
|
-
//
|
|
101
|
-
//
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
const
|
|
108
|
-
const candidateFile = `${prefix}${directFile}`;
|
|
109
|
-
const candidatePkg = `${prefix}${directPkg}`;
|
|
237
|
+
// multi-segment granularity. Closest match wins. The chain stops short of the
|
|
238
|
+
// workspace root because the root candidates are the direct check above.
|
|
239
|
+
//
|
|
240
|
+
// The chain comes from `importerAncestors`, which builds it ONCE per importer
|
|
241
|
+
// directory per pass. Rebuilding it here — one `slice(0, i).join('/')` per
|
|
242
|
+
// path component, on every import — was half of the depth quadratic in #2913.
|
|
243
|
+
for (const ancestor of importerAncestors(index, importerDirOf(fromFile))) {
|
|
244
|
+
if (mayBeModule) {
|
|
245
|
+
const candidateFile = `${ancestor}/${directFile}`;
|
|
110
246
|
if (allFilePaths.has(candidateFile))
|
|
111
247
|
return candidateFile;
|
|
248
|
+
}
|
|
249
|
+
if (mayBePackage) {
|
|
250
|
+
const candidatePkg = `${ancestor}/${directPkg}`;
|
|
112
251
|
if (allFilePaths.has(candidatePkg))
|
|
113
252
|
return candidatePkg;
|
|
114
253
|
}
|
|
@@ -137,10 +276,8 @@ function resolveAbsoluteFromFiles(pathLike, allFilePaths, fromFile) {
|
|
|
137
276
|
// shared buildSuffixIndex is deliberately NOT used: it keeps only one
|
|
138
277
|
// path per suffix (longest wins) and so cannot reproduce this exact
|
|
139
278
|
// fewest-segments-then-lexicographic tie-break across all candidates.
|
|
140
|
-
const index = getPythonFileIndex(allFilePaths);
|
|
141
|
-
const lastSeg = pathLike.slice(pathLike.lastIndexOf('/') + 1);
|
|
142
279
|
const matches = [];
|
|
143
|
-
for (const cand of
|
|
280
|
+
for (const cand of moduleCandidates ?? []) {
|
|
144
281
|
if (cand.norm.endsWith(suffixFile))
|
|
145
282
|
matches.push(cand);
|
|
146
283
|
}
|
|
@@ -148,7 +285,7 @@ function resolveAbsoluteFromFiles(pathLike, allFilePaths, fromFile) {
|
|
|
148
285
|
// can match `…/<lastSeg>/__init__.py` — look them up by parent key (P2b) and
|
|
149
286
|
// confirm the full suffix. Same final candidate set as the old `__init__.py`
|
|
150
287
|
// scan, just without iterating unrelated packages.
|
|
151
|
-
for (const cand of
|
|
288
|
+
for (const cand of packageCandidates ?? []) {
|
|
152
289
|
if (cand.norm.endsWith(suffixPkg))
|
|
153
290
|
matches.push(cand);
|
|
154
291
|
}
|
|
@@ -194,94 +331,143 @@ function hasRepoCandidate(leadingSegment, allFilePaths, fromFile) {
|
|
|
194
331
|
const prefix = `${leadingSegment}/`;
|
|
195
332
|
const rootFile = `${leadingSegment}.py`;
|
|
196
333
|
const initFile = `${leadingSegment}/__init__.py`;
|
|
197
|
-
// Build importer-ancestor prefixes: for `backend/routers/cron.py`,
|
|
198
|
-
// produces `["backend/routers/services/", "backend/services/"]` for
|
|
199
|
-
// segment `services` (closest first, root excluded — covered above).
|
|
200
|
-
const importerDir = fromFile.replace(/\\/g, '/').split('/').slice(0, -1).join('/');
|
|
201
|
-
const dirParts = importerDir ? importerDir.split('/').filter(Boolean) : [];
|
|
202
|
-
const ancestorPrefixes = [];
|
|
203
|
-
for (let i = dirParts.length; i > 0; i--) {
|
|
204
|
-
ancestorPrefixes.push(`${dirParts.slice(0, i).join('/')}/${leadingSegment}/`);
|
|
205
|
-
}
|
|
206
334
|
// Indexed equivalents of the old O(files) scan:
|
|
207
335
|
// (1) `f === rootFile || f === initFile` -> normalized-path membership.
|
|
208
336
|
// (2) `f.startsWith(`${seg}/`) && f.endsWith('.py')` -> some .py file lives
|
|
209
337
|
// under directory `${seg}/`, i.e. `${seg}/` is a known .py dir prefix.
|
|
210
338
|
// (3) ancestor namespace case -> `${ancestor}/${seg}/` is a known .py dir
|
|
211
|
-
// prefix.
|
|
339
|
+
// prefix, for some ancestor of the importer's directory.
|
|
212
340
|
const index = getPythonFileIndex(allFilePaths);
|
|
213
341
|
if (index.normSet.has(rootFile) || index.normSet.has(initFile))
|
|
214
342
|
return true;
|
|
215
343
|
if (index.dirPrefixes.has(prefix))
|
|
216
344
|
return true;
|
|
217
|
-
|
|
218
|
-
|
|
345
|
+
// (3) used to MATERIALIZE one `${ancestor}/${seg}/` string per component of
|
|
346
|
+
// the importer's directory, eagerly, before checks (1) and (2) had even run —
|
|
347
|
+
// O(depth^2) characters on every import, and the other half of #2913. Two
|
|
348
|
+
// things replace that: `nestedDirNames` answers "is `seg` the name of any
|
|
349
|
+
// directory sitting under a non-empty parent?" in O(1), which is `false` for
|
|
350
|
+
// every external import (`os`, `django`, an unknown distribution) and skips
|
|
351
|
+
// the walk outright; and what remains walks the per-directory ancestor chain,
|
|
352
|
+
// built once per pass, closest first, so the common in-repo hit exits after a
|
|
353
|
+
// step or two. `nestedDirNames` is exact, not a filter: `${A}/${seg}/` can
|
|
354
|
+
// only be a directory prefix if `seg` names a directory under the non-empty
|
|
355
|
+
// parent `A`, so a miss here means the old loop would have missed too.
|
|
356
|
+
if (!index.nestedDirNames.has(leadingSegment))
|
|
357
|
+
return false;
|
|
358
|
+
for (const ancestor of importerAncestors(index, importerDirOf(fromFile))) {
|
|
359
|
+
if (index.dirPrefixes.has(`${ancestor}/${prefix}`))
|
|
219
360
|
return true;
|
|
220
361
|
}
|
|
221
362
|
return false;
|
|
222
363
|
}
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
if (
|
|
227
|
-
return
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
const
|
|
247
|
-
const base =
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
364
|
+
function pythonImportedSubmoduleTarget(parsedImport) {
|
|
365
|
+
if (parsedImport.kind !== 'named' && parsedImport.kind !== 'alias')
|
|
366
|
+
return null;
|
|
367
|
+
if (parsedImport.targetIncludesImportedName === true)
|
|
368
|
+
return null;
|
|
369
|
+
const separator = parsedImport.targetRaw.endsWith('.') ? '' : '.';
|
|
370
|
+
return parsedImport.targetRaw + separator + parsedImport.importedName;
|
|
371
|
+
}
|
|
372
|
+
/**
|
|
373
|
+
* A named Python import is a namespace handle only when its resolved file is
|
|
374
|
+
* the concrete submodule formed by appending the imported name. This keeps
|
|
375
|
+
* ordinary symbol imports on the named-binding path.
|
|
376
|
+
*/
|
|
377
|
+
export function isPythonImportedModule(parsedImport, targetFile, fromFile) {
|
|
378
|
+
const submoduleTarget = pythonImportedSubmoduleTarget(parsedImport);
|
|
379
|
+
if (submoduleTarget === null)
|
|
380
|
+
return false;
|
|
381
|
+
const normalizedTarget = targetFile.replace(/\\/g, '/');
|
|
382
|
+
let pathLike;
|
|
383
|
+
if (submoduleTarget.startsWith('.')) {
|
|
384
|
+
const match = submoduleTarget.match(/^(\.+)(.*)$/);
|
|
385
|
+
if (match === null)
|
|
386
|
+
return false;
|
|
387
|
+
const ascend = match[1].length - 1;
|
|
388
|
+
const base = fromFile.replace(/\\/g, '/').split('/').slice(0, -1);
|
|
389
|
+
if (ascend > base.length)
|
|
390
|
+
return false;
|
|
391
|
+
const relativeParts = match[2].split('.').filter(Boolean);
|
|
392
|
+
pathLike = [...base.slice(0, base.length - ascend), ...relativeParts].join('/');
|
|
393
|
+
}
|
|
394
|
+
else {
|
|
395
|
+
pathLike = submoduleTarget.replace(/\./g, '/');
|
|
396
|
+
}
|
|
397
|
+
const moduleFile = pathLike + '.py';
|
|
398
|
+
const packageFile = pathLike + '/__init__.py';
|
|
399
|
+
return (normalizedTarget === moduleFile ||
|
|
400
|
+
normalizedTarget === packageFile ||
|
|
401
|
+
normalizedTarget.endsWith('/' + moduleFile) ||
|
|
402
|
+
normalizedTarget.endsWith('/' + packageFile));
|
|
403
|
+
}
|
|
404
|
+
/**
|
|
405
|
+
* The receiver spellings `import a.b.c` makes callable, and the file each one
|
|
406
|
+
* names (#2826).
|
|
407
|
+
*
|
|
408
|
+
* `import a.b.c` binds ONE name — `a` — but makes three attribute paths
|
|
409
|
+
* reachable, and they name three different files:
|
|
410
|
+
*
|
|
411
|
+
* a → a/__init__.py
|
|
412
|
+
* a.b → a/b/__init__.py
|
|
413
|
+
* a.b.c → a/b/c.py (the edge's own target)
|
|
414
|
+
*
|
|
415
|
+
* The shared default keyed `a` to the LEAF, which is wrong in both directions:
|
|
416
|
+
* `a.helper()` resolved into `a/b/c.py` whenever that module happened to export
|
|
417
|
+
* `helper`, and `a.b.mid()` resolved to nothing.
|
|
418
|
+
*
|
|
419
|
+
* Returns `undefined` — meaning "use the shared default" — for every spelling
|
|
420
|
+
* where the bound name is not the path's root:
|
|
421
|
+
* - `import single` — no dotted path to expand;
|
|
422
|
+
* - `import a.b as x` — binds only `x`; writing `a.b.f()` there is a
|
|
423
|
+
* NameError, so `a.b` must NOT become a key;
|
|
424
|
+
* - `from pkg import db` — reclassified to a namespace edge whose
|
|
425
|
+
* importPath is the bare name `db`.
|
|
426
|
+
*
|
|
427
|
+
* Prefix files are proposed, not asserted: `moduleFileExists` drops any that
|
|
428
|
+
* the workspace did not parse, so a PEP-420 namespace package (no
|
|
429
|
+
* `__init__.py`) contributes no key rather than one pointing at a missing file.
|
|
430
|
+
*/
|
|
431
|
+
export function pythonNamespaceReceiverPaths(edge, moduleFileExists) {
|
|
432
|
+
const segments = edge.importPath.split('.');
|
|
433
|
+
if (segments.length < 2)
|
|
434
|
+
return undefined;
|
|
435
|
+
if (segments[0] !== edge.localName)
|
|
436
|
+
return undefined;
|
|
437
|
+
const out = [[edge.importPath, edge.targetFile]];
|
|
438
|
+
// Anchor the prefix packages on the RESOLVED leaf, never on the import
|
|
439
|
+
// spelling. `resolvePythonImportTarget` resolves off-root in two of its three
|
|
440
|
+
// tiers (suffix match and ancestor-relative), so `import utils.db` can land on
|
|
441
|
+
// `libs/common/utils/db.py`. Building `utils/__init__.py` from the spelling
|
|
442
|
+
// would then name a DIFFERENT package that merely shares the root segment —
|
|
443
|
+
// a wrong edge — and in a `src/` layout it would match nothing at all,
|
|
444
|
+
// silently making prefix keying inert for the most common Python layout.
|
|
445
|
+
//
|
|
446
|
+
// Walking back from the leaf also inherits that path's own separator, so no
|
|
447
|
+
// POSIX-vs-Windows probing is needed: workspace paths are not normalized at
|
|
448
|
+
// ingestion, and `moduleScopeByFile` is keyed by the raw `ParsedFile.filePath`.
|
|
449
|
+
const dirs = edge.targetFile.split('/').slice(0, -1);
|
|
450
|
+
// The import's leading segments name the leaf's innermost directories.
|
|
451
|
+
const offset = dirs.length - (segments.length - 1);
|
|
452
|
+
if (offset < 0)
|
|
453
|
+
return out;
|
|
454
|
+
for (let i = 1; i < segments.length; i++) {
|
|
455
|
+
const spelling = segments.slice(0, i).join('.');
|
|
456
|
+
const packageFile = dirs.slice(0, offset + i).join('/') + '/__init__.py';
|
|
457
|
+
// Package FIRST, then the leaf as a fallback — order is the whole point.
|
|
458
|
+
//
|
|
459
|
+
// `findExportedDef` only accepts a binding whose `origin === 'local'`, and
|
|
460
|
+
// the canonical package re-exports (`from .b.c import helper` in
|
|
461
|
+
// `__init__.py`) produce an IMPORT binding. Keying the prefix at the
|
|
462
|
+
// package alone therefore loses `a.helper()` entirely for the most common
|
|
463
|
+
// package shape — the fixtures here all define members locally in
|
|
464
|
+
// `__init__.py`, which is precisely the one layout where that mistake is
|
|
465
|
+
// invisible. Keeping the leaf behind the package restores that resolution
|
|
466
|
+
// while still letting a real definition in `__init__.py` win over a
|
|
467
|
+
// same-named decoy deeper in the package.
|
|
468
|
+
if (moduleFileExists(packageFile))
|
|
469
|
+
out.push([spelling, packageFile]);
|
|
470
|
+
out.push([spelling, edge.targetFile]);
|
|
283
471
|
}
|
|
284
|
-
|
|
285
|
-
PYTHON_FILE_INDEX_CACHE.set(allFilePaths, index);
|
|
286
|
-
return index;
|
|
472
|
+
return out;
|
|
287
473
|
}
|
|
@@ -75,5 +75,5 @@ export { getPythonCaptureCacheStats, resetPythonCaptureCacheStats } from './cach
|
|
|
75
75
|
export { interpretPythonImport, interpretPythonTypeBinding } from './interpret.js';
|
|
76
76
|
export { pythonMergeBindings } from './merge-bindings.js';
|
|
77
77
|
export { pythonArityCompatibility } from './arity.js';
|
|
78
|
-
export { resolvePythonImportTarget, type PythonResolveContext } from './import-target.js';
|
|
78
|
+
export { isPythonImportedModule, pythonNamespaceReceiverPaths, resolvePythonImportTarget, type PythonResolveContext, } from './import-target.js';
|
|
79
79
|
export { pythonBindingScopeFor, pythonFunctionDefinitionLabel, pythonImportOwningScope, pythonReceiverBinding, } from './simple-hooks.js';
|
|
@@ -75,5 +75,5 @@ export { getPythonCaptureCacheStats, resetPythonCaptureCacheStats } from './cach
|
|
|
75
75
|
export { interpretPythonImport, interpretPythonTypeBinding } from './interpret.js';
|
|
76
76
|
export { pythonMergeBindings } from './merge-bindings.js';
|
|
77
77
|
export { pythonArityCompatibility } from './arity.js';
|
|
78
|
-
export { resolvePythonImportTarget } from './import-target.js';
|
|
78
|
+
export { isPythonImportedModule, pythonNamespaceReceiverPaths, resolvePythonImportTarget, } from './import-target.js';
|
|
79
79
|
export { pythonBindingScopeFor, pythonFunctionDefinitionLabel, pythonImportOwningScope, pythonReceiverBinding, } from './simple-hooks.js';
|
|
@@ -13,3 +13,55 @@
|
|
|
13
13
|
import type { CaptureMatch, ParsedImport, ParsedTypeBinding } from '../../../../_shared/index.js';
|
|
14
14
|
export declare function interpretPythonImport(captures: CaptureMatch): ParsedImport | null;
|
|
15
15
|
export declare function interpretPythonTypeBinding(captures: CaptureMatch): ParsedTypeBinding | null;
|
|
16
|
+
/**
|
|
17
|
+
* Container bases whose SINGLE type argument is the element type.
|
|
18
|
+
*
|
|
19
|
+
* The single source of truth for both the matcher below and the property test
|
|
20
|
+
* that asserts every one of them is also declined as a user generic — the two
|
|
21
|
+
* lists drifting apart is the defect this arrangement exists to make
|
|
22
|
+
* impossible. Order is significant only in that it is the regex alternation
|
|
23
|
+
* order; keep additions grouped with their family.
|
|
24
|
+
*/
|
|
25
|
+
export declare const SINGLE_ARG_CONTAINERS: readonly string[];
|
|
26
|
+
/** Container bases whose SECOND type argument is the value type. See {@link SINGLE_ARG_CONTAINERS}. */
|
|
27
|
+
export declare const MAPPING_CONTAINERS: readonly string[];
|
|
28
|
+
/**
|
|
29
|
+
* Bases a subscripted annotation may carry that are NOT user-defined generics.
|
|
30
|
+
*
|
|
31
|
+
* SCOPE — the standard library, and deliberately nothing else. The names below
|
|
32
|
+
* are the documented Python type-system surface (`typing`'s deprecated PEP 585
|
|
33
|
+
* aliases and its special forms, plus the stdlib classes those aliases point
|
|
34
|
+
* at); that universe is CLOSED and versioned by CPython, so the list is
|
|
35
|
+
* auditable against
|
|
36
|
+
* <https://docs.python.org/3/library/typing.html#deprecated-aliases>.
|
|
37
|
+
*
|
|
38
|
+
* Third-party generics (`Mapped[int]`, `QuerySet[User]`) are NOT listed. That
|
|
39
|
+
* universe is open, so enumerating it only ever chases the last escape, and
|
|
40
|
+
* denying an ordinary name like `Model` would cost real edges in the many
|
|
41
|
+
* projects that legitimately declare one. Those spellings still reduce to their
|
|
42
|
+
* base, and the base is now admitted only on the grounds `resolveErasedBaseName`
|
|
43
|
+
* applies at resolution time — the file's scope chain binds it, the declaration
|
|
44
|
+
* is in this very file, the index proves the name is a template family, or the
|
|
45
|
+
* file has no cross-file class channel to be absent from. A `Mapped[User]` whose
|
|
46
|
+
* base the file cannot see therefore binds nothing, which is the structural
|
|
47
|
+
* answer this parse-time pass cannot give and no longer has to.
|
|
48
|
+
*
|
|
49
|
+
* Two distinct reasons to decline, both always-correct at this layer:
|
|
50
|
+
* - CONTAINERS, including ones the two rules above do not own. Reducing
|
|
51
|
+
* `deque[User]` to `deque` types a receiver as the container and retargets
|
|
52
|
+
* every call in a for-loop chain, and reducing `dict[str, list[User]]` to
|
|
53
|
+
* `dict` destroys the value type the dict rule leaves for a downstream pass.
|
|
54
|
+
* - `typing` SPECIAL FORMS, which are not classes at all. `Callable`,
|
|
55
|
+
* `Literal`, `Union` reduce to a bare name that binds to a workspace class
|
|
56
|
+
* of that name if one exists — a fabricated edge.
|
|
57
|
+
*
|
|
58
|
+
* Members are listed ONCE per case-insensitive concept: {@link
|
|
59
|
+
* isNotAUserGenericBase} folds case, so the builtin spelling covers its PEP 585
|
|
60
|
+
* `typing` twin (`deque` covers `Deque`, `frozenset` covers `FrozenSet`).
|
|
61
|
+
* Non-generic ABCs (`Hashable`, `Sized`) are omitted — they cannot be written
|
|
62
|
+
* subscripted, so they never reach this branch.
|
|
63
|
+
*
|
|
64
|
+
* Exported for the property test that asserts the case-fold closure holds
|
|
65
|
+
* behaviourally; nothing else should read it.
|
|
66
|
+
*/
|
|
67
|
+
export declare const NOT_A_USER_GENERIC_SPELLINGS: readonly string[];
|