ai-database 2.1.3 → 2.3.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/CHANGELOG.md +35 -1
- package/README.md +880 -669
- package/dist/actions.d.ts +2 -2
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +1 -1
- package/dist/actions.js.map +1 -1
- package/dist/ai-promise-db.d.ts +49 -23
- package/dist/ai-promise-db.d.ts.map +1 -1
- package/dist/ai-promise-db.js +91 -63
- package/dist/ai-promise-db.js.map +1 -1
- package/dist/authorization.d.ts.map +1 -1
- package/dist/authorization.js +38 -30
- package/dist/authorization.js.map +1 -1
- package/dist/cascade-orchestrator.d.ts +404 -0
- package/dist/cascade-orchestrator.d.ts.map +1 -0
- package/dist/cascade-orchestrator.js +828 -0
- package/dist/cascade-orchestrator.js.map +1 -0
- package/dist/cascade-write-strategy.d.ts +584 -0
- package/dist/cascade-write-strategy.d.ts.map +1 -0
- package/dist/cascade-write-strategy.js +590 -0
- package/dist/cascade-write-strategy.js.map +1 -0
- package/dist/ch-adapter.d.ts +358 -0
- package/dist/ch-adapter.d.ts.map +1 -0
- package/dist/ch-adapter.js +929 -0
- package/dist/ch-adapter.js.map +1 -0
- package/dist/client/index.d.ts +42 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +43 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client.d.ts +266 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +81 -0
- package/dist/client.js.map +1 -0
- package/dist/constants.d.ts +64 -1
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +52 -2
- package/dist/constants.js.map +1 -1
- package/dist/dataloader.d.ts +99 -0
- package/dist/dataloader.d.ts.map +1 -0
- package/dist/dataloader.js +225 -0
- package/dist/dataloader.js.map +1 -0
- package/dist/db-provider-port.d.ts +501 -0
- package/dist/db-provider-port.d.ts.map +1 -0
- package/dist/db-provider-port.js +113 -0
- package/dist/db-provider-port.js.map +1 -0
- package/dist/digital-objects-provider.d.ts +49 -0
- package/dist/digital-objects-provider.d.ts.map +1 -0
- package/dist/digital-objects-provider.js +55 -0
- package/dist/digital-objects-provider.js.map +1 -0
- package/dist/do-sqlite-adapter.d.ts +402 -0
- package/dist/do-sqlite-adapter.d.ts.map +1 -0
- package/dist/do-sqlite-adapter.js +745 -0
- package/dist/do-sqlite-adapter.js.map +1 -0
- package/dist/docs-rels/custom-types.d.ts +134 -0
- package/dist/docs-rels/custom-types.d.ts.map +1 -0
- package/dist/docs-rels/custom-types.js +70 -0
- package/dist/docs-rels/custom-types.js.map +1 -0
- package/dist/docs-rels/index.d.ts +16 -0
- package/dist/docs-rels/index.d.ts.map +1 -0
- package/dist/docs-rels/index.js +16 -0
- package/dist/docs-rels/index.js.map +1 -0
- package/dist/docs-rels/migrations/index.d.ts +30 -0
- package/dist/docs-rels/migrations/index.d.ts.map +1 -0
- package/dist/docs-rels/migrations/index.js +128 -0
- package/dist/docs-rels/migrations/index.js.map +1 -0
- package/dist/docs-rels/schema.d.ts +2961 -0
- package/dist/docs-rels/schema.d.ts.map +1 -0
- package/dist/docs-rels/schema.js +244 -0
- package/dist/docs-rels/schema.js.map +1 -0
- package/dist/durable-clickhouse.d.ts.map +1 -1
- package/dist/durable-clickhouse.js +16 -13
- package/dist/durable-clickhouse.js.map +1 -1
- package/dist/durable-promise.d.ts.map +1 -1
- package/dist/durable-promise.js +34 -15
- package/dist/durable-promise.js.map +1 -1
- package/dist/errors.d.ts +127 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +210 -0
- package/dist/errors.js.map +1 -0
- package/dist/eventbridge.d.ts +117 -0
- package/dist/eventbridge.d.ts.map +1 -0
- package/dist/eventbridge.js +238 -0
- package/dist/eventbridge.js.map +1 -0
- package/dist/events.d.ts +2 -2
- package/dist/events.d.ts.map +1 -1
- package/dist/events.js +1 -1
- package/dist/events.js.map +1 -1
- package/dist/execution-queue.d.ts.map +1 -1
- package/dist/execution-queue.js +4 -5
- package/dist/execution-queue.js.map +1 -1
- package/dist/index.d.ts +35 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +106 -6
- package/dist/index.js.map +1 -1
- package/dist/linguistic.d.ts +3 -108
- package/dist/linguistic.d.ts.map +1 -1
- package/dist/linguistic.js +3 -372
- package/dist/linguistic.js.map +1 -1
- package/dist/logger.d.ts +132 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +137 -0
- package/dist/logger.js.map +1 -0
- package/dist/memory-provider.d.ts +128 -0
- package/dist/memory-provider.d.ts.map +1 -1
- package/dist/memory-provider.js +592 -257
- package/dist/memory-provider.js.map +1 -1
- package/dist/pg-adapter.d.ts +424 -0
- package/dist/pg-adapter.d.ts.map +1 -0
- package/dist/pg-adapter.js +921 -0
- package/dist/pg-adapter.js.map +1 -0
- package/dist/pipelines-iceberg-emitter.d.ts +327 -0
- package/dist/pipelines-iceberg-emitter.d.ts.map +1 -0
- package/dist/pipelines-iceberg-emitter.js +351 -0
- package/dist/pipelines-iceberg-emitter.js.map +1 -0
- package/dist/provider-capabilities.d.ts +146 -0
- package/dist/provider-capabilities.d.ts.map +1 -0
- package/dist/provider-capabilities.js +214 -0
- package/dist/provider-capabilities.js.map +1 -0
- package/dist/rdb-provider-adapter.d.ts +195 -0
- package/dist/rdb-provider-adapter.d.ts.map +1 -0
- package/dist/rdb-provider-adapter.js +291 -0
- package/dist/rdb-provider-adapter.js.map +1 -0
- package/dist/schema/cascade.d.ts +48 -17
- package/dist/schema/cascade.d.ts.map +1 -1
- package/dist/schema/cascade.js +477 -278
- package/dist/schema/cascade.js.map +1 -1
- package/dist/schema/definition-caches.d.ts +24 -0
- package/dist/schema/definition-caches.d.ts.map +1 -0
- package/dist/schema/definition-caches.js +26 -0
- package/dist/schema/definition-caches.js.map +1 -0
- package/dist/schema/dependency-graph.d.ts +21 -109
- package/dist/schema/dependency-graph.d.ts.map +1 -1
- package/dist/schema/dependency-graph.js +25 -333
- package/dist/schema/dependency-graph.js.map +1 -1
- package/dist/schema/diff.d.ts +103 -0
- package/dist/schema/diff.d.ts.map +1 -0
- package/dist/schema/diff.js +329 -0
- package/dist/schema/diff.js.map +1 -0
- package/dist/schema/entity-operations.d.ts +99 -0
- package/dist/schema/entity-operations.d.ts.map +1 -0
- package/dist/schema/entity-operations.js +818 -0
- package/dist/schema/entity-operations.js.map +1 -0
- package/dist/schema/index.d.ts +28 -34
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/schema/index.js +454 -521
- package/dist/schema/index.js.map +1 -1
- package/dist/schema/migration.d.ts +205 -0
- package/dist/schema/migration.d.ts.map +1 -0
- package/dist/schema/migration.js +327 -0
- package/dist/schema/migration.js.map +1 -0
- package/dist/schema/nl-query-generator.d.ts +68 -0
- package/dist/schema/nl-query-generator.d.ts.map +1 -0
- package/dist/schema/nl-query-generator.js +362 -0
- package/dist/schema/nl-query-generator.js.map +1 -0
- package/dist/schema/nl-query.d.ts +65 -0
- package/dist/schema/nl-query.d.ts.map +1 -0
- package/dist/schema/nl-query.js +178 -0
- package/dist/schema/nl-query.js.map +1 -0
- package/dist/schema/parse.d.ts.map +1 -1
- package/dist/schema/parse.js +144 -89
- package/dist/schema/parse.js.map +1 -1
- package/dist/schema/provider.d.ts +37 -0
- package/dist/schema/provider.d.ts.map +1 -1
- package/dist/schema/provider.js +15 -7
- package/dist/schema/provider.js.map +1 -1
- package/dist/schema/resolve.d.ts +46 -5
- package/dist/schema/resolve.d.ts.map +1 -1
- package/dist/schema/resolve.js +237 -95
- package/dist/schema/resolve.js.map +1 -1
- package/dist/schema/search-utils.d.ts +76 -0
- package/dist/schema/search-utils.d.ts.map +1 -0
- package/dist/schema/search-utils.js +86 -0
- package/dist/schema/search-utils.js.map +1 -0
- package/dist/schema/seed.d.ts +53 -0
- package/dist/schema/seed.d.ts.map +1 -0
- package/dist/schema/seed.js +94 -0
- package/dist/schema/seed.js.map +1 -0
- package/dist/schema/semantic.d.ts +10 -0
- package/dist/schema/semantic.d.ts.map +1 -1
- package/dist/schema/semantic.js +192 -86
- package/dist/schema/semantic.js.map +1 -1
- package/dist/schema/sub-apis.d.ts +52 -0
- package/dist/schema/sub-apis.d.ts.map +1 -0
- package/dist/schema/sub-apis.js +216 -0
- package/dist/schema/sub-apis.js.map +1 -0
- package/dist/schema/system-entities.d.ts +42 -0
- package/dist/schema/system-entities.d.ts.map +1 -0
- package/dist/schema/system-entities.js +101 -0
- package/dist/schema/system-entities.js.map +1 -0
- package/dist/schema/types.d.ts +91 -9
- package/dist/schema/types.d.ts.map +1 -1
- package/dist/schema/union-fallback.d.ts.map +1 -1
- package/dist/schema/union-fallback.js +21 -15
- package/dist/schema/union-fallback.js.map +1 -1
- package/dist/schema/value-generators/ai.d.ts +54 -0
- package/dist/schema/value-generators/ai.d.ts.map +1 -0
- package/dist/schema/value-generators/ai.js +136 -0
- package/dist/schema/value-generators/ai.js.map +1 -0
- package/dist/schema/value-generators/index.d.ts +126 -0
- package/dist/schema/value-generators/index.d.ts.map +1 -0
- package/dist/schema/value-generators/index.js +219 -0
- package/dist/schema/value-generators/index.js.map +1 -0
- package/dist/schema/value-generators/placeholder.d.ts +52 -0
- package/dist/schema/value-generators/placeholder.d.ts.map +1 -0
- package/dist/schema/value-generators/placeholder.js +328 -0
- package/dist/schema/value-generators/placeholder.js.map +1 -0
- package/dist/schema/value-generators/types.d.ts +116 -0
- package/dist/schema/value-generators/types.d.ts.map +1 -0
- package/dist/schema/value-generators/types.js +11 -0
- package/dist/schema/value-generators/types.js.map +1 -0
- package/dist/schema/version.d.ts +111 -0
- package/dist/schema/version.d.ts.map +1 -0
- package/dist/schema/version.js +190 -0
- package/dist/schema/version.js.map +1 -0
- package/dist/schema.d.ts +1095 -24
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +2852 -40
- package/dist/schema.js.map +1 -1
- package/dist/semantic-vectors.d.ts +39 -0
- package/dist/semantic-vectors.d.ts.map +1 -0
- package/dist/semantic-vectors.js +334 -0
- package/dist/semantic-vectors.js.map +1 -0
- package/dist/semantic.d.ts +29 -1
- package/dist/semantic.d.ts.map +1 -1
- package/dist/semantic.js +26 -16
- package/dist/semantic.js.map +1 -1
- package/dist/telemetry.d.ts +128 -0
- package/dist/telemetry.d.ts.map +1 -0
- package/dist/telemetry.js +305 -0
- package/dist/telemetry.js.map +1 -0
- package/dist/tests.d.ts.map +1 -1
- package/dist/tests.js +30 -22
- package/dist/tests.js.map +1 -1
- package/dist/type-guards.d.ts +50 -5
- package/dist/type-guards.d.ts.map +1 -1
- package/dist/type-guards.js +87 -16
- package/dist/type-guards.js.map +1 -1
- package/dist/types.d.ts +33 -245
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +62 -72
- package/dist/types.js.map +1 -1
- package/dist/validation.d.ts +2 -5
- package/dist/validation.d.ts.map +1 -1
- package/dist/validation.js +65 -93
- package/dist/validation.js.map +1 -1
- package/dist/worker/db-provider.d.ts +168 -0
- package/dist/worker/db-provider.d.ts.map +1 -0
- package/dist/worker/db-provider.js +277 -0
- package/dist/worker/db-provider.js.map +1 -0
- package/dist/worker/index.d.ts +35 -0
- package/dist/worker/index.d.ts.map +1 -0
- package/dist/worker/index.js +37 -0
- package/dist/worker/index.js.map +1 -0
- package/dist/worker.d.ts +779 -0
- package/dist/worker.d.ts.map +1 -0
- package/dist/worker.js +2786 -0
- package/dist/worker.js.map +1 -0
- package/package.json +46 -16
- package/src/docs-rels/migrations/0001-init.sql +125 -0
- package/LICENSE +0 -21
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Digital Objects Provider for ai-database
|
|
3
|
+
*
|
|
4
|
+
* This module provides a wrapper that uses digital-objects as a storage backend
|
|
5
|
+
* for ai-database. It creates a MemoryProvider from digital-objects and wraps it
|
|
6
|
+
* with the DBProviderAdapter to provide the ai-database DBProvider interface.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* import { DB } from 'ai-database'
|
|
11
|
+
* import { createDigitalObjectsProvider } from 'ai-database'
|
|
12
|
+
*
|
|
13
|
+
* const provider = createDigitalObjectsProvider()
|
|
14
|
+
*
|
|
15
|
+
* const { db } = DB({
|
|
16
|
+
* User: {
|
|
17
|
+
* name: 'string',
|
|
18
|
+
* email: 'string',
|
|
19
|
+
* }
|
|
20
|
+
* }, { provider })
|
|
21
|
+
*
|
|
22
|
+
* await db.User.create({ name: 'John', email: 'john@example.com' })
|
|
23
|
+
* ```
|
|
24
|
+
*
|
|
25
|
+
* @packageDocumentation
|
|
26
|
+
*/
|
|
27
|
+
import { createDBProviderAdapter, createMemoryProvider } from 'digital-objects';
|
|
28
|
+
/**
|
|
29
|
+
* Creates a DBProvider backed by digital-objects storage.
|
|
30
|
+
*
|
|
31
|
+
* This function creates an in-memory DigitalObjectsProvider and wraps it
|
|
32
|
+
* with the DBProviderAdapter to provide the ai-database DBProvider interface.
|
|
33
|
+
*
|
|
34
|
+
* @returns A DBProvider that uses digital-objects as the storage backend
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```ts
|
|
38
|
+
* const provider = createDigitalObjectsProvider()
|
|
39
|
+
*
|
|
40
|
+
* // Use with DB factory
|
|
41
|
+
* const { db } = DB(schema, { provider })
|
|
42
|
+
*
|
|
43
|
+
* // Or use directly
|
|
44
|
+
* await provider.create('User', 'user-1', { name: 'John' })
|
|
45
|
+
* const user = await provider.get('User', 'user-1')
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
export function createDigitalObjectsProvider() {
|
|
49
|
+
// Create a MemoryProvider from digital-objects
|
|
50
|
+
const memoryProvider = createMemoryProvider();
|
|
51
|
+
// Wrap it with the DBProviderAdapter to get DBProvider interface
|
|
52
|
+
const dbProvider = createDBProviderAdapter(memoryProvider);
|
|
53
|
+
return dbProvider;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=digital-objects-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"digital-objects-provider.js","sourceRoot":"","sources":["../src/digital-objects-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AAG/E;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,4BAA4B;IAC1C,+CAA+C;IAC/C,MAAM,cAAc,GAAG,oBAAoB,EAAE,CAAA;IAE7C,iEAAiE;IACjE,MAAM,UAAU,GAAG,uBAAuB,CAAC,cAAc,CAAC,CAAA;IAE1D,OAAO,UAAU,CAAA;AACnB,CAAC"}
|
|
@@ -0,0 +1,402 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DO SQLite Adapter — Stack B transactional DBProvider
|
|
3
|
+
*
|
|
4
|
+
* First-class adapter for **Cloudflare Durable Objects with SQLite storage**.
|
|
5
|
+
* Stack B's transactional layer per ADR-0003: per-cascade DO isolation gives
|
|
6
|
+
* parallel write paths each at full single-DO throughput, which is what makes
|
|
7
|
+
* the cascade-heavy moat workload viable.
|
|
8
|
+
*
|
|
9
|
+
* ## Sharding model
|
|
10
|
+
*
|
|
11
|
+
* The adapter accepts a {@link DurableObjectNamespaceLike} binding plus a
|
|
12
|
+
* {@link ShardingStrategy} that selects which DO id receives a given
|
|
13
|
+
* operation. Two canonical strategies ship in this module:
|
|
14
|
+
*
|
|
15
|
+
* - **`'per-cascade'`** (default; the enabling pattern per ADR-0003) —
|
|
16
|
+
* each cascade gets its own DO; reads back during traversal stay inside
|
|
17
|
+
* the same DO (no cross-DO hot-path reads). Caller passes the cascade id
|
|
18
|
+
* via the per-operation `context.cascadeId` (or sets a default cascade
|
|
19
|
+
* on the adapter via {@link DOSqliteAdapter.withCascade}).
|
|
20
|
+
*
|
|
21
|
+
* - **`'per-tenant'`** — alternative for multi-tenant deployments where one
|
|
22
|
+
* tenant runs multiple cascades. Caller passes `context.tenantId`.
|
|
23
|
+
*
|
|
24
|
+
* Custom strategies are accepted as a `(ctx) => string` callback for
|
|
25
|
+
* deployments with their own routing logic (e.g., per-day shards, per-type
|
|
26
|
+
* shards, hash-based shards).
|
|
27
|
+
*
|
|
28
|
+
* ## Constraints (from ADR-0003)
|
|
29
|
+
*
|
|
30
|
+
* - **Per-DO 10GB SQLite limit** — declared via
|
|
31
|
+
* {@link DOSqliteAdapter.maxStorageBytes}. Cascade write strategy
|
|
32
|
+
* (`aip-g1i9`) consults this when fanning out.
|
|
33
|
+
* - **No native vector support** — Tier 4 is sidecared via Cloudflare
|
|
34
|
+
* Vectorize. Pass a `vectorize: VectorizeIndexLike` binding to the
|
|
35
|
+
* constructor and the adapter declares the capability with
|
|
36
|
+
* `implementation: 'sidecar'`. Without it, the capability is
|
|
37
|
+
* `undefined` and `vectorSearch()` throws
|
|
38
|
+
* {@link VectorSearchUnavailableError}.
|
|
39
|
+
* - **Hard to query across DOs** — Tier 3 analytics declared as `false`
|
|
40
|
+
* for all sub-fields. Cross-cascade analytics is the dual-write path
|
|
41
|
+
* (DO → Pipelines → Iceberg → ClickHouse), which is `aip-0ypt`'s concern.
|
|
42
|
+
*
|
|
43
|
+
* ## Wire protocol
|
|
44
|
+
*
|
|
45
|
+
* The adapter speaks to {@link DatabaseDO} via its existing fetch routes
|
|
46
|
+
* (`/data`, `/rels`, `/query/*`, `/traverse`). This keeps the DO surface
|
|
47
|
+
* untouched and matches the existing test infrastructure
|
|
48
|
+
* (`@cloudflare/vitest-pool-workers`).
|
|
49
|
+
*
|
|
50
|
+
* @see {@link ../docs/adr/0003-storage-strategy-pg-clickhouse-default.md}
|
|
51
|
+
* @see {@link ../docs/plans/2026-05-05-cascade-storage-execution-implementation.md} Phase 1
|
|
52
|
+
* @packageDocumentation
|
|
53
|
+
*/
|
|
54
|
+
import type { DBProvider } from './schema/provider.js';
|
|
55
|
+
import type { ListOptions, SearchOptions } from './schema/types.js';
|
|
56
|
+
import type { ProviderTierCapabilities, DBProviderSVO, SVOAction, ActionQuery, VerbDefinitionInput, VerbRecord, VectorSearchPort, VectorSearchHit, VectorSimilarityMetric } from './db-provider-port.js';
|
|
57
|
+
/**
|
|
58
|
+
* Minimal `DurableObjectId` shape. Real Cloudflare runtime returns a
|
|
59
|
+
* brand-checked object; we only need to pass it back to `.get()`.
|
|
60
|
+
*/
|
|
61
|
+
export interface DurableObjectIdLike {
|
|
62
|
+
readonly name?: string;
|
|
63
|
+
toString(): string;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Minimal `DurableObjectStub` shape — only the `fetch` method we use.
|
|
67
|
+
*
|
|
68
|
+
* The real Cloudflare `DurableObjectStub` is a richer object; this is the
|
|
69
|
+
* subset {@link DOSqliteAdapter} requires.
|
|
70
|
+
*/
|
|
71
|
+
export interface DurableObjectStubLike {
|
|
72
|
+
fetch(input: string | Request, init?: RequestInit): Promise<Response>;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Minimal `DurableObjectNamespace` shape — only the methods this adapter uses.
|
|
76
|
+
*
|
|
77
|
+
* Defined structurally so `DOSqliteAdapter` can be unit-tested with a
|
|
78
|
+
* pure-JS mock namespace (no Miniflare required for adapter logic). For
|
|
79
|
+
* end-to-end tests against real DO SQLite, callers wire the real
|
|
80
|
+
* `env.DATABASE` namespace produced by `@cloudflare/vitest-pool-workers`.
|
|
81
|
+
*/
|
|
82
|
+
export interface DurableObjectNamespaceLike {
|
|
83
|
+
idFromName(name: string): DurableObjectIdLike;
|
|
84
|
+
idFromString?(name: string): DurableObjectIdLike;
|
|
85
|
+
newUniqueId?(): DurableObjectIdLike;
|
|
86
|
+
get(id: DurableObjectIdLike): DurableObjectStubLike;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Shape of a single Vectorize match returned by
|
|
90
|
+
* {@link VectorizeIndexLike.query}. Matches the Cloudflare runtime shape:
|
|
91
|
+
* `id` is the vector id (we map this to a Thing id), `score` is the
|
|
92
|
+
* similarity in the metric the index was created with, and `metadata`
|
|
93
|
+
* carries arbitrary fields the caller stored at insert time.
|
|
94
|
+
*/
|
|
95
|
+
export interface VectorizeMatchLike {
|
|
96
|
+
id: string;
|
|
97
|
+
score: number;
|
|
98
|
+
metadata?: Record<string, unknown>;
|
|
99
|
+
values?: number[];
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Result envelope for a Vectorize `query()` call. Cloudflare wraps
|
|
103
|
+
* matches in `{ matches: [...] }` — kept here for fidelity.
|
|
104
|
+
*/
|
|
105
|
+
export interface VectorizeQueryResultLike {
|
|
106
|
+
matches: VectorizeMatchLike[];
|
|
107
|
+
count?: number;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Minimal `VectorizeIndex` shape — the subset {@link DOSqliteAdapter}
|
|
111
|
+
* uses. Real Cloudflare bindings have more methods (insert, upsert,
|
|
112
|
+
* deleteByIds, getByIds, describe); the adapter only needs `query()`
|
|
113
|
+
* for vector search. Callers seed the index out-of-band (typically via
|
|
114
|
+
* an `insert()` call at write time, wired upstream of this adapter).
|
|
115
|
+
*/
|
|
116
|
+
export interface VectorizeIndexLike {
|
|
117
|
+
query(vector: number[], options?: {
|
|
118
|
+
topK?: number;
|
|
119
|
+
returnMetadata?: boolean | 'all' | 'indexed';
|
|
120
|
+
returnValues?: boolean;
|
|
121
|
+
filter?: Record<string, unknown>;
|
|
122
|
+
namespace?: string;
|
|
123
|
+
}): Promise<VectorizeQueryResultLike>;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Per-operation context the sharding strategy can consult to pick a DO id.
|
|
127
|
+
*
|
|
128
|
+
* The adapter populates `type` for every op (it always knows the entity
|
|
129
|
+
* type). Callers populate `cascadeId`/`tenantId`/etc. via
|
|
130
|
+
* {@link DOSqliteAdapter.withCascade}, {@link DOSqliteAdapter.withTenant},
|
|
131
|
+
* or {@link DOSqliteAdapter.withContext} before issuing operations.
|
|
132
|
+
*/
|
|
133
|
+
export interface ShardContext {
|
|
134
|
+
/** Entity type name (always present — adapter fills this). */
|
|
135
|
+
type?: string;
|
|
136
|
+
/** Cascade id for the per-cascade strategy. */
|
|
137
|
+
cascadeId?: string;
|
|
138
|
+
/** Tenant id for the per-tenant strategy. */
|
|
139
|
+
tenantId?: string;
|
|
140
|
+
/** Caller-defined free-form context for custom strategies. */
|
|
141
|
+
[key: string]: unknown;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* A sharding strategy maps a {@link ShardContext} to a DO id name.
|
|
145
|
+
*
|
|
146
|
+
* Strategies MUST be deterministic — the same context MUST yield the
|
|
147
|
+
* same id name across calls — so reads observe the writes from the same
|
|
148
|
+
* shard.
|
|
149
|
+
*/
|
|
150
|
+
export type ShardingStrategy = (ctx: ShardContext) => string;
|
|
151
|
+
/**
|
|
152
|
+
* Built-in sharding strategies. Callers can also pass any
|
|
153
|
+
* `(ctx) => string` callback.
|
|
154
|
+
*
|
|
155
|
+
* - {@link perCascade} — `ctx.cascadeId`, falling back to a default if
|
|
156
|
+
* provided to the adapter constructor. Throws if neither is set.
|
|
157
|
+
* - {@link perTenant} — `ctx.tenantId`, falling back to default. Throws if
|
|
158
|
+
* neither is set.
|
|
159
|
+
* - {@link perType} — `ctx.type` (every type gets its own DO). Useful for
|
|
160
|
+
* small/dev workloads where cascade isolation isn't yet wired.
|
|
161
|
+
* - {@link unsharded} — always `'__shared__'`. Single DO for everything.
|
|
162
|
+
* Defeats the per-cascade isolation pattern; intended for tests and
|
|
163
|
+
* tiny workloads only.
|
|
164
|
+
*/
|
|
165
|
+
export declare const ShardingStrategies: {
|
|
166
|
+
readonly perCascade: (defaultCascadeId?: string) => ShardingStrategy;
|
|
167
|
+
readonly perTenant: (defaultTenantId?: string) => ShardingStrategy;
|
|
168
|
+
readonly perType: () => ShardingStrategy;
|
|
169
|
+
readonly unsharded: () => ShardingStrategy;
|
|
170
|
+
};
|
|
171
|
+
/**
|
|
172
|
+
* Constructor options for {@link DOSqliteAdapter}.
|
|
173
|
+
*/
|
|
174
|
+
export interface DOSqliteAdapterOptions {
|
|
175
|
+
/** The DO namespace binding from a Workers environment. */
|
|
176
|
+
namespace: DurableObjectNamespaceLike;
|
|
177
|
+
/**
|
|
178
|
+
* Sharding strategy. One of the built-in strategies on
|
|
179
|
+
* {@link ShardingStrategies}, a custom `(ctx) => string`, or one of the
|
|
180
|
+
* shorthand strings:
|
|
181
|
+
*
|
|
182
|
+
* - `'per-cascade'` — equivalent to `ShardingStrategies.perCascade()`.
|
|
183
|
+
* - `'per-tenant'` — equivalent to `ShardingStrategies.perTenant()`.
|
|
184
|
+
* - `'per-type'` — equivalent to `ShardingStrategies.perType()`.
|
|
185
|
+
* - `'unsharded'` — equivalent to `ShardingStrategies.unsharded()`.
|
|
186
|
+
*
|
|
187
|
+
* Default: `'per-cascade'` (the canonical Stack B pattern).
|
|
188
|
+
*/
|
|
189
|
+
sharding?: ShardingStrategy | 'per-cascade' | 'per-tenant' | 'per-type' | 'unsharded';
|
|
190
|
+
/**
|
|
191
|
+
* A default `cascadeId` used when a strategy needs one but the
|
|
192
|
+
* per-operation context doesn't supply one. Convenience for callers
|
|
193
|
+
* that have already established a cascade scope.
|
|
194
|
+
*/
|
|
195
|
+
defaultCascadeId?: string;
|
|
196
|
+
/**
|
|
197
|
+
* A default `tenantId` used when the per-tenant strategy needs one but
|
|
198
|
+
* the per-operation context doesn't supply one.
|
|
199
|
+
*/
|
|
200
|
+
defaultTenantId?: string;
|
|
201
|
+
/**
|
|
202
|
+
* Default per-operation context merged into every op. Can be overridden
|
|
203
|
+
* per-op via {@link DOSqliteAdapter.withContext}. Useful for setting a
|
|
204
|
+
* stable `tenantId` while letting `cascadeId` rotate.
|
|
205
|
+
*/
|
|
206
|
+
defaultContext?: ShardContext;
|
|
207
|
+
/**
|
|
208
|
+
* Optional Cloudflare Vectorize binding for Tier 4 (vector search)
|
|
209
|
+
* sidecar.
|
|
210
|
+
*
|
|
211
|
+
* - **Present** — the adapter declares Tier 4 with
|
|
212
|
+
* `implementation: 'sidecar'` and routes `vectorSearch()` to the
|
|
213
|
+
* binding's `query()`. Vector ids returned by the index are looked
|
|
214
|
+
* up as Thing ids inside the resolved DO shard.
|
|
215
|
+
* - **Absent** — Tier 4 is `undefined` in capabilities, and calling
|
|
216
|
+
* `vectorSearch()` throws {@link VectorSearchUnavailableError}.
|
|
217
|
+
*
|
|
218
|
+
* Per ADR-0003, Vectorize is a per-deployment binding (cost concern;
|
|
219
|
+
* declared in `wrangler.toml`); this adapter remains structurally
|
|
220
|
+
* portable to non-Cloudflare runtimes simply by leaving the binding
|
|
221
|
+
* unconfigured.
|
|
222
|
+
*/
|
|
223
|
+
vectorize?: VectorizeIndexLike;
|
|
224
|
+
/**
|
|
225
|
+
* Vector dimensions advertised on the capability declaration when a
|
|
226
|
+
* Vectorize binding is wired. Vectorize indexes are created with a
|
|
227
|
+
* fixed dimension at provisioning time; this value is informational for
|
|
228
|
+
* the capability surface (the binding itself enforces dimension at
|
|
229
|
+
* `query()` time). Common values: 1536 (OpenAI ada-002), 768
|
|
230
|
+
* (sentence-transformers), 384 (small models).
|
|
231
|
+
*
|
|
232
|
+
* @default 1536
|
|
233
|
+
*/
|
|
234
|
+
vectorizeDimensions?: number;
|
|
235
|
+
/**
|
|
236
|
+
* Optional Vectorize namespace, prepended on every `query()` call when
|
|
237
|
+
* present. Use to scope a single index across multiple tenants/cascades
|
|
238
|
+
* by including a stable identifier (`tenantId`, `cascadeId`, ...).
|
|
239
|
+
* Mirrors the Cloudflare Vectorize `namespace` option.
|
|
240
|
+
*/
|
|
241
|
+
vectorizeNamespace?: string;
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* DO SQLite first-class adapter.
|
|
245
|
+
*
|
|
246
|
+
* Implements {@link DBProvider} (Tier 1+2), {@link DBProviderSVO} (SVO
|
|
247
|
+
* Action recording + Verb registry), and exposes
|
|
248
|
+
* {@link ProviderTierCapabilities} via the `capabilities` getter.
|
|
249
|
+
*
|
|
250
|
+
* @example Basic per-cascade usage
|
|
251
|
+
* ```ts
|
|
252
|
+
* import { DOSqliteAdapter } from 'ai-database'
|
|
253
|
+
*
|
|
254
|
+
* const adapter = new DOSqliteAdapter({
|
|
255
|
+
* namespace: env.DATABASE,
|
|
256
|
+
* sharding: 'per-cascade',
|
|
257
|
+
* defaultCascadeId: cascade.id,
|
|
258
|
+
* })
|
|
259
|
+
*
|
|
260
|
+
* // Per-op context overrides
|
|
261
|
+
* const customer = await adapter
|
|
262
|
+
* .withCascade(cascade.id)
|
|
263
|
+
* .create('Customer', undefined, { name: 'Acme' })
|
|
264
|
+
* ```
|
|
265
|
+
*
|
|
266
|
+
* @example Per-tenant strategy
|
|
267
|
+
* ```ts
|
|
268
|
+
* const adapter = new DOSqliteAdapter({
|
|
269
|
+
* namespace: env.DATABASE,
|
|
270
|
+
* sharding: 'per-tenant',
|
|
271
|
+
* defaultTenantId: 'acme',
|
|
272
|
+
* })
|
|
273
|
+
* ```
|
|
274
|
+
*
|
|
275
|
+
* @example Custom strategy
|
|
276
|
+
* ```ts
|
|
277
|
+
* const adapter = new DOSqliteAdapter({
|
|
278
|
+
* namespace: env.DATABASE,
|
|
279
|
+
* sharding: (ctx) => `${ctx.tenantId}:${ctx.cascadeId}`,
|
|
280
|
+
* })
|
|
281
|
+
* ```
|
|
282
|
+
*/
|
|
283
|
+
export declare class DOSqliteAdapter implements DBProvider, DBProviderSVO, VectorSearchPort {
|
|
284
|
+
private readonly namespace;
|
|
285
|
+
private readonly strategy;
|
|
286
|
+
private readonly shardingModel;
|
|
287
|
+
private readonly baseContext;
|
|
288
|
+
private readonly vectorize;
|
|
289
|
+
private readonly vectorizeDimensions;
|
|
290
|
+
private readonly vectorizeNamespace;
|
|
291
|
+
/**
|
|
292
|
+
* The per-DO SQLite hard cap from Cloudflare. Declared as `getter` so
|
|
293
|
+
* future Cloudflare changes to the cap can be reflected in one place.
|
|
294
|
+
* Cascade write strategy (`aip-g1i9`) consults this when sizing fan-out.
|
|
295
|
+
*/
|
|
296
|
+
readonly maxStorageBytes: number;
|
|
297
|
+
constructor(options: DOSqliteAdapterOptions);
|
|
298
|
+
/**
|
|
299
|
+
* Tier capability declaration for this adapter.
|
|
300
|
+
*
|
|
301
|
+
* Per ADR-0003:
|
|
302
|
+
* - **Sharding**: `per-cascade` (default; the enabling pattern). Switches
|
|
303
|
+
* to `partitioned-by-tenant` when constructed with `'per-tenant'` or
|
|
304
|
+
* `unsharded` when constructed with `'unsharded'`.
|
|
305
|
+
* - **Tier 3 analytics**: declared `false` across the board. Cross-DO
|
|
306
|
+
* queries are hard; aggregations are the dual-write/Iceberg path.
|
|
307
|
+
* - **Tier 4 vector search**: `undefined`. DO SQLite has no native
|
|
308
|
+
* vectors; callers wire a Vectorize sidecar (per `aip-kh9l`).
|
|
309
|
+
* - **SVO Action recording / Verb registry**: both `true`. Stored as
|
|
310
|
+
* reserved entity types (`__svo_action`, `__svo_verb`) inside each DO,
|
|
311
|
+
* matching the per-cascade isolation pattern (Action records live in
|
|
312
|
+
* the same DO as the entities they reference).
|
|
313
|
+
*/
|
|
314
|
+
get capabilities(): ProviderTierCapabilities;
|
|
315
|
+
/**
|
|
316
|
+
* Return an adapter bound to `cascadeId` for subsequent operations.
|
|
317
|
+
* Useful when the surrounding code has a stable cascade scope but the
|
|
318
|
+
* adapter was constructed without one.
|
|
319
|
+
*
|
|
320
|
+
* Returns a new bound adapter; the original is unchanged.
|
|
321
|
+
*/
|
|
322
|
+
withCascade(cascadeId: string): DOSqliteAdapter;
|
|
323
|
+
/**
|
|
324
|
+
* Return an adapter bound to `tenantId` for subsequent operations.
|
|
325
|
+
*/
|
|
326
|
+
withTenant(tenantId: string): DOSqliteAdapter;
|
|
327
|
+
/**
|
|
328
|
+
* Return an adapter bound to a free-form context. Lets callers route to
|
|
329
|
+
* a custom shard strategy without modifying the strategy itself.
|
|
330
|
+
*/
|
|
331
|
+
withContext(context: ShardContext): DOSqliteAdapter;
|
|
332
|
+
private cloneWithContext;
|
|
333
|
+
private resolveStub;
|
|
334
|
+
private doFetch;
|
|
335
|
+
private parseResponse;
|
|
336
|
+
private static normalizeEntity;
|
|
337
|
+
private static jsonInit;
|
|
338
|
+
get(type: string, id: string): Promise<Record<string, unknown> | null>;
|
|
339
|
+
list(type: string, options?: ListOptions): Promise<Record<string, unknown>[]>;
|
|
340
|
+
search(type: string, query: string, options?: SearchOptions): Promise<Record<string, unknown>[]>;
|
|
341
|
+
create(type: string, id: string | undefined, data: Record<string, unknown>): Promise<Record<string, unknown>>;
|
|
342
|
+
update(type: string, id: string, data: Record<string, unknown>): Promise<Record<string, unknown>>;
|
|
343
|
+
delete(type: string, id: string): Promise<boolean>;
|
|
344
|
+
related(type: string, id: string, relation: string): Promise<Record<string, unknown>[]>;
|
|
345
|
+
relate(fromType: string, fromId: string, relation: string, toType: string, toId: string, metadata?: {
|
|
346
|
+
matchMode?: 'exact' | 'fuzzy';
|
|
347
|
+
similarity?: number;
|
|
348
|
+
matchedType?: string;
|
|
349
|
+
}): Promise<void>;
|
|
350
|
+
unrelate(fromType: string, fromId: string, relation: string, _toType: string, toId: string): Promise<void>;
|
|
351
|
+
private actionRouteContext;
|
|
352
|
+
recordAction<T extends Record<string, unknown> = Record<string, unknown>>(input: Omit<SVOAction<T>, 'id' | 'createdAt' | 'status'> & {
|
|
353
|
+
status?: SVOAction['status'];
|
|
354
|
+
}): Promise<SVOAction<T>>;
|
|
355
|
+
queryActions<T extends Record<string, unknown> = Record<string, unknown>>(query?: ActionQuery): Promise<SVOAction<T>[]>;
|
|
356
|
+
defineVerb(def: VerbDefinitionInput): Promise<VerbRecord>;
|
|
357
|
+
getVerb(name: string): Promise<VerbRecord | null>;
|
|
358
|
+
listVerbs(): Promise<VerbRecord[]>;
|
|
359
|
+
/**
|
|
360
|
+
* Vector search via the Cloudflare Vectorize sidecar binding.
|
|
361
|
+
*
|
|
362
|
+
* - When the adapter was constructed **without** a `vectorize` binding,
|
|
363
|
+
* this throws {@link VectorSearchUnavailableError}.
|
|
364
|
+
* - When **with** a binding, the binding's `query()` is invoked with
|
|
365
|
+
* `topK = options.limit ?? 10` and `returnMetadata: true` so each hit
|
|
366
|
+
* carries enough context to reconstruct an entity. The vector id
|
|
367
|
+
* returned by Vectorize is treated as the Thing id; if the index
|
|
368
|
+
* stores the Thing's `data` in `metadata`, the result entity is
|
|
369
|
+
* composed from that — otherwise a fallback `get()` against the
|
|
370
|
+
* resolved DO shard fills in the data. Dimensions and metrics are
|
|
371
|
+
* determined by how the index was provisioned upstream; we pass the
|
|
372
|
+
* caller's `metric` through unchanged for documentation purposes
|
|
373
|
+
* (Vectorize doesn't accept a per-query metric).
|
|
374
|
+
*
|
|
375
|
+
* Frame-aware role filtering is **deferred** to a refinement bead;
|
|
376
|
+
* Vectorize's `filter` parameter could carry role-shaped metadata
|
|
377
|
+
* filters, but the wire shape needs design with how callers seed the
|
|
378
|
+
* index, which is out of scope here.
|
|
379
|
+
*/
|
|
380
|
+
vectorSearch<T extends Record<string, unknown> = Record<string, unknown>>(type: string, queryEmbedding: number[], options?: {
|
|
381
|
+
metric?: VectorSimilarityMetric;
|
|
382
|
+
limit?: number;
|
|
383
|
+
minScore?: number;
|
|
384
|
+
}): Promise<VectorSearchHit<T>[]>;
|
|
385
|
+
private static toVerbRecord;
|
|
386
|
+
}
|
|
387
|
+
/**
|
|
388
|
+
* Convenience factory: create a {@link DOSqliteAdapter}.
|
|
389
|
+
*
|
|
390
|
+
* @example
|
|
391
|
+
* ```ts
|
|
392
|
+
* import { createDOSqliteAdapter } from 'ai-database'
|
|
393
|
+
*
|
|
394
|
+
* const adapter = createDOSqliteAdapter({
|
|
395
|
+
* namespace: env.DATABASE,
|
|
396
|
+
* sharding: 'per-cascade',
|
|
397
|
+
* defaultCascadeId: cascade.id,
|
|
398
|
+
* })
|
|
399
|
+
* ```
|
|
400
|
+
*/
|
|
401
|
+
export declare function createDOSqliteAdapter(options: DOSqliteAdapterOptions): DOSqliteAdapter;
|
|
402
|
+
//# sourceMappingURL=do-sqlite-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"do-sqlite-adapter.d.ts","sourceRoot":"","sources":["../src/do-sqlite-adapter.ts"],"names":[],"mappings":"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"}
|