@abloatai/ablo 0.34.1 → 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 +2 -1
  2. package/CHANGELOG.md +674 -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 +3344 -1073
  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 -86
  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 +3 -1
  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
@@ -17,289 +17,30 @@
17
17
  * data: { status: 'ready' },
18
18
  * });
19
19
  * await sync.reports.delete({ id: reportId });
20
+ *
21
+ * This module is the composition root and the merge point, and only those.
22
+ * `Ablo` is three declarations sharing one name — the factory, the client
23
+ * type, and the `Ablo.*` namespace — and TypeScript merges declarations only
24
+ * within a single file, so the three have to sit together. Their bodies do
25
+ * not: the client's shape is `./abloClient`, the pass over the options bag is
26
+ * `./clientPrelude`, and the client this dispatches to is `./reactiveEngine`.
20
27
  */
21
- import type { Schema, SchemaRecord, InferModel, InferCreate, InferRow } from '../schema/schema.js';
22
- import type { ModelTarget, ModelClaim } from '../coordination/schema.js';
23
- export type { ModelTarget, ModelClaim };
24
- import { InstanceCache } from '../InstanceCache.js';
25
- import type { SyncStoreContract } from '../react/context.js';
26
- import type { SyncWebSocket } from '../sync/SyncWebSocket.js';
27
- import { type SyncStatus } from '../BaseSyncedStore.js';
28
- import type { PresenceStream, Snapshot } from '../types/streams.js';
29
- import { type AbloHttpClient, type AbloHttpClientOptions } from './httpClient.js';
28
+ import type { SchemaRecord } from '../transaction/schema/schema.js';
29
+ import { type AbloHttpClient, type AbloHttpClientOptions } from '../transaction/transport/httpClient.js';
30
+ import { type AbloPlugin, type PluginById, type MergedSurface } from '../transaction/plugin.js';
31
+ import { type AbloCoreClient } from './coreClient.js';
30
32
  import type { AbloOptions } from './options.js';
31
- import type { AbloSession, CommitResource, CreateAgentClientParams, CreateSessionParams } from './resourceTypes.js';
33
+ import type { AbloClient, AbloReads } from './abloClient.js';
32
34
  export type { ApiKeySetter, AbloOptions, InternalAbloOptions } from './options.js';
33
- export type { LocalCountOptions, LocalReadOptions, ModelListScope, ServerReadOptions, ModelRetrieveParams, ModelCreateParams, ModelUpdateParams, ModelDeleteParams, ClaimOptions, ClaimParams, ClaimLookupParams, ClaimReorderParams, Claim, ClaimHeartbeat, ClaimHeartbeatOptions, HeldClaim, HeldLease, ModelOperations, ModelOperationAction, CommitWait, IfClaimedPolicy, ClaimedOptions, ClaimWaitOptions, ModelReadOptions, ClaimCreateOptions, CommitOperationInput, CommitCreateOptions, CommitReceipt, CommitResource, ClaimResource, ModelMutationOptions, HttpClaimApi, SessionOperation, CreateUserSessionParams, CreateAgentSessionParams, CreateSessionParams, CreateAgentClientParams, AbloSession, } from './resourceTypes.js';
34
- export { computeFKDepthPriority } from './schemaConfig.js';
35
- import type { ModelOperations } from './createModelProxy.js';
35
+ export type { AbloReads } from './abloClient.js';
36
+ export type { ModelTarget, ModelClaim } from './resourceTypes.js';
36
37
  /**
37
- * The reactive-read client a `useAblo` selector receives. The same surface as
38
- * {@link Ablo}, except model reads are typed as reactive rows
39
- * ({@link InferRow}: data fields + computeds, no relation accessors, no model
40
- * methods) the shape a reactive read actually delivers after
41
- * `toReactiveSnapshot()`. Reading `row.layers` off a reactive read is a
42
- * compile error here instead of a silent runtime `undefined`; compose
43
- * relations through selectors or hooks that resolve the pool's instance.
38
+ * The typed sync engine client one property per model in the schema.
39
+ *
40
+ * The shape itself is declared in `./abloClient`; this alias is what merges
41
+ * with the factory and the namespace under the one `Ablo` name.
44
42
  */
