dotdo 0.0.1 → 0.1.0
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 +1 -1
- package/README.md +446 -315
- package/cli/README.md +238 -0
- package/cli/agent.ts +72 -0
- package/cli/bin.js +44 -0
- package/cli/bin.ts +38 -0
- package/cli/build.ts +157 -0
- package/cli/commands/auth/login.ts +14 -0
- package/cli/commands/auth/logout.ts +6 -0
- package/cli/commands/auth/whoami.ts +16 -0
- package/cli/commands/deploy-multi.ts +245 -0
- package/cli/commands/dev/deploy.ts +100 -0
- package/cli/commands/dev/dev.ts +95 -0
- package/cli/commands/dev/logs.ts +91 -0
- package/cli/commands/dev-local.ts +88 -0
- package/cli/commands/do-ops.ts +314 -0
- package/cli/commands/index.ts +100 -0
- package/cli/commands/init.ts +247 -0
- package/cli/commands/introspect/emitter.ts +315 -0
- package/cli/commands/introspect/index.ts +193 -0
- package/cli/commands/link.ts +598 -0
- package/cli/commands/snippets.ts +415 -0
- package/cli/commands/tunnel.ts +239 -0
- package/cli/device-auth.ts +289 -0
- package/cli/fallback.ts +12 -0
- package/cli/index.ts +121 -0
- package/cli/main.ts +246 -0
- package/cli/mcp-stdio.ts +790 -0
- package/cli/package.json +62 -0
- package/cli/runtime/do-registry.ts +193 -0
- package/cli/runtime/embedded-db.ts +344 -0
- package/cli/runtime/index.ts +9 -0
- package/cli/runtime/miniflare-adapter.ts +162 -0
- package/cli/sandbox.ts +82 -0
- package/cli/src/args.ts +174 -0
- package/cli/src/auth.ts +55 -0
- package/cli/src/commands/call.ts +84 -0
- package/cli/src/commands/charge.ts +96 -0
- package/cli/src/commands/config.ts +115 -0
- package/cli/src/commands/email.ts +112 -0
- package/cli/src/commands/llm.ts +115 -0
- package/cli/src/commands/queue.ts +134 -0
- package/cli/src/commands/text.ts +86 -0
- package/cli/src/config.ts +185 -0
- package/cli/src/output.ts +246 -0
- package/cli/src/rpc.ts +192 -0
- package/cli/utils/config.ts +282 -0
- package/cli/utils/detect.ts +73 -0
- package/cli/utils/index.ts +15 -0
- package/cli/utils/logger.ts +232 -0
- package/dist/ai/index.js +19 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/ai/template-literals.js +852 -0
- package/dist/ai/template-literals.js.map +1 -0
- package/dist/api/middleware/auth-federation.js +573 -0
- package/dist/api/middleware/auth-federation.js.map +1 -0
- package/dist/api/middleware/auth.js +545 -0
- package/dist/api/middleware/auth.js.map +1 -0
- package/dist/db/actions.js +212 -0
- package/dist/db/actions.js.map +1 -0
- package/dist/db/auth.js +506 -0
- package/dist/db/auth.js.map +1 -0
- package/dist/db/branches.js +65 -0
- package/dist/db/branches.js.map +1 -0
- package/dist/db/clickhouse.js +1074 -0
- package/dist/db/clickhouse.js.map +1 -0
- package/dist/db/dlq.js +39 -0
- package/dist/db/dlq.js.map +1 -0
- package/dist/db/events.js +28 -0
- package/dist/db/events.js.map +1 -0
- package/dist/db/exec.js +64 -0
- package/dist/db/exec.js.map +1 -0
- package/dist/db/files.js +85 -0
- package/dist/db/files.js.map +1 -0
- package/dist/db/flags.js +24 -0
- package/dist/db/flags.js.map +1 -0
- package/dist/db/git.js +116 -0
- package/dist/db/git.js.map +1 -0
- package/dist/db/iceberg/inverted-index.js +862 -0
- package/dist/db/iceberg/inverted-index.js.map +1 -0
- package/dist/db/iceberg/puffin.js +878 -0
- package/dist/db/iceberg/puffin.js.map +1 -0
- package/dist/db/iceberg/search-manifest.js +422 -0
- package/dist/db/iceberg/search-manifest.js.map +1 -0
- package/dist/db/iceberg/types.js +8 -0
- package/dist/db/iceberg/types.js.map +1 -0
- package/dist/db/index.js +121 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/integrations.js +368 -0
- package/dist/db/integrations.js.map +1 -0
- package/dist/db/json-indexes.js +332 -0
- package/dist/db/json-indexes.js.map +1 -0
- package/dist/db/linked-accounts.js +287 -0
- package/dist/db/linked-accounts.js.map +1 -0
- package/dist/db/nouns.js +183 -0
- package/dist/db/nouns.js.map +1 -0
- package/dist/db/objects.js +170 -0
- package/dist/db/objects.js.map +1 -0
- package/dist/db/primitives/dag-scheduler/index.js +869 -0
- package/dist/db/primitives/dag-scheduler/index.js.map +1 -0
- package/dist/db/primitives/exactly-once-context.js +237 -0
- package/dist/db/primitives/exactly-once-context.js.map +1 -0
- package/dist/db/primitives/index.js +62 -0
- package/dist/db/primitives/index.js.map +1 -0
- package/dist/db/primitives/keyed-router.js +145 -0
- package/dist/db/primitives/keyed-router.js.map +1 -0
- package/dist/db/primitives/observability.js +162 -0
- package/dist/db/primitives/observability.js.map +1 -0
- package/dist/db/primitives/schema-evolution.js +643 -0
- package/dist/db/primitives/schema-evolution.js.map +1 -0
- package/dist/db/primitives/stateful-operator/index.js +770 -0
- package/dist/db/primitives/stateful-operator/index.js.map +1 -0
- package/dist/db/primitives/temporal-store.js +306 -0
- package/dist/db/primitives/temporal-store.js.map +1 -0
- package/dist/db/primitives/typed-column-store.js +1229 -0
- package/dist/db/primitives/typed-column-store.js.map +1 -0
- package/dist/db/primitives/utils/duration.js +162 -0
- package/dist/db/primitives/utils/duration.js.map +1 -0
- package/dist/db/primitives/utils/murmur3.js +116 -0
- package/dist/db/primitives/utils/murmur3.js.map +1 -0
- package/dist/db/primitives/watermark-service.js +136 -0
- package/dist/db/primitives/watermark-service.js.map +1 -0
- package/dist/db/primitives/window-manager.js +764 -0
- package/dist/db/primitives/window-manager.js.map +1 -0
- package/dist/db/relationships.js +66 -0
- package/dist/db/relationships.js.map +1 -0
- package/dist/db/schema-minimal.js +61 -0
- package/dist/db/schema-minimal.js.map +1 -0
- package/dist/db/search.js +28 -0
- package/dist/db/search.js.map +1 -0
- package/dist/db/stores.js +1665 -0
- package/dist/db/stores.js.map +1 -0
- package/dist/db/things.js +297 -0
- package/dist/db/things.js.map +1 -0
- package/dist/db/vault.js +171 -0
- package/dist/db/vault.js.map +1 -0
- package/dist/db/verbs.js +102 -0
- package/dist/db/verbs.js.map +1 -0
- package/dist/do/base.js +48 -0
- package/dist/do/base.js.map +1 -0
- package/dist/do/tiny.js +31 -0
- package/dist/do/tiny.js.map +1 -0
- package/dist/lib/DOAuth.js +261 -0
- package/dist/lib/DOAuth.js.map +1 -0
- package/dist/lib/DODispatcher.js +72 -0
- package/dist/lib/DODispatcher.js.map +1 -0
- package/dist/lib/Modifier.js +189 -0
- package/dist/lib/Modifier.js.map +1 -0
- package/dist/lib/StateStorage.js +403 -0
- package/dist/lib/StateStorage.js.map +1 -0
- package/dist/lib/TypeRegistry.js +122 -0
- package/dist/lib/TypeRegistry.js.map +1 -0
- package/dist/lib/ai/gateway.js +247 -0
- package/dist/lib/ai/gateway.js.map +1 -0
- package/dist/lib/ai/tool-loop-agent.js +591 -0
- package/dist/lib/ai/tool-loop-agent.js.map +1 -0
- package/dist/lib/auto-wiring.js +439 -0
- package/dist/lib/auto-wiring.js.map +1 -0
- package/dist/lib/browse/browserbase.js +163 -0
- package/dist/lib/browse/browserbase.js.map +1 -0
- package/dist/lib/browse/cloudflare.js +144 -0
- package/dist/lib/browse/cloudflare.js.map +1 -0
- package/dist/lib/browse/index.js +62 -0
- package/dist/lib/browse/index.js.map +1 -0
- package/dist/lib/browse/types.js +13 -0
- package/dist/lib/browse/types.js.map +1 -0
- package/dist/lib/cache/index.js +37 -0
- package/dist/lib/cache/index.js.map +1 -0
- package/dist/lib/cache/visibility.js +638 -0
- package/dist/lib/cache/visibility.js.map +1 -0
- package/dist/lib/capabilities.js +268 -0
- package/dist/lib/capabilities.js.map +1 -0
- package/dist/lib/channels/base.js +106 -0
- package/dist/lib/channels/base.js.map +1 -0
- package/dist/lib/channels/discord.js +94 -0
- package/dist/lib/channels/discord.js.map +1 -0
- package/dist/lib/channels/email.js +204 -0
- package/dist/lib/channels/email.js.map +1 -0
- package/dist/lib/channels/index.js +90 -0
- package/dist/lib/channels/index.js.map +1 -0
- package/dist/lib/channels/mdxui-chat.js +95 -0
- package/dist/lib/channels/mdxui-chat.js.map +1 -0
- package/dist/lib/channels/slack-blockkit.js +121 -0
- package/dist/lib/channels/slack-blockkit.js.map +1 -0
- package/dist/lib/channels/types.js +7 -0
- package/dist/lib/channels/types.js.map +1 -0
- package/dist/lib/cloudflare/ai.js +654 -0
- package/dist/lib/cloudflare/ai.js.map +1 -0
- package/dist/lib/cloudflare/index.js +88 -0
- package/dist/lib/cloudflare/index.js.map +1 -0
- package/dist/lib/cloudflare/kv.js +342 -0
- package/dist/lib/cloudflare/kv.js.map +1 -0
- package/dist/lib/cloudflare/queues.js +434 -0
- package/dist/lib/cloudflare/queues.js.map +1 -0
- package/dist/lib/cloudflare/r2.js +604 -0
- package/dist/lib/cloudflare/r2.js.map +1 -0
- package/dist/lib/cloudflare/vectorize.js +494 -0
- package/dist/lib/cloudflare/vectorize.js.map +1 -0
- package/dist/lib/cloudflare/workflows.js +569 -0
- package/dist/lib/cloudflare/workflows.js.map +1 -0
- package/dist/lib/colo/caching.js +196 -0
- package/dist/lib/colo/caching.js.map +1 -0
- package/dist/lib/colo/detection.js +194 -0
- package/dist/lib/colo/detection.js.map +1 -0
- package/dist/lib/colo/external-data.js +219 -0
- package/dist/lib/colo/external-data.js.map +1 -0
- package/dist/lib/colo/globe-data.js +179 -0
- package/dist/lib/colo/globe-data.js.map +1 -0
- package/dist/lib/colo/index.js +16 -0
- package/dist/lib/colo/index.js.map +1 -0
- package/dist/lib/decorators.js +37 -0
- package/dist/lib/decorators.js.map +1 -0
- package/dist/lib/discovery.js +81 -0
- package/dist/lib/discovery.js.map +1 -0
- package/dist/lib/executors/AgenticFunctionExecutor.js +619 -0
- package/dist/lib/executors/AgenticFunctionExecutor.js.map +1 -0
- package/dist/lib/executors/BaseFunctionExecutor.js +328 -0
- package/dist/lib/executors/BaseFunctionExecutor.js.map +1 -0
- package/dist/lib/executors/CascadeExecutor.js +418 -0
- package/dist/lib/executors/CascadeExecutor.js.map +1 -0
- package/dist/lib/executors/CodeFunctionExecutor.js +904 -0
- package/dist/lib/executors/CodeFunctionExecutor.js.map +1 -0
- package/dist/lib/executors/GenerativeFunctionExecutor.js +904 -0
- package/dist/lib/executors/GenerativeFunctionExecutor.js.map +1 -0
- package/dist/lib/executors/HumanFunctionExecutor.js +884 -0
- package/dist/lib/executors/HumanFunctionExecutor.js.map +1 -0
- package/dist/lib/executors/ParallelStepExecutor.js +308 -0
- package/dist/lib/executors/ParallelStepExecutor.js.map +1 -0
- package/dist/lib/executors/types.js +12 -0
- package/dist/lib/executors/types.js.map +1 -0
- package/dist/lib/experiments.js +89 -0
- package/dist/lib/experiments.js.map +1 -0
- package/dist/lib/flags/store.js +262 -0
- package/dist/lib/flags/store.js.map +1 -0
- package/dist/lib/functions/FunctionComposition.js +467 -0
- package/dist/lib/functions/FunctionComposition.js.map +1 -0
- package/dist/lib/functions/FunctionMiddleware.js +457 -0
- package/dist/lib/functions/FunctionMiddleware.js.map +1 -0
- package/dist/lib/functions/FunctionRegistry.js +426 -0
- package/dist/lib/functions/FunctionRegistry.js.map +1 -0
- package/dist/lib/functions/createFunction.js +1048 -0
- package/dist/lib/functions/createFunction.js.map +1 -0
- package/dist/lib/humans/index.js +68 -0
- package/dist/lib/humans/index.js.map +1 -0
- package/dist/lib/humans/templates.js +117 -0
- package/dist/lib/humans/templates.js.map +1 -0
- package/dist/lib/identity.js +98 -0
- package/dist/lib/identity.js.map +1 -0
- package/dist/lib/index.js +9 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/logging/error-logger.js +163 -0
- package/dist/lib/logging/error-logger.js.map +1 -0
- package/dist/lib/logging/index.js +160 -0
- package/dist/lib/logging/index.js.map +1 -0
- package/dist/lib/mixins/bash.js +753 -0
- package/dist/lib/mixins/bash.js.map +1 -0
- package/dist/lib/mixins/fs.js +648 -0
- package/dist/lib/mixins/fs.js.map +1 -0
- package/dist/lib/mixins/git.js +1006 -0
- package/dist/lib/mixins/git.js.map +1 -0
- package/dist/lib/mixins/npm.js +662 -0
- package/dist/lib/mixins/npm.js.map +1 -0
- package/dist/lib/noun-id.js +278 -0
- package/dist/lib/noun-id.js.map +1 -0
- package/dist/lib/rate-limit/sliding-window.js +148 -0
- package/dist/lib/rate-limit/sliding-window.js.map +1 -0
- package/dist/lib/rate-limit.js +110 -0
- package/dist/lib/rate-limit.js.map +1 -0
- package/dist/lib/rpc/bindings.js +548 -0
- package/dist/lib/rpc/bindings.js.map +1 -0
- package/dist/lib/rpc/index.js +64 -0
- package/dist/lib/rpc/index.js.map +1 -0
- package/dist/lib/safe-stringify.js +223 -0
- package/dist/lib/safe-stringify.js.map +1 -0
- package/dist/lib/sandbox/miniflare-sandbox.js +1007 -0
- package/dist/lib/sandbox/miniflare-sandbox.js.map +1 -0
- package/dist/lib/sqids.js +110 -0
- package/dist/lib/sqids.js.map +1 -0
- package/dist/lib/sql/adapters/index.js +10 -0
- package/dist/lib/sql/adapters/index.js.map +1 -0
- package/dist/lib/sql/adapters/node-sql-parser.js +552 -0
- package/dist/lib/sql/adapters/node-sql-parser.js.map +1 -0
- package/dist/lib/sql/adapters/pgsql-parser.js +1190 -0
- package/dist/lib/sql/adapters/pgsql-parser.js.map +1 -0
- package/dist/lib/sql/index.js +277 -0
- package/dist/lib/sql/index.js.map +1 -0
- package/dist/lib/sql/types.js +56 -0
- package/dist/lib/sql/types.js.map +1 -0
- package/dist/lib/type-classifier.js +126 -0
- package/dist/lib/type-classifier.js.map +1 -0
- package/dist/lib/utils/html.js +47 -0
- package/dist/lib/utils/html.js.map +1 -0
- package/dist/lib/validation.js +48 -0
- package/dist/lib/validation.js.map +1 -0
- package/dist/lib/vault/store.js +411 -0
- package/dist/lib/vault/store.js.map +1 -0
- package/dist/metrics/hunch.js +739 -0
- package/dist/metrics/hunch.js.map +1 -0
- package/dist/objects/API.js +302 -0
- package/dist/objects/API.js.map +1 -0
- package/dist/objects/Agent.js +179 -0
- package/dist/objects/Agent.js.map +1 -0
- package/dist/objects/AgenticFunctionExecutor.js +8 -0
- package/dist/objects/AgenticFunctionExecutor.js.map +1 -0
- package/dist/objects/App.js +83 -0
- package/dist/objects/App.js.map +1 -0
- package/dist/objects/Browser.js +884 -0
- package/dist/objects/Browser.js.map +1 -0
- package/dist/objects/Business.js +107 -0
- package/dist/objects/Business.js.map +1 -0
- package/dist/objects/CLI.js +221 -0
- package/dist/objects/CLI.js.map +1 -0
- package/dist/objects/CodeFunctionExecutor.js +8 -0
- package/dist/objects/CodeFunctionExecutor.js.map +1 -0
- package/dist/objects/Collection.js +161 -0
- package/dist/objects/Collection.js.map +1 -0
- package/dist/objects/DO.js +41 -0
- package/dist/objects/DO.js.map +1 -0
- package/dist/objects/DOBase.js +2309 -0
- package/dist/objects/DOBase.js.map +1 -0
- package/dist/objects/DOCache.js +153 -0
- package/dist/objects/DOCache.js.map +1 -0
- package/dist/objects/DOFull.js +1676 -0
- package/dist/objects/DOFull.js.map +1 -0
- package/dist/objects/DOTiny.js +207 -0
- package/dist/objects/DOTiny.js.map +1 -0
- package/dist/objects/Directory.js +199 -0
- package/dist/objects/Directory.js.map +1 -0
- package/dist/objects/Entity.js +413 -0
- package/dist/objects/Entity.js.map +1 -0
- package/dist/objects/Function.js +116 -0
- package/dist/objects/Function.js.map +1 -0
- package/dist/objects/Human.js +231 -0
- package/dist/objects/Human.js.map +1 -0
- package/dist/objects/HumanFunctionExecutor.js +8 -0
- package/dist/objects/HumanFunctionExecutor.js.map +1 -0
- package/dist/objects/IcebergMetadataDO.js +938 -0
- package/dist/objects/IcebergMetadataDO.js.map +1 -0
- package/dist/objects/IntegrationsDO.js +1174 -0
- package/dist/objects/IntegrationsDO.js.map +1 -0
- package/dist/objects/ObservabilityBroadcaster.js +149 -0
- package/dist/objects/ObservabilityBroadcaster.js.map +1 -0
- package/dist/objects/Package.js +154 -0
- package/dist/objects/Package.js.map +1 -0
- package/dist/objects/Product.js +193 -0
- package/dist/objects/Product.js.map +1 -0
- package/dist/objects/SDK.js +152 -0
- package/dist/objects/SDK.js.map +1 -0
- package/dist/objects/SaaS.js +235 -0
- package/dist/objects/SaaS.js.map +1 -0
- package/dist/objects/SandboxDO.js +759 -0
- package/dist/objects/SandboxDO.js.map +1 -0
- package/dist/objects/Service.js +337 -0
- package/dist/objects/Service.js.map +1 -0
- package/dist/objects/Site.js +80 -0
- package/dist/objects/Site.js.map +1 -0
- package/dist/objects/Startup.js +479 -0
- package/dist/objects/Startup.js.map +1 -0
- package/dist/objects/ThingsDO.js +170 -0
- package/dist/objects/ThingsDO.js.map +1 -0
- package/dist/objects/VectorShardDO.js +650 -0
- package/dist/objects/VectorShardDO.js.map +1 -0
- package/dist/objects/Worker.js +144 -0
- package/dist/objects/Worker.js.map +1 -0
- package/dist/objects/Workflow.js +196 -0
- package/dist/objects/Workflow.js.map +1 -0
- package/dist/objects/WorkflowFactory.js +313 -0
- package/dist/objects/WorkflowFactory.js.map +1 -0
- package/dist/objects/WorkflowRuntime.js +863 -0
- package/dist/objects/WorkflowRuntime.js.map +1 -0
- package/dist/objects/circuit-breaker-bulkhead.js +178 -0
- package/dist/objects/circuit-breaker-bulkhead.js.map +1 -0
- package/dist/objects/createFunction.js +934 -0
- package/dist/objects/createFunction.js.map +1 -0
- package/dist/objects/index.js +80 -0
- package/dist/objects/index.js.map +1 -0
- package/dist/objects/lifecycle/Branch.js +275 -0
- package/dist/objects/lifecycle/Branch.js.map +1 -0
- package/dist/objects/lifecycle/Clone.js +1499 -0
- package/dist/objects/lifecycle/Clone.js.map +1 -0
- package/dist/objects/lifecycle/Compact.js +237 -0
- package/dist/objects/lifecycle/Compact.js.map +1 -0
- package/dist/objects/lifecycle/Promote.js +476 -0
- package/dist/objects/lifecycle/Promote.js.map +1 -0
- package/dist/objects/lifecycle/Shard.js +560 -0
- package/dist/objects/lifecycle/Shard.js.map +1 -0
- package/dist/objects/lifecycle/index.js +15 -0
- package/dist/objects/lifecycle/index.js.map +1 -0
- package/dist/objects/lifecycle/types.js +33 -0
- package/dist/objects/lifecycle/types.js.map +1 -0
- package/dist/objects/mixins/infrastructure.js +171 -0
- package/dist/objects/mixins/infrastructure.js.map +1 -0
- package/dist/objects/modules/StoresModule.js +153 -0
- package/dist/objects/modules/StoresModule.js.map +1 -0
- package/dist/objects/persistence/checkpoint-manager.js +606 -0
- package/dist/objects/persistence/checkpoint-manager.js.map +1 -0
- package/dist/objects/persistence/index.js +72 -0
- package/dist/objects/persistence/index.js.map +1 -0
- package/dist/objects/persistence/migration-runner.js +562 -0
- package/dist/objects/persistence/migration-runner.js.map +1 -0
- package/dist/objects/persistence/replication-manager.js +501 -0
- package/dist/objects/persistence/replication-manager.js.map +1 -0
- package/dist/objects/persistence/tiered-storage-manager.js +595 -0
- package/dist/objects/persistence/tiered-storage-manager.js.map +1 -0
- package/dist/objects/persistence/types.js +14 -0
- package/dist/objects/persistence/types.js.map +1 -0
- package/dist/objects/persistence/wal-manager.js +653 -0
- package/dist/objects/persistence/wal-manager.js.map +1 -0
- package/dist/objects/presets/index.js +20 -0
- package/dist/objects/presets/index.js.map +1 -0
- package/dist/objects/presets/primitives.js +188 -0
- package/dist/objects/presets/primitives.js.map +1 -0
- package/dist/objects/primitives/alarm-adapter.js +141 -0
- package/dist/objects/primitives/alarm-adapter.js.map +1 -0
- package/dist/objects/primitives/index.js +337 -0
- package/dist/objects/primitives/index.js.map +1 -0
- package/dist/objects/primitives/storage-adapter.js +182 -0
- package/dist/objects/primitives/storage-adapter.js.map +1 -0
- package/dist/objects/primitives/with-primitives.js +102 -0
- package/dist/objects/primitives/with-primitives.js.map +1 -0
- package/dist/objects/services/StoreManager.js +227 -0
- package/dist/objects/services/StoreManager.js.map +1 -0
- package/dist/objects/services/index.js +13 -0
- package/dist/objects/services/index.js.map +1 -0
- package/dist/objects/transport/auth-layer.js +1451 -0
- package/dist/objects/transport/auth-layer.js.map +1 -0
- package/dist/objects/transport/capnweb-target.js +355 -0
- package/dist/objects/transport/capnweb-target.js.map +1 -0
- package/dist/objects/transport/chain.js +441 -0
- package/dist/objects/transport/chain.js.map +1 -0
- package/dist/objects/transport/handler.js +58 -0
- package/dist/objects/transport/handler.js.map +1 -0
- package/dist/objects/transport/index.js +53 -0
- package/dist/objects/transport/index.js.map +1 -0
- package/dist/objects/transport/mcp-server.js +691 -0
- package/dist/objects/transport/mcp-server.js.map +1 -0
- package/dist/objects/transport/rest-autowire.js +1508 -0
- package/dist/objects/transport/rest-autowire.js.map +1 -0
- package/dist/objects/transport/rest-router.js +440 -0
- package/dist/objects/transport/rest-router.js.map +1 -0
- package/dist/objects/transport/rpc-server.js +1539 -0
- package/dist/objects/transport/rpc-server.js.map +1 -0
- package/dist/objects/transport/shared.js +576 -0
- package/dist/objects/transport/shared.js.map +1 -0
- package/dist/objects/transport/sync-engine.js +291 -0
- package/dist/objects/transport/sync-engine.js.map +1 -0
- package/dist/objects/transport/types.js +8 -0
- package/dist/objects/transport/types.js.map +1 -0
- package/dist/sandbox/index.js +258 -0
- package/dist/sandbox/index.js.map +1 -0
- package/dist/snippets/artifacts-config.js +241 -0
- package/dist/snippets/artifacts-config.js.map +1 -0
- package/dist/snippets/artifacts-ingest.js +832 -0
- package/dist/snippets/artifacts-ingest.js.map +1 -0
- package/dist/snippets/artifacts-serve.js +1035 -0
- package/dist/snippets/artifacts-serve.js.map +1 -0
- package/dist/snippets/artifacts-types.js +161 -0
- package/dist/snippets/artifacts-types.js.map +1 -0
- package/dist/snippets/cache-probe.js +376 -0
- package/dist/snippets/cache-probe.js.map +1 -0
- package/dist/snippets/cache.js +10 -0
- package/dist/snippets/cache.js.map +1 -0
- package/dist/snippets/events.js +469 -0
- package/dist/snippets/events.js.map +1 -0
- package/dist/snippets/index.js +7 -0
- package/dist/snippets/index.js.map +1 -0
- package/dist/snippets/proxy.js +495 -0
- package/dist/snippets/proxy.js.map +1 -0
- package/dist/snippets/search.js +1759 -0
- package/dist/snippets/search.js.map +1 -0
- package/dist/streams/index.js +30 -0
- package/dist/streams/index.js.map +1 -0
- package/dist/streams/observability.js +68 -0
- package/dist/streams/observability.js.map +1 -0
- package/dist/types/AI.js +92 -0
- package/dist/types/AI.js.map +1 -0
- package/dist/types/AIFunction.js +171 -0
- package/dist/types/AIFunction.js.map +1 -0
- package/dist/types/BrowseVerb.js +89 -0
- package/dist/types/BrowseVerb.js.map +1 -0
- package/dist/types/Browser.js +31 -0
- package/dist/types/Browser.js.map +1 -0
- package/dist/types/Chaos.js +15 -0
- package/dist/types/Chaos.js.map +1 -0
- package/dist/types/CloudflareBindings.js +109 -0
- package/dist/types/CloudflareBindings.js.map +1 -0
- package/dist/types/Collection.js +50 -0
- package/dist/types/Collection.js.map +1 -0
- package/dist/types/DO.js +2 -0
- package/dist/types/DO.js.map +1 -0
- package/dist/types/DOLocation.js +63 -0
- package/dist/types/DOLocation.js.map +1 -0
- package/dist/types/EventHandler.js +57 -0
- package/dist/types/EventHandler.js.map +1 -0
- package/dist/types/Experiment.js +33 -0
- package/dist/types/Experiment.js.map +1 -0
- package/dist/types/Flag.js +57 -0
- package/dist/types/Flag.js.map +1 -0
- package/dist/types/Lifecycle.js +13 -0
- package/dist/types/Lifecycle.js.map +1 -0
- package/dist/types/Location.js +169 -0
- package/dist/types/Location.js.map +1 -0
- package/dist/types/Noun.js +66 -0
- package/dist/types/Noun.js.map +1 -0
- package/dist/types/SessionEvent.js +194 -0
- package/dist/types/SessionEvent.js.map +1 -0
- package/dist/types/Thing.js +55 -0
- package/dist/types/Thing.js.map +1 -0
- package/dist/types/ThingDO.js +153 -0
- package/dist/types/ThingDO.js.map +1 -0
- package/dist/types/Things.js +2 -0
- package/dist/types/Things.js.map +1 -0
- package/dist/types/Verb.js +119 -0
- package/dist/types/Verb.js.map +1 -0
- package/dist/types/WorkflowContext.js +70 -0
- package/dist/types/WorkflowContext.js.map +1 -0
- package/dist/types/analytics-api.js +13 -0
- package/dist/types/analytics-api.js.map +1 -0
- package/dist/types/capabilities.js +135 -0
- package/dist/types/capabilities.js.map +1 -0
- package/dist/types/drizzle.js +12 -0
- package/dist/types/drizzle.js.map +1 -0
- package/dist/types/event.js +201 -0
- package/dist/types/event.js.map +1 -0
- package/dist/types/fn.js +12 -0
- package/dist/types/fn.js.map +1 -0
- package/dist/types/iceberg.js +48 -0
- package/dist/types/iceberg.js.map +1 -0
- package/dist/types/ids.js +170 -0
- package/dist/types/ids.js.map +1 -0
- package/dist/types/index.js +41 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/introspect.js +54 -0
- package/dist/types/introspect.js.map +1 -0
- package/dist/types/observability.js +124 -0
- package/dist/types/observability.js.map +1 -0
- package/dist/types/sync-protocol.js +175 -0
- package/dist/types/sync-protocol.js.map +1 -0
- package/dist/types/vector.js +13 -0
- package/dist/types/vector.js.map +1 -0
- package/dist/workflows/ScheduleManager.js +473 -0
- package/dist/workflows/ScheduleManager.js.map +1 -0
- package/dist/workflows/StepDOBridge.js +149 -0
- package/dist/workflows/StepDOBridge.js.map +1 -0
- package/dist/workflows/StepResultStorage.js +232 -0
- package/dist/workflows/StepResultStorage.js.map +1 -0
- package/dist/workflows/WaitForEventManager.js +461 -0
- package/dist/workflows/WaitForEventManager.js.map +1 -0
- package/dist/workflows/analyzer.js +332 -0
- package/dist/workflows/analyzer.js.map +1 -0
- package/dist/workflows/compat/activity-router.js +484 -0
- package/dist/workflows/compat/activity-router.js.map +1 -0
- package/dist/workflows/compat/backends/cloudflare-workflows.js +431 -0
- package/dist/workflows/compat/backends/cloudflare-workflows.js.map +1 -0
- package/dist/workflows/compat/backends/index.js +14 -0
- package/dist/workflows/compat/backends/index.js.map +1 -0
- package/dist/workflows/compat/errors/index.js +375 -0
- package/dist/workflows/compat/errors/index.js.map +1 -0
- package/dist/workflows/compat/index.js +79 -0
- package/dist/workflows/compat/index.js.map +1 -0
- package/dist/workflows/compat/inngest/index.js +989 -0
- package/dist/workflows/compat/inngest/index.js.map +1 -0
- package/dist/workflows/compat/qstash/index.js +1263 -0
- package/dist/workflows/compat/qstash/index.js.map +1 -0
- package/dist/workflows/compat/temporal/activities.js +739 -0
- package/dist/workflows/compat/temporal/activities.js.map +1 -0
- package/dist/workflows/compat/temporal/child-workflows.js +154 -0
- package/dist/workflows/compat/temporal/child-workflows.js.map +1 -0
- package/dist/workflows/compat/temporal/client.js +381 -0
- package/dist/workflows/compat/temporal/client.js.map +1 -0
- package/dist/workflows/compat/temporal/context.js +309 -0
- package/dist/workflows/compat/temporal/context.js.map +1 -0
- package/dist/workflows/compat/temporal/determinism.js +216 -0
- package/dist/workflows/compat/temporal/determinism.js.map +1 -0
- package/dist/workflows/compat/temporal/errors.js +128 -0
- package/dist/workflows/compat/temporal/errors.js.map +1 -0
- package/dist/workflows/compat/temporal/index.js +2464 -0
- package/dist/workflows/compat/temporal/index.js.map +1 -0
- package/dist/workflows/compat/temporal/saga.js +504 -0
- package/dist/workflows/compat/temporal/saga.js.map +1 -0
- package/dist/workflows/compat/temporal/signals.js +364 -0
- package/dist/workflows/compat/temporal/signals.js.map +1 -0
- package/dist/workflows/compat/temporal/storage.js +271 -0
- package/dist/workflows/compat/temporal/storage.js.map +1 -0
- package/dist/workflows/compat/temporal/timers.js +347 -0
- package/dist/workflows/compat/temporal/timers.js.map +1 -0
- package/dist/workflows/compat/temporal/types.js +7 -0
- package/dist/workflows/compat/temporal/types.js.map +1 -0
- package/dist/workflows/compat/temporal/unified-primitives.js +339 -0
- package/dist/workflows/compat/temporal/unified-primitives.js.map +1 -0
- package/dist/workflows/compat/trigger/index.js +468 -0
- package/dist/workflows/compat/trigger/index.js.map +1 -0
- package/dist/workflows/compat/utils/index.js +69 -0
- package/dist/workflows/compat/utils/index.js.map +1 -0
- package/dist/workflows/context/correlation-capability.js +266 -0
- package/dist/workflows/context/correlation-capability.js.map +1 -0
- package/dist/workflows/context/correlation.js +484 -0
- package/dist/workflows/context/correlation.js.map +1 -0
- package/dist/workflows/context/experiment.js +289 -0
- package/dist/workflows/context/experiment.js.map +1 -0
- package/dist/workflows/context/flag.js +244 -0
- package/dist/workflows/context/flag.js.map +1 -0
- package/dist/workflows/context/foundation.js +648 -0
- package/dist/workflows/context/foundation.js.map +1 -0
- package/dist/workflows/context/human-base.js +106 -0
- package/dist/workflows/context/human-base.js.map +1 -0
- package/dist/workflows/context/human.js +368 -0
- package/dist/workflows/context/human.js.map +1 -0
- package/dist/workflows/context/measure.js +354 -0
- package/dist/workflows/context/measure.js.map +1 -0
- package/dist/workflows/context/rate-limit.js +358 -0
- package/dist/workflows/context/rate-limit.js.map +1 -0
- package/dist/workflows/context/user.js +117 -0
- package/dist/workflows/context/user.js.map +1 -0
- package/dist/workflows/context/vault.js +360 -0
- package/dist/workflows/context/vault.js.map +1 -0
- package/dist/workflows/data/entity-events/entity-events.js +489 -0
- package/dist/workflows/data/entity-events/entity-events.js.map +1 -0
- package/dist/workflows/data/experiment/index.js +599 -0
- package/dist/workflows/data/experiment/index.js.map +1 -0
- package/dist/workflows/data/goal/context.js +558 -0
- package/dist/workflows/data/goal/context.js.map +1 -0
- package/dist/workflows/data/goal/index.js +32 -0
- package/dist/workflows/data/goal/index.js.map +1 -0
- package/dist/workflows/data/measure/index.js +840 -0
- package/dist/workflows/data/measure/index.js.map +1 -0
- package/dist/workflows/data/stream/index.js +1149 -0
- package/dist/workflows/data/stream/index.js.map +1 -0
- package/dist/workflows/data/track/context.js +883 -0
- package/dist/workflows/data/track/context.js.map +1 -0
- package/dist/workflows/data/track/index.js +15 -0
- package/dist/workflows/data/track/index.js.map +1 -0
- package/dist/workflows/data/view/context.js +864 -0
- package/dist/workflows/data/view/context.js.map +1 -0
- package/dist/workflows/domain.js +93 -0
- package/dist/workflows/domain.js.map +1 -0
- package/dist/workflows/flag.js +176 -0
- package/dist/workflows/flag.js.map +1 -0
- package/dist/workflows/flags.js +217 -0
- package/dist/workflows/flags.js.map +1 -0
- package/dist/workflows/hash.js +209 -0
- package/dist/workflows/hash.js.map +1 -0
- package/dist/workflows/index.js +50 -0
- package/dist/workflows/index.js.map +1 -0
- package/dist/workflows/on.js +378 -0
- package/dist/workflows/on.js.map +1 -0
- package/dist/workflows/pipeline-promise.js +481 -0
- package/dist/workflows/pipeline-promise.js.map +1 -0
- package/dist/workflows/pipeline-types.js +20 -0
- package/dist/workflows/pipeline-types.js.map +1 -0
- package/dist/workflows/proxy.js +76 -0
- package/dist/workflows/proxy.js.map +1 -0
- package/dist/workflows/runtime.js +310 -0
- package/dist/workflows/runtime.js.map +1 -0
- package/dist/workflows/schedule-builder.js +327 -0
- package/dist/workflows/schedule-builder.js.map +1 -0
- package/dist/workflows/visibility/index.js +146 -0
- package/dist/workflows/visibility/index.js.map +1 -0
- package/dist/workflows/visibility/query-parser.js +150 -0
- package/dist/workflows/visibility/query-parser.js.map +1 -0
- package/dist/workflows/visibility/store.js +223 -0
- package/dist/workflows/visibility/store.js.map +1 -0
- package/dist/workflows/visibility/types.js +30 -0
- package/dist/workflows/visibility/types.js.map +1 -0
- package/dist/workflows/workflow.js +53 -0
- package/dist/workflows/workflow.js.map +1 -0
- package/package.json +294 -46
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ThingsDO.js","sourceRoot":"","sources":["../../objects/ThingsDO.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAsB3B,MAAM,OAAO,QAAS,SAAQ,aAAa;IACjC,GAAG,CAAM;IAEjB,YAAY,GAAuB,EAAE,GAA4B;QAC/D,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;QACf,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE,CAAA;IAC7B,CAAC;IAEO,SAAS;QACf,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAA;QAEtB,kBAAkB;QAClB,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;YAC7B,MAAM,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;YACvC,MAAM,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;YAEzC,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;YACzD,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YAE1D,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;gBAC9B,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,yBAAyB,EAAE,EAAE,EAAE,GAAG,CAAC,CAAA;YAC5F,CAAC;YACD,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,0BAA0B,EAAE,EAAE,EAAE,GAAG,CAAC,CAAA;YAC7F,CAAC;YAED,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAA2B,QAAQ,CAAC,CAAA;YAChF,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;YAE9D,mDAAmD;YACnD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAA;YAEnF,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACvB,CAAC,CAAC,CAAA;QAEF,iBAAiB;QACjB,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;YAC9B,MAAM,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,CAAA;YAChD,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;gBAC9D,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,uCAAuC,EAAE,EAAE,EAAE,GAAG,CAAC,CAAA;YAC1G,CAAC;YAED,IAAI,IAAuE,CAAA;YAE3E,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAA;gBAC/B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;oBAChC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,8BAA8B,EAAE,EAAE,EAAE,GAAG,CAAC,CAAA;gBACjG,CAAC;gBACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;gBAC/B,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC3E,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,oCAAoC,EAAE,EAAE,EAAE,GAAG,CAAC,CAAA;gBACvG,CAAC;gBACD,IAAI,GAAG,MAAM,CAAA;YACf,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,mBAAmB,EAAE,EAAE,EAAE,GAAG,CAAC,CAAA;YACtF,CAAC;YAED,gBAAgB;YAChB,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAChD,OAAO,CAAC,CAAC,IAAI,CACX;oBACE,KAAK,EAAE;wBACL,IAAI,EAAE,sBAAsB;wBAC5B,OAAO,EAAE,gDAAgD;wBACzD,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,kBAAkB,CAAC,EAAE;qBACxC;iBACF,EACD,GAAG,CACJ,CAAA;YACH,CAAC;YAED,IAAI,IAAI,CAAC,IAAI,KAAK,EAAE,EAAE,CAAC;gBACrB,OAAO,CAAC,CAAC,IAAI,CACX;oBACE,KAAK,EAAE;wBACL,IAAI,EAAE,sBAAsB;wBAC5B,OAAO,EAAE,qCAAqC;wBAC9C,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,kBAAkB,CAAC,EAAE;qBACxC;iBACF,EACD,GAAG,CACJ,CAAA;YACH,CAAC;YAED,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE,CAAA;YAC9B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;YAEpC,MAAM,KAAK,GAAgB;gBACzB,EAAE;gBACF,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,OAAO;gBAC5B,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,SAAS,EAAE,GAAG;gBACd,SAAS,EAAE,GAAG;aACf,CAAA;YAED,sBAAsB;YACtB,MAAM,SAAS,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAA2B,QAAQ,CAAC,CAAC,IAAI,IAAI,GAAG,EAAE,CAAA;YAC/F,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAA;YACxB,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAA;YAE/C,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAA;QAC7C,CAAC,CAAC,CAAA;QAEF,uBAAuB;QACvB,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;YACjC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YAC5B,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAA2B,QAAQ,CAAC,CAAA;YAChF,MAAM,KAAK,GAAG,SAAS,EAAE,GAAG,CAAC,EAAE,CAAC,CAAA;YAEhC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,iBAAiB,EAAE,EAAE,EAAE,GAAG,CAAC,CAAA;YAClF,CAAC;YAED,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAA;QACxC,CAAC,CAAC,CAAA;QAEF,iBAAiB;QACjB,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;YACjC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YAC5B,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAA2B,QAAQ,CAAC,CAAA;YAChF,MAAM,QAAQ,GAAG,SAAS,EAAE,GAAG,CAAC,EAAE,CAAC,CAAA;YAEnC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,iBAAiB,EAAE,EAAE,EAAE,GAAG,CAAC,CAAA;YAClF,CAAC;YAED,IAAI,IAAuD,CAAA;YAE3D,IAAI,CAAC;gBACH,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAA;YAC3B,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,mBAAmB,EAAE,EAAE,EAAE,GAAG,CAAC,CAAA;YACtF,CAAC;YAED,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,qBAAqB,EAAE,EAAE,EAAE,GAAG,CAAC,CAAA;YACxF,CAAC;YAED,MAAM,OAAO,GAAgB;gBAC3B,GAAG,QAAQ;gBACX,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI;gBAChC,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI;gBAChC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACpC,CAAA;YAED,SAAU,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;YAC3B,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAA;YAE/C,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAA;QAC1C,CAAC,CAAC,CAAA;QAEF,iBAAiB;QACjB,GAAG,CAAC,MAAM,CAAC,aAAa,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;YACpC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YAC5B,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAA2B,QAAQ,CAAC,CAAA;YAEhF,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;gBACxB,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,iBAAiB,EAAE,EAAE,EAAE,GAAG,CAAC,CAAA;YAClF,CAAC;YAED,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;YACpB,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAA;YAE/C,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;QAC5C,CAAC,CAAC,CAAA;QAEF,YAAY;QACZ,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE;YACjB,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAA;QAC3F,CAAC,CAAC,CAAA;QAEF,OAAO,GAAG,CAAA;IACZ,CAAC;IAEO,WAAW,CAAC,KAAkB;QACpC,OAAO;YACL,EAAE,EAAE,KAAK,CAAC,EAAE;YACZ,GAAG,EAAE,SAAS,KAAK,CAAC,EAAE,EAAE;YACxB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,aAAa,EAAE,EAAE,EAAE,gEAAgE;YACnF,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,SAAS,EAAE,KAAK,CAAC,SAAS;SAC3B,CAAA;IACH,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,OAAgB;QAC1B,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IAChC,CAAC;CACF;AAED,eAAe,QAAQ,CAAA"}
|
|
@@ -0,0 +1,650 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VectorShardDO - Vector Index Shard for Similarity Search
|
|
3
|
+
*
|
|
4
|
+
* A Durable Object that stores and searches vectors for similarity.
|
|
5
|
+
* Part of the distributed vector search architecture described in
|
|
6
|
+
* docs/plans/unified-analytics-architecture.md.
|
|
7
|
+
*
|
|
8
|
+
* Key features:
|
|
9
|
+
* - Loads vectors from R2 in Float32Array format
|
|
10
|
+
* - Stores vectors efficiently in memory
|
|
11
|
+
* - Computes cosine similarity and L2 distance
|
|
12
|
+
* - Returns top-K results with scores using min-heap
|
|
13
|
+
*
|
|
14
|
+
* Memory efficiency:
|
|
15
|
+
* - Uses typed arrays (Float32Array) for compact storage
|
|
16
|
+
* - Batch distance computations for SIMD optimization
|
|
17
|
+
* - Min-heap for O(n log k) top-K selection
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```typescript
|
|
21
|
+
* // Load vectors from R2
|
|
22
|
+
* await shard.loadFromR2('vectors/shard-0.vec')
|
|
23
|
+
*
|
|
24
|
+
* // Search for similar vectors
|
|
25
|
+
* const results = await shard.search(queryVector, 10, 'cosine')
|
|
26
|
+
*
|
|
27
|
+
* // Get shard statistics
|
|
28
|
+
* const stats = await shard.getStats()
|
|
29
|
+
* console.log(`Loaded ${stats.vectorCount} vectors`)
|
|
30
|
+
* ```
|
|
31
|
+
*
|
|
32
|
+
* @module objects/VectorShardDO
|
|
33
|
+
*/
|
|
34
|
+
import { DurableObject } from 'cloudflare:workers';
|
|
35
|
+
// ============================================================================
|
|
36
|
+
// CONSTANTS
|
|
37
|
+
// ============================================================================
|
|
38
|
+
/** Magic bytes for vector storage format */
|
|
39
|
+
const MAGIC_BYTES = new Uint8Array([0x56, 0x45, 0x43, 0x31]); // "VEC1"
|
|
40
|
+
/** Current format version */
|
|
41
|
+
const FORMAT_VERSION = 1;
|
|
42
|
+
/** Header size in bytes */
|
|
43
|
+
const HEADER_SIZE = 32;
|
|
44
|
+
// ============================================================================
|
|
45
|
+
// MIN-HEAP IMPLEMENTATION
|
|
46
|
+
// ============================================================================
|
|
47
|
+
/**
|
|
48
|
+
* Min-heap for efficient top-K selection
|
|
49
|
+
*
|
|
50
|
+
* Uses a binary heap with the smallest element at the root.
|
|
51
|
+
* For top-K selection, we maintain a max-heap of size K and
|
|
52
|
+
* only keep elements with scores <= the max.
|
|
53
|
+
*/
|
|
54
|
+
class TopKHeap {
|
|
55
|
+
heap = [];
|
|
56
|
+
capacity;
|
|
57
|
+
constructor(k) {
|
|
58
|
+
this.capacity = k;
|
|
59
|
+
}
|
|
60
|
+
get size() {
|
|
61
|
+
return this.heap.length;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Peek at the maximum score in the heap (root of max-heap)
|
|
65
|
+
*/
|
|
66
|
+
peekMax() {
|
|
67
|
+
return this.heap.length > 0 ? this.heap[0].score : -Infinity;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Try to add an entry to the heap
|
|
71
|
+
* For cosine similarity, higher is better, so we use a min-heap
|
|
72
|
+
* and evict the smallest when full
|
|
73
|
+
*/
|
|
74
|
+
pushForMaximize(entry) {
|
|
75
|
+
if (this.heap.length < this.capacity) {
|
|
76
|
+
this.heap.push(entry);
|
|
77
|
+
this.heapifyUpMin(this.heap.length - 1);
|
|
78
|
+
}
|
|
79
|
+
else if (entry.score > this.heap[0].score) {
|
|
80
|
+
// Replace the minimum (worst result) with the new entry
|
|
81
|
+
this.heap[0] = entry;
|
|
82
|
+
this.heapifyDownMin(0);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Try to add an entry to the heap
|
|
87
|
+
* For L2 distance, lower is better, so we use a max-heap
|
|
88
|
+
* and evict the largest when full
|
|
89
|
+
*/
|
|
90
|
+
pushForMinimize(entry) {
|
|
91
|
+
if (this.heap.length < this.capacity) {
|
|
92
|
+
this.heap.push(entry);
|
|
93
|
+
this.heapifyUpMax(this.heap.length - 1);
|
|
94
|
+
}
|
|
95
|
+
else if (entry.score < this.heap[0].score) {
|
|
96
|
+
// Replace the maximum (worst result) with the new entry
|
|
97
|
+
this.heap[0] = entry;
|
|
98
|
+
this.heapifyDownMax(0);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Get all entries sorted by score
|
|
103
|
+
* @param ascending - Sort ascending (true for L2, false for cosine)
|
|
104
|
+
*/
|
|
105
|
+
toSortedArray(ascending) {
|
|
106
|
+
const sorted = [...this.heap];
|
|
107
|
+
sorted.sort((a, b) => ascending ? a.score - b.score : b.score - a.score);
|
|
108
|
+
return sorted;
|
|
109
|
+
}
|
|
110
|
+
heapifyUpMin(index) {
|
|
111
|
+
while (index > 0) {
|
|
112
|
+
const parent = Math.floor((index - 1) / 2);
|
|
113
|
+
if (this.heap[parent].score <= this.heap[index].score)
|
|
114
|
+
break;
|
|
115
|
+
this.swap(parent, index);
|
|
116
|
+
index = parent;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
heapifyDownMin(index) {
|
|
120
|
+
const length = this.heap.length;
|
|
121
|
+
while (true) {
|
|
122
|
+
const left = 2 * index + 1;
|
|
123
|
+
const right = 2 * index + 2;
|
|
124
|
+
let smallest = index;
|
|
125
|
+
if (left < length && this.heap[left].score < this.heap[smallest].score) {
|
|
126
|
+
smallest = left;
|
|
127
|
+
}
|
|
128
|
+
if (right < length && this.heap[right].score < this.heap[smallest].score) {
|
|
129
|
+
smallest = right;
|
|
130
|
+
}
|
|
131
|
+
if (smallest === index)
|
|
132
|
+
break;
|
|
133
|
+
this.swap(smallest, index);
|
|
134
|
+
index = smallest;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
heapifyUpMax(index) {
|
|
138
|
+
while (index > 0) {
|
|
139
|
+
const parent = Math.floor((index - 1) / 2);
|
|
140
|
+
if (this.heap[parent].score >= this.heap[index].score)
|
|
141
|
+
break;
|
|
142
|
+
this.swap(parent, index);
|
|
143
|
+
index = parent;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
heapifyDownMax(index) {
|
|
147
|
+
const length = this.heap.length;
|
|
148
|
+
while (true) {
|
|
149
|
+
const left = 2 * index + 1;
|
|
150
|
+
const right = 2 * index + 2;
|
|
151
|
+
let largest = index;
|
|
152
|
+
if (left < length && this.heap[left].score > this.heap[largest].score) {
|
|
153
|
+
largest = left;
|
|
154
|
+
}
|
|
155
|
+
if (right < length && this.heap[right].score > this.heap[largest].score) {
|
|
156
|
+
largest = right;
|
|
157
|
+
}
|
|
158
|
+
if (largest === index)
|
|
159
|
+
break;
|
|
160
|
+
this.swap(largest, index);
|
|
161
|
+
index = largest;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
swap(i, j) {
|
|
165
|
+
const temp = this.heap[i];
|
|
166
|
+
this.heap[i] = this.heap[j];
|
|
167
|
+
this.heap[j] = temp;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
// ============================================================================
|
|
171
|
+
// VECTOR SHARD DURABLE OBJECT
|
|
172
|
+
// ============================================================================
|
|
173
|
+
/**
|
|
174
|
+
* VectorShardDO - Durable Object for vector similarity search
|
|
175
|
+
*/
|
|
176
|
+
export class VectorShardDO extends DurableObject {
|
|
177
|
+
static $type = 'VectorShardDO';
|
|
178
|
+
// Vector storage
|
|
179
|
+
vectors = null;
|
|
180
|
+
ids = [];
|
|
181
|
+
dimensions = 0;
|
|
182
|
+
loaded = false;
|
|
183
|
+
loadedAt = null;
|
|
184
|
+
// ID to index lookup for O(1) access
|
|
185
|
+
idToIndex = new Map();
|
|
186
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
187
|
+
// PUBLIC API
|
|
188
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
189
|
+
/**
|
|
190
|
+
* Load vectors from R2 storage
|
|
191
|
+
*
|
|
192
|
+
* @param path - Path to the vector file in R2
|
|
193
|
+
* @throws Error if R2 binding not available or file not found
|
|
194
|
+
*/
|
|
195
|
+
async loadFromR2(path) {
|
|
196
|
+
const r2 = this.env.R2;
|
|
197
|
+
if (!r2) {
|
|
198
|
+
throw new Error('R2 binding not available');
|
|
199
|
+
}
|
|
200
|
+
const obj = await r2.get(path);
|
|
201
|
+
if (!obj) {
|
|
202
|
+
throw new Error(`Vector file not found: ${path}`);
|
|
203
|
+
}
|
|
204
|
+
const buffer = await obj.arrayBuffer();
|
|
205
|
+
await this.loadFromBuffer(buffer);
|
|
206
|
+
// Persist the path for reloading
|
|
207
|
+
await this.ctx.storage.put('vectorPath', path);
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Load vectors from an ArrayBuffer
|
|
211
|
+
*
|
|
212
|
+
* Expected format:
|
|
213
|
+
* - Header (32 bytes): magic, version, count, dimensions
|
|
214
|
+
* - IDs section: length-prefixed UTF-8 strings
|
|
215
|
+
* - Vectors section: Float32Array data
|
|
216
|
+
*/
|
|
217
|
+
async loadFromBuffer(buffer) {
|
|
218
|
+
const dataView = new DataView(buffer);
|
|
219
|
+
// Validate magic bytes
|
|
220
|
+
const magic = new Uint8Array(buffer, 0, 4);
|
|
221
|
+
if (!this.compareMagic(magic, MAGIC_BYTES)) {
|
|
222
|
+
throw new Error('Invalid vector file format: bad magic bytes');
|
|
223
|
+
}
|
|
224
|
+
// Read header
|
|
225
|
+
const version = dataView.getUint32(4, true);
|
|
226
|
+
if (version !== FORMAT_VERSION) {
|
|
227
|
+
throw new Error(`Unsupported format version: ${version}`);
|
|
228
|
+
}
|
|
229
|
+
const count = dataView.getUint32(8, true);
|
|
230
|
+
const dimensions = dataView.getUint32(12, true);
|
|
231
|
+
// Read IDs
|
|
232
|
+
let offset = HEADER_SIZE;
|
|
233
|
+
const ids = [];
|
|
234
|
+
const textDecoder = new TextDecoder();
|
|
235
|
+
for (let i = 0; i < count; i++) {
|
|
236
|
+
const idLength = dataView.getUint16(offset, true);
|
|
237
|
+
offset += 2;
|
|
238
|
+
const idBytes = new Uint8Array(buffer, offset, idLength);
|
|
239
|
+
ids.push(textDecoder.decode(idBytes));
|
|
240
|
+
offset += idLength;
|
|
241
|
+
}
|
|
242
|
+
// Align to 4-byte boundary for Float32Array
|
|
243
|
+
if (offset % 4 !== 0) {
|
|
244
|
+
offset += 4 - (offset % 4);
|
|
245
|
+
}
|
|
246
|
+
// Read vectors
|
|
247
|
+
const vectorsBytes = count * dimensions * 4;
|
|
248
|
+
const vectors = new Float32Array(buffer, offset, count * dimensions);
|
|
249
|
+
// Store in memory
|
|
250
|
+
this.vectors = new Float32Array(vectors);
|
|
251
|
+
this.ids = ids;
|
|
252
|
+
this.dimensions = dimensions;
|
|
253
|
+
this.loaded = true;
|
|
254
|
+
this.loadedAt = new Date().toISOString();
|
|
255
|
+
// Build ID lookup map
|
|
256
|
+
this.idToIndex.clear();
|
|
257
|
+
for (let i = 0; i < ids.length; i++) {
|
|
258
|
+
this.idToIndex.set(ids[i], i);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Save vectors to R2 storage
|
|
263
|
+
*
|
|
264
|
+
* @param path - Path to save the vector file in R2
|
|
265
|
+
*/
|
|
266
|
+
async saveToR2(path) {
|
|
267
|
+
const r2 = this.env.R2;
|
|
268
|
+
if (!r2) {
|
|
269
|
+
throw new Error('R2 binding not available');
|
|
270
|
+
}
|
|
271
|
+
if (!this.loaded || !this.vectors) {
|
|
272
|
+
throw new Error('No vectors loaded to save');
|
|
273
|
+
}
|
|
274
|
+
const buffer = this.serializeVectors();
|
|
275
|
+
await r2.put(path, buffer);
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Search for similar vectors
|
|
279
|
+
*
|
|
280
|
+
* @param query - Query vector as Float32Array
|
|
281
|
+
* @param k - Number of results to return
|
|
282
|
+
* @param metric - Distance metric ('cosine' or 'l2')
|
|
283
|
+
* @returns Array of search results sorted by similarity
|
|
284
|
+
*/
|
|
285
|
+
async search(query, k, metric = 'cosine') {
|
|
286
|
+
if (!this.loaded || !this.vectors) {
|
|
287
|
+
throw new Error('Vectors not loaded. Call loadFromR2() first.');
|
|
288
|
+
}
|
|
289
|
+
if (query.length !== this.dimensions) {
|
|
290
|
+
throw new Error(`Query dimension mismatch: expected ${this.dimensions}, got ${query.length}`);
|
|
291
|
+
}
|
|
292
|
+
const startTime = performance.now();
|
|
293
|
+
const count = this.ids.length;
|
|
294
|
+
// Use appropriate heap based on metric
|
|
295
|
+
const heap = new TopKHeap(k);
|
|
296
|
+
const useMaximize = metric === 'cosine'; // Higher is better for cosine
|
|
297
|
+
// Compute distances for all vectors
|
|
298
|
+
for (let i = 0; i < count; i++) {
|
|
299
|
+
const vectorStart = i * this.dimensions;
|
|
300
|
+
const vector = this.vectors.subarray(vectorStart, vectorStart + this.dimensions);
|
|
301
|
+
const score = metric === 'cosine'
|
|
302
|
+
? this.cosineSimilarity(query, vector)
|
|
303
|
+
: this.l2Distance(query, vector);
|
|
304
|
+
if (useMaximize) {
|
|
305
|
+
heap.pushForMaximize({ id: this.ids[i], score });
|
|
306
|
+
}
|
|
307
|
+
else {
|
|
308
|
+
heap.pushForMinimize({ id: this.ids[i], score });
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
// Return sorted results
|
|
312
|
+
// For cosine: descending (higher similarity first)
|
|
313
|
+
// For L2: ascending (lower distance first)
|
|
314
|
+
return heap.toSortedArray(!useMaximize);
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Extended search with full options
|
|
318
|
+
*/
|
|
319
|
+
async searchExtended(request) {
|
|
320
|
+
const startTime = performance.now();
|
|
321
|
+
if (!this.loaded || !this.vectors) {
|
|
322
|
+
throw new Error('Vectors not loaded. Call loadFromR2() first.');
|
|
323
|
+
}
|
|
324
|
+
const { query, k, metric = 'cosine', filter } = request;
|
|
325
|
+
if (query.length !== this.dimensions) {
|
|
326
|
+
throw new Error(`Query dimension mismatch: expected ${this.dimensions}, got ${query.length}`);
|
|
327
|
+
}
|
|
328
|
+
const count = this.ids.length;
|
|
329
|
+
const heap = new TopKHeap(k);
|
|
330
|
+
const useMaximize = metric === 'cosine';
|
|
331
|
+
let vectorsScanned = 0;
|
|
332
|
+
for (let i = 0; i < count; i++) {
|
|
333
|
+
const id = this.ids[i];
|
|
334
|
+
// Apply filter if provided
|
|
335
|
+
if (filter && !filter(id)) {
|
|
336
|
+
continue;
|
|
337
|
+
}
|
|
338
|
+
vectorsScanned++;
|
|
339
|
+
const vectorStart = i * this.dimensions;
|
|
340
|
+
const vector = this.vectors.subarray(vectorStart, vectorStart + this.dimensions);
|
|
341
|
+
const score = metric === 'cosine'
|
|
342
|
+
? this.cosineSimilarity(query, vector)
|
|
343
|
+
: this.l2Distance(query, vector);
|
|
344
|
+
if (useMaximize) {
|
|
345
|
+
heap.pushForMaximize({ id, score });
|
|
346
|
+
}
|
|
347
|
+
else {
|
|
348
|
+
heap.pushForMinimize({ id, score });
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
const searchTimeMs = performance.now() - startTime;
|
|
352
|
+
return {
|
|
353
|
+
results: heap.toSortedArray(!useMaximize),
|
|
354
|
+
vectorsScanned,
|
|
355
|
+
searchTimeMs,
|
|
356
|
+
};
|
|
357
|
+
}
|
|
358
|
+
/**
|
|
359
|
+
* Get statistics about this shard
|
|
360
|
+
*/
|
|
361
|
+
async getStats() {
|
|
362
|
+
const vectorCount = this.ids.length;
|
|
363
|
+
const memoryBytes = this.vectors
|
|
364
|
+
? this.vectors.byteLength + this.ids.reduce((sum, id) => sum + id.length * 2, 0)
|
|
365
|
+
: 0;
|
|
366
|
+
return {
|
|
367
|
+
vectorCount,
|
|
368
|
+
dimensions: this.dimensions,
|
|
369
|
+
memoryBytes,
|
|
370
|
+
loaded: this.loaded,
|
|
371
|
+
loadedAt: this.loadedAt ?? undefined,
|
|
372
|
+
};
|
|
373
|
+
}
|
|
374
|
+
/**
|
|
375
|
+
* Get a specific vector by ID
|
|
376
|
+
*/
|
|
377
|
+
async getVector(id) {
|
|
378
|
+
if (!this.loaded || !this.vectors) {
|
|
379
|
+
return null;
|
|
380
|
+
}
|
|
381
|
+
const index = this.idToIndex.get(id);
|
|
382
|
+
if (index === undefined) {
|
|
383
|
+
return null;
|
|
384
|
+
}
|
|
385
|
+
const start = index * this.dimensions;
|
|
386
|
+
return this.vectors.slice(start, start + this.dimensions);
|
|
387
|
+
}
|
|
388
|
+
/**
|
|
389
|
+
* Check if a vector exists
|
|
390
|
+
*/
|
|
391
|
+
async hasVector(id) {
|
|
392
|
+
return this.idToIndex.has(id);
|
|
393
|
+
}
|
|
394
|
+
/**
|
|
395
|
+
* Add vectors in batch
|
|
396
|
+
*/
|
|
397
|
+
async addVectors(request) {
|
|
398
|
+
const { ids, vectors, dimensions } = request;
|
|
399
|
+
if (vectors.length !== ids.length * dimensions) {
|
|
400
|
+
throw new Error('Vector array size mismatch');
|
|
401
|
+
}
|
|
402
|
+
// Initialize if first vectors
|
|
403
|
+
if (!this.loaded) {
|
|
404
|
+
this.vectors = new Float32Array(vectors);
|
|
405
|
+
this.ids = [...ids];
|
|
406
|
+
this.dimensions = dimensions;
|
|
407
|
+
this.loaded = true;
|
|
408
|
+
this.loadedAt = new Date().toISOString();
|
|
409
|
+
for (let i = 0; i < ids.length; i++) {
|
|
410
|
+
this.idToIndex.set(ids[i], i);
|
|
411
|
+
}
|
|
412
|
+
return { inserted: ids.length, failed: [] };
|
|
413
|
+
}
|
|
414
|
+
// Validate dimensions
|
|
415
|
+
if (dimensions !== this.dimensions) {
|
|
416
|
+
throw new Error(`Dimension mismatch: expected ${this.dimensions}, got ${dimensions}`);
|
|
417
|
+
}
|
|
418
|
+
// Check for duplicates and collect new vectors
|
|
419
|
+
const inserted = [];
|
|
420
|
+
const failed = [];
|
|
421
|
+
const errors = {};
|
|
422
|
+
for (let i = 0; i < ids.length; i++) {
|
|
423
|
+
const id = ids[i];
|
|
424
|
+
if (this.idToIndex.has(id)) {
|
|
425
|
+
failed.push(id);
|
|
426
|
+
errors[id] = 'Vector already exists';
|
|
427
|
+
}
|
|
428
|
+
else {
|
|
429
|
+
inserted.push(id);
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
if (inserted.length > 0) {
|
|
433
|
+
// Expand storage
|
|
434
|
+
const newCount = this.ids.length + inserted.length;
|
|
435
|
+
const newVectors = new Float32Array(newCount * this.dimensions);
|
|
436
|
+
newVectors.set(this.vectors);
|
|
437
|
+
let insertIndex = this.ids.length;
|
|
438
|
+
for (let i = 0; i < ids.length; i++) {
|
|
439
|
+
const id = ids[i];
|
|
440
|
+
if (!this.idToIndex.has(id)) {
|
|
441
|
+
const srcStart = i * dimensions;
|
|
442
|
+
const dstStart = insertIndex * this.dimensions;
|
|
443
|
+
newVectors.set(vectors.subarray(srcStart, srcStart + dimensions), dstStart);
|
|
444
|
+
this.idToIndex.set(id, insertIndex);
|
|
445
|
+
this.ids.push(id);
|
|
446
|
+
insertIndex++;
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
this.vectors = newVectors;
|
|
450
|
+
}
|
|
451
|
+
return {
|
|
452
|
+
inserted: inserted.length,
|
|
453
|
+
failed,
|
|
454
|
+
errors: Object.keys(errors).length > 0 ? errors : undefined,
|
|
455
|
+
};
|
|
456
|
+
}
|
|
457
|
+
/**
|
|
458
|
+
* Delete vectors in batch
|
|
459
|
+
*/
|
|
460
|
+
async deleteVectors(request) {
|
|
461
|
+
if (!this.loaded || !this.vectors) {
|
|
462
|
+
return { deleted: 0, notFound: request.ids };
|
|
463
|
+
}
|
|
464
|
+
const { ids } = request;
|
|
465
|
+
const toDelete = new Set();
|
|
466
|
+
const notFound = [];
|
|
467
|
+
for (const id of ids) {
|
|
468
|
+
const index = this.idToIndex.get(id);
|
|
469
|
+
if (index !== undefined) {
|
|
470
|
+
toDelete.add(index);
|
|
471
|
+
this.idToIndex.delete(id);
|
|
472
|
+
}
|
|
473
|
+
else {
|
|
474
|
+
notFound.push(id);
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
if (toDelete.size === 0) {
|
|
478
|
+
return { deleted: 0, notFound };
|
|
479
|
+
}
|
|
480
|
+
// Rebuild arrays without deleted vectors
|
|
481
|
+
const newCount = this.ids.length - toDelete.size;
|
|
482
|
+
const newVectors = new Float32Array(newCount * this.dimensions);
|
|
483
|
+
const newIds = [];
|
|
484
|
+
let newIndex = 0;
|
|
485
|
+
for (let i = 0; i < this.ids.length; i++) {
|
|
486
|
+
if (!toDelete.has(i)) {
|
|
487
|
+
const srcStart = i * this.dimensions;
|
|
488
|
+
const dstStart = newIndex * this.dimensions;
|
|
489
|
+
newVectors.set(this.vectors.subarray(srcStart, srcStart + this.dimensions), dstStart);
|
|
490
|
+
newIds.push(this.ids[i]);
|
|
491
|
+
this.idToIndex.set(this.ids[i], newIndex);
|
|
492
|
+
newIndex++;
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
this.vectors = newVectors;
|
|
496
|
+
this.ids = newIds;
|
|
497
|
+
return { deleted: toDelete.size, notFound };
|
|
498
|
+
}
|
|
499
|
+
/**
|
|
500
|
+
* Clear all vectors from memory
|
|
501
|
+
*/
|
|
502
|
+
async clear() {
|
|
503
|
+
this.vectors = null;
|
|
504
|
+
this.ids = [];
|
|
505
|
+
this.dimensions = 0;
|
|
506
|
+
this.loaded = false;
|
|
507
|
+
this.loadedAt = null;
|
|
508
|
+
this.idToIndex.clear();
|
|
509
|
+
}
|
|
510
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
511
|
+
// HTTP HANDLER
|
|
512
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
513
|
+
async fetch(request) {
|
|
514
|
+
const url = new URL(request.url);
|
|
515
|
+
try {
|
|
516
|
+
switch (url.pathname) {
|
|
517
|
+
case '/health':
|
|
518
|
+
return Response.json({ status: 'ok', loaded: this.loaded });
|
|
519
|
+
case '/stats':
|
|
520
|
+
return Response.json(await this.getStats());
|
|
521
|
+
case '/load':
|
|
522
|
+
if (request.method !== 'POST') {
|
|
523
|
+
return new Response('Method not allowed', { status: 405 });
|
|
524
|
+
}
|
|
525
|
+
const loadBody = await request.json();
|
|
526
|
+
await this.loadFromR2(loadBody.path);
|
|
527
|
+
return Response.json({ success: true, stats: await this.getStats() });
|
|
528
|
+
case '/search':
|
|
529
|
+
if (request.method !== 'POST') {
|
|
530
|
+
return new Response('Method not allowed', { status: 405 });
|
|
531
|
+
}
|
|
532
|
+
const searchBody = await request.json();
|
|
533
|
+
const query = new Float32Array(searchBody.query);
|
|
534
|
+
const results = await this.search(query, searchBody.k, searchBody.metric);
|
|
535
|
+
return Response.json({ results });
|
|
536
|
+
case '/vectors':
|
|
537
|
+
if (request.method === 'POST') {
|
|
538
|
+
const insertBody = await request.json();
|
|
539
|
+
const insertResult = await this.addVectors({
|
|
540
|
+
ids: insertBody.ids,
|
|
541
|
+
vectors: new Float32Array(insertBody.vectors),
|
|
542
|
+
dimensions: insertBody.dimensions,
|
|
543
|
+
});
|
|
544
|
+
return Response.json(insertResult);
|
|
545
|
+
}
|
|
546
|
+
if (request.method === 'DELETE') {
|
|
547
|
+
const deleteBody = await request.json();
|
|
548
|
+
const deleteResult = await this.deleteVectors(deleteBody);
|
|
549
|
+
return Response.json(deleteResult);
|
|
550
|
+
}
|
|
551
|
+
return new Response('Method not allowed', { status: 405 });
|
|
552
|
+
default:
|
|
553
|
+
return new Response('Not Found', { status: 404 });
|
|
554
|
+
}
|
|
555
|
+
}
|
|
556
|
+
catch (error) {
|
|
557
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
558
|
+
return Response.json({ error: message }, { status: 500 });
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
562
|
+
// PRIVATE METHODS
|
|
563
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
564
|
+
/**
|
|
565
|
+
* Compute cosine similarity between two vectors
|
|
566
|
+
* Returns value in range [-1, 1], higher is more similar
|
|
567
|
+
*/
|
|
568
|
+
cosineSimilarity(a, b) {
|
|
569
|
+
let dotProduct = 0;
|
|
570
|
+
let normA = 0;
|
|
571
|
+
let normB = 0;
|
|
572
|
+
for (let i = 0; i < a.length; i++) {
|
|
573
|
+
dotProduct += a[i] * b[i];
|
|
574
|
+
normA += a[i] * a[i];
|
|
575
|
+
normB += b[i] * b[i];
|
|
576
|
+
}
|
|
577
|
+
const denominator = Math.sqrt(normA) * Math.sqrt(normB);
|
|
578
|
+
if (denominator === 0)
|
|
579
|
+
return 0;
|
|
580
|
+
return dotProduct / denominator;
|
|
581
|
+
}
|
|
582
|
+
/**
|
|
583
|
+
* Compute L2 (Euclidean) distance between two vectors
|
|
584
|
+
* Returns value >= 0, lower is more similar
|
|
585
|
+
*/
|
|
586
|
+
l2Distance(a, b) {
|
|
587
|
+
let sum = 0;
|
|
588
|
+
for (let i = 0; i < a.length; i++) {
|
|
589
|
+
const diff = a[i] - b[i];
|
|
590
|
+
sum += diff * diff;
|
|
591
|
+
}
|
|
592
|
+
return Math.sqrt(sum);
|
|
593
|
+
}
|
|
594
|
+
/**
|
|
595
|
+
* Compare two byte arrays
|
|
596
|
+
*/
|
|
597
|
+
compareMagic(a, b) {
|
|
598
|
+
if (a.length !== b.length)
|
|
599
|
+
return false;
|
|
600
|
+
for (let i = 0; i < a.length; i++) {
|
|
601
|
+
if (a[i] !== b[i])
|
|
602
|
+
return false;
|
|
603
|
+
}
|
|
604
|
+
return true;
|
|
605
|
+
}
|
|
606
|
+
/**
|
|
607
|
+
* Serialize vectors to ArrayBuffer for storage
|
|
608
|
+
*/
|
|
609
|
+
serializeVectors() {
|
|
610
|
+
if (!this.vectors) {
|
|
611
|
+
throw new Error('No vectors to serialize');
|
|
612
|
+
}
|
|
613
|
+
const textEncoder = new TextEncoder();
|
|
614
|
+
const encodedIds = this.ids.map(id => textEncoder.encode(id));
|
|
615
|
+
// Calculate total size
|
|
616
|
+
let idsSize = 0;
|
|
617
|
+
for (const encoded of encodedIds) {
|
|
618
|
+
idsSize += 2 + encoded.length; // 2 bytes for length + string bytes
|
|
619
|
+
}
|
|
620
|
+
// Align to 4-byte boundary
|
|
621
|
+
const padding = (4 - ((HEADER_SIZE + idsSize) % 4)) % 4;
|
|
622
|
+
const vectorsSize = this.vectors.byteLength;
|
|
623
|
+
const totalSize = HEADER_SIZE + idsSize + padding + vectorsSize;
|
|
624
|
+
// Create buffer
|
|
625
|
+
const buffer = new ArrayBuffer(totalSize);
|
|
626
|
+
const dataView = new DataView(buffer);
|
|
627
|
+
const uint8View = new Uint8Array(buffer);
|
|
628
|
+
// Write header
|
|
629
|
+
uint8View.set(MAGIC_BYTES, 0);
|
|
630
|
+
dataView.setUint32(4, FORMAT_VERSION, true);
|
|
631
|
+
dataView.setUint32(8, this.ids.length, true);
|
|
632
|
+
dataView.setUint32(12, this.dimensions, true);
|
|
633
|
+
// Write IDs
|
|
634
|
+
let offset = HEADER_SIZE;
|
|
635
|
+
for (const encoded of encodedIds) {
|
|
636
|
+
dataView.setUint16(offset, encoded.length, true);
|
|
637
|
+
offset += 2;
|
|
638
|
+
uint8View.set(encoded, offset);
|
|
639
|
+
offset += encoded.length;
|
|
640
|
+
}
|
|
641
|
+
// Add padding
|
|
642
|
+
offset += padding;
|
|
643
|
+
// Write vectors
|
|
644
|
+
const vectorsView = new Float32Array(buffer, offset);
|
|
645
|
+
vectorsView.set(this.vectors);
|
|
646
|
+
return buffer;
|
|
647
|
+
}
|
|
648
|
+
}
|
|
649
|
+
export default VectorShardDO;
|
|
650
|
+
//# sourceMappingURL=VectorShardDO.js.map
|