@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
@@ -1,23 +1,33 @@
1
1
  /**
2
2
  * Authoring helpers for a model's `conflict` axis — the setting that decides
3
3
  * what happens when two writers touch the same row. Instead of writing a raw
4
- * disposition map, you compose small, named functions the way the rest of the
5
- * schema DSL reads (`relation.belongsTo()`, `field.string()`):
4
+ * disposition map, you name the rules the way the rest of the schema DSL reads
5
+ * (`relation.belongsTo()`, `field.string()`), and chain them the way a field
6
+ * chains its own modifiers:
6
7
  *
7
8
  * ```ts
8
- * import { coordination, humansOverwrite, agentsReject } from '@abloatai/ablo/schema';
9
+ * import { coordination } from '@abloatai/ablo/schema';
9
10
  *
10
- * conflict: coordination(humansOverwrite(), agentsReject())
11
+ * conflict: coordination.humansOverwrite().agentsReject()
11
12
  * // → { user: 'overwrite', agent: 'reject' } (a human's write wins, an agent's yields)
12
13
  * ```
13
14
  *
14
- * Each helper is named for the disposition it applies — drawn from the same
15
+ * Each rule is named for the disposition it applies — drawn from the same
15
16
  * `overwrite | reject | notify` vocabulary the write guards use (`onStale`) —
16
- * and returns a partial {@link ConflictAxis}. {@link coordination} merges the
17
- * pieces, with later rules winning on key collisions. The result is plain,
18
- * serializable data that the engine reads at commit time.
17
+ * and every one of them is also available as a standalone function, which
18
+ * {@link coordination} merges when the rules are assembled dynamically rather
19
+ * than written out:
20
+ *
21
+ * ```ts
22
+ * conflict: coordination(humansOverwrite(), agentsReject())
23
+ * ```
24
+ *
25
+ * Either way the result is plain, serializable data that the engine reads at
26
+ * commit time. The `humans`/`agents` wording belongs to the author; the `user`/
27
+ * `agent`/`system` keys belong to the wire, and this module is the one place
28
+ * the two are mapped to each other.
19
29
  */
20
- import type { ConflictAxis } from '../policy/types.js';
30
+ import type { ConflictAxis } from '../transaction/policy/types.js';
21
31
  /**
22
32
  * One coordination rule: a partial {@link ConflictAxis} produced by a
23
33
  * disposition helper below. Compose with {@link coordination}.
@@ -41,6 +51,34 @@ export declare const systemOverwrite: () => ConflictRule;
41
51
  export declare const systemReject: () => ConflictRule;
42
52
  /** A system or automation stale write triggers a notification: it re-reads and re-applies. */
43
53
  export declare const systemNotify: () => ConflictRule;
54
+ /**
55
+ * A conflict axis that is still open to more rules. Every method applies one
56
+ * disposition and hands back a new axis, so a model's whole stance reads as a
57
+ * single sentence and the reader never has to hold a merge in their head.
58
+ *
59
+ * Each method delegates to the standalone rule of the same name, so a
60
+ * disposition map like `{ user: 'overwrite' }` is written in exactly one place
61
+ * no matter which authoring style a schema uses. Dispositions are own
62
+ * enumerable properties and the methods live on the prototype, so an axis
63
+ * serializes to the same plain object the server has always received.
64
+ */
65
+ declare class CoordinationAxis implements ConflictAxis {
66
+ readonly user?: ConflictAxis['user'];
67
+ readonly agent?: ConflictAxis['agent'];
68
+ readonly system?: ConflictAxis['system'];
69
+ constructor(axis: ConflictAxis);
70
+ /** Apply one more rule, later winning on a repeated kind. */
71
+ private and;
72
+ humansOverwrite(): CoordinationAxis;
73
+ humansReject(): CoordinationAxis;
74
+ humansNotify(): CoordinationAxis;
75
+ agentsOverwrite(): CoordinationAxis;
76
+ agentsReject(): CoordinationAxis;
77
+ agentsNotify(): CoordinationAxis;
78
+ systemOverwrite(): CoordinationAxis;
79
+ systemReject(): CoordinationAxis;
80
+ systemNotify(): CoordinationAxis;
81
+ }
44
82
  /**
45
83
  * Merges coordination rules into a single {@link ConflictAxis}. Later rules win
46
84
  * on key collisions, and a committer kind you leave out falls through to the
@@ -50,4 +88,25 @@ export declare const systemNotify: () => ConflictRule;
50
88
  * coordination(humansOverwrite(), agentsReject()) // → { user: 'overwrite', agent: 'reject' }
51
89
  * ```
52
90
  */