45
- export type AbloReads<S extends SchemaRecord> = Omit<Ablo<S>, keyof S & string> & {
46
- readonly [K in keyof S & string]: ModelOperations<InferRow<Schema<S>, K>, InferCreate<Schema<S>, K>>;
47
- };
48
- /** The typed sync engine client — one property per model in the schema */
49
- export type Ablo<S extends SchemaRecord> = {
50
- readonly [K in keyof S & string]: ModelOperations<InferModel<Schema<S>, K>, InferCreate<Schema<S>, K>>;
51
- } & {
52
- /**
53
- * Wait for the sync engine to finish its initial bootstrap.
54
- * Resolves once entity data is loaded and the WebSocket is connected.
55
- *
56
- * ```ts
57
- * const sync = Ablo({ schema, user });
58
- * await sync.ready();
59
- * const reports = sync.reports.findMany(); // data is available
60
- * ```
61
- *
62
- * If bootstrap fails, this rejects with the underlying error (unreachable
63
- * server, invalid API key, 500 from bootstrap endpoint, etc.).
64
- *
65
- * Idempotent — calling it multiple times returns the same promise.
66
- */
67
- ready(): Promise<void>;
68
- /**
69
- * Wait for all pending mutations to be confirmed by the server.
70
- *
71
- * Sync engine mutations (`create`/`update`/`delete`) are optimistic and
72
- * resolve immediately. Use this when you need to know the server has
73
- * acknowledged everything before continuing — for example, before
74
- * navigating away, before triggering a server-side workflow, or in tests.
75
- *
76
- * Resolves when `syncStatus.pendingChanges` reaches 0. If the engine is
77
- * offline, this waits until reconnect + flush completes.
78
- *
79
- * ```ts
80
- * await sync.reports.create({ data: { title: 'A' } });
81
- * await sync.reports.create({ data: { title: 'B' } });
82
- * await sync.waitForFlush(); // server has both reports
83
- * ```
84
- *
85
- * @param timeoutMs - Optional timeout. Default: no timeout (wait forever).
86
- * Throws `Error('Flush timeout')` if reached with pending changes.
87
- */
88
- waitForFlush(timeoutMs?: number): Promise<void>;
89
- /** Disconnect and clean up */
90
- dispose(): Promise<void>;
91
- /**
92
- * Replace the bearer token used for the WebSocket upgrade and HTTP requests,
93
- * without tearing down the engine. Use it to push a refreshed short-lived
94
- * access key (an `ek_` or `rk_`) before it expires — the client's `apiKey`
95
- * resolver refresh loop calls this for you. It reuses the same rotation path as
96
- * the internal capability-token refresh and is safe to call before `ready()`.
97
- * It also nudges a parked connection to re-probe with the new token.
98
- */
99
- setAuthToken(token: string): void;
100
- /**
101
- * Resolve the active bearer credential this engine authenticates with — the
102
- * live `ek_` or `rk_` the WebSocket and HTTP transports currently carry (kept
103
- * fresh by the `apiKey` resolver refresh loop), falling back to a configured
104
- * API key. Returns `null` when no credential is set yet. Use it to authenticate
105
- * a side-band request to the same server with the token this client already
106
- * holds, avoiding an extra mint round-trip.
107
- */
108
- getAuthToken(): Promise<string | null>;
109
- /**
110
- * Register a re-mint hook for the short-lived access key. The connection layer
111
- * calls it when it finds the key stale (a `credential_stale` probe) or on an
112
- * external nudge; the hook mints a fresh `ek_` or `rk_` from the still-valid
113
- * login. It follows the same contract as the `apiKey` resolver: resolve a
114
- * token, resolve `null` when the login itself is gone (which signs the user
115
- * out), or throw on a transient failure (which backs off without signing out).
116
- * The client wires this automatically from a function `apiKey`. Safe to call
117
- * before `ready()`.
118
- */
119
- setCredentialRefresher(refresher: (() => Promise<string | null>) | null): void;
120
- /**
121
- * Ask the connection layer to re-probe and reconnect now, using the current
122
- * credential. Idempotent and safe in any state (a no-op while connected).
123
- * Call after an OS-wake signal (Electron `powerMonitor` 'resume') so a
124
- * connection parked since sleep recovers immediately instead of waiting for
125
- * the watchdog.
126
- */
127
- nudgeReconnect(): void;
128
- /**
129
- * Mint a short-lived, scoped session token for one end user. Call this on your
130
- * backend, where the `sk_` secret key lives, then hand the returned `token` to
131
- * that user's browser — typically through a token route the browser's `apiKey`
132
- * resolver fetches. The browser presents the token as its bearer, and the
133
- * server verifies it. The browser must never see the `sk_` key, only the
134
- * per-user session token.
135
- *
136
- * Pass `{ user: { id } }` for a full-authority end-user session, which mints an
137
- * `ek_` and attributes writes to a user (recorded as `actor_kind` on the delta
138
- * row). Pass `{ agent: { id }, can: { tasks: ['update'] } }` for a scoped agent
139
- * session, which mints an `rk_`; `can` is typed against your schema's model
140
- * names. This always authenticates with the original `sk_`, never the client's
141
- * exchanged sync credential.
142
- */
143
- sessions: {
144
- create(params: CreateSessionParams<S>): Promise<AbloSession>;
145
- };
146
- /**
147
- * Mint a scoped **agent identity** and return a ready-to-use client bound to
148
- * it — the `ablo.<resource>.<verb>` shape for the agent use case. One call
149
- * replaces `sessions.create({ agent })` + constructing a second
150
- * `Ablo({ apiKey: token })`:
151
- *
152
- * ```ts
153
- * const agent = await ablo.agents.create({
154
- * name: 'researcher', // readable label (optional)
155
- * can: { documents: ['read', 'update'] },
156
- * // id omitted → a fresh uuid: a distinct, independent participant
157
- * });
158
- * await agent.documents.update({ id, data, claim });
159
- * await agent.dispose(); // when the agent is done
160
- * ```
161
- *
162
- * Server-side only: it requires the `sk_` secret key (like `sessions.create`)
163
- * and throws `AbloAuthenticationError` in the browser. The returned client
164
- * holds its own auto-refreshing `rk_`, so a long run never hits token expiry,
165
- * and the `sk_` never leaves this process. Each call is a distinct participant
166
- * by default (omit `id` for a fresh uuid), so even two agents sharing a `name`
167
- * queue behind one another on a contended row — `name` is display only and
168
- * never collapses identity. Humans don't get a server-built client; ship them a
169
- * token via `sessions.create({ user })`. If you need the raw token for
170
- * revocation, or a stable re-attachable id, use `sessions.create({ agent })`
171
- * or pass `id`.
172
- */
173
- agents: {
174
- create(params: CreateAgentClientParams<S>): Promise<Ablo<S>>;
175
- };
176
- /**
177
- * The organization this client resolved to — `null` until `ready()`
178
- * completes. Use it instead of scraping CLI output or hardcoding env vars:
179
- *
180
- * ```ts
181
- * await ablo.ready();
182
- * const org = ablo.organizationId; // 'org_…'
183
- * ```
184
- */
185
- readonly organizationId: string | null;
186
- /**
187
- * Destroy every IndexedDB database owned by this engine. Disconnects
188
- * the WebSocket, releases timers, and deletes all `ablo_*` / `ablo-*`
189
- * databases. Use on session expiry or explicit logout. Best-effort.
190
- */
191
- purge(): Promise<void>;
192
- /**
193
- * Subscribe to session-error events (server rejected the session).
194
- * Returns an unsubscribe function. Multiple subscribers supported.
195
- * Typically called by `<AbloProvider>`, which calls `purge()` on fire
196
- * and forwards to the consumer's `onSessionExpired` callback.
197
- */
198
- onSessionError(listener: (error: Error) => void): () => void;
199
- /**
200
- * Subscribe to mutation failures with the full payload (transaction,
201
- * error, permanent flag). Use this for user-visible failure surfaces —
202
- * toasts keyed by `AbloError.type`, route-level "this entity reverted"
203
- * boundaries, telemetry. Fires for both permanent rejections and
204
- * `max_retries_exhausted` rollbacks.
205
- *
206
- * Distinct from `onSessionError` (server killed the session, requires
207
- * re-auth) and from the `tx.isPersisted` per-call promise (call-site
208
- * await, single transaction). This is the app-wide fan-in.
209
- */
210
- onMutationFailure(listener: (payload: {
211
- transaction: import('../transactions/TransactionQueue.js').Transaction;
212
- error: Error;
213
- permanent?: boolean;
214
- }) => void): () => void;
215
- /**
216
- * Wait for the most-recent in-flight transaction for (modelName, modelId)
217
- * to be confirmed by the server. Rejects with the same error that the
218
- * queue's `transaction:failed` event would carry if the mutation is
219
- * permanently rolled back. Resolves immediately when no transaction is
220
- * in flight (already-confirmed or never-staged).
221
- *
222
- * Matches the queue's `'confirmed'` status vocabulary (see also
223
- * `commits.create({wait:'confirmed'})`). Use this for the routing-
224
- * grace-window pattern: stage a write, then
225
- * `Promise.race([ablo.waitForConfirmation(...), gracePromise])` before
226
- * navigating to a route whose URL depends on the optimistic id.
227
- */
228
- waitForConfirmation(modelName: string, modelId: string): Promise<void>;
229
- /**
230
- * Reactive sync status — a MobX observable.
231
- *
232
- * Single source of truth for "what's the sync engine doing?" Contains:
233
- * - `state`: `'idle' | 'syncing' | 'error' | 'offline' | 'reconnecting'`
234
- * - `progress`: 0-100 for bootstrap progress
235
- * - `error?`: Error object when `state === 'error'`
236
- * - `pendingChanges`: Number of unconfirmed mutations in the queue
237
- * - `lastSyncAt?`: Timestamp of the last successful delta processing
238
- * - `offlineSince?`: When the connection dropped
239
- * - `isSessionError`: True when the error requires re-authentication
240
- *
241
- * React components using `observer()` re-render automatically when
242
- * any field changes — no manual subscription or polling needed.
243
- *
244
- * ```tsx
245
- * import { observer } from 'mobx-react-lite';
246
- *
247
- * const SyncIndicator = observer(() => {
248
- * if (sync.syncStatus.state === 'syncing') return <Spinner />;
249
- * if (sync.syncStatus.state === 'error') return <Error msg={sync.syncStatus.error} />;
250
- * if (sync.syncStatus.state === 'offline') return <OfflineBadge />;
251
- * return null;
252
- * });
253
- * ```
254
- */
255
- readonly syncStatus: SyncStatus;
256
- /** The underlying schema */
257
- readonly schema: Schema<S>;
258
- /**
259
- * A real-time presence livestream — who else is connected on this engine's
260
- * sync groups, what they're doing, and a write surface for announcing this
261
- * user's own activity. It rides the engine's existing WebSocket; opening a
262
- * participant for presence does not open a second socket. See
263
- * {@link PresenceStream}.
264
- *
265
- * The reference is stable for the engine's lifetime — the underlying connection
266
- * is rotated on `dispose()`, but this object stays the same.
267
- */
268
- readonly presence: PresenceStream;
269
- /**
270
- * Canonical low-level mutation API. Every untyped model write compiles
271
- * down to `commits.create(...)`.
272
- */
273
- readonly commits: CommitResource;
274
- /**
275
- * Capture a context-staleness watermark over a set of entities.
276
- * Returns a flat snapshot with `stamp` (thread into writes as
277
- * `readAt`), `signal` (aborts on any captured-entity delta), and
278
- * `onChange` (callback form). Reads from the engine's InstanceCache;
279
- * subscription is on the engine's existing transport.
280
- *
281
- * Use before an LLM call to prevent the model from completing
282
- * against now-stale data:
283
- * ```ts
284
- * const snap = engine.snapshot({ slides: deck.slideIds });
285
- * await streamText({ messages, signal: snap.signal });
286
- * ```
287
- */
288
- snapshot<ModelName extends keyof S & string>(entities: Readonly<Record<ModelName, string | readonly string[]>>): Snapshot<Schema<S>, ModelName>;
289
- /**
290
- * The internal store. It implements {@link SyncStoreContract} — pass it to
291
- * `SyncContext.Provider` so the SDK's `useModel` / `useModels` / `useMutations`
292
- * hooks can reach it.
293
- */
294
- readonly _store: SyncStoreContract;
295
- /** The InstanceCache — for demand loaders and direct pool operations. */
296
- readonly _pool: InstanceCache;
297
- /**
298
- * The SyncWebSocket handle — for collaboration events (slide selection,
299
- * cursor broadcast). Null until the engine connects.
300
- */
301
- readonly _ws: SyncWebSocket | null;
302
- };
43
+ export type Ablo<S extends SchemaRecord> = AbloClient<S>;
303
44
  /**
304
45
  * Create a sync engine client in one call.
305
46
  *
@@ -325,19 +66,33 @@ export type Ablo<S extends SchemaRecord> = {
325
66
  * const ablo = Ablo({ schema, apiKey: process.env.ABLO_API_KEY, transport: 'http' });
326
67
  * await ablo.tasks.update({ id, data: { status: 'done' } });
327
68
  * ```
69
+ *
70
+ * Pass `plugins: []` for the core client — the same stateless surface plus
71
+ * the live feed (pushed deltas, presence, claim grants and losses), and no
72
+ * local copy of anything:
73
+ *
74
+ * ```ts
75
+ * const ablo = Ablo({ schema, apiKey: process.env.ABLO_API_KEY, plugins: [] });
76
+ * await ablo.connect();
77
+ * ablo.subscribe('claim_granted', (grant) => { ... });
78
+ * ```
328
79
  */
