gitnexus 1.6.10-rc.21 → 1.6.10-rc.211
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 +212 -22
- package/dist/_shared/graph/types.d.ts +27 -8
- package/dist/_shared/graph/types.d.ts.map +1 -1
- package/dist/_shared/index.d.ts +4 -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 +19 -1
- package/dist/_shared/integrations/resilient-fetch.d.ts.map +1 -1
- package/dist/_shared/integrations/resilient-fetch.js +23 -10
- 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/callable-flow-site.d.ts +110 -0
- package/dist/_shared/scope-resolution/callable-flow-site.d.ts.map +1 -0
- package/dist/_shared/scope-resolution/callable-flow-site.js +11 -0
- package/dist/_shared/scope-resolution/callable-flow-site.js.map +1 -0
- package/dist/_shared/scope-resolution/evidence-weights.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/finalize-algorithm.d.ts +6 -1
- package/dist/_shared/scope-resolution/finalize-algorithm.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/finalize-algorithm.js +316 -37
- package/dist/_shared/scope-resolution/finalize-algorithm.js.map +1 -1
- package/dist/_shared/scope-resolution/parsed-file.d.ts +7 -0
- package/dist/_shared/scope-resolution/parsed-file.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/reference-site.d.ts +124 -1
- 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 +297 -5
- package/dist/_shared/scope-resolution/types.d.ts.map +1 -1
- package/dist/cli/ai-context.d.ts +10 -2
- package/dist/cli/ai-context.js +128 -61
- 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 +25 -114
- package/dist/cli/analyze.js +194 -36
- package/dist/cli/cli-message.d.ts +1 -1
- package/dist/cli/detect-changes-format.js +19 -2
- package/dist/cli/doctor.d.ts +23 -0
- package/dist/cli/doctor.js +72 -9
- package/dist/cli/editor-targets.js +6 -0
- package/dist/cli/eval-server.d.ts +23 -1
- package/dist/cli/eval-server.js +128 -9
- 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 +23 -2
- package/dist/cli/help-i18n.js +3 -0
- package/dist/cli/i18n/en.d.ts +17 -8
- package/dist/cli/i18n/en.js +19 -8
- package/dist/cli/i18n/resources.d.ts +26 -8
- package/dist/cli/i18n/zh-CN.d.ts +9 -0
- package/dist/cli/i18n/zh-CN.js +17 -8
- package/dist/cli/index.js +16 -9
- package/dist/cli/lazy-action.d.ts +7 -0
- package/dist/cli/lazy-action.js +27 -0
- package/dist/cli/mcp.js +6 -3
- package/dist/cli/resolve-invocation.d.ts +7 -3
- package/dist/cli/resolve-invocation.js +7 -3
- package/dist/cli/setup.d.ts +8 -0
- package/dist/cli/setup.js +30 -7
- package/dist/cli/skill-gen.d.ts +1 -6
- package/dist/cli/skill-gen.js +88 -18
- package/dist/cli/standard-skills.d.ts +76 -0
- package/dist/cli/standard-skills.js +45 -0
- package/dist/cli/status.d.ts +4 -1
- package/dist/cli/status.js +57 -4
- package/dist/cli/tool.d.ts +1 -0
- package/dist/cli/tool.js +75 -7
- package/dist/cli/uninstall.js +7 -2
- package/dist/cli/wiki.d.ts +1 -0
- package/dist/cli/wiki.js +59 -10
- package/dist/config/ignore-service.d.ts +2 -0
- package/dist/config/ignore-service.js +31 -4
- package/dist/core/analysis-features.d.ts +21 -0
- package/dist/core/analysis-features.js +59 -0
- package/dist/core/analyzer-identity.d.ts +154 -0
- package/dist/core/analyzer-identity.js +2158 -0
- package/dist/core/augmentation/engine.js +95 -76
- 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/embedder.d.ts +3 -2
- package/dist/core/embeddings/embedder.js +8 -5
- package/dist/core/embeddings/embedding-identity.d.ts +11 -0
- package/dist/core/embeddings/embedding-identity.js +24 -0
- package/dist/core/embeddings/embedding-pipeline.d.ts +24 -1
- package/dist/core/embeddings/embedding-pipeline.js +341 -19
- package/dist/core/embeddings/http-client.d.ts +10 -2
- package/dist/core/embeddings/http-client.js +282 -47
- package/dist/core/embeddings/node-module-compat.d.ts +4 -2
- package/dist/core/embeddings/node-module-compat.js +4 -2
- package/dist/core/embeddings/onnxruntime-common-resolver.js +5 -5
- package/dist/core/embeddings/onnxruntime-node-resolver.js +2 -2
- package/dist/core/embeddings/runtime-install.js +1 -1
- package/dist/core/git-staleness.js +1 -1
- 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.js +5 -27
- package/dist/core/group/cross-impact.d.ts +21 -0
- package/dist/core/group/cross-impact.js +128 -15
- package/dist/core/group/cross-trace.js +27 -16
- package/dist/core/group/extractors/http-patterns/java.js +91 -14
- package/dist/core/group/extractors/http-patterns/node.js +19 -0
- 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/service.js +10 -1
- package/dist/core/group/storage.js +2 -33
- package/dist/core/group/types.d.ts +18 -0
- 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 +80 -0
- package/dist/core/index-freshness.js +120 -0
- package/dist/core/ingestion/call-processor.d.ts +13 -1
- package/dist/core/ingestion/call-processor.js +110 -3
- package/dist/core/ingestion/cfg/callee-cell-format.d.ts +42 -0
- package/dist/core/ingestion/cfg/callee-cell-format.js +42 -0
- package/dist/core/ingestion/cfg/emit.d.ts +8 -23
- package/dist/core/ingestion/cfg/emit.js +9 -23
- package/dist/core/ingestion/class-extractors/configs/go.js +10 -5
- package/dist/core/ingestion/class-extractors/configs/jvm.js +29 -0
- package/dist/core/ingestion/cluster-enricher.js +8 -4
- package/dist/core/ingestion/cobol/cobol-preprocessor.js +1 -1
- package/dist/core/ingestion/community-processor.d.ts +21 -3
- package/dist/core/ingestion/community-processor.js +88 -83
- package/dist/core/ingestion/di-extractors/index.d.ts +22 -34
- package/dist/core/ingestion/di-extractors/index.js +17 -18
- package/dist/core/ingestion/di-extractors/spring.d.ts +27 -5
- package/dist/core/ingestion/di-extractors/spring.js +87 -3
- 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/emit-references.js +4 -0
- package/dist/core/ingestion/filesystem-walker.js +16 -12
- package/dist/core/ingestion/finalize-orchestrator.js +1 -0
- package/dist/core/ingestion/frameworks/spring/analysis-features.d.ts +9 -0
- package/dist/core/ingestion/frameworks/spring/analysis-features.js +41 -0
- 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-candidates.d.ts +30 -0
- package/dist/core/ingestion/frameworks/spring/bean-candidates.js +182 -0
- package/dist/core/ingestion/frameworks/spring/bean-catalog.d.ts +12 -0
- package/dist/core/ingestion/frameworks/spring/bean-catalog.js +27 -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/config-bindings.d.ts +24 -0
- package/dist/core/ingestion/frameworks/spring/config-bindings.js +115 -0
- package/dist/core/ingestion/frameworks/spring/di-metadata.d.ts +48 -0
- package/dist/core/ingestion/frameworks/spring/di-metadata.js +379 -0
- 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 +428 -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 +27 -8
- 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 +20 -1
- package/dist/core/ingestion/language-config.js +18 -23
- package/dist/core/ingestion/language-provider.d.ts +133 -7
- package/dist/core/ingestion/languages/c/captures.js +63 -0
- package/dist/core/ingestion/languages/c/import-target.js +12 -16
- package/dist/core/ingestion/languages/c/query.js +17 -0
- package/dist/core/ingestion/languages/c/scope-resolver.js +26 -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/captures.js +93 -0
- package/dist/core/ingestion/languages/cobol/scope-resolver.js +34 -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 +222 -3
- 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 +62 -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 +44 -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 +686 -16
- package/dist/core/ingestion/languages/dart/extension-type-preprocess.d.ts +7 -0
- package/dist/core/ingestion/languages/dart/extension-type-preprocess.js +30 -0
- 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 +8 -1
- package/dist/core/ingestion/languages/go/captures.js +142 -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 +7 -0
- package/dist/core/ingestion/languages/java/analysis-features.js +25 -0
- package/dist/core/ingestion/languages/java/capture-side-channel.d.ts +38 -0
- package/dist/core/ingestion/languages/java/capture-side-channel.js +124 -0
- package/dist/core/ingestion/languages/java/captures.d.ts +4 -3
- package/dist/core/ingestion/languages/java/captures.js +321 -49
- 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/package-facts.d.ts +5 -0
- package/dist/core/ingestion/languages/java/package-facts.js +9 -0
- package/dist/core/ingestion/languages/java/package-siblings.d.ts +3 -16
- package/dist/core/ingestion/languages/java/package-siblings.js +8 -147
- package/dist/core/ingestion/languages/java/query.js +39 -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 +35 -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-bean-metadata.d.ts +2 -0
- package/dist/core/ingestion/languages/java/spring-bean-metadata.js +8 -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-config-bindings.d.ts +23 -0
- package/dist/core/ingestion/languages/java/spring-config-bindings.js +215 -0
- package/dist/core/ingestion/languages/java/spring-di.d.ts +20 -0
- package/dist/core/ingestion/languages/java/spring-di.js +160 -0
- 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 +76 -3
- package/dist/core/ingestion/languages/javascript/captures.d.ts +6 -1
- package/dist/core/ingestion/languages/javascript/captures.js +278 -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 +232 -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-facts.d.ts +35 -0
- package/dist/core/ingestion/languages/jvm/package-facts.js +40 -0
- package/dist/core/ingestion/languages/jvm/package-siblings.d.ts +14 -0
- package/dist/core/ingestion/languages/jvm/package-siblings.js +197 -0
- package/dist/core/ingestion/languages/kotlin/capture-side-channel.d.ts +40 -3
- package/dist/core/ingestion/languages/kotlin/capture-side-channel.js +111 -8
- package/dist/core/ingestion/languages/kotlin/captures.js +112 -0
- 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/package-facts.d.ts +5 -0
- package/dist/core/ingestion/languages/kotlin/package-facts.js +9 -0
- package/dist/core/ingestion/languages/kotlin/package-siblings.d.ts +4 -0
- package/dist/core/ingestion/languages/kotlin/package-siblings.js +8 -0
- package/dist/core/ingestion/languages/kotlin/query.js +47 -2
- package/dist/core/ingestion/languages/kotlin/scope-resolver.js +36 -3
- 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-bean-metadata.d.ts +2 -0
- package/dist/core/ingestion/languages/kotlin/spring-bean-metadata.js +8 -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 +20 -0
- package/dist/core/ingestion/languages/kotlin/spring-di.js +299 -0
- 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/kotlin.js +5 -6
- package/dist/core/ingestion/languages/php/captures.d.ts +5 -0
- package/dist/core/ingestion/languages/php/captures.js +359 -51
- package/dist/core/ingestion/languages/php/import-decomposer.js +12 -0
- package/dist/core/ingestion/languages/php/import-target.d.ts +2 -1
- package/dist/core/ingestion/languages/php/import-target.js +229 -7
- package/dist/core/ingestion/languages/php/interpret.js +10 -0
- package/dist/core/ingestion/languages/php/query.js +31 -0
- package/dist/core/ingestion/languages/php/scope-resolver.js +1 -1
- 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.d.ts +3 -4
- package/dist/core/ingestion/languages/python/captures.js +53 -5
- 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 -3
- package/dist/core/ingestion/languages/python/query.js +9 -0
- package/dist/core/ingestion/languages/python/receiver-binding.d.ts +17 -2
- package/dist/core/ingestion/languages/python/receiver-binding.js +192 -2
- package/dist/core/ingestion/languages/python/scope-resolver.js +27 -4
- package/dist/core/ingestion/languages/python/simple-hooks.d.ts +5 -5
- package/dist/core/ingestion/languages/python/simple-hooks.js +9 -5
- package/dist/core/ingestion/languages/ruby/captures.js +200 -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 +52 -1
- package/dist/core/ingestion/languages/rust/interpret.js +18 -0
- 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 +48 -6
- package/dist/core/ingestion/languages/rust/range-binding.d.ts +1 -11
- package/dist/core/ingestion/languages/rust/range-binding.js +149 -63
- 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 +99 -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 +288 -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/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/nuxt-auto-imports.js +2 -1
- package/dist/core/ingestion/languages/typescript/query.d.ts +1 -0
- package/dist/core/ingestion/languages/typescript/query.js +340 -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 +291 -0
- package/dist/core/ingestion/languages/typescript.js +87 -1
- 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/parsing-processor.js +32 -1
- package/dist/core/ingestion/pipeline-phases/di.d.ts +8 -33
- package/dist/core/ingestion/pipeline-phases/di.js +275 -157
- package/dist/core/ingestion/pipeline-phases/index.d.ts +3 -0
- package/dist/core/ingestion/pipeline-phases/index.js +3 -0
- package/dist/core/ingestion/pipeline-phases/parse-impl.d.ts +15 -0
- package/dist/core/ingestion/pipeline-phases/parse-impl.js +158 -3
- package/dist/core/ingestion/pipeline-phases/parse.js +5 -0
- package/dist/core/ingestion/pipeline-phases/processes.d.ts +11 -2
- package/dist/core/ingestion/pipeline-phases/processes.js +102 -7
- package/dist/core/ingestion/pipeline-phases/routes.js +56 -10
- 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/spring-config.d.ts +37 -0
- package/dist/core/ingestion/pipeline-phases/spring-config.js +433 -0
- package/dist/core/ingestion/pipeline-phases/types.d.ts +7 -0
- package/dist/core/ingestion/pipeline.d.ts +27 -3
- package/dist/core/ingestion/pipeline.js +62 -12
- 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 +78 -6
- package/dist/core/ingestion/route-extractors/data-route-table.d.ts +25 -0
- package/dist/core/ingestion/route-extractors/data-route-table.js +864 -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/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 +109 -24
- 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 +617 -59
- package/dist/core/ingestion/scope-resolution/contract/scope-resolver.d.ts +381 -22
- package/dist/core/ingestion/scope-resolution/contract/scope-resolver.js +16 -5
- package/dist/core/ingestion/scope-resolution/graph-bridge/callee-id-sink.d.ts +7 -7
- package/dist/core/ingestion/scope-resolution/graph-bridge/callee-id-sink.js +8 -7
- package/dist/core/ingestion/scope-resolution/graph-bridge/edges.d.ts +15 -1
- package/dist/core/ingestion/scope-resolution/graph-bridge/edges.js +53 -0
- package/dist/core/ingestion/scope-resolution/graph-bridge/ids.d.ts +20 -15
- package/dist/core/ingestion/scope-resolution/graph-bridge/ids.js +275 -41
- 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 +56 -1
- package/dist/core/ingestion/scope-resolution/graph-bridge/node-lookup.js +130 -32
- 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 +46 -3
- package/dist/core/ingestion/scope-resolution/passes/callable-value-flow.d.ts +64 -0
- package/dist/core/ingestion/scope-resolution/passes/callable-value-flow.js +1233 -0
- 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 +19 -4
- package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.js +160 -4
- 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 +64 -0
- package/dist/core/ingestion/scope-resolution/passes/property-dispatch.js +118 -0
- package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.d.ts +109 -8
- 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 +34 -0
- package/dist/core/ingestion/scope-resolution/pipeline/phase.js +82 -38
- package/dist/core/ingestion/scope-resolution/pipeline/run.d.ts +61 -1
- package/dist/core/ingestion/scope-resolution/pipeline/run.js +384 -48
- 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 +968 -56
- 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/taint/typescript-model.js +34 -2
- package/dist/core/ingestion/tree-sitter-queries.d.ts +11 -11
- package/dist/core/ingestion/tree-sitter-queries.js +688 -5
- package/dist/core/ingestion/type-env.js +11 -7
- package/dist/core/ingestion/type-extractors/jvm.js +17 -2
- package/dist/core/ingestion/type-extractors/shared.d.ts +17 -0
- package/dist/core/ingestion/type-extractors/shared.js +16 -0
- package/dist/core/ingestion/type-extractors/types.d.ts +12 -0
- package/dist/core/ingestion/type-extractors/typescript.d.ts +20 -0
- package/dist/core/ingestion/type-extractors/typescript.js +26 -0
- package/dist/core/ingestion/utils/ast-helpers.d.ts +311 -14
- package/dist/core/ingestion/utils/ast-helpers.js +745 -48
- 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 +153 -0
- package/dist/core/ingestion/utils/callable-flow-captures.js +928 -0
- 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 +72 -0
- package/dist/core/ingestion/workers/callable-id.js +116 -0
- package/dist/core/ingestion/workers/parse-worker.d.ts +14 -1
- package/dist/core/ingestion/workers/parse-worker.js +409 -39
- package/dist/core/ingestion/workers/worker-pool.d.ts +34 -27
- package/dist/core/ingestion/workers/worker-pool.js +133 -25
- package/dist/core/lbug/csv-generator.d.ts +27 -0
- package/dist/core/lbug/csv-generator.js +80 -17
- package/dist/core/lbug/extension-load-error.d.ts +2 -2
- package/dist/core/lbug/extension-load-error.js +44 -27
- package/dist/core/lbug/extension-loader.d.ts +29 -0
- package/dist/core/lbug/extension-loader.js +32 -7
- 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 +337 -3
- package/dist/core/lbug/lbug-adapter.js +772 -67
- package/dist/core/lbug/lbug-config.d.ts +93 -6
- package/dist/core/lbug/lbug-config.js +269 -9
- package/dist/core/lbug/native-check.d.ts +39 -0
- package/dist/core/lbug/native-check.js +323 -46
- 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 +23 -1
- package/dist/core/lbug/pool-adapter.js +115 -7
- 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 +162 -3
- package/dist/core/lbug/schema.js +392 -157
- package/dist/core/lbug/sidecar-recovery.d.ts +1 -0
- package/dist/core/lbug/sidecar-recovery.js +1 -1
- package/dist/core/lbug/sync-csv-writer.d.ts +47 -0
- package/dist/core/lbug/sync-csv-writer.js +108 -0
- package/dist/core/lbug/wal-checkpoint-driver.js +3 -0
- package/dist/core/platform/capabilities.d.ts +0 -1
- package/dist/core/platform/capabilities.js +12 -7
- package/dist/core/run-analyze.d.ts +150 -3
- package/dist/core/run-analyze.js +1562 -151
- 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 +167 -2
- package/dist/core/search/fts-indexes.js +264 -10
- package/dist/core/wiki/graph-queries.js +145 -112
- package/dist/core/wiki/llm-client.d.ts +37 -5
- package/dist/core/wiki/llm-client.js +88 -17
- 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/http-transport.d.ts +5 -0
- package/dist/mcp/http-transport.js +19 -5
- 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 +3 -0
- package/dist/mcp/local/bean-metadata.js +46 -0
- package/dist/mcp/local/local-backend.d.ts +167 -6
- package/dist/mcp/local/local-backend.js +1756 -405
- 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/output-budget.d.ts +5 -0
- package/dist/mcp/output-budget.js +52 -0
- package/dist/mcp/read-only-policy.d.ts +12 -0
- package/dist/mcp/read-only-policy.js +102 -0
- package/dist/mcp/repository-policy.d.ts +35 -0
- package/dist/mcp/repository-policy.js +333 -0
- package/dist/mcp/resources.js +34 -7
- package/dist/mcp/server.d.ts +5 -2
- package/dist/mcp/server.js +48 -18
- package/dist/mcp/tools.d.ts +8 -8
- package/dist/mcp/tools.js +91 -20
- package/dist/server/analyze-job.d.ts +40 -2
- package/dist/server/analyze-job.js +30 -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 +3 -2
- package/dist/server/analyze-worker-core.js +15 -3
- 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/analyze-worker.js +29 -6
- package/dist/server/api.d.ts +2 -11
- package/dist/server/api.js +200 -155
- 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/mcp-http.d.ts +1 -1
- package/dist/server/mcp-http.js +4 -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/server/upload-ingest.js +2 -1
- package/dist/server/validation.js +2 -1
- 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 +165 -0
- package/dist/storage/git.js +352 -3
- package/dist/storage/index-lock.d.ts +83 -0
- package/dist/storage/index-lock.js +654 -0
- package/dist/storage/parse-cache.js +482 -1
- package/dist/storage/parsedfile-store.d.ts +8 -0
- package/dist/storage/parsedfile-store.js +235 -1
- package/dist/storage/repo-manager.d.ts +29 -309
- package/dist/storage/repo-manager.js +187 -165
- 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 +20 -12
- package/scripts/cross-platform-shard.ts +143 -0
- package/scripts/cross-platform-tests.ts +94 -0
- package/scripts/ensure-fts.ts +14 -3
- package/scripts/run-cross-platform.ts +36 -10
- package/scripts/sync-plugin-manifests.mjs +192 -0
- 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-lfg/README.md +55 -0
- package/skills/gitnexus-lfg/SKILL.md +86 -0
- package/skills/gitnexus-plan/README.md +147 -0
- package/skills/gitnexus-plan/SKILL.md +348 -0
- package/skills/gitnexus-plan/references/context-ledger.md +137 -0
- package/skills/gitnexus-plan/references/context-pack.md +126 -0
- package/skills/gitnexus-plan/references/evidence-provenance.md +309 -0
- package/skills/gitnexus-plan/references/pdg-slice.md +109 -0
- package/skills/gitnexus-plan/references/plan-template.md +201 -0
- package/skills/gitnexus-plan/scripts/evidence-provenance.mjs +2366 -0
- package/skills/gitnexus-refactoring.md +48 -5
- package/skills/gitnexus-review/SKILL.md +279 -0
- package/skills/gitnexus-review/ci-personas/ci-adversarial-lens.md +42 -0
- package/skills/gitnexus-review/ci-personas/ci-blast-radius-lens.md +39 -0
- package/skills/gitnexus-review/ci-personas/ci-correctness-lens.md +37 -0
- package/skills/gitnexus-review/ci-personas/ci-coverage-lens.md +40 -0
- package/skills/gitnexus-review/ci-personas/ci-critic-lens.md +42 -0
- package/skills/gitnexus-review/ci-personas/ci-security-lens.md +39 -0
- package/skills/gitnexus-taint-analysis.md +13 -7
- package/skills/gitnexus-work/README.md +71 -0
- package/skills/gitnexus-work/SKILL.md +272 -0
- package/skills/gitnexus-work/references/evidence-provenance.md +309 -0
- package/skills/gitnexus-work/scripts/evidence-provenance.mjs +2366 -0
- package/vendor/leiden/utils.cjs +28 -1
- package/web/assets/ProcessFlowModal-Badh2Pbg.js +24 -0
- package/web/assets/__vite-browser-external-bMKyYQkO.js +1 -0
- package/web/assets/abnfDiagram-QNN2D4NM-Cq2djWWe.js +1 -0
- package/web/assets/agent-DIzEQ1JJ.js +626 -0
- package/web/assets/architecture-TIHT7OUA-V6N4J3SY-fTePvLoe.js +1 -0
- package/web/assets/architectureDiagram-OT7VKSJ7-mKEXxkeF.js +36 -0
- package/web/assets/blockDiagram-54WLDVWM-Dg_hrRWE.js +132 -0
- package/web/assets/{c4Diagram-Y2BXMSZH-DOXVs7-C.js → c4Diagram-X2LASM7V-CnhoT4aV.js} +6 -6
- 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-6L755F7B-CMhLBxi2.js +1 -0
- package/web/assets/chunk-7CWYLC5S-DRgGkkpF.js +2 -0
- package/web/assets/chunk-A7VWPJGB-B4O3oQdQ.js +1 -0
- 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-SZD42YQK-ijyKKVr1.js +70 -0
- package/web/assets/chunk-TFPGFQPA-Dj6a-0pC.js +231 -0
- 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-VJFVEZTB-CX66F2ep.js +206 -0
- 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-KFBZAVDW-Dfmf_4ti.js +3 -0
- 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/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-B4eB4dNZ.js → index-BBNl0qfX.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-BLjivjXL.js → ishikawaDiagram-4JDSWWDM-DmqWtjkl.js} +6 -6
- package/web/assets/{journeyDiagram-M6C3CM3L-Cetgs3NH.js → journeyDiagram-QUS3FAKT-XAzVzrQW.js} +6 -6
- package/web/assets/{kanban-definition-75IXJCU3-DMlCaIpf.js → kanban-definition-D4L7SQKK-YurRnmYn.js} +27 -27
- package/web/assets/katex-C5OPUE3Q-Bnbavtmu.js +257 -0
- package/web/assets/{mindmap-definition-2TDM6QVE-B4GbXQBc.js → mindmap-definition-66QP5TD6-ChrWWnil.js} +29 -29
- package/web/assets/node-Ct_zna8U.js +8 -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/preload-helper-Czpn1I53.js +1 -0
- package/web/assets/{quadrantDiagram-VICAPDV7-B1TQnlm0.js → quadrantDiagram-VO5QLCXA-B7098wSc.js} +6 -6
- 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-RASO5HTO-B-l8InpK.js +84 -0
- package/web/assets/sankeyDiagram-F32LOJ6L-Kd7zjJgX.js +40 -0
- package/web/assets/sdk-CzHHH8tD.js +37 -0
- package/web/assets/sequenceDiagram-URATNSBD-BlcdY9DS.js +162 -0
- 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-WJXWRH4I-DUfp1R3E.js +120 -0
- 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 +17 -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/skills/gitnexus-pr-review.md +0 -163
- package/web/assets/ProcessFlowModal-Dna7GkwO.js +0 -22
- package/web/assets/agent-DNYDy-KA.js +0 -660
- package/web/assets/architecture-7EHR7CIX-6QZW5X65-BVWFvYz2.js +0 -1
- package/web/assets/architectureDiagram-UL44E2DR-BU5ZRITg.js +0 -36
- package/web/assets/blockDiagram-7IZFK4PR-Dut1BpTV.js +0 -132
- package/web/assets/chunk-2T2R6R2M-pkw2oXHH.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-zxhDWgyF.js +0 -124
- package/web/assets/chunk-7J6CGLKN-AmkN8jJN.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-INKRHTLW-D9BM9HWZ.js +0 -70
- package/web/assets/chunk-J5EP6P6S-L19oz55R.js +0 -1
- package/web/assets/chunk-KGFNY3KK-tD2F6wxK.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-LCXTWHL2-Ba9JK-6F.js +0 -231
- package/web/assets/chunk-LII3EMHJ-EGx-eBIu.js +0 -1
- package/web/assets/chunk-LRIF4GLE-C3_PqUBq.js +0 -1
- package/web/assets/chunk-QA3QBVWF-D4cSJBf6.js +0 -2
- package/web/assets/chunk-RERM46MO-B5dAdWpP.js +0 -1
- package/web/assets/chunk-RG4AUYOV-OqBBMwuQ.js +0 -206
- package/web/assets/chunk-RKZBBQEN-MyIQbGgD.js +0 -1
- package/web/assets/chunk-T2UQINTJ-BJusEiGe.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-BCpUlARQ.js +0 -1
- package/web/assets/chunk-VU6ZFW4Y-BeXVk45_.js +0 -2
- package/web/assets/chunk-ZXARS5L4-BI_qR2Nm.js +0 -1
- package/web/assets/classDiagram-KGZ6W3CR-D9zSIg0x.js +0 -1
- package/web/assets/classDiagram-v2-72OJOZXJ-D9zSIg0x.js +0 -1
- package/web/assets/dagre-ND4H6XIP-CpcV5kbl.js +0 -4
- package/web/assets/diagram-3NCE3AQN-6SMxBRpj.js +0 -43
- package/web/assets/diagram-GF46GFSD-BZEdNcRZ.js +0 -24
- package/web/assets/diagram-HNR7UZ2L-DxKW2a2Y.js +0 -3
- package/web/assets/diagram-QXG6HAR7-HfTHcXX_.js +0 -24
- package/web/assets/diagram-WEQXMOUZ-CyijUS8r.js +0 -10
- package/web/assets/erDiagram-L5TCEMPS-D0fvpWEX.js +0 -85
- package/web/assets/eventmodeling-FCH6USID-MREXMVOE-CgFBM7e-.js +0 -1
- package/web/assets/flowDiagram-H6V6AXG4-Bvr9bbhk.js +0 -162
- package/web/assets/ganttDiagram-JCBTUEKG-TzODrLzv.js +0 -292
- package/web/assets/gitGraph-WXDBUCRP-R675I2BI-DCJv7SII.js +0 -1
- package/web/assets/gitGraphDiagram-S2ZK5IYY-ONQSwJIY.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-DIPVUIQ6.js +0 -2
- package/web/assets/katex-K3KEBU37-qRQBy-EZ.js +0 -261
- 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-D3YC_xyg.js +0 -30
- package/web/assets/radar-GUYGQ44K-RDLRG3WG-DeD6yN_0.js +0 -1
- package/web/assets/requirementDiagram-JXO7QTGE-f8wczLQf.js +0 -84
- package/web/assets/sankeyDiagram-URQDO5SZ-BTxzG5j0.js +0 -40
- package/web/assets/sequenceDiagram-VS2MUI6T-DuamM-IR.js +0 -162
- package/web/assets/src-BNCXICdA.js +0 -1
- package/web/assets/stateDiagram-7D4R322I-Ch2pEUcw.js +0 -1
- package/web/assets/stateDiagram-v2-36443NZ5-7ANuoZLL.js +0 -1
- package/web/assets/timeline-definition-O6YCAMPW-07BR8R8G.js +0 -120
- 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-BQX2ossk.js +0 -34
- package/web/assets/wardley-L42UT6IY-5TKZOOLJ-DqrT9tB8.js +0 -1
- package/web/assets/wardleyDiagram-CUQ6CDDI-CGIJBBiK.js +0 -78
- package/web/assets/xychartDiagram-N2JHSOCM-B3HNMuWp.js +0 -7
- /package/web/assets/{chunk-7W6UQGC5-pyKGssV3.js → chunk-LIEV3EAG-pyKGssV3.js} +0 -0
|
@@ -10,26 +10,102 @@
|
|
|
10
10
|
* fails fast on a flapping endpoint. Per-attempt timeout is enforced
|
|
11
11
|
* via `AbortSignal.timeout` on the underlying fetch.
|
|
12
12
|
*/
|
|
13
|
-
import {
|
|
14
|
-
|
|
13
|
+
import { chunk } from '../../lib/utils.js';
|
|
14
|
+
import { CircuitOpenError, ResilientFetchExhaustedError, isTerminalNetworkError, resilientFetch, } from '../../_shared/index.js';
|
|
15
|
+
const DEFAULT_HTTP_TIMEOUT_MS = 180_000;
|
|
16
|
+
const MAX_HTTP_TIMEOUT_MS = 300_000;
|
|
15
17
|
const HTTP_MAX_RETRIES = 2;
|
|
16
18
|
const HTTP_RETRY_BACKOFF_MS = 1_000;
|
|
19
|
+
const HTTP_RETRY_CAP_MS = 5_000;
|
|
17
20
|
const HTTP_BATCH_SIZE = 64;
|
|
18
21
|
const DEFAULT_DIMS = 384;
|
|
19
22
|
const HTTP_BREAKER_KEY = 'embeddings-http';
|
|
23
|
+
const HTTP_TIMEOUT_ENV = 'GITNEXUS_EMBEDDING_HTTP_TIMEOUT_MS';
|
|
24
|
+
let lastHttpRequestStartedAt;
|
|
25
|
+
let httpPaceQueue = Promise.resolve();
|
|
26
|
+
const parsePositiveIntegerEnv = (name, fallback, max) => {
|
|
27
|
+
const raw = process.env[name];
|
|
28
|
+
if (raw === undefined || raw === '')
|
|
29
|
+
return fallback;
|
|
30
|
+
if (!/^\d+$/u.test(raw)) {
|
|
31
|
+
throw new Error(`${name} must be a positive integer, got "${raw}"`);
|
|
32
|
+
}
|
|
33
|
+
const parsed = Number(raw);
|
|
34
|
+
if (!Number.isSafeInteger(parsed) || parsed <= 0 || parsed > max) {
|
|
35
|
+
throw new Error(`${name} must be a positive integer <= ${max}, got "${raw}"`);
|
|
36
|
+
}
|
|
37
|
+
return parsed;
|
|
38
|
+
};
|
|
39
|
+
const parseNonNegativeIntegerEnv = (name, fallback, max) => {
|
|
40
|
+
const raw = process.env[name];
|
|
41
|
+
if (raw === undefined || raw === '')
|
|
42
|
+
return fallback;
|
|
43
|
+
if (!/^\d+$/u.test(raw)) {
|
|
44
|
+
throw new Error(`${name} must be a non-negative integer, got "${raw}"`);
|
|
45
|
+
}
|
|
46
|
+
const parsed = Number(raw);
|
|
47
|
+
if (!Number.isSafeInteger(parsed) || parsed < 0 || parsed > max) {
|
|
48
|
+
throw new Error(`${name} must be a non-negative integer <= ${max}, got "${raw}"`);
|
|
49
|
+
}
|
|
50
|
+
return parsed;
|
|
51
|
+
};
|
|
52
|
+
const cancelledError = () => new DOMException('Embedding request cancelled', 'AbortError');
|
|
53
|
+
const throwIfAborted = (signal) => {
|
|
54
|
+
if (signal?.aborted)
|
|
55
|
+
throw cancelledError();
|
|
56
|
+
};
|
|
57
|
+
const abortableSleep = (ms, signal) => {
|
|
58
|
+
throwIfAborted(signal);
|
|
59
|
+
if (ms <= 0)
|
|
60
|
+
return Promise.resolve();
|
|
61
|
+
return new Promise((resolve, reject) => {
|
|
62
|
+
const timer = setTimeout(() => {
|
|
63
|
+
signal?.removeEventListener('abort', onAbort);
|
|
64
|
+
resolve();
|
|
65
|
+
}, ms);
|
|
66
|
+
const onAbort = () => {
|
|
67
|
+
clearTimeout(timer);
|
|
68
|
+
signal?.removeEventListener('abort', onAbort);
|
|
69
|
+
reject(cancelledError());
|
|
70
|
+
};
|
|
71
|
+
signal?.addEventListener('abort', onAbort, { once: true });
|
|
72
|
+
});
|
|
73
|
+
};
|
|
74
|
+
const paceHttpRequest = async (minIntervalMs, signal) => {
|
|
75
|
+
throwIfAborted(signal);
|
|
76
|
+
if (minIntervalMs <= 0)
|
|
77
|
+
return;
|
|
78
|
+
const waitTurn = httpPaceQueue.then(async () => {
|
|
79
|
+
throwIfAborted(signal);
|
|
80
|
+
const waitMs = lastHttpRequestStartedAt === undefined
|
|
81
|
+
? 0
|
|
82
|
+
: Math.max(0, lastHttpRequestStartedAt + minIntervalMs - Date.now());
|
|
83
|
+
await abortableSleep(waitMs, signal);
|
|
84
|
+
throwIfAborted(signal);
|
|
85
|
+
lastHttpRequestStartedAt = Date.now();
|
|
86
|
+
});
|
|
87
|
+
httpPaceQueue = waitTurn.catch(() => undefined);
|
|
88
|
+
await waitTurn;
|
|
89
|
+
};
|
|
20
90
|
/**
|
|
21
|
-
* Stable lead of
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
91
|
+
* Stable lead of a {@link readConfig} malformed dims-env error. `readConfig`
|
|
92
|
+
* throws a plain `Error` (not an {@link HttpEmbeddingError}) for a malformed
|
|
93
|
+
* `GITNEXUS_EMBEDDING_DIMS` or `GITNEXUS_EMBEDDING_REQUEST_DIMS` because it's a
|
|
94
|
+
* *config* mistake, not an endpoint failure — so the CLI recognizes it by this
|
|
95
|
+
* lead ({@link isHttpEmbeddingDimsError}) and prints a clean config message
|
|
96
|
+
* instead of a raw stack dump. Each var names itself so the message points the
|
|
97
|
+
* operator at the variable they actually set, not a sibling. See #2385.
|
|
26
98
|
*/
|
|
27
|
-
const
|
|
99
|
+
const dimsEnvErrorLead = (name) => `${name} must be a positive integer`;
|
|
100
|
+
const EMBEDDING_DIMS_ENV_ERROR_LEAD = dimsEnvErrorLead('GITNEXUS_EMBEDDING_DIMS');
|
|
101
|
+
const EMBEDDING_REQUEST_DIMS_ENV_ERROR_LEAD = dimsEnvErrorLead('GITNEXUS_EMBEDDING_REQUEST_DIMS');
|
|
28
102
|
/**
|
|
29
|
-
* @internal Exported for the CLI analyze error handler. True when `message` is
|
|
30
|
-
*
|
|
103
|
+
* @internal Exported for the CLI analyze error handler. True when `message` is a
|
|
104
|
+
* {@link readConfig} malformed dims-env config error (a plain `Error`) — for
|
|
105
|
+
* either `GITNEXUS_EMBEDDING_DIMS` or `GITNEXUS_EMBEDDING_REQUEST_DIMS`.
|
|
31
106
|
*/
|
|
32
|
-
export const isHttpEmbeddingDimsError = (message) => message.includes(EMBEDDING_DIMS_ENV_ERROR_LEAD)
|
|
107
|
+
export const isHttpEmbeddingDimsError = (message) => message.includes(EMBEDDING_DIMS_ENV_ERROR_LEAD) ||
|
|
108
|
+
message.includes(EMBEDDING_REQUEST_DIMS_ENV_ERROR_LEAD);
|
|
33
109
|
/**
|
|
34
110
|
* Build config from the current process.env snapshot.
|
|
35
111
|
* Returns null when GITNEXUS_EMBEDDING_URL + GITNEXUS_EMBEDDING_MODEL are unset.
|
|
@@ -55,11 +131,33 @@ const readConfig = () => {
|
|
|
55
131
|
}
|
|
56
132
|
dimensions = parsed;
|
|
57
133
|
}
|
|
134
|
+
const rawRequestDims = process.env.GITNEXUS_EMBEDDING_REQUEST_DIMS?.trim();
|
|
135
|
+
let requestDimensions = dimensions;
|
|
136
|
+
if (rawRequestDims) {
|
|
137
|
+
if (/^(omit|none|off|false|0)$/i.test(rawRequestDims)) {
|
|
138
|
+
requestDimensions = undefined;
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
if (!/^\d+$/.test(rawRequestDims)) {
|
|
142
|
+
throw new Error(`${EMBEDDING_REQUEST_DIMS_ENV_ERROR_LEAD}, got "${rawRequestDims}"`);
|
|
143
|
+
}
|
|
144
|
+
const parsed = parseInt(rawRequestDims, 10);
|
|
145
|
+
if (parsed <= 0) {
|
|
146
|
+
throw new Error(`${EMBEDDING_REQUEST_DIMS_ENV_ERROR_LEAD}, got "${rawRequestDims}"`);
|
|
147
|
+
}
|
|
148
|
+
requestDimensions = parsed;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
58
151
|
return {
|
|
59
152
|
baseUrl: baseUrl.replace(/\/+$/, ''),
|
|
60
153
|
model,
|
|
61
154
|
apiKey: process.env.GITNEXUS_EMBEDDING_API_KEY ?? 'unused',
|
|
62
155
|
dimensions,
|
|
156
|
+
maxAttempts: parsePositiveIntegerEnv('GITNEXUS_EMBEDDING_MAX_ATTEMPTS', HTTP_MAX_RETRIES + 1, 20),
|
|
157
|
+
retryCapMs: parsePositiveIntegerEnv('GITNEXUS_EMBEDDING_RETRY_CAP_MS', HTTP_RETRY_CAP_MS, 300_000),
|
|
158
|
+
minIntervalMs: parseNonNegativeIntegerEnv('GITNEXUS_EMBEDDING_MIN_INTERVAL_MS', 0, 300_000),
|
|
159
|
+
timeoutMs: parsePositiveIntegerEnv(HTTP_TIMEOUT_ENV, DEFAULT_HTTP_TIMEOUT_MS, MAX_HTTP_TIMEOUT_MS),
|
|
160
|
+
requestDimensions,
|
|
63
161
|
};
|
|
64
162
|
};
|
|
65
163
|
/**
|
|
@@ -77,6 +175,11 @@ export const isHttpMode = () => Boolean(process.env.GITNEXUS_EMBEDDING_URL && pr
|
|
|
77
175
|
* if HTTP mode is not active or no explicit dimensions are set.
|
|
78
176
|
*/
|
|
79
177
|
export const getHttpDimensions = () => readConfig()?.dimensions;
|
|
178
|
+
/**
|
|
179
|
+
* Return the configured per-request HTTP timeout for HTTP mode, or undefined
|
|
180
|
+
* when HTTP mode is not active.
|
|
181
|
+
*/
|
|
182
|
+
export const getHttpTimeoutMs = () => readConfig()?.timeoutMs;
|
|
80
183
|
/**
|
|
81
184
|
* Return a safe representation of a URL for logs and error messages.
|
|
82
185
|
* Strips query string (may contain tokens) and userinfo (may contain
|
|
@@ -102,10 +205,15 @@ export const safeUrl = (url) => {
|
|
|
102
205
|
* its masked form, then strip any residual `scheme://userinfo@` the transport may
|
|
103
206
|
* have echoed in a normalized (non-exact) form. See #2385.
|
|
104
207
|
*/
|
|
105
|
-
const sanitizeReason = (reason, url) =>
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
208
|
+
const sanitizeReason = (reason, url, apiKey) => {
|
|
209
|
+
const withoutUrlCredentials = reason
|
|
210
|
+
.split(url)
|
|
211
|
+
.join(safeUrl(url))
|
|
212
|
+
.replace(/([a-z][a-z0-9+.-]*:\/\/)[^/@\s]*@/gi, '$1');
|
|
213
|
+
return apiKey && apiKey !== 'unused'
|
|
214
|
+
? withoutUrlCredentials.split(apiKey).join('[redacted]')
|
|
215
|
+
: withoutUrlCredentials;
|
|
216
|
+
};
|
|
109
217
|
/**
|
|
110
218
|
* Error thrown by this module's HTTP embedding path (`httpEmbedBatch` /
|
|
111
219
|
* `httpEmbed` / `httpEmbedQuery`) for any endpoint failure — a
|
|
@@ -149,6 +257,37 @@ export const isHttpEmbeddingError = (err) => err instanceof HttpEmbeddingError |
|
|
|
149
257
|
const isEmbeddingItem = (item) => typeof item === 'object' &&
|
|
150
258
|
item !== null &&
|
|
151
259
|
Array.isArray(item.embedding);
|
|
260
|
+
/**
|
|
261
|
+
* Module-private signal that a 2xx response carried a body this client cannot
|
|
262
|
+
* use (unparseable, or parseable but wrong-shaped). Deliberately not exported:
|
|
263
|
+
* it never escapes {@link httpEmbedBatch}, which converts it into the
|
|
264
|
+
* user-facing {@link HttpEmbeddingError} it carries in `terminalMessage`.
|
|
265
|
+
*
|
|
266
|
+
* Thrown from inside the `fetchImpl` callback so `resilientFetch` classifies it
|
|
267
|
+
* as `retryable-network` — a truncated or HTML body is the same class of
|
|
268
|
+
* endpoint failure as a 503 and deserves the same backoff loop, and routing it
|
|
269
|
+
* through the retry loop also makes the circuit breaker see it as a failure
|
|
270
|
+
* instead of erasing the outage signal with `recordSuccess()`. See #2790.
|
|
271
|
+
*/
|
|
272
|
+
class RetryableEmbeddingBodyError extends Error {
|
|
273
|
+
terminalMessage;
|
|
274
|
+
constructor(terminalMessage, options) {
|
|
275
|
+
super(terminalMessage, options?.cause !== undefined ? { cause: options.cause } : undefined);
|
|
276
|
+
this.terminalMessage = terminalMessage;
|
|
277
|
+
this.name = 'RetryableEmbeddingBodyError';
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Build the message for a 2xx body carrying the wrong number of vectors.
|
|
282
|
+
*
|
|
283
|
+
* Hoisted to module scope because two layers report this same fault — the
|
|
284
|
+
* in-loop check inside {@link httpEmbedBatch} and the defensive backstop in
|
|
285
|
+
* {@link httpEmbed} — and the operator must see one wording regardless of which
|
|
286
|
+
* one catches it. Names both counts: "0 vectors for 64 texts" is actionable,
|
|
287
|
+
* "unexpected response shape" is not.
|
|
288
|
+
*/
|
|
289
|
+
const countMismatchMessage = (received, expected, safeEndpoint, batchIndex) => `Embedding endpoint returned ${received} vectors for ${expected} texts ` +
|
|
290
|
+
`(${safeEndpoint}, batch ${batchIndex})`;
|
|
152
291
|
/**
|
|
153
292
|
* Send a single batch of texts to the embedding endpoint with retry.
|
|
154
293
|
*
|
|
@@ -161,11 +300,11 @@ const isEmbeddingItem = (item) => typeof item === 'object' &&
|
|
|
161
300
|
* the `dimensions` field in the request body. Endpoints that implement
|
|
162
301
|
* Matryoshka truncation (OpenAI text-embedding-3-*, Cohere embed-v3,
|
|
163
302
|
* Voyage) return a truncated vector at that size; endpoints that do not
|
|
164
|
-
* recognise the field may ignore it or return 400.
|
|
165
|
-
* `
|
|
166
|
-
*
|
|
303
|
+
* recognise the field may ignore it or return 400. Set
|
|
304
|
+
* `GITNEXUS_EMBEDDING_REQUEST_DIMS=omit` for strict backends while keeping
|
|
305
|
+
* `GITNEXUS_EMBEDDING_DIMS` set to the returned vector size.
|
|
167
306
|
*/
|
|
168
|
-
const httpEmbedBatch = async (url, batch, model, apiKey, batchIndex = 0, dimensions) => {
|
|
307
|
+
const httpEmbedBatch = async (url, batch, model, apiKey, batchIndex = 0, dimensions, requestOptions = {}, maxAttempts = HTTP_MAX_RETRIES + 1, retryCapMs = HTTP_RETRY_CAP_MS, minIntervalMs = 0, timeoutMs = DEFAULT_HTTP_TIMEOUT_MS) => {
|
|
169
308
|
const requestBody = {
|
|
170
309
|
input: batch,
|
|
171
310
|
model,
|
|
@@ -173,54 +312,132 @@ const httpEmbedBatch = async (url, batch, model, apiKey, batchIndex = 0, dimensi
|
|
|
173
312
|
if (dimensions !== undefined) {
|
|
174
313
|
requestBody.dimensions = dimensions;
|
|
175
314
|
}
|
|
315
|
+
// Built on demand, not up front. Both describe faults, so in a healthy run —
|
|
316
|
+
// every call of it — they are garbage, and each `safeUrl` parses a URL. A
|
|
317
|
+
// 300k-chunk run at subBatchSize 8 makes ~37.5k `httpEmbedBatch` calls, so
|
|
318
|
+
// eager construction spent two `new URL()` per call describing failures that
|
|
319
|
+
// never happened. Same shape as `countMismatchMessage` above.
|
|
320
|
+
const unparseableMessage = () => `Embedding endpoint returned an unparseable response (${safeUrl(url)}, batch ${batchIndex})`;
|
|
321
|
+
const unexpectedShapeMessage = () => `Embedding endpoint returned an unexpected response shape (${safeUrl(url)}, batch ${batchIndex})`;
|
|
176
322
|
let resp;
|
|
323
|
+
// Set by `fetchImpl` on the attempt that produced a usable body. Reads back
|
|
324
|
+
// as `undefined` only on a path that must already have thrown — see the
|
|
325
|
+
// defensive check after the retry loop.
|
|
326
|
+
let parsed;
|
|
177
327
|
try {
|
|
328
|
+
throwIfAborted(requestOptions.signal);
|
|
178
329
|
resp = await resilientFetch(url, {
|
|
179
330
|
method: 'POST',
|
|
180
|
-
signal: AbortSignal.timeout(HTTP_TIMEOUT_MS),
|
|
181
331
|
headers: {
|
|
182
332
|
'Content-Type': 'application/json',
|
|
183
333
|
Authorization: `Bearer ${apiKey}`,
|
|
184
334
|
},
|
|
185
335
|
body: JSON.stringify(requestBody),
|
|
186
336
|
}, {
|
|
337
|
+
fetchImpl: async (input, init) => {
|
|
338
|
+
await paceHttpRequest(minIntervalMs, requestOptions.signal);
|
|
339
|
+
throwIfAborted(requestOptions.signal);
|
|
340
|
+
const timeoutSignal = AbortSignal.timeout(timeoutMs);
|
|
341
|
+
const signal = requestOptions.signal
|
|
342
|
+
? AbortSignal.any([requestOptions.signal, timeoutSignal])
|
|
343
|
+
: timeoutSignal;
|
|
344
|
+
const attemptResp = await globalThis.fetch(input, { ...init, signal });
|
|
345
|
+
// Non-OK bodies are none of our business: hand the response straight
|
|
346
|
+
// back so `resilientFetch` keeps classifying 4xx/5xx/429 unchanged.
|
|
347
|
+
if (!attemptResp.ok)
|
|
348
|
+
return attemptResp;
|
|
349
|
+
// The body is read *here*, inside the retried callback, rather than
|
|
350
|
+
// after `resilientFetch` returns. A reachable-but-wrong endpoint (a
|
|
351
|
+
// captive portal, a non-embeddings service, a truncated stream) can
|
|
352
|
+
// answer 200 with HTML or half a JSON document; parsing outside the
|
|
353
|
+
// loop made that a one-shot terminal failure while a 503 got three
|
|
354
|
+
// attempts. Throwing from in here gives a bad body the same backoff
|
|
355
|
+
// and the same breaker accounting as any other endpoint fault (#2790).
|
|
356
|
+
let payload;
|
|
357
|
+
try {
|
|
358
|
+
payload = (await attemptResp.json());
|
|
359
|
+
}
|
|
360
|
+
catch (err) {
|
|
361
|
+
// Not every `.json()` rejection is a parse error: the per-attempt
|
|
362
|
+
// signal (`AbortSignal.any([caller, AbortSignal.timeout(...)])`) is
|
|
363
|
+
// wired to the body stream, so a stalled body rejects with the abort
|
|
364
|
+
// reason. Re-raise those untouched — `isTerminalNetworkError` is
|
|
365
|
+
// `resilientFetch`'s own predicate, so this test agrees with
|
|
366
|
+
// `classifyOutcome` by construction. Wrapping one would flip its
|
|
367
|
+
// verdict from `terminal-network` (returned without retry AND
|
|
368
|
+
// without touching the breaker, via `recordNeutral()`) to
|
|
369
|
+
// `retryable-network` (retried, then `breaker.recordFailure()`): the
|
|
370
|
+
// same timeout would take 3 attempts instead of 1, count toward the
|
|
371
|
+
// process-global `embeddings-http` breaker, and reach the operator as
|
|
372
|
+
// "unparseable response" so they never reach for the timeout knob.
|
|
373
|
+
if (isTerminalNetworkError(err))
|
|
374
|
+
throw err;
|
|
375
|
+
throw new RetryableEmbeddingBodyError(unparseableMessage(), { cause: err });
|
|
376
|
+
}
|
|
377
|
+
if (!Array.isArray(payload?.data) || !payload.data.every(isEmbeddingItem)) {
|
|
378
|
+
throw new RetryableEmbeddingBodyError(unexpectedShapeMessage());
|
|
379
|
+
}
|
|
380
|
+
// Cardinality belongs *inside* the retry loop. `every(isEmbeddingItem)`
|
|
381
|
+
// is vacuously true for `[]` and true for any array shorter than the
|
|
382
|
+
// request, so a 200 carrying `{"data": []}` — or half the vectors —
|
|
383
|
+
// used to be classified `success`, call `breaker.recordSuccess()`
|
|
384
|
+
// (erasing the outage signal), and only then fail terminally after a
|
|
385
|
+
// single attempt. A short body is a truncated body: same backoff, same
|
|
386
|
+
// breaker accounting as any other endpoint fault (#2790).
|
|
387
|
+
if (payload.data.length !== batch.length) {
|
|
388
|
+
throw new RetryableEmbeddingBodyError(countMismatchMessage(payload.data.length, batch.length, safeUrl(url), batchIndex));
|
|
389
|
+
}
|
|
390
|
+
parsed = payload.data;
|
|
391
|
+
return attemptResp;
|
|
392
|
+
},
|
|
187
393
|
breakerKey: HTTP_BREAKER_KEY,
|
|
188
|
-
retry: {
|
|
394
|
+
retry: {
|
|
395
|
+
maxAttempts,
|
|
396
|
+
baseDelayMs: HTTP_RETRY_BACKOFF_MS,
|
|
397
|
+
capDelayMs: retryCapMs,
|
|
398
|
+
retryAfterCapMs: retryCapMs,
|
|
399
|
+
sleep: (ms) => abortableSleep(ms, requestOptions.signal),
|
|
400
|
+
},
|
|
189
401
|
});
|
|
190
402
|
}
|
|
191
403
|
catch (err) {
|
|
404
|
+
if (requestOptions.signal?.aborted ||
|
|
405
|
+
(err instanceof DOMException && err.name === 'AbortError')) {
|
|
406
|
+
throw new HttpEmbeddingError(`Embedding request cancelled (${safeUrl(url)}, batch ${batchIndex})`, { cause: err });
|
|
407
|
+
}
|
|
408
|
+
// Retries are exhausted on a bad 2xx body. Surface the message the sentinel
|
|
409
|
+
// carried, keeping the underlying parse error in `cause` only — the body
|
|
410
|
+
// text must never reach the `sanitizeReason` fallback and leak to stderr.
|
|
411
|
+
if (err instanceof RetryableEmbeddingBodyError) {
|
|
412
|
+
throw new HttpEmbeddingError(err.terminalMessage, { cause: err.cause });
|
|
413
|
+
}
|
|
192
414
|
if (err instanceof CircuitOpenError) {
|
|
193
415
|
throw new HttpEmbeddingError(`Embedding endpoint circuit open (${safeUrl(url)}, batch ${batchIndex}): retry in ${Math.ceil(err.retryAfterMs / 1000)}s`, { cause: err });
|
|
194
416
|
}
|
|
195
417
|
if (err instanceof DOMException && err.name === 'TimeoutError') {
|
|
196
|
-
throw new HttpEmbeddingError(`Embedding request timed out after ${
|
|
418
|
+
throw new HttpEmbeddingError(`Embedding request timed out after ${timeoutMs}ms (${safeUrl(url)}, batch ${batchIndex})`, { cause: err });
|
|
197
419
|
}
|
|
198
420
|
if (err instanceof ResilientFetchExhaustedError) {
|
|
199
421
|
throw new HttpEmbeddingError(`Embedding endpoint returned ${err.response.status} (${safeUrl(url)}, batch ${batchIndex})`, { cause: err });
|
|
200
422
|
}
|
|
201
|
-
const reason = sanitizeReason(err instanceof Error ? err.message : String(err), url);
|
|
202
|
-
|
|
423
|
+
const reason = sanitizeReason(err instanceof Error ? err.message : String(err), url, apiKey);
|
|
424
|
+
const safeCause = new Error(reason);
|
|
425
|
+
safeCause.name = err instanceof Error ? err.name : 'EmbeddingTransportError';
|
|
426
|
+
throw new HttpEmbeddingError(`Embedding request failed (${safeUrl(url)}, batch ${batchIndex}): ${reason}`, { cause: safeCause });
|
|
203
427
|
}
|
|
204
428
|
if (!resp.ok) {
|
|
205
429
|
// resilientFetch already retried 5xx/429; any non-OK response here is
|
|
206
430
|
// a terminal client error (4xx other than 429).
|
|
207
431
|
throw new HttpEmbeddingError(`Embedding endpoint returned ${resp.status} (${safeUrl(url)}, batch ${batchIndex})`);
|
|
208
432
|
}
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
data = (await resp.json());
|
|
216
|
-
}
|
|
217
|
-
catch (err) {
|
|
218
|
-
throw new HttpEmbeddingError(`Embedding endpoint returned an unparseable response (${safeUrl(url)}, batch ${batchIndex})`, { cause: err });
|
|
219
|
-
}
|
|
220
|
-
if (!Array.isArray(data?.data) || !data.data.every(isEmbeddingItem)) {
|
|
221
|
-
throw new HttpEmbeddingError(`Embedding endpoint returned an unexpected response shape (${safeUrl(url)}, batch ${batchIndex})`);
|
|
433
|
+
if (parsed === undefined) {
|
|
434
|
+
// Defensively unreachable: an OK response either sets `parsed` or throws
|
|
435
|
+
// out of `fetchImpl`. Kept so the narrowing holds without a non-null
|
|
436
|
+
// assertion, and so a future `resilientFetch` change can't return an
|
|
437
|
+
// unvalidated body silently.
|
|
438
|
+
throw new HttpEmbeddingError(unparseableMessage());
|
|
222
439
|
}
|
|
223
|
-
return
|
|
440
|
+
return parsed;
|
|
224
441
|
};
|
|
225
442
|
/**
|
|
226
443
|
* Embed texts via the HTTP backend, splitting into batches.
|
|
@@ -229,7 +446,7 @@ const httpEmbedBatch = async (url, batch, model, apiKey, batchIndex = 0, dimensi
|
|
|
229
446
|
* @param texts - Array of texts to embed
|
|
230
447
|
* @returns Array of Float32Array embedding vectors
|
|
231
448
|
*/
|
|
232
|
-
export const httpEmbed = async (texts) => {
|
|
449
|
+
export const httpEmbed = async (texts, requestOptions = {}) => {
|
|
233
450
|
if (texts.length === 0)
|
|
234
451
|
return [];
|
|
235
452
|
const config = readConfig();
|
|
@@ -237,18 +454,33 @@ export const httpEmbed = async (texts) => {
|
|
|
237
454
|
throw new Error('HTTP embedding not configured');
|
|
238
455
|
const url = `${config.baseUrl}/embeddings`;
|
|
239
456
|
const allVectors = [];
|
|
240
|
-
for (
|
|
241
|
-
const
|
|
242
|
-
|
|
243
|
-
|
|
457
|
+
for (const [batchIndex, batch] of chunk(texts, HTTP_BATCH_SIZE).entries()) {
|
|
458
|
+
const items = await httpEmbedBatch(url, batch, config.model, config.apiKey, batchIndex, config.requestDimensions, requestOptions, config.maxAttempts, config.retryCapMs, config.minIntervalMs, config.timeoutMs);
|
|
459
|
+
// Defensive backstop, deliberately kept: `httpEmbedBatch` now rejects a
|
|
460
|
+
// short body from *inside* the retry loop (through the same
|
|
461
|
+
// `countMismatchMessage`), so in practice this branch is unreachable. It
|
|
462
|
+
// stays so a future change to the in-loop check can't silently hand a short
|
|
463
|
+
// vector list to the caller — that failure would land as a Kuzu/FLOAT[N]
|
|
464
|
+
// error far from its cause.
|
|
244
465
|
if (items.length !== batch.length) {
|
|
245
|
-
throw new HttpEmbeddingError(
|
|
246
|
-
`(${safeUrl(url)}, batch ${batchIndex})`);
|
|
466
|
+
throw new HttpEmbeddingError(countMismatchMessage(items.length, batch.length, safeUrl(url), batchIndex));
|
|
247
467
|
}
|
|
248
468
|
for (const item of items) {
|
|
249
469
|
const vec = new Float32Array(item.embedding);
|
|
250
470
|
// Fail fast on dimension mismatch rather than inserting bad vectors
|
|
251
471
|
// into the FLOAT[N] column which would cause a cryptic Kuzu error.
|
|
472
|
+
//
|
|
473
|
+
// Unlike the cardinality check this one stays *outside* the retry loop,
|
|
474
|
+
// deliberately. The expected width is `config.dimensions ?? DEFAULT_DIMS`
|
|
475
|
+
// (GITNEXUS_EMBEDDING_DIMS), which is NOT the `dimensions` value
|
|
476
|
+
// `httpEmbedBatch` receives — that is `config.requestDimensions`, which
|
|
477
|
+
// `GITNEXUS_EMBEDDING_REQUEST_DIMS` can set to a different number or to
|
|
478
|
+
// `undefined` (`omit`). More importantly a width mismatch is an operator
|
|
479
|
+
// *configuration* error, not an endpoint fault: retrying it three times
|
|
480
|
+
// can never change the answer, and routing it through the retry loop
|
|
481
|
+
// would count a healthy endpoint's responses toward the shared circuit
|
|
482
|
+
// breaker. The message is an actionable config hint, so it is terminal
|
|
483
|
+
// on the first attempt by design (#2790).
|
|
252
484
|
const expected = config.dimensions ?? DEFAULT_DIMS;
|
|
253
485
|
if (vec.length !== expected) {
|
|
254
486
|
const hint = config.dimensions
|
|
@@ -269,12 +501,15 @@ export const httpEmbed = async (texts) => {
|
|
|
269
501
|
* @param text - Query text to embed
|
|
270
502
|
* @returns Embedding vector as number array
|
|
271
503
|
*/
|
|
272
|
-
export const httpEmbedQuery = async (text) => {
|
|
504
|
+
export const httpEmbedQuery = async (text, requestOptions = {}) => {
|
|
273
505
|
const config = readConfig();
|
|
274
506
|
if (!config)
|
|
275
507
|
throw new Error('HTTP embedding not configured');
|
|
276
508
|
const url = `${config.baseUrl}/embeddings`;
|
|
277
|
-
const items = await httpEmbedBatch(url, [text], config.model, config.apiKey, 0, config.
|
|
509
|
+
const items = await httpEmbedBatch(url, [text], config.model, config.apiKey, 0, config.requestDimensions, requestOptions, config.maxAttempts, config.retryCapMs, config.minIntervalMs, config.timeoutMs);
|
|
510
|
+
// Defensive backstop like the `httpEmbed` one above: an empty `data` array is
|
|
511
|
+
// now a cardinality mismatch (0 vectors for 1 text) rejected and retried
|
|
512
|
+
// inside `httpEmbedBatch`, so this branch is unreachable in practice.
|
|
278
513
|
if (!items.length) {
|
|
279
514
|
throw new HttpEmbeddingError(`Embedding endpoint returned empty response (${safeUrl(url)})`);
|
|
280
515
|
}
|
|
@@ -3,8 +3,10 @@
|
|
|
3
3
|
*
|
|
4
4
|
* `module.registerHooks` — the synchronous ESM/CJS resolution-hook API the
|
|
5
5
|
* embedding-stack resolvers rely on — was added in Node 22.15.0 (and 23.5.0 on
|
|
6
|
-
* the 23.x line). The gitnexus engines floor is
|
|
7
|
-
*
|
|
6
|
+
* the 23.x line). The gitnexus engines floor is `^22.18.0 || >=24.11.0`, so
|
|
7
|
+
* every supported runtime exposes it — but `engines` is advisory (not
|
|
8
|
+
* engine-strict), so a below-floor Node (22.0–22.14, or the unsupported
|
|
9
|
+
* 23.0–23.4 line) can still run, where the export is absent.
|
|
8
10
|
*
|
|
9
11
|
* In this `"type": "module"` package, a *static named* import of a missing
|
|
10
12
|
* builtin export (`import { registerHooks } from 'node:module'`) is a
|
|
@@ -3,8 +3,10 @@
|
|
|
3
3
|
*
|
|
4
4
|
* `module.registerHooks` — the synchronous ESM/CJS resolution-hook API the
|
|
5
5
|
* embedding-stack resolvers rely on — was added in Node 22.15.0 (and 23.5.0 on
|
|
6
|
-
* the 23.x line). The gitnexus engines floor is
|
|
7
|
-
*
|
|
6
|
+
* the 23.x line). The gitnexus engines floor is `^22.18.0 || >=24.11.0`, so
|
|
7
|
+
* every supported runtime exposes it — but `engines` is advisory (not
|
|
8
|
+
* engine-strict), so a below-floor Node (22.0–22.14, or the unsupported
|
|
9
|
+
* 23.0–23.4 line) can still run, where the export is absent.
|
|
8
10
|
*
|
|
9
11
|
* In this `"type": "module"` package, a *static named* import of a missing
|
|
10
12
|
* builtin export (`import { registerHooks } from 'node:module'`) is a
|
|
@@ -52,8 +52,8 @@
|
|
|
52
52
|
* per-resolution cost is a single string comparison.
|
|
53
53
|
*
|
|
54
54
|
* `module.registerHooks` is marked `@experimental` and requires Node >= 22.15
|
|
55
|
-
* (the gitnexus engines floor
|
|
56
|
-
* this is a graceful no-op: embeddings then resolve onnxruntime-common exactly
|
|
55
|
+
* (below the gitnexus engines floor of `^22.18.0 || >=24.11.0`). On below-floor
|
|
56
|
+
* runtimes it is absent and this is a graceful no-op: embeddings then resolve onnxruntime-common exactly
|
|
57
57
|
* as before — fine on hoisted layouts. Any failure during installation is
|
|
58
58
|
* swallowed.
|
|
59
59
|
*/
|
|
@@ -99,9 +99,9 @@ export const ensureOnnxRuntimeCommonResolvable = () => {
|
|
|
99
99
|
// initEmbedder() call, and the hook is process-global — once is enough.
|
|
100
100
|
attempted = true;
|
|
101
101
|
try {
|
|
102
|
-
// Node < 22.15 / < 23.5 (the gitnexus engines floor
|
|
103
|
-
// synchronous hooks API. Degrade gracefully —
|
|
104
|
-
// hoisted layouts.
|
|
102
|
+
// Node < 22.15 / < 23.5 (below the gitnexus engines floor of
|
|
103
|
+
// ^22.18.0 || >=24.11.0): no synchronous hooks API. Degrade gracefully —
|
|
104
|
+
// the import still works on hoisted layouts.
|
|
105
105
|
const registerHooks = getRegisterHooks();
|
|
106
106
|
if (typeof registerHooks !== 'function')
|
|
107
107
|
return;
|
|
@@ -36,8 +36,8 @@
|
|
|
36
36
|
* So CUDA-12 hosts, Windows (DirectML), macOS, and CPU-only hosts are
|
|
37
37
|
* untouched. Idempotent; any failure is swallowed and leaves the default
|
|
38
38
|
* resolution exactly as before. `module.registerHooks` requires Node >= 22.15
|
|
39
|
-
* (the gitnexus engines floor
|
|
40
|
-
* a no-op, but the default copy's CUDA major is still probed so an
|
|
39
|
+
* (below the gitnexus engines floor of `^22.18.0 || >=24.11.0`); on below-floor
|
|
40
|
+
* runtimes the redirect is a no-op, but the default copy's CUDA major is still probed so an
|
|
41
41
|
* already-matching host (e.g. CUDA 12 + transformers' CUDA-12 build) keeps
|
|
42
42
|
* auto-selecting the GPU.
|
|
43
43
|
* `npm link` / symlinked local-dev checkouts are a known caveat: `resolveOurOrtNodeDir`/
|
|
@@ -170,7 +170,7 @@ export const ensureEmbeddingStackResolvable = () => {
|
|
|
170
170
|
return;
|
|
171
171
|
hookAttempted = true;
|
|
172
172
|
try {
|
|
173
|
-
// Node < 22.15 / < 23.5 (engines floor
|
|
173
|
+
// Node < 22.15 / < 23.5 (below the engines floor of ^22.18.0 || >=24.11.0): no synchronous hooks
|
|
174
174
|
// API. Degrade gracefully — normally-installed stacks still resolve; only
|
|
175
175
|
// the runtime-prefix fallback is unavailable. Reachable now that the import
|
|
176
176
|
// is a namespace access (see node-module-compat.ts) rather than a static
|
|
@@ -113,7 +113,7 @@ export async function checkCwdMatch(cwd) {
|
|
|
113
113
|
let bestLen = -1;
|
|
114
114
|
for (const e of entries) {
|
|
115
115
|
const p = norm(e.path);
|
|
116
|
-
if (cwdNorm === p || cwdNorm.startsWith(p + sep)) {
|
|
116
|
+
if (cwdNorm === p || cwdNorm.startsWith(p.endsWith(sep) ? p : p + sep)) {
|
|
117
117
|
if (p.length > bestLen) {
|
|
118
118
|
bestPath = e;
|
|
119
119
|
bestLen = p.length;
|
package/dist/core/graph/graph.js
CHANGED
|
@@ -156,6 +156,9 @@ export const createKnowledgeGraph = () => {
|
|
|
156
156
|
forEachRelationship(fn) {
|
|
157
157
|
relationshipMap.forEach(fn);
|
|
158
158
|
},
|
|
159
|
+
forEachRelationshipFields(fn) {
|
|
160
|
+
relationshipMap.forEach((rel) => fn(rel.sourceId, rel.targetId, rel.type, rel.confidence));
|
|
161
|
+
},
|
|
159
162
|
getNode: (id) => nodeMap.get(id),
|
|
160
163
|
// O(1) count getters - avoid creating arrays just for length
|
|
161
164
|
get nodeCount() {
|