@legioncodeinc/nectar 0.0.1
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/LICENSE.md +662 -0
- package/README.md +307 -0
- package/dist/api/daemon-api-wiring.d.ts +72 -0
- package/dist/api/daemon-api-wiring.d.ts.map +1 -0
- package/dist/api/daemon-api-wiring.js +150 -0
- package/dist/api/daemon-api-wiring.js.map +1 -0
- package/dist/api/hive-graph-api.d.ts +136 -0
- package/dist/api/hive-graph-api.d.ts.map +1 -0
- package/dist/api/hive-graph-api.js +234 -0
- package/dist/api/hive-graph-api.js.map +1 -0
- package/dist/api/loopback-client.d.ts +27 -0
- package/dist/api/loopback-client.d.ts.map +1 -0
- package/dist/api/loopback-client.js +87 -0
- package/dist/api/loopback-client.js.map +1 -0
- package/dist/api/router.d.ts +172 -0
- package/dist/api/router.d.ts.map +1 -0
- package/dist/api/router.js +212 -0
- package/dist/api/router.js.map +1 -0
- package/dist/api/status-query.d.ts +49 -0
- package/dist/api/status-query.d.ts.map +1 -0
- package/dist/api/status-query.js +103 -0
- package/dist/api/status-query.js.map +1 -0
- package/dist/brood-guard.d.ts +24 -0
- package/dist/brood-guard.d.ts.map +1 -0
- package/dist/brood-guard.js +19 -0
- package/dist/brood-guard.js.map +1 -0
- package/dist/brood-prereqs.d.ts +62 -0
- package/dist/brood-prereqs.d.ts.map +1 -0
- package/dist/brood-prereqs.js +87 -0
- package/dist/brood-prereqs.js.map +1 -0
- package/dist/brooding/bucketing.d.ts +68 -0
- package/dist/brooding/bucketing.d.ts.map +1 -0
- package/dist/brooding/bucketing.js +122 -0
- package/dist/brooding/bucketing.js.map +1 -0
- package/dist/brooding/cli.d.ts +78 -0
- package/dist/brooding/cli.d.ts.map +1 -0
- package/dist/brooding/cli.js +140 -0
- package/dist/brooding/cli.js.map +1 -0
- package/dist/brooding/constants.d.ts +75 -0
- package/dist/brooding/constants.d.ts.map +1 -0
- package/dist/brooding/constants.js +91 -0
- package/dist/brooding/constants.js.map +1 -0
- package/dist/brooding/cost.d.ts +110 -0
- package/dist/brooding/cost.d.ts.map +1 -0
- package/dist/brooding/cost.js +96 -0
- package/dist/brooding/cost.js.map +1 -0
- package/dist/brooding/describe.d.ts +152 -0
- package/dist/brooding/describe.d.ts.map +1 -0
- package/dist/brooding/describe.js +281 -0
- package/dist/brooding/describe.js.map +1 -0
- package/dist/brooding/discovery.d.ts +116 -0
- package/dist/brooding/discovery.d.ts.map +1 -0
- package/dist/brooding/discovery.js +179 -0
- package/dist/brooding/discovery.js.map +1 -0
- package/dist/brooding/index.d.ts +23 -0
- package/dist/brooding/index.d.ts.map +1 -0
- package/dist/brooding/index.js +33 -0
- package/dist/brooding/index.js.map +1 -0
- package/dist/brooding/pipeline-async.d.ts +97 -0
- package/dist/brooding/pipeline-async.d.ts.map +1 -0
- package/dist/brooding/pipeline-async.js +364 -0
- package/dist/brooding/pipeline-async.js.map +1 -0
- package/dist/brooding/pipeline.d.ts +198 -0
- package/dist/brooding/pipeline.d.ts.map +1 -0
- package/dist/brooding/pipeline.js +454 -0
- package/dist/brooding/pipeline.js.map +1 -0
- package/dist/brooding/precheck.d.ts +52 -0
- package/dist/brooding/precheck.d.ts.map +1 -0
- package/dist/brooding/precheck.js +143 -0
- package/dist/brooding/precheck.js.map +1 -0
- package/dist/brooding/resumability.d.ts +57 -0
- package/dist/brooding/resumability.d.ts.map +1 -0
- package/dist/brooding/resumability.js +46 -0
- package/dist/brooding/resumability.js.map +1 -0
- package/dist/cli.d.ts +139 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +912 -0
- package/dist/cli.js.map +1 -0
- package/dist/config-file.d.ts +52 -0
- package/dist/config-file.d.ts.map +1 -0
- package/dist/config-file.js +130 -0
- package/dist/config-file.js.map +1 -0
- package/dist/config.d.ts +49 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +98 -0
- package/dist/config.js.map +1 -0
- package/dist/daemon.d.ts +265 -0
- package/dist/daemon.d.ts.map +1 -0
- package/dist/daemon.js +664 -0
- package/dist/daemon.js.map +1 -0
- package/dist/doctor-registry.d.ts +134 -0
- package/dist/doctor-registry.d.ts.map +1 -0
- package/dist/doctor-registry.js +173 -0
- package/dist/doctor-registry.js.map +1 -0
- package/dist/embeddings/cohere-portkey.d.ts +67 -0
- package/dist/embeddings/cohere-portkey.d.ts.map +1 -0
- package/dist/embeddings/cohere-portkey.js +171 -0
- package/dist/embeddings/cohere-portkey.js.map +1 -0
- package/dist/embeddings/config.d.ts +74 -0
- package/dist/embeddings/config.d.ts.map +1 -0
- package/dist/embeddings/config.js +131 -0
- package/dist/embeddings/config.js.map +1 -0
- package/dist/embeddings/guard.d.ts +34 -0
- package/dist/embeddings/guard.d.ts.map +1 -0
- package/dist/embeddings/guard.js +67 -0
- package/dist/embeddings/guard.js.map +1 -0
- package/dist/embeddings/hosted-portkey.d.ts +73 -0
- package/dist/embeddings/hosted-portkey.d.ts.map +1 -0
- package/dist/embeddings/hosted-portkey.js +179 -0
- package/dist/embeddings/hosted-portkey.js.map +1 -0
- package/dist/embeddings/http.d.ts +33 -0
- package/dist/embeddings/http.d.ts.map +1 -0
- package/dist/embeddings/http.js +19 -0
- package/dist/embeddings/http.js.map +1 -0
- package/dist/embeddings/index.d.ts +17 -0
- package/dist/embeddings/index.d.ts.map +1 -0
- package/dist/embeddings/index.js +17 -0
- package/dist/embeddings/index.js.map +1 -0
- package/dist/embeddings/local-nomic.d.ts +78 -0
- package/dist/embeddings/local-nomic.d.ts.map +1 -0
- package/dist/embeddings/local-nomic.js +126 -0
- package/dist/embeddings/local-nomic.js.map +1 -0
- package/dist/embeddings/provider.d.ts +79 -0
- package/dist/embeddings/provider.d.ts.map +1 -0
- package/dist/embeddings/provider.js +50 -0
- package/dist/embeddings/provider.js.map +1 -0
- package/dist/enricher/config.d.ts +43 -0
- package/dist/enricher/config.d.ts.map +1 -0
- package/dist/enricher/config.js +34 -0
- package/dist/enricher/config.js.map +1 -0
- package/dist/enricher/content-cache.d.ts +29 -0
- package/dist/enricher/content-cache.d.ts.map +1 -0
- package/dist/enricher/content-cache.js +24 -0
- package/dist/enricher/content-cache.js.map +1 -0
- package/dist/enricher/cycle.d.ts +71 -0
- package/dist/enricher/cycle.d.ts.map +1 -0
- package/dist/enricher/cycle.js +319 -0
- package/dist/enricher/cycle.js.map +1 -0
- package/dist/enricher/describe.d.ts +61 -0
- package/dist/enricher/describe.d.ts.map +1 -0
- package/dist/enricher/describe.js +175 -0
- package/dist/enricher/describe.js.map +1 -0
- package/dist/enricher/failure.d.ts +25 -0
- package/dist/enricher/failure.d.ts.map +1 -0
- package/dist/enricher/failure.js +46 -0
- package/dist/enricher/failure.js.map +1 -0
- package/dist/enricher/index.d.ts +22 -0
- package/dist/enricher/index.d.ts.map +1 -0
- package/dist/enricher/index.js +22 -0
- package/dist/enricher/index.js.map +1 -0
- package/dist/enricher/jaccard.d.ts +11 -0
- package/dist/enricher/jaccard.d.ts.map +1 -0
- package/dist/enricher/jaccard.js +29 -0
- package/dist/enricher/jaccard.js.map +1 -0
- package/dist/enricher/loop.d.ts +22 -0
- package/dist/enricher/loop.d.ts.map +1 -0
- package/dist/enricher/loop.js +34 -0
- package/dist/enricher/loop.js.map +1 -0
- package/dist/enricher/meaningful-change.d.ts +28 -0
- package/dist/enricher/meaningful-change.d.ts.map +1 -0
- package/dist/enricher/meaningful-change.js +41 -0
- package/dist/enricher/meaningful-change.js.map +1 -0
- package/dist/enricher/observability.d.ts +22 -0
- package/dist/enricher/observability.d.ts.map +1 -0
- package/dist/enricher/observability.js +55 -0
- package/dist/enricher/observability.js.map +1 -0
- package/dist/enricher/pending-query.d.ts +35 -0
- package/dist/enricher/pending-query.d.ts.map +1 -0
- package/dist/enricher/pending-query.js +54 -0
- package/dist/enricher/pending-query.js.map +1 -0
- package/dist/enricher/sql-update.d.ts +7 -0
- package/dist/enricher/sql-update.d.ts.map +1 -0
- package/dist/enricher/sql-update.js +22 -0
- package/dist/enricher/sql-update.js.map +1 -0
- package/dist/enricher/store-adapter.d.ts +98 -0
- package/dist/enricher/store-adapter.d.ts.map +1 -0
- package/dist/enricher/store-adapter.js +129 -0
- package/dist/enricher/store-adapter.js.map +1 -0
- package/dist/enricher/store.d.ts +58 -0
- package/dist/enricher/store.d.ts.map +1 -0
- package/dist/enricher/store.js +126 -0
- package/dist/enricher/store.js.map +1 -0
- package/dist/enricher/tokenize.d.ts +10 -0
- package/dist/enricher/tokenize.d.ts.map +1 -0
- package/dist/enricher/tokenize.js +28 -0
- package/dist/enricher/tokenize.js.map +1 -0
- package/dist/errors.d.ts +41 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +56 -0
- package/dist/errors.js.map +1 -0
- package/dist/health.d.ts +147 -0
- package/dist/health.d.ts.map +1 -0
- package/dist/health.js +168 -0
- package/dist/health.js.map +1 -0
- package/dist/hive-graph/deeplake-credentials.d.ts +68 -0
- package/dist/hive-graph/deeplake-credentials.d.ts.map +1 -0
- package/dist/hive-graph/deeplake-credentials.js +135 -0
- package/dist/hive-graph/deeplake-credentials.js.map +1 -0
- package/dist/hive-graph/deeplake-heal.d.ts +63 -0
- package/dist/hive-graph/deeplake-heal.d.ts.map +1 -0
- package/dist/hive-graph/deeplake-heal.js +118 -0
- package/dist/hive-graph/deeplake-heal.js.map +1 -0
- package/dist/hive-graph/deeplake-store.d.ts +199 -0
- package/dist/hive-graph/deeplake-store.d.ts.map +1 -0
- package/dist/hive-graph/deeplake-store.js +541 -0
- package/dist/hive-graph/deeplake-store.js.map +1 -0
- package/dist/hive-graph/deeplake-transport.d.ts +89 -0
- package/dist/hive-graph/deeplake-transport.d.ts.map +1 -0
- package/dist/hive-graph/deeplake-transport.js +145 -0
- package/dist/hive-graph/deeplake-transport.js.map +1 -0
- package/dist/hive-graph/hash.d.ts +3 -0
- package/dist/hive-graph/hash.d.ts.map +1 -0
- package/dist/hive-graph/hash.js +12 -0
- package/dist/hive-graph/hash.js.map +1 -0
- package/dist/hive-graph/memory-store.d.ts +39 -0
- package/dist/hive-graph/memory-store.d.ts.map +1 -0
- package/dist/hive-graph/memory-store.js +125 -0
- package/dist/hive-graph/memory-store.js.map +1 -0
- package/dist/hive-graph/model.d.ts +109 -0
- package/dist/hive-graph/model.d.ts.map +1 -0
- package/dist/hive-graph/model.js +36 -0
- package/dist/hive-graph/model.js.map +1 -0
- package/dist/hive-graph/paths.d.ts +7 -0
- package/dist/hive-graph/paths.d.ts.map +1 -0
- package/dist/hive-graph/paths.js +26 -0
- package/dist/hive-graph/paths.js.map +1 -0
- package/dist/hive-graph/project-scope.d.ts +99 -0
- package/dist/hive-graph/project-scope.d.ts.map +1 -0
- package/dist/hive-graph/project-scope.js +286 -0
- package/dist/hive-graph/project-scope.js.map +1 -0
- package/dist/hive-graph/schema.d.ts +53 -0
- package/dist/hive-graph/schema.d.ts.map +1 -0
- package/dist/hive-graph/schema.js +139 -0
- package/dist/hive-graph/schema.js.map +1 -0
- package/dist/hive-graph/search-types.d.ts +82 -0
- package/dist/hive-graph/search-types.d.ts.map +1 -0
- package/dist/hive-graph/search-types.js +2 -0
- package/dist/hive-graph/search-types.js.map +1 -0
- package/dist/hive-graph/search.d.ts +51 -0
- package/dist/hive-graph/search.d.ts.map +1 -0
- package/dist/hive-graph/search.js +417 -0
- package/dist/hive-graph/search.js.map +1 -0
- package/dist/hive-graph/sql-guards.d.ts +99 -0
- package/dist/hive-graph/sql-guards.d.ts.map +1 -0
- package/dist/hive-graph/sql-guards.js +129 -0
- package/dist/hive-graph/sql-guards.js.map +1 -0
- package/dist/hive-graph/store.d.ts +151 -0
- package/dist/hive-graph/store.d.ts.map +1 -0
- package/dist/hive-graph/store.js +2 -0
- package/dist/hive-graph/store.js.map +1 -0
- package/dist/hive-graph/ulid.d.ts +14 -0
- package/dist/hive-graph/ulid.d.ts.map +1 -0
- package/dist/hive-graph/ulid.js +109 -0
- package/dist/hive-graph/ulid.js.map +1 -0
- package/dist/hivedoctor-registry.d.ts +111 -0
- package/dist/hivedoctor-registry.d.ts.map +1 -0
- package/dist/hivedoctor-registry.js +143 -0
- package/dist/hivedoctor-registry.js.map +1 -0
- package/dist/index.d.ts +106 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +78 -0
- package/dist/index.js.map +1 -0
- package/dist/lock.d.ts +66 -0
- package/dist/lock.d.ts.map +1 -0
- package/dist/lock.js +282 -0
- package/dist/lock.js.map +1 -0
- package/dist/poll-loop.d.ts +71 -0
- package/dist/poll-loop.d.ts.map +1 -0
- package/dist/poll-loop.js +130 -0
- package/dist/poll-loop.js.map +1 -0
- package/dist/portkey/config.d.ts +46 -0
- package/dist/portkey/config.d.ts.map +1 -0
- package/dist/portkey/config.js +68 -0
- package/dist/portkey/config.js.map +1 -0
- package/dist/portkey/describe-model.d.ts +53 -0
- package/dist/portkey/describe-model.d.ts.map +1 -0
- package/dist/portkey/describe-model.js +56 -0
- package/dist/portkey/describe-model.js.map +1 -0
- package/dist/portkey/headers.d.ts +31 -0
- package/dist/portkey/headers.d.ts.map +1 -0
- package/dist/portkey/headers.js +37 -0
- package/dist/portkey/headers.js.map +1 -0
- package/dist/portkey/transport.d.ts +89 -0
- package/dist/portkey/transport.d.ts.map +1 -0
- package/dist/portkey/transport.js +167 -0
- package/dist/portkey/transport.js.map +1 -0
- package/dist/projection/format.d.ts +51 -0
- package/dist/projection/format.d.ts.map +1 -0
- package/dist/projection/format.js +81 -0
- package/dist/projection/format.js.map +1 -0
- package/dist/projection/generate.d.ts +31 -0
- package/dist/projection/generate.d.ts.map +1 -0
- package/dist/projection/generate.js +83 -0
- package/dist/projection/generate.js.map +1 -0
- package/dist/projection/inherit.d.ts +27 -0
- package/dist/projection/inherit.d.ts.map +1 -0
- package/dist/projection/inherit.js +128 -0
- package/dist/projection/inherit.js.map +1 -0
- package/dist/projection/load.d.ts +47 -0
- package/dist/projection/load.d.ts.map +1 -0
- package/dist/projection/load.js +258 -0
- package/dist/projection/load.js.map +1 -0
- package/dist/projection/store-adapter.d.ts +42 -0
- package/dist/projection/store-adapter.d.ts.map +1 -0
- package/dist/projection/store-adapter.js +42 -0
- package/dist/projection/store-adapter.js.map +1 -0
- package/dist/projection/write.d.ts +79 -0
- package/dist/projection/write.d.ts.map +1 -0
- package/dist/projection/write.js +122 -0
- package/dist/projection/write.js.map +1 -0
- package/dist/registration/classify.d.ts +33 -0
- package/dist/registration/classify.d.ts.map +1 -0
- package/dist/registration/classify.js +32 -0
- package/dist/registration/classify.js.map +1 -0
- package/dist/registration/copy-detect.d.ts +22 -0
- package/dist/registration/copy-detect.d.ts.map +1 -0
- package/dist/registration/copy-detect.js +12 -0
- package/dist/registration/copy-detect.js.map +1 -0
- package/dist/registration/disk-fs.d.ts +41 -0
- package/dist/registration/disk-fs.d.ts.map +1 -0
- package/dist/registration/disk-fs.js +175 -0
- package/dist/registration/disk-fs.js.map +1 -0
- package/dist/registration/fs-watch.d.ts +114 -0
- package/dist/registration/fs-watch.d.ts.map +1 -0
- package/dist/registration/fs-watch.js +266 -0
- package/dist/registration/fs-watch.js.map +1 -0
- package/dist/registration/ignore.d.ts +77 -0
- package/dist/registration/ignore.d.ts.map +1 -0
- package/dist/registration/ignore.js +249 -0
- package/dist/registration/ignore.js.map +1 -0
- package/dist/registration/ladder.d.ts +211 -0
- package/dist/registration/ladder.d.ts.map +1 -0
- package/dist/registration/ladder.js +378 -0
- package/dist/registration/ladder.js.map +1 -0
- package/dist/registration/paths-safe.d.ts +21 -0
- package/dist/registration/paths-safe.d.ts.map +1 -0
- package/dist/registration/paths-safe.js +88 -0
- package/dist/registration/paths-safe.js.map +1 -0
- package/dist/registration/prune-cli.d.ts +48 -0
- package/dist/registration/prune-cli.d.ts.map +1 -0
- package/dist/registration/prune-cli.js +57 -0
- package/dist/registration/prune-cli.js.map +1 -0
- package/dist/registration/review-cli.d.ts +42 -0
- package/dist/registration/review-cli.d.ts.map +1 -0
- package/dist/registration/review-cli.js +110 -0
- package/dist/registration/review-cli.js.map +1 -0
- package/dist/registration/review-store.d.ts +73 -0
- package/dist/registration/review-store.d.ts.map +1 -0
- package/dist/registration/review-store.js +243 -0
- package/dist/registration/review-store.js.map +1 -0
- package/dist/registration/service.d.ts +196 -0
- package/dist/registration/service.d.ts.map +1 -0
- package/dist/registration/service.js +384 -0
- package/dist/registration/service.js.map +1 -0
- package/dist/registration/store-bridge.d.ts +133 -0
- package/dist/registration/store-bridge.d.ts.map +1 -0
- package/dist/registration/store-bridge.js +159 -0
- package/dist/registration/store-bridge.js.map +1 -0
- package/dist/registration/tlsh.d.ts +125 -0
- package/dist/registration/tlsh.d.ts.map +1 -0
- package/dist/registration/tlsh.js +274 -0
- package/dist/registration/tlsh.js.map +1 -0
- package/dist/server.d.ts +26 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +156 -0
- package/dist/server.js.map +1 -0
- package/dist/service/argv.d.ts +52 -0
- package/dist/service/argv.d.ts.map +1 -0
- package/dist/service/argv.js +127 -0
- package/dist/service/argv.js.map +1 -0
- package/dist/service/command-runner.d.ts +54 -0
- package/dist/service/command-runner.d.ts.map +1 -0
- package/dist/service/command-runner.js +55 -0
- package/dist/service/command-runner.js.map +1 -0
- package/dist/service/index.d.ts +83 -0
- package/dist/service/index.d.ts.map +1 -0
- package/dist/service/index.js +270 -0
- package/dist/service/index.js.map +1 -0
- package/dist/service/platform.d.ts +110 -0
- package/dist/service/platform.d.ts.map +1 -0
- package/dist/service/platform.js +157 -0
- package/dist/service/platform.js.map +1 -0
- package/dist/service/templates.d.ts +88 -0
- package/dist/service/templates.d.ts.map +1 -0
- package/dist/service/templates.js +212 -0
- package/dist/service/templates.js.map +1 -0
- package/dist/source-graph/deeplake-credentials.d.ts +57 -0
- package/dist/source-graph/deeplake-credentials.d.ts.map +1 -0
- package/dist/source-graph/deeplake-credentials.js +109 -0
- package/dist/source-graph/deeplake-credentials.js.map +1 -0
- package/dist/source-graph/deeplake-heal.d.ts +53 -0
- package/dist/source-graph/deeplake-heal.d.ts.map +1 -0
- package/dist/source-graph/deeplake-heal.js +41 -0
- package/dist/source-graph/deeplake-heal.js.map +1 -0
- package/dist/source-graph/deeplake-store.d.ts +151 -0
- package/dist/source-graph/deeplake-store.d.ts.map +1 -0
- package/dist/source-graph/deeplake-store.js +389 -0
- package/dist/source-graph/deeplake-store.js.map +1 -0
- package/dist/source-graph/deeplake-transport.d.ts +74 -0
- package/dist/source-graph/deeplake-transport.d.ts.map +1 -0
- package/dist/source-graph/deeplake-transport.js +107 -0
- package/dist/source-graph/deeplake-transport.js.map +1 -0
- package/dist/source-graph/hash.d.ts +3 -0
- package/dist/source-graph/hash.d.ts.map +1 -0
- package/dist/source-graph/hash.js +12 -0
- package/dist/source-graph/hash.js.map +1 -0
- package/dist/source-graph/memory-store.d.ts +32 -0
- package/dist/source-graph/memory-store.d.ts.map +1 -0
- package/dist/source-graph/memory-store.js +81 -0
- package/dist/source-graph/memory-store.js.map +1 -0
- package/dist/source-graph/model.d.ts +102 -0
- package/dist/source-graph/model.d.ts.map +1 -0
- package/dist/source-graph/model.js +36 -0
- package/dist/source-graph/model.js.map +1 -0
- package/dist/source-graph/paths.d.ts +7 -0
- package/dist/source-graph/paths.d.ts.map +1 -0
- package/dist/source-graph/paths.js +26 -0
- package/dist/source-graph/paths.js.map +1 -0
- package/dist/source-graph/schema.d.ts +44 -0
- package/dist/source-graph/schema.d.ts.map +1 -0
- package/dist/source-graph/schema.js +123 -0
- package/dist/source-graph/schema.js.map +1 -0
- package/dist/source-graph/sql-guards.d.ts +99 -0
- package/dist/source-graph/sql-guards.d.ts.map +1 -0
- package/dist/source-graph/sql-guards.js +129 -0
- package/dist/source-graph/sql-guards.js.map +1 -0
- package/dist/source-graph/store.d.ts +101 -0
- package/dist/source-graph/store.d.ts.map +1 -0
- package/dist/source-graph/store.js +2 -0
- package/dist/source-graph/store.js.map +1 -0
- package/dist/source-graph/ulid.d.ts +9 -0
- package/dist/source-graph/ulid.d.ts.map +1 -0
- package/dist/source-graph/ulid.js +61 -0
- package/dist/source-graph/ulid.js.map +1 -0
- package/dist/telemetry/checkin.d.ts +66 -0
- package/dist/telemetry/checkin.d.ts.map +1 -0
- package/dist/telemetry/checkin.js +142 -0
- package/dist/telemetry/checkin.js.map +1 -0
- package/dist/telemetry/db.d.ts +34 -0
- package/dist/telemetry/db.d.ts.map +1 -0
- package/dist/telemetry/db.js +122 -0
- package/dist/telemetry/db.js.map +1 -0
- package/dist/telemetry/index.d.ts +76 -0
- package/dist/telemetry/index.d.ts.map +1 -0
- package/dist/telemetry/index.js +98 -0
- package/dist/telemetry/index.js.map +1 -0
- package/dist/telemetry/logs.d.ts +83 -0
- package/dist/telemetry/logs.d.ts.map +1 -0
- package/dist/telemetry/logs.js +110 -0
- package/dist/telemetry/logs.js.map +1 -0
- package/dist/telemetry/metrics.d.ts +82 -0
- package/dist/telemetry/metrics.d.ts.map +1 -0
- package/dist/telemetry/metrics.js +148 -0
- package/dist/telemetry/metrics.js.map +1 -0
- package/dist/telemetry-usage/emit.d.ts +105 -0
- package/dist/telemetry-usage/emit.d.ts.map +1 -0
- package/dist/telemetry-usage/emit.js +267 -0
- package/dist/telemetry-usage/emit.js.map +1 -0
- package/dist/telemetry-usage/posthog-key.d.ts +22 -0
- package/dist/telemetry-usage/posthog-key.d.ts.map +1 -0
- package/dist/telemetry-usage/posthog-key.js +22 -0
- package/dist/telemetry-usage/posthog-key.js.map +1 -0
- package/dist/worker.d.ts +69 -0
- package/dist/worker.d.ts.map +1 -0
- package/dist/worker.js +91 -0
- package/dist/worker.js.map +1 -0
- package/package.json +44 -0
|
@@ -0,0 +1,541 @@
|
|
|
1
|
+
import { DESCRIBE_STATUSES } from "./model.js";
|
|
2
|
+
import { HIVE_GRAPH_TABLE, HIVE_GRAPH_VERSIONS_TABLE } from "./schema.js";
|
|
3
|
+
import { HttpDeepLakeTransport, TransportError } from "./deeplake-transport.js";
|
|
4
|
+
import { isMissingTableError, withHeal } from "./deeplake-heal.js";
|
|
5
|
+
import { eLiteral, sLiteral, sqlFloat4Array, sqlIdent, sqlNum } from "./sql-guards.js";
|
|
6
|
+
const HIVE_GRAPH_TABLE_NAME = sqlIdent(HIVE_GRAPH_TABLE.name);
|
|
7
|
+
const HIVE_GRAPH_VERSIONS_TABLE_NAME = sqlIdent(HIVE_GRAPH_VERSIONS_TABLE.name);
|
|
8
|
+
function toStr(value) {
|
|
9
|
+
return typeof value === "string" ? value : String(value ?? "");
|
|
10
|
+
}
|
|
11
|
+
function toNum(value) {
|
|
12
|
+
const n = typeof value === "number" ? value : Number(value);
|
|
13
|
+
return Number.isFinite(n) ? n : 0;
|
|
14
|
+
}
|
|
15
|
+
function toDescribeStatus(value) {
|
|
16
|
+
if (typeof value === "string" && DESCRIBE_STATUSES.includes(value)) {
|
|
17
|
+
return value;
|
|
18
|
+
}
|
|
19
|
+
console.warn(`nectar hive-graph: invalid describe_status value from Deep Lake mapped to failed: ${JSON.stringify(value)}`);
|
|
20
|
+
return "failed";
|
|
21
|
+
}
|
|
22
|
+
function toEmbedding(value) {
|
|
23
|
+
if (!Array.isArray(value))
|
|
24
|
+
return null;
|
|
25
|
+
return value.map((v) => toNum(v));
|
|
26
|
+
}
|
|
27
|
+
function toConfidence(value) {
|
|
28
|
+
if (value === null || value === undefined)
|
|
29
|
+
return null;
|
|
30
|
+
const n = typeof value === "number" ? value : Number(value);
|
|
31
|
+
return Number.isFinite(n) ? n : null;
|
|
32
|
+
}
|
|
33
|
+
/** Map a raw `hive_graph` row into the domain `HiveGraphRow`. */
|
|
34
|
+
function toIdentityRow(row) {
|
|
35
|
+
return {
|
|
36
|
+
nectar: toStr(row.nectar),
|
|
37
|
+
kind: row.kind === "directory" ? "directory" : "file",
|
|
38
|
+
createdAt: toStr(row.created_at),
|
|
39
|
+
derivedFromNectar: toStr(row.derived_from_nectar),
|
|
40
|
+
forkContentHash: toStr(row.fork_content_hash),
|
|
41
|
+
orgId: toStr(row.org_id),
|
|
42
|
+
workspaceId: toStr(row.workspace_id),
|
|
43
|
+
projectId: toStr(row.project_id),
|
|
44
|
+
lastUpdateDate: toStr(row.last_update_date),
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
/** Map a raw `hive_graph_versions` row into the domain `HiveGraphVersionRow`. */
|
|
48
|
+
function toVersionRow(row) {
|
|
49
|
+
return {
|
|
50
|
+
nectar: toStr(row.nectar),
|
|
51
|
+
contentHash: toStr(row.content_hash),
|
|
52
|
+
seq: toNum(row.seq),
|
|
53
|
+
path: toStr(row.path),
|
|
54
|
+
filename: toStr(row.filename),
|
|
55
|
+
ext: toStr(row.ext),
|
|
56
|
+
sizeBytes: toNum(row.size_bytes),
|
|
57
|
+
mtimeObserved: toStr(row.mtime_observed),
|
|
58
|
+
title: toStr(row.title),
|
|
59
|
+
description: toStr(row.description),
|
|
60
|
+
concepts: toStr(row.concepts),
|
|
61
|
+
embedding: toEmbedding(row.embedding),
|
|
62
|
+
confidence: toConfidence(row.confidence),
|
|
63
|
+
fingerprint: typeof row.fingerprint === "string" ? row.fingerprint : null,
|
|
64
|
+
describedAt: toStr(row.described_at),
|
|
65
|
+
describeModel: toStr(row.describe_model),
|
|
66
|
+
embedModel: typeof row.embed_model === "string" ? row.embed_model : null,
|
|
67
|
+
describeStatus: toDescribeStatus(row.describe_status),
|
|
68
|
+
observedAt: toStr(row.observed_at),
|
|
69
|
+
orgId: toStr(row.org_id),
|
|
70
|
+
workspaceId: toStr(row.workspace_id),
|
|
71
|
+
projectId: toStr(row.project_id),
|
|
72
|
+
lastUpdateDate: toStr(row.last_update_date),
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Reduce a set of raw `hive_graph_versions` rows for ONE nectar to the one
|
|
77
|
+
* with the highest `seq` (client-side MAX(seq)), returning `undefined` for an
|
|
78
|
+
* empty set. This is the real "MAX(seq) selection" logic `nextSeq`,
|
|
79
|
+
* `latestVersion`, and `listLatestVersions` all share - it does not trust the
|
|
80
|
+
* Deep Lake backend to have already applied an `ORDER BY seq DESC LIMIT 1`
|
|
81
|
+
* correctly, since this same file documents (`touchIdentity`'s docblock,
|
|
82
|
+
* citing honeycomb `src/daemon/storage/catalog/tenancy.ts:475-489`) that this
|
|
83
|
+
* backend has known point-read/ordering quirks under load. Fetching every
|
|
84
|
+
* version row for a nectar and reducing here is a small, testable function
|
|
85
|
+
* instead of an opaque SQL clause, and a nectar's version history (one row
|
|
86
|
+
* per observed edit of a single file) is not expected to be large enough for
|
|
87
|
+
* the extra rows to matter.
|
|
88
|
+
*/
|
|
89
|
+
function reduceLatestVersion(rows) {
|
|
90
|
+
let latest;
|
|
91
|
+
for (const raw of rows) {
|
|
92
|
+
const version = toVersionRow(raw);
|
|
93
|
+
if (latest === undefined || version.seq > latest.seq)
|
|
94
|
+
latest = version;
|
|
95
|
+
}
|
|
96
|
+
return latest;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Reduce a set of raw `hive_graph_versions` rows for ONE nectar to the
|
|
100
|
+
* highest-seq row whose `describe_status` is `described`, returning `undefined`
|
|
101
|
+
* when the nectar has no described version. Shares the client-side MAX(seq)
|
|
102
|
+
* discipline of {@link reduceLatestVersion} (it does not trust an SQL
|
|
103
|
+
* `ORDER BY seq DESC LIMIT 1`, for the point-read/ordering-quirk reason that
|
|
104
|
+
* function documents); the `describe_status` filter is applied client-side too,
|
|
105
|
+
* so the same fetched row set feeds both reductions with no extra query.
|
|
106
|
+
*/
|
|
107
|
+
function reduceLatestDescribedVersion(rows) {
|
|
108
|
+
let latest;
|
|
109
|
+
for (const raw of rows) {
|
|
110
|
+
const version = toVersionRow(raw);
|
|
111
|
+
if (version.describeStatus !== "described")
|
|
112
|
+
continue;
|
|
113
|
+
if (latest === undefined || version.seq > latest.seq)
|
|
114
|
+
latest = version;
|
|
115
|
+
}
|
|
116
|
+
return latest;
|
|
117
|
+
}
|
|
118
|
+
/** Build the `INSERT INTO "hive_graph" (...) VALUES (...)` statement for one identity row. */
|
|
119
|
+
function buildInsertIdentitySql(row) {
|
|
120
|
+
const cols = [
|
|
121
|
+
"nectar",
|
|
122
|
+
"kind",
|
|
123
|
+
"created_at",
|
|
124
|
+
"derived_from_nectar",
|
|
125
|
+
"fork_content_hash",
|
|
126
|
+
"org_id",
|
|
127
|
+
"workspace_id",
|
|
128
|
+
"project_id",
|
|
129
|
+
"last_update_date",
|
|
130
|
+
];
|
|
131
|
+
const vals = [
|
|
132
|
+
sLiteral(row.nectar),
|
|
133
|
+
sLiteral(row.kind),
|
|
134
|
+
sLiteral(row.createdAt),
|
|
135
|
+
sLiteral(row.derivedFromNectar),
|
|
136
|
+
sLiteral(row.forkContentHash),
|
|
137
|
+
sLiteral(row.orgId),
|
|
138
|
+
sLiteral(row.workspaceId),
|
|
139
|
+
sLiteral(row.projectId),
|
|
140
|
+
sLiteral(row.lastUpdateDate),
|
|
141
|
+
];
|
|
142
|
+
return `INSERT INTO "${HIVE_GRAPH_TABLE_NAME}" (${cols.join(", ")}) VALUES (${vals.join(", ")})`;
|
|
143
|
+
}
|
|
144
|
+
/** Build the `INSERT INTO "hive_graph_versions" (...) VALUES (...)` statement for one version row. */
|
|
145
|
+
function buildInsertVersionSql(row) {
|
|
146
|
+
const cols = [
|
|
147
|
+
"nectar",
|
|
148
|
+
"content_hash",
|
|
149
|
+
"seq",
|
|
150
|
+
"path",
|
|
151
|
+
"filename",
|
|
152
|
+
"ext",
|
|
153
|
+
"size_bytes",
|
|
154
|
+
"mtime_observed",
|
|
155
|
+
"title",
|
|
156
|
+
"description",
|
|
157
|
+
"concepts",
|
|
158
|
+
"embedding",
|
|
159
|
+
"confidence",
|
|
160
|
+
"fingerprint",
|
|
161
|
+
"described_at",
|
|
162
|
+
"describe_model",
|
|
163
|
+
"embed_model",
|
|
164
|
+
"describe_status",
|
|
165
|
+
"observed_at",
|
|
166
|
+
"org_id",
|
|
167
|
+
"workspace_id",
|
|
168
|
+
"project_id",
|
|
169
|
+
"last_update_date",
|
|
170
|
+
];
|
|
171
|
+
const vals = [
|
|
172
|
+
sLiteral(row.nectar),
|
|
173
|
+
sLiteral(row.contentHash),
|
|
174
|
+
sqlNum(row.seq),
|
|
175
|
+
sLiteral(row.path),
|
|
176
|
+
sLiteral(row.filename),
|
|
177
|
+
sLiteral(row.ext),
|
|
178
|
+
sqlNum(row.sizeBytes),
|
|
179
|
+
sLiteral(row.mtimeObserved),
|
|
180
|
+
// Free-text fields may carry backslashes/newlines; use the E'...' form.
|
|
181
|
+
eLiteral(row.title),
|
|
182
|
+
eLiteral(row.description),
|
|
183
|
+
eLiteral(row.concepts),
|
|
184
|
+
row.embedding !== null ? sqlFloat4Array(row.embedding) : "NULL",
|
|
185
|
+
row.confidence !== null ? sqlNum(row.confidence) : "NULL",
|
|
186
|
+
row.fingerprint !== null ? sLiteral(row.fingerprint) : "NULL",
|
|
187
|
+
sLiteral(row.describedAt),
|
|
188
|
+
sLiteral(row.describeModel),
|
|
189
|
+
row.embedModel !== null && row.embedModel !== undefined ? sLiteral(row.embedModel) : "NULL",
|
|
190
|
+
sLiteral(row.describeStatus),
|
|
191
|
+
sLiteral(row.observedAt),
|
|
192
|
+
sLiteral(row.orgId),
|
|
193
|
+
sLiteral(row.workspaceId),
|
|
194
|
+
sLiteral(row.projectId),
|
|
195
|
+
sLiteral(row.lastUpdateDate),
|
|
196
|
+
];
|
|
197
|
+
return `INSERT INTO "${HIVE_GRAPH_VERSIONS_TABLE_NAME}" (${cols.join(", ")}) VALUES (${vals.join(", ")})`;
|
|
198
|
+
}
|
|
199
|
+
/** The `AND`-joined tenancy predicate (`org_id`/`workspace_id`/`project_id`), never omitting `project_id`. */
|
|
200
|
+
function tenancyPredicate(tenancy) {
|
|
201
|
+
return (`org_id = ${sLiteral(tenancy.orgId)} AND ` +
|
|
202
|
+
`workspace_id = ${sLiteral(tenancy.workspaceId)} AND ` +
|
|
203
|
+
`project_id = ${sLiteral(tenancy.projectId)}`);
|
|
204
|
+
}
|
|
205
|
+
export class DeepLakeHiveGraphStore {
|
|
206
|
+
transport;
|
|
207
|
+
/**
|
|
208
|
+
* Per-nectar append serialization (PRD-018g / NEC-011 AC-018g.3). Deep Lake has
|
|
209
|
+
* no transaction or unique constraint, so `nextSeq` + `appendVersion` as two
|
|
210
|
+
* statements is a read-then-write race: two concurrent writers can read the
|
|
211
|
+
* same MAX(seq) and both append `seq+1`. Chaining every seq-allocating append
|
|
212
|
+
* for a nectar through one promise makes the allocate-and-append pair atomic
|
|
213
|
+
* within THIS store instance, so no duplicate `(nectar, seq)` is produced by
|
|
214
|
+
* writers sharing the store.
|
|
215
|
+
*/
|
|
216
|
+
seqChains = new Map();
|
|
217
|
+
constructor(options) {
|
|
218
|
+
this.transport =
|
|
219
|
+
options.transport ??
|
|
220
|
+
new HttpDeepLakeTransport({
|
|
221
|
+
endpoint: options.credentials.apiUrl,
|
|
222
|
+
token: options.credentials.token,
|
|
223
|
+
orgId: options.credentials.orgId,
|
|
224
|
+
workspaceId: options.credentials.workspaceId,
|
|
225
|
+
...(options.timeoutMs !== undefined ? { timeoutMs: options.timeoutMs } : {}),
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Run a READ statement, tolerating a missing-table failure as "no data yet"
|
|
230
|
+
* (an empty result), exactly like honeycomb's read-path guard
|
|
231
|
+
* (`tableExists`, `src/daemon/storage/heal.ts:171-175`) fails OPEN rather
|
|
232
|
+
* than provoking a CREATE. Only the missing-table shape is tolerated; a
|
|
233
|
+
* genuine connection/timeout/permission/syntax failure still propagates.
|
|
234
|
+
* Reads never create a table - only a write does, via `withHeal`.
|
|
235
|
+
*/
|
|
236
|
+
async readTolerant(sql) {
|
|
237
|
+
try {
|
|
238
|
+
return await this.transport.query(sql);
|
|
239
|
+
}
|
|
240
|
+
catch (err) {
|
|
241
|
+
if (err instanceof TransportError && isMissingTableError(err))
|
|
242
|
+
return [];
|
|
243
|
+
throw err;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Insert-only mint, mirroring honeycomb's SELECT-before-INSERT write
|
|
248
|
+
* pattern (`selectBeforeInsert`, `src/daemon/storage/writes.ts:325-360`)
|
|
249
|
+
* rather than relying on a Deep Lake UNIQUE constraint: the Deep Lake SQL
|
|
250
|
+
* surface this adapter targets has no reliably-enforced uniqueness
|
|
251
|
+
* constraint to lean on, so "does the nectar already exist" is answered by
|
|
252
|
+
* probing first. Both the probe and the insert are heal-aware (a fresh
|
|
253
|
+
* tenancy's tables may not exist yet).
|
|
254
|
+
*
|
|
255
|
+
* After the insert, a best-effort re-verify SELECT counts the rows for the
|
|
256
|
+
* nectar; more than one means a race doubled it. Deep Lake offers no
|
|
257
|
+
* transactions, so this cannot PREVENT a race, only make it observable
|
|
258
|
+
* (the same limitation honeycomb documents). In practice a real race here
|
|
259
|
+
* is a near-zero-probability event - a nectar is a 26-char ULID with 80
|
|
260
|
+
* bits of randomness (`ulid.ts`), not a narrow key space two writers could
|
|
261
|
+
* plausibly collide on - so a failure of the re-verify SELECT itself
|
|
262
|
+
* (e.g. a transient network hiccup immediately after a successful insert)
|
|
263
|
+
* does not fail the whole call; the insert already succeeded and the
|
|
264
|
+
* re-verify is an observability nicety, not the source of truth.
|
|
265
|
+
*/
|
|
266
|
+
async insertIdentity(row) {
|
|
267
|
+
const probeSql = `SELECT nectar FROM "${HIVE_GRAPH_TABLE_NAME}" WHERE nectar = ${sLiteral(row.nectar)} LIMIT 1`;
|
|
268
|
+
const probeRows = await withHeal(this.transport, HIVE_GRAPH_TABLE, () => this.transport.query(probeSql));
|
|
269
|
+
if (probeRows.length > 0) {
|
|
270
|
+
throw new Error(`identity already exists for nectar ${row.nectar}`);
|
|
271
|
+
}
|
|
272
|
+
const insertSql = buildInsertIdentitySql(row);
|
|
273
|
+
await withHeal(this.transport, HIVE_GRAPH_TABLE, () => this.transport.query(insertSql));
|
|
274
|
+
const verifySql = `SELECT nectar FROM "${HIVE_GRAPH_TABLE_NAME}" WHERE nectar = ${sLiteral(row.nectar)}`;
|
|
275
|
+
const verifyRows = await this.transport.query(verifySql).catch(() => []);
|
|
276
|
+
if (verifyRows.length > 1) {
|
|
277
|
+
throw new Error(`race detected inserting identity for nectar ${row.nectar}: ${verifyRows.length} rows present after insert`);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
async getIdentity(nectar) {
|
|
281
|
+
const sql = `SELECT * FROM "${HIVE_GRAPH_TABLE_NAME}" WHERE nectar = ${sLiteral(nectar)} LIMIT 1`;
|
|
282
|
+
const rows = await this.readTolerant(sql);
|
|
283
|
+
return rows.length > 0 ? toIdentityRow(rows[0]) : undefined;
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Bump `last_update_date` via an in-place `UPDATE`.
|
|
287
|
+
*
|
|
288
|
+
* KNOWN CAVEAT: honeycomb's own operational history found that an in-place
|
|
289
|
+
* `UPDATE ... WHERE id = ...` does not reliably land on this backend under
|
|
290
|
+
* load - a by-id point read can still return a pre-update snapshot from a
|
|
291
|
+
* stale segment (see honeycomb `src/daemon/storage/catalog/tenancy.ts:475-489`,
|
|
292
|
+
* where the equivalent revoke-by-UPDATE was RETIRED in favor of an
|
|
293
|
+
* append-only version-bump for that reason). `hive_graph`'s catalog entry
|
|
294
|
+
* (`schema.ts`) nonetheless declares `writePattern: "update-or-insert"` for
|
|
295
|
+
* this exact field, and `last_update_date` is a low-stakes denormalized
|
|
296
|
+
* "last observed change" timestamp (not an authorization-bearing flag like
|
|
297
|
+
* the retired revoke), so this adapter uses `UPDATE` as declared rather than
|
|
298
|
+
* inventing an append-based scheme the schema does not define. If
|
|
299
|
+
* `last_update_date` staleness proves to be a real problem in practice, a
|
|
300
|
+
* future PRD should revisit this the same way honeycomb did - not this
|
|
301
|
+
* adapter, which mirrors the declared write pattern faithfully.
|
|
302
|
+
*/
|
|
303
|
+
async touchIdentity(nectar, lastUpdateDate) {
|
|
304
|
+
const sql = `UPDATE "${HIVE_GRAPH_TABLE_NAME}" SET last_update_date = ${sLiteral(lastUpdateDate)} ` +
|
|
305
|
+
`WHERE nectar = ${sLiteral(nectar)}`;
|
|
306
|
+
await withHeal(this.transport, HIVE_GRAPH_TABLE, () => this.transport.query(sql));
|
|
307
|
+
}
|
|
308
|
+
async appendVersion(row) {
|
|
309
|
+
const insertSql = buildInsertVersionSql(row);
|
|
310
|
+
await withHeal(this.transport, HIVE_GRAPH_VERSIONS_TABLE, () => this.transport.query(insertSql));
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Allocate the next monotonic seq for `row.nectar` and append `row` at it,
|
|
314
|
+
* atomically with respect to other seq-allocating appends for the SAME nectar
|
|
315
|
+
* through this store (PRD-018g AC-018g.3). Returns the seq actually written.
|
|
316
|
+
* `row.seq` is ignored; the store owns seq allocation here so the caller never
|
|
317
|
+
* hand-computes a colliding value. Non-seq appends (`appendVersion`) that a
|
|
318
|
+
* caller has already sequenced are unaffected.
|
|
319
|
+
*/
|
|
320
|
+
async appendVersionAtNextSeq(row) {
|
|
321
|
+
const nectar = row.nectar;
|
|
322
|
+
const prior = this.seqChains.get(nectar) ?? Promise.resolve();
|
|
323
|
+
const next = prior.then(() => this.allocateAndAppend(row), () => this.allocateAndAppend(row));
|
|
324
|
+
// Keep the chain alive but do not let a rejection poison the next link; the
|
|
325
|
+
// `.then(_, _)` above already recovers, and we clear the slot once settled.
|
|
326
|
+
this.seqChains.set(nectar, next.then(() => undefined, () => undefined));
|
|
327
|
+
try {
|
|
328
|
+
return await next;
|
|
329
|
+
}
|
|
330
|
+
finally {
|
|
331
|
+
// Best-effort GC: drop the chain slot when this was the last queued append.
|
|
332
|
+
const current = this.seqChains.get(nectar);
|
|
333
|
+
if (current !== undefined) {
|
|
334
|
+
void current.then(() => {
|
|
335
|
+
if (this.seqChains.get(nectar) === current)
|
|
336
|
+
this.seqChains.delete(nectar);
|
|
337
|
+
});
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
async allocateAndAppend(row) {
|
|
342
|
+
const seq = await this.nextSeq(row.nectar);
|
|
343
|
+
await this.appendVersion({ ...row, seq });
|
|
344
|
+
return seq;
|
|
345
|
+
}
|
|
346
|
+
/**
|
|
347
|
+
* The next monotonic seq for a nectar: MAX(seq)+1 over every version row,
|
|
348
|
+
* computed client-side by {@link reduceLatestVersion} rather than trusted
|
|
349
|
+
* to an SQL `ORDER BY`/`LIMIT`/`MAX()` clause. See that function's docblock
|
|
350
|
+
* for why.
|
|
351
|
+
*/
|
|
352
|
+
async nextSeq(nectar) {
|
|
353
|
+
const sql = `SELECT seq FROM "${HIVE_GRAPH_VERSIONS_TABLE_NAME}" WHERE nectar = ${sLiteral(nectar)}`;
|
|
354
|
+
const rows = await this.readTolerant(sql);
|
|
355
|
+
if (rows.length === 0)
|
|
356
|
+
return 0;
|
|
357
|
+
let maxSeq = toNum(rows[0]?.seq);
|
|
358
|
+
for (const row of rows) {
|
|
359
|
+
const seq = toNum(row.seq);
|
|
360
|
+
if (seq > maxSeq)
|
|
361
|
+
maxSeq = seq;
|
|
362
|
+
}
|
|
363
|
+
return maxSeq + 1;
|
|
364
|
+
}
|
|
365
|
+
/** The latest (MAX seq) version row for a nectar; see {@link reduceLatestVersion}. */
|
|
366
|
+
async latestVersion(nectar) {
|
|
367
|
+
const sql = `SELECT * FROM "${HIVE_GRAPH_VERSIONS_TABLE_NAME}" WHERE nectar = ${sLiteral(nectar)}`;
|
|
368
|
+
const rows = await this.readTolerant(sql);
|
|
369
|
+
return reduceLatestVersion(rows);
|
|
370
|
+
}
|
|
371
|
+
/**
|
|
372
|
+
* Every nectar's latest version, scoped by the full tenancy predicate
|
|
373
|
+
* (`org_id`/`workspace_id`/`project_id`, PRD-005c). Fetches every identity
|
|
374
|
+
* and every version row for the tenancy and reduces to "latest per nectar"
|
|
375
|
+
* in application code, mirroring `InMemoryHiveGraphStore.listLatestVersions`'s
|
|
376
|
+
* iterate-and-reduce shape rather than pushing a `GROUP BY`/window-function
|
|
377
|
+
* reduction into SQL. This is not optimized for a very large per-tenant
|
|
378
|
+
* row count; a future PRD could push the "latest per nectar" reduction into
|
|
379
|
+
* SQL if that becomes the bottleneck. It is not this adapter's job to
|
|
380
|
+
* diverge from the reference in-memory implementation's behavior to chase
|
|
381
|
+
* that optimization prematurely.
|
|
382
|
+
*/
|
|
383
|
+
async listLatestVersions(tenancy) {
|
|
384
|
+
const predicate = tenancyPredicate(tenancy);
|
|
385
|
+
const identitiesSql = `SELECT * FROM "${HIVE_GRAPH_TABLE_NAME}" WHERE ${predicate}`;
|
|
386
|
+
const versionsSql = `SELECT * FROM "${HIVE_GRAPH_VERSIONS_TABLE_NAME}" WHERE ${predicate}`;
|
|
387
|
+
const [identityRows, versionRows] = await Promise.all([
|
|
388
|
+
this.readTolerant(identitiesSql),
|
|
389
|
+
this.readTolerant(versionsSql),
|
|
390
|
+
]);
|
|
391
|
+
// Group raw version rows by nectar first, then reduce each group with the
|
|
392
|
+
// SAME `reduceLatestVersion` helper `nextSeq`/`latestVersion` use, so
|
|
393
|
+
// there is exactly one "pick the highest seq" implementation in this file.
|
|
394
|
+
const rowsByNectar = new Map();
|
|
395
|
+
for (const raw of versionRows) {
|
|
396
|
+
const nectar = toStr(raw.nectar);
|
|
397
|
+
const group = rowsByNectar.get(nectar);
|
|
398
|
+
if (group === undefined)
|
|
399
|
+
rowsByNectar.set(nectar, [raw]);
|
|
400
|
+
else
|
|
401
|
+
group.push(raw);
|
|
402
|
+
}
|
|
403
|
+
const out = [];
|
|
404
|
+
for (const raw of identityRows) {
|
|
405
|
+
const identity = toIdentityRow(raw);
|
|
406
|
+
const group = rowsByNectar.get(identity.nectar);
|
|
407
|
+
const version = group !== undefined ? reduceLatestVersion(group) : undefined;
|
|
408
|
+
if (version !== undefined)
|
|
409
|
+
out.push({ identity, version });
|
|
410
|
+
}
|
|
411
|
+
return out;
|
|
412
|
+
}
|
|
413
|
+
/**
|
|
414
|
+
* Every nectar's latest DESCRIBED version, scoped by the full tenancy
|
|
415
|
+
* predicate (PRD-011c's projection scan). Mirrors {@link listLatestVersions}'s
|
|
416
|
+
* two-SELECT-then-reduce-in-application-code shape, but reduces each nectar's
|
|
417
|
+
* version group with {@link reduceLatestDescribedVersion} and omits nectars
|
|
418
|
+
* that have no described version. The projection builder overlays this onto
|
|
419
|
+
* {@link listLatestVersions} so a minted-but-undescribed nectar still keeps a
|
|
420
|
+
* minimal entry.
|
|
421
|
+
*/
|
|
422
|
+
async listLatestDescribedVersions(tenancy) {
|
|
423
|
+
const predicate = tenancyPredicate(tenancy);
|
|
424
|
+
const identitiesSql = `SELECT * FROM "${HIVE_GRAPH_TABLE_NAME}" WHERE ${predicate}`;
|
|
425
|
+
const versionsSql = `SELECT * FROM "${HIVE_GRAPH_VERSIONS_TABLE_NAME}" WHERE ${predicate}`;
|
|
426
|
+
const [identityRows, versionRows] = await Promise.all([
|
|
427
|
+
this.readTolerant(identitiesSql),
|
|
428
|
+
this.readTolerant(versionsSql),
|
|
429
|
+
]);
|
|
430
|
+
const rowsByNectar = new Map();
|
|
431
|
+
for (const raw of versionRows) {
|
|
432
|
+
const nectar = toStr(raw.nectar);
|
|
433
|
+
const group = rowsByNectar.get(nectar);
|
|
434
|
+
if (group === undefined)
|
|
435
|
+
rowsByNectar.set(nectar, [raw]);
|
|
436
|
+
else
|
|
437
|
+
group.push(raw);
|
|
438
|
+
}
|
|
439
|
+
const out = [];
|
|
440
|
+
for (const raw of identityRows) {
|
|
441
|
+
const identity = toIdentityRow(raw);
|
|
442
|
+
const group = rowsByNectar.get(identity.nectar);
|
|
443
|
+
const version = group !== undefined ? reduceLatestDescribedVersion(group) : undefined;
|
|
444
|
+
if (version !== undefined)
|
|
445
|
+
out.push({ identity, version });
|
|
446
|
+
}
|
|
447
|
+
return out;
|
|
448
|
+
}
|
|
449
|
+
async latestVersionByPath(tenancy, path) {
|
|
450
|
+
return this.latestVersionByColumn(tenancy, "path", path, (v) => v.path === path);
|
|
451
|
+
}
|
|
452
|
+
async latestVersionByHash(tenancy, contentHash) {
|
|
453
|
+
return this.latestVersionByColumn(tenancy, "content_hash", contentHash, (v) => v.contentHash === contentHash);
|
|
454
|
+
}
|
|
455
|
+
/**
|
|
456
|
+
* By-path / by-hash lookup with predicate pushdown (NEC-042 item 8 /
|
|
457
|
+
* AC-018l.15). The pre-fix path called {@link listLatestVersions}, which
|
|
458
|
+
* scans the ENTIRE tenancy (all identities + all version rows) per probe -
|
|
459
|
+
* O(all rows) on what becomes a per-file-event hot path. Instead:
|
|
460
|
+
*
|
|
461
|
+
* 1. push the column predicate down (`WHERE path = ...` / `WHERE
|
|
462
|
+
* content_hash = ...`) to find only the candidate nectars that ever
|
|
463
|
+
* carried the value;
|
|
464
|
+
* 2. fetch the full history for JUST those candidates and reduce
|
|
465
|
+
* latest-per-nectar client-side with the shared {@link reduceLatestVersion}
|
|
466
|
+
* MAX(seq) helper (the client-side reduction is kept, not trusted to an
|
|
467
|
+
* SQL ORDER BY, matching the rest of this adapter);
|
|
468
|
+
* 3. return the nectar whose LATEST version satisfies the predicate, which
|
|
469
|
+
* preserves the reference `listLatestVersions().find` semantics (a nectar
|
|
470
|
+
* renamed AWAY from the path is not a false positive).
|
|
471
|
+
*/
|
|
472
|
+
async latestVersionByColumn(tenancy, column, value, matches) {
|
|
473
|
+
const predicate = tenancyPredicate(tenancy);
|
|
474
|
+
const candidateSql = `SELECT nectar FROM "${HIVE_GRAPH_VERSIONS_TABLE_NAME}" ` +
|
|
475
|
+
`WHERE ${sqlIdent(column)} = ${sLiteral(value)} AND ${predicate}`;
|
|
476
|
+
const candidateRows = await this.readTolerant(candidateSql);
|
|
477
|
+
const nectars = [...new Set(candidateRows.map((r) => toStr(r.nectar)).filter((n) => n !== ""))];
|
|
478
|
+
if (nectars.length === 0)
|
|
479
|
+
return undefined;
|
|
480
|
+
const inList = nectars.map((n) => sLiteral(n)).join(", ");
|
|
481
|
+
const versionsSql = `SELECT * FROM "${HIVE_GRAPH_VERSIONS_TABLE_NAME}" WHERE nectar IN (${inList}) AND ${predicate}`;
|
|
482
|
+
const versionRows = await this.readTolerant(versionsSql);
|
|
483
|
+
const rowsByNectar = new Map();
|
|
484
|
+
for (const raw of versionRows) {
|
|
485
|
+
const nectar = toStr(raw.nectar);
|
|
486
|
+
const group = rowsByNectar.get(nectar);
|
|
487
|
+
if (group === undefined)
|
|
488
|
+
rowsByNectar.set(nectar, [raw]);
|
|
489
|
+
else
|
|
490
|
+
group.push(raw);
|
|
491
|
+
}
|
|
492
|
+
for (const nectar of nectars) {
|
|
493
|
+
const latest = reduceLatestVersion(rowsByNectar.get(nectar) ?? []);
|
|
494
|
+
if (latest === undefined || !matches(latest))
|
|
495
|
+
continue;
|
|
496
|
+
const identitySql = `SELECT * FROM "${HIVE_GRAPH_TABLE_NAME}" WHERE nectar = ${sLiteral(nectar)} AND ${predicate}`;
|
|
497
|
+
const identityRows = await this.readTolerant(identitySql);
|
|
498
|
+
const identityRaw = identityRows[0];
|
|
499
|
+
if (identityRaw === undefined)
|
|
500
|
+
continue;
|
|
501
|
+
return { identity: toIdentityRow(identityRaw), version: latest };
|
|
502
|
+
}
|
|
503
|
+
return undefined;
|
|
504
|
+
}
|
|
505
|
+
/**
|
|
506
|
+
* Delete a nectar (identity + versions) scoped to `tenancy`, the SOLE deletion
|
|
507
|
+
* path (`prune --confirm`, PRD-006d). Both DELETE statements carry the full
|
|
508
|
+
* tenancy predicate (`org_id`/`workspace_id`/`project_id`, never omitting
|
|
509
|
+
* `project_id`) alongside the nectar key, so a nectar minted under another
|
|
510
|
+
* project is never removed by a delete issued in this tenancy (AC-20).
|
|
511
|
+
*
|
|
512
|
+
* The delete path deliberately does NOT go through `withHeal`: a missing table
|
|
513
|
+
* means there is nothing to delete, so it is a harmless no-op, NOT a reason to
|
|
514
|
+
* CREATE a fresh (empty) table. `deleteTolerant` therefore swallows only the
|
|
515
|
+
* missing-table transport error (via `isMissingTableError`, the same
|
|
516
|
+
* classification the read path uses) and lets every other failure propagate.
|
|
517
|
+
*/
|
|
518
|
+
async deleteNectar(tenancy, nectar) {
|
|
519
|
+
const predicate = tenancyPredicate(tenancy);
|
|
520
|
+
const nectarKey = sLiteral(nectar);
|
|
521
|
+
const deleteVersionsSql = `DELETE FROM "${HIVE_GRAPH_VERSIONS_TABLE_NAME}" WHERE nectar = ${nectarKey} AND ${predicate}`;
|
|
522
|
+
const deleteIdentitySql = `DELETE FROM "${HIVE_GRAPH_TABLE_NAME}" WHERE nectar = ${nectarKey} AND ${predicate}`;
|
|
523
|
+
await this.deleteTolerant(deleteVersionsSql);
|
|
524
|
+
await this.deleteTolerant(deleteIdentitySql);
|
|
525
|
+
}
|
|
526
|
+
/**
|
|
527
|
+
* Run a DELETE, tolerating a missing-table failure as "nothing to delete" (a
|
|
528
|
+
* no-op). Never creates a table. Any other transport failure propagates.
|
|
529
|
+
*/
|
|
530
|
+
async deleteTolerant(sql) {
|
|
531
|
+
try {
|
|
532
|
+
await this.transport.query(sql);
|
|
533
|
+
}
|
|
534
|
+
catch (err) {
|
|
535
|
+
if (err instanceof TransportError && isMissingTableError(err))
|
|
536
|
+
return;
|
|
537
|
+
throw err;
|
|
538
|
+
}
|
|
539
|
+
}
|
|
540
|
+
}
|
|
541
|
+
//# sourceMappingURL=deeplake-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deeplake-store.js","sourceRoot":"","sources":["../../src/hive-graph/deeplake-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimal Deep Lake HTTP transport for nectar (PRD-005).
|
|
3
|
+
*
|
|
4
|
+
* Per ADR-0002, nectar is an independent daemon that reaches Deep Lake
|
|
5
|
+
* over the network through its OWN client, never by importing the honeycomb
|
|
6
|
+
* runtime in-process. This module mirrors the shape of honeycomb's
|
|
7
|
+
* `HttpDeepLakeTransport` (`src/daemon/storage/transport.ts`), scoped down to
|
|
8
|
+
* exactly what the two hive-graph tables need: one method that posts a SQL
|
|
9
|
+
* statement to the Deep Lake query endpoint and returns rows, or throws a
|
|
10
|
+
* typed `TransportError`.
|
|
11
|
+
*
|
|
12
|
+
* Node built-ins only (`fetch` is global on Node >=22); no new runtime
|
|
13
|
+
* dependency, matching nectar's zero-runtime-dependency rule (AGENTS.md).
|
|
14
|
+
*
|
|
15
|
+
* The transport is deliberately thin: no retry, no concurrency bounding.
|
|
16
|
+
* Nectar's write volume (one file-registration event at a time, from a
|
|
17
|
+
* single daemon worker loop per `worker.ts`) does not need honeycomb's
|
|
18
|
+
* `Semaphore(5)` + 429/5xx retry client layer that exists to bound a
|
|
19
|
+
* high-concurrency multi-harness workload; a future PRD can add that layer
|
|
20
|
+
* here without changing this transport's contract if nectar's write
|
|
21
|
+
* volume grows to need it.
|
|
22
|
+
*/
|
|
23
|
+
/** What kind of failure the transport hit. */
|
|
24
|
+
export type TransportErrorKind = "query" | "connection" | "timeout";
|
|
25
|
+
/**
|
|
26
|
+
* A typed failure raised by {@link HttpDeepLakeTransport}. `status` carries
|
|
27
|
+
* the HTTP status for query failures (e.g. 404, 500) so heal logic
|
|
28
|
+
* (`deeplake-heal.ts`) can classify the failure message.
|
|
29
|
+
*/
|
|
30
|
+
export declare class TransportError extends Error {
|
|
31
|
+
readonly kind: TransportErrorKind;
|
|
32
|
+
readonly status?: number;
|
|
33
|
+
constructor(kind: TransportErrorKind, message: string, status?: number);
|
|
34
|
+
}
|
|
35
|
+
/** One row of a Deep Lake query result: column name -> raw JSON value. */
|
|
36
|
+
export type DeepLakeRow = Record<string, unknown>;
|
|
37
|
+
/** Header name Deep Lake reads to attribute traffic by client family. */
|
|
38
|
+
export declare const DEEPLAKE_CLIENT_HEADER = "X-Deeplake-Client";
|
|
39
|
+
/** Header name Deep Lake reads to scope a request to an org partition. */
|
|
40
|
+
export declare const DEEPLAKE_ORG_HEADER = "X-Activeloop-Org-Id";
|
|
41
|
+
/** Default per-statement timeout when the caller does not override it. */
|
|
42
|
+
export declare const DEFAULT_TRANSPORT_TIMEOUT_MS = 15000;
|
|
43
|
+
/** Fixed connection details a transport instance targets for its lifetime. */
|
|
44
|
+
export interface DeepLakeTransportConfig {
|
|
45
|
+
/** Deep Lake HTTP query endpoint, e.g. https://api.deeplake.ai. */
|
|
46
|
+
readonly endpoint: string;
|
|
47
|
+
/** Bearer token. Never logged in full; see `deeplake-credentials.ts#redactToken`. */
|
|
48
|
+
readonly token: string;
|
|
49
|
+
/** Org id sent as a request header so Deep Lake enforces tenancy. */
|
|
50
|
+
readonly orgId: string;
|
|
51
|
+
/** Workspace/partition the statement targets (the URL path segment). */
|
|
52
|
+
readonly workspaceId: string;
|
|
53
|
+
/** Per-statement timeout in ms; defaults to {@link DEFAULT_TRANSPORT_TIMEOUT_MS}. */
|
|
54
|
+
readonly timeoutMs?: number;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Real HTTP transport against the Deep Lake SQL endpoint. POSTs
|
|
58
|
+
* `{ query: sql }` to `${endpoint}/workspaces/${workspaceId}/tables/query`
|
|
59
|
+
* with a bearer token, the org header, and a client-family header, exactly
|
|
60
|
+
* mirroring honeycomb's `HttpDeepLakeTransport.query` shape. Maps a fetch
|
|
61
|
+
* failure / abort / non-ok response into a typed `TransportError` the heal
|
|
62
|
+
* logic and the store can branch on.
|
|
63
|
+
*/
|
|
64
|
+
export declare class HttpDeepLakeTransport {
|
|
65
|
+
private readonly endpoint;
|
|
66
|
+
private readonly token;
|
|
67
|
+
private readonly orgId;
|
|
68
|
+
private readonly workspaceId;
|
|
69
|
+
private readonly timeoutMs;
|
|
70
|
+
constructor(config: DeepLakeTransportConfig);
|
|
71
|
+
/**
|
|
72
|
+
* Run one SQL statement against the configured workspace.
|
|
73
|
+
*
|
|
74
|
+
* Transient failures (HTTP 429 and 5xx, e.g. the backend's intermittent
|
|
75
|
+
* 'failed to get database connection' 500) are retried with bounded
|
|
76
|
+
* exponential backoff plus jitter before the TransportError propagates:
|
|
77
|
+
* a single upstream blip must not abort a minutes-long brood or an
|
|
78
|
+
* enricher cycle. Non-transient failures (4xx other than 429: schema
|
|
79
|
+
* errors, bad SQL, auth) fail fast on the first attempt so heal and
|
|
80
|
+
* fail-soft classification see them unchanged.
|
|
81
|
+
*/
|
|
82
|
+
query(sql: string): Promise<DeepLakeRow[]>;
|
|
83
|
+
private queryOnce;
|
|
84
|
+
}
|
|
85
|
+
/** Bounded attempts for transient (429/5xx) query failures. */
|
|
86
|
+
export declare const QUERY_TRANSIENT_MAX_ATTEMPTS = 4;
|
|
87
|
+
/** First-retry backoff; doubles per attempt, with up-to-equal jitter added. */
|
|
88
|
+
export declare const QUERY_TRANSIENT_BASE_BACKOFF_MS = 500;
|
|
89
|
+
//# sourceMappingURL=deeplake-transport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deeplake-transport.d.ts","sourceRoot":"","sources":["../../src/hive-graph/deeplake-transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,8CAA8C;AAC9C,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,YAAY,GAAG,SAAS,CAAC;AAEpE;;;;GAIG;AACH,qBAAa,cAAe,SAAQ,KAAK;IACvC,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;gBACb,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;CAMvE;AAED,0EAA0E;AAC1E,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAElD,yEAAyE;AACzE,eAAO,MAAM,sBAAsB,sBAAsB,CAAC;AAC1D,0EAA0E;AAC1E,eAAO,MAAM,mBAAmB,wBAAwB,CAAC;AACzD,0EAA0E;AAC1E,eAAO,MAAM,4BAA4B,QAAS,CAAC;AAEnD,8EAA8E;AAC9E,MAAM,WAAW,uBAAuB;IACtC,mEAAmE;IACnE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,qFAAqF;IACrF,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,qEAAqE;IACrE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,wEAAwE;IACxE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,qFAAqF;IACrF,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;;GAOG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBAEvB,MAAM,EAAE,uBAAuB;IAQ3C;;;;;;;;;;OAUG;IACG,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;YA0BlC,SAAS;CAoCxB;AAED,+DAA+D;AAC/D,eAAO,MAAM,4BAA4B,IAAI,CAAC;AAC9C,+EAA+E;AAC/E,eAAO,MAAM,+BAA+B,MAAM,CAAC"}
|