329
- export declare function Ablo<const S extends SchemaRecord>(options: AbloHttpClientOptions<S> & {
80
+ export declare function Ablo<const S extends SchemaRecord, const P extends readonly AbloPlugin[] = readonly []>(options: AbloHttpClientOptions<S> & {
330
81
  transport: 'http';
331
- }): AbloHttpClient<S>;
82
+ plugins?: P;
83
+ }): AbloHttpClient<S> & MergedSurface<P>;
84
+ export declare function Ablo<const S extends SchemaRecord, const P extends readonly AbloPlugin[]>(options: AbloOptions<S> & {
85
+ plugins: P;
86
+ }): PluginById<P, 'humans'> extends never ? AbloCoreClient<S> & MergedSurface<P> : Ablo<S>;
332
87
  export declare function Ablo<const S extends SchemaRecord>(options: AbloOptions<S>): Ablo<S>;
333
- import type * as _Streams from '../types/streams.js';
88
+ import type * as _Streams from '../transaction/types/streams.js';
334
89
  import type * as _Participants from '../sync/participants.js';
335
- import type * as _Policy from '../policy/types.js';
90
+ import type * as _Policy from '../transaction/policy/types.js';
336
91
  import type * as _Mutators from '../mutators/defineMutators.js';
337
92
  import type * as _Tx from '../mutators/Transaction.js';
