@abloatai/ablo 0.34.0 → 0.35.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 (483) hide show
  1. package/AGENTS.md +4 -1
  2. package/CHANGELOG.md +684 -5
  3. package/README.md +39 -22
  4. package/dist/BaseSyncedStore.d.ts +152 -44
  5. package/dist/BaseSyncedStore.js +300 -184
  6. package/dist/Database.d.ts +9 -24
  7. package/dist/Database.js +37 -22
  8. package/dist/InstanceCache.d.ts +25 -4
  9. package/dist/InstanceCache.js +48 -15
  10. package/dist/LazyReferenceCollection.d.ts +3 -3
  11. package/dist/LazyReferenceCollection.js +4 -4
  12. package/dist/Model.d.ts +6 -6
  13. package/dist/Model.js +10 -10
  14. package/dist/ModelRegistry.d.ts +4 -4
  15. package/dist/ModelRegistry.js +3 -3
  16. package/dist/{SyncEngineContext.d.ts → RuntimeContext.d.ts} +20 -13
  17. package/dist/{SyncEngineContext.js → RuntimeContext.js} +11 -12
  18. package/dist/SyncClient.d.ts +42 -32
  19. package/dist/SyncClient.js +166 -110
  20. package/dist/ai-sdk/coordinatedTool.d.ts +2 -2
  21. package/dist/ai-sdk/coordinatedTool.js +1 -1
  22. package/dist/ai-sdk/coordinationContext.d.ts +2 -2
  23. package/dist/ai-sdk/coordinationContext.js +1 -1
  24. package/dist/ai-sdk/wrap.d.ts +3 -3
  25. package/dist/ai-sdk/wrap.js +2 -2
  26. package/dist/auth/index.d.ts +1 -156
  27. package/dist/auth/index.js +8 -301
  28. package/dist/cli.cjs +3459 -1126
  29. package/dist/client/Ablo.d.ts +42 -287
  30. package/dist/client/Ablo.js +118 -963
  31. package/dist/client/abloClient.d.ts +309 -0
  32. package/dist/client/abloClient.js +13 -0
  33. package/dist/client/clientPrelude.d.ts +52 -0
  34. package/dist/client/clientPrelude.js +60 -0
  35. package/dist/client/consoleLogger.d.ts +2 -2
  36. package/dist/client/coreClient.d.ts +60 -0
  37. package/dist/client/coreClient.js +118 -0
  38. package/dist/client/createInternalComponents.d.ts +4 -4
  39. package/dist/client/createInternalComponents.js +9 -8
  40. package/dist/client/createModelProxy.d.ts +78 -373
  41. package/dist/client/createModelProxy.js +114 -86
  42. package/dist/client/humans.d.ts +48 -0
  43. package/dist/client/humans.js +52 -0
  44. package/dist/client/modelRegistration.d.ts +1 -1
  45. package/dist/client/modelRegistration.js +9 -9
  46. package/dist/client/options.d.ts +73 -17
  47. package/dist/client/reactiveEngine.d.ts +48 -0
  48. package/dist/client/reactiveEngine.js +910 -0
  49. package/dist/client/resourceTypes.d.ts +9 -250
  50. package/dist/client/resourceTypes.js +8 -5
  51. package/dist/client/schemaConfig.d.ts +4 -4
  52. package/dist/client/schemaConfig.js +6 -2
  53. package/dist/client/validateAbloOptions.d.ts +3 -2
  54. package/dist/client/validateAbloOptions.js +1 -1
  55. package/dist/client/wsMutationExecutor.d.ts +3 -3
  56. package/dist/client/wsMutationExecutor.js +3 -3
  57. package/dist/context.d.ts +9 -9
  58. package/dist/context.js +10 -9
  59. package/dist/coordination/ClaimLog.d.ts +26 -0
  60. package/dist/coordination/ClaimLog.js +32 -0
  61. package/dist/coordination/index.d.ts +1 -15
  62. package/dist/coordination/index.js +8 -31
  63. package/dist/core/DatabaseManager.js +1 -1
  64. package/dist/core/QueryView.d.ts +1 -1
  65. package/dist/core/QueryView.js +1 -1
  66. package/dist/core/StoreManager.d.ts +4 -23
  67. package/dist/core/StoreManager.js +5 -55
  68. package/dist/core/index.d.ts +2 -2
  69. package/dist/core/index.js +2 -2
  70. package/dist/core/storeContract.d.ts +2 -2
  71. package/dist/docs/catalog.d.ts +72 -0
  72. package/dist/docs/catalog.js +227 -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 +40 -34
  78. package/dist/index.js +26 -20
  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 +2 -2
  99. package/dist/query/client.js +4 -4
  100. package/dist/query/types.d.ts +6 -41
  101. package/dist/query/types.js +2 -2
  102. package/dist/react/AbloProvider.d.ts +6 -8
  103. package/dist/react/AbloProvider.js +5 -7
  104. package/dist/react/context.d.ts +1 -1
  105. package/dist/react/context.js +1 -1
  106. package/dist/react/index.d.ts +5 -5
  107. package/dist/react/index.js +3 -3
  108. package/dist/react/internalContext.d.ts +1 -1
  109. package/dist/react/useAblo.d.ts +3 -3
  110. package/dist/react/useAblo.js +1 -1
  111. package/dist/react/useCurrentUserId.js +1 -1
  112. package/dist/react/useErrorListener.js +1 -1
  113. package/dist/react/useMutationFailureListener.d.ts +2 -2
  114. package/dist/react/useMutationFailureListener.js +1 -1
  115. package/dist/react/useMutators.d.ts +3 -3
  116. package/dist/react/useMutators.js +3 -3
  117. package/dist/react/useUndoScope.d.ts +5 -5
  118. package/dist/react/useUndoScope.js +1 -1
  119. package/dist/schema/coordination.d.ts +69 -10
  120. package/dist/schema/coordination.js +86 -9
  121. package/dist/schema/ddl.js +2 -2
  122. package/dist/schema/diff.d.ts +1 -1
  123. package/dist/schema/generate.js +1 -1
  124. package/dist/schema/index.d.ts +10 -10
  125. package/dist/schema/index.js +18 -18
  126. package/dist/schema/queries.d.ts +27 -27
  127. package/dist/schema/queries.js +23 -23
  128. package/dist/schema/select.d.ts +3 -3
  129. package/dist/schema/select.js +3 -3
  130. package/dist/schema/serialize.d.ts +15 -6
  131. package/dist/schema/serialize.js +17 -3
  132. package/dist/schema/sugar.d.ts +6 -7
  133. package/dist/schema/sugar.js +9 -12
  134. package/dist/schema/syncDeltaRow.d.ts +4 -152
  135. package/dist/schema/syncDeltaRow.js +4 -105
  136. package/dist/server/adapter.d.ts +18 -1
  137. package/dist/server/commit.d.ts +10 -16
  138. package/dist/server/index.d.ts +1 -1
  139. package/dist/server/index.js +1 -1
  140. package/dist/server/readConfig.d.ts +1 -1
  141. package/dist/source/adapters/drizzle.d.ts +1 -1
  142. package/dist/source/adapters/drizzle.js +2 -2
  143. package/dist/source/adapters/kysely.d.ts +1 -1
  144. package/dist/source/adapters/kysely.js +1 -1
  145. package/dist/source/adapters/kyselyMutationCore.d.ts +1 -1
  146. package/dist/source/adapters/kyselyMutationCore.js +2 -2
  147. package/dist/source/adapters/memory.js +1 -1
  148. package/dist/source/adapters/prisma.d.ts +8 -3
  149. package/dist/source/adapters/prisma.js +1 -1
  150. package/dist/source/connector.js +1 -1
  151. package/dist/source/connectorProtocol.d.ts +2 -8
  152. package/dist/source/connectorProtocol.js +3 -2
  153. package/dist/source/contract.d.ts +29 -17
  154. package/dist/source/contract.js +27 -22
  155. package/dist/source/factory.d.ts +1 -1
  156. package/dist/source/footprint.d.ts +111 -0
  157. package/dist/source/footprint.js +0 -0
  158. package/dist/source/idempotency.js +2 -2
  159. package/dist/source/index.d.ts +1 -0
  160. package/dist/source/index.js +3 -0
  161. package/dist/source/next.d.ts +1 -1
  162. package/dist/source/signing.d.ts +9 -2
  163. package/dist/source/signing.js +4 -1
  164. package/dist/source/types.d.ts +6 -4
  165. package/dist/source/types.js +1 -1
  166. package/dist/stores/ObjectStore.d.ts +1 -1
  167. package/dist/stores/SyncActionStore.d.ts +1 -1
  168. package/dist/stores/SyncActionStore.js +2 -10
  169. package/dist/stores/syncAction.d.ts +26 -0
  170. package/dist/stores/syncAction.js +16 -0
  171. package/dist/surface.d.ts +3 -3
  172. package/dist/surface.js +6 -4
  173. package/dist/sync/BootstrapFetcher.d.ts +123 -6
  174. package/dist/sync/BootstrapFetcher.js +492 -66
  175. package/dist/sync/ConnectionManager.d.ts +6 -198
  176. package/dist/sync/ConnectionManager.js +6 -677
  177. package/dist/sync/OnDemandLoader.d.ts +2 -2
  178. package/dist/sync/OnDemandLoader.js +60 -21
  179. package/dist/sync/SubscriptionManager.d.ts +13 -2
  180. package/dist/sync/SubscriptionManager.js +23 -5
  181. package/dist/sync/SyncWebSocket.d.ts +27 -510
  182. package/dist/sync/SyncWebSocket.js +76 -954
  183. package/dist/sync/awaitClaimGrant.d.ts +4 -44
  184. package/dist/sync/awaitClaimGrant.js +4 -109
  185. package/dist/sync/commitFrames.d.ts +6 -40
  186. package/dist/sync/commitFrames.js +6 -97
  187. package/dist/sync/contextPorts.d.ts +18 -0
  188. package/dist/sync/contextPorts.js +31 -0
  189. package/dist/sync/createClaimStream.d.ts +5 -49
  190. package/dist/sync/createClaimStream.js +5 -469
  191. package/dist/sync/createPresenceStream.d.ts +26 -4
  192. package/dist/sync/createPresenceStream.js +28 -20
  193. package/dist/sync/createSnapshot.d.ts +2 -2
  194. package/dist/sync/createSnapshot.js +1 -1
  195. package/dist/sync/credentialLifecycle.d.ts +5 -173
  196. package/dist/sync/credentialLifecycle.js +5 -320
  197. package/dist/sync/deltaPipeline.d.ts +1 -1
  198. package/dist/sync/participants.d.ts +5 -4
  199. package/dist/sync/participants.js +29 -22
  200. package/dist/sync/schemaDrift.d.ts +55 -0
  201. package/dist/sync/schemaDrift.js +53 -0
  202. package/dist/sync/schemas.d.ts +21 -32
  203. package/dist/sync/schemas.js +26 -17
  204. package/dist/sync/syncPlan.d.ts +3 -3
  205. package/dist/sync/wsFrameHandlers.d.ts +6 -114
  206. package/dist/sync/wsFrameHandlers.js +6 -392
  207. package/dist/testing/fixtures/bootstrap.d.ts +1 -1
  208. package/dist/testing/fixtures/deltas.d.ts +1 -1
  209. package/dist/testing/fixtures/httpResponses.d.ts +70 -0
  210. package/dist/testing/fixtures/httpResponses.js +90 -0
  211. package/dist/testing/fixtures/models.js +1 -1
  212. package/dist/testing/helpers/wait.js +1 -1
  213. package/dist/testing/mocks/MockMutationExecutor.d.ts +2 -2
  214. package/dist/testing/mocks/MockMutationExecutor.js +8 -14
  215. package/dist/testing/mocks/MockSyncContext.d.ts +11 -11
  216. package/dist/testing/mocks/MockSyncContext.js +10 -9
  217. package/dist/testing/mocks/MockSyncStore.js +1 -1
  218. package/dist/testing/mocks/MockWebSocket.d.ts +2 -2
  219. package/dist/transaction/ablo.d.ts +88 -0
  220. package/dist/transaction/ablo.js +33 -0
  221. package/dist/{client/auth.d.ts → transaction/auth/apiKey.d.ts} +43 -8
  222. package/dist/{client/auth.js → transaction/auth/apiKey.js} +19 -0
  223. package/dist/transaction/auth/bootstrapScope.d.ts +15 -0
  224. package/dist/transaction/auth/bootstrapScope.js +1 -0
  225. package/dist/transaction/auth/capability.d.ts +177 -0
  226. package/dist/transaction/auth/capability.js +199 -0
  227. package/dist/{auth → transaction/auth}/credentialSource.d.ts +8 -1
  228. package/dist/{client → transaction/auth}/identity.d.ts +8 -7
  229. package/dist/{client → transaction/auth}/identity.js +1 -1
  230. package/dist/transaction/auth/index.d.ts +162 -0
  231. package/dist/transaction/auth/index.js +304 -0
  232. package/dist/{auth → transaction/auth}/schemas.d.ts +1 -1
  233. package/dist/{auth → transaction/auth}/schemas.js +13 -13
  234. package/dist/{client → transaction/auth}/sessionMint.d.ts +8 -8
  235. package/dist/{client → transaction/auth}/sessionMint.js +4 -7
  236. package/dist/transaction/coordination/awaitClaimGrant.d.ts +49 -0
  237. package/dist/transaction/coordination/awaitClaimGrant.js +112 -0
  238. package/dist/transaction/coordination/claimMeta.d.ts +49 -0
  239. package/dist/transaction/coordination/claimMeta.js +52 -0
  240. package/dist/transaction/coordination/createClaimStream.d.ts +64 -0
  241. package/dist/transaction/coordination/createClaimStream.js +475 -0
  242. package/dist/transaction/coordination/events.d.ts +74 -0
  243. package/dist/transaction/coordination/events.js +7 -0
  244. package/dist/transaction/coordination/index.d.ts +19 -0
  245. package/dist/transaction/coordination/index.js +44 -0
  246. package/dist/transaction/coordination/locator.d.ts +83 -0
  247. package/dist/transaction/coordination/locator.js +82 -0
  248. package/dist/transaction/coordination/schema.d.ts +1473 -0
  249. package/dist/{coordination → transaction/coordination}/schema.js +490 -55
  250. package/dist/transaction/coordination/targetConflict.d.ts +2 -0
  251. package/dist/transaction/coordination/targetConflict.js +103 -0
  252. package/dist/{coordination → transaction/coordination}/trace.d.ts +7 -18
  253. package/dist/{coordination → transaction/coordination}/trace.js +18 -25
  254. package/dist/transaction/durableWrites.d.ts +62 -0
  255. package/dist/{client → transaction}/durableWrites.js +28 -3
  256. package/dist/transaction/environment.d.ts +105 -0
  257. package/dist/transaction/environment.js +108 -0
  258. package/dist/{errorCodes.d.ts → transaction/errorCodes.d.ts} +11 -11
  259. package/dist/{errorCodes.js → transaction/errorCodes.js} +35 -12
  260. package/dist/{errors.d.ts → transaction/errors.d.ts} +37 -13
  261. package/dist/{errors.js → transaction/errors.js} +85 -16
  262. package/dist/transaction/index.d.ts +20 -0
  263. package/dist/transaction/index.js +20 -0
  264. package/dist/transaction/keys/index.d.ts +87 -0
  265. package/dist/transaction/keys/index.js +207 -0
  266. package/dist/transaction/log/syncDeltaRow.d.ts +158 -0
  267. package/dist/transaction/log/syncDeltaRow.js +95 -0
  268. package/dist/{sync/syncPosition.d.ts → transaction/logPosition.d.ts} +22 -8
  269. package/dist/{sync/syncPosition.js → transaction/logPosition.js} +15 -6
  270. package/dist/transaction/logger.d.ts +16 -0
  271. package/dist/transaction/logger.js +7 -0
  272. package/dist/transaction/observability.d.ts +53 -0
  273. package/dist/transaction/observability.js +19 -0
  274. package/dist/transaction/plugin.d.ts +192 -0
  275. package/dist/transaction/plugin.js +87 -0
  276. package/dist/{policy → transaction/policy}/types.d.ts +3 -3
  277. package/dist/{policy → transaction/policy}/types.js +2 -0
  278. package/dist/transaction/resources/httpResources.d.ts +266 -0
  279. package/dist/transaction/resources/httpResources.js +7 -0
  280. package/dist/transaction/resources/modelOperations.d.ts +319 -0
  281. package/dist/transaction/resources/modelOperations.js +12 -0
  282. package/dist/transaction/resources/mutationOptions.d.ts +66 -0
  283. package/dist/transaction/resources/mutationOptions.js +9 -0
  284. package/dist/transaction/resources/where.d.ts +85 -0
  285. package/dist/transaction/resources/where.js +70 -0
  286. package/dist/{client → transaction/resources}/writeOptionsSchema.d.ts +2 -6
  287. package/dist/{client → transaction/resources}/writeOptionsSchema.js +9 -5
  288. package/dist/{schema → transaction/schema}/field.d.ts +5 -5
  289. package/dist/{schema → transaction/schema}/field.js +5 -5
  290. package/dist/transaction/schema/loadStrategy.d.ts +45 -0
  291. package/dist/transaction/schema/loadStrategy.js +46 -0
  292. package/dist/{schema → transaction/schema}/model.d.ts +50 -35
  293. package/dist/{schema → transaction/schema}/model.js +30 -20
  294. package/dist/transaction/schema/openapi.d.ts +57 -0
  295. package/dist/transaction/schema/openapi.js +340 -0
  296. package/dist/{schema → transaction/schema}/relation.d.ts +14 -14
  297. package/dist/{schema → transaction/schema}/relation.js +7 -7
  298. package/dist/{schema → transaction/schema}/residency.d.ts +0 -9
  299. package/dist/{schema → transaction/schema}/residency.js +0 -5
  300. package/dist/{schema → transaction/schema}/roles.d.ts +5 -5
  301. package/dist/{schema → transaction/schema}/roles.js +5 -5
  302. package/dist/{schema → transaction/schema}/schema.d.ts +12 -10
  303. package/dist/{schema → transaction/schema}/schema.js +4 -3
  304. package/dist/{schema → transaction/schema}/tenancy.d.ts +1 -1
  305. package/dist/{schema → transaction/schema}/tenancy.js +7 -4
  306. package/dist/transaction/transactionLayer.d.ts +82 -0
  307. package/dist/transaction/transactionLayer.js +24 -0
  308. package/dist/{transactions → transaction/transactions/settlement}/commitEnvelope.d.ts +4 -5
  309. package/dist/{transactions → transaction/transactions/settlement}/commitEnvelope.js +9 -13
  310. package/dist/{transactions → transaction/transactions/settlement}/httpCommitEnvelope.d.ts +9 -2
  311. package/dist/{transactions → transaction/transactions/settlement}/httpCommitEnvelope.js +5 -9
  312. package/dist/{transactions/durableWriteStore.d.ts → transaction/transactions/settlement/pendingWrite.d.ts} +10 -36
  313. package/dist/transaction/transactions/settlement/pendingWrite.js +20 -0
  314. package/dist/transaction/transport/commitFrames.d.ts +90 -0
  315. package/dist/transaction/transport/commitFrames.js +134 -0
  316. package/dist/transaction/transport/connectionManager.d.ts +215 -0
  317. package/dist/transaction/transport/connectionManager.js +673 -0
  318. package/dist/transaction/transport/credentialLifecycle.d.ts +177 -0
  319. package/dist/transaction/transport/credentialLifecycle.js +324 -0
  320. package/dist/{sync → transaction/transport}/heartbeat.d.ts +3 -1
  321. package/dist/{sync → transaction/transport}/heartbeat.js +6 -4
  322. package/dist/{client → transaction/transport}/httpClient.d.ts +59 -16
  323. package/dist/{client → transaction/transport}/httpClient.js +5 -5
  324. package/dist/transaction/transport/httpOptions.d.ts +33 -0
  325. package/dist/transaction/transport/httpOptions.js +12 -0
  326. package/dist/{client → transaction/transport}/httpTransport.js +171 -85
  327. package/dist/{sync/NetworkProbe.d.ts → transaction/transport/networkProbe.d.ts} +7 -4
  328. package/dist/{sync/NetworkProbe.js → transaction/transport/networkProbe.js} +14 -13
  329. package/dist/transaction/transport/wsFrameHandlers.d.ts +128 -0
  330. package/dist/transaction/transport/wsFrameHandlers.js +429 -0
  331. package/dist/transaction/transport/wsTransport.d.ts +576 -0
  332. package/dist/transaction/transport/wsTransport.js +1017 -0
  333. package/dist/transaction/types/assertExact.d.ts +17 -0
  334. package/dist/transaction/types/assertExact.js +1 -0
  335. package/dist/{types → transaction/types}/global.d.ts +17 -2
  336. package/dist/{types → transaction/types}/global.js +2 -1
  337. package/dist/{types → transaction/types}/index.d.ts +14 -46
  338. package/dist/{types → transaction/types}/index.js +7 -16
  339. package/dist/{types → transaction/types}/streams.d.ts +63 -45
  340. package/dist/{utils → transaction/utils}/json.d.ts +18 -0
  341. package/dist/transaction/utils/json.js +276 -0
  342. package/dist/transaction/wire/accountResponses.d.ts +351 -0
  343. package/dist/transaction/wire/accountResponses.js +255 -0
  344. package/dist/transaction/wire/auth.d.ts +49 -0
  345. package/dist/transaction/wire/auth.js +57 -0
  346. package/dist/transaction/wire/claimEvent.d.ts +76 -0
  347. package/dist/transaction/wire/claimEvent.js +73 -0
  348. package/dist/transaction/wire/claims.d.ts +463 -0
  349. package/dist/transaction/wire/claims.js +229 -0
  350. package/dist/{wire → transaction/wire}/commit.d.ts +125 -193
  351. package/dist/{wire → transaction/wire}/commit.js +68 -47
  352. package/dist/{wire → transaction/wire}/delta.d.ts +66 -17
  353. package/dist/{wire → transaction/wire}/delta.js +37 -13
  354. package/dist/transaction/wire/errorEnvelope.d.ts +72 -0
  355. package/dist/{wire → transaction/wire}/errorEnvelope.js +36 -5
  356. package/dist/transaction/wire/feedCursor.d.ts +60 -0
  357. package/dist/transaction/wire/feedCursor.js +82 -0
  358. package/dist/transaction/wire/feedEvent.d.ts +177 -0
  359. package/dist/transaction/wire/feedEvent.js +39 -0
  360. package/dist/transaction/wire/frames.d.ts +194 -0
  361. package/dist/transaction/wire/frames.js +50 -0
  362. package/dist/transaction/wire/inboundFrames.d.ts +552 -0
  363. package/dist/transaction/wire/inboundFrames.js +116 -0
  364. package/dist/transaction/wire/index.d.ts +50 -0
  365. package/dist/transaction/wire/index.js +74 -0
  366. package/dist/{wire → transaction/wire}/listEnvelope.d.ts +13 -14
  367. package/dist/transaction/wire/listEnvelope.js +42 -0
  368. package/dist/transaction/wire/modelResponses.d.ts +85 -0
  369. package/dist/transaction/wire/modelResponses.js +43 -0
  370. package/dist/transactions/{TransactionQueue.d.ts → mutations/MutationQueue.d.ts} +79 -38
  371. package/dist/transactions/{TransactionQueue.js → mutations/MutationQueue.js} +110 -59
  372. package/dist/transactions/{TransactionStore.d.ts → mutations/MutationStore.d.ts} +8 -8
  373. package/dist/transactions/{TransactionStore.js → mutations/MutationStore.js} +2 -2
  374. package/dist/transactions/{coalesceRules.d.ts → mutations/coalesceRules.d.ts} +10 -10
  375. package/dist/transactions/{coalesceRules.js → mutations/coalesceRules.js} +1 -1
  376. package/dist/transactions/mutations/commitLatency.d.ts +52 -0
  377. package/dist/transactions/mutations/commitLatency.js +130 -0
  378. package/dist/transactions/{commitOutboxStore.d.ts → mutations/commitOutboxStore.d.ts} +1 -5
  379. package/dist/transactions/{commitOutboxStore.js → mutations/commitOutboxStore.js} +1 -1
  380. package/dist/transactions/{commitPayload.d.ts → mutations/commitPayload.d.ts} +16 -15
  381. package/dist/transactions/{commitPayload.js → mutations/commitPayload.js} +12 -12
  382. package/dist/transactions/{deltaConfirmation.d.ts → mutations/deltaConfirmation.d.ts} +11 -11
  383. package/dist/transactions/{deltaConfirmation.js → mutations/deltaConfirmation.js} +7 -7
  384. package/dist/transactions/mutations/durableWriteStore.d.ts +14 -0
  385. package/dist/transactions/mutations/durableWriteStore.js +12 -0
  386. package/dist/transactions/{optimisticApply.d.ts → mutations/optimisticApply.d.ts} +7 -7
  387. package/dist/transactions/{replayValidation.d.ts → mutations/replayValidation.d.ts} +3 -3
  388. package/dist/transactions/{replayValidation.js → mutations/replayValidation.js} +4 -3
  389. package/dist/utils/mobxSetup.d.ts +1 -1
  390. package/dist/utils/mobxSetup.js +5 -2
  391. package/dist/webhooks/events.d.ts +2 -2
  392. package/dist/wire/index.d.ts +1 -34
  393. package/dist/wire/index.js +8 -49
  394. package/docs/agent-messaging.md +3 -3
  395. package/docs/agents.md +19 -12
  396. package/docs/api-keys.md +8 -4
  397. package/docs/api.md +22 -18
  398. package/docs/audit.md +2 -0
  399. package/docs/cli.md +31 -3
  400. package/docs/client-behavior.md +8 -6
  401. package/docs/concurrency-convention.md +30 -24
  402. package/docs/coordination.md +48 -38
  403. package/docs/data-sources.md +3 -1
  404. package/docs/debugging.md +5 -3
  405. package/docs/deployment.md +267 -0
  406. package/docs/examples/agent-human.md +49 -42
  407. package/docs/examples/ai-sdk-tool.md +69 -44
  408. package/docs/examples/existing-python-backend.md +8 -6
  409. package/docs/examples/nextjs.md +129 -47
  410. package/docs/examples/scoped-agent.md +45 -44
  411. package/docs/examples/server-agent.md +46 -26
  412. package/docs/groups.md +32 -29
  413. package/docs/guarantees.md +4 -2
  414. package/docs/how-it-works.md +9 -7
  415. package/docs/idempotency.md +126 -0
  416. package/docs/identity.md +58 -54
  417. package/docs/index.md +172 -84
  418. package/docs/integration-guide.md +17 -16
  419. package/docs/interaction-model.md +6 -4
  420. package/docs/mcp.md +41 -16
  421. package/docs/migration.md +63 -5
  422. package/docs/operating-on-your-database.md +111 -0
  423. package/docs/projects.md +2 -0
  424. package/docs/quickstart.md +22 -5
  425. package/docs/react.md +12 -10
  426. package/docs/schema-contract.md +5 -3
  427. package/docs/session-settings.md +108 -0
  428. package/docs/sessions.md +3 -1
  429. package/docs/webhooks.md +3 -1
  430. package/llms.txt +47 -17
  431. package/package.json +10 -8
  432. package/dist/agent/Agent.d.ts +0 -366
  433. package/dist/agent/Agent.js +0 -514
  434. package/dist/agent/index.d.ts +0 -115
  435. package/dist/agent/index.js +0 -128
  436. package/dist/agent/session.d.ts +0 -93
  437. package/dist/agent/session.js +0 -149
  438. package/dist/agent/types.d.ts +0 -68
  439. package/dist/agent/types.js +0 -9
  440. package/dist/client/durableWrites.d.ts +0 -21
  441. package/dist/coordination/schema.d.ts +0 -722
  442. package/dist/schema/openapi.d.ts +0 -29
  443. package/dist/schema/openapi.js +0 -124
  444. package/dist/transactions/durableWriteStore.js +0 -30
  445. package/dist/utils/json.js +0 -88
  446. package/dist/wire/errorEnvelope.d.ts +0 -55
  447. package/dist/wire/frames.d.ts +0 -197
  448. package/dist/wire/frames.js +0 -49
  449. package/dist/wire/listEnvelope.js +0 -18
  450. /package/dist/{client → transaction/auth}/credentialEndpoint.d.ts +0 -0
  451. /package/dist/{client → transaction/auth}/credentialEndpoint.js +0 -0
  452. /package/dist/{auth → transaction/auth}/credentialPolicy.d.ts +0 -0
  453. /package/dist/{auth → transaction/auth}/credentialPolicy.js +0 -0
  454. /package/dist/{auth → transaction/auth}/credentialSource.js +0 -0
  455. /package/dist/{client → transaction/auth}/hostedEndpoints.d.ts +0 -0
  456. /package/dist/{client → transaction/auth}/hostedEndpoints.js +0 -0
  457. /package/dist/{client → transaction/coordination}/claimHeartbeatLoop.d.ts +0 -0
  458. /package/dist/{client → transaction/coordination}/claimHeartbeatLoop.js +0 -0
  459. /package/dist/{client → transaction}/persistence.d.ts +0 -0
  460. /package/dist/{client → transaction}/persistence.js +0 -0
  461. /package/dist/{client → transaction/resources}/functionalUpdate.d.ts +0 -0
  462. /package/dist/{client → transaction/resources}/functionalUpdate.js +0 -0
  463. /package/dist/{transactions → transaction/transactions/settlement}/idempotencyKey.d.ts +0 -0
  464. /package/dist/{transactions → transaction/transactions/settlement}/idempotencyKey.js +0 -0
  465. /package/dist/{client → transaction/transport}/httpTransport.d.ts +0 -0
  466. /package/dist/{types → transaction/types}/modelData.d.ts +0 -0
  467. /package/dist/{types → transaction/types}/modelData.js +0 -0
  468. /package/dist/{types → transaction/types}/participant.d.ts +0 -0
  469. /package/dist/{types → transaction/types}/participant.js +0 -0
  470. /package/dist/{types → transaction/types}/streams.js +0 -0
  471. /package/dist/{utils → transaction/utils}/asyncIterator.d.ts +0 -0
  472. /package/dist/{utils → transaction/utils}/asyncIterator.js +0 -0
  473. /package/dist/{utils → transaction/utils}/duration.d.ts +0 -0
  474. /package/dist/{utils → transaction/utils}/duration.js +0 -0
  475. /package/dist/{wire → transaction/wire}/bootstrapReason.d.ts +0 -0
  476. /package/dist/{wire → transaction/wire}/bootstrapReason.js +0 -0
  477. /package/dist/{wire → transaction/wire}/protocol.d.ts +0 -0
  478. /package/dist/{wire → transaction/wire}/protocol.js +0 -0
  479. /package/dist/{wire → transaction/wire}/protocolVersion.d.ts +0 -0
  480. /package/dist/{wire → transaction/wire}/protocolVersion.js +0 -0
  481. /package/dist/transactions/{UnconfirmedWrites.d.ts → mutations/UnconfirmedWrites.d.ts} +0 -0
  482. /package/dist/transactions/{UnconfirmedWrites.js → mutations/UnconfirmedWrites.js} +0 -0
  483. /package/dist/transactions/{optimisticApply.js → mutations/optimisticApply.js} +0 -0
