cgraphx 2.0.1 → 2.0.3
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/dist/.claude-template/FLOW-MAP.md +7 -5
- package/dist/.claude-template/commands/end.md +1 -1
- package/dist/.claude-template/skills/cgraphx-guide/SKILL.md +2 -1
- package/dist/.claude-template/skills/cgraphx-guide/how-to-use.html +4 -2
- package/dist/.claude-template/skills/cgraphx-guide/how-to-use.md +5 -2
- package/dist/.claude-template/skills/iboc-check/SKILL.md +116 -0
- package/dist/.claude-template/skills/iboc-check/filler-prompt.md +75 -0
- package/dist/.claude-template/skills/implementation/SKILL.md +7 -0
- package/dist/.claude-template/skills/init-project-guides/SKILL.md +1 -1
- package/dist/.claude-template/skills/run-api-test/references/db-verification.md +2 -2
- package/dist/.claude-template/skills/subagent-implement/SKILL.md +3 -2
- package/dist/.claude-template/skills/write-api/assets/template-request.bru +3 -3
- package/dist/.claude-template/skills/write-api/references/bru-format.md +6 -6
- package/dist/.claude-template/skills/write-delivery-guide/SKILL.md +97 -0
- package/dist/.claude-template/skills/write-delivery-guide/template-change-type.md +120 -0
- package/dist/.claude-template/skills/write-delivery-guide/template-multi-role-flow.md +148 -0
- package/dist/.claude-template/skills/write-unit-test-code/SKILL.md +23 -6
- package/dist/core/code/engine/cli/analyze-config.js +320 -0
- package/dist/core/code/engine/cli/analyze.js +1086 -0
- package/dist/core/code/engine/cli/cli-message.js +83 -0
- package/dist/core/code/engine/cli/detect-changes-format.js +58 -0
- package/dist/core/code/engine/cli/embedding-dims.js +43 -0
- package/dist/core/code/engine/cli/format-elapsed.js +12 -0
- package/dist/core/code/engine/cli/help-i18n.js +144 -0
- package/dist/core/code/engine/cli/i18n/en.js +110 -0
- package/dist/core/code/engine/cli/i18n/index.js +47 -0
- package/dist/core/code/engine/cli/i18n/resources.js +9 -0
- package/dist/core/code/engine/cli/i18n/zh-CN.js +110 -0
- package/dist/core/code/engine/cli/lazy-action.js +67 -0
- package/dist/core/code/engine/cli/optional-grammars.js +136 -0
- package/dist/core/code/engine/cli/resolve-invocation.js +76 -0
- package/dist/core/code/engine/cli/status.js +156 -0
- package/dist/core/code/engine/cli/tool.js +384 -0
- package/dist/core/code/engine/config/ignore-service.js +511 -0
- package/dist/core/code/engine/config/supported-languages.js +17 -0
- package/dist/core/code/engine/core/analysis-features.js +64 -0
- package/dist/core/code/engine/core/analyzer-identity.js +2171 -0
- package/dist/core/code/engine/core/git-staleness.js +180 -0
- package/dist/core/code/engine/core/graph/graph.js +180 -0
- package/dist/core/code/engine/core/graph/import-cycles.js +106 -0
- package/dist/core/code/engine/core/graph/types.js +2 -0
- package/dist/core/code/engine/core/index-freshness.js +12 -0
- package/dist/core/code/engine/core/ingestion/binding-accumulator.js +341 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/configs/c-cpp.js +168 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/configs/csharp.js +9 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/configs/dart.js +8 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/configs/go.js +8 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/configs/jvm.js +54 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/configs/php.js +8 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/configs/python.js +8 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/configs/ruby.js +8 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/configs/rust.js +8 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/configs/swift.js +8 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/configs/typescript-javascript.js +11 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/generic.js +62 -0
- package/dist/core/code/engine/core/ingestion/call-processor.js +503 -0
- package/dist/core/code/engine/core/ingestion/call-routing.js +98 -0
- package/dist/core/code/engine/core/ingestion/call-types.js +3 -0
- package/dist/core/code/engine/core/ingestion/cfg/callee-cell-format.js +45 -0
- package/dist/core/code/engine/core/ingestion/cfg/cfg-builder.js +202 -0
- package/dist/core/code/engine/core/ingestion/cfg/collect.js +81 -0
- package/dist/core/code/engine/core/ingestion/cfg/control-dependence.js +185 -0
- package/dist/core/code/engine/core/ingestion/cfg/control-flow-context.js +130 -0
- package/dist/core/code/engine/core/ingestion/cfg/emit.js +646 -0
- package/dist/core/code/engine/core/ingestion/cfg/post-dominators.js +182 -0
- package/dist/core/code/engine/core/ingestion/cfg/reaching-def-reason-codec.js +139 -0
- package/dist/core/code/engine/core/ingestion/cfg/reaching-defs-graph.js +322 -0
- package/dist/core/code/engine/core/ingestion/cfg/reaching-defs.js +792 -0
- package/dist/core/code/engine/core/ingestion/cfg/synthetic-escape.js +305 -0
- package/dist/core/code/engine/core/ingestion/cfg/traversal-result.js +6 -0
- package/dist/core/code/engine/core/ingestion/cfg/types.js +14 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/c-cpp-harvest.js +545 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/c-cpp.js +590 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/call-site-harvest.js +356 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/csharp-harvest.js +593 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/csharp.js +871 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/dart-harvest.js +874 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/dart.js +840 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/go-harvest.js +625 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/go.js +642 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/java-harvest.js +517 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/java.js +816 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/kotlin-harvest.js +723 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/kotlin.js +813 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/php-harvest.js +630 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/php.js +725 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/python-harvest.js +776 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/python.js +562 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/ruby-harvest.js +591 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/ruby.js +760 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/rust-harvest.js +877 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/rust.js +562 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/scope-tree-harvest.js +120 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/swift-harvest.js +683 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/swift.js +791 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/typescript-harvest.js +1060 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/typescript.js +587 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/configs/c-cpp.js +77 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/configs/csharp.js +24 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/configs/dart.js +10 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/configs/go.js +28 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/configs/jvm.js +67 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/configs/php.js +10 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/configs/python.js +10 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/configs/ruby.js +13 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/configs/rust.js +10 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/configs/swift.js +21 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/configs/typescript-javascript.js +31 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/generic.js +144 -0
- package/dist/core/code/engine/core/ingestion/class-types.js +2 -0
- package/dist/core/code/engine/core/ingestion/cluster-enricher.js +174 -0
- package/dist/core/code/engine/core/ingestion/community-processor.js +604 -0
- package/dist/core/code/engine/core/ingestion/constants.js +26 -0
- package/dist/core/code/engine/core/ingestion/cpp-ue-preprocessor.js +263 -0
- package/dist/core/code/engine/core/ingestion/csharp-namespace-gate.js +133 -0
- package/dist/core/code/engine/core/ingestion/di-extractors/index.js +38 -0
- package/dist/core/code/engine/core/ingestion/di-extractors/spring.js +310 -0
- package/dist/core/code/engine/core/ingestion/emit-references.js +244 -0
- package/dist/core/code/engine/core/ingestion/entry-point-scoring.js +201 -0
- package/dist/core/code/engine/core/ingestion/export-detection.js +244 -0
- package/dist/core/code/engine/core/ingestion/field-extractor.js +29 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/c-cpp.js +107 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/csharp.js +124 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/dart.js +99 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/go.js +102 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/helpers.js +198 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/jvm.js +172 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/php.js +67 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/python.js +94 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/ruby.js +79 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/rust.js +55 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/swift.js +93 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/typescript-javascript.js +59 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/generic.js +147 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/typescript.js +266 -0
- package/dist/core/code/engine/core/ingestion/field-types.js +3 -0
- package/dist/core/code/engine/core/ingestion/filesystem-walker.js +136 -0
- package/dist/core/code/engine/core/ingestion/finalize-orchestrator.js +159 -0
- package/dist/core/code/engine/core/ingestion/framework-detection.js +432 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/analysis-features.js +38 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/annotation-arguments.js +234 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/aop-candidates.js +88 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/aop.js +487 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/auto-configuration.js +21 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/bean-candidates.js +189 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/bean-catalog.js +32 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/bean-factories.js +73 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/conditionals.js +323 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/config-bindings.js +119 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/di-metadata.js +385 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/resource-injection.js +96 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/configs/c-cpp.js +17 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/configs/csharp.js +46 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/configs/dart.js +59 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/configs/go.js +30 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/configs/jvm.js +73 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/configs/php.js +19 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/configs/python.js +45 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/configs/ruby.js +20 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/configs/rust.js +58 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/configs/swift.js +94 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/configs/typescript-javascript.js +26 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/csharp.js +128 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/go.js +50 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/jvm.js +112 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/php.js +80 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/python.js +75 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/resolver-factory.js +36 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/ruby.js +20 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/rust.js +79 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/standard.js +180 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/types.js +7 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/utils.js +153 -0
- package/dist/core/code/engine/core/ingestion/import-target-adapter.js +99 -0
- package/dist/core/code/engine/core/ingestion/language-config.js +391 -0
- package/dist/core/code/engine/core/ingestion/language-provider.js +25 -0
- package/dist/core/code/engine/core/ingestion/languages/c/arity-metadata.js +98 -0
- package/dist/core/code/engine/core/ingestion/languages/c/arity.js +21 -0
- package/dist/core/code/engine/core/ingestion/languages/c/capture-side-channel.js +69 -0
- package/dist/core/code/engine/core/ingestion/languages/c/captures.js +189 -0
- package/dist/core/code/engine/core/ingestion/languages/c/header-scan.js +58 -0
- package/dist/core/code/engine/core/ingestion/languages/c/import-decomposer.js +68 -0
- package/dist/core/code/engine/core/ingestion/languages/c/import-target.js +103 -0
- package/dist/core/code/engine/core/ingestion/languages/c/index.js +33 -0
- package/dist/core/code/engine/core/ingestion/languages/c/interpret.js +53 -0
- package/dist/core/code/engine/core/ingestion/languages/c/merge-bindings.js +26 -0
- package/dist/core/code/engine/core/ingestion/languages/c/query.js +210 -0
- package/dist/core/code/engine/core/ingestion/languages/c/scope-resolver.js +112 -0
- package/dist/core/code/engine/core/ingestion/languages/c/simple-hooks.js +24 -0
- package/dist/core/code/engine/core/ingestion/languages/c/static-linkage.js +109 -0
- package/dist/core/code/engine/core/ingestion/languages/c-cpp.js +506 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/adl.js +804 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/arity-metadata.js +258 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/arity.js +37 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/capture-side-channel.js +89 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/captures.js +1975 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/constraint-extractor.js +311 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/constraint-filter.js +210 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/conversion-rank.js +163 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/file-local-linkage.js +327 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/header-scan.js +53 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/import-decomposer.js +134 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/import-target.js +16 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/index.js +33 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/inline-namespaces.js +379 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/interpret.js +239 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/member-lookup.js +470 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/merge-bindings.js +32 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/query.js +763 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/range-bindings.js +230 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/scope-resolver.js +354 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/simple-hooks.js +67 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/two-phase-lookup.js +348 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/type-classifier.js +56 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/user-defined-conversions.js +128 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/accessor-unwrap.js +67 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/arity-metadata.js +49 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/arity.js +40 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/cache-stats.js +32 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/captures.js +557 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/import-decomposer.js +96 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/import-target.js +176 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/index.js +95 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/interpret.js +150 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/merge-bindings.js +58 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/namespace-siblings.js +708 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/qualified-type-names.js +62 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/query.js +578 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/receiver-binding.js +142 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/resolution-config.js +18 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/scope-resolver.js +84 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/simple-hooks.js +81 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp.js +204 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/arity-metadata.js +38 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/arity.js +34 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/built-ins.js +37 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/cache-stats.js +30 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/captures.js +1096 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/expand-wildcards.js +34 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/extension-type-preprocess.js +33 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/import-target.js +68 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/index.js +45 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/interpret.js +101 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/merge-bindings.js +42 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/query.js +246 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/receiver-binding.js +90 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/scope-resolver.js +197 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/signature-bindings.js +54 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/simple-hooks.js +61 -0
- package/dist/core/code/engine/core/ingestion/languages/dart.js +138 -0
- package/dist/core/code/engine/core/ingestion/languages/go/arity-metadata.js +71 -0
- package/dist/core/code/engine/core/ingestion/languages/go/arity.js +17 -0
- package/dist/core/code/engine/core/ingestion/languages/go/cache-stats.js +21 -0
- package/dist/core/code/engine/core/ingestion/languages/go/captures.js +492 -0
- package/dist/core/code/engine/core/ingestion/languages/go/expand-wildcards.js +97 -0
- package/dist/core/code/engine/core/ingestion/languages/go/generic-type-parameters.js +146 -0
- package/dist/core/code/engine/core/ingestion/languages/go/import-decomposer.js +47 -0
- package/dist/core/code/engine/core/ingestion/languages/go/import-target.js +70 -0
- package/dist/core/code/engine/core/ingestion/languages/go/index.js +39 -0
- package/dist/core/code/engine/core/ingestion/languages/go/interface-impls.js +955 -0
- package/dist/core/code/engine/core/ingestion/languages/go/interpret.js +177 -0
- package/dist/core/code/engine/core/ingestion/languages/go/merge-bindings.js +21 -0
- package/dist/core/code/engine/core/ingestion/languages/go/method-owners.js +131 -0
- package/dist/core/code/engine/core/ingestion/languages/go/namespace-mirror.js +56 -0
- package/dist/core/code/engine/core/ingestion/languages/go/package-clause.js +79 -0
- package/dist/core/code/engine/core/ingestion/languages/go/package-siblings.js +83 -0
- package/dist/core/code/engine/core/ingestion/languages/go/query.js +298 -0
- package/dist/core/code/engine/core/ingestion/languages/go/range-binding.js +127 -0
- package/dist/core/code/engine/core/ingestion/languages/go/receiver-binding.js +24 -0
- package/dist/core/code/engine/core/ingestion/languages/go/scope-resolver.js +75 -0
- package/dist/core/code/engine/core/ingestion/languages/go/simple-hooks.js +31 -0
- package/dist/core/code/engine/core/ingestion/languages/go/type-binding.js +279 -0
- package/dist/core/code/engine/core/ingestion/languages/go.js +160 -0
- package/dist/core/code/engine/core/ingestion/languages/index.js +66 -0
- package/dist/core/code/engine/core/ingestion/languages/java/analysis-features.js +16 -0
- package/dist/core/code/engine/core/ingestion/languages/java/arity-metadata.js +43 -0
- package/dist/core/code/engine/core/ingestion/languages/java/arity.js +27 -0
- package/dist/core/code/engine/core/ingestion/languages/java/cache-stats.js +32 -0
- package/dist/core/code/engine/core/ingestion/languages/java/capture-side-channel.js +123 -0
- package/dist/core/code/engine/core/ingestion/languages/java/captures.js +791 -0
- package/dist/core/code/engine/core/ingestion/languages/java/import-decomposer.js +88 -0
- package/dist/core/code/engine/core/ingestion/languages/java/import-target.js +103 -0
- package/dist/core/code/engine/core/ingestion/languages/java/index.js +43 -0
- package/dist/core/code/engine/core/ingestion/languages/java/interpret.js +146 -0
- package/dist/core/code/engine/core/ingestion/languages/java/merge-bindings.js +43 -0
- package/dist/core/code/engine/core/ingestion/languages/java/package-facts.js +16 -0
- package/dist/core/code/engine/core/ingestion/languages/java/package-siblings.js +11 -0
- package/dist/core/code/engine/core/ingestion/languages/java/query.js +319 -0
- package/dist/core/code/engine/core/ingestion/languages/java/receiver-binding.js +98 -0
- package/dist/core/code/engine/core/ingestion/languages/java/scope-resolver.js +213 -0
- package/dist/core/code/engine/core/ingestion/languages/java/simple-hooks.js +39 -0
- package/dist/core/code/engine/core/ingestion/languages/java/spring-aop.js +53 -0
- package/dist/core/code/engine/core/ingestion/languages/java/spring-bean-metadata.js +11 -0
- package/dist/core/code/engine/core/ingestion/languages/java/spring-conditionals.js +52 -0
- package/dist/core/code/engine/core/ingestion/languages/java/spring-config-bindings.js +222 -0
- package/dist/core/code/engine/core/ingestion/languages/java/spring-di.js +165 -0
- package/dist/core/code/engine/core/ingestion/languages/java.js +192 -0
- package/dist/core/code/engine/core/ingestion/languages/javascript/arity.js +15 -0
- package/dist/core/code/engine/core/ingestion/languages/javascript/captures.js +1122 -0
- package/dist/core/code/engine/core/ingestion/languages/javascript/import-target.js +56 -0
- package/dist/core/code/engine/core/ingestion/languages/javascript/index.js +109 -0
- package/dist/core/code/engine/core/ingestion/languages/javascript/interpret.js +45 -0
- package/dist/core/code/engine/core/ingestion/languages/javascript/merge-bindings.js +21 -0
- package/dist/core/code/engine/core/ingestion/languages/javascript/query.js +659 -0
- package/dist/core/code/engine/core/ingestion/languages/javascript/scope-resolver.js +78 -0
- package/dist/core/code/engine/core/ingestion/languages/javascript/simple-hooks.js +44 -0
- package/dist/core/code/engine/core/ingestion/languages/jvm/package-facts.js +46 -0
- package/dist/core/code/engine/core/ingestion/languages/jvm/package-siblings.js +200 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/arity-metadata.js +23 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/arity.js +18 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/cache-stats.js +21 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/capture-side-channel.js +160 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/captures.js +1262 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/companion-scopes.js +72 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/import-decomposer.js +40 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/import-target.js +135 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/index.js +26 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/interpret.js +75 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/merge-bindings.js +28 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/owners.js +134 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/package-facts.js +16 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/package-siblings.js +11 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/query.js +243 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/receiver-binding.js +103 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/scope-resolver.js +207 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/simple-hooks.js +42 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-aop.js +68 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-bean-metadata.js +11 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-conditionals.js +53 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-di.js +304 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin.js +189 -0
- package/dist/core/code/engine/core/ingestion/languages/php/arity-metadata.js +66 -0
- package/dist/core/code/engine/core/ingestion/languages/php/arity.js +43 -0
- package/dist/core/code/engine/core/ingestion/languages/php/cache-stats.js +32 -0
- package/dist/core/code/engine/core/ingestion/languages/php/captures.js +1166 -0
- package/dist/core/code/engine/core/ingestion/languages/php/import-decomposer.js +238 -0
- package/dist/core/code/engine/core/ingestion/languages/php/import-target.js +213 -0
- package/dist/core/code/engine/core/ingestion/languages/php/index.js +85 -0
- package/dist/core/code/engine/core/ingestion/languages/php/interpret.js +256 -0
- package/dist/core/code/engine/core/ingestion/languages/php/merge-bindings.js +50 -0
- package/dist/core/code/engine/core/ingestion/languages/php/namespace-siblings.js +353 -0
- package/dist/core/code/engine/core/ingestion/languages/php/query.js +391 -0
- package/dist/core/code/engine/core/ingestion/languages/php/receiver-binding.js +135 -0
- package/dist/core/code/engine/core/ingestion/languages/php/scope-resolver.js +361 -0
- package/dist/core/code/engine/core/ingestion/languages/php/simple-hooks.js +116 -0
- package/dist/core/code/engine/core/ingestion/languages/php.js +302 -0
- package/dist/core/code/engine/core/ingestion/languages/python/arity-metadata.js +49 -0
- package/dist/core/code/engine/core/ingestion/languages/python/arity.js +41 -0
- package/dist/core/code/engine/core/ingestion/languages/python/cache-stats.js +34 -0
- package/dist/core/code/engine/core/ingestion/languages/python/captures.js +299 -0
- package/dist/core/code/engine/core/ingestion/languages/python/depends-references.js +68 -0
- package/dist/core/code/engine/core/ingestion/languages/python/import-decomposer.js +115 -0
- package/dist/core/code/engine/core/ingestion/languages/python/import-target.js +440 -0
- package/dist/core/code/engine/core/ingestion/languages/python/index-stats.js +30 -0
- package/dist/core/code/engine/core/ingestion/languages/python/index.js +96 -0
- package/dist/core/code/engine/core/ingestion/languages/python/interpret.js +430 -0
- package/dist/core/code/engine/core/ingestion/languages/python/merge-bindings.js +47 -0
- package/dist/core/code/engine/core/ingestion/languages/python/query.js +323 -0
- package/dist/core/code/engine/core/ingestion/languages/python/receiver-binding.js +310 -0
- package/dist/core/code/engine/core/ingestion/languages/python/scope-resolver.js +80 -0
- package/dist/core/code/engine/core/ingestion/languages/python/simple-hooks.js +53 -0
- package/dist/core/code/engine/core/ingestion/languages/python.js +140 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby/arity.js +41 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby/cache-stats.js +21 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby/captures.js +864 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby/import-target.js +88 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby/index.js +29 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby/interpret.js +115 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby/merge-bindings.js +21 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby/query.js +349 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby/receiver-binding.js +70 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby/scope-resolver.js +263 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby/simple-hooks.js +68 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby.js +215 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/arity.js +16 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/cache-stats.js +21 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/captures.js +304 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/import-decomposer.js +167 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/import-target.js +108 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/index.js +29 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/interpret.js +201 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/merge-bindings.js +21 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/method-owners.js +76 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/module-path.js +222 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/qualified-call.js +482 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/query.js +280 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/range-binding.js +687 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/receiver-binding.js +148 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/scope-resolver.js +151 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/simple-hooks.js +32 -0
- package/dist/core/code/engine/core/ingestion/languages/rust.js +183 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/arity-metadata.js +44 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/arity.js +45 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/base-type.js +30 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/cache-stats.js +32 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/captures.js +594 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/conditional-directive-preprocess.js +256 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/implicit-imports.js +60 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/import-decomposer.js +87 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/import-target.js +84 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/index.js +56 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/interpret.js +93 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/merge-bindings.js +51 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/query.js +226 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/receiver-binding.js +169 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/scope-resolver.js +192 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/sibling-type-bindings.js +68 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/signature-bindings.js +69 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/simple-hooks.js +65 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/target-grouping.js +97 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/target-siblings.js +74 -0
- package/dist/core/code/engine/core/ingestion/languages/swift.js +246 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/arity-metadata.js +106 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/arity.js +57 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/array-callback.js +58 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/cache-stats.js +34 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/captures.js +956 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/cjs-export-assignment.js +535 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/cjs-module-exports.js +196 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/import-decomposer.js +374 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/import-target.js +65 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/index.js +108 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/interpret.js +344 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/merge-bindings.js +161 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/nuxt-auto-imports.js +325 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/query.js +1328 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/receiver-binding.js +201 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/scope-resolver.js +293 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/simple-hooks.js +139 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript.js +455 -0
- package/dist/core/code/engine/core/ingestion/languages/vue/captures.js +70 -0
- package/dist/core/code/engine/core/ingestion/languages/vue/import-target.js +61 -0
- package/dist/core/code/engine/core/ingestion/languages/vue/index.js +55 -0
- package/dist/core/code/engine/core/ingestion/languages/vue/scope-resolver.js +295 -0
- package/dist/core/code/engine/core/ingestion/languages/vue.js +96 -0
- package/dist/core/code/engine/core/ingestion/local-symbol-pruner.js +68 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/configs/c-cpp.js +387 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/configs/csharp.js +290 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/configs/dart.js +392 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/configs/go.js +179 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/configs/jvm.js +350 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/configs/php.js +306 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/configs/python.js +312 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/configs/ruby.js +289 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/configs/rust.js +198 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/configs/swift.js +286 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/configs/typescript-javascript.js +341 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/generic.js +209 -0
- package/dist/core/code/engine/core/ingestion/method-types.js +3 -0
- package/dist/core/code/engine/core/ingestion/model/field-registry.js +41 -0
- package/dist/core/code/engine/core/ingestion/model/index.js +52 -0
- package/dist/core/code/engine/core/ingestion/model/method-registry.js +138 -0
- package/dist/core/code/engine/core/ingestion/model/owned-members-lookup.js +46 -0
- package/dist/core/code/engine/core/ingestion/model/registration-table.js +234 -0
- package/dist/core/code/engine/core/ingestion/model/resolve.js +183 -0
- package/dist/core/code/engine/core/ingestion/model/scope-resolution-indexes.js +43 -0
- package/dist/core/code/engine/core/ingestion/model/semantic-model.js +179 -0
- package/dist/core/code/engine/core/ingestion/model/symbol-table.js +216 -0
- package/dist/core/code/engine/core/ingestion/model/type-registry.js +84 -0
- package/dist/core/code/engine/core/ingestion/mro-processor.js +709 -0
- package/dist/core/code/engine/core/ingestion/parsing-processor.js +312 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/communities.js +69 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/cross-file.js +71 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/di.js +338 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/http-api-calls.js +312 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/index.js +54 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/mro.js +40 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/orm.js +78 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/parse-impl.js +1286 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/parse.js +41 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/processes.js +193 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/prune-local-symbols.js +29 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/registry.js +52 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/routes.js +409 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/rpc-edges.js +301 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/runner.js +207 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/scan.js +49 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/spring-aop.js +442 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/spring-auto-configuration.js +264 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/spring-config.js +440 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/structure.js +38 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/tools.js +89 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/types.js +40 -0
- package/dist/core/code/engine/core/ingestion/pipeline.js +152 -0
- package/dist/core/code/engine/core/ingestion/process-processor.js +325 -0
- package/dist/core/code/engine/core/ingestion/resolve-references.js +205 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/constant-resolver.js +135 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/django-root-discovery.js +221 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/django.js +428 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/expo.js +39 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/fastapi-router-bindings.js +264 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/laravel.js +501 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/middleware.js +175 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/nextjs.js +81 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/php.js +25 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/python-const-resolver.js +307 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/response-shapes.js +299 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/route-path.js +71 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/spring-shared.js +310 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/spring.js +441 -0
- package/dist/core/code/engine/core/ingestion/scope-extractor-bridge.js +60 -0
- package/dist/core/code/engine/core/ingestion/scope-extractor.js +1373 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/contract/scope-resolver.js +282 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/callee-id-sink.js +72 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/edges.js +194 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/ids.js +472 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/imports-to-edges.js +49 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/method-dispatch.js +43 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/node-lookup.js +274 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/references-to-edges.js +93 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/passes/callable-value-flow.js +1240 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/passes/compound-receiver.js +1174 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/passes/free-call-fallback.js +873 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/passes/imported-return-types.js +226 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/passes/mro.js +107 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/passes/overload-narrowing.js +441 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/passes/property-dispatch.js +122 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/passes/receiver-bound-calls.js +1720 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/phase.js +395 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/reconcile-ownership.js +208 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/registry.js +49 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/run.js +632 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/validate-bindings-immutability.js +112 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/resolution-outcome.js +41 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/scope/namespace-targets.js +81 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/scope/walkers.js +1835 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/unresolved-receivers.js +242 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/utils/definition-id.js +22 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/workspace-index.js +151 -0
- package/dist/core/code/engine/core/ingestion/structure-processor.js +40 -0
- package/dist/core/code/engine/core/ingestion/tree-sitter-queries.js +2244 -0
- package/dist/core/code/engine/core/ingestion/ts-js-hoc-utils.js +115 -0
- package/dist/core/code/engine/core/ingestion/type-env.js +1136 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/c-cpp.js +555 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/csharp.js +570 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/dart.js +372 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/go.js +508 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/jvm.js +875 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/php.js +537 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/python.js +477 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/ruby.js +380 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/rust.js +502 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/shared.js +843 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/swift.js +490 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/types.js +2 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/typescript.js +690 -0
- package/dist/core/code/engine/core/ingestion/utils/ast-helpers.js +1693 -0
- package/dist/core/code/engine/core/ingestion/utils/call-analysis.js +779 -0
- package/dist/core/code/engine/core/ingestion/utils/callable-flow-captures.js +932 -0
- package/dist/core/code/engine/core/ingestion/utils/callable-labels.js +49 -0
- package/dist/core/code/engine/core/ingestion/utils/deferred-resolution-profile.js +151 -0
- package/dist/core/code/engine/core/ingestion/utils/effective-ram.js +67 -0
- package/dist/core/code/engine/core/ingestion/utils/env.js +60 -0
- package/dist/core/code/engine/core/ingestion/utils/event-loop.js +9 -0
- package/dist/core/code/engine/core/ingestion/utils/graph-sort.js +103 -0
- package/dist/core/code/engine/core/ingestion/utils/heap-probe.js +45 -0
- package/dist/core/code/engine/core/ingestion/utils/heritage-marker.js +47 -0
- package/dist/core/code/engine/core/ingestion/utils/line-base.js +24 -0
- package/dist/core/code/engine/core/ingestion/utils/max-file-size.js +59 -0
- package/dist/core/code/engine/core/ingestion/utils/method-props.js +198 -0
- package/dist/core/code/engine/core/ingestion/utils/qualified-name.js +73 -0
- package/dist/core/code/engine/core/ingestion/utils/receiver-chain-captures.js +60 -0
- package/dist/core/code/engine/core/ingestion/utils/receiver-chain-codec.js +188 -0
- package/dist/core/code/engine/core/ingestion/utils/scope-tree-walk.js +36 -0
- package/dist/core/code/engine/core/ingestion/utils/symbol-labels.js +48 -0
- package/dist/core/code/engine/core/ingestion/utils/template-arguments.js +187 -0
- package/dist/core/code/engine/core/ingestion/utils/type-parameters.js +209 -0
- package/dist/core/code/engine/core/ingestion/utils/verbose.js +6 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/configs/c-cpp.js +133 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/configs/csharp.js +66 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/configs/dart.js +111 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/configs/go.js +153 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/configs/jvm.js +145 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/configs/php.js +61 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/configs/python.js +104 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/configs/ruby.js +55 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/configs/rust.js +79 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/configs/swift.js +91 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/configs/typescript-javascript.js +86 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/generic.js +111 -0
- package/dist/core/code/engine/core/ingestion/variable-types.js +3 -0
- package/dist/core/code/engine/core/ingestion/vue-sfc-extractor.js +544 -0
- package/dist/core/code/engine/core/ingestion/workers/callable-id.js +122 -0
- package/dist/core/code/engine/core/ingestion/workers/clone-safety.js +470 -0
- package/dist/core/code/engine/core/ingestion/workers/parse-worker.js +2456 -0
- package/dist/core/code/engine/core/ingestion/workers/post-result.js +90 -0
- package/dist/core/code/engine/core/ingestion/workers/quarantine.js +41 -0
- package/dist/core/code/engine/core/ingestion/workers/result-merge.js +59 -0
- package/dist/core/code/engine/core/ingestion/workers/worker-pool.js +1725 -0
- package/dist/core/code/engine/core/ingestion/workspace-config.js +139 -0
- package/dist/core/code/engine/core/lbug/conn-lock.js +72 -0
- package/dist/core/code/engine/core/lbug/csv-generator.js +710 -0
- package/dist/core/code/engine/core/lbug/cypher-escape.js +24 -0
- package/dist/core/code/engine/core/lbug/extension-load-error.js +339 -0
- package/dist/core/code/engine/core/lbug/extension-loader.js +261 -0
- package/dist/core/code/engine/core/lbug/graph-emit-sink.js +584 -0
- package/dist/core/code/engine/core/lbug/lbug-adapter.js +2703 -0
- package/dist/core/code/engine/core/lbug/lbug-config.js +1029 -0
- package/dist/core/code/engine/core/lbug/native-check.js +435 -0
- package/dist/core/code/engine/core/lbug/pool-adapter.js +973 -0
- package/dist/core/code/engine/core/lbug/query-params.js +25 -0
- package/dist/core/code/engine/core/lbug/query-result-utils.js +31 -0
- package/dist/core/code/engine/core/lbug/rel-pair-routing.js +373 -0
- package/dist/core/code/engine/core/lbug/schema.js +771 -0
- package/dist/core/code/engine/core/lbug/shutdown-helpers.js +40 -0
- package/dist/core/code/engine/core/lbug/sidecar-recovery.js +716 -0
- package/dist/core/code/engine/core/lbug/stdio-capture.js +49 -0
- package/dist/core/code/engine/core/lbug/sync-csv-writer.js +115 -0
- package/dist/core/code/engine/core/lbug/wal-checkpoint-driver.js +215 -0
- package/dist/core/code/engine/core/lbug/wal-driver-state.js +28 -0
- package/dist/core/code/engine/core/logger.js +339 -0
- package/dist/core/code/engine/core/platform/capabilities.js +91 -0
- package/dist/core/code/engine/core/run-analyze.js +1098 -0
- package/dist/core/code/engine/core/tree-sitter/parser-loader.js +281 -0
- package/dist/core/code/engine/core/tree-sitter/safe-parse.js +258 -0
- package/dist/core/code/engine/core/tree-sitter/vendored-grammars.js +64 -0
- package/dist/core/code/engine/lib/utils.js +121 -0
- package/dist/core/code/engine/mcp/core/lbug-adapter.js +27 -0
- package/dist/core/code/engine/mcp/local/aop-metadata.js +230 -0
- package/dist/core/code/engine/mcp/local/bean-metadata.js +49 -0
- package/dist/core/code/engine/mcp/local/limits.js +15 -0
- package/dist/core/code/engine/mcp/local/line-display.js +6 -0
- package/dist/core/code/engine/mcp/local/local-backend.js +4142 -0
- package/dist/core/code/engine/storage/branch-index.js +72 -0
- package/dist/core/code/engine/storage/file-hash.js +95 -0
- package/dist/core/code/engine/storage/fs-atomic.js +34 -0
- package/dist/core/code/engine/storage/git.js +555 -0
- package/dist/core/code/engine/storage/index-lock.js +664 -0
- package/dist/core/code/engine/storage/parse-cache.js +650 -0
- package/dist/core/code/engine/storage/parsedfile-store.js +620 -0
- package/dist/core/code/engine/storage/repo-manager.js +1061 -0
- package/dist/core/code/engine/storage/scope-index-store.js +247 -0
- package/dist/core/code/engine/types/pipeline.js +2 -0
- package/dist/core/code/scripts/install-duckdb-extension.mjs +125 -0
- package/dist/core/code/scripts/resolve-analyze-cmd.cjs +346 -0
- package/dist/core/code/shared/graph/types.js +8 -0
- package/dist/core/code/shared/index.js +105 -0
- package/dist/core/code/shared/integrations/circuit-breaker.js +242 -0
- package/dist/core/code/shared/integrations/resilient-fetch.js +224 -0
- package/dist/core/code/shared/integrations/retry.js +70 -0
- package/dist/core/code/shared/integrations/understand-quickly.js +145 -0
- package/dist/core/code/shared/language-detection.js +162 -0
- package/dist/core/code/shared/languages.js +27 -0
- package/dist/core/code/shared/lbug/schema-constants.js +98 -0
- package/dist/core/code/shared/mro-strategy.js +2 -0
- package/dist/core/code/shared/pipeline.js +5 -0
- package/dist/core/code/shared/scope-resolution/callable-flow-site.js +11 -0
- package/dist/core/code/shared/scope-resolution/def-index.js +53 -0
- package/dist/core/code/shared/scope-resolution/evidence-weights.js +87 -0
- package/dist/core/code/shared/scope-resolution/finalize-algorithm.js +807 -0
- package/dist/core/code/shared/scope-resolution/language-classification.js +46 -0
- package/dist/core/code/shared/scope-resolution/method-dispatch-index.js +100 -0
- package/dist/core/code/shared/scope-resolution/module-scope-index.js +59 -0
- package/dist/core/code/shared/scope-resolution/origin-priority.js +23 -0
- package/dist/core/code/shared/scope-resolution/parsed-file.js +54 -0
- package/dist/core/code/shared/scope-resolution/position-index.js +136 -0
- package/dist/core/code/shared/scope-resolution/qualified-name-index.js +77 -0
- package/dist/core/code/shared/scope-resolution/reference-site.js +24 -0
- package/dist/core/code/shared/scope-resolution/registries/class-registry.js +32 -0
- package/dist/core/code/shared/scope-resolution/registries/context.js +52 -0
- package/dist/core/code/shared/scope-resolution/registries/evidence.js +152 -0
- package/dist/core/code/shared/scope-resolution/registries/field-registry.js +33 -0
- package/dist/core/code/shared/scope-resolution/registries/lookup-core.js +392 -0
- package/dist/core/code/shared/scope-resolution/registries/lookup-qualified.js +58 -0
- package/dist/core/code/shared/scope-resolution/registries/macro-registry.js +34 -0
- package/dist/core/code/shared/scope-resolution/registries/method-registry.js +34 -0
- package/dist/core/code/shared/scope-resolution/registries/tie-breaks.js +63 -0
- package/dist/core/code/shared/scope-resolution/resolve-type-ref.js +128 -0
- package/dist/core/code/shared/scope-resolution/scope-id.js +49 -0
- package/dist/core/code/shared/scope-resolution/scope-tree.js +225 -0
- package/dist/core/code/shared/scope-resolution/symbol-definition.js +12 -0
- package/dist/core/code/shared/scope-resolution/types.js +25 -0
- package/dist/core/code/shared/test-helpers.js +17 -0
- package/dist/core/code/vendor/leiden/index.cjs +355 -0
- package/dist/core/code/vendor/leiden/utils.cjs +419 -0
- package/dist/core/features/scanner.d.ts +2 -0
- package/dist/core/features/scanner.d.ts.map +1 -1
- package/dist/core/features/scanner.js +27 -6
- package/dist/core/features/scanner.js.map +1 -1
- package/dist/core/timeline/cli.d.ts.map +1 -1
- package/dist/core/timeline/cli.js +13 -6
- package/dist/core/timeline/cli.js.map +1 -1
- package/dist/core/timeline/debris.d.ts +20 -0
- package/dist/core/timeline/debris.d.ts.map +1 -0
- package/dist/core/timeline/debris.js +124 -0
- package/dist/core/timeline/debris.js.map +1 -0
- package/dist/core/timeline/hook-runner.d.ts.map +1 -1
- package/dist/core/timeline/hook-runner.js +3 -1
- package/dist/core/timeline/hook-runner.js.map +1 -1
- package/dist/core/timeline/hooks.d.ts.map +1 -1
- package/dist/core/timeline/hooks.js +13 -5
- package/dist/core/timeline/hooks.js.map +1 -1
- package/dist/core/timeline/installer.d.ts +2 -0
- package/dist/core/timeline/installer.d.ts.map +1 -1
- package/dist/core/timeline/installer.js +12 -0
- package/dist/core/timeline/installer.js.map +1 -1
- package/dist/core/timeline/project-root.d.ts +21 -0
- package/dist/core/timeline/project-root.d.ts.map +1 -0
- package/dist/core/timeline/project-root.js +83 -0
- package/dist/core/timeline/project-root.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,584 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.GraphEmitSink = exports.StreamedRelationshipRemovalError = exports.RETAINED_REL_TYPES = void 0;
|
|
7
|
+
/**
|
|
8
|
+
* Streaming structural graph-emit sink (issue #2680).
|
|
9
|
+
*
|
|
10
|
+
* `analyze` holds the whole `KnowledgeGraph` on the main thread for the entire
|
|
11
|
+
* pipeline, so peak heap is O(repo) — ~2.1 KB/node at Linux-kernel scale
|
|
12
|
+
* (#2649). Measurement on a kernel-shaped synthetic graph (400k nodes,
|
|
13
|
+
* 2.7 edges/node) says where that goes:
|
|
14
|
+
*
|
|
15
|
+
* nodes only ....... 367 B/node
|
|
16
|
+
* nodes + edges .... 2075 B/node <- reproduces the #2649 figure
|
|
17
|
+
*
|
|
18
|
+
* So **relationships are ~83% of graph heap** (~646 B/edge), and that is what
|
|
19
|
+
* this sink removes. 646 B for an object holding four short strings is the cost
|
|
20
|
+
* of storing every edge four times over — `relationshipMap`, a
|
|
21
|
+
* `relationshipsByType` bucket, and both endpoints' `edgeIdsByNode` Sets — plus
|
|
22
|
+
* an `id` that concatenates both endpoint ids. (Dropping just the two redundant
|
|
23
|
+
* indexes was measured too: 174 of 648 B/edge, ~1.3x. Not enough on its own.)
|
|
24
|
+
*
|
|
25
|
+
* Nodes are deliberately NOT streamed: they are the other 17%, and two
|
|
26
|
+
* scope-resolution index builders (`buildGraphNodeLookup`,
|
|
27
|
+
* `buildGraphCallableAnchorIndex`) scan them.
|
|
28
|
+
*
|
|
29
|
+
* ## How much this actually saves — read this before quoting a number
|
|
30
|
+
*
|
|
31
|
+
* Measured A/B against the object-based graph, 400k nodes / 1.08M edges, all
|
|
32
|
+
* edges streamable (the worst case for this design): **823 MB -> 626 MB, ~1.3x**,
|
|
33
|
+
* with all 1.08M edges still visible through `iterRelationships`.
|
|
34
|
+
*
|
|
35
|
+
* That is well short of the ~2.9x a naive `0.17 + 0.83 * 0.21` retained-share
|
|
36
|
+
* calculation suggests, and the gap is deliberate: this sink is *lossless*, so
|
|
37
|
+
* it pays for the {@link streamedIds} dedup Set (one unique id string per
|
|
38
|
+
* streamed edge) and the columns above. An earlier revision hit a bigger number
|
|
39
|
+
* by disabling community detection, process extraction and the taint fixpoint —
|
|
40
|
+
* which is why it could not be the default. 1.3x with nothing traded away is the
|
|
41
|
+
* honest figure; if a future change needs more, the next lever is dedup keyed on
|
|
42
|
+
* the interned column triple rather than on id strings (it must first be shown
|
|
43
|
+
* not to alter the emitted row SET).
|
|
44
|
+
*
|
|
45
|
+
* ## What it costs — measured, not assumed
|
|
46
|
+
*
|
|
47
|
+
* Measured on the same 400k-node / 1.08M-edge graph, all edges streamable, each
|
|
48
|
+
* arm running what its own consumers actually call:
|
|
49
|
+
*
|
|
50
|
+
* heap 819 MB -> 584 MB (1.40x better)
|
|
51
|
+
* scans ~78 ms -> ~88 ms (parity, within run-to-run noise)
|
|
52
|
+
*
|
|
53
|
+
* Linear in both: verified at 100k/200k/400k/800k nodes, per-edge scan cost flat
|
|
54
|
+
* (~13 ns both arms) and the heap ratio drifting only 1.7x -> 1.5x as interner
|
|
55
|
+
* indices gain digits. No super-linear term, so a larger repo costs
|
|
56
|
+
* proportionally more, not disproportionately.
|
|
57
|
+
*
|
|
58
|
+
* The dedup key encodes its tail SEGMENT COUNT, which measurably costs ~66 MB
|
|
59
|
+
* here versus omitting it. That is not optional: without it a one-segment tail
|
|
60
|
+
* `:7` and a two-segment `:7:0` collapse onto one key and an edge is silently
|
|
61
|
+
* dropped (regression test in graph-emit-sink.test.ts).
|
|
62
|
+
*
|
|
63
|
+
* Getting there took three measured steps, because the naive version was 6.8x
|
|
64
|
+
* WORSE (651 ms) — reads rebuild objects, and a real analyze performs SIX full
|
|
65
|
+
* relationship scans (the pruner, community detection x2, process extraction x2,
|
|
66
|
+
* and the taint fixpoint's CALLS pass):
|
|
67
|
+
*
|
|
68
|
+
* 1. The ~150-character synthesized `id` was built eagerly on every read — 6.5M
|
|
69
|
+
* concatenations for a field no in-pipeline consumer reads. Isolating it
|
|
70
|
+
* showed 436 ms of the regression. It is now a lazy prototype getter on
|
|
71
|
+
* {@link StreamedRelationship}.
|
|
72
|
+
* 2. Generator and iterator-protocol overhead: {@link forEachRelationship} loops
|
|
73
|
+
* the columns directly, and {@link iterRelationships} reuses one
|
|
74
|
+
* iterator-result record. Note a hand-rolled iterator allocating a fresh
|
|
75
|
+
* `{value, done}` per edge measured WORSE (252 ms) than the generator it
|
|
76
|
+
* replaced, so the obvious rewrite is not the one that shipped.
|
|
77
|
+
* 3. The remaining ~90 ms was object allocation itself, irreducible while the
|
|
78
|
+
* read API returns objects — so the five whole-graph scans moved to
|
|
79
|
+
* `forEachRelationshipFields`, which passes the four fields they actually
|
|
80
|
+
* read as primitives and allocates nothing. See
|
|
81
|
+
* {@link GraphEmitSink.forEachRelationshipFields}.
|
|
82
|
+
*
|
|
83
|
+
* The last allocating scan is the taint fixpoint's `iterRelationshipsByType`
|
|
84
|
+
* pass; it is one scan of six and accounts for the small residual. Give it a
|
|
85
|
+
* by-type field variant only if a measurement says it matters.
|
|
86
|
+
*
|
|
87
|
+
* It is in any case NOT O(chunk) — node identity and the resolution registries
|
|
88
|
+
* stay O(repo). True O(chunk) needs DB-side resolution and Leiden (#2337), at
|
|
89
|
+
* which point this sink should be deleted rather than extended.
|
|
90
|
+
*
|
|
91
|
+
* ## Correctness contract
|
|
92
|
+
*
|
|
93
|
+
* Structural sibling of {@link PdgEmitSink}, and reuses its row builder
|
|
94
|
+
* (`buildRelRow`), header (`REL_CSV_HEADER`) and pair classification
|
|
95
|
+
* (`relPairKeyFor`, which is also what `RelPairRouter` routes and skips by), so
|
|
96
|
+
* the streamed row SET equals the whole-graph emit's and the bulk COPY loads
|
|
97
|
+
* the same rows. Set-level, not
|
|
98
|
+
* byte-level: rows stream in emit order and are not re-sorted under
|
|
99
|
+
* `CGRAPH_SORT_GRAPH_OUTPUT`.
|
|
100
|
+
*/
|
|
101
|
+
const fs_1 = __importDefault(require("fs"));
|
|
102
|
+
const path_1 = __importDefault(require("path"));
|
|
103
|
+
const csv_generator_js_1 = require("./csv-generator.js");
|
|
104
|
+
const rel_pair_routing_js_1 = require("./rel-pair-routing.js");
|
|
105
|
+
const sync_csv_writer_js_1 = require("./sync-csv-writer.js");
|
|
106
|
+
/**
|
|
107
|
+
* Relationship types that MUST stay in the in-memory graph because a phase
|
|
108
|
+
* running while streaming is active reads them back.
|
|
109
|
+
*
|
|
110
|
+
* Derived from an exhaustive audit of every relationship read site under
|
|
111
|
+
* `cgraph/src/` (`iterRelationshipsByType` / `iterRelationships` /
|
|
112
|
+
* `forEachRelationship` / `removeRelationship`), not from intuition — an
|
|
113
|
+
* earlier draft of this list carried 14 types, 5 of which no reachable phase
|
|
114
|
+
* reads. Every entry below names its reader:
|
|
115
|
+
*
|
|
116
|
+
* EXTENDS, IMPLEMENTS - mro-processor, scope-resolution/passes/mro,
|
|
117
|
+
* receiver-bound-calls, pipeline/run.ts, cpp
|
|
118
|
+
* member-lookup, and 9 language scope-resolvers
|
|
119
|
+
* HAS_METHOD - mro-processor, di phase
|
|
120
|
+
* HAS_PROPERTY - di phase, ruby scope-resolver, spring config-bindings
|
|
121
|
+
* METHOD_OVERRIDES,
|
|
122
|
+
* METHOD_IMPLEMENTS - mro-processor
|
|
123
|
+
* DEFINES - local-symbol-pruner's isFileDefinesEdge test
|
|
124
|
+
* INJECTS - di phase fan-out
|
|
125
|
+
*
|
|
126
|
+
* Deliberately NOT retained: STEP_IN_PROCESS / ENTRY_POINT_OF / MEMBER_OF
|
|
127
|
+
* (written only by the `processes` / `communities` phases, which the streaming
|
|
128
|
+
* flag disables), TAINT_PATH / CALL_SUMMARY (their phases are likewise gated
|
|
129
|
+
* off under the flag), and HANDLES_ROUTE / HANDLES_TOOL (written by
|
|
130
|
+
* `routes`/`tools`, never read back mid-pipeline).
|
|
131
|
+
*
|
|
132
|
+
* Adding a relationship type that a phase reads back WITHOUT adding it here is
|
|
133
|
+
* a silent-wrong-graph bug, not a crash. The differential round-trip test cannot:
|
|
134
|
+
* `addRelationship` partitions edges
|
|
135
|
+
* between the graph and the CSVs, and the union of a partition is invariant
|
|
136
|
+
* under where the partition line falls, so that test stays green no matter how
|
|
137
|
+
* this set is drawn. Only the read-site audit protects this invariant; re-run it
|
|
138
|
+
* (grep iterRelationshipsByType / iterRelationships / forEachRelationship /
|
|
139
|
+
* removeRelationship across src/) when adding a phase or a relationship type.
|
|
140
|
+
*/
|
|
141
|
+
exports.RETAINED_REL_TYPES = new Set([
|
|
142
|
+
'EXTENDS',
|
|
143
|
+
'IMPLEMENTS',
|
|
144
|
+
'HAS_METHOD',
|
|
145
|
+
'HAS_PROPERTY',
|
|
146
|
+
'METHOD_OVERRIDES',
|
|
147
|
+
'METHOD_IMPLEMENTS',
|
|
148
|
+
'DEFINES',
|
|
149
|
+
'INJECTS',
|
|
150
|
+
// springAopInheritance reads direct behavior evidence after MRO.
|
|
151
|
+
'ADVISED_BY',
|
|
152
|
+
]);
|
|
153
|
+
/**
|
|
154
|
+
* A streamed edge, rebuilt for a read.
|
|
155
|
+
*
|
|
156
|
+
* A class, not an object literal, for two reasons that both showed up in
|
|
157
|
+
* measurement. Its shape is fixed, so V8 keeps one hidden class across millions
|
|
158
|
+
* of instances; and `id` is a PROTOTYPE getter, so the ~150-character
|
|
159
|
+
* concatenation happens only if a caller actually reads it — which none of the
|
|
160
|
+
* in-pipeline consumers do. Building it eagerly cost 436 ms of a 555 ms
|
|
161
|
+
* iteration regression across the six full scans an analyze performs (measured
|
|
162
|
+
* at 400k nodes / 1.08M edges); deferring it gives that back.
|
|
163
|
+
*/
|
|
164
|
+
class StreamedRelationship {
|
|
165
|
+
sourceId;
|
|
166
|
+
targetId;
|
|
167
|
+
type;
|
|
168
|
+
confidence;
|
|
169
|
+
ix;
|
|
170
|
+
/** Constant for streamed edges — see the note on the columns about why
|
|
171
|
+
* `reason` is not retained. The persisted CSV row keeps the real value. */
|
|
172
|
+
reason = 'streamed';
|
|
173
|
+
constructor(sourceId, targetId, type, confidence, ix) {
|
|
174
|
+
this.sourceId = sourceId;
|
|
175
|
+
this.targetId = targetId;
|
|
176
|
+
this.type = type;
|
|
177
|
+
this.confidence = confidence;
|
|
178
|
+
this.ix = ix;
|
|
179
|
+
}
|
|
180
|
+
/** Deterministic and unique — the column index disambiguates two streamed
|
|
181
|
+
* edges that share (type, source, target). Lazily built; nothing in the
|
|
182
|
+
* pipeline reads it. */
|
|
183
|
+
get id() {
|
|
184
|
+
return `${this.type}:${this.sourceId}->${this.targetId}#${this.ix}`;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
/** Thrown when a consumer removes a relationship that already streamed to
|
|
188
|
+
* disk. Silently no-oping would let a mutating consumer (e.g. the COBOL
|
|
189
|
+
* cross-program CALL resolver) corrupt the persisted graph undetected. */
|
|
190
|
+
class StreamedRelationshipRemovalError extends Error {
|
|
191
|
+
constructor(relationshipId) {
|
|
192
|
+
super(`Cannot remove relationship "${relationshipId}": it has already been streamed to ` +
|
|
193
|
+
`CSV and cannot be recalled. A phase that removes relationships must run before ` +
|
|
194
|
+
`the GraphEmitSink is installed (see the parse-boundary construction in pipeline.ts).`);
|
|
195
|
+
this.name = 'StreamedRelationshipRemovalError';
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
exports.StreamedRelationshipRemovalError = StreamedRelationshipRemovalError;
|
|
199
|
+
/**
|
|
200
|
+
* Write-routing graph façade. Construct one per analyze run at the PARSE
|
|
201
|
+
* boundary — not at `createKnowledgeGraph()` — so the pre-parse phases
|
|
202
|
+
* (`structure`, `springConfig`, `markdown`, `cobol`) complete their
|
|
203
|
+
* read-modify-delete passes against a fully in-memory graph. Call
|
|
204
|
+
* {@link finalize} once after the pipeline, before `loadGraphToLbug`.
|
|
205
|
+
*/
|
|
206
|
+
class GraphEmitSink {
|
|
207
|
+
real;
|
|
208
|
+
csvDir;
|
|
209
|
+
chunkRows;
|
|
210
|
+
relWriters = new Map();
|
|
211
|
+
/**
|
|
212
|
+
* Ids of relationships already streamed. `KnowledgeGraph.addRelationship`
|
|
213
|
+
* drops duplicate ids first-writer-wins, and COPY into a PK-bearing table
|
|
214
|
+
* would violate on a repeat, so the sink must dedup itself — unlike
|
|
215
|
+
* `PdgEmitSink`, whose emit loop guarantees per-file uniqueness upstream.
|
|
216
|
+
*
|
|
217
|
+
* ponytail: O(streamed-edges) id strings retained. That is ~a tenth of full
|
|
218
|
+
* edge retention (the objects, both endpoint index Sets, and the type bucket
|
|
219
|
+
* all go away), but it is not O(chunk). Upgrade path if it ever dominates:
|
|
220
|
+
* a per-pair sorted-run dedup on disk, or hashing ids into a Bloom filter
|
|
221
|
+
* with an exact fallback.
|
|
222
|
+
*/
|
|
223
|
+
streamedIds = new Set();
|
|
224
|
+
/**
|
|
225
|
+
* Streamed edges, kept as parallel columns so the sink can still answer a
|
|
226
|
+
* COMPLETE relationship read (see {@link iterRelationships}). Only the four
|
|
227
|
+
* fields any consumer of these edges actually reads are retained —
|
|
228
|
+
* `sourceId`, `targetId`, `type`, `confidence` — audited across
|
|
229
|
+
* community-processor, process-processor, taint-summaries and the pruner.
|
|
230
|
+
*
|
|
231
|
+
* `id`, `reason` and `step` are deliberately NOT kept. Every relationship id
|
|
232
|
+
* is a unique long string, and retaining ids is exactly what made an earlier
|
|
233
|
+
* fully-columnar attempt LOSE to the object-based graph (measured 838 MB vs
|
|
234
|
+
* 822 MB at 400k nodes / 1.08M edges). Keeping ids out of the heap is where
|
|
235
|
+
* the saving comes from, so a read synthesizes a deterministic id instead —
|
|
236
|
+
* safe because `buildRelRow` never persists `rel.id` and no consumer keys on
|
|
237
|
+
* it (audited).
|
|
238
|
+
*
|
|
239
|
+
* The dropped `reason`/`step` are safe too, but for a different reason worth
|
|
240
|
+
* stating: the PERSISTED row keeps their true values, because `buildRelRow` is
|
|
241
|
+
* handed the original relationship on the way through. Only in-memory reads
|
|
242
|
+
* see the `'streamed'` placeholder, and the in-pipeline consumers of streamed
|
|
243
|
+
* edges read neither field. So e.g. the `ACCESSES reason: 'read'|'write'`
|
|
244
|
+
* distinction that MCP queries rely on survives in the database. A future
|
|
245
|
+
* in-pipeline consumer needing `reason` or `step` on a streamed edge must add
|
|
246
|
+
* the column, not trust the placeholder.
|
|
247
|
+
*
|
|
248
|
+
* Node ids are interned; the strings are shared by reference with the node
|
|
249
|
+
* map's, so interning adds bookkeeping, not new text.
|
|
250
|
+
*/
|
|
251
|
+
nodeIds = new Map();
|
|
252
|
+
nodeIdByIx = [];
|
|
253
|
+
srcIx = [];
|
|
254
|
+
tgtIx = [];
|
|
255
|
+
relTypes = [];
|
|
256
|
+
confidences = [];
|
|
257
|
+
finalized = false;
|
|
258
|
+
/**
|
|
259
|
+
* Streaming is OFF until {@link beginStreaming} is called by `parse`.
|
|
260
|
+
*
|
|
261
|
+
* The pre-parse phases are not all write-only: `mapCobolToGraph` scans
|
|
262
|
+
* `CALLS` edges and REMOVES the unresolved ones after adding resolved
|
|
263
|
+
* replacements (cobol-processor.ts). If the sink streamed from
|
|
264
|
+
* construction, that scan would see an empty set, no COBOL cross-program
|
|
265
|
+
* call would ever resolve, and the removal would be a silent no-op. Nothing
|
|
266
|
+
* before parse produces bulk edge volume, so deferring costs nothing.
|
|
267
|
+
*/
|
|
268
|
+
armed = false;
|
|
269
|
+
/**
|
|
270
|
+
* First writer-construction failure (`fs.openSync` throwing on e.g. EMFILE).
|
|
271
|
+
* It happens inside the `SyncCsvWriter` constructor before a writer object
|
|
272
|
+
* exists to carry poison, so it is held at sink level and folded into the
|
|
273
|
+
* {@link finalize} error check — otherwise an open failure mid-emit would be
|
|
274
|
+
* swallowed by a caller's try/catch and silently drop the rest of the rows.
|
|
275
|
+
*/
|
|
276
|
+
openFailure = undefined;
|
|
277
|
+
constructor(real, csvDir, chunkRows = sync_csv_writer_js_1.DEFAULT_EMIT_CHUNK_ROWS) {
|
|
278
|
+
this.real = real;
|
|
279
|
+
this.csvDir = csvDir;
|
|
280
|
+
this.chunkRows = chunkRows;
|
|
281
|
+
// Own directory, distinct from the PDG sink's: PdgEmitSink wipes and
|
|
282
|
+
// recreates its dir on construction and opens with O_EXCL, so a shared dir
|
|
283
|
+
// would destroy the other sink's manifest on a combined --pdg run.
|
|
284
|
+
fs_1.default.rmSync(csvDir, { recursive: true, force: true });
|
|
285
|
+
fs_1.default.mkdirSync(csvDir, { recursive: true });
|
|
286
|
+
}
|
|
287
|
+
// ── routed writes ──────────────────────────────────────────────────────────
|
|
288
|
+
/** Nodes are never streamed (see the file header) — always the real graph. */
|
|
289
|
+
addNode(node) {
|
|
290
|
+
this.real.addNode(node);
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Start streaming. Called once, by the `parse` phase, for the reason on
|
|
294
|
+
* {@link armed}.
|
|
295
|
+
*/
|
|
296
|
+
beginStreaming() {
|
|
297
|
+
this.armed = true;
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* Exact dedup key, built to hold no reference to the relationship id.
|
|
301
|
+
*
|
|
302
|
+
* An id embeds both node ids in full — ~200 characters on this repo — and the
|
|
303
|
+
* only information it adds beyond `(type, source, target)` is a short trailing
|
|
304
|
+
* disambiguator, e.g. `emit-references.ts` appends `:line:col` so two calls
|
|
305
|
+
* between the same pair at different sites stay distinct. The endpoints are
|
|
306
|
+
* already interned for the columns, so the key reuses those indices and parses
|
|
307
|
+
* the tail into NUMBERS.
|
|
308
|
+
*
|
|
309
|
+
* Numbers matter for more than size: a key built by slicing or replacing
|
|
310
|
+
* inside a long string is a V8 sliced/cons string that keeps its parent alive,
|
|
311
|
+
* so the 200-character id would never be freed and the memory saving would
|
|
312
|
+
* silently fail to materialize. Parsing to numbers severs that link.
|
|
313
|
+
*
|
|
314
|
+
* Falls back to the full id when the tail is not a numeric `:a:b` form (other
|
|
315
|
+
* id shapes exist, e.g. `rel:contains:` has no tail). Correctness first: an
|
|
316
|
+
* unrecognized shape is stored exactly, just without the saving.
|
|
317
|
+
*/
|
|
318
|
+
dedupKey(rel, srcIx, tgtIx) {
|
|
319
|
+
const afterTarget = rel.id.lastIndexOf(rel.targetId);
|
|
320
|
+
if (afterTarget >= 0) {
|
|
321
|
+
const tail = rel.id.slice(afterTarget + rel.targetId.length);
|
|
322
|
+
if (tail.length === 0)
|
|
323
|
+
return `${srcIx}|${tgtIx}|${rel.type}`;
|
|
324
|
+
// `:1483:6` -> two integers. Any non-numeric segment falls through.
|
|
325
|
+
if (tail.charCodeAt(0) === 58 /* ':' */) {
|
|
326
|
+
let a = 0;
|
|
327
|
+
let b = 0;
|
|
328
|
+
let seen = 0;
|
|
329
|
+
let ok = true;
|
|
330
|
+
for (const part of tail.slice(1).split(':')) {
|
|
331
|
+
const n = Number(part);
|
|
332
|
+
if (part.length === 0 || !Number.isInteger(n)) {
|
|
333
|
+
ok = false;
|
|
334
|
+
break;
|
|
335
|
+
}
|
|
336
|
+
if (seen === 0)
|
|
337
|
+
a = n;
|
|
338
|
+
else if (seen === 1)
|
|
339
|
+
b = n;
|
|
340
|
+
else {
|
|
341
|
+
ok = false;
|
|
342
|
+
break;
|
|
343
|
+
}
|
|
344
|
+
seen++;
|
|
345
|
+
}
|
|
346
|
+
// `seen` is part of the key: without it a one-segment tail `:7` (b
|
|
347
|
+
// defaults to 0) and a two-segment `:7:0` produce the same key, and the
|
|
348
|
+
// second edge is silently discarded as a duplicate. Distinct ids must
|
|
349
|
+
// never collapse — that is a lost relationship with no error.
|
|
350
|
+
if (ok)
|
|
351
|
+
return `${srcIx}|${tgtIx}|${rel.type}|${seen}|${a}|${b}`;
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
return rel.id;
|
|
355
|
+
}
|
|
356
|
+
internNode(id) {
|
|
357
|
+
const existing = this.nodeIds.get(id);
|
|
358
|
+
if (existing !== undefined)
|
|
359
|
+
return existing;
|
|
360
|
+
const ix = this.nodeIdByIx.length;
|
|
361
|
+
this.nodeIdByIx.push(id);
|
|
362
|
+
this.nodeIds.set(id, ix);
|
|
363
|
+
return ix;
|
|
364
|
+
}
|
|
365
|
+
/** Rebuild a streamed edge; its id is synthesized lazily, not stored. */
|
|
366
|
+
streamedAt(ix) {
|
|
367
|
+
return new StreamedRelationship(this.nodeIdByIx[this.srcIx[ix]], this.nodeIdByIx[this.tgtIx[ix]], this.relTypes[ix], this.confidences[ix], ix);
|
|
368
|
+
}
|
|
369
|
+
addRelationship(relationship) {
|
|
370
|
+
if (!this.armed || exports.RETAINED_REL_TYPES.has(relationship.type)) {
|
|
371
|
+
this.real.addRelationship(relationship);
|
|
372
|
+
return;
|
|
373
|
+
}
|
|
374
|
+
// Mirror KnowledgeGraph.addRelationship's first-writer-wins dedup.
|
|
375
|
+
// Classify + skip via the SHARED `relPairKeyFor`, not a local copy of its
|
|
376
|
+
// three lines, so the streamed set cannot drift from the whole-graph set
|
|
377
|
+
// `RelPairRouter` produces. `undefined` = an endpoint label is not a node
|
|
378
|
+
// table, so the edge is dropped exactly as the router drops it.
|
|
379
|
+
const pairKey = (0, rel_pair_routing_js_1.relPairKeyFor)(relationship.sourceId, relationship.targetId, rel_pair_routing_js_1.VALID_NODE_TABLES);
|
|
380
|
+
if (pairKey === undefined)
|
|
381
|
+
return;
|
|
382
|
+
(0, rel_pair_routing_js_1.assertDeclaredPair)(pairKey, csv_generator_js_1.DECLARED_RELATION_PAIRS, relationship.type, relationship.sourceId, relationship.targetId);
|
|
383
|
+
let writer = this.relWriters.get(pairKey);
|
|
384
|
+
if (writer === undefined) {
|
|
385
|
+
// Cold: once per pair, so decoding the key back into its labels is free.
|
|
386
|
+
const [fromLabel, toLabel] = (0, rel_pair_routing_js_1.splitRelPairKey)(pairKey);
|
|
387
|
+
try {
|
|
388
|
+
writer = new sync_csv_writer_js_1.SyncCsvWriter(path_1.default.join(this.csvDir, `rel_${fromLabel}_${toLabel}.csv`), csv_generator_js_1.REL_CSV_HEADER, this.chunkRows);
|
|
389
|
+
}
|
|
390
|
+
catch (e) {
|
|
391
|
+
this.openFailure ??= e;
|
|
392
|
+
throw e;
|
|
393
|
+
}
|
|
394
|
+
this.relWriters.set(pairKey, writer);
|
|
395
|
+
}
|
|
396
|
+
// Intern first so the dedup key can reuse the indices.
|
|
397
|
+
const srcIx = this.internNode(relationship.sourceId);
|
|
398
|
+
const tgtIx = this.internNode(relationship.targetId);
|
|
399
|
+
const key = this.dedupKey(relationship, srcIx, tgtIx);
|
|
400
|
+
if (this.streamedIds.has(key))
|
|
401
|
+
return;
|
|
402
|
+
this.streamedIds.add(key);
|
|
403
|
+
writer.addRow((0, csv_generator_js_1.buildRelRow)(relationship));
|
|
404
|
+
this.srcIx.push(srcIx);
|
|
405
|
+
this.tgtIx.push(tgtIx);
|
|
406
|
+
this.relTypes.push(relationship.type);
|
|
407
|
+
this.confidences.push(relationship.confidence);
|
|
408
|
+
}
|
|
409
|
+
/** Flush + close every writer and return the COPY manifest. Every fd is
|
|
410
|
+
* closed even when a writer is poisoned; any IO fault — an in-flight write,
|
|
411
|
+
* a final-flush failure, or a writer-open failure (EMFILE) — is surfaced
|
|
412
|
+
* loudly here so a disk-full / out-of-fds run never hands a truncated CSV to
|
|
413
|
+
* the bulk COPY. */
|
|
414
|
+
finalize() {
|
|
415
|
+
if (this.finalized)
|
|
416
|
+
throw new Error('GraphEmitSink.finalize() called twice');
|
|
417
|
+
this.finalized = true;
|
|
418
|
+
const errors = [];
|
|
419
|
+
if (this.openFailure !== undefined)
|
|
420
|
+
errors.push(this.openFailure);
|
|
421
|
+
const relsByPair = new Map();
|
|
422
|
+
let totalRows = 0;
|
|
423
|
+
for (const [pairKey, writer] of this.relWriters) {
|
|
424
|
+
writer.close();
|
|
425
|
+
if (writer.poison !== undefined)
|
|
426
|
+
errors.push(writer.poison);
|
|
427
|
+
relsByPair.set(pairKey, { csvPath: writer.csvPath, rows: writer.rows });
|
|
428
|
+
totalRows += writer.rows;
|
|
429
|
+
}
|
|
430
|
+
if (errors.length > 0) {
|
|
431
|
+
const first = errors[0];
|
|
432
|
+
throw new Error(`GraphEmitSink: ${errors.length} streamed CSV writer(s) hit an IO error ` +
|
|
433
|
+
`(disk-full / out-of-fds) during the emit — the persisted graph would be ` +
|
|
434
|
+
`truncated, so the run is failed rather than COPYing a partial CSV: ${first instanceof Error ? first.message : String(first)}`);
|
|
435
|
+
}
|
|
436
|
+
return { relsByPair, totalRows };
|
|
437
|
+
}
|
|
438
|
+
/** Best-effort fd release for the error path — when the pipeline throws
|
|
439
|
+
* before {@link finalize} runs, the caller's `finally` calls this so the
|
|
440
|
+
* per-pair fds never leak. Idempotent with finalize via `finalized`. */
|
|
441
|
+
close() {
|
|
442
|
+
if (this.finalized)
|
|
443
|
+
return;
|
|
444
|
+
this.finalized = true;
|
|
445
|
+
for (const writer of this.relWriters.values()) {
|
|
446
|
+
try {
|
|
447
|
+
writer.close();
|
|
448
|
+
}
|
|
449
|
+
catch {
|
|
450
|
+
/* best-effort */
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
// ── delegated reads / retained mutations ───────────────────────────────────
|
|
455
|
+
get nodes() {
|
|
456
|
+
return this.real.nodes;
|
|
457
|
+
}
|
|
458
|
+
get relationships() {
|
|
459
|
+
return [...this.iterRelationships()];
|
|
460
|
+
}
|
|
461
|
+
iterNodes() {
|
|
462
|
+
return this.real.iterNodes();
|
|
463
|
+
}
|
|
464
|
+
/**
|
|
465
|
+
* Retained edges followed by the streamed ones, so every consumer sees a
|
|
466
|
+
* complete graph and no phase needs to know streaming happened. This is what
|
|
467
|
+
* lets streaming be the default.
|
|
468
|
+
*
|
|
469
|
+
* Hand-rolled rather than a generator: a generator pays per-`yield` machinery
|
|
470
|
+
* on every one of millions of edges, and the pruner and process extraction
|
|
471
|
+
* walk this three times per analyze.
|
|
472
|
+
*/
|
|
473
|
+
iterRelationships() {
|
|
474
|
+
const retained = this.real.iterRelationships();
|
|
475
|
+
const self = this;
|
|
476
|
+
let ix = 0;
|
|
477
|
+
// One reused result record. The iterator protocol lets the producer hand
|
|
478
|
+
// back the same object each step — `for…of` reads `value`/`done` and drops
|
|
479
|
+
// it immediately — and allocating a fresh one per edge cost more than the
|
|
480
|
+
// generator it replaced.
|
|
481
|
+
const result = {
|
|
482
|
+
value: undefined,
|
|
483
|
+
done: true,
|
|
484
|
+
};
|
|
485
|
+
const it = {
|
|
486
|
+
next() {
|
|
487
|
+
const fromReal = retained.next();
|
|
488
|
+
if (fromReal.done !== true) {
|
|
489
|
+
result.value = fromReal.value;
|
|
490
|
+
result.done = false;
|
|
491
|
+
return result;
|
|
492
|
+
}
|
|
493
|
+
if (ix < self.srcIx.length) {
|
|
494
|
+
result.value = self.streamedAt(ix++);
|
|
495
|
+
result.done = false;
|
|
496
|
+
return result;
|
|
497
|
+
}
|
|
498
|
+
result.value = undefined;
|
|
499
|
+
result.done = true;
|
|
500
|
+
return result;
|
|
501
|
+
},
|
|
502
|
+
[Symbol.iterator]() {
|
|
503
|
+
return it;
|
|
504
|
+
},
|
|
505
|
+
};
|
|
506
|
+
return it;
|
|
507
|
+
}
|
|
508
|
+
*iterRelationshipsByType(type) {
|
|
509
|
+
yield* this.real.iterRelationshipsByType(type);
|
|
510
|
+
if (exports.RETAINED_REL_TYPES.has(type))
|
|
511
|
+
return; // never streamed — skip the scan
|
|
512
|
+
for (let ix = 0; ix < this.srcIx.length; ix++) {
|
|
513
|
+
if (this.relTypes[ix] === type)
|
|
514
|
+
yield this.streamedAt(ix);
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
forEachNode(fn) {
|
|
518
|
+
this.real.forEachNode(fn);
|
|
519
|
+
}
|
|
520
|
+
/**
|
|
521
|
+
* The fast path: streamed edges are read straight out of the columns, so a
|
|
522
|
+
* whole-graph scan allocates NOTHING. This is what keeps iteration at parity
|
|
523
|
+
* with the object-based graph despite holding relationships columnar.
|
|
524
|
+
*/
|
|
525
|
+
forEachRelationshipFields(fn) {
|
|
526
|
+
this.real.forEachRelationshipFields(fn);
|
|
527
|
+
for (let ix = 0; ix < this.srcIx.length; ix++) {
|
|
528
|
+
fn(this.nodeIdByIx[this.srcIx[ix]], this.nodeIdByIx[this.tgtIx[ix]], this.relTypes[ix], this.confidences[ix]);
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
/** Direct loop rather than delegating to {@link iterRelationships}: this is
|
|
532
|
+
* the form community detection uses (twice), and skipping the generator and
|
|
533
|
+
* iterator protocol is measurably cheaper on a million-edge scan. */
|
|
534
|
+
forEachRelationship(fn) {
|
|
535
|
+
this.real.forEachRelationship(fn);
|
|
536
|
+
for (let ix = 0; ix < this.srcIx.length; ix++)
|
|
537
|
+
fn(this.streamedAt(ix));
|
|
538
|
+
}
|
|
539
|
+
getNode(id) {
|
|
540
|
+
return this.real.getNode(id);
|
|
541
|
+
}
|
|
542
|
+
get nodeCount() {
|
|
543
|
+
return this.real.nodeCount;
|
|
544
|
+
}
|
|
545
|
+
/** Retained edges only — streamed edges are gone from the heap by design.
|
|
546
|
+
* `run-analyze.ts` sizes the LadybugDB buffer pool from this, so it adds
|
|
547
|
+
* the manifest's `totalRows` back in (the hint only ever shrinks the pool,
|
|
548
|
+
* so under-reporting would starve the COPY at exactly the scale this
|
|
549
|
+
* feature targets). */
|
|
550
|
+
get relationshipCount() {
|
|
551
|
+
return this.real.relationshipCount + this.srcIx.length;
|
|
552
|
+
}
|
|
553
|
+
removeNode(nodeId) {
|
|
554
|
+
return this.real.removeNode(nodeId);
|
|
555
|
+
}
|
|
556
|
+
removeNodesByFile(filePath) {
|
|
557
|
+
return this.real.removeNodesByFile(filePath);
|
|
558
|
+
}
|
|
559
|
+
/**
|
|
560
|
+
* Deliberately conservative. The dedup Set holds compact keys derived from a
|
|
561
|
+
* relationship's endpoints ({@link dedupKey}), and a bare id alone cannot be
|
|
562
|
+
* turned back into one — so a streamed edge is not directly identifiable here.
|
|
563
|
+
*
|
|
564
|
+
* Rather than risk the silent case (returning `false` for an edge that IS on
|
|
565
|
+
* disk and cannot be recalled), anything the real graph does not hold is
|
|
566
|
+
* treated as possibly-streamed once streaming has begun, and fails loudly. A
|
|
567
|
+
* genuinely-absent id therefore throws too, where the object-based graph would
|
|
568
|
+
* return `false`; that is acceptable because the only production caller is the
|
|
569
|
+
* COBOL resolver, which runs BEFORE the sink is armed and so takes the branch
|
|
570
|
+
* below.
|
|
571
|
+
*
|
|
572
|
+
* NOTE this diverges from {@link KnowledgeGraph.removeRelationship}, which
|
|
573
|
+
* returns `false` for an id it does not hold. Pinned by a test so the
|
|
574
|
+
* divergence stays deliberate.
|
|
575
|
+
*/
|
|
576
|
+
removeRelationship(relationshipId) {
|
|
577
|
+
if (this.real.removeRelationship(relationshipId))
|
|
578
|
+
return true;
|
|
579
|
+
if (this.srcIx.length > 0)
|
|
580
|
+
throw new StreamedRelationshipRemovalError(relationshipId);
|
|
581
|
+
return false;
|
|
582
|
+
}
|
|
583
|
+
}
|
|
584
|
+
exports.GraphEmitSink = GraphEmitSink;
|