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.
Files changed (260) hide show
  1. package/CHANGELOG.md +35 -1
  2. package/README.md +880 -669
  3. package/dist/actions.d.ts +2 -2
  4. package/dist/actions.d.ts.map +1 -1
  5. package/dist/actions.js +1 -1
  6. package/dist/actions.js.map +1 -1
  7. package/dist/ai-promise-db.d.ts +49 -23
  8. package/dist/ai-promise-db.d.ts.map +1 -1
  9. package/dist/ai-promise-db.js +91 -63
  10. package/dist/ai-promise-db.js.map +1 -1
  11. package/dist/authorization.d.ts.map +1 -1
  12. package/dist/authorization.js +38 -30
  13. package/dist/authorization.js.map +1 -1
  14. package/dist/cascade-orchestrator.d.ts +404 -0
  15. package/dist/cascade-orchestrator.d.ts.map +1 -0
  16. package/dist/cascade-orchestrator.js +828 -0
  17. package/dist/cascade-orchestrator.js.map +1 -0
  18. package/dist/cascade-write-strategy.d.ts +584 -0
  19. package/dist/cascade-write-strategy.d.ts.map +1 -0
  20. package/dist/cascade-write-strategy.js +590 -0
  21. package/dist/cascade-write-strategy.js.map +1 -0
  22. package/dist/ch-adapter.d.ts +358 -0
  23. package/dist/ch-adapter.d.ts.map +1 -0
  24. package/dist/ch-adapter.js +929 -0
  25. package/dist/ch-adapter.js.map +1 -0
  26. package/dist/client/index.d.ts +42 -0
  27. package/dist/client/index.d.ts.map +1 -0
  28. package/dist/client/index.js +43 -0
  29. package/dist/client/index.js.map +1 -0
  30. package/dist/client.d.ts +266 -0
  31. package/dist/client.d.ts.map +1 -0
  32. package/dist/client.js +81 -0
  33. package/dist/client.js.map +1 -0
  34. package/dist/constants.d.ts +64 -1
  35. package/dist/constants.d.ts.map +1 -1
  36. package/dist/constants.js +52 -2
  37. package/dist/constants.js.map +1 -1
  38. package/dist/dataloader.d.ts +99 -0
  39. package/dist/dataloader.d.ts.map +1 -0
  40. package/dist/dataloader.js +225 -0
  41. package/dist/dataloader.js.map +1 -0
  42. package/dist/db-provider-port.d.ts +501 -0
  43. package/dist/db-provider-port.d.ts.map +1 -0
  44. package/dist/db-provider-port.js +113 -0
  45. package/dist/db-provider-port.js.map +1 -0
  46. package/dist/digital-objects-provider.d.ts +49 -0
  47. package/dist/digital-objects-provider.d.ts.map +1 -0
  48. package/dist/digital-objects-provider.js +55 -0
  49. package/dist/digital-objects-provider.js.map +1 -0
  50. package/dist/do-sqlite-adapter.d.ts +402 -0
  51. package/dist/do-sqlite-adapter.d.ts.map +1 -0
  52. package/dist/do-sqlite-adapter.js +745 -0
  53. package/dist/do-sqlite-adapter.js.map +1 -0
  54. package/dist/docs-rels/custom-types.d.ts +134 -0
  55. package/dist/docs-rels/custom-types.d.ts.map +1 -0
  56. package/dist/docs-rels/custom-types.js +70 -0
  57. package/dist/docs-rels/custom-types.js.map +1 -0
  58. package/dist/docs-rels/index.d.ts +16 -0
  59. package/dist/docs-rels/index.d.ts.map +1 -0
  60. package/dist/docs-rels/index.js +16 -0
  61. package/dist/docs-rels/index.js.map +1 -0
  62. package/dist/docs-rels/migrations/index.d.ts +30 -0
  63. package/dist/docs-rels/migrations/index.d.ts.map +1 -0
  64. package/dist/docs-rels/migrations/index.js +128 -0
  65. package/dist/docs-rels/migrations/index.js.map +1 -0
  66. package/dist/docs-rels/schema.d.ts +2961 -0
  67. package/dist/docs-rels/schema.d.ts.map +1 -0
  68. package/dist/docs-rels/schema.js +244 -0
  69. package/dist/docs-rels/schema.js.map +1 -0
  70. package/dist/durable-clickhouse.d.ts.map +1 -1
  71. package/dist/durable-clickhouse.js +16 -13
  72. package/dist/durable-clickhouse.js.map +1 -1
  73. package/dist/durable-promise.d.ts.map +1 -1
  74. package/dist/durable-promise.js +34 -15
  75. package/dist/durable-promise.js.map +1 -1
  76. package/dist/errors.d.ts +127 -0
  77. package/dist/errors.d.ts.map +1 -0
  78. package/dist/errors.js +210 -0
  79. package/dist/errors.js.map +1 -0
  80. package/dist/eventbridge.d.ts +117 -0
  81. package/dist/eventbridge.d.ts.map +1 -0
  82. package/dist/eventbridge.js +238 -0
  83. package/dist/eventbridge.js.map +1 -0
  84. package/dist/events.d.ts +2 -2
  85. package/dist/events.d.ts.map +1 -1
  86. package/dist/events.js +1 -1
  87. package/dist/events.js.map +1 -1
  88. package/dist/execution-queue.d.ts.map +1 -1
  89. package/dist/execution-queue.js +4 -5
  90. package/dist/execution-queue.js.map +1 -1
  91. package/dist/index.d.ts +35 -8
  92. package/dist/index.d.ts.map +1 -1
  93. package/dist/index.js +106 -6
  94. package/dist/index.js.map +1 -1
  95. package/dist/linguistic.d.ts +3 -108
  96. package/dist/linguistic.d.ts.map +1 -1
  97. package/dist/linguistic.js +3 -372
  98. package/dist/linguistic.js.map +1 -1
  99. package/dist/logger.d.ts +132 -0
  100. package/dist/logger.d.ts.map +1 -0
  101. package/dist/logger.js +137 -0
  102. package/dist/logger.js.map +1 -0
  103. package/dist/memory-provider.d.ts +128 -0
  104. package/dist/memory-provider.d.ts.map +1 -1
  105. package/dist/memory-provider.js +592 -257
  106. package/dist/memory-provider.js.map +1 -1
  107. package/dist/pg-adapter.d.ts +424 -0
  108. package/dist/pg-adapter.d.ts.map +1 -0
  109. package/dist/pg-adapter.js +921 -0
  110. package/dist/pg-adapter.js.map +1 -0
  111. package/dist/pipelines-iceberg-emitter.d.ts +327 -0
  112. package/dist/pipelines-iceberg-emitter.d.ts.map +1 -0
  113. package/dist/pipelines-iceberg-emitter.js +351 -0
  114. package/dist/pipelines-iceberg-emitter.js.map +1 -0
  115. package/dist/provider-capabilities.d.ts +146 -0
  116. package/dist/provider-capabilities.d.ts.map +1 -0
  117. package/dist/provider-capabilities.js +214 -0
  118. package/dist/provider-capabilities.js.map +1 -0
  119. package/dist/rdb-provider-adapter.d.ts +195 -0
  120. package/dist/rdb-provider-adapter.d.ts.map +1 -0
  121. package/dist/rdb-provider-adapter.js +291 -0
  122. package/dist/rdb-provider-adapter.js.map +1 -0
  123. package/dist/schema/cascade.d.ts +48 -17
  124. package/dist/schema/cascade.d.ts.map +1 -1
  125. package/dist/schema/cascade.js +477 -278
  126. package/dist/schema/cascade.js.map +1 -1
  127. package/dist/schema/definition-caches.d.ts +24 -0
  128. package/dist/schema/definition-caches.d.ts.map +1 -0
  129. package/dist/schema/definition-caches.js +26 -0
  130. package/dist/schema/definition-caches.js.map +1 -0
  131. package/dist/schema/dependency-graph.d.ts +21 -109
  132. package/dist/schema/dependency-graph.d.ts.map +1 -1
  133. package/dist/schema/dependency-graph.js +25 -333
  134. package/dist/schema/dependency-graph.js.map +1 -1
  135. package/dist/schema/diff.d.ts +103 -0
  136. package/dist/schema/diff.d.ts.map +1 -0
  137. package/dist/schema/diff.js +329 -0
  138. package/dist/schema/diff.js.map +1 -0
  139. package/dist/schema/entity-operations.d.ts +99 -0
  140. package/dist/schema/entity-operations.d.ts.map +1 -0
  141. package/dist/schema/entity-operations.js +818 -0
  142. package/dist/schema/entity-operations.js.map +1 -0
  143. package/dist/schema/index.d.ts +28 -34
  144. package/dist/schema/index.d.ts.map +1 -1
  145. package/dist/schema/index.js +454 -521
  146. package/dist/schema/index.js.map +1 -1
  147. package/dist/schema/migration.d.ts +205 -0
  148. package/dist/schema/migration.d.ts.map +1 -0
  149. package/dist/schema/migration.js +327 -0
  150. package/dist/schema/migration.js.map +1 -0
  151. package/dist/schema/nl-query-generator.d.ts +68 -0
  152. package/dist/schema/nl-query-generator.d.ts.map +1 -0
  153. package/dist/schema/nl-query-generator.js +362 -0
  154. package/dist/schema/nl-query-generator.js.map +1 -0
  155. package/dist/schema/nl-query.d.ts +65 -0
  156. package/dist/schema/nl-query.d.ts.map +1 -0
  157. package/dist/schema/nl-query.js +178 -0
  158. package/dist/schema/nl-query.js.map +1 -0
  159. package/dist/schema/parse.d.ts.map +1 -1
  160. package/dist/schema/parse.js +144 -89
  161. package/dist/schema/parse.js.map +1 -1
  162. package/dist/schema/provider.d.ts +37 -0
  163. package/dist/schema/provider.d.ts.map +1 -1
  164. package/dist/schema/provider.js +15 -7
  165. package/dist/schema/provider.js.map +1 -1
  166. package/dist/schema/resolve.d.ts +46 -5
  167. package/dist/schema/resolve.d.ts.map +1 -1
  168. package/dist/schema/resolve.js +237 -95
  169. package/dist/schema/resolve.js.map +1 -1
  170. package/dist/schema/search-utils.d.ts +76 -0
  171. package/dist/schema/search-utils.d.ts.map +1 -0
  172. package/dist/schema/search-utils.js +86 -0
  173. package/dist/schema/search-utils.js.map +1 -0
  174. package/dist/schema/seed.d.ts +53 -0
  175. package/dist/schema/seed.d.ts.map +1 -0
  176. package/dist/schema/seed.js +94 -0
  177. package/dist/schema/seed.js.map +1 -0
  178. package/dist/schema/semantic.d.ts +10 -0
  179. package/dist/schema/semantic.d.ts.map +1 -1
  180. package/dist/schema/semantic.js +192 -86
  181. package/dist/schema/semantic.js.map +1 -1
  182. package/dist/schema/sub-apis.d.ts +52 -0
  183. package/dist/schema/sub-apis.d.ts.map +1 -0
  184. package/dist/schema/sub-apis.js +216 -0
  185. package/dist/schema/sub-apis.js.map +1 -0
  186. package/dist/schema/system-entities.d.ts +42 -0
  187. package/dist/schema/system-entities.d.ts.map +1 -0
  188. package/dist/schema/system-entities.js +101 -0
  189. package/dist/schema/system-entities.js.map +1 -0
  190. package/dist/schema/types.d.ts +91 -9
  191. package/dist/schema/types.d.ts.map +1 -1
  192. package/dist/schema/union-fallback.d.ts.map +1 -1
  193. package/dist/schema/union-fallback.js +21 -15
  194. package/dist/schema/union-fallback.js.map +1 -1
  195. package/dist/schema/value-generators/ai.d.ts +54 -0
  196. package/dist/schema/value-generators/ai.d.ts.map +1 -0
  197. package/dist/schema/value-generators/ai.js +136 -0
  198. package/dist/schema/value-generators/ai.js.map +1 -0
  199. package/dist/schema/value-generators/index.d.ts +126 -0
  200. package/dist/schema/value-generators/index.d.ts.map +1 -0
  201. package/dist/schema/value-generators/index.js +219 -0
  202. package/dist/schema/value-generators/index.js.map +1 -0
  203. package/dist/schema/value-generators/placeholder.d.ts +52 -0
  204. package/dist/schema/value-generators/placeholder.d.ts.map +1 -0
  205. package/dist/schema/value-generators/placeholder.js +328 -0
  206. package/dist/schema/value-generators/placeholder.js.map +1 -0
  207. package/dist/schema/value-generators/types.d.ts +116 -0
  208. package/dist/schema/value-generators/types.d.ts.map +1 -0
  209. package/dist/schema/value-generators/types.js +11 -0
  210. package/dist/schema/value-generators/types.js.map +1 -0
  211. package/dist/schema/version.d.ts +111 -0
  212. package/dist/schema/version.d.ts.map +1 -0
  213. package/dist/schema/version.js +190 -0
  214. package/dist/schema/version.js.map +1 -0
  215. package/dist/schema.d.ts +1095 -24
  216. package/dist/schema.d.ts.map +1 -1
  217. package/dist/schema.js +2852 -40
  218. package/dist/schema.js.map +1 -1
  219. package/dist/semantic-vectors.d.ts +39 -0
  220. package/dist/semantic-vectors.d.ts.map +1 -0
  221. package/dist/semantic-vectors.js +334 -0
  222. package/dist/semantic-vectors.js.map +1 -0
  223. package/dist/semantic.d.ts +29 -1
  224. package/dist/semantic.d.ts.map +1 -1
  225. package/dist/semantic.js +26 -16
  226. package/dist/semantic.js.map +1 -1
  227. package/dist/telemetry.d.ts +128 -0
  228. package/dist/telemetry.d.ts.map +1 -0
  229. package/dist/telemetry.js +305 -0
  230. package/dist/telemetry.js.map +1 -0
  231. package/dist/tests.d.ts.map +1 -1
  232. package/dist/tests.js +30 -22
  233. package/dist/tests.js.map +1 -1
  234. package/dist/type-guards.d.ts +50 -5
  235. package/dist/type-guards.d.ts.map +1 -1
  236. package/dist/type-guards.js +87 -16
  237. package/dist/type-guards.js.map +1 -1
  238. package/dist/types.d.ts +33 -245
  239. package/dist/types.d.ts.map +1 -1
  240. package/dist/types.js +62 -72
  241. package/dist/types.js.map +1 -1
  242. package/dist/validation.d.ts +2 -5
  243. package/dist/validation.d.ts.map +1 -1
  244. package/dist/validation.js +65 -93
  245. package/dist/validation.js.map +1 -1
  246. package/dist/worker/db-provider.d.ts +168 -0
  247. package/dist/worker/db-provider.d.ts.map +1 -0
  248. package/dist/worker/db-provider.js +277 -0
  249. package/dist/worker/db-provider.js.map +1 -0
  250. package/dist/worker/index.d.ts +35 -0
  251. package/dist/worker/index.d.ts.map +1 -0
  252. package/dist/worker/index.js +37 -0
  253. package/dist/worker/index.js.map +1 -0
  254. package/dist/worker.d.ts +779 -0
  255. package/dist/worker.d.ts.map +1 -0
  256. package/dist/worker.js +2786 -0
  257. package/dist/worker.js.map +1 -0
  258. package/package.json +46 -16
  259. package/src/docs-rels/migrations/0001-init.sql +125 -0
  260. 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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"}