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
|
@@ -129,7 +129,11 @@ function detectLibcVariant() {
|
|
|
129
129
|
const LIBC_VARIANT = detectLibcVariant();
|
|
130
130
|
function resolveRuntimeVariant() {
|
|
131
131
|
return {
|
|
132
|
-
|
|
132
|
+
// Normalized like build.rootPath (#2668): executablePath is a compared
|
|
133
|
+
// identity field (only invokedArtifact is stripped in the comparison), and
|
|
134
|
+
// process.execPath carries the same Windows drive-letter case ambiguity —
|
|
135
|
+
// so leaving it un-normalized would reintroduce the false-stale via runtime.
|
|
136
|
+
executablePath: normalizeAnalyzerRootPath(resolveExistingPath(process.execPath), process.platform),
|
|
133
137
|
nodeVersion: process.version,
|
|
134
138
|
platform: process.platform,
|
|
135
139
|
architecture: process.arch,
|
|
@@ -150,6 +154,24 @@ function snapshotReadableFile(candidate) {
|
|
|
150
154
|
...(link.isSymbolicLink() ? { symlinkTarget: readlinkSync(candidate) } : {}),
|
|
151
155
|
};
|
|
152
156
|
}
|
|
157
|
+
/**
|
|
158
|
+
* Snapshot a symbolic link without resolving it. Unlike
|
|
159
|
+
* {@link snapshotReadableFile} this never stats the target, so it is total over
|
|
160
|
+
* linked directories, dangling links, and links to device nodes — the inputs
|
|
161
|
+
* that make the readable-file snapshot throw.
|
|
162
|
+
*/
|
|
163
|
+
function snapshotSymlinkArtifact(candidate) {
|
|
164
|
+
const link = lstatSync(candidate, { bigint: true });
|
|
165
|
+
if (!link.isSymbolicLink()) {
|
|
166
|
+
throw new Error(`Analyzer identity input is not a symbolic link: ${candidate}`);
|
|
167
|
+
}
|
|
168
|
+
return { link: statState(link), symlinkTarget: readlinkSync(candidate) };
|
|
169
|
+
}
|
|
170
|
+
function snapshotRuntimeArtifact(artifact) {
|
|
171
|
+
return artifact.kind === 'unfollowed-symlink'
|
|
172
|
+
? snapshotSymlinkArtifact(artifact.absolutePath)
|
|
173
|
+
: snapshotReadableFile(artifact.absolutePath);
|
|
174
|
+
}
|
|
153
175
|
function snapshotDirectory(candidate) {
|
|
154
176
|
const stat = lstatSync(candidate, { bigint: true });
|
|
155
177
|
if (!stat.isDirectory() || stat.isSymbolicLink()) {
|
|
@@ -256,6 +278,52 @@ function hashStableFile(candidate) {
|
|
|
256
278
|
function resolveExistingPath(candidate) {
|
|
257
279
|
return realpathSync.native(path.resolve(candidate));
|
|
258
280
|
}
|
|
281
|
+
/**
|
|
282
|
+
* Case-stabilize a path's Windows drive letter so two processes that observed
|
|
283
|
+
* the same directory under different drive-letter casing (`c:\…` vs `C:\…`)
|
|
284
|
+
* produce byte-identical analyzer-identity path fields (#2668).
|
|
285
|
+
*
|
|
286
|
+
* `realpathSync.native` canonicalizes 8.3 short names and symlinks but does not
|
|
287
|
+
* guarantee the drive-letter case it returns — it can preserve whatever casing
|
|
288
|
+
* the caller's path carried, and `import.meta.url` casing depends on how each
|
|
289
|
+
* entry process (CLI shim vs `npx`/npm wrapper vs server worker) was launched.
|
|
290
|
+
* When `analyze` stamps `build.rootPath` under one casing and `status`
|
|
291
|
+
* recomputes it under another, `analyzerRunnerIdentitiesEqual` deep-compares
|
|
292
|
+
* unequal and `status` reports a freshly-analyzed, untouched repo as stale.
|
|
293
|
+
* Uppercasing the drive letter (drive letters are case-insensitive; uppercase
|
|
294
|
+
* is the conventional form) collapses that variance. POSIX paths are returned
|
|
295
|
+
* unchanged. `platform` is explicit so the transform is unit-testable off
|
|
296
|
+
* Windows.
|
|
297
|
+
*
|
|
298
|
+
* The optional `\\?\` extended-length prefix is preserved and the drive letter
|
|
299
|
+
* after it is still normalized; UNC paths (`\\server\share`, `\\?\UNC\...`)
|
|
300
|
+
* have no drive letter and are left untouched.
|
|
301
|
+
*
|
|
302
|
+
* That optional group is defensive, not a case `realpathSync.native` produces:
|
|
303
|
+
* libuv's `fs__realpath_handle` strips `\\?\` (and rewrites `\\?\UNC\` back to
|
|
304
|
+
* `\\`) before returning, so the prefix can only reach here from caller-supplied
|
|
305
|
+
* input, which `path.resolve` preserves (#2667).
|
|
306
|
+
*
|
|
307
|
+
* Preserving it is load-bearing. The roots this normalizes are not just compared —
|
|
308
|
+
* they are READ FROM: `resolveBuildRoot` joins `package.json` onto `packageRoot`,
|
|
309
|
+
* `collectBuildEntries` walks `buildRoot`, and the lockfile lookup walks
|
|
310
|
+
* `packageRoot`'s ancestors. Node does not re-add `\\?\` for over-MAX_PATH paths,
|
|
311
|
+
* so stripping here would break analyzer-identity resolution on a deep checkout
|
|
312
|
+
* exactly as it would at any other filesystem boundary. (These fields are also
|
|
313
|
+
* compared between an `analyze` and a later `status` run, so a shape change would
|
|
314
|
+
* additionally risk the #2668 false-stale class — but the filesystem reads are the
|
|
315
|
+
* reason that matters.)
|
|
316
|
+
*
|
|
317
|
+
* Registry-style path COMPARISON is a different domain, never opens what it
|
|
318
|
+
* canonicalizes, and does normalize the prefix away: see
|
|
319
|
+
* `stripWindowsLongPathPrefix` in `src/lib/utils.ts` and its use in
|
|
320
|
+
* `canonicalizePath`.
|
|
321
|
+
*/
|
|
322
|
+
export function normalizeAnalyzerRootPath(p, platform) {
|
|
323
|
+
if (platform !== 'win32')
|
|
324
|
+
return p;
|
|
325
|
+
return p.replace(/^(\\\\\?\\)?([a-z]):/, (_match, prefix, drive) => `${prefix ?? ''}${drive.toUpperCase()}:`);
|
|
326
|
+
}
|
|
259
327
|
function isFile(candidate) {
|
|
260
328
|
try {
|
|
261
329
|
return statSync(candidate).isFile();
|
|
@@ -274,10 +342,29 @@ function manifestLabel(manifest) {
|
|
|
274
342
|
const version = typeof manifest.version === 'string' ? manifest.version : '<unversioned>';
|
|
275
343
|
return `${name}@${version}`;
|
|
276
344
|
}
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
345
|
+
/**
|
|
346
|
+
* Whether `candidate` is `parent` itself or lives beneath it.
|
|
347
|
+
*
|
|
348
|
+
* The absolute-result rejection is load-bearing on Windows: `path.relative`
|
|
349
|
+
* cannot express a relative path between two different drives, so it returns the
|
|
350
|
+
* absolute target instead — `path.win32.relative('C:\\parent', 'D:\\other')` is
|
|
351
|
+
* `'D:\\other'`. That string does not start with `..`, so the `..` checks alone
|
|
352
|
+
* would report an unrelated drive as *inside* the parent. This mirrors the
|
|
353
|
+
* containment guards elsewhere in the repo (`server/api.ts`,
|
|
354
|
+
* `server/git-clone.ts`, `group/extractors/fs-utils.ts`), which all pair the
|
|
355
|
+
* `..` check with `path.isAbsolute`.
|
|
356
|
+
*
|
|
357
|
+
* `pathApi` is injectable so the win32 semantics are unit-testable from a POSIX
|
|
358
|
+
* runner; production callers always use the platform-bound `path`.
|
|
359
|
+
*/
|
|
360
|
+
function isInside(parent, candidate, pathApi = path) {
|
|
361
|
+
const relative = pathApi.relative(parent, candidate);
|
|
362
|
+
if (pathApi.isAbsolute(relative))
|
|
363
|
+
return false;
|
|
364
|
+
return relative === '' || (!relative.startsWith(`..${pathApi.sep}`) && relative !== '..');
|
|
280
365
|
}
|
|
366
|
+
/** Test seam for {@link isInside} (see `_hashAnalyzerIdentityFramesForTests`). */
|
|
367
|
+
export const _isInsideForTests = isInside;
|
|
281
368
|
function resolveBuildRoot(analyzerModulePath) {
|
|
282
369
|
let cursor = path.dirname(analyzerModulePath);
|
|
283
370
|
while (true) {
|
|
@@ -286,9 +373,18 @@ function resolveBuildRoot(analyzerModulePath) {
|
|
|
286
373
|
const packageRoot = path.dirname(cursor);
|
|
287
374
|
const packageJson = path.join(packageRoot, 'package.json');
|
|
288
375
|
if (lstatSync(packageJson).isFile()) {
|
|
376
|
+
// Normalize the drive-letter case at this single upstream source so
|
|
377
|
+
// every derived identity path field — build.rootPath, identityCacheKey,
|
|
378
|
+
// and (via collectDependencyInputs) dependencyRuntime.manifestPath /
|
|
379
|
+
// lockfilePath — inherits a case-stable root and analyze-stamp equals
|
|
380
|
+
// status-recompute regardless of launch-path casing (#2668).
|
|
381
|
+
// Migration: a Windows index stamped before this fix carries the old,
|
|
382
|
+
// un-normalized casing, so the first post-upgrade `status` sees one
|
|
383
|
+
// spurious "stale" flip — self-healing on the next `analyze`, which
|
|
384
|
+
// re-stamps the normalized (idempotent) form.
|
|
289
385
|
return {
|
|
290
|
-
packageRoot,
|
|
291
|
-
buildRoot: cursor,
|
|
386
|
+
packageRoot: normalizeAnalyzerRootPath(packageRoot, process.platform),
|
|
387
|
+
buildRoot: normalizeAnalyzerRootPath(cursor, process.platform),
|
|
292
388
|
kind: base === 'src' ? 'source' : 'distribution',
|
|
293
389
|
};
|
|
294
390
|
}
|
|
@@ -519,6 +615,96 @@ function runtimePackageLocator(packageRoot, runtimeRoot) {
|
|
|
519
615
|
const relative = path.relative(packageRoot, runtimeRoot).split(path.sep).join('/');
|
|
520
616
|
return `relative:${relative}`;
|
|
521
617
|
}
|
|
618
|
+
/** Protocols that name a checkout-local package instead of a registry tarball. */
|
|
619
|
+
const LOCAL_LINK_PROTOCOL_PATTERN = /^(?:file|link|workspace|portal):/;
|
|
620
|
+
/** npm's bare local-path shorthands: `./x`, `../x`, `/x`, `~/x`, `C:\x`. */
|
|
621
|
+
const LOCAL_LINK_PATH_PATTERN = /^(?:\.\.?[/\\]|~[/\\]|[/\\]|[A-Za-z]:)/;
|
|
622
|
+
function isLocallyLinkedSpecifier(specifier) {
|
|
623
|
+
if (typeof specifier !== 'string')
|
|
624
|
+
return false;
|
|
625
|
+
const value = specifier.trim();
|
|
626
|
+
return LOCAL_LINK_PROTOCOL_PATTERN.test(value) || LOCAL_LINK_PATH_PATTERN.test(value);
|
|
627
|
+
}
|
|
628
|
+
/**
|
|
629
|
+
* Whether a REALPATH'd package root lives inside some installed dependency
|
|
630
|
+
* tree. Used as the resolved-location half of "is this dependency a checkout
|
|
631
|
+
* this repository owns?" (see {@link undeclaredLocalDevDependencyNames}).
|
|
632
|
+
*
|
|
633
|
+
* The input must already be realpath'd: `resolveDependencyPackageRoot` returns
|
|
634
|
+
* `realpathSync.native`, so a package reached through a link out of
|
|
635
|
+
* `node_modules` reports its checkout location and a package that merely lives
|
|
636
|
+
* in `node_modules` reports a path that still carries the segment.
|
|
637
|
+
*
|
|
638
|
+
* `pathApi` is injectable so the Windows separator handling is unit-testable
|
|
639
|
+
* from a POSIX runner, exactly as {@link isInside} does. The separator sets
|
|
640
|
+
* differ deliberately: `\` is a legal filename character on POSIX, so only
|
|
641
|
+
* win32 may treat it as a boundary.
|
|
642
|
+
*/
|
|
643
|
+
function hasNodeModulesSegment(candidate, pathApi = path) {
|
|
644
|
+
const segments = pathApi.sep === '\\' ? candidate.split(/[\\/]+/) : candidate.split('/');
|
|
645
|
+
return segments.includes('node_modules');
|
|
646
|
+
}
|
|
647
|
+
/** Test seam for {@link hasNodeModulesSegment} (see {@link _isInsideForTests}). */
|
|
648
|
+
export const _hasNodeModulesSegmentForTests = hasNodeModulesSegment;
|
|
649
|
+
/**
|
|
650
|
+
* How many dev dependencies may be admitted by RESOLVED LOCATION alone before
|
|
651
|
+
* the whole resolved-location channel is treated as untrustworthy and disabled.
|
|
652
|
+
*
|
|
653
|
+
* "Realpath carries no `node_modules` segment" is a proxy for "checkout-local",
|
|
654
|
+
* and a layout that materializes packages outside `node_modules` — pnpm with a
|
|
655
|
+
* relocated `virtual-store-dir`, a custom linker — makes every dev dependency
|
|
656
|
+
* pass it. Folding an entire dev tree into the receipt is not a graceful
|
|
657
|
+
* degradation: `runtimePackages`/`runtimeEntries`/`runtimeBytes` THROW, so a
|
|
658
|
+
* mis-fired proxy on a legitimate install would abort analyze outright.
|
|
659
|
+
*
|
|
660
|
+
* The bound is therefore on ADMISSIONS, and overflow admits NONE of them rather
|
|
661
|
+
* than an arbitrary prefix. A prefix would not bound the failure — the abort
|
|
662
|
+
* comes from the transitive payload of whichever trees get folded in — and it
|
|
663
|
+
* would make the receipt depend on an arbitrary slice of a sorted name list.
|
|
664
|
+
* Dropping the channel wholesale falls back to the specifier-only receipt,
|
|
665
|
+
* which is the behaviour that ships today and is known not to abort, and leaves
|
|
666
|
+
* the declared-intent half in {@link dependencyNames} untouched.
|
|
667
|
+
*
|
|
668
|
+
* Four is measured, not guessed. Monorepo and workspace links are declared
|
|
669
|
+
* (`file:`/`link:`/`workspace:`) and travel the uncapped declared half, so this
|
|
670
|
+
* channel only ever carries UNDECLARED `npm link <pkg>` — a manual, per-package
|
|
671
|
+
* developer action, in practice one or two packages. A mis-fire admits the
|
|
672
|
+
* entire dev-only set instead: 13 names in this repository's own install, tens
|
|
673
|
+
* in a typical application. The cap sits an order of magnitude below the
|
|
674
|
+
* mis-fire population and comfortably above realistic link counts.
|
|
675
|
+
*/
|
|
676
|
+
const MAX_UNDECLARED_LOCAL_DEV_DEPENDENCIES = 4;
|
|
677
|
+
/**
|
|
678
|
+
* Dependency names whose resolved packages can contribute analyzer semantics.
|
|
679
|
+
*
|
|
680
|
+
* The three runtime sections are enumerated wholesale. `devDependencies` are
|
|
681
|
+
* deliberately not: a registry dev tool (vitest, eslint, typescript) is never
|
|
682
|
+
* loaded by the analyzer, and folding the dev tree into the receipt would churn
|
|
683
|
+
* `dependencyRuntime.digest` — and force a full re-analysis — on every unrelated
|
|
684
|
+
* devDependency bump.
|
|
685
|
+
*
|
|
686
|
+
* Locally linked dev dependencies are the exception. A `file:`/`link:`/
|
|
687
|
+
* `workspace:` sibling is part of this checkout and ships code the analyzer
|
|
688
|
+
* imports at runtime: GitNexus links `gitnexus-shared`, whose schema constants
|
|
689
|
+
* feed `RELATION_SCHEMA`/`NODE_SCHEMA_QUERIES`. In `kind: 'source'` runs that
|
|
690
|
+
* sibling sits outside `buildRoot`, so leaving it out let a semantic change
|
|
691
|
+
* there alter analyzer behaviour while moving neither `build.digest` nor
|
|
692
|
+
* `dependencyRuntime.digest` — DDL-affecting edits were still caught by the
|
|
693
|
+
* schema fingerprint, semantics-only edits by nothing.
|
|
694
|
+
*
|
|
695
|
+
* An unresolvable link (a published install, where the sibling checkout does not
|
|
696
|
+
* exist) still contributes its `<missing>` edge, so the linked package appearing
|
|
697
|
+
* or disappearing remains a receipt change rather than a silent one. That is why
|
|
698
|
+
* the specifier check cannot be replaced by resolution: resolution returns
|
|
699
|
+
* `null` for an absent linked checkout exactly as it does for an uninstalled
|
|
700
|
+
* registry dev tool, and the two must not be conflated.
|
|
701
|
+
*
|
|
702
|
+
* This function is the DECLARED-INTENT half and is enumerated for every package
|
|
703
|
+
* in the dependency BFS, so it must stay a pure function of the manifest. The
|
|
704
|
+
* RESOLVED-LOCATION half — `npm link <pkg>`, which leaves the specifier a
|
|
705
|
+
* registry range — lives in {@link undeclaredLocalDevDependencyNames} and is
|
|
706
|
+
* applied to the root package only.
|
|
707
|
+
*/
|
|
522
708
|
function dependencyNames(manifest) {
|
|
523
709
|
const names = new Set();
|
|
524
710
|
for (const section of [
|
|
@@ -531,6 +717,13 @@ function dependencyNames(manifest) {
|
|
|
531
717
|
for (const name of Object.keys(section))
|
|
532
718
|
names.add(name);
|
|
533
719
|
}
|
|
720
|
+
const development = manifest.devDependencies;
|
|
721
|
+
if (development && typeof development === 'object') {
|
|
722
|
+
for (const [name, specifier] of Object.entries(development)) {
|
|
723
|
+
if (isLocallyLinkedSpecifier(specifier))
|
|
724
|
+
names.add(name);
|
|
725
|
+
}
|
|
726
|
+
}
|
|
534
727
|
return [...names].sort(compareBytes);
|
|
535
728
|
}
|
|
536
729
|
function resolveDependencyPackageRoot(fromRoot, packageName, pathGuards, limits) {
|
|
@@ -563,6 +756,51 @@ function resolveDependencyPackageRoot(fromRoot, packageName, pathGuards, limits)
|
|
|
563
756
|
cursor = parent;
|
|
564
757
|
}
|
|
565
758
|
}
|
|
759
|
+
/**
|
|
760
|
+
* Dev dependencies that are locally linked by INSTALLED LOCATION rather than by
|
|
761
|
+
* declared specifier — the `npm link <pkg>` shape, where the manifest still
|
|
762
|
+
* carries a registry range while `node_modules/<pkg>` is a symlink into a
|
|
763
|
+
* working checkout. {@link isLocallyLinkedSpecifier} is blind to those, yet the
|
|
764
|
+
* linked code is exactly as load-bearing for analyzer semantics as a declared
|
|
765
|
+
* `file:` sibling, so a semantic-only edit there would move neither digest.
|
|
766
|
+
*
|
|
767
|
+
* The resolver already knows: {@link resolveDependencyPackageRoot} returns a
|
|
768
|
+
* realpath, so a linked package reports a root outside every `node_modules`
|
|
769
|
+
* tree while an ordinary installed package cannot.
|
|
770
|
+
*
|
|
771
|
+
* Two properties are load-bearing and must not be relaxed:
|
|
772
|
+
*
|
|
773
|
+
* 1. ROOT ONLY. {@link dependencyNames} runs for every package in the BFS, and
|
|
774
|
+
* published tarballs keep their `devDependencies`, so probing dev-only names
|
|
775
|
+
* everywhere costs 1998 resolutions rather than the ~13 this manifest
|
|
776
|
+
* declares — measured on this install, with 0 true positives. Persisted
|
|
777
|
+
* `dependencyPathGuards` grow 2220 → 11049, and every guard is re-probed on
|
|
778
|
+
* each warm validation, so the cost is recurring and on the `status` path.
|
|
779
|
+
* Root-only costs 13 resolutions and ~29 guards.
|
|
780
|
+
* 2. An unresolvable name is NEVER admitted. `null` here means "uninstalled
|
|
781
|
+
* registry dev tool" far more often than "broken link", and admitting it
|
|
782
|
+
* would emit a `<missing>` edge for every dev tool absent from a published
|
|
783
|
+
* install. Declared links keep that edge through {@link dependencyNames};
|
|
784
|
+
* undeclared ones have no declaration to honour.
|
|
785
|
+
*
|
|
786
|
+
* The admission count is bounded by {@link MAX_UNDECLARED_LOCAL_DEV_DEPENDENCIES}.
|
|
787
|
+
*/
|
|
788
|
+
function undeclaredLocalDevDependencyNames(rootPackage, pathGuards, limits) {
|
|
789
|
+
const development = rootPackage.manifest.devDependencies;
|
|
790
|
+
if (!development || typeof development !== 'object')
|
|
791
|
+
return [];
|
|
792
|
+
const admitted = [];
|
|
793
|
+
for (const [name, specifier] of Object.entries(development)) {
|
|
794
|
+
// Already carried by the declared half; resolving again would only add
|
|
795
|
+
// guards. Its `<missing>` edge is that half's responsibility.
|
|
796
|
+
if (isLocallyLinkedSpecifier(specifier))
|
|
797
|
+
continue;
|
|
798
|
+
const resolved = resolveDependencyPackageRoot(rootPackage.root, name, pathGuards, limits);
|
|
799
|
+
if (resolved !== null && !hasNodeModulesSegment(resolved))
|
|
800
|
+
admitted.push(name);
|
|
801
|
+
}
|
|
802
|
+
return admitted.length <= MAX_UNDECLARED_LOCAL_DEV_DEPENDENCIES ? admitted : [];
|
|
803
|
+
}
|
|
566
804
|
function collectRuntimePackages(packageRoot, directoryGuards, pathGuards, options, budget, limits) {
|
|
567
805
|
const rootManifestPath = path.join(packageRoot, 'package.json');
|
|
568
806
|
recordDirectoryGuard(directoryGuards, packageRoot);
|
|
@@ -582,7 +820,20 @@ function collectRuntimePackages(packageRoot, directoryGuards, pathGuards, option
|
|
|
582
820
|
budget.packages = 1;
|
|
583
821
|
for (let index = 0; index < queue.length; index += 1) {
|
|
584
822
|
const parent = queue[index];
|
|
585
|
-
for
|
|
823
|
+
// The declared half is enumerated for every package; the resolved-location
|
|
824
|
+
// half is scoped to the root package, where the 1998-resolution /
|
|
825
|
+
// 8829-extra-guard blow-up documented on
|
|
826
|
+
// `undeclaredLocalDevDependencyNames` cannot occur. Dropping this scope is
|
|
827
|
+
// the expensive regression, so it is pinned by a guard-count test.
|
|
828
|
+
const dependencies = parent.root === packageRoot
|
|
829
|
+
? [
|
|
830
|
+
...new Set([
|
|
831
|
+
...dependencyNames(parent.manifest),
|
|
832
|
+
...undeclaredLocalDevDependencyNames(parent, pathGuards, limits),
|
|
833
|
+
]),
|
|
834
|
+
].sort(compareBytes)
|
|
835
|
+
: dependencyNames(parent.manifest);
|
|
836
|
+
for (const dependencyName of dependencies) {
|
|
586
837
|
budget.edges += 1;
|
|
587
838
|
if (budget.edges > limits.runtimeEdges) {
|
|
588
839
|
throw new Error(`Analyzer dependency graph exceeded ${limits.runtimeEdges} edges: ${packageRoot}`);
|
|
@@ -658,22 +909,63 @@ function collectArtifacts(root, canonicalPrefix, directoryGuards, options, budge
|
|
|
658
909
|
throw new Error(`Analyzer runtime payload scan exceeded ${limits.runtimeEntries} entries: ${root}`);
|
|
659
910
|
}
|
|
660
911
|
for (const entry of entries) {
|
|
912
|
+
const absolutePath = path.join(absoluteDir, entry.name);
|
|
913
|
+
const relativePath = path.relative(root, absolutePath).split(path.sep).join('/');
|
|
914
|
+
const stat = lstatSync(absolutePath);
|
|
661
915
|
// Nested dependencies are collected from their manifests as separate
|
|
662
916
|
// packages. Only prune those separately traversed trees and VCS
|
|
663
917
|
// metadata; generic cache/model directories can contain loadable code,
|
|
664
918
|
// native addons, Wasm modules, or data consumed by the runtime.
|
|
665
|
-
|
|
919
|
+
//
|
|
920
|
+
// Pruning is decided by NAME alone. These four names never carry analyzer
|
|
921
|
+
// payload in any form: `node_modules` is traversed separately through
|
|
922
|
+
// `resolveDependencyPackageRoot` (which follows links and guards each
|
|
923
|
+
// hop), and a `.git`/`.hg`/`.svn` entry is VCS metadata whether it is a
|
|
924
|
+
// directory, a symbolic link into a shared store, or — inside a submodule
|
|
925
|
+
// or linked worktree checkout — a regular file holding a gitdir pointer.
|
|
926
|
+
// Hashing that pointer would make analyzer identity depend on where the
|
|
927
|
+
// checkout happens to live, which is a false-stale source, not a
|
|
928
|
+
// semantic input.
|
|
929
|
+
if (PRUNED_RUNTIME_DIRECTORIES.has(entry.name))
|
|
666
930
|
continue;
|
|
667
|
-
}
|
|
668
|
-
const absolutePath = path.join(absoluteDir, entry.name);
|
|
669
|
-
const relativePath = path.relative(root, absolutePath).split(path.sep).join('/');
|
|
670
|
-
const stat = lstatSync(absolutePath);
|
|
671
931
|
if (stat.isDirectory()) {
|
|
672
932
|
if (depth >= limits.runtimeDepth) {
|
|
673
933
|
throw new Error(`Analyzer runtime payload scan exceeded depth ${limits.runtimeDepth}: ${absolutePath}`);
|
|
674
934
|
}
|
|
675
935
|
pending.push({ absoluteDir: absolutePath, depth: depth + 1 });
|
|
676
936
|
}
|
|
937
|
+
else if (stat.isSymbolicLink() && !isFile(absolutePath)) {
|
|
938
|
+
// A symbolic link that does not resolve to a regular file must never
|
|
939
|
+
// reach the payload branch below: `snapshotReadableFile` stats the
|
|
940
|
+
// target, and a directory (or a dangling link) makes it throw, aborting
|
|
941
|
+
// the entire analyze. Workspace-linked checkouts made this reachable
|
|
942
|
+
// for every name, not just the pruned four — `dist -> build`, a
|
|
943
|
+
// vendored-grammar link, anything a sibling checkout ships.
|
|
944
|
+
//
|
|
945
|
+
// Such links are RECORDED by their link text rather than followed.
|
|
946
|
+
// Following them would (a) recurse without cycle protection — this
|
|
947
|
+
// traversal has none, so `self -> .` would ride the depth limit, which
|
|
948
|
+
// THROWS, trading one hard abort for another; (b) re-scan trees already
|
|
949
|
+
// reached by their real path, inflating the entry/byte budgets that
|
|
950
|
+
// also throw; and (c) need a whole containment/TOCTOU trust boundary
|
|
951
|
+
// for targets outside the package. Recording the text is cycle-free,
|
|
952
|
+
// costs one `readlink`, and still moves the receipt when the link is
|
|
953
|
+
// retargeted. The trade-off is that a link's target contributes no
|
|
954
|
+
// content of its own: when it points outside the package, only the
|
|
955
|
+
// link text is covered. Links that DO resolve to a regular file keep
|
|
956
|
+
// their content digest below, unchanged.
|
|
957
|
+
if (shouldHashRuntimePayload(relativePath)) {
|
|
958
|
+
budget.artifacts += 1;
|
|
959
|
+
if (budget.artifacts > limits.runtimePayloads) {
|
|
960
|
+
throw new Error(`Analyzer runtime payload scan exceeded ${limits.runtimePayloads} payloads: ${root}`);
|
|
961
|
+
}
|
|
962
|
+
artifacts.push({
|
|
963
|
+
absolutePath,
|
|
964
|
+
canonicalPath: `${canonicalPrefix}/${relativePath}`,
|
|
965
|
+
kind: 'unfollowed-symlink',
|
|
966
|
+
});
|
|
967
|
+
}
|
|
968
|
+
}
|
|
677
969
|
else if ((stat.isFile() || stat.isSymbolicLink()) &&
|
|
678
970
|
shouldHashRuntimePayload(relativePath)) {
|
|
679
971
|
const readableState = snapshotReadableFile(absolutePath);
|
|
@@ -811,7 +1103,7 @@ function dependencySnapshot(inputs) {
|
|
|
811
1103
|
absolutePath: artifact.absolutePath,
|
|
812
1104
|
canonicalPath: artifact.canonicalPath,
|
|
813
1105
|
kind: artifact.kind,
|
|
814
|
-
state:
|
|
1106
|
+
state: snapshotRuntimeArtifact(artifact),
|
|
815
1107
|
})),
|
|
816
1108
|
directories: [...inputs.directoryGuards.entries()]
|
|
817
1109
|
.map(([absolutePath, guard]) => ({ absolutePath, ...guard }))
|
|
@@ -825,9 +1117,26 @@ function artifactCacheKey(artifact) {
|
|
|
825
1117
|
return JSON.stringify([artifact.kind, artifact.canonicalPath, artifact.absolutePath]);
|
|
826
1118
|
}
|
|
827
1119
|
function hashRuntimeArtifact(artifact, cache, options) {
|
|
1120
|
+
if (artifact.kind === 'unfollowed-symlink') {
|
|
1121
|
+
// The link text is the entire payload, so there is no file read for a
|
|
1122
|
+
// cached digest to amortize: recompute it and stay independent of the
|
|
1123
|
+
// cache's freshness. The distinct frame label keeps a link recording from
|
|
1124
|
+
// ever colliding with a content digest.
|
|
1125
|
+
const state = snapshotSymlinkArtifact(artifact.absolutePath);
|
|
1126
|
+
return {
|
|
1127
|
+
...artifact,
|
|
1128
|
+
state,
|
|
1129
|
+
digest: hashCanonicalFrames([
|
|
1130
|
+
['runtime-payload-link-v1', artifact.kind, state.symlinkTarget],
|
|
1131
|
+
]),
|
|
1132
|
+
};
|
|
1133
|
+
}
|
|
828
1134
|
const before = snapshotReadableFile(artifact.absolutePath);
|
|
829
|
-
if (cache &&
|
|
830
|
-
|
|
1135
|
+
if (cache &&
|
|
1136
|
+
cache.kind !== 'unfollowed-symlink' &&
|
|
1137
|
+
SHA256_PATTERN.test(cache.digest) &&
|
|
1138
|
+
isDeepStrictEqual(cache.state, before)) {
|
|
1139
|
+
return { ...artifact, state: before, digest: cache.digest };
|
|
831
1140
|
}
|
|
832
1141
|
const stable = hashStableFile(artifact.absolutePath);
|
|
833
1142
|
const digest = hashCanonicalFrames([
|
|
@@ -843,7 +1152,7 @@ function hashRuntimeArtifact(artifact, cache, options) {
|
|
|
843
1152
|
path: artifact.absolutePath,
|
|
844
1153
|
bytes: stable.bytes,
|
|
845
1154
|
});
|
|
846
|
-
return {
|
|
1155
|
+
return { ...artifact, state: stable.state, digest };
|
|
847
1156
|
}
|
|
848
1157
|
function compareEdges(a, b) {
|
|
849
1158
|
return compareBytes(JSON.stringify([
|
|
@@ -908,7 +1217,7 @@ function hashDependencyRuntime(inputs, cache, options, runtimeVariant) {
|
|
|
908
1217
|
artifact.kind,
|
|
909
1218
|
digestBytes(hashed.digest),
|
|
910
1219
|
]);
|
|
911
|
-
nextArtifacts.push(
|
|
1220
|
+
nextArtifacts.push(hashed);
|
|
912
1221
|
}
|
|
913
1222
|
return {
|
|
914
1223
|
identity: {
|
|
@@ -936,6 +1245,17 @@ function isReadableFileState(value) {
|
|
|
936
1245
|
isStatState(record.target) &&
|
|
937
1246
|
(record.symlinkTarget === undefined || typeof record.symlinkTarget === 'string'));
|
|
938
1247
|
}
|
|
1248
|
+
function isSymlinkArtifactState(value) {
|
|
1249
|
+
if (typeof value !== 'object' || value === null)
|
|
1250
|
+
return false;
|
|
1251
|
+
const record = value;
|
|
1252
|
+
// `target === undefined` keeps a readable-file state from masquerading as an
|
|
1253
|
+
// unresolved link recording, which would otherwise be validated against the
|
|
1254
|
+
// wrong guard mode on the warm path.
|
|
1255
|
+
return (isStatState(record.link) &&
|
|
1256
|
+
typeof record.symlinkTarget === 'string' &&
|
|
1257
|
+
record.target === undefined);
|
|
1258
|
+
}
|
|
939
1259
|
function isDependencyPathGuardResult(value) {
|
|
940
1260
|
if (value === null)
|
|
941
1261
|
return true;
|
|
@@ -1081,13 +1401,16 @@ function isIdentityCachePayload(value, packageRoot, buildRoot, runtimeVariant, t
|
|
|
1081
1401
|
if (typeof entry !== 'object' || entry === null)
|
|
1082
1402
|
return false;
|
|
1083
1403
|
const item = entry;
|
|
1084
|
-
|
|
1085
|
-
path.isAbsolute(item.absolutePath)
|
|
1086
|
-
typeof item.canonicalPath
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1404
|
+
if (typeof item.absolutePath !== 'string' ||
|
|
1405
|
+
!path.isAbsolute(item.absolutePath) ||
|
|
1406
|
+
typeof item.canonicalPath !== 'string' ||
|
|
1407
|
+
typeof item.digest !== 'string' ||
|
|
1408
|
+
!SHA256_PATTERN.test(item.digest)) {
|
|
1409
|
+
return false;
|
|
1410
|
+
}
|
|
1411
|
+
return item.kind === 'unfollowed-symlink'
|
|
1412
|
+
? isSymlinkArtifactState(item.state)
|
|
1413
|
+
: (item.kind === 'file' || item.kind === 'symlink') && isReadableFileState(item.state);
|
|
1091
1414
|
});
|
|
1092
1415
|
const hasBuildRootGuard = record.buildDirectoryGuards.some((entry) => typeof entry === 'object' &&
|
|
1093
1416
|
entry !== null &&
|
|
@@ -1509,9 +1832,24 @@ function validateIdentityCache(cache, options) {
|
|
|
1509
1832
|
}
|
|
1510
1833
|
}
|
|
1511
1834
|
for (const artifact of cache.artifactEntries) {
|
|
1512
|
-
|
|
1835
|
+
// A recorded link is re-probed as a link, never as a readable file: the
|
|
1836
|
+
// readable-file probe resolves the target and would report `null` for the
|
|
1837
|
+
// very inputs this kind exists to describe, failing every warm validation.
|
|
1838
|
+
const probe = artifact.kind === 'unfollowed-symlink'
|
|
1839
|
+
? {
|
|
1840
|
+
request: { absolutePath: artifact.absolutePath, mode: 'link' },
|
|
1841
|
+
expected: {
|
|
1842
|
+
type: 'symlink',
|
|
1843
|
+
state: artifact.state.link,
|
|
1844
|
+
symlinkTarget: artifact.state.symlinkTarget,
|
|
1845
|
+
},
|
|
1846
|
+
}
|
|
1847
|
+
: {
|
|
1848
|
+
request: { absolutePath: artifact.absolutePath, mode: 'readable-file' },
|
|
1849
|
+
expected: { type: 'readable-file', state: artifact.state },
|
|
1850
|
+
};
|
|
1851
|
+
if (!add(probe.request, probe.expected))
|
|
1513
1852
|
return false;
|
|
1514
|
-
}
|
|
1515
1853
|
}
|
|
1516
1854
|
const entries = [...expected.entries()];
|
|
1517
1855
|
const requests = entries.map(([key]) => {
|