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
package/dist/lib/utils.d.ts
CHANGED
|
@@ -1 +1,114 @@
|
|
|
1
1
|
export declare const generateId: (label: string, name: string) => string;
|
|
2
|
+
/**
|
|
3
|
+
* Total order on strings by UTF-16 code unit — deliberately NOT `localeCompare`.
|
|
4
|
+
*
|
|
5
|
+
* `localeCompare` resolves against the host's default ICU locale, so two machines
|
|
6
|
+
* can order the same pair differently and a tie-broken cap keeps a different
|
|
7
|
+
* subset on each (#2787). Code-unit order is host-independent and matches the
|
|
8
|
+
* binary `ORDER BY` the graph queries use, so a JS re-sort reproduces the DB's
|
|
9
|
+
* order instead of fighting it.
|
|
10
|
+
*
|
|
11
|
+
* Use this for every tiebreak that feeds a `.slice()`, a page boundary, or any
|
|
12
|
+
* other cut — `Array.prototype.sort` is stable, so a comparator that returns 0
|
|
13
|
+
* for distinct elements silently falls back to input order.
|
|
14
|
+
*/
|
|
15
|
+
export declare const compareCodeUnits: (a: string, b: string) => number;
|
|
16
|
+
/**
|
|
17
|
+
* How many links of an `Error.cause` chain any walker below visits, counting
|
|
18
|
+
* the head. THE bound — hand-rolled copies had drifted to three different
|
|
19
|
+
* numbers with three different loop conditions (`depth < 5` in two places,
|
|
20
|
+
* `depth <= 5` in a third, i.e. six levels).
|
|
21
|
+
*
|
|
22
|
+
* The bound exists purely so a cyclic chain (`a.cause = b; b.cause = a`)
|
|
23
|
+
* cannot loop forever. Real chains are one or two links deep — the ingestion
|
|
24
|
+
* phase runner wraps a phase failure once as
|
|
25
|
+
* `new Error("Phase 'X' failed: …", { cause })` — so five leaves ample
|
|
26
|
+
* headroom for future nesting.
|
|
27
|
+
*/
|
|
28
|
+
export declare const CAUSE_CHAIN_MAX_DEPTH = 5;
|
|
29
|
+
/**
|
|
30
|
+
* Walk `err` and its `cause` chain, head first, yielding each `Error` link.
|
|
31
|
+
*
|
|
32
|
+
* Stops at the first non-`Error` link (a `cause` may legally be any value, and
|
|
33
|
+
* a non-Error carries no further `cause` worth following) and after
|
|
34
|
+
* `maxDepth` links. Non-`Error` input yields nothing.
|
|
35
|
+
*
|
|
36
|
+
* THE single cause-chain traversal. Consume this (or {@link findInCauseChain})
|
|
37
|
+
* rather than re-rolling the `for (let depth = 0; …; current = current.cause)`
|
|
38
|
+
* loop: every hand-rolled copy has to re-decide the bound and the loop
|
|
39
|
+
* condition, and they did not agree.
|
|
40
|
+
*/
|
|
41
|
+
export declare function causeChain(err: unknown, maxDepth?: number): Generator<Error>;
|
|
42
|
+
/**
|
|
43
|
+
* Find the first link of `err`'s cause chain that `match` accepts.
|
|
44
|
+
*
|
|
45
|
+
* Load-bearing for CLI error classification: the ingestion phase runner
|
|
46
|
+
* rewraps every phase failure as `new Error("Phase 'X' failed: …", { cause })`,
|
|
47
|
+
* so a bare `instanceof` at the CLI boundary misses the real error entirely
|
|
48
|
+
* and falls through to a generic stack dump. Classify by TYPE through this
|
|
49
|
+
* helper (the repo norm from #2385), never by message text.
|
|
50
|
+
*/
|
|
51
|
+
export declare function findInCauseChain<T>(err: unknown, match: (e: unknown) => e is T, maxDepth?: number): T | undefined;
|
|
52
|
+
/**
|
|
53
|
+
* Drop a Windows extended-length (`\\?\`) prefix from a path (#2667).
|
|
54
|
+
*
|
|
55
|
+
* **Comparison domain only.** Never apply this to a string that is about to be
|
|
56
|
+
* handed to `fs`: libuv's `fs__capture_path` only converts WTF-8 to UTF-16 and
|
|
57
|
+
* does *not* re-add the prefix for over-MAX_PATH paths, so stripping an
|
|
58
|
+
* filesystem-facing path would break long-path access on hosts that have not
|
|
59
|
+
* opted into `LongPathsEnabled`. Registry keys, repo-resolution lookups and
|
|
60
|
+
* other pure string comparisons are safe — and are exactly where an
|
|
61
|
+
* un-normalized prefix silently fails to match.
|
|
62
|
+
*
|
|
63
|
+
* The prefix can only ever arrive from caller-supplied input (`path.resolve`
|
|
64
|
+
* preserves it); `realpathSync.native` cannot emit it, because libuv's
|
|
65
|
+
* `fs__realpath_handle` strips it unconditionally.
|
|
66
|
+
*
|
|
67
|
+
* `\\?\Volume{GUID}\…` is deliberately left alone: the remainder of a volume-GUID
|
|
68
|
+
* path is not a usable path, so stripping it would invent a wrong one. The `\\.\`
|
|
69
|
+
* device namespace is left alone for the same reason and one more — most of what
|
|
70
|
+
* it addresses (`\\.\PhysicalDrive0`, `\\.\COM1`, `\\.\pipe\…`) is not a
|
|
71
|
+
* filesystem path at all. Both forms simply fail to match a registry entry, which
|
|
72
|
+
* is the safe direction. `platform` is explicit so the transform is unit-testable
|
|
73
|
+
* off Windows — same shape as `normalizeAnalyzerRootPath` in
|
|
74
|
+
* `src/core/analyzer-identity.ts`.
|
|
75
|
+
*
|
|
76
|
+
* Call this on a `path.resolve`d path. Only the backslash spelling is matched,
|
|
77
|
+
* which is sufficient there because `path.win32.resolve` already folds the
|
|
78
|
+
* forward-slash spelling into it (`//?/D:/a` → `\\?\D:\a`). A raw, unresolved
|
|
79
|
+
* `//?/…` string is returned unchanged rather than half-normalized.
|
|
80
|
+
*/
|
|
81
|
+
export declare const stripWindowsLongPathPrefix: (p: string, platform?: NodeJS.Platform) => string;
|
|
82
|
+
/**
|
|
83
|
+
* Split `items` into consecutive slices of at most `size`.
|
|
84
|
+
*
|
|
85
|
+
* Returns an empty array for empty input, and never returns an empty slice, so
|
|
86
|
+
* `for (const batch of chunk(xs, n))` always has something to work on.
|
|
87
|
+
*
|
|
88
|
+
* Callers batching a GRAPH QUERY should take the size from `core/lbug/query-batch.ts`,
|
|
89
|
+
* which documents why a query built from a caller-sized array needs a ceiling at
|
|
90
|
+
* all (#2915) and which of the two ceilings applies: `LBUG_QUERY_BATCH_SIZE` when
|
|
91
|
+
* each item makes the query do more work, `LBUG_ID_PROBE_BATCH_SIZE` when it is a
|
|
92
|
+
* plain `id IN $ids` probe and round trips dominate. They differ by 10x, in
|
|
93
|
+
* opposite directions, for that reason.
|
|
94
|
+
*/
|
|
95
|
+
export declare function chunk<T>(items: readonly T[], size: number): T[][];
|
|
96
|
+
/**
|
|
97
|
+
* Run `run` over each item with at most `concurrency` in flight, returning the
|
|
98
|
+
* results in input order.
|
|
99
|
+
*
|
|
100
|
+
* A failure is reported through `onError` and yields `undefined` for that item,
|
|
101
|
+
* so one bad item degrades the result (the caller raises its own `partial`
|
|
102
|
+
* flag) instead of discarding the items that succeeded beside it.
|
|
103
|
+
*
|
|
104
|
+
* This SCHEDULES, it does not synchronize: `run` must be safe to execute
|
|
105
|
+
* concurrently with itself. Both kinds of caller here are — `fs.readFile` per
|
|
106
|
+
* path in the ingestion walkers, and graph queries, where `executeParameterized`
|
|
107
|
+
* checks a connection out of the per-repo pool for the duration of the query
|
|
108
|
+
* (`pool-adapter.ts`) so parallel calls never share one. The default leaves
|
|
109
|
+
* headroom for other in-flight work.
|
|
110
|
+
*/
|
|
111
|
+
export declare function mapConcurrent<T, R>(items: readonly T[], run: (item: T) => Promise<R>, options?: {
|
|
112
|
+
concurrency?: number;
|
|
113
|
+
onError?: (error: unknown) => void;
|
|
114
|
+
}): Promise<(R | undefined)[]>;
|
package/dist/lib/utils.js
CHANGED
|
@@ -1,3 +1,188 @@
|
|
|
1
1
|
export const generateId = (label, name) => {
|
|
2
2
|
return `${label}:${name}`;
|
|
3
3
|
};
|
|
4
|
+
/**
|
|
5
|
+
* Total order on strings by UTF-16 code unit — deliberately NOT `localeCompare`.
|
|
6
|
+
*
|
|
7
|
+
* `localeCompare` resolves against the host's default ICU locale, so two machines
|
|
8
|
+
* can order the same pair differently and a tie-broken cap keeps a different
|
|
9
|
+
* subset on each (#2787). Code-unit order is host-independent and matches the
|
|
10
|
+
* binary `ORDER BY` the graph queries use, so a JS re-sort reproduces the DB's
|
|
11
|
+
* order instead of fighting it.
|
|
12
|
+
*
|
|
13
|
+
* Use this for every tiebreak that feeds a `.slice()`, a page boundary, or any
|
|
14
|
+
* other cut — `Array.prototype.sort` is stable, so a comparator that returns 0
|
|
15
|
+
* for distinct elements silently falls back to input order.
|
|
16
|
+
*/
|
|
17
|
+
export const compareCodeUnits = (a, b) => (a < b ? -1 : a > b ? 1 : 0);
|
|
18
|
+
/**
|
|
19
|
+
* How many links of an `Error.cause` chain any walker below visits, counting
|
|
20
|
+
* the head. THE bound — hand-rolled copies had drifted to three different
|
|
21
|
+
* numbers with three different loop conditions (`depth < 5` in two places,
|
|
22
|
+
* `depth <= 5` in a third, i.e. six levels).
|
|
23
|
+
*
|
|
24
|
+
* The bound exists purely so a cyclic chain (`a.cause = b; b.cause = a`)
|
|
25
|
+
* cannot loop forever. Real chains are one or two links deep — the ingestion
|
|
26
|
+
* phase runner wraps a phase failure once as
|
|
27
|
+
* `new Error("Phase 'X' failed: …", { cause })` — so five leaves ample
|
|
28
|
+
* headroom for future nesting.
|
|
29
|
+
*/
|
|
30
|
+
export const CAUSE_CHAIN_MAX_DEPTH = 5;
|
|
31
|
+
/**
|
|
32
|
+
* Walk `err` and its `cause` chain, head first, yielding each `Error` link.
|
|
33
|
+
*
|
|
34
|
+
* Stops at the first non-`Error` link (a `cause` may legally be any value, and
|
|
35
|
+
* a non-Error carries no further `cause` worth following) and after
|
|
36
|
+
* `maxDepth` links. Non-`Error` input yields nothing.
|
|
37
|
+
*
|
|
38
|
+
* THE single cause-chain traversal. Consume this (or {@link findInCauseChain})
|
|
39
|
+
* rather than re-rolling the `for (let depth = 0; …; current = current.cause)`
|
|
40
|
+
* loop: every hand-rolled copy has to re-decide the bound and the loop
|
|
41
|
+
* condition, and they did not agree.
|
|
42
|
+
*/
|
|
43
|
+
export function* causeChain(err, maxDepth = CAUSE_CHAIN_MAX_DEPTH) {
|
|
44
|
+
let current = err;
|
|
45
|
+
for (let depth = 0; depth < maxDepth && current instanceof Error; depth++) {
|
|
46
|
+
yield current;
|
|
47
|
+
current = current.cause;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Find the first link of `err`'s cause chain that `match` accepts.
|
|
52
|
+
*
|
|
53
|
+
* Load-bearing for CLI error classification: the ingestion phase runner
|
|
54
|
+
* rewraps every phase failure as `new Error("Phase 'X' failed: …", { cause })`,
|
|
55
|
+
* so a bare `instanceof` at the CLI boundary misses the real error entirely
|
|
56
|
+
* and falls through to a generic stack dump. Classify by TYPE through this
|
|
57
|
+
* helper (the repo norm from #2385), never by message text.
|
|
58
|
+
*/
|
|
59
|
+
export function findInCauseChain(err, match, maxDepth = CAUSE_CHAIN_MAX_DEPTH) {
|
|
60
|
+
for (const link of causeChain(err, maxDepth)) {
|
|
61
|
+
if (match(link))
|
|
62
|
+
return link;
|
|
63
|
+
}
|
|
64
|
+
return undefined;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Drop a Windows extended-length (`\\?\`) prefix from a path (#2667).
|
|
68
|
+
*
|
|
69
|
+
* **Comparison domain only.** Never apply this to a string that is about to be
|
|
70
|
+
* handed to `fs`: libuv's `fs__capture_path` only converts WTF-8 to UTF-16 and
|
|
71
|
+
* does *not* re-add the prefix for over-MAX_PATH paths, so stripping an
|
|
72
|
+
* filesystem-facing path would break long-path access on hosts that have not
|
|
73
|
+
* opted into `LongPathsEnabled`. Registry keys, repo-resolution lookups and
|
|
74
|
+
* other pure string comparisons are safe — and are exactly where an
|
|
75
|
+
* un-normalized prefix silently fails to match.
|
|
76
|
+
*
|
|
77
|
+
* The prefix can only ever arrive from caller-supplied input (`path.resolve`
|
|
78
|
+
* preserves it); `realpathSync.native` cannot emit it, because libuv's
|
|
79
|
+
* `fs__realpath_handle` strips it unconditionally.
|
|
80
|
+
*
|
|
81
|
+
* `\\?\Volume{GUID}\…` is deliberately left alone: the remainder of a volume-GUID
|
|
82
|
+
* path is not a usable path, so stripping it would invent a wrong one. The `\\.\`
|
|
83
|
+
* device namespace is left alone for the same reason and one more — most of what
|
|
84
|
+
* it addresses (`\\.\PhysicalDrive0`, `\\.\COM1`, `\\.\pipe\…`) is not a
|
|
85
|
+
* filesystem path at all. Both forms simply fail to match a registry entry, which
|
|
86
|
+
* is the safe direction. `platform` is explicit so the transform is unit-testable
|
|
87
|
+
* off Windows — same shape as `normalizeAnalyzerRootPath` in
|
|
88
|
+
* `src/core/analyzer-identity.ts`.
|
|
89
|
+
*
|
|
90
|
+
* Call this on a `path.resolve`d path. Only the backslash spelling is matched,
|
|
91
|
+
* which is sufficient there because `path.win32.resolve` already folds the
|
|
92
|
+
* forward-slash spelling into it (`//?/D:/a` → `\\?\D:\a`). A raw, unresolved
|
|
93
|
+
* `//?/…` string is returned unchanged rather than half-normalized.
|
|
94
|
+
*/
|
|
95
|
+
export const stripWindowsLongPathPrefix = (p, platform = process.platform) => {
|
|
96
|
+
if (platform !== 'win32')
|
|
97
|
+
return p;
|
|
98
|
+
// Both spellings are case-insensitive: the Windows object namespace that
|
|
99
|
+
// `\\?\` addresses is, so `\\?\unc\…` is as valid as `\\?\UNC\…`.
|
|
100
|
+
//
|
|
101
|
+
// Each pattern requires the component that makes the remainder a usable path —
|
|
102
|
+
// a share name after `UNC\`, a separator after the drive colon. Without those
|
|
103
|
+
// the slice would emit something worse than the input it was handed: `\\?\UNC`
|
|
104
|
+
// would become the bare root `\\`, and the drive-relative `\\?\D:foo` would
|
|
105
|
+
// become `D:foo`, which is not absolute and would resolve against the process
|
|
106
|
+
// cwd if a future caller ever passed it to `fs`. A malformed extended path is
|
|
107
|
+
// left untouched instead, so it simply fails to match a registry entry.
|
|
108
|
+
if (/^\\\\\?\\UNC\\(?=[^\\])/i.test(p))
|
|
109
|
+
return `\\\\${p.slice(8)}`;
|
|
110
|
+
if (/^\\\\\?\\[A-Za-z]:\\/.test(p))
|
|
111
|
+
return p.slice(4);
|
|
112
|
+
return p;
|
|
113
|
+
};
|
|
114
|
+
/**
|
|
115
|
+
* Split `items` into consecutive slices of at most `size`.
|
|
116
|
+
*
|
|
117
|
+
* Returns an empty array for empty input, and never returns an empty slice, so
|
|
118
|
+
* `for (const batch of chunk(xs, n))` always has something to work on.
|
|
119
|
+
*
|
|
120
|
+
* Callers batching a GRAPH QUERY should take the size from `core/lbug/query-batch.ts`,
|
|
121
|
+
* which documents why a query built from a caller-sized array needs a ceiling at
|
|
122
|
+
* all (#2915) and which of the two ceilings applies: `LBUG_QUERY_BATCH_SIZE` when
|
|
123
|
+
* each item makes the query do more work, `LBUG_ID_PROBE_BATCH_SIZE` when it is a
|
|
124
|
+
* plain `id IN $ids` probe and round trips dominate. They differ by 10x, in
|
|
125
|
+
* opposite directions, for that reason.
|
|
126
|
+
*/
|
|
127
|
+
export function chunk(items, size) {
|
|
128
|
+
// `NaN` fails every comparison, so a bare `size < 1` lets it through and
|
|
129
|
+
// A size is a COUNT, so it has to be a positive integer — `Number.isInteger`
|
|
130
|
+
// rather than `Number.isFinite`, because a fractional size silently DUPLICATES
|
|
131
|
+
// items rather than failing: `slice` truncates its indices while `i` does not,
|
|
132
|
+
// so size 1.5 yields slice(0, 1.5) = items 0-1 and then slice(1.5, 3) = items
|
|
133
|
+
// 1-2, and item 1 lands in two batches. `NaN` is the other shape this rejects —
|
|
134
|
+
// it fails every comparison, so a bare `size < 1` lets it through and `i += NaN`
|
|
135
|
+
// produces exactly one empty slice, which the docstring promises never to
|
|
136
|
+
// return. `mapConcurrent`'s `Math.max(1, …)` propagates a NaN concurrency the
|
|
137
|
+
// same way.
|
|
138
|
+
if (!Number.isInteger(size) || size < 1) {
|
|
139
|
+
throw new RangeError(`chunk size must be a positive integer, got ${size}`);
|
|
140
|
+
}
|
|
141
|
+
const batches = [];
|
|
142
|
+
for (let i = 0; i < items.length; i += size)
|
|
143
|
+
batches.push(items.slice(i, i + size));
|
|
144
|
+
return batches;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Run `run` over each item with at most `concurrency` in flight, returning the
|
|
148
|
+
* results in input order.
|
|
149
|
+
*
|
|
150
|
+
* A failure is reported through `onError` and yields `undefined` for that item,
|
|
151
|
+
* so one bad item degrades the result (the caller raises its own `partial`
|
|
152
|
+
* flag) instead of discarding the items that succeeded beside it.
|
|
153
|
+
*
|
|
154
|
+
* This SCHEDULES, it does not synchronize: `run` must be safe to execute
|
|
155
|
+
* concurrently with itself. Both kinds of caller here are — `fs.readFile` per
|
|
156
|
+
* path in the ingestion walkers, and graph queries, where `executeParameterized`
|
|
157
|
+
* checks a connection out of the per-repo pool for the duration of the query
|
|
158
|
+
* (`pool-adapter.ts`) so parallel calls never share one. The default leaves
|
|
159
|
+
* headroom for other in-flight work.
|
|
160
|
+
*/
|
|
161
|
+
export async function mapConcurrent(items, run, options = {}) {
|
|
162
|
+
const settle = async (item) => {
|
|
163
|
+
try {
|
|
164
|
+
return await run(item);
|
|
165
|
+
}
|
|
166
|
+
catch (error) {
|
|
167
|
+
// Reporting a failure must not become a failure. `onError` is caller-supplied
|
|
168
|
+
// — a logger with a bad format string is enough — and an uncaught throw here
|
|
169
|
+
// rejects `settle`, which rejects the whole `Promise.all` wave and discards
|
|
170
|
+
// the neighbouring successes this function exists to preserve.
|
|
171
|
+
try {
|
|
172
|
+
options.onError?.(error);
|
|
173
|
+
}
|
|
174
|
+
catch {
|
|
175
|
+
/* empty */
|
|
176
|
+
}
|
|
177
|
+
return undefined;
|
|
178
|
+
}
|
|
179
|
+
};
|
|
180
|
+
// Wave scheduling rather than a rolling window: measured on the real query
|
|
181
|
+
// path the two are within noise (538ms vs 532ms on a 1,000-file diff, whose
|
|
182
|
+
// per-batch times spread only 1.35x), and most inputs produce a single wave.
|
|
183
|
+
const results = [];
|
|
184
|
+
for (const wave of chunk(items, Math.max(1, options.concurrency ?? 4))) {
|
|
185
|
+
results.push(...(await Promise.all(wave.map(settle))));
|
|
186
|
+
}
|
|
187
|
+
return results;
|
|
188
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { type SpringAopReason } from '../../core/ingestion/frameworks/spring/aop.js';
|
|
2
|
+
type SpringAopBehaviorReason = Extract<SpringAopReason, {
|
|
3
|
+
kind: 'behavior';
|
|
4
|
+
}>;
|
|
5
|
+
type SpringAopAdviceReason = Extract<SpringAopReason, {
|
|
6
|
+
kind: 'advice';
|
|
7
|
+
}>;
|
|
8
|
+
type SpringAopAspectReason = Extract<SpringAopReason, {
|
|
9
|
+
kind: 'aspect';
|
|
10
|
+
}>;
|
|
11
|
+
type SpringAopPointcutReason = Extract<SpringAopReason, {
|
|
12
|
+
kind: 'pointcut';
|
|
13
|
+
}>;
|
|
14
|
+
export interface SpringAopBehaviorMetadata {
|
|
15
|
+
readonly annotation: string;
|
|
16
|
+
readonly behavior: SpringAopBehaviorReason['behavior'];
|
|
17
|
+
readonly declaredOn: SpringAopBehaviorReason['declaredOn'];
|
|
18
|
+
readonly activation: SpringAopBehaviorReason['activation'];
|
|
19
|
+
readonly evidenceId: string;
|
|
20
|
+
}
|
|
21
|
+
export interface SpringAopAdviceMetadata {
|
|
22
|
+
readonly annotation: string;
|
|
23
|
+
readonly advice: SpringAopAdviceReason['advice'];
|
|
24
|
+
readonly pointcut: string;
|
|
25
|
+
readonly match: SpringAopAdviceReason['match'];
|
|
26
|
+
readonly activation: SpringAopAdviceReason['activation'];
|
|
27
|
+
readonly adviceId: string;
|
|
28
|
+
readonly adviceName?: string;
|
|
29
|
+
readonly adviceFilePath?: string;
|
|
30
|
+
readonly advisedId: string;
|
|
31
|
+
readonly advisedName?: string;
|
|
32
|
+
readonly advisedFilePath?: string;
|
|
33
|
+
}
|
|
34
|
+
export interface SpringAopUnresolvedPointcutMetadata {
|
|
35
|
+
readonly annotation: string;
|
|
36
|
+
readonly pointcut: string | null;
|
|
37
|
+
readonly adviceId: string;
|
|
38
|
+
readonly adviceName?: string;
|
|
39
|
+
readonly adviceFilePath?: string;
|
|
40
|
+
readonly evidenceId: string;
|
|
41
|
+
}
|
|
42
|
+
export interface SpringAopResolvedPointcutMetadata {
|
|
43
|
+
readonly annotation: string;
|
|
44
|
+
readonly pointcut: string;
|
|
45
|
+
readonly match: Extract<SpringAopPointcutReason['match'], 'static'>;
|
|
46
|
+
readonly resolution: Extract<SpringAopPointcutReason['resolution'], 'resolved'>;
|
|
47
|
+
readonly adviceId: string;
|
|
48
|
+
readonly adviceName?: string;
|
|
49
|
+
readonly adviceFilePath?: string;
|
|
50
|
+
readonly evidenceId: string;
|
|
51
|
+
}
|
|
52
|
+
export interface SpringAopAspectMetadata {
|
|
53
|
+
readonly annotation: string;
|
|
54
|
+
readonly activation: SpringAopAspectReason['activation'];
|
|
55
|
+
readonly registration: SpringAopAspectReason['registration'];
|
|
56
|
+
readonly evidenceId: string;
|
|
57
|
+
}
|
|
58
|
+
export interface SpringAopMetadata {
|
|
59
|
+
readonly framework: 'spring';
|
|
60
|
+
readonly proxied?: 'possible';
|
|
61
|
+
readonly truncated?: true;
|
|
62
|
+
readonly aspect?: SpringAopAspectMetadata;
|
|
63
|
+
readonly behaviors: readonly SpringAopBehaviorMetadata[];
|
|
64
|
+
readonly advices: readonly SpringAopAdviceMetadata[];
|
|
65
|
+
readonly resolvedPointcuts: readonly SpringAopResolvedPointcutMetadata[];
|
|
66
|
+
readonly unresolvedPointcuts: readonly SpringAopUnresolvedPointcutMetadata[];
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Read additive Spring proxy/advice metadata for context and impact results.
|
|
70
|
+
*
|
|
71
|
+
* The helper intentionally trusts only versioned reasons accepted by the
|
|
72
|
+
* shared decoder. Other DECLARES edges (for example Spring Bean factories)
|
|
73
|
+
* and malformed/forward-version evidence are ignored. Query failures are
|
|
74
|
+
* fail-soft because older or partially upgraded indexes must remain readable.
|
|
75
|
+
*/
|
|
76
|
+
export declare function querySpringAopMetadata(lbugPath: string, symbolId: string, symbolType: string): Promise<SpringAopMetadata | undefined>;
|
|
77
|
+
export {};
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
import { executeParameterized } from '../../core/lbug/pool-adapter.js';
|
|
2
|
+
import { decodeSpringAopReason, } from '../../core/ingestion/frameworks/spring/aop.js';
|
|
3
|
+
const SUPPORTED_SYMBOL_TYPES = new Set(['Class', 'Interface', 'Method', 'CodeElement']);
|
|
4
|
+
const QUERY_RESULT_LIMIT = 1_000;
|
|
5
|
+
const QUERY_FETCH_LIMIT = QUERY_RESULT_LIMIT + 1;
|
|
6
|
+
function readRowValue(row, name, index) {
|
|
7
|
+
if (typeof row === 'object' && row !== null && name in row) {
|
|
8
|
+
return row[name];
|
|
9
|
+
}
|
|
10
|
+
return Array.isArray(row) ? row[index] : undefined;
|
|
11
|
+
}
|
|
12
|
+
function readRequiredString(row, name, index) {
|
|
13
|
+
const value = readRowValue(row, name, index);
|
|
14
|
+
return typeof value === 'string' && value.length > 0 ? value : undefined;
|
|
15
|
+
}
|
|
16
|
+
function readOptionalString(row, name, index) {
|
|
17
|
+
const value = readRowValue(row, name, index);
|
|
18
|
+
return typeof value === 'string' && value.length > 0 ? value : undefined;
|
|
19
|
+
}
|
|
20
|
+
function normalizeRelationshipRow(row) {
|
|
21
|
+
const sourceId = readRequiredString(row, 'sourceId', 0);
|
|
22
|
+
const targetId = readRequiredString(row, 'targetId', 3);
|
|
23
|
+
if (sourceId === undefined || targetId === undefined)
|
|
24
|
+
return undefined;
|
|
25
|
+
const sourceName = readOptionalString(row, 'sourceName', 1);
|
|
26
|
+
const sourceFilePath = readOptionalString(row, 'sourceFilePath', 2);
|
|
27
|
+
const targetName = readOptionalString(row, 'targetName', 4);
|
|
28
|
+
const targetFilePath = readOptionalString(row, 'targetFilePath', 5);
|
|
29
|
+
return {
|
|
30
|
+
sourceId,
|
|
31
|
+
...optionalField('sourceName', sourceName),
|
|
32
|
+
...optionalField('sourceFilePath', sourceFilePath),
|
|
33
|
+
targetId,
|
|
34
|
+
...optionalField('targetName', targetName),
|
|
35
|
+
...optionalField('targetFilePath', targetFilePath),
|
|
36
|
+
reason: readRowValue(row, 'reason', 6),
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
function optionalField(key, value) {
|
|
40
|
+
return value === undefined ? {} : { [key]: value };
|
|
41
|
+
}
|
|
42
|
+
function stableDedupe(values, keyOf) {
|
|
43
|
+
const unique = new Map();
|
|
44
|
+
for (const value of values)
|
|
45
|
+
unique.set(keyOf(value), value);
|
|
46
|
+
return [...unique.entries()]
|
|
47
|
+
.sort(([left], [right]) => (left < right ? -1 : left > right ? 1 : 0))
|
|
48
|
+
.map(([, value]) => value);
|
|
49
|
+
}
|
|
50
|
+
const RELATIONSHIP_PROJECTION = `
|
|
51
|
+
RETURN source.id AS sourceId, source.name AS sourceName, source.filePath AS sourceFilePath,
|
|
52
|
+
target.id AS targetId, target.name AS targetName, target.filePath AS targetFilePath,
|
|
53
|
+
r.reason AS reason, r.step AS step
|
|
54
|
+
`;
|
|
55
|
+
const DETERMINISTIC_RELATIONSHIP_ORDER = 'ORDER BY sourceId, targetId, reason, step';
|
|
56
|
+
/**
|
|
57
|
+
* Read additive Spring proxy/advice metadata for context and impact results.
|
|
58
|
+
*
|
|
59
|
+
* The helper intentionally trusts only versioned reasons accepted by the
|
|
60
|
+
* shared decoder. Other DECLARES edges (for example Spring Bean factories)
|
|
61
|
+
* and malformed/forward-version evidence are ignored. Query failures are
|
|
62
|
+
* fail-soft because older or partially upgraded indexes must remain readable.
|
|
63
|
+
*/
|
|
64
|
+
export async function querySpringAopMetadata(lbugPath, symbolId, symbolType) {
|
|
65
|
+
if (!SUPPORTED_SYMBOL_TYPES.has(symbolType))
|
|
66
|
+
return undefined;
|
|
67
|
+
try {
|
|
68
|
+
const [outgoingAdviceRows, incomingAdviceRows, outgoingPointcutRows, incomingPointcutRows] = await Promise.all([
|
|
69
|
+
executeParameterized(lbugPath, `MATCH (source {id: $symbolId})-[r:CodeRelation]->(target)
|
|
70
|
+
WHERE r.type = 'ADVISED_BY'
|
|
71
|
+
AND r.reason STARTS WITH 'spring-aop:v1:'
|
|
72
|
+
${RELATIONSHIP_PROJECTION}
|
|
73
|
+
${DETERMINISTIC_RELATIONSHIP_ORDER}
|
|
74
|
+
LIMIT 1001`, { symbolId }),
|
|
75
|
+
executeParameterized(lbugPath, `MATCH (source)-[r:CodeRelation]->(target {id: $symbolId})
|
|
76
|
+
WHERE r.type = 'ADVISED_BY'
|
|
77
|
+
AND r.reason STARTS WITH 'spring-aop:v1:'
|
|
78
|
+
${RELATIONSHIP_PROJECTION}
|
|
79
|
+
${DETERMINISTIC_RELATIONSHIP_ORDER}
|
|
80
|
+
LIMIT 1001`, { symbolId }),
|
|
81
|
+
executeParameterized(lbugPath, `MATCH (source {id: $symbolId})-[r:CodeRelation]->(target:CodeElement)
|
|
82
|
+
WHERE r.type = 'DECLARES'
|
|
83
|
+
AND r.reason STARTS WITH 'spring-aop:v1:'
|
|
84
|
+
${RELATIONSHIP_PROJECTION}
|
|
85
|
+
${DETERMINISTIC_RELATIONSHIP_ORDER}
|
|
86
|
+
LIMIT 1001`, { symbolId }),
|
|
87
|
+
executeParameterized(lbugPath, `MATCH (source)-[r:CodeRelation]->(target:CodeElement {id: $symbolId})
|
|
88
|
+
WHERE r.type = 'DECLARES'
|
|
89
|
+
AND r.reason STARTS WITH 'spring-aop:v1:'
|
|
90
|
+
${RELATIONSHIP_PROJECTION}
|
|
91
|
+
${DETERMINISTIC_RELATIONSHIP_ORDER}
|
|
92
|
+
LIMIT 1001`, { symbolId }),
|
|
93
|
+
]);
|
|
94
|
+
const behaviors = [];
|
|
95
|
+
const advices = [];
|
|
96
|
+
const resolvedPointcuts = [];
|
|
97
|
+
const unresolvedPointcuts = [];
|
|
98
|
+
const aspects = [];
|
|
99
|
+
const truncated = [
|
|
100
|
+
outgoingAdviceRows,
|
|
101
|
+
incomingAdviceRows,
|
|
102
|
+
outgoingPointcutRows,
|
|
103
|
+
incomingPointcutRows,
|
|
104
|
+
].some((rows) => rows.length >= QUERY_FETCH_LIMIT);
|
|
105
|
+
let queriedSymbolIsAdvisedSource = false;
|
|
106
|
+
for (const [rows, isOutgoing] of [
|
|
107
|
+
[outgoingAdviceRows, true],
|
|
108
|
+
[incomingAdviceRows, false],
|
|
109
|
+
]) {
|
|
110
|
+
for (const rawRow of rows.slice(0, QUERY_RESULT_LIMIT)) {
|
|
111
|
+
const row = normalizeRelationshipRow(rawRow);
|
|
112
|
+
if (row === undefined)
|
|
113
|
+
continue;
|
|
114
|
+
const reason = decodeSpringAopReason(row.reason);
|
|
115
|
+
if (reason?.kind === 'behavior') {
|
|
116
|
+
if (isOutgoing)
|
|
117
|
+
queriedSymbolIsAdvisedSource = true;
|
|
118
|
+
behaviors.push({
|
|
119
|
+
annotation: reason.annotation,
|
|
120
|
+
behavior: reason.behavior,
|
|
121
|
+
declaredOn: reason.declaredOn,
|
|
122
|
+
activation: reason.activation,
|
|
123
|
+
evidenceId: row.targetId,
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
else if (reason?.kind === 'advice') {
|
|
127
|
+
if (isOutgoing)
|
|
128
|
+
queriedSymbolIsAdvisedSource = true;
|
|
129
|
+
advices.push({
|
|
130
|
+
annotation: reason.annotation,
|
|
131
|
+
advice: reason.advice,
|
|
132
|
+
pointcut: reason.pointcut,
|
|
133
|
+
match: reason.match,
|
|
134
|
+
activation: reason.activation,
|
|
135
|
+
adviceId: row.targetId,
|
|
136
|
+
...optionalField('adviceName', row.targetName),
|
|
137
|
+
...optionalField('adviceFilePath', row.targetFilePath),
|
|
138
|
+
advisedId: row.sourceId,
|
|
139
|
+
...optionalField('advisedName', row.sourceName),
|
|
140
|
+
...optionalField('advisedFilePath', row.sourceFilePath),
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
for (const rows of [outgoingPointcutRows, incomingPointcutRows]) {
|
|
146
|
+
for (const rawRow of rows.slice(0, QUERY_RESULT_LIMIT)) {
|
|
147
|
+
const row = normalizeRelationshipRow(rawRow);
|
|
148
|
+
if (row === undefined)
|
|
149
|
+
continue;
|
|
150
|
+
const reason = decodeSpringAopReason(row.reason);
|
|
151
|
+
if (reason?.kind === 'aspect') {
|
|
152
|
+
aspects.push({
|
|
153
|
+
annotation: reason.annotation,
|
|
154
|
+
activation: reason.activation,
|
|
155
|
+
registration: reason.registration,
|
|
156
|
+
evidenceId: row.targetId,
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
else if (reason?.kind === 'pointcut' &&
|
|
160
|
+
reason.match === 'static' &&
|
|
161
|
+
reason.resolution === 'resolved' &&
|
|
162
|
+
typeof reason.pointcut === 'string') {
|
|
163
|
+
resolvedPointcuts.push({
|
|
164
|
+
annotation: reason.annotation,
|
|
165
|
+
pointcut: reason.pointcut,
|
|
166
|
+
match: reason.match,
|
|
167
|
+
resolution: reason.resolution,
|
|
168
|
+
adviceId: row.sourceId,
|
|
169
|
+
...optionalField('adviceName', row.sourceName),
|
|
170
|
+
...optionalField('adviceFilePath', row.sourceFilePath),
|
|
171
|
+
evidenceId: row.targetId,
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
else if (reason?.kind === 'pointcut' && reason.match === 'unresolved') {
|
|
175
|
+
unresolvedPointcuts.push({
|
|
176
|
+
annotation: reason.annotation,
|
|
177
|
+
pointcut: reason.pointcut,
|
|
178
|
+
adviceId: row.sourceId,
|
|
179
|
+
...optionalField('adviceName', row.sourceName),
|
|
180
|
+
...optionalField('adviceFilePath', row.sourceFilePath),
|
|
181
|
+
evidenceId: row.targetId,
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
const dedupedAspects = stableDedupe(aspects, (aspect) => JSON.stringify([aspect.annotation, aspect.evidenceId]));
|
|
187
|
+
const dedupedBehaviors = stableDedupe(behaviors, (behavior) => JSON.stringify([
|
|
188
|
+
behavior.behavior,
|
|
189
|
+
behavior.annotation,
|
|
190
|
+
behavior.declaredOn,
|
|
191
|
+
behavior.evidenceId,
|
|
192
|
+
]));
|
|
193
|
+
const dedupedAdvices = stableDedupe(advices, (advice) => JSON.stringify([advice.advisedId, advice.adviceId, advice.advice, advice.pointcut]));
|
|
194
|
+
const dedupedPointcuts = stableDedupe(unresolvedPointcuts, (pointcut) => JSON.stringify([
|
|
195
|
+
pointcut.adviceId,
|
|
196
|
+
pointcut.evidenceId,
|
|
197
|
+
pointcut.annotation,
|
|
198
|
+
pointcut.pointcut,
|
|
199
|
+
]));
|
|
200
|
+
const dedupedResolvedPointcuts = stableDedupe(resolvedPointcuts, (pointcut) => JSON.stringify([
|
|
201
|
+
pointcut.adviceId,
|
|
202
|
+
pointcut.evidenceId,
|
|
203
|
+
pointcut.annotation,
|
|
204
|
+
pointcut.pointcut,
|
|
205
|
+
]));
|
|
206
|
+
if (dedupedAspects.length === 0 &&
|
|
207
|
+
dedupedBehaviors.length === 0 &&
|
|
208
|
+
dedupedAdvices.length === 0 &&
|
|
209
|
+
dedupedResolvedPointcuts.length === 0 &&
|
|
210
|
+
dedupedPointcuts.length === 0) {
|
|
211
|
+
return undefined;
|
|
212
|
+
}
|
|
213
|
+
return {
|
|
214
|
+
framework: 'spring',
|
|
215
|
+
...(queriedSymbolIsAdvisedSource ? { proxied: 'possible' } : {}),
|
|
216
|
+
...(truncated ? { truncated: true } : {}),
|
|
217
|
+
...(dedupedAspects[0] === undefined ? {} : { aspect: dedupedAspects[0] }),
|
|
218
|
+
behaviors: dedupedBehaviors,
|
|
219
|
+
advices: dedupedAdvices,
|
|
220
|
+
resolvedPointcuts: dedupedResolvedPointcuts,
|
|
221
|
+
unresolvedPointcuts: dedupedPointcuts,
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
catch {
|
|
225
|
+
return undefined;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
import { type SpringBeanMetadata } from '../../core/ingestion/frameworks/spring/bean-catalog.js';
|
|
2
|
-
|
|
2
|
+
import { type SpringBeanFactoryMetadata } from '../../core/ingestion/frameworks/spring/bean-factories.js';
|
|
3
|
+
export declare function queryClassBeanMetadata(lbugPath: string, symbolId: string, symbolType: string): Promise<SpringBeanMetadata | SpringBeanFactoryMetadata | undefined>;
|
|
@@ -1,9 +1,30 @@
|
|
|
1
1
|
import { executeParameterized } from '../../core/lbug/pool-adapter.js';
|
|
2
2
|
import { deriveSpringBeanMetadata, } from '../../core/ingestion/frameworks/spring/bean-catalog.js';
|
|
3
|
+
import { decodeSpringBeanFactoryReason, } from '../../core/ingestion/frameworks/spring/bean-factories.js';
|
|
3
4
|
export async function queryClassBeanMetadata(lbugPath, symbolId, symbolType) {
|
|
4
|
-
if (symbolType !== 'Class')
|
|
5
|
+
if (symbolType !== 'Class' && symbolType !== 'Method' && symbolType !== 'CodeElement') {
|
|
5
6
|
return undefined;
|
|
7
|
+
}
|
|
6
8
|
try {
|
|
9
|
+
if (symbolType !== 'Class') {
|
|
10
|
+
const pattern = symbolType === 'Method'
|
|
11
|
+
? 'MATCH (m:Method {id: $symbolId})-[r:CodeRelation]->(b:CodeElement)'
|
|
12
|
+
: 'MATCH (m:Method)-[r:CodeRelation]->(b:CodeElement {id: $symbolId})';
|
|
13
|
+
// determinism: probe — PK-anchored singleton. A @Bean factory's declaration
|
|
14
|
+
// node id is derived from the declaring method's id
|
|
15
|
+
// (`CodeElement:spring-bean:<methodId>`, see bean-factories.ts), so exactly
|
|
16
|
+
// one DECLARES edge with this reason prefix exists per anchored endpoint,
|
|
17
|
+
// whichever end `$symbolId` pins.
|
|
18
|
+
const rows = await executeParameterized(lbugPath, `${pattern}
|
|
19
|
+
WHERE r.type = 'DECLARES'
|
|
20
|
+
AND r.reason STARTS WITH 'spring-bean-factory:'
|
|
21
|
+
RETURN r.reason AS reason
|
|
22
|
+
LIMIT 1`, { symbolId });
|
|
23
|
+
const row = rows[0];
|
|
24
|
+
return row === undefined ? undefined : decodeSpringBeanFactoryReason(row.reason ?? row[0]);
|
|
25
|
+
}
|
|
26
|
+
// determinism: probe — PK-anchored singleton. `$symbolId` is a node primary
|
|
27
|
+
// key, so at most one Class row can match and the LIMIT never chooses.
|
|
7
28
|
const rows = await executeParameterized(lbugPath, `
|
|
8
29
|
MATCH (c:Class {id: $symbolId})
|
|
9
30
|
RETURN c.frameworkAnnotations AS frameworkAnnotations
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { executeParameterized } from '../../core/lbug/pool-adapter.js';
|
|
2
|
+
export interface ConvexDispatchMetadata {
|
|
3
|
+
readonly factory?: string;
|
|
4
|
+
readonly boundary: string;
|
|
5
|
+
readonly staleIndex?: true;
|
|
6
|
+
readonly probeFailed?: true;
|
|
7
|
+
}
|
|
8
|
+
export declare function queryConvexDispatchMetadata(lbugPath: string, symbolId: string, symbolName: string, symbolType: string, runQuery?: typeof executeParameterized): Promise<ConvexDispatchMetadata | undefined>;
|