53
- export declare function coordination(...rules: readonly ConflictRule[]): ConflictAxis;
91
+ declare function mergeRules(...rules: readonly ConflictRule[]): ConflictAxis;
92
+ /**
93
+ * The coordination vocabulary, reachable through one name. Call it to merge
94
+ * rules you have assembled; reach through it to start a chain.
95
+ *
96
+ * ```ts
97
+ * conflict: coordination.humansOverwrite().agentsReject()
98
+ * conflict: coordination(humansOverwrite(), agentsReject())
99
+ * ```
100
+ */
101
+ export declare const coordination: typeof mergeRules & {
102
+ humansOverwrite: () => CoordinationAxis;
103
+ humansReject: () => CoordinationAxis;
104
+ humansNotify: () => CoordinationAxis;
105
+ agentsOverwrite: () => CoordinationAxis;
106
+ agentsReject: () => CoordinationAxis;
107
+ agentsNotify: () => CoordinationAxis;
108
+ systemOverwrite: () => CoordinationAxis;
109
+ systemReject: () => CoordinationAxis;
110
+ systemNotify: () => CoordinationAxis;
111
+ };
112
+ export {};
@@ -1,21 +1,31 @@
1
1
  /**
2
2
  * Authoring helpers for a model's `conflict` axis — the setting that decides
3
3
  * what happens when two writers touch the same row. Instead of writing a raw
4
- * disposition map, you compose small, named functions the way the rest of the
5
- * schema DSL reads (`relation.belongsTo()`, `field.string()`):
4
+ * disposition map, you name the rules the way the rest of the schema DSL reads
5
+ * (`relation.belongsTo()`, `field.string()`), and chain them the way a field
6
+ * chains its own modifiers:
6
7
  *
7
8
  * ```ts
8
- * import { coordination, humansOverwrite, agentsReject } from '@abloatai/ablo/schema';
9
+ * import { coordination } from '@abloatai/ablo/schema';
9
10
  *
10
- * conflict: coordination(humansOverwrite(), agentsReject())
11
+ * conflict: coordination.humansOverwrite().agentsReject()
11
12
  * // → { user: 'overwrite', agent: 'reject' } (a human's write wins, an agent's yields)
12
13
  * ```
13
14
  *
14
- * Each helper is named for the disposition it applies — drawn from the same
15
+ * Each rule is named for the disposition it applies — drawn from the same
15
16
  * `overwrite | reject | notify` vocabulary the write guards use (`onStale`) —
16
- * and returns a partial {@link ConflictAxis}. {@link coordination} merges the
17
- * pieces, with later rules winning on key collisions. The result is plain,
18
- * serializable data that the engine reads at commit time.
17
+ * and every one of them is also available as a standalone function, which
18
+ * {@link coordination} merges when the rules are assembled dynamically rather
19
+ * than written out:
20
+ *
21
+ * ```ts
22
+ * conflict: coordination(humansOverwrite(), agentsReject())
23
+ * ```
24
+ *
25
+ * Either way the result is plain, serializable data that the engine reads at
26
+ * commit time. The `humans`/`agents` wording belongs to the author; the `user`/
27
+ * `agent`/`system` keys belong to the wire, and this module is the one place
28
+ * the two are mapped to each other.
19
29
  */