@@ -23,31 +23,27 @@
23
23
  // Re-export Zod for convenience (consumers can also import directly)
24
24
  export { z } from 'zod';
25
25
  // Field helpers (optional convenience wrappers around Zod)
26
- export { field, indexed, getFieldMeta } from './field.js';
26
+ export { field, indexed, getFieldMeta } from '../transaction/schema/field.js';
27
27
  // Relation builders
28
- export { relation } from './relation.js';
28
+ export { relation } from '../transaction/schema/relation.js';
29
29
  // Tenancy — the single source of truth for how a model's rows are tenant-scoped.
30
- export { tenancySchema, scopedViaRefSchema, policyInputSchema, resolvePolicy, resolveTenancy, tenancyColumn, DEFAULT_ORG_COLUMN, } from './tenancy.js';
30
+ export { tenancySchema, scopedViaRefSchema, policyInputSchema, resolvePolicy, resolveTenancy, tenancyColumn, DEFAULT_ORG_COLUMN, } from '../transaction/schema/tenancy.js';
31
31
  // Model residency — which database a model's rows live in (`tenant` can be a
32
32
  // customer's own database, `control` is Ablo's). A sibling axis to `tenancy`.
33
- export { residencySchema, DEFAULT_RESIDENCY,
34
- // Deliberate back-compat re-export of the deprecated aliases:
35
- // eslint-disable-next-line @typescript-eslint/no-deprecated
36
- planeSchema,
37
- // eslint-disable-next-line @typescript-eslint/no-deprecated
38
- DEFAULT_PLANE, } from './residency.js';
33
+ export { residencySchema, DEFAULT_RESIDENCY, } from '../transaction/schema/residency.js';
39
34
  // The stored `sync_deltas` row, described as Zod schemas grouped by subsystem and by