338
93
  import type * as _Undo from '../mutators/UndoManager.js';
339
- import type * as _SchemaTypes from '../schema/schema.js';
340
- import type * as _Global from '../types/global.js';
94
+ import type * as _SchemaTypes from '../transaction/schema/schema.js';
95
+ import type * as _Global from '../transaction/types/global.js';
341
96
  /**
342
97
  * The canonical type namespace.
343
98
  *
@@ -408,10 +163,10 @@ export declare namespace Ablo {
408
163
  */
409
164
  type RegisteredSchema = _Global.ResolveSchema extends _SchemaTypes.Schema ? _Global.ResolveSchema : _SchemaTypes.Schema;
410
165
  namespace Schema {
411
- type InferModel<S extends _SchemaTypes.Schema, K extends keyof S['models']> = _SchemaTypes.InferModel<S, K>;
166
+ type Model<S extends _SchemaTypes.Schema, K extends keyof S['models']> = _SchemaTypes.Model<S, K>;
412
167
  type InferCreate<S extends _SchemaTypes.Schema, K extends keyof S['models']> = _SchemaTypes.InferCreate<S, K>;
413
168
  /**
414
- * The reactive-row companion to {@link InferModel}: data fields + computed
169
+ * The reactive-row companion to {@link Model}: data fields + computed
415
170
  * getters, no relation accessors, no model methods — the shape `useAblo`
416
171
  * reads return.
417
172
  */
@@ -436,7 +191,7 @@ export declare namespace Ablo {
436
191
  }
437
192
  namespace Claim {
438
193
  type Handle = import('./resourceTypes.js').Claim;
439
- type Held<T = Record<string, unknown>> = import('../types/streams.js').HeldClaim<T>;
194
+ type Held<T = Record<string, unknown>> = import('../transaction/types/streams.js').HeldClaim<T>;
440
195
  type CreateOptions = import('./resourceTypes.js').ClaimCreateOptions;
441
196
  type WaitOptions = import('./resourceTypes.js').ClaimWaitOptions;
442
197
  type Client = import('./resourceTypes.js').ClaimResource;