20
30
  // ── Humans (user sessions) ──────────────────────────────────────────────
21
31
  /** A human's conflicting write wins and overwrites the other; it is never blocked. Among humans this gives last-write-wins. */
@@ -38,6 +48,57 @@ export const systemOverwrite = () => ({ system: 'overwrite' });
38
48
  export const systemReject = () => ({ system: 'reject' });
39
49
  /** A system or automation stale write triggers a notification: it re-reads and re-applies. */
40
50
  export const systemNotify = () => ({ system: 'notify' });
51
+ /**
52
+ * A conflict axis that is still open to more rules. Every method applies one
53
+ * disposition and hands back a new axis, so a model's whole stance reads as a
54
+ * single sentence and the reader never has to hold a merge in their head.
55
+ *
56
+ * Each method delegates to the standalone rule of the same name, so a
57
+ * disposition map like `{ user: 'overwrite' }` is written in exactly one place
58
+ * no matter which authoring style a schema uses. Dispositions are own
59
+ * enumerable properties and the methods live on the prototype, so an axis
60
+ * serializes to the same plain object the server has always received.
61
+ */
62
+ class CoordinationAxis {
63
+ constructor(axis) {
64
+ Object.assign(this, Object.fromEntries(Object.entries(axis).filter(([, mode]) => mode !== undefined)));
65
+ }
66
+ /** Apply one more rule, later winning on a repeated kind. */
67
+ and(rule) {
68
+ // Assigned rather than spread, and for the reason the merge form below
69
+ // assigns too: what carries forward is the dispositions, which are own
70
+ // enumerable properties. The chaining methods live on the prototype and the
71
+ // constructor puts them back, so a chain accumulates nothing but data.
72
+ return new CoordinationAxis(Object.assign({}, this, rule));
73
+ }
74
+ humansOverwrite() {
75
+ return this.and(humansOverwrite());
76
+ }
77
+ humansReject() {
78
+ return this.and(humansReject());
79
+ }
80
+ humansNotify() {
81
+ return this.and(humansNotify());
82
+ }
83
+ agentsOverwrite() {
84
+ return this.and(agentsOverwrite());
85
+ }
86
+ agentsReject() {
87
+ return this.and(agentsReject());
88
+ }
89
+ agentsNotify() {
90
+ return this.and(agentsNotify());
91
+ }
92
+ systemOverwrite() {
93
+ return this.and(systemOverwrite());
94
+ }
95
+ systemReject() {
96
+ return this.and(systemReject());
97
+ }
98
+ systemNotify() {
99
+ return this.and(systemNotify());
100
+ }
101
+ }
41
102
  /**
42
103
  * Merges coordination rules into a single {@link ConflictAxis}. Later rules win
43
104
  * on key collisions, and a committer kind you leave out falls through to the
@@ -47,6 +108,26 @@ export const systemNotify = () => ({ system: 'notify' });
47
108
  * coordination(humansOverwrite(), agentsReject()) // → { user: 'overwrite', agent: 'reject' }
48
109
  * ```
49
110
  */
50
- export function coordination(...rules) {
111
+ function mergeRules(...rules) {
51
112
  return Object.assign({}, ...rules);
52
113
  }
114
+ /**
115
+ * The coordination vocabulary, reachable through one name. Call it to merge
116
+ * rules you have assembled; reach through it to start a chain.
117
+ *
118
+ * ```ts
119
+ * conflict: coordination.humansOverwrite().agentsReject()
120
+ * conflict: coordination(humansOverwrite(), agentsReject())
121
+ * ```
122
+ */
123
+ export const coordination = Object.assign(mergeRules, {
124
+ humansOverwrite: () => new CoordinationAxis(humansOverwrite()),
125
+ humansReject: () => new CoordinationAxis(humansReject()),
126
+ humansNotify: () => new CoordinationAxis(humansNotify()),
127
+ agentsOverwrite: () => new CoordinationAxis(agentsOverwrite()),
128
+ agentsReject: () => new CoordinationAxis(agentsReject()),
129
+ agentsNotify: () => new CoordinationAxis(agentsNotify()),
130
+ systemOverwrite: () => new CoordinationAxis(systemOverwrite()),
131
+ systemReject: () => new CoordinationAxis(systemReject()),
132
+ systemNotify: () => new CoordinationAxis(systemNotify()),
133
+ });
@@ -21,8 +21,8 @@
21
21
  * by a {@link diffSchema} step list: drops, renames, type casts, and
22
22
  * backfills.
23
23
  */
24
- import { AbloValidationError } from '../errors.js';
25
- import { resolveTenancy, tenancyColumn } from './tenancy.js';
24
+ import { AbloValidationError } from '../transaction/errors.js';
25
+ import { resolveTenancy, tenancyColumn } from '../transaction/schema/tenancy.js';
26
26
  // ── Identifier safety ────────────────────────────────────────────────────────
27
27
  /** Postgres unquoted-identifier-safe slug: lowercase `[a-z0-9_]`, ≤50 chars. */
28
28
  function slug(raw) {
@@ -28,7 +28,7 @@
28
28
  * drop models. A newly added column is never created `NOT NULL`; making a column
29
29
  * required is a separate nullability change that a backfill must run before.
30
30
  */
31
- import type { FieldMeta } from './field.js';
31
+ import type { FieldMeta } from '../transaction/schema/field.js';
32
32
  import type { SchemaJSON } from './serialize.js';
33
33
  export type FieldType = FieldMeta['type'];
34
34
  /** Whether a Postgres `ALTER COLUMN … TYPE` can preserve the existing data. */
@@ -14,7 +14,7 @@
14
14
  * enums emitted as string-literal unions. Relations are not expanded here — the
15
15
  * runtime SDK resolves those through its typed accessors.
16
16
  */
17
- import { BASE_FIELDS } from './schema.js';
17
+ import { BASE_FIELDS } from '../transaction/schema/schema.js';
18
18
  function tsType(meta) {
19
19
  switch (meta.type) {
20
20
  case 'string':
@@ -21,21 +21,22 @@
21
21
  * ```
22
22
  */
23
23
  export { z } from 'zod';
24
- export { field, indexed, getFieldMeta, type FieldBuilder, type FieldMeta } from './field.js';
25
- export { relation, type RelationDef, type RelationType } from './relation.js';
26
- export { tenancySchema, scopedViaRefSchema, policyInputSchema, resolvePolicy, resolveTenancy, tenancyColumn, DEFAULT_ORG_COLUMN, type Tenancy, type ScopedViaRef, type PolicyInput, } from './tenancy.js';
27
- export { residencySchema, DEFAULT_RESIDENCY, type ModelResidency, planeSchema, DEFAULT_PLANE, type SchemaPlane, } from './residency.js';
28
- export { syncDeltaCoreSchema, deltaAttributionSchema, deltaProvenanceSchema, syncDeltaRowSchema, participantKindSchema, confirmationStateSchema, backfillProvenanceSchema, DELTA_DATA_CLASSIFICATION, DELTA_PHYSICAL_STORAGE, DELTA_RESIDENCY, type SyncDeltaCore, type DeltaAttribution, type DeltaProvenance, type SyncDeltaRow, type ParticipantKind, type ConfirmationState, type BackfillProvenance, } from './syncDeltaRow.js';
29
- export { syncDeltaActionSchema, wireDeltaDataSchema, participantRefSchema, syncDeltaWireCoreSchema, clientSyncDeltaSchema, serverSyncDeltaSchema, type SyncDeltaAction, type WireDeltaData, type ParticipantRef, type SyncDeltaWireCore, type ClientSyncDelta, type ServerSyncDelta, } from '../wire/delta.js';
30
- export { model, scopeKindOf, type ModelDef, type ModelOptions, type LoadStrategy, type PersistOptions, type RelationRecord, type GrantsRef, type ConflictAxis, } from './model.js';
24
+ export { field, indexed, getFieldMeta, type FieldBuilder, type FieldMeta } from '../transaction/schema/field.js';
25
+ export { isFieldRef, type FieldRef } from '../transaction/schema/fieldRef.js';
26
+ export { relation, type RelationDef, type RelationType } from '../transaction/schema/relation.js';
27
+ export { tenancySchema, scopedViaRefSchema, policyInputSchema, resolvePolicy, resolveTenancy, tenancyColumn, DEFAULT_ORG_COLUMN, type Tenancy, type ScopedViaRef, type PolicyInput, } from '../transaction/schema/tenancy.js';
28
+ export { residencySchema, DEFAULT_RESIDENCY, type ModelResidency, } from '../transaction/schema/residency.js';
29
+ export { syncDeltaCoreSchema, deltaAttributionSchema, syncDeltaRowSchema, participantKindSchema, confirmationStateSchema, backfillProvenanceSchema, DELTA_DATA_CLASSIFICATION, DELTA_PHYSICAL_STORAGE, type SyncDeltaCore, type DeltaAttribution, type SyncDeltaRow, type ParticipantKind, type ConfirmationState, type BackfillProvenance, } from './syncDeltaRow.js';
30
+ export { syncDeltaActionSchema, wireDeltaDataSchema, participantRefSchema, syncDeltaWireCoreSchema, clientSyncDeltaSchema, serverSyncDeltaSchema, type SyncDeltaAction, type WireDeltaData, type ParticipantRef, type SyncDeltaWireCore, type ClientSyncDelta, type ServerSyncDelta, } from '../transaction/wire/delta.js';
31
+ export { model, scopeKindOf, LoadStrategy, DEFAULT_LOAD_STRATEGY, loadsAtBootstrap, type ModelDef, type ModelOptions, type PersistOptions, type RelationRecord, type GrantsRef, type ConflictAxis, } from '../transaction/schema/model.js';
31
32
  export { coordination, humansOverwrite, humansReject, humansNotify, agentsOverwrite, agentsReject, agentsNotify, systemOverwrite, systemReject, systemNotify, type ConflictRule, } from './coordination.js';
32
33
  export { mutable, readOnly, type SugarOptions } from './sugar.js';
33
- export { defineSchema, composeIdentitySyncGroups, type Schema, type SchemaRecord, type Model, type Row, type InferModel, type InferCreate, type InferRow, type InferModelNames, type BaseModelFields, type InsertValue, type UpsertValue, type UpdateValue, type DeleteId, type DefineSchemaOptions, type Casing, type CasingConvention, type CasingFn, composeEntitySyncGroups, intersectRequestedWithAllowed, type IdentityRole, type IdentityContext, type IdentityRoleSource, type EntityRole, type EntityContext, type EntityRoleSource, type RoleSource, type RoleContext, type SyncGroup, type SyncGroupInput, identityRole, entityRole, extractIdentityIds, extractEntityIds, syncGroup, syncGroupSchema, syncGroupInputSchema, isSyncGroupInput, identityRoleSchema, entityRoleSchema, roleSchema, roleSourceSchema, scopeSchema, grantsRefSchema, groupsInputSchema, type GroupsInput, type SessionSettings, type SessionSettingSource, RESERVED_SESSION_SETTINGS, } from './schema.js';
34
- export { serializeSchema, parseSchema, toSchemaJSON, fromSchemaJSON, schemaHash, type SchemaJSON, type ModelJSON, type RelationJSON, } from './serialize.js';
34
+ export { defineSchema, composeIdentitySyncGroups, type Schema, type SchemaRecord, type Model, type Row, type InferCreate, type InferRow, type InferModelNames, type BaseModelFields, type InsertValue, type UpsertValue, type UpdateValue, type DeleteId, type DefineSchemaOptions, type Casing, type CasingConvention, type CasingFn, composeEntitySyncGroups, intersectRequestedWithAllowed, type IdentityRole, type IdentityContext, type IdentityRoleSource, type EntityRole, type EntityContext, type EntityRoleSource, type RoleSource, type RoleContext, type SyncGroup, type SyncGroupInput, identityRole, entityRole, extractIdentityIds, extractEntityIds, syncGroup, syncGroupSchema, syncGroupInputSchema, isSyncGroupInput, identityRoleSchema, entityRoleSchema, roleSchema, roleSourceSchema, scopeSchema, grantsRefSchema, groupsInputSchema, type GroupsInput, type SessionSettings, type SessionSettingSource, RESERVED_SESSION_SETTINGS, } from '../transaction/schema/schema.js';
35
+ export { serializeSchema, parseSchema, toSchemaJSON, fromSchemaJSON, schemaHash, modelHash, type SchemaJSON, type ModelJSON, type RelationJSON, } from './serialize.js';
35
36
  export { selectModels, omitModels } from './select.js';
36
37
  export { generateProvisionPlan, generateMigrationPlan, appSchemaName, camelToSnake, snakeToCamel, q, sqlType, type ProvisionPlan, type MigrationPlan, } from './ddl.js';
37
38
  export { PG_LOCK_NOT_AVAILABLE, resolveDdlLockTimeout, resolveDdlMaxLockAttempts, ddlLockRetryBackoffMs, type DdlLockEnv, } from './ddlLock.js';
38
39
  export { diffSchema, classifyMigration, classifyCast, isAutoApplicable, isBlockerResolved, unresolvedBlockers, type BackfillValue, type MigrationStep, type FieldChanges, type FieldColumnChange, type FieldTypeChange, type NullabilityChange, type EnumValuesChange, type IndexChange, type CastSafety, type FieldType, type RenameHints, type MigrationSignal, type MigrationClassification, type WarningCode, type BlockerCode, } from './diff.js';
39
40
  export { generateTypes } from './generate.js';
40
41
  export { query, defineQueries, type QueryDef, type QueryRecord, type Queries, type InferQueryInput, type InferQueryResult, } from './queries.js';
41
- export { schemaToOpenApi, type SchemaToOpenApiOptions } from './openapi.js';
42
+ export { abloOpenApi, schemaToOpenApi, type SchemaToOpenApiOptions } from '../transaction/schema/openapi.js';
@@ -23,31 +23,31 @@
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
+ // A field as a value rather than a quoted name — `schema.fields.tasks.status`.
28
+ // Surfaces that name a field (claims today) take one of these so a name that
29
+ // does not exist stops compiling.
30
+ export { isFieldRef } from '../transaction/schema/fieldRef.js';
27
31
  // Relation builders
28
- export { relation } from './relation.js';
32
+ export { relation } from '../transaction/schema/relation.js';
29
33
  // 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';
34
+ export { tenancySchema, scopedViaRefSchema, policyInputSchema, resolvePolicy, resolveTenancy, tenancyColumn, DEFAULT_ORG_COLUMN, } from '../transaction/schema/tenancy.js';
31
35
  // Model residency — which database a model's rows live in (`tenant` can be a
32
36
  // 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';
37
+ export { residencySchema, DEFAULT_RESIDENCY, } from '../transaction/schema/residency.js';
39
38
  // The stored `sync_deltas` row, described as Zod schemas grouped by subsystem and by
40
39
  // 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';
40
+ export { syncDeltaCoreSchema, deltaAttributionSchema, syncDeltaRowSchema, participantKindSchema, confirmationStateSchema, backfillProvenanceSchema, DELTA_DATA_CLASSIFICATION, DELTA_PHYSICAL_STORAGE, } from './syncDeltaRow.js';
45
41
  // The wire delta contract — the server-to-client projection of the stored row.
46
42
  // Both the client SDK and the server derive their `SyncDelta` type from these with
47
43
  // `z.infer`, so the two ends cannot drift apart.
48
- export { syncDeltaActionSchema, wireDeltaDataSchema, participantRefSchema, syncDeltaWireCoreSchema, clientSyncDeltaSchema, serverSyncDeltaSchema, } from '../wire/delta.js';
44
+ export { syncDeltaActionSchema, wireDeltaDataSchema, participantRefSchema, syncDeltaWireCoreSchema, clientSyncDeltaSchema, serverSyncDeltaSchema, } from '../transaction/wire/delta.js';
49
45
  // Model builder
50
- export { model, scopeKindOf, } from './model.js';
46
+ export { model, scopeKindOf,
47
+ // Both meanings: the value a tool enumerates to learn the strategies, and the
48
+ // type a `load` option is checked against. `loadsAtBootstrap` is the one
49
+ // predicate both the client subscription and the server payload ask.
50
+ LoadStrategy, DEFAULT_LOAD_STRATEGY, loadsAtBootstrap, } from '../transaction/schema/model.js';
51
51
  // Coordination authoring helpers for the `conflict` axis — composable disposition
52
52
  // functions plus a combinator that merges them.
53
53
  export { coordination, humansOverwrite, humansReject, humansNotify, agentsOverwrite, agentsReject, agentsNotify, systemOverwrite, systemReject, systemNotify, } from './coordination.js';
@@ -56,9 +56,9 @@ export { coordination, humansOverwrite, humansReject, humansNotify, agentsOverwr
56
56
  // sensible defaults for everything else.
57
57
  export { mutable, readOnly } from './sugar.js';
58
58
  // 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';
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 '../transaction/schema/schema.js';
60
60
  // Schema ⇄ JSON — serialize a schema for transport and rebuild it on the far side.
61
- export { serializeSchema, parseSchema, toSchemaJSON, fromSchemaJSON, schemaHash, } from './serialize.js';
61
+ export { serializeSchema, parseSchema, toSchemaJSON, fromSchemaJSON, schemaHash, modelHash, } from './serialize.js';
62
62
  // Schema projection — derive an app's subset from one canonical schema.
63
63
  export { selectModels, omitModels } from './select.js';
64
64
  // Schema → Postgres DDL — shared by the host implementation and the command-line tools.
@@ -73,4 +73,8 @@ export { diffSchema, classifyMigration, classifyCast, isAutoApplicable, isBlocke
73
73
  export { generateTypes } from './generate.js';
74
74
  // Query definition DSL + type inference
75
75
  export { query, defineQueries, } from './queries.js';
76
- export { schemaToOpenApi } from './openapi.js';
76
+ // The OpenAPI generator describes the language-agnostic `/v1` surface — the
77
+ // primitive itself, which a Python or Go caller consumes with no TypeScript
78
+ // anywhere — so it lives in the settlement core (ADR 0016). Re-exported here so
79
+ // the `@abloatai/ablo/schema` import path keeps resolving.
80
+ 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,8 @@
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 { buildFieldRefs } from '../transaction/schema/schema.js';
25
+ import { AbloValidationError } from '../transaction/errors.js';
25
26
  import { schemaHash } from './serialize.js';
26
27
  export function selectModels(schema, keys) {
27
28
  const keep = new Set(keys);
@@ -50,6 +51,8 @@ export function selectModels(schema, keys) {
50
51
  }
51
52
  return {
52
53
  models: models,
54
+ // References for exactly the models this projection kept.
55
+ fields: buildFieldRefs(models),
53
56
  validators: validators,
54
57
  identityRoles: schema.identityRoles,
55
58
  sessionSettings: schema.sessionSettings,