40
35
  // which database the columns live in.
41
- export { syncDeltaCoreSchema, deltaAttributionSchema, deltaProvenanceSchema, syncDeltaRowSchema, participantKindSchema, confirmationStateSchema, backfillProvenanceSchema, DELTA_DATA_CLASSIFICATION, DELTA_PHYSICAL_STORAGE,
42
- // Deliberate back-compat re-export; physical storage is the precise name.
43
- // eslint-disable-next-line @typescript-eslint/no-deprecated
44
- DELTA_RESIDENCY, } from './syncDeltaRow.js';
36
+ export { syncDeltaCoreSchema, deltaAttributionSchema, syncDeltaRowSchema, participantKindSchema, confirmationStateSchema, backfillProvenanceSchema, DELTA_DATA_CLASSIFICATION, DELTA_PHYSICAL_STORAGE, } from './syncDeltaRow.js';
45
37
  // The wire delta contract — the server-to-client projection of the stored row.
46
38
  // Both the client SDK and the server derive their `SyncDelta` type from these with
47
39
  // `z.infer`, so the two ends cannot drift apart.
48
- export { syncDeltaActionSchema, wireDeltaDataSchema, participantRefSchema, syncDeltaWireCoreSchema, clientSyncDeltaSchema, serverSyncDeltaSchema, } from '../wire/delta.js';
40
+ export { syncDeltaActionSchema, wireDeltaDataSchema, participantRefSchema, syncDeltaWireCoreSchema, clientSyncDeltaSchema, serverSyncDeltaSchema, } from '../transaction/wire/delta.js';
49
41
  // Model builder
50
- export { model, scopeKindOf, } from './model.js';
42
+ export { model, scopeKindOf,
43
+ // Both meanings: the value a tool enumerates to learn the strategies, and the
44
+ // type a `load` option is checked against. `loadsAtBootstrap` is the one
45
+ // predicate both the client subscription and the server payload ask.
46
+ LoadStrategy, DEFAULT_LOAD_STRATEGY, loadsAtBootstrap, } from '../transaction/schema/model.js';
51
47
  // Coordination authoring helpers for the `conflict` axis — composable disposition
52
48
  // functions plus a combinator that merges them.
53
49
  export { coordination, humansOverwrite, humansReject, humansNotify, agentsOverwrite, agentsReject, agentsNotify, systemOverwrite, systemReject, systemNotify, } from './coordination.js';
@@ -56,9 +52,9 @@ export { coordination, humansOverwrite, humansReject, humansNotify, agentsOverwr
56
52
  // sensible defaults for everything else.
57
53
  export { mutable, readOnly } from './sugar.js';
58
54
  // Schema definition + type inference
59
- export { defineSchema, composeIdentitySyncGroups, composeEntitySyncGroups, intersectRequestedWithAllowed, identityRole, entityRole, extractIdentityIds, extractEntityIds, syncGroup, syncGroupSchema, syncGroupInputSchema, isSyncGroupInput, identityRoleSchema, entityRoleSchema, roleSchema, roleSourceSchema, scopeSchema, grantsRefSchema, groupsInputSchema, RESERVED_SESSION_SETTINGS, } from './schema.js';
55
+ export { defineSchema, composeIdentitySyncGroups, composeEntitySyncGroups, intersectRequestedWithAllowed, identityRole, entityRole, extractIdentityIds, extractEntityIds, syncGroup, syncGroupSchema, syncGroupInputSchema, isSyncGroupInput, identityRoleSchema, entityRoleSchema, roleSchema, roleSourceSchema, scopeSchema, grantsRefSchema, groupsInputSchema, RESERVED_SESSION_SETTINGS, } from '../transaction/schema/schema.js';
60
56
  // Schema ⇄ JSON — serialize a schema for transport and rebuild it on the far side.
61
- export { serializeSchema, parseSchema, toSchemaJSON, fromSchemaJSON, schemaHash, } from './serialize.js';
57
+ export { serializeSchema, parseSchema, toSchemaJSON, fromSchemaJSON, schemaHash, modelHash, } from './serialize.js';
62
58
  // Schema projection — derive an app's subset from one canonical schema.
63
59
  export { selectModels, omitModels } from './select.js';
64
60
  // Schema → Postgres DDL — shared by the host implementation and the command-line tools.
@@ -73,4 +69,8 @@ export { diffSchema, classifyMigration, classifyCast, isAutoApplicable, isBlocke
73
69
  export { generateTypes } from './generate.js';
74
70
  // Query definition DSL + type inference
75
71
  export { query, defineQueries, } from './queries.js';
76
- export { schemaToOpenApi } from './openapi.js';
72
+ // The OpenAPI generator describes the language-agnostic `/v1` surface — the
73
+ // primitive itself, which a Python or Go caller consumes with no TypeScript
74
+ // anywhere — so it lives in the settlement core (ADR 0016). Re-exported here so
75
+ // the `@abloatai/ablo/schema` import path keeps resolving.
76
+ export { abloOpenApi, schemaToOpenApi } from '../transaction/schema/openapi.js';
@@ -13,27 +13,27 @@
13
13
  * } from '@abloatai/ablo/schema';
14
14
  *
15
15
  * const schema = defineSchema({
16
- * slideLayer: model(
17
- * { slideId: z.string(), type: z.string() },
18
- * { slide: relation.belongsTo('slides', 'slideId') },
19
- * { load: 'lazy', typename: 'SlideLayer', persist: {} },
16
+ * block: model(
17
+ * { sectionId: z.string(), type: z.string() },
18
+ * { section: relation.belongsTo('sections', 'sectionId') },
19
+ * { load: 'lazy', typename: 'Block', persist: {} },
20
20
  * ),
21
21
  * });
22
22
  *
23
23
  * const queries = defineQueries(schema, {
24
- * slideLayersByDeck: query({
25
- * input: z.object({ deckId: z.string() }),
26
- * returns: 'slideLayer', // ← type-checked against schema.models
24
+ * blocksByReport: query({
25
+ * input: z.object({ reportId: z.string() }),
26
+ * returns: 'block', // ← type-checked against schema.models
27
27
  * }),
28
28
  * });
29
29
  *
30
- * type Input = InferQueryInput<typeof queries.queries.slideLayersByDeck>;
31
- * // ^? { deckId: string }
30
+ * type Input = InferQueryInput<typeof queries.queries.blocksByReport>;
31
+ * // ^? { reportId: string }
32
32
  * type Result = InferQueryResult<
33
33
  * typeof schema,
34
- * typeof queries.queries.slideLayersByDeck
34
+ * typeof queries.queries.blocksByReport
35
35
  * >;
36
- * // ^? Array<SlideLayer>
36
+ * // ^? Array<Block>
37
37
  *
38
38
  * Design notes:
39
39
  *
@@ -55,7 +55,7 @@
55
55
  * `schema.models[queryDef.returns]` lookup.
56
56
  */
57
57
  import { z } from 'zod';
58
- import type { Schema, InferModel, InferModelNames } from './schema.js';
58
+ import type { Schema, InferModel, InferModelNames } from '../transaction/schema/schema.js';
59
59
  /**
60
60
  * A single query definition: a zod input shape, the schema key of the
61
61
  * model it returns, and (after assembly) the name it was registered
@@ -97,15 +97,15 @@ interface QuerySpec<TInput extends z.ZodType, TReturns extends string> {
97
97
  * Define a query.
98
98
  *
99
99
  * `TReturns` is a `const` generic so TypeScript preserves the literal
100
- * type of the `returns` value at call time (e.g., `'slideLayer'`
100
+ * type of the `returns` value at call time (e.g., `'block'`
101
101
  * instead of widening to `string`). This is what lets `defineQueries`
102
102
  * type-check `returns` against the schema's model keys without
103
103
  * requiring the consumer to write `as const` manually.
104
104
  *
105
105
  * ```ts
106
- * const slideLayersByDeck = query({
107
- * input: z.object({ deckId: z.string() }),
108
- * returns: 'slideLayer',
106
+ * const blocksByReport = query({
107
+ * input: z.object({ reportId: z.string() }),
108
+ * returns: 'block',
109
109
  * });
110
110
  * ```
111
111
  */
@@ -133,8 +133,8 @@ export interface Queries<S extends Schema, Q extends QueryRecord<S>> {
133
133
  * Infer the input type of a query from its zod schema.
134
134
  *
135
135
  * ```ts
136
- * type Input = InferQueryInput<typeof queries.queries.slideLayersByDeck>;
137
- * // { deckId: string }
136
+ * type Input = InferQueryInput<typeof queries.queries.blocksByReport>;
137
+ * // { reportId: string }
138
138
  * ```
139
139
  */
140
140
  export type InferQueryInput<Q extends QueryDef> = z.infer<Q['input']>;
@@ -151,9 +151,9 @@ export type InferQueryInput<Q extends QueryDef> = z.infer<Q['input']>;
151
151
  * ```ts
152
152
  * type Result = InferQueryResult<
153
153
  * typeof schema,
154
- * typeof queries.queries.slideLayersByDeck
154
+ * typeof queries.queries.blocksByReport
155
155
  * >;
156
- * // Array<SlideLayer>
156
+ * // Array<Block>
157
157
  * ```
158
158
  */
159
159
  export type InferQueryResult<S extends Schema, Q extends QueryDef> = Q extends QueryDef<z.ZodType, infer R> ? R extends InferModelNames<S> ? InferModel<S, R>[] : never : never;
@@ -176,23 +176,23 @@ export type InferQueryResult<S extends Schema, Q extends QueryDef> = Q extends Q
176
176
  * exist" error deep inside the loader.
177
177
  *
178
178
  * Each resolved query gets its `name` populated from the record key:
179
- * `queries.slideLayersByDeck.name === 'slideLayersByDeck'`. Dispatch and
179
+ * `queries.blocksByReport.name === 'blocksByReport'`. Dispatch and
180
180
  * lookup code read `queryDef.name` directly rather than re-deriving it from
181
181
  * the surrounding record.
182
182
  *
183
183
  * ```ts
184
184
  * const schema = defineSchema({
185
- * slideLayer: model(
186
- * { slideId: z.string() },
185
+ * block: model(
186
+ * { sectionId: z.string() },
187
187
  * {},
188
- * { load: 'lazy', typename: 'SlideLayer', persist: {} },
188
+ * { load: 'lazy', typename: 'Block', persist: {} },
189
189
  * ),
190
190
  * });
191
191
  *
192
192
  * const queries = defineQueries(schema, {
193
- * slideLayersByDeck: query({
194
- * input: z.object({ deckId: z.string() }),
195
- * returns: 'slideLayer', // ← type-checked
193
+ * blocksByReport: query({
194
+ * input: z.object({ reportId: z.string() }),
195
+ * returns: 'block', // ← type-checked
196
196
  * }),
197
197
  * });
198
198
  * ```
@@ -13,27 +13,27 @@
13
13
  * } from '@abloatai/ablo/schema';
14
14
  *
15
15
  * const schema = defineSchema({
16
- * slideLayer: model(
17
- * { slideId: z.string(), type: z.string() },
18
- * { slide: relation.belongsTo('slides', 'slideId') },
19
- * { load: 'lazy', typename: 'SlideLayer', persist: {} },
16
+ * block: model(
17
+ * { sectionId: z.string(), type: z.string() },
18
+ * { section: relation.belongsTo('sections', 'sectionId') },
19
+ * { load: 'lazy', typename: 'Block', persist: {} },
20
20
  * ),
21
21
  * });
22
22
  *
23
23
  * const queries = defineQueries(schema, {
24
- * slideLayersByDeck: query({
25
- * input: z.object({ deckId: z.string() }),
26
- * returns: 'slideLayer', // ← type-checked against schema.models
24
+ * blocksByReport: query({
25
+ * input: z.object({ reportId: z.string() }),
26
+ * returns: 'block', // ← type-checked against schema.models
27
27
  * }),
28
28
  * });
29
29
  *
30
- * type Input = InferQueryInput<typeof queries.queries.slideLayersByDeck>;
31
- * // ^? { deckId: string }
30
+ * type Input = InferQueryInput<typeof queries.queries.blocksByReport>;
31
+ * // ^? { reportId: string }
32
32
  * type Result = InferQueryResult<
33
33
  * typeof schema,
34
- * typeof queries.queries.slideLayersByDeck
34
+ * typeof queries.queries.blocksByReport
35
35
  * >;
36
- * // ^? Array<SlideLayer>
36
+ * // ^? Array<Block>
37
37
  *
38
38
  * Design notes:
39
39
  *
@@ -55,21 +55,21 @@
55
55
  * `schema.models[queryDef.returns]` lookup.
56
56
  */
57
57
  import { z } from 'zod';
58
- import { AbloValidationError } from '../errors.js';
58
+ import { AbloValidationError } from '../transaction/errors.js';
59
59
  // ── query() factory ───────────────────────────────────────────────────────
60
60
  /**
61
61
  * Define a query.
62
62
  *
63
63
  * `TReturns` is a `const` generic so TypeScript preserves the literal
64
- * type of the `returns` value at call time (e.g., `'slideLayer'`
64
+ * type of the `returns` value at call time (e.g., `'block'`
65
65
  * instead of widening to `string`). This is what lets `defineQueries`
66
66
  * type-check `returns` against the schema's model keys without
67
67
  * requiring the consumer to write `as const` manually.
68
68
  *
69
69
  * ```ts
70
- * const slideLayersByDeck = query({
71
- * input: z.object({ deckId: z.string() }),
72
- * returns: 'slideLayer',
70
+ * const blocksByReport = query({
71
+ * input: z.object({ reportId: z.string() }),
72
+ * returns: 'block',
73
73
  * });
74
74
  * ```
75
75
  */
@@ -99,23 +99,23 @@ export function query(spec) {
99
99
  * exist" error deep inside the loader.
100
100
  *
101
101
  * Each resolved query gets its `name` populated from the record key:
102
- * `queries.slideLayersByDeck.name === 'slideLayersByDeck'`. Dispatch and
102
+ * `queries.blocksByReport.name === 'blocksByReport'`. Dispatch and
103
103
  * lookup code read `queryDef.name` directly rather than re-deriving it from
104
104
  * the surrounding record.
105
105
  *
106
106
  * ```ts
107
107
  * const schema = defineSchema({
108
- * slideLayer: model(
109
- * { slideId: z.string() },
108
+ * block: model(
109
+ * { sectionId: z.string() },
110
110
  * {},
111
- * { load: 'lazy', typename: 'SlideLayer', persist: {} },
111
+ * { load: 'lazy', typename: 'Block', persist: {} },
112
112
  * ),
113
113
  * });
114
114
  *
115
115
  * const queries = defineQueries(schema, {
116
- * slideLayersByDeck: query({
117
- * input: z.object({ deckId: z.string() }),
118
- * returns: 'slideLayer', // ← type-checked
116
+ * blocksByReport: query({
117
+ * input: z.object({ reportId: z.string() }),
118
+ * returns: 'block', // ← type-checked
119
119
  * }),
120
120
  * });
121
121
  * ```
@@ -12,8 +12,8 @@
12
12
  * import { schema as full } from './schema';
13
13
  * import { selectModels } from '@abloatai/ablo/schema';
14
14
  *
15
- * // Subscribe to identity and dataroom content only.
16
- * export const schema = selectModels(full, ['users', 'organizations', 'datarooms', 'folders', 'files']);
15
+ * // Subscribe to identity and document content only.
16
+ * export const schema = selectModels(full, ['users', 'organizations', 'workspaces', 'folders', 'files']);
17
17
  * ```
18
18
  *
19
19
  * Relations whose target falls outside the selected set are dropped, so the
@@ -21,7 +21,7 @@
21
21
  * scope-inheritance throws instead, because silently losing it would mis-route
22
22
  * a record's fan-out — the selected set must be closed under `parent` edges.
23
23
  */
24
- import type { Schema, SchemaRecord } from './schema.js';
24
+ import type { Schema, SchemaRecord } from '../transaction/schema/schema.js';
25
25
  export declare function selectModels<S extends SchemaRecord, K extends keyof S & string>(schema: Schema<S>, keys: readonly K[]): Schema<Pick<S, K>>;
26
26
  /**
27
27
  * `omitModels` is `selectModels` from the other side: keep every model EXCEPT
@@ -12,8 +12,8 @@
12
12
  * import { schema as full } from './schema';
13
13
  * import { selectModels } from '@abloatai/ablo/schema';
14
14
  *
15
- * // Subscribe to identity and dataroom content only.
16
- * export const schema = selectModels(full, ['users', 'organizations', 'datarooms', 'folders', 'files']);
15
+ * // Subscribe to identity and document content only.
16
+ * export const schema = selectModels(full, ['users', 'organizations', 'workspaces', 'folders', 'files']);
17
17
  * ```
18
18
  *
19
19
  * Relations whose target falls outside the selected set are dropped, so the
@@ -21,7 +21,7 @@
21
21
  * scope-inheritance throws instead, because silently losing it would mis-route
22
22
  * a record's fan-out — the selected set must be closed under `parent` edges.
23
23
  */
24
- import { AbloValidationError } from '../errors.js';
24
+ import { AbloValidationError } from '../transaction/errors.js';
25
25
  import { schemaHash } from './serialize.js';
26
26
  export function selectModels(schema, keys) {
27
27
  const keep = new Set(keys);
@@ -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,8 @@
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 { baseFieldsSchema, } from '../transaction/schema/schema.js';
32
32
  /** Current schema-JSON envelope version. Bump this on a breaking change to the
33
33
  * JSON shape itself — not to a user's schema. */
34
34
  const SCHEMA_JSON_VERSION = 3;
@@ -227,7 +227,21 @@ export function parseSchema(json) {
227
227
  * active schema hash. Not a security primitive.
228
228
  */
229
229
  export function schemaHash(schema) {
230
- const canonical = canonicalJson(toSchemaJSON(schema));
230
+ return fnv1a(canonicalJson(toSchemaJSON(schema)));
231
+ }
232
+ /**
233
+ * Content hash of ONE serialized model — the unit of the semantic drift check.
234
+ * Two schemas agree on a model exactly when these match, which is what lets a
235
+ * client compare only the models it declares instead of welding itself to the
236
+ * whole-schema hash (where any additive push reads as drift). Computed over the
237
+ * model's `SchemaJSON` entry with the same canonicalization and hash as
238
+ * {@link schemaHash}, on both the client and the server's `GET /api/schema`.
239
+ */
240
+ export function modelHash(modelJson) {
241
+ return fnv1a(canonicalJson(modelJson));
242
+ }
243
+ /** FNV-1a over an already-canonical string — shared by both hashes above. */
244
+ function fnv1a(canonical) {
231
245
  let h = 0x811c9dc5;
232
246
  for (let i = 0; i < canonical.length; i++) {
233
247
  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';