@abloatai/ablo 0.34.1 → 0.36.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 (536) hide show
  1. package/AGENTS.md +2 -1
  2. package/CHANGELOG.md +758 -5
  3. package/README.md +56 -502
  4. package/bin/ablo.cjs +39 -0
  5. package/dist/BaseSyncedStore.d.ts +176 -48
  6. package/dist/BaseSyncedStore.js +346 -214
  7. package/dist/Database.d.ts +17 -44
  8. package/dist/Database.js +96 -79
  9. package/dist/InstanceCache.d.ts +31 -6
  10. package/dist/InstanceCache.js +65 -30
  11. package/dist/LazyReferenceCollection.d.ts +3 -3
  12. package/dist/LazyReferenceCollection.js +4 -4
  13. package/dist/Model.d.ts +23 -13
  14. package/dist/Model.js +27 -17
  15. package/dist/ModelRegistry.d.ts +8 -4
  16. package/dist/ModelRegistry.js +20 -18
  17. package/dist/NetworkMonitor.d.ts +3 -1
  18. package/dist/NetworkMonitor.js +7 -5
  19. package/dist/{SyncEngineContext.d.ts → RuntimeContext.d.ts} +20 -13
  20. package/dist/{SyncEngineContext.js → RuntimeContext.js} +11 -12
  21. package/dist/SyncClient.d.ts +47 -47
  22. package/dist/SyncClient.js +215 -156
  23. package/dist/ai-sdk/coordinatedTool.d.ts +2 -2
  24. package/dist/ai-sdk/coordinatedTool.js +1 -1
  25. package/dist/ai-sdk/coordinationContext.d.ts +2 -2
  26. package/dist/ai-sdk/coordinationContext.js +1 -1
  27. package/dist/ai-sdk/wrap.d.ts +3 -3
  28. package/dist/ai-sdk/wrap.js +2 -2
  29. package/dist/auth/index.d.ts +1 -156
  30. package/dist/auth/index.js +8 -301
  31. package/dist/client/Ablo.d.ts +42 -287
  32. package/dist/client/Ablo.js +129 -963
  33. package/dist/client/abloClient.d.ts +309 -0
  34. package/dist/client/abloClient.js +13 -0
  35. package/dist/client/clientPrelude.d.ts +52 -0
  36. package/dist/client/clientPrelude.js +60 -0
  37. package/dist/client/consoleLogger.d.ts +2 -2
  38. package/dist/client/coreClient.d.ts +60 -0
  39. package/dist/client/coreClient.js +118 -0
  40. package/dist/client/createInternalComponents.d.ts +8 -4
  41. package/dist/client/createInternalComponents.js +17 -10
  42. package/dist/client/createModelProxy.d.ts +98 -373
  43. package/dist/client/createModelProxy.js +233 -139
  44. package/dist/client/humans.d.ts +69 -0
  45. package/dist/client/humans.js +78 -0
  46. package/dist/client/modelRegistration.d.ts +1 -1
  47. package/dist/client/modelRegistration.js +9 -9
  48. package/dist/client/options.d.ts +73 -17
  49. package/dist/client/reactiveEngine.d.ts +53 -0
  50. package/dist/client/reactiveEngine.js +688 -0
  51. package/dist/client/resourceTypes.d.ts +9 -250
  52. package/dist/client/resourceTypes.js +8 -5
  53. package/dist/client/schemaConfig.d.ts +4 -4
  54. package/dist/client/schemaConfig.js +6 -2
  55. package/dist/client/storeCluster.d.ts +47 -0
  56. package/dist/client/storeCluster.js +118 -0
  57. package/dist/client/storeLifecycle.d.ts +61 -0
  58. package/dist/client/storeLifecycle.js +231 -0
  59. package/dist/client/validateAbloOptions.d.ts +3 -2
  60. package/dist/client/validateAbloOptions.js +1 -1
  61. package/dist/client/wsMutationExecutor.d.ts +3 -3
  62. package/dist/client/wsMutationExecutor.js +3 -3
  63. package/dist/context.d.ts +22 -9
  64. package/dist/context.js +33 -9
  65. package/dist/coordination/ClaimLog.d.ts +26 -0
  66. package/dist/coordination/ClaimLog.js +32 -0
  67. package/dist/coordination/index.d.ts +1 -15
  68. package/dist/coordination/index.js +8 -31
  69. package/dist/core/index.d.ts +3 -3
  70. package/dist/core/index.js +2 -2
  71. package/dist/docs/catalog.d.ts +72 -0
  72. package/dist/docs/catalog.js +230 -0
  73. package/dist/docs/index.d.ts +10 -0
  74. package/dist/docs/index.js +10 -0
  75. package/dist/environment.d.ts +1 -40
  76. package/dist/environment.js +8 -37
  77. package/dist/index.d.ts +44 -36
  78. package/dist/index.js +30 -22
  79. package/dist/interfaces/index.d.ts +44 -134
  80. package/dist/keys/index.d.ts +1 -77
  81. package/dist/keys/index.js +8 -190
  82. package/dist/mutators/{RecordingTransaction.d.ts → RecordingMutation.d.ts} +4 -4
  83. package/dist/mutators/{RecordingTransaction.js → RecordingMutation.js} +2 -2
  84. package/dist/mutators/Transaction.d.ts +1 -1
  85. package/dist/mutators/Transaction.js +1 -1
  86. package/dist/mutators/UndoManager.d.ts +6 -6
  87. package/dist/mutators/UndoManager.js +5 -5
  88. package/dist/mutators/defineMutators.d.ts +3 -3
  89. package/dist/mutators/defineMutators.js +1 -1
  90. package/dist/mutators/inverseOp.js +2 -2
  91. package/dist/mutators/mutateActions.d.ts +3 -3
  92. package/dist/mutators/mutateActions.js +1 -1
  93. package/dist/mutators/readerActions.d.ts +1 -1
  94. package/dist/mutators/undoApply.d.ts +1 -1
  95. package/dist/mutators/undoApply.js +1 -1
  96. package/dist/policy/index.d.ts +2 -2
  97. package/dist/policy/index.js +1 -1
  98. package/dist/query/client.d.ts +5 -2
  99. package/dist/query/client.js +10 -9
  100. package/dist/query/types.d.ts +6 -41
  101. package/dist/query/types.js +2 -2
  102. package/dist/react/AbloProvider.d.ts +18 -8
  103. package/dist/react/AbloProvider.js +10 -9
  104. package/dist/react/context.d.ts +3 -3
  105. package/dist/react/context.js +1 -1
  106. package/dist/react/createAbloReact.d.ts +56 -0
  107. package/dist/react/createAbloReact.js +51 -0
  108. package/dist/react/index.d.ts +6 -5
  109. package/dist/react/index.js +6 -3
  110. package/dist/react/internalContext.d.ts +1 -1
  111. package/dist/react/useAblo.d.ts +12 -5
  112. package/dist/react/useAblo.js +26 -8
  113. package/dist/react/useCurrentUserId.js +1 -1
  114. package/dist/react/useErrorListener.js +1 -1
  115. package/dist/react/useMutationFailureListener.d.ts +2 -2
  116. package/dist/react/useMutationFailureListener.js +1 -1
  117. package/dist/react/useMutators.d.ts +3 -3
  118. package/dist/react/useMutators.js +3 -3
  119. package/dist/react/useUndoScope.d.ts +5 -5
  120. package/dist/react/useUndoScope.js +1 -1
  121. package/dist/schema/coordination.d.ts +69 -10
  122. package/dist/schema/coordination.js +90 -9
  123. package/dist/schema/ddl.js +2 -2
  124. package/dist/schema/diff.d.ts +1 -1
  125. package/dist/schema/generate.js +1 -1
  126. package/dist/schema/index.d.ts +11 -10
  127. package/dist/schema/index.js +22 -18
  128. package/dist/schema/queries.d.ts +27 -27
  129. package/dist/schema/queries.js +23 -23
  130. package/dist/schema/select.d.ts +3 -3
  131. package/dist/schema/select.js +6 -3
  132. package/dist/schema/serialize.d.ts +15 -6
  133. package/dist/schema/serialize.js +20 -3
  134. package/dist/schema/sugar.d.ts +6 -7
  135. package/dist/schema/sugar.js +9 -12
  136. package/dist/schema/syncDeltaRow.d.ts +4 -152
  137. package/dist/schema/syncDeltaRow.js +4 -105
  138. package/dist/server/adapter.d.ts +18 -1
  139. package/dist/server/commit.d.ts +10 -16
  140. package/dist/server/index.d.ts +1 -1
  141. package/dist/server/index.js +1 -1
  142. package/dist/server/readConfig.d.ts +1 -1
  143. package/dist/source/adapter.d.ts +7 -5
  144. package/dist/source/adapter.js +7 -5
  145. package/dist/source/adapters/drizzle.d.ts +1 -1
  146. package/dist/source/adapters/drizzle.js +2 -2
  147. package/dist/source/adapters/kysely.d.ts +1 -1
  148. package/dist/source/adapters/kysely.js +1 -1
  149. package/dist/source/adapters/kyselyMutationCore.d.ts +1 -1
  150. package/dist/source/adapters/kyselyMutationCore.js +2 -2
  151. package/dist/source/adapters/memory.js +1 -1
  152. package/dist/source/adapters/prisma.d.ts +8 -3
  153. package/dist/source/adapters/prisma.js +1 -1
  154. package/dist/source/connector.js +1 -1
  155. package/dist/source/connectorProtocol.d.ts +2 -8
  156. package/dist/source/connectorProtocol.js +3 -2
  157. package/dist/source/contract.d.ts +29 -17
  158. package/dist/source/contract.js +27 -22
  159. package/dist/source/factory.d.ts +1 -1
  160. package/dist/source/idempotency.js +2 -2
  161. package/dist/source/index.d.ts +1 -0
  162. package/dist/source/index.js +3 -0
  163. package/dist/source/next.d.ts +1 -1
  164. package/dist/source/signing.d.ts +9 -2
  165. package/dist/source/signing.js +4 -1
  166. package/dist/source/types.d.ts +6 -4
  167. package/dist/source/types.js +1 -1
  168. package/dist/{core/storeContract.d.ts → storeContract.d.ts} +6 -6
  169. package/dist/{core → stores}/DatabaseManager.d.ts +3 -1
  170. package/dist/{core → stores}/DatabaseManager.js +14 -13
  171. package/dist/stores/ObjectStore.d.ts +1 -1
  172. package/dist/{core → stores}/StoreManager.d.ts +9 -26
  173. package/dist/{core → stores}/StoreManager.js +29 -77
  174. package/dist/stores/SyncActionStore.d.ts +4 -2
  175. package/dist/stores/SyncActionStore.js +11 -17
  176. package/dist/stores/syncAction.d.ts +26 -0
  177. package/dist/stores/syncAction.js +16 -0
  178. package/dist/surface.d.ts +3 -3
  179. package/dist/surface.js +6 -4
  180. package/dist/sync/BootstrapFetcher.d.ts +127 -6
  181. package/dist/sync/BootstrapFetcher.js +511 -83
  182. package/dist/sync/ConnectionManager.d.ts +6 -198
  183. package/dist/sync/ConnectionManager.js +6 -677
  184. package/dist/sync/OnDemandLoader.d.ts +5 -2
  185. package/dist/sync/OnDemandLoader.js +61 -21
  186. package/dist/sync/SubscriptionManager.d.ts +13 -2
  187. package/dist/sync/SubscriptionManager.js +23 -5
  188. package/dist/sync/SyncWebSocket.d.ts +27 -510
  189. package/dist/sync/SyncWebSocket.js +76 -954
  190. package/dist/sync/awaitClaimGrant.d.ts +4 -44
  191. package/dist/sync/awaitClaimGrant.js +4 -109
  192. package/dist/sync/bootstrapApply.d.ts +3 -0
  193. package/dist/sync/bootstrapApply.js +2 -2
  194. package/dist/sync/commitFrames.d.ts +6 -40
  195. package/dist/sync/commitFrames.js +6 -97
  196. package/dist/sync/contextPorts.d.ts +18 -0
  197. package/dist/sync/contextPorts.js +31 -0
  198. package/dist/sync/createClaimStream.d.ts +5 -49
  199. package/dist/sync/createClaimStream.js +5 -469
  200. package/dist/sync/createPresenceStream.d.ts +26 -4
  201. package/dist/sync/createPresenceStream.js +28 -20
  202. package/dist/sync/createSnapshot.d.ts +2 -2
  203. package/dist/sync/createSnapshot.js +1 -1
  204. package/dist/sync/credentialLifecycle.d.ts +5 -173
  205. package/dist/sync/credentialLifecycle.js +5 -320
  206. package/dist/sync/deltaPipeline.d.ts +13 -12
  207. package/dist/sync/deltaPipeline.js +21 -4
  208. package/dist/sync/groupChange.d.ts +3 -0
  209. package/dist/sync/groupChange.js +16 -14
  210. package/dist/sync/participants.d.ts +24 -6
  211. package/dist/sync/participants.js +32 -23
  212. package/dist/sync/schemaDrift.d.ts +55 -0
  213. package/dist/sync/schemaDrift.js +53 -0
  214. package/dist/sync/schemas.d.ts +23 -33
  215. package/dist/sync/schemas.js +29 -20
  216. package/dist/sync/syncPlan.d.ts +3 -3
  217. package/dist/sync/wsFrameHandlers.d.ts +6 -114
  218. package/dist/sync/wsFrameHandlers.js +6 -392
  219. package/dist/syncLog/contract.d.ts +20 -0
  220. package/dist/syncLog/contract.js +19 -0
  221. package/dist/syncLog/index.d.ts +1 -0
  222. package/dist/syncLog/index.js +1 -0
  223. package/dist/transaction/ablo.d.ts +88 -0
  224. package/dist/transaction/ablo.js +33 -0
  225. package/dist/{client/auth.d.ts → transaction/auth/apiKey.d.ts} +43 -8
  226. package/dist/{client/auth.js → transaction/auth/apiKey.js} +19 -0
  227. package/dist/transaction/auth/bootstrapScope.d.ts +15 -0
  228. package/dist/transaction/auth/bootstrapScope.js +1 -0
  229. package/dist/transaction/auth/capability.d.ts +212 -0
  230. package/dist/transaction/auth/capability.js +224 -0
  231. package/dist/{auth → transaction/auth}/credentialSource.d.ts +8 -1
  232. package/dist/{client → transaction/auth}/identity.d.ts +8 -7
  233. package/dist/{client → transaction/auth}/identity.js +1 -1
  234. package/dist/transaction/auth/index.d.ts +162 -0
  235. package/dist/transaction/auth/index.js +304 -0
  236. package/dist/{auth → transaction/auth}/schemas.d.ts +1 -1
  237. package/dist/{auth → transaction/auth}/schemas.js +13 -13
  238. package/dist/{client → transaction/auth}/sessionMint.d.ts +8 -8
  239. package/dist/{client → transaction/auth}/sessionMint.js +4 -7
  240. package/dist/transaction/coordination/awaitClaimGrant.d.ts +56 -0
  241. package/dist/transaction/coordination/awaitClaimGrant.js +124 -0
  242. package/dist/{client → transaction/coordination}/claimHeartbeatLoop.d.ts +34 -0
  243. package/dist/{client → transaction/coordination}/claimHeartbeatLoop.js +20 -0
  244. package/dist/transaction/coordination/claimMeta.d.ts +49 -0
  245. package/dist/transaction/coordination/claimMeta.js +52 -0
  246. package/dist/transaction/coordination/createClaimStream.d.ts +64 -0
  247. package/dist/transaction/coordination/createClaimStream.js +475 -0
  248. package/dist/transaction/coordination/events.d.ts +74 -0
  249. package/dist/transaction/coordination/events.js +7 -0
  250. package/dist/transaction/coordination/index.d.ts +19 -0
  251. package/dist/transaction/coordination/index.js +45 -0
  252. package/dist/transaction/coordination/locator.d.ts +104 -0
  253. package/dist/transaction/coordination/locator.js +102 -0
  254. package/dist/transaction/coordination/schema.d.ts +1536 -0
  255. package/dist/transaction/coordination/schema.js +1177 -0
  256. package/dist/transaction/coordination/targetConflict.d.ts +2 -0
  257. package/dist/transaction/coordination/targetConflict.js +107 -0
  258. package/dist/{coordination → transaction/coordination}/trace.d.ts +7 -18
  259. package/dist/{coordination → transaction/coordination}/trace.js +18 -25
  260. package/dist/transaction/durableWrites.d.ts +62 -0
  261. package/dist/{client → transaction}/durableWrites.js +28 -3
  262. package/dist/transaction/environment.d.ts +105 -0
  263. package/dist/transaction/environment.js +108 -0
  264. package/dist/{errorCodes.d.ts → transaction/errorCodes.d.ts} +12 -12
  265. package/dist/{errorCodes.js → transaction/errorCodes.js} +45 -18
  266. package/dist/{errors.d.ts → transaction/errors.d.ts} +37 -13
  267. package/dist/{errors.js → transaction/errors.js} +85 -16
  268. package/dist/transaction/footprint.d.ts +111 -0
  269. package/dist/transaction/footprint.js +0 -0
  270. package/dist/transaction/index.d.ts +20 -0
  271. package/dist/transaction/index.js +20 -0
  272. package/dist/transaction/keys/index.d.ts +87 -0
  273. package/dist/transaction/keys/index.js +207 -0
  274. package/dist/transaction/log/syncDeltaRow.d.ts +158 -0
  275. package/dist/transaction/log/syncDeltaRow.js +95 -0
  276. package/dist/{sync/syncPosition.d.ts → transaction/logPosition.d.ts} +22 -8
  277. package/dist/{sync/syncPosition.js → transaction/logPosition.js} +15 -6
  278. package/dist/transaction/logger.d.ts +16 -0
  279. package/dist/transaction/logger.js +7 -0
  280. package/dist/transaction/observability.d.ts +53 -0
  281. package/dist/transaction/observability.js +19 -0
  282. package/dist/transaction/plugin.d.ts +285 -0
  283. package/dist/transaction/plugin.js +106 -0
  284. package/dist/{policy → transaction/policy}/types.d.ts +3 -3
  285. package/dist/{policy → transaction/policy}/types.js +2 -0
  286. package/dist/transaction/resources/httpResources.d.ts +321 -0
  287. package/dist/transaction/resources/httpResources.js +7 -0
  288. package/dist/transaction/resources/modelOperations.d.ts +427 -0
  289. package/dist/transaction/resources/modelOperations.js +12 -0
  290. package/dist/transaction/resources/mutationOptions.d.ts +66 -0
  291. package/dist/transaction/resources/mutationOptions.js +9 -0
  292. package/dist/transaction/resources/where.d.ts +101 -0
  293. package/dist/transaction/resources/where.js +115 -0
  294. package/dist/{client → transaction/resources}/writeOptionsSchema.d.ts +2 -6
  295. package/dist/{client → transaction/resources}/writeOptionsSchema.js +9 -5
  296. package/dist/{schema → transaction/schema}/field.d.ts +17 -23
  297. package/dist/{schema → transaction/schema}/field.js +5 -5
  298. package/dist/transaction/schema/fieldRef.d.ts +38 -0
  299. package/dist/transaction/schema/fieldRef.js +11 -0
  300. package/dist/transaction/schema/loadStrategy.d.ts +45 -0
  301. package/dist/transaction/schema/loadStrategy.js +46 -0
  302. package/dist/{schema → transaction/schema}/model.d.ts +50 -35
  303. package/dist/{schema → transaction/schema}/model.js +30 -20
  304. package/dist/transaction/schema/openapi.d.ts +58 -0
  305. package/dist/transaction/schema/openapi.js +501 -0
  306. package/dist/{schema → transaction/schema}/relation.d.ts +21 -16
  307. package/dist/{schema → transaction/schema}/relation.js +7 -7
  308. package/dist/{schema → transaction/schema}/residency.d.ts +0 -9
  309. package/dist/{schema → transaction/schema}/residency.js +0 -5
  310. package/dist/{schema → transaction/schema}/roles.d.ts +5 -5
  311. package/dist/{schema → transaction/schema}/roles.js +5 -5
  312. package/dist/{schema → transaction/schema}/schema.d.ts +39 -10
  313. package/dist/{schema → transaction/schema}/schema.js +24 -3
  314. package/dist/{schema → transaction/schema}/tenancy.d.ts +1 -1
  315. package/dist/{schema → transaction/schema}/tenancy.js +7 -4
  316. package/dist/transaction/transactionLayer.d.ts +82 -0
  317. package/dist/transaction/transactionLayer.js +24 -0
  318. package/dist/{transactions → transaction/transactions/settlement}/commitEnvelope.d.ts +5 -6
  319. package/dist/{transactions → transaction/transactions/settlement}/commitEnvelope.js +9 -13
  320. package/dist/{transactions → transaction/transactions/settlement}/httpCommitEnvelope.d.ts +9 -2
  321. package/dist/{transactions → transaction/transactions/settlement}/httpCommitEnvelope.js +5 -9
  322. package/dist/{transactions/durableWriteStore.d.ts → transaction/transactions/settlement/pendingWrite.d.ts} +11 -37
  323. package/dist/transaction/transactions/settlement/pendingWrite.js +20 -0
  324. package/dist/transaction/transport/commitFrames.d.ts +90 -0
  325. package/dist/transaction/transport/commitFrames.js +134 -0
  326. package/dist/transaction/transport/connectionManager.d.ts +215 -0
  327. package/dist/transaction/transport/connectionManager.js +673 -0
  328. package/dist/transaction/transport/credentialLifecycle.d.ts +177 -0
  329. package/dist/transaction/transport/credentialLifecycle.js +324 -0
  330. package/dist/{sync → transaction/transport}/heartbeat.d.ts +3 -1
  331. package/dist/{sync → transaction/transport}/heartbeat.js +6 -4
  332. package/dist/transaction/transport/httpClient.d.ts +131 -0
  333. package/dist/{client → transaction/transport}/httpClient.js +6 -5
  334. package/dist/transaction/transport/httpOptions.d.ts +33 -0
  335. package/dist/transaction/transport/httpOptions.js +12 -0
  336. package/dist/{client → transaction/transport}/httpTransport.js +295 -97
  337. package/dist/{sync/NetworkProbe.d.ts → transaction/transport/networkProbe.d.ts} +7 -4
  338. package/dist/{sync/NetworkProbe.js → transaction/transport/networkProbe.js} +14 -13
  339. package/dist/transaction/transport/wsFrameHandlers.d.ts +128 -0
  340. package/dist/transaction/transport/wsFrameHandlers.js +429 -0
  341. package/dist/transaction/transport/wsTransport.d.ts +574 -0
  342. package/dist/transaction/transport/wsTransport.js +1023 -0
  343. package/dist/transaction/types/assertExact.d.ts +17 -0
  344. package/dist/transaction/types/assertExact.js +1 -0
  345. package/dist/{types → transaction/types}/global.d.ts +17 -2
  346. package/dist/{types → transaction/types}/global.js +2 -1
  347. package/dist/{types → transaction/types}/index.d.ts +14 -46
  348. package/dist/{types → transaction/types}/index.js +7 -16
  349. package/dist/{types → transaction/types}/streams.d.ts +73 -45
  350. package/dist/transaction/utils/duration.d.ts +50 -0
  351. package/dist/{utils → transaction/utils}/duration.js +32 -0
  352. package/dist/{utils → transaction/utils}/json.d.ts +18 -0
  353. package/dist/transaction/utils/json.js +276 -0
  354. package/dist/transaction/wire/accountResponses.d.ts +420 -0
  355. package/dist/transaction/wire/accountResponses.js +290 -0
  356. package/dist/transaction/wire/auth.d.ts +56 -0
  357. package/dist/transaction/wire/auth.js +63 -0
  358. package/dist/transaction/wire/claimEvent.d.ts +76 -0
  359. package/dist/transaction/wire/claimEvent.js +73 -0
  360. package/dist/transaction/wire/claims.d.ts +530 -0
  361. package/dist/transaction/wire/claims.js +327 -0
  362. package/dist/{wire → transaction/wire}/commit.d.ts +125 -193
  363. package/dist/{wire → transaction/wire}/commit.js +68 -47
  364. package/dist/{wire → transaction/wire}/delta.d.ts +66 -17
  365. package/dist/{wire → transaction/wire}/delta.js +37 -13
  366. package/dist/transaction/wire/errorEnvelope.d.ts +72 -0
  367. package/dist/{wire → transaction/wire}/errorEnvelope.js +36 -5
  368. package/dist/transaction/wire/feedCursor.d.ts +60 -0
  369. package/dist/transaction/wire/feedCursor.js +82 -0
  370. package/dist/transaction/wire/feedEvent.d.ts +204 -0
  371. package/dist/transaction/wire/feedEvent.js +65 -0
  372. package/dist/transaction/wire/frames.d.ts +194 -0
  373. package/dist/transaction/wire/frames.js +50 -0
  374. package/dist/transaction/wire/inboundFrames.d.ts +562 -0
  375. package/dist/transaction/wire/inboundFrames.js +116 -0
  376. package/dist/transaction/wire/index.d.ts +54 -0
  377. package/dist/transaction/wire/index.js +83 -0
  378. package/dist/{wire → transaction/wire}/listEnvelope.d.ts +13 -14
  379. package/dist/transaction/wire/listEnvelope.js +42 -0
  380. package/dist/transaction/wire/modelMutations.d.ts +31 -0
  381. package/dist/transaction/wire/modelMutations.js +52 -0
  382. package/dist/transaction/wire/modelResponses.d.ts +85 -0
  383. package/dist/transaction/wire/modelResponses.js +43 -0
  384. package/dist/transaction/wire/modelShape.d.ts +78 -0
  385. package/dist/transaction/wire/modelShape.js +74 -0
  386. package/dist/transactions/{TransactionQueue.d.ts → mutations/MutationQueue.d.ts} +85 -38
  387. package/dist/transactions/{TransactionQueue.js → mutations/MutationQueue.js} +141 -80
  388. package/dist/transactions/{TransactionStore.d.ts → mutations/MutationStore.d.ts} +8 -8
  389. package/dist/transactions/{TransactionStore.js → mutations/MutationStore.js} +2 -2
  390. package/dist/transactions/{coalesceRules.d.ts → mutations/coalesceRules.d.ts} +10 -10
  391. package/dist/transactions/{coalesceRules.js → mutations/coalesceRules.js} +1 -1
  392. package/dist/transactions/mutations/commitLatency.d.ts +52 -0
  393. package/dist/transactions/mutations/commitLatency.js +130 -0
  394. package/dist/transactions/{commitOutboxStore.d.ts → mutations/commitOutboxStore.d.ts} +1 -5
  395. package/dist/transactions/{commitOutboxStore.js → mutations/commitOutboxStore.js} +1 -1
  396. package/dist/transactions/{commitPayload.d.ts → mutations/commitPayload.d.ts} +18 -16
  397. package/dist/transactions/{commitPayload.js → mutations/commitPayload.js} +15 -15
  398. package/dist/transactions/{deltaConfirmation.d.ts → mutations/deltaConfirmation.d.ts} +15 -11
  399. package/dist/transactions/{deltaConfirmation.js → mutations/deltaConfirmation.js} +14 -12
  400. package/dist/transactions/mutations/durableWriteStore.d.ts +14 -0
  401. package/dist/transactions/mutations/durableWriteStore.js +12 -0
  402. package/dist/transactions/{optimisticApply.d.ts → mutations/optimisticApply.d.ts} +7 -7
  403. package/dist/transactions/{replayValidation.d.ts → mutations/replayValidation.d.ts} +4 -3
  404. package/dist/transactions/{replayValidation.js → mutations/replayValidation.js} +7 -5
  405. package/dist/utils/mobxSetup.d.ts +1 -1
  406. package/dist/utils/mobxSetup.js +5 -2
  407. package/dist/{core → views}/QueryView.d.ts +2 -2
  408. package/dist/{core → views}/QueryView.js +2 -2
  409. package/dist/{core → views}/ViewRegistry.d.ts +1 -1
  410. package/dist/{core/queryUtils.d.ts → views/incrementalView.d.ts} +6 -6
  411. package/dist/{core/queryUtils.js → views/incrementalView.js} +6 -6
  412. package/dist/webhooks/events.d.ts +2 -2
  413. package/dist/wire/index.d.ts +1 -34
  414. package/dist/wire/index.js +8 -49
  415. package/docs/agent-messaging.md +3 -3
  416. package/docs/agents.md +20 -13
  417. package/docs/api-keys.md +14 -10
  418. package/docs/api.md +27 -61
  419. package/docs/audit.md +6 -3
  420. package/docs/cli.md +41 -13
  421. package/docs/client-behavior.md +11 -9
  422. package/docs/concurrency-convention.md +49 -57
  423. package/docs/coordination.md +283 -121
  424. package/docs/data-sources.md +7 -5
  425. package/docs/debugging.md +39 -15
  426. package/docs/deployment.md +267 -0
  427. package/docs/examples/agent-human.md +49 -42
  428. package/docs/examples/ai-sdk-tool.md +69 -44
  429. package/docs/examples/existing-python-backend.md +8 -6
  430. package/docs/examples/nextjs.md +129 -47
  431. package/docs/examples/scoped-agent.md +46 -45
  432. package/docs/examples/server-agent.md +46 -26
  433. package/docs/groups.md +87 -30
  434. package/docs/guarantees.md +41 -12
  435. package/docs/how-it-works.md +38 -12
  436. package/docs/idempotency.md +126 -0
  437. package/docs/identity.md +77 -74
  438. package/docs/index.md +172 -86
  439. package/docs/integration-guide.md +31 -19
  440. package/docs/mcp.md +46 -21
  441. package/docs/migration.md +95 -18
  442. package/docs/operating-on-your-database.md +3 -1
  443. package/docs/projects.md +3 -1
  444. package/docs/quickstart.md +22 -5
  445. package/docs/react.md +31 -18
  446. package/docs/schema-contract.md +5 -3
  447. package/docs/session-settings.md +108 -0
  448. package/docs/sessions.md +4 -2
  449. package/docs/webhooks.md +12 -10
  450. package/llms.txt +48 -18
  451. package/package.json +21 -26
  452. package/dist/agent/Agent.d.ts +0 -366
  453. package/dist/agent/Agent.js +0 -514
  454. package/dist/agent/index.d.ts +0 -115
  455. package/dist/agent/index.js +0 -128
  456. package/dist/agent/session.d.ts +0 -93
  457. package/dist/agent/session.js +0 -149
  458. package/dist/agent/types.d.ts +0 -68
  459. package/dist/agent/types.js +0 -9
  460. package/dist/cli.cjs +0 -286329
  461. package/dist/client/durableWrites.d.ts +0 -21
  462. package/dist/client/httpClient.d.ts +0 -80
  463. package/dist/coordination/schema.d.ts +0 -722
  464. package/dist/coordination/schema.js +0 -578
  465. package/dist/schema/openapi.d.ts +0 -29
  466. package/dist/schema/openapi.js +0 -124
  467. package/dist/testing/fixtures/bootstrap.d.ts +0 -49
  468. package/dist/testing/fixtures/bootstrap.js +0 -59
  469. package/dist/testing/fixtures/deltas.d.ts +0 -83
  470. package/dist/testing/fixtures/deltas.js +0 -136
  471. package/dist/testing/fixtures/models.d.ts +0 -83
  472. package/dist/testing/fixtures/models.js +0 -272
  473. package/dist/testing/helpers/reactWrapper.d.ts +0 -69
  474. package/dist/testing/helpers/reactWrapper.js +0 -67
  475. package/dist/testing/helpers/syncEngineHarness.d.ts +0 -54
  476. package/dist/testing/helpers/syncEngineHarness.js +0 -73
  477. package/dist/testing/helpers/wait.d.ts +0 -30
  478. package/dist/testing/helpers/wait.js +0 -49
  479. package/dist/testing/index.d.ts +0 -23
  480. package/dist/testing/index.js +0 -33
  481. package/dist/testing/mocks/FakeDatabase.d.ts +0 -18
  482. package/dist/testing/mocks/FakeDatabase.js +0 -10
  483. package/dist/testing/mocks/MockMutationExecutor.d.ts +0 -87
  484. package/dist/testing/mocks/MockMutationExecutor.js +0 -192
  485. package/dist/testing/mocks/MockNetworkMonitor.d.ts +0 -20
  486. package/dist/testing/mocks/MockNetworkMonitor.js +0 -46
  487. package/dist/testing/mocks/MockSyncContext.d.ts +0 -51
  488. package/dist/testing/mocks/MockSyncContext.js +0 -71
  489. package/dist/testing/mocks/MockSyncStore.d.ts +0 -88
  490. package/dist/testing/mocks/MockSyncStore.js +0 -171
  491. package/dist/testing/mocks/MockWebSocket.d.ts +0 -71
  492. package/dist/testing/mocks/MockWebSocket.js +0 -118
  493. package/dist/transactions/durableWriteStore.js +0 -30
  494. package/dist/utils/duration.d.ts +0 -25
  495. package/dist/utils/json.js +0 -88
  496. package/dist/wire/errorEnvelope.d.ts +0 -55
  497. package/dist/wire/frames.d.ts +0 -197
  498. package/dist/wire/frames.js +0 -49
  499. package/dist/wire/listEnvelope.js +0 -18
  500. package/docs/interaction-model.md +0 -97
  501. /package/dist/{core → query}/QueryProcessor.d.ts +0 -0
  502. /package/dist/{core → query}/QueryProcessor.js +0 -0
  503. /package/dist/{core/storeContract.js → storeContract.js} +0 -0
  504. /package/dist/{core → stores}/openIDBWithTimeout.d.ts +0 -0
  505. /package/dist/{core → stores}/openIDBWithTimeout.js +0 -0
  506. /package/dist/{client → transaction/auth}/credentialEndpoint.d.ts +0 -0
  507. /package/dist/{client → transaction/auth}/credentialEndpoint.js +0 -0
  508. /package/dist/{auth → transaction/auth}/credentialPolicy.d.ts +0 -0
  509. /package/dist/{auth → transaction/auth}/credentialPolicy.js +0 -0
  510. /package/dist/{auth → transaction/auth}/credentialSource.js +0 -0
  511. /package/dist/{client → transaction/auth}/hostedEndpoints.d.ts +0 -0
  512. /package/dist/{client → transaction/auth}/hostedEndpoints.js +0 -0
  513. /package/dist/{client → transaction}/persistence.d.ts +0 -0
  514. /package/dist/{client → transaction}/persistence.js +0 -0
  515. /package/dist/{client → transaction/resources}/functionalUpdate.d.ts +0 -0
  516. /package/dist/{client → transaction/resources}/functionalUpdate.js +0 -0
  517. /package/dist/{transactions → transaction/transactions/settlement}/idempotencyKey.d.ts +0 -0
  518. /package/dist/{transactions → transaction/transactions/settlement}/idempotencyKey.js +0 -0
  519. /package/dist/{client → transaction/transport}/httpTransport.d.ts +0 -0
  520. /package/dist/{types → transaction/types}/modelData.d.ts +0 -0
  521. /package/dist/{types → transaction/types}/modelData.js +0 -0
  522. /package/dist/{types → transaction/types}/participant.d.ts +0 -0
  523. /package/dist/{types → transaction/types}/participant.js +0 -0
  524. /package/dist/{types → transaction/types}/streams.js +0 -0
  525. /package/dist/{utils → transaction/utils}/asyncIterator.d.ts +0 -0
  526. /package/dist/{utils → transaction/utils}/asyncIterator.js +0 -0
  527. /package/dist/{wire → transaction/wire}/bootstrapReason.d.ts +0 -0
  528. /package/dist/{wire → transaction/wire}/bootstrapReason.js +0 -0
  529. /package/dist/{wire → transaction/wire}/protocol.d.ts +0 -0
  530. /package/dist/{wire → transaction/wire}/protocol.js +0 -0
  531. /package/dist/{wire → transaction/wire}/protocolVersion.d.ts +0 -0
  532. /package/dist/{wire → transaction/wire}/protocolVersion.js +0 -0
  533. /package/dist/transactions/{UnconfirmedWrites.d.ts → mutations/UnconfirmedWrites.d.ts} +0 -0
  534. /package/dist/transactions/{UnconfirmedWrites.js → mutations/UnconfirmedWrites.js} +0 -0
  535. /package/dist/transactions/{optimisticApply.js → mutations/optimisticApply.js} +0 -0
  536. /package/dist/{core → views}/ViewRegistry.js +0 -0
@@ -26,12 +26,12 @@
26
26
  * - exact Zod refinements, which are rebuilt as permissive validators from
27
27
  * {@link FieldMeta}; the server does no field-shape validation
28
28
  */
29
- import type { FieldMeta } from './field.js';
30
- import type { Tenancy } from './tenancy.js';
31
- import type { ModelResidency } from './residency.js';
32
- import type { GrantsRef, LoadStrategy, PersistOptions, AutoFillRule, ConflictAxis } from './model.js';
33
- import type { RelationType } from './relation.js';
34
- import { type Schema, type IdentityRole, type EntityRole, type SessionSettings } from './schema.js';
29
+ import type { FieldMeta } from '../transaction/schema/field.js';
30
+ import type { Tenancy } from '../transaction/schema/tenancy.js';
31
+ import type { ModelResidency } from '../transaction/schema/residency.js';
32
+ import type { GrantsRef, LoadStrategy, PersistOptions, AutoFillRule, ConflictAxis } from '../transaction/schema/model.js';
33
+ import type { RelationType } from '../transaction/schema/relation.js';
34
+ import { type Schema, type IdentityRole, type EntityRole, type SessionSettings } from '../transaction/schema/schema.js';
35
35
  /** Current schema-JSON envelope version. Bump this on a breaking change to the
36
36
  * JSON shape itself — not to a user's schema. */
37
37
  declare const SCHEMA_JSON_VERSION: 3;
@@ -103,4 +103,13 @@ export declare function parseSchema(json: string): Schema;
103
103
  * active schema hash. Not a security primitive.
104
104
  */
105
105
  export declare function schemaHash(schema: Schema): string;
106
+ /**
107
+ * Content hash of ONE serialized model — the unit of the semantic drift check.
108
+ * Two schemas agree on a model exactly when these match, which is what lets a
109
+ * client compare only the models it declares instead of welding itself to the
110
+ * whole-schema hash (where any additive push reads as drift). Computed over the
111
+ * model's `SchemaJSON` entry with the same canonicalization and hash as
112
+ * {@link schemaHash}, on both the client and the server's `GET /api/schema`.
113
+ */
114
+ export declare function modelHash(modelJson: unknown): string;
106
115
  export {};
@@ -27,8 +27,9 @@
27
27
  * {@link FieldMeta}; the server does no field-shape validation
28
28
  */
29
29
  import { z } from 'zod';
30
- import { AbloValidationError } from '../errors.js';
31
- import { baseFieldsSchema, } from './schema.js';
30
+ import { AbloValidationError } from '../transaction/errors.js';
31
+ import { buildFieldRefs } from '../transaction/schema/schema.js';
32
+ import { baseFieldsSchema, } from '../transaction/schema/schema.js';
32
33
  /** Current schema-JSON envelope version. Bump this on a breaking change to the
33
34
  * JSON shape itself — not to a user's schema. */
34
35
  const SCHEMA_JSON_VERSION = 3;
@@ -205,6 +206,8 @@ export function fromSchemaJSON(json) {
205
206
  }
206
207
  return {
207
208
  models: models,
209
+ // A schema rebuilt from JSON carries references too — the shapes are here.
210
+ fields: buildFieldRefs(models),
208
211
  validators: validators,
209
212
  identityRoles: json.identityRoles,
210
213
  sessionSettings: json.sessionSettings ?? {},
@@ -227,7 +230,21 @@ export function parseSchema(json) {
227
230
  * active schema hash. Not a security primitive.
228
231
  */
229
232
  export function schemaHash(schema) {
230
- const canonical = canonicalJson(toSchemaJSON(schema));
233
+ return fnv1a(canonicalJson(toSchemaJSON(schema)));
234
+ }
235
+ /**
236
+ * Content hash of ONE serialized model — the unit of the semantic drift check.
237
+ * Two schemas agree on a model exactly when these match, which is what lets a
238
+ * client compare only the models it declares instead of welding itself to the
239
+ * whole-schema hash (where any additive push reads as drift). Computed over the
240
+ * model's `SchemaJSON` entry with the same canonicalization and hash as
241
+ * {@link schemaHash}, on both the client and the server's `GET /api/schema`.
242
+ */
243
+ export function modelHash(modelJson) {
244
+ return fnv1a(canonicalJson(modelJson));
245
+ }
246
+ /** FNV-1a over an already-canonical string — shared by both hashes above. */
247
+ function fnv1a(canonical) {
231
248
  let h = 0x811c9dc5;
232
249
  for (let i = 0; i < canonical.length; i++) {
233
250
  h ^= canonical.charCodeAt(i);
@@ -23,7 +23,7 @@
23
23
  * ```
24
24
  */
25
25
  import type { z } from 'zod';
26
- import { type ModelDef, type ModelOptions, type ComputedRecord, type RelationRecord } from './model.js';
26
+ import { type ModelDef, type ModelOptions, type ComputedRecord, type RelationRecord } from '../transaction/schema/model.js';
27
27
  /**
28
28
  * Options accepted by every sugar verb. A strict subset of
29
29
  * {@link ModelOptions} — anything the verb infers (`mutable`, `load`,
@@ -79,13 +79,11 @@ export interface SugarOptions<R extends RelationRecord = RelationRecord, C exten
79
79
  * Pick the load suffix by data-access pattern:
80
80
  * - `.instant` — small, always-needed (Theme, Layout, StatusGroup)
81
81
  * - `.lazy` — large collections fetched on first query
82
- * (SlideLayer, Message, Task)
83
- * - `.manual` — never auto-loaded; explicit queries only
82
+ * (Block, Message, Task)
84
83
  */
85
84
  export declare const mutable: {
86
85
  instant: <Shape extends z.ZodRawShape, R extends RelationRecord = Record<string, never>, C extends ComputedRecord = Record<string, never>>(shape: Shape, opts?: SugarOptions<R, C>) => ModelDef<Shape, R, C>;
87
86
  lazy: <Shape extends z.ZodRawShape, R extends RelationRecord = Record<string, never>, C extends ComputedRecord = Record<string, never>>(shape: Shape, opts?: SugarOptions<R, C>) => ModelDef<Shape, R, C>;
88
- manual: <Shape extends z.ZodRawShape, R extends RelationRecord = Record<string, never>, C extends ComputedRecord = Record<string, never>>(shape: Shape, opts?: SugarOptions<R, C>) => ModelDef<Shape, R, C>;
89
87
  };
90
88
  /**
91
89
  * Server-managed entities. `readOnly.*` means clients subscribe to
@@ -102,9 +100,10 @@ export declare const readOnly: {
102
100
  instant: <Shape extends z.ZodRawShape, R extends RelationRecord = Record<string, never>, C extends ComputedRecord = Record<string, never>>(shape: Shape, opts?: SugarOptions<R, C>) => ModelDef<Shape, R, C>;
103
101
  lazy: <Shape extends z.ZodRawShape, R extends RelationRecord = Record<string, never>, C extends ComputedRecord = Record<string, never>>(shape: Shape, opts?: SugarOptions<R, C>) => ModelDef<Shape, R, C>;
104
102
  /**
105
- * Internal-only: never auto-loaded, never written by clients. The
106
- * strongest safety posture — use for tables the SDK must know about
107
- * (for type inference) but that should never flow over the wire.
103
+ * Internal-only: kept out of bootstrap and never written by clients. The
104
+ * strongest safety posture — use for tables the SDK must know about (for type
105
+ * inference) but that no client should be able to write. Rows still reach a
106
+ * client that reads the model, so this is a write boundary, not a read one.
108
107
  */
109
108
  internal: <Shape extends z.ZodRawShape, R extends RelationRecord = Record<string, never>, C extends ComputedRecord = Record<string, never>>(shape: Shape, opts?: SugarOptions<R, C>) => ModelDef<Shape, R, C>;
110
109
  };
@@ -22,11 +22,10 @@
22
22
  * }),
23
23
  * ```
24
24
  */
25
- import { model, } from './model.js';
25
+ import { model, } from '../transaction/schema/model.js';
26
26
  /** Internal helper — builds a ModelDef with baseline safety+load flags applied. */
27
27
  function build(shape, opts, baseline) {
28
- return model(shape, (opts?.relations ?? {}), {
29
- mutable: baseline.mutable,
28
+ return model(shape, { relations: (opts?.relations ?? {}), mutable: baseline.mutable,
30
29
  load: baseline.load,
31
30
  lazyObservable: opts?.lazyObservable ?? baseline.lazyObservable,
32
31
  typename: opts?.typename,
@@ -36,8 +35,7 @@ function build(shape, opts, baseline) {
36
35
  bootstrapLimit: opts?.bootstrapLimit,
37
36
  bootstrapOrderBy: opts?.bootstrapOrderBy,
38
37
  persist: opts?.persist,
39
- computed: opts?.computed,
40
- });
38
+ computed: opts?.computed, });
41
39
  }
42
40
  /**
43
41
  * Client-writable entities. `mutable.*` is the opt-in signal for wire
@@ -47,8 +45,7 @@ function build(shape, opts, baseline) {
47
45
  * Pick the load suffix by data-access pattern:
48
46
  * - `.instant` — small, always-needed (Theme, Layout, StatusGroup)
49
47
  * - `.lazy` — large collections fetched on first query
50
- * (SlideLayer, Message, Task)
51
- * - `.manual` — never auto-loaded; explicit queries only
48
+ * (Block, Message, Task)
52
49
  */
53
50
  export const mutable = {
54
51
  instant: (shape, opts) =>
@@ -56,7 +53,6 @@ export const mutable = {
56
53
  // `lazyObservable: false` only for very large read-only list models.
57
54
  build(shape, opts, { mutable: true, load: 'instant', lazyObservable: true }),
58
55
  lazy: (shape, opts) => build(shape, opts, { mutable: true, load: 'lazy', lazyObservable: true }),
59
- manual: (shape, opts) => build(shape, opts, { mutable: true, load: 'manual', lazyObservable: true }),
60
56
  };
61
57
  /**
62
58
  * Server-managed entities. `readOnly.*` means clients subscribe to
@@ -78,9 +74,10 @@ export const readOnly = {
78
74
  build(shape, opts, { mutable: false, load: 'instant', lazyObservable: true }),
79
75
  lazy: (shape, opts) => build(shape, opts, { mutable: false, load: 'lazy', lazyObservable: true }),
80
76
  /**
81
- * Internal-only: never auto-loaded, never written by clients. The
82
- * strongest safety posture — use for tables the SDK must know about
83
- * (for type inference) but that should never flow over the wire.
77
+ * Internal-only: kept out of bootstrap and never written by clients. The
78
+ * strongest safety posture — use for tables the SDK must know about (for type
79
+ * inference) but that no client should be able to write. Rows still reach a
80
+ * client that reads the model, so this is a write boundary, not a read one.
84
81
  */
85
- internal: (shape, opts) => build(shape, opts, { mutable: false, load: 'manual', lazyObservable: true }),
82
+ internal: (shape, opts) => build(shape, opts, { mutable: false, load: 'lazy', lazyObservable: true }),
86
83
  };
@@ -1,154 +1,6 @@
1
1
  /**
2
- * Zod schemas that describe the `sync_deltas` storage row the durable record of
3
- * one committed change. The row is split into three slices by the concern each one
4
- * serves:
5
- *
6
- * - {@link syncDeltaCoreSchema} — the sync-protocol slice: everything a client
7
- * needs to reconstruct the change, plus the tenant key. This is a portable
8
- * payload shape; it is not a statement that the row is physically stored in
9
- * the customer's database.
10
- * - {@link deltaAttributionSchema} — who made the change, and on whose authority.
11
- * - {@link deltaProvenanceSchema} — which AI task, if any, produced it.
12
- *
13
- * {@link syncDeltaRowSchema} composes all three into the full stored row.
14
- * {@link DELTA_DATA_CLASSIFICATION} states which slices contain customer data,
15
- * while {@link DELTA_PHYSICAL_STORAGE} states where the runtime persists them.
16
- * Keeping those axes separate prevents a portable schema slice from being cited
17
- * incorrectly as a physical-residency guarantee.
18
- *
19
- * This is the stored shape. The delta broadcast to clients is a narrower projection
20
- * of it — see {@link import('../wire/delta.js').syncDeltaWireCoreSchema} — and
21
- * the field names here mirror those on that wire delta.
2
+ * Compatibility entry point for the durable `sync_deltas` row contract, which
3
+ * is owned by the transaction layer. The schema barrel continues to re-export
4
+ * this path so existing `@abloatai/ablo/schema` consumers do not change.
22
5
  */
23
- import { z } from 'zod';
24
- export { participantKindSchema, confirmationStateSchema } from '../wire/delta.js';
25
- export type { ParticipantKind, ConfirmationState } from '../wire/delta.js';
26
- /** `backfill_provenance` */
27
- export declare const backfillProvenanceSchema: z.ZodEnum<{
28
- unknown: "unknown";
29
- exact: "exact";
30
- inferred: "inferred";
31
- }>;
32
- export type BackfillProvenance = z.infer<typeof backfillProvenanceSchema>;
33
- /**
34
- * Everything a client needs to materialize the change, plus the tenant key. This
35
- * is the portable shape an authoritative WAL change or endpoint event carries.
36
- * The runtime persists the resulting full row in Ablo's tenant-scoped ordered
37
- * sync log; it is not written atomically with a direct application-row mutation.
38
- * `id`, `createdAt`, and `syncGroups` are assigned when the source change is
39
- * appended, so they are optional at the ingestion boundary.
40
- */
41
- export declare const syncDeltaCoreSchema: z.ZodObject<{
42
- id: z.ZodOptional<z.ZodUnion<readonly [z.ZodBigInt, z.ZodNumber]>>;
43
- actionType: z.ZodString;
44
- modelName: z.ZodString;
45
- modelId: z.ZodString;
46
- data: z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
47
- previousData: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
48
- syncGroups: z.ZodOptional<z.ZodArray<z.ZodString>>;
49
- organizationId: z.ZodNullable<z.ZodString>;
50
- createdAt: z.ZodOptional<z.ZodString>;
51
- transactionId: z.ZodNullable<z.ZodString>;
52
- sourceChangeId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
53
- }, z.core.$strip>;
54
- export type SyncDeltaCore = z.infer<typeof syncDeltaCoreSchema>;
55
- export declare const deltaAttributionSchema: z.ZodObject<{
56
- createdBy: z.ZodNullable<z.ZodString>;
57
- actorId: z.ZodNullable<z.ZodString>;
58
- actorKind: z.ZodNullable<z.ZodEnum<{
59
- user: "user";
60
- agent: "agent";
61
- system: "system";
62
- }>>;
63
- onBehalfOfId: z.ZodNullable<z.ZodString>;
64
- onBehalfOfKind: z.ZodNullable<z.ZodEnum<{
65
- user: "user";
66
- agent: "agent";
67
- system: "system";
68
- }>>;
69
- capabilityId: z.ZodNullable<z.ZodString>;
70
- delegationChainRootUserId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
71
- confirmationState: z.ZodNullable<z.ZodEnum<{
72
- auto: "auto";
73
- previewed: "previewed";
74
- approved: "approved";
75
- required_human_approval: "required_human_approval";
76
- auto_historical: "auto_historical";
77
- }>>;
78
- backfillProvenance: z.ZodNullable<z.ZodEnum<{
79
- unknown: "unknown";
80
- exact: "exact";
81
- inferred: "inferred";
82
- }>>;
83
- }, z.core.$strip>;
84
- export type DeltaAttribution = z.infer<typeof deltaAttributionSchema>;
85
- export declare const deltaProvenanceSchema: z.ZodObject<{
86
- causedByTaskId: z.ZodNullable<z.ZodString>;
87
- }, z.core.$strip>;
88
- export type DeltaProvenance = z.infer<typeof deltaProvenanceSchema>;
89
- /** The complete `sync_deltas` row: core, attribution, and provenance combined. */
90
- export declare const syncDeltaRowSchema: z.ZodObject<{
91
- id: z.ZodOptional<z.ZodUnion<readonly [z.ZodBigInt, z.ZodNumber]>>;
92
- actionType: z.ZodString;
93
- modelName: z.ZodString;
94
- modelId: z.ZodString;
95
- data: z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
96
- previousData: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
97
- syncGroups: z.ZodOptional<z.ZodArray<z.ZodString>>;
98
- organizationId: z.ZodNullable<z.ZodString>;
99
- createdAt: z.ZodOptional<z.ZodString>;
100
- transactionId: z.ZodNullable<z.ZodString>;
101
- sourceChangeId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
102
- createdBy: z.ZodNullable<z.ZodString>;
103
- actorId: z.ZodNullable<z.ZodString>;
104
- actorKind: z.ZodNullable<z.ZodEnum<{
105
- user: "user";
106
- agent: "agent";
107
- system: "system";
108
- }>>;
109
- onBehalfOfId: z.ZodNullable<z.ZodString>;
110
- onBehalfOfKind: z.ZodNullable<z.ZodEnum<{
111
- user: "user";
112
- agent: "agent";
113
- system: "system";
114
- }>>;
115
- capabilityId: z.ZodNullable<z.ZodString>;
116
- delegationChainRootUserId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
117
- confirmationState: z.ZodNullable<z.ZodEnum<{
118
- auto: "auto";
119
- previewed: "previewed";
120
- approved: "approved";
121
- required_human_approval: "required_human_approval";
122
- auto_historical: "auto_historical";
123
- }>>;
124
- backfillProvenance: z.ZodNullable<z.ZodEnum<{
125
- unknown: "unknown";
126
- exact: "exact";
127
- inferred: "inferred";
128
- }>>;
129
- causedByTaskId: z.ZodNullable<z.ZodString>;
130
- }, z.core.$strip>;
131
- export type SyncDeltaRow = z.infer<typeof syncDeltaRowSchema>;
132
- /** Which slices contain retained customer row data versus control metadata. */
133
- export declare const DELTA_DATA_CLASSIFICATION: {
134
- readonly core: "customer-data";
135
- readonly attribution: "control-metadata";
136
- readonly provenance: "control-metadata";
137
- };
138
- /**
139
- * Where the current runtime physically persists each slice. All three live in
140
- * Ablo's tenant-scoped `sync_deltas` log. `core` contains full post-change row
141
- * payloads (and optional previous payloads), so `control` here must not be read
142
- * as "metadata only."
143
- */
144
- export declare const DELTA_PHYSICAL_STORAGE: {
145
- readonly core: "control";
146
- readonly attribution: "control";
147
- readonly provenance: "control";
148
- };
149
- /** @deprecated Use `DELTA_PHYSICAL_STORAGE`; classification is a separate axis. */
150
- export declare const DELTA_RESIDENCY: {
151
- readonly core: "control";
152
- readonly attribution: "control";
153
- readonly provenance: "control";
154
- };
6
+ export * from '../transaction/log/syncDeltaRow.js';
@@ -1,107 +1,6 @@
1
1
  /**
2
- * Zod schemas that describe the `sync_deltas` storage row the durable record of
3
- * one committed change. The row is split into three slices by the concern each one
4
- * serves:
5
- *
6
- * - {@link syncDeltaCoreSchema} — the sync-protocol slice: everything a client
7
- * needs to reconstruct the change, plus the tenant key. This is a portable
8
- * payload shape; it is not a statement that the row is physically stored in
9
- * the customer's database.
10
- * - {@link deltaAttributionSchema} — who made the change, and on whose authority.
11
- * - {@link deltaProvenanceSchema} — which AI task, if any, produced it.
12
- *
13
- * {@link syncDeltaRowSchema} composes all three into the full stored row.
14
- * {@link DELTA_DATA_CLASSIFICATION} states which slices contain customer data,
15
- * while {@link DELTA_PHYSICAL_STORAGE} states where the runtime persists them.
16
- * Keeping those axes separate prevents a portable schema slice from being cited
17
- * incorrectly as a physical-residency guarantee.
18
- *
19
- * This is the stored shape. The delta broadcast to clients is a narrower projection
20
- * of it — see {@link import('../wire/delta.js').syncDeltaWireCoreSchema} — and
21
- * the field names here mirror those on that wire delta.
2
+ * Compatibility entry point for the durable `sync_deltas` row contract, which
3
+ * is owned by the transaction layer. The schema barrel continues to re-export
4
+ * this path so existing `@abloatai/ablo/schema` consumers do not change.
22
5
  */
23
- import { z } from 'zod';
24
- import { participantKindSchema, confirmationStateSchema } from '../wire/delta.js';
25
- // ── Enumerations that mirror the corresponding Postgres enum types ────────────
26
- // `participant_kind` and `confirmation_state` are shared with the wire delta and
27
- // live at the wire layer (see `../wire/delta.js`); they are re-exported here so
28
- // code that imports them from `schema` keeps resolving.
29
- export { participantKindSchema, confirmationStateSchema } from '../wire/delta.js';
30
- /** `backfill_provenance` */
31
- export const backfillProvenanceSchema = z.enum(['exact', 'inferred', 'unknown']);
32
- /** A delta payload: the full post-mutation row (or null for deletes). */
33
- const deltaDataSchema = z.record(z.string(), z.unknown()).nullable();
34
- // ── Core — the sync-protocol slice ────────────────────────────────────────────
35
- /**
36
- * Everything a client needs to materialize the change, plus the tenant key. This
37
- * is the portable shape an authoritative WAL change or endpoint event carries.
38
- * The runtime persists the resulting full row in Ablo's tenant-scoped ordered
39
- * sync log; it is not written atomically with a direct application-row mutation.
40
- * `id`, `createdAt`, and `syncGroups` are assigned when the source change is
41
- * appended, so they are optional at the ingestion boundary.
42
- */
43
- export const syncDeltaCoreSchema = z.object({
44
- /** Monotonically increasing sync id, assigned by the server when the delta is appended; absent on an outbox marker. */
45
- id: z.union([z.bigint(), z.number()]).optional(),
46
- /** The `action_type` column: a single character, `I` (insert), `U` (update), or `D` (delete). */
47
- actionType: z.string().min(1).max(1),
48
- modelName: z.string().min(1),
49
- modelId: z.string().min(1),
50
- data: deltaDataSchema,
51
- previousData: deltaDataSchema.optional(),
52
- /** Routing keys that decide which subscribers receive this delta; computed by the server at append time. */
53
- syncGroups: z.array(z.string()).optional(),
54
- /** The committing organization id — the coarse-grained tenant-isolation boundary. */
55
- organizationId: z.string().nullable(),
56
- /** ISO 8601 timestamp, assigned by the server when the delta is appended. */
57
- createdAt: z.string().optional(),
58
- transactionId: z.string().nullable(),
59
- /**
60
- * Stable identity of the authoritative WAL row or endpoint event. It is
61
- * nullable for hosted/legacy rows and is never exposed as the optimistic
62
- * client transaction id.
63
- */
64
- sourceChangeId: z.string().min(1).nullable().optional(),
65
- });
66
- // ── Attribution — who made the change, and on whose authority ─────────────────
67
- export const deltaAttributionSchema = z.object({
68
- /** The acting participant, recorded as a single column for compatibility; the structured pair below is the richer form. */
69
- createdBy: z.string().nullable(),
70
- actorId: z.string().nullable(),
71
- actorKind: participantKindSchema.nullable(),
72
- onBehalfOfId: z.string().nullable(),
73
- onBehalfOfKind: participantKindSchema.nullable(),
74
- capabilityId: z.string().nullable(),
75
- delegationChainRootUserId: z.string().nullable().optional(),
76
- confirmationState: confirmationStateSchema.nullable(),
77
- backfillProvenance: backfillProvenanceSchema.nullable(),
78
- });
79
- // ── Provenance — which AI task produced the change ────────────────────────────
80
- export const deltaProvenanceSchema = z.object({
81
- /** Foreign key to the task record for the AI turn that produced this commit; null when no task applies. */
82
- causedByTaskId: z.string().nullable(),
83
- });
84
- // ── Full stored row, classification, and physical storage ─────────────────────
85
- /** The complete `sync_deltas` row: core, attribution, and provenance combined. */
86
- export const syncDeltaRowSchema = syncDeltaCoreSchema
87
- .extend(deltaAttributionSchema.shape)
88
- .extend(deltaProvenanceSchema.shape);
89
- /** Which slices contain retained customer row data versus control metadata. */
90
- export const DELTA_DATA_CLASSIFICATION = {
91
- core: 'customer-data',
92
- attribution: 'control-metadata',
93
- provenance: 'control-metadata',
94
- };
95
- /**
96
- * Where the current runtime physically persists each slice. All three live in
97
- * Ablo's tenant-scoped `sync_deltas` log. `core` contains full post-change row
98
- * payloads (and optional previous payloads), so `control` here must not be read
99
- * as "metadata only."
100
- */
101
- export const DELTA_PHYSICAL_STORAGE = {
102
- core: 'control',
103
- attribution: 'control',
104
- provenance: 'control',
105
- };
106
- /** @deprecated Use `DELTA_PHYSICAL_STORAGE`; classification is a separate axis. */
107
- export const DELTA_RESIDENCY = DELTA_PHYSICAL_STORAGE;
6
+ export * from '../transaction/log/syncDeltaRow.js';
@@ -16,7 +16,7 @@
16
16
  * database row that the rest of the engine reads and writes.
17
17
  */
18
18
  import type { SourceListQuery, SourceOperation, SourceRequestContext } from '../source/index.js';
19
- import type { ServerSyncDelta } from '../wire/delta.js';
19
+ import type { ServerSyncDelta } from '../transaction/wire/delta.js';
20
20
  import type { BootstrapModel } from './readConfig.js';
21
21
  import type { CommitContext, CommitResult } from './commit.js';
22
22
  import type { StorageMode } from './storageMode.js';
@@ -41,6 +41,12 @@ export type ReadResult = {
41
41
  readonly models: Record<string, Row[]>;
42
42
  /** Models whose read failed (partial success), if any. */
43
43
  readonly failedModels?: string[];
44
+ /**
45
+ * Present when a paged read (`ReadRequest.page`) stopped at its row
46
+ * limit with rows remaining: pass it back as the next page's cursor.
47
+ * Absent on the final page and on unpaged reads.
48
+ */
49
+ readonly nextCursor?: string;
44
50
  } | {
45
51
  readonly kind: 'query';
46
52
  readonly rows: readonly Row[];
@@ -93,6 +99,17 @@ export type ReadRequest = {
93
99
  readonly models: readonly BootstrapModel[];
94
100
  readonly requestedModels?: readonly string[];
95
101
  readonly scope?: SourceRequestContext;
102
+ /**
103
+ * Keyset pagination for a SINGLE-model read (`requestedModels` names
104
+ * exactly one model): return at most `limit` rows, starting after the
105
+ * row whose id equals `cursor`. The result carries `nextCursor` while
106
+ * rows remain. Ignored for multi-model reads and by adapters whose
107
+ * backend pages upstream on its own.
108
+ */
109
+ readonly page?: {
110
+ readonly cursor?: string;
111
+ readonly limit: number;
112
+ };
96
113
  } | {
97
114
  readonly kind: 'query';
98
115
  readonly model: string;
@@ -14,10 +14,10 @@
14
14
  * rather than being kept in step by hand.
15
15
  */
16
16
  import type { ParticipantKind, ConfirmationState } from '../schema/syncDeltaRow.js';
17
- import type { ParticipantRef } from '../wire/delta.js';
18
- import type { CommitExecutionResultInput } from '../wire/commit.js';
19
- import type { Environment } from '../environment.js';
20
- import type { ReadDependency, TrackDependency } from '../coordination/schema.js';
17
+ import type { ParticipantRef } from '../transaction/wire/delta.js';
18
+ import type { CommitExecutionResultInput } from '../transaction/wire/commit.js';
19
+ import type { Environment } from '../transaction/environment.js';
20
+ import type { ReadDependency, TrackDependency } from '../transaction/coordination/schema.js';
21
21
  export interface CommitContext {
22
22
  participantId: string;
23
23
  /**
@@ -45,7 +45,7 @@ export interface CommitContext {
45
45
  * The sync groups this participant subscribes to, taken from the connection
46
46
  * upgrade or the capability token. Each is appended to every delta's `sync_groups`
47
47
  * so that writes fan out to subscribers of entity-level groups (such as
48
- * `deck:abc`), not only the default `org:X` and `user:Y` groups. When omitted, the
48
+ * `report:abc`), not only the default `org:X` and `user:Y` groups. When omitted, the
49
49
  * commit fans out to just the organization and user groups.
50
50
  */
51
51
  syncGroups?: readonly string[];
@@ -84,13 +84,7 @@ export interface CommitContext {
84
84
  */
85
85
  confirmationState?: ConfirmationState;
86
86
  /**
87
- * Optional foreign key to the task that caused the change, written to the
88
- * `caused_by_task_id` column when present. Validated when set; clients typically
89
- * leave it null and let attribution ride on the actor and capability instead.
90
- */
91
- causedByTaskId?: string | null;
92
- /**
93
- * Read dependencies for the whole batch. The committer declares the rows or groups
87
+ * The premise for the whole batch. The committer declares the rows or groups
94
88
  * it read to form this batch; the engine checks that none of them changed since
95
89
  * each entry's `readAt` timestamp and applies that entry's `onStale` disposition
96
90
  * across the batch. This differs from the per-operation `readAt` guard, which
@@ -98,10 +92,10 @@ export interface CommitContext {
98
92
  */
99
93
  reads?: ReadDependency[] | null;
100
94
  /**
101
- * Durable read-dependencies to persist for this commit's participant. Each entry
102
- * is kept in `track_dependencies` and re-checked against every future delta; a
103
- * later match opens a `StaleNotification` delivered out of band. Distinct from
104
- * `reads`, which is checked once here and discarded.
95
+ * Durable premises to persist for this commit's participant. Each entry is
96
+ * kept in `track_dependencies` and re-checked against every future delta; a
97
+ * later match opens a `StaleNotification` delivered out of band. Distinct
98
+ * from `reads`, which is checked once here and discarded.
105
99
  */
106
100
  track?: TrackDependency[] | null;
107
101
  }
@@ -9,6 +9,6 @@
9
9
  */
10
10
  export type { Row, ReadResult, SyncCursor, DataAdapterCapabilities, ProposalResult, ReadRequest, ChangeSet, SyncResult, DataAdapter, ProposableDataAdapter, AdapterResolver, } from './adapter.js';
11
11
  export type { CommitContext, CommitResult } from './commit.js';
12
- export { commitExecutionResultSchema } from '../wire/commit.js';
12
+ export { commitExecutionResultSchema } from '../transaction/wire/commit.js';
13
13
  export { storageModeSchema, type StorageMode } from './storageMode.js';
14
14
  export type { ColumnOverride, BootstrapModel } from './readConfig.js';
@@ -1,2 +1,2 @@
1
- export { commitExecutionResultSchema } from '../wire/commit.js';
1
+ export { commitExecutionResultSchema } from '../transaction/wire/commit.js';
2
2
  export { storageModeSchema } from './storageMode.js';
@@ -23,7 +23,7 @@ export interface BootstrapModel {
23
23
  /**
24
24
  * The schema key used by source endpoints. `name` stays the wire and result model
25
25
  * name (usually the typename), while source handlers are keyed by the developer's
26
- * schema key, such as `files` or `slideLayers`.
26
+ * schema key, such as `files` or `blocks`.
27
27
  */
28
28
  sourceModel?: string;
29
29
  table: string;
@@ -8,16 +8,18 @@
8
8
  * write your own.
9
9
  *
10
10
  * An endpoint adapter reads and writes your database, and it owns the transactional
11
- * outbox and idempotency bookkeeping as well, so you never write those by hand:
11
+ * outbox and idempotency bookkeeping as well, so you never write those by hand.
12
+ * Hand it to the handler in one slot:
12
13
  *
13
14
  * export const POST = dataSource({
14
15
  * schema, apiKey: process.env.ABLO_API_KEY!,
15
- * ...sourceHandlersFromAdapter(prismaDataSource(prisma, schema), schema),
16
+ * adapter: prismaDataSource(prisma, schema),
16
17
  * });
17
18
  *
18
- * `sourceHandlersFromAdapter` is the bridge: it turns a single adapter into the
19
- * handler's `commit`, `events`, and per-model `load` and `list` operations, so no
20
- * code above the adapter needs to know which mapper you chose.
19
+ * That is the path to teach. {@link sourceHandlersFromAdapter} is the lower-level
20
+ * bridge behind it — it expands one adapter into the handler's `commit`, `events`,
21
+ * and per-model `load` and `list` operations, and is worth reaching for only when
22
+ * you want to override one of those while the adapter serves the rest.
21
23
  */
22
24
  import type { SourceListQuery, SourceRequestContext } from './types.js';
23
25
  import type { AdapterCapabilities, ChangeSet, EventsPage, Migration } from './contract.js';
@@ -8,15 +8,17 @@
8
8
  * write your own.
9
9
  *
10
10
  * An endpoint adapter reads and writes your database, and it owns the transactional
11
- * outbox and idempotency bookkeeping as well, so you never write those by hand:
11
+ * outbox and idempotency bookkeeping as well, so you never write those by hand.
12
+ * Hand it to the handler in one slot:
12
13
  *
13
14
  * export const POST = dataSource({
14
15
  * schema, apiKey: process.env.ABLO_API_KEY!,
15
- * ...sourceHandlersFromAdapter(prismaDataSource(prisma, schema), schema),
16
+ * adapter: prismaDataSource(prisma, schema),
16
17
  * });
17
18
  *
18
- * `sourceHandlersFromAdapter` is the bridge: it turns a single adapter into the
19
- * handler's `commit`, `events`, and per-model `load` and `list` operations, so no
20
- * code above the adapter needs to know which mapper you chose.
19
+ * That is the path to teach. {@link sourceHandlersFromAdapter} is the lower-level
20
+ * bridge behind it — it expands one adapter into the handler's `commit`, `events`,
21
+ * and per-model `load` and `list` operations, and is worth reaching for only when
22
+ * you want to override one of those while the adapter serves the rest.
21
23
  */
22
24
  export {};
@@ -35,7 +35,7 @@
35
35
  */
36
36
  import { type SQL } from 'drizzle-orm';
37
37
  import type { DataSourceAdapter, Row } from '../adapter.js';
38
- import type { Schema, SchemaRecord } from '../../schema/schema.js';
38
+ import type { Schema, SchemaRecord } from '../../transaction/schema/schema.js';
39
39
  /** The subset of a Drizzle database/transaction handle the adapter calls. */
40
40
  export interface DrizzleLike {
41
41
  execute(query: SQL): Promise<DrizzleExecuteResult>;
@@ -33,14 +33,14 @@
33
33
  * which keeps the adapter one small, fully typed unit with no per-driver builder
34
34
  * generics.
35
35
  */
36
- import { AbloValidationError } from '../../errors.js';
36
+ import { AbloValidationError } from '../../transaction/errors.js';
37
37
  import { sql } from 'drizzle-orm';
38
38
  import { outboxEventSchema } from '../contract.js';
39
39
  import { adapterTableMigrations } from '../migrations.js';
40
40
  import { assertSourceIdempotencyIntent, assertSourceIdempotencyRetention, SOURCE_IDEMPOTENCY_RETENTION, sourceChangeIntentHash, } from '../idempotency.js';
41
41
  import { toSchemaJSON } from '../../schema/serialize.js';
42
42
  import { camelToSnake, snakeToCamel } from '../../schema/ddl.js';
43
- import { tenancyColumn } from '../../schema/tenancy.js';
43
+ import { tenancyColumn } from '../../transaction/schema/tenancy.js';
44
44
  import { ABLO_POSTGRES_COMMIT_ECHO_PREFIX } from '../types.js';
45
45
  function rowsOf(result) {
46
46
  return Array.isArray(result) ? result : result.rows;