@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
@@ -0,0 +1,17 @@
1
+ /**
2
+ * A compile-time proof that two types are the same type, in both directions.
3
+ *
4
+ * This is how a derived shape is pinned to the shape it derives from. A plain
5
+ * `extends` check only proves one side is assignable to the other, which a
6
+ * schema that has grown a field still satisfies; both directions catch the
7
+ * addition. Instantiating it at a value binding turns the mismatch into a
8
+ * compile error at the definition site rather than at some distant caller.
9
+ *
10
+ * ```ts
11
+ * const _contract: AssertExact<z.infer<typeof participantRefSchema>, ParticipantRef> = true;
12
+ * ```
13
+ *
14
+ * The tuple wrappers stop a union operand from distributing, so a union is
15
+ * compared whole rather than member by member.
16
+ */
17
+ export type AssertExact<A, B> = [A] extends [B] ? ([B] extends [A] ? true : never) : never;
@@ -0,0 +1 @@
1
+ export {};
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * The single place where you tell the SDK about your application's types.
3
3
  *
4
- * You register your Schema and UserMeta once by augmenting the
4
+ * You register your Schema, UserMeta and ClaimMeta once by augmenting the
5
5
  * {@link Register} interface. From then on the typed SDK surface reads its
6
6
  * types from that registration, so you never pass a generic or a `schema`
7
7
  * argument at a call site.
@@ -27,6 +27,7 @@
27
27
  * interface Register {
28
28
  * Schema: typeof schema;
29
29
  * UserMeta: { id: string; email: string };
30
+ * ClaimMeta: { blocks: string[] };
30
31
  * }
31
32
  * }
32
33
  * export {};
@@ -51,11 +52,13 @@ export interface DefaultSyncShape {
51
52
  readonly UserMeta: {
52
53
  readonly id: string;
53
54
  };
55
+ readonly ClaimMeta: Record<string, unknown>;
54
56
  }
55
57
  /**
56
58
  * The registration interface you augment to declare your application's types.
57
59
  * Add keys inside a `declare module '@abloatai/ablo'` block — for example
58
- * `interface Register { Schema: ...; UserMeta: ...; }`. It is empty by default,
60
+ * `interface Register { Schema: ...; UserMeta: ...; ClaimMeta: ...; }`. It is
61
+ * empty by default,
59
62
  * so any key you omit falls back to {@link DefaultSyncShape}. It is exported
60
63
  * from the package root so your augmentation merges into this declaration.
61
64
  *
@@ -82,6 +85,18 @@ export type ResolveSchema = Register extends {
82
85
  export type ResolveUserMeta = Register extends {
83
86
  UserMeta: infer U;
84
87
  } ? U : DefaultSyncShape['UserMeta'];
88
+ /**
89
+ * The application metadata your claims carry, or the default when none is
90
+ * registered. It rides along on a claim's target — the SDK transports it
91
+ * verbatim, never interprets it, and never validates it, so the shape is
92
+ * yours to declare and yours alone to keep true.
93
+ *
94
+ * Declaring it here is what makes `claim.state({ id })?.target.meta` readable
95
+ * without a `typeof` guard, on every claim surface at once.
96
+ */
97
+ export type ResolveClaimMeta = Register extends {
98
+ ClaimMeta: infer M;
99
+ } ? M : DefaultSyncShape['ClaimMeta'];
85
100
  /**
86
101
  * The union of your schema's model names. `useQuery(modelKey)` narrows its
87
102
  * first argument to this union, so a misspelled or unknown model name fails at
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * The single place where you tell the SDK about your application's types.
3
3
  *
4
- * You register your Schema and UserMeta once by augmenting the
4
+ * You register your Schema, UserMeta and ClaimMeta once by augmenting the
5
5
  * {@link Register} interface. From then on the typed SDK surface reads its
6
6
  * types from that registration, so you never pass a generic or a `schema`
7
7
  * argument at a call site.
@@ -27,6 +27,7 @@
27
27
  * interface Register {
28
28
  * Schema: typeof schema;
29
29
  * UserMeta: { id: string; email: string };
30
+ * ClaimMeta: { blocks: string[] };
30
31
  * }
31
32
  * }
32
33
  * export {};
@@ -5,6 +5,7 @@
5
5
  * is loaded, and how changes are represented on the wire as they synchronize.
6
6
  */
7
7
  import type { FieldMeta } from '../schema/field.js';
8
+ import { LoadStrategy } from '../schema/loadStrategy.js';
8
9
  /**
9
10
  * A lifecycle filter for queries: whether to return live entities, archived
10
11
  * ones, or both.
@@ -35,21 +36,7 @@ export declare enum PropertyType {
35
36
  /** An array of foreign-key ids — a many-to-many relationship. */
36
37
  referenceArray = "referenceArray"
37
38
  }
38
- /**
39
- * When and how a model's data is loaded from the server.
40
- */
41
- export declare enum LoadStrategy {
42
- /** Loaded during startup, before it is first used — for models needed right away. */
43
- instant = "instant",
44
- /** Loaded all at once the first time it is needed — for secondary models. */
45
- lazy = "lazy",
46
- /** Loaded on demand in subsets — for large collections. */
47
- partial = "partial",
48
- /** Loaded only when the application asks for it — for optional data. */
49
- explicitlyRequested = "explicitlyRequested",
50
- /** Never synced with the server; kept only on the client — for local-only state. */
51
- local = "local"
52
- }
39
+ export { LoadStrategy };
53
40
  /**
54
41
  * The resolved configuration for a single model property.
55
42
  */
@@ -101,8 +88,6 @@ export interface ModelMetadata {
101
88
  loadStrategy: LoadStrategy;
102
89
  syncGroup?: string;
103
90
  tableName?: string;
104
- partialLoadMode?: 'full' | 'regular' | 'lowPriority';
105
- usedForPartialIndexes?: boolean;
106
91
  schemaVersion?: number;
107
92
  /**
108
93
  * The schema-declared fields for this model, keyed by field name. When a
@@ -156,13 +141,6 @@ export interface ReferenceOptions {
156
141
  indexed?: boolean;
157
142
  nullable?: boolean;
158
143
  }
159
- /**
160
- * A GraphQL mutation: its query text and the variables to run it with.
161
- */
162
- export interface GraphQLMutation {
163
- mutationText: string;
164
- variables: Record<string, unknown>;
165
- }
166
144
  /**
167
145
  * A request to load model rows by an indexed key. When the load completes,
168
146
  * `resolve` is called with the matching rows.
@@ -174,27 +152,17 @@ export interface LoadRequest {
174
152
  resolve?: (value: unknown[]) => void;
175
153
  }
176
154
  /**
177
- * The one-letter code identifying what kind of change a sync action carries.
178
- */
179
- export type SyncActionType = 'I' | 'U' | 'A' | 'D' | 'C' | 'G' | 'S' | 'V';
180
- /**
181
- * A single change to one model row, as carried on the sync stream.
182
- */
183
- export interface SyncAction {
184
- id: number;
185
- modelName: string;
186
- modelId: string;
187
- action: SyncActionType;
188
- data: unknown;
189
- __class: 'SyncAction';
190
- }
191
- /**
192
- * A batch of sync actions delivered together.
193
- */
194
- export type DeltaPacket = SyncAction[];
195
- /**
196
- * The kind of initial data load performed when a client starts: a full load, a
197
- * partial subset, or local-only.
155
+ * How a session establishes its baseline state at startup.
156
+ *
157
+ * 'full' Fetch a complete snapshot from the server, clear the local store,
158
+ * load the snapshot, and adopt its `lastSyncId`.
159
+ *
160
+ * 'partial' — Fetch only the deltas since the stored `lastSyncId` and apply
161
+ * them on top of the existing local data.
162
+ *
163
+ * 'local' — Skip the server entirely: hydrate the instance cache from the local
164
+ * store, connect the WebSocket with the stored `lastSyncId`, and receive
165
+ * deltas from there onward. Used when offline with valid local data.
198
166
  */
199
167
  export type BootstrapType = 'full' | 'partial' | 'local';
200
168
  /**
@@ -234,4 +202,4 @@ export interface PartialIndexInfo {
234
202
  depth: number;
235
203
  path: string[];
236
204
  }
237
- export type { TargetRange, OnStaleMode, WireClaim, ClaimRejection, PresenceKind, ParticipantKind, ParticipantRef, JsonValue, ConfirmationState, AgentDelta, Snapshot, ContextChange, ClaimTarget, PresenceTarget, PresenceStream, Activity, Peer, PresenceUpdatePayload, ClaimLeaseOptions, Duration, ClaimOptions, ClaimStream, ClaimLost, ClaimStatus, ClaimWaitOptions, Claim, HeldClaim, } from './streams.js';
205
+ export type { TargetRange, OnStaleMode, WireClaim, ClaimRejection, PresenceKind, ParticipantKind, ParticipantRef, JsonValue, ConfirmationState, Delta, AgentDelta, Snapshot, ContextChange, ClaimTarget, PresenceTarget, PresenceStream, Activity, Peer, PresenceUpdatePayload, ClaimLeaseOptions, Duration, ClaimOptions, ClaimStream, ClaimLost, ClaimStatus, ClaimWaitOptions, Claim, HeldClaim, } from './streams.js';
@@ -4,6 +4,10 @@
4
4
  * These types describe how a model's properties are declared, when their data
5
5
  * is loaded, and how changes are represented on the wire as they synchronize.
6
6
  */
7
+ // Bound locally as well as re-exported below: a bare `export … from` forwards
8
+ // the name to consumers without binding it in this module, so the annotations
9
+ // further down would not resolve.
10
+ import { LoadStrategy } from '../schema/loadStrategy.js';
7
11
  /**
8
12
  * A lifecycle filter for queries: whether to return live entities, archived
9
13
  * ones, or both.
@@ -36,22 +40,9 @@ export var PropertyType;
36
40
  /** An array of foreign-key ids — a many-to-many relationship. */
37
41
  PropertyType["referenceArray"] = "referenceArray";
38
42
  })(PropertyType || (PropertyType = {}));
39
- /**
40
- * When and how a model's data is loaded from the server.
41
- */
42
- export var LoadStrategy;
43
- (function (LoadStrategy) {
44
- /** Loaded during startup, before it is first used — for models needed right away. */
45
- LoadStrategy["instant"] = "instant";
46
- /** Loaded all at once the first time it is needed — for secondary models. */
47
- LoadStrategy["lazy"] = "lazy";
48
- /** Loaded on demand in subsets — for large collections. */
49
- LoadStrategy["partial"] = "partial";
50
- /** Loaded only when the application asks for it — for optional data. */
51
- LoadStrategy["explicitlyRequested"] = "explicitlyRequested";
52
- /** Never synced with the server; kept only on the client — for local-only state. */
53
- LoadStrategy["local"] = "local";
54
- })(LoadStrategy || (LoadStrategy = {}));
43
+ // When and how a model's data is loaded from the server. Defined in
44
+ // `../schema/loadStrategy.ts`, which the authoring surface reads from too.
45
+ export { LoadStrategy };
55
46
  /**
56
47
  * The operation a batch mutation performs on a model row.
57
48
  */
@@ -9,8 +9,9 @@
9
9
  * layer underneath.
10
10
  */
11
11
  import type { InferModel, Schema } from '../schema/schema.js';
12
- import type { TargetRange, OnStaleMode, WireClaim, ClaimRejection, ClaimLost, PresenceKind, ParticipantKind } from '../coordination/schema.js';
13
- export type { TargetRange, OnStaleMode, WireClaim, ClaimRejection, ClaimLost, PresenceKind, ParticipantKind, };
12
+ import type { ResolveClaimMeta } from './global.js';
13
+ import type { TargetRange, OnStaleMode, WireClaim, ClaimRejection, ClaimLost, PresenceKind, ParticipantKind, PublicClaimStatus, PresenceUpdatePayload } from '../coordination/schema.js';
14
+ export type { TargetRange, OnStaleMode, WireClaim, ClaimRejection, ClaimLost, PresenceKind, ParticipantKind, PresenceUpdatePayload, };
14
15
  /**
15
16
  * Any JSON-serializable value. Used where the SDK accepts free-form metadata
16
17
  * that is stored or transported as JSON — more precise than `unknown` while
@@ -19,37 +20,15 @@ export type { TargetRange, OnStaleMode, WireClaim, ClaimRejection, ClaimLost, Pr
19
20
  export type JsonValue = string | number | boolean | null | readonly JsonValue[] | {
20
21
  readonly [key: string]: JsonValue;
21
22
  };
22
- import type { ParticipantRef } from './participant.js';
23
23
  export type { ParticipantRef } from './participant.js';
24
+ import type { Delta } from '../wire/delta.js';
25
+ export type { ConfirmationState, Delta } from '../wire/delta.js';
24
26
  /**
25
- * Whether a person explicitly approved a change. If you don't track approval,
26
- * leave it at the default of `'auto'`.
27
+ * @deprecated Renamed to {@link Delta} the authoritative change feed serves
28
+ * every participant, not only agents, and the seam names it plainly.
29
+ * Removed in 0.36.0.
27
30
  */
28
- export type ConfirmationState = 'auto' | 'previewed' | 'approved' | 'required_human_approval' | 'auto_historical';
29
- /**
30
- * The wire shape of a single change on the sync stream. Alongside the change
31
- * itself, it carries attribution fields — `actor`, `onBehalfOf`,
32
- * `capabilityId`, and `confirmationState` — recorded on each row for auditing.
33
- */
34
- export interface AgentDelta {
35
- id: number;
36
- actionType: 'I' | 'U' | 'D' | 'A';
37
- modelName: string;
38
- modelId: string;
39
- data: Record<string, unknown>;
40
- previousData?: Record<string, unknown>;
41
- /** Who performed the action. */
42
- actor?: ParticipantRef | null;
43
- /** The participant on whose authority the actor acted. */
44
- onBehalfOf?: ParticipantRef | null;
45
- /** The capability that authorized this commit. */
46
- capabilityId?: string | null;
47
- /** Whether a person explicitly approved the change. */
48
- confirmationState?: ConfirmationState | null;
49
- /** The id of the agent task that caused this commit, if any. */
50
- causedByTaskId?: string | null;
51
- createdAt: string;
52
- }
31
+ export type AgentDelta = Delta;
53
32
  /**
54
33
  * A flat, point-in-time view of application data returned by
55
34
  * `participant.snapshot(...)`. Capture it before long-running AI work, then
@@ -95,13 +74,40 @@ export interface ContextChange {
95
74
  * general-purpose hints for finer-grained coordination in tools like code
96
75
  * editors, document editors, and design tools.
97
76
  */
98
- export interface ClaimTarget {
77
+ export interface ClaimTarget<M = ResolveClaimMeta> {
99
78
  readonly type: string;
100
79
  readonly id: string;
101
80
  readonly path?: string;
102
81
  readonly range?: TargetRange;
103
82
  readonly field?: string;
104
- readonly meta?: Record<string, unknown>;
83
+ /**
84
+ * Several named parts of the row at once — three sections of a document, two
85
+ * cells of a table. Claims conflict where their sets intersect, so two
86
+ * holders working on disjoint parts of one row do not wait for each other.
87
+ *
88
+ * Use this instead of packing names into `field`: a delimited string compares
89
+ * as one opaque value, so `'b_1,b_2'` and `'b_2,b_3'` read as unrelated
90
+ * targets and both holders are granted `b_2`.
91
+ */
92
+ readonly fields?: readonly string[];
93
+ /**
94
+ * Application metadata, carried verbatim and never interpreted.
95
+ *
96
+ * The protocol does not know what is in here — the caller does, so the
97
+ * caller says so once, where the schema is already registered:
98
+ *
99
+ * ```ts
100
+ * declare module '@abloatai/ablo' {
101
+ * interface Register { ClaimMeta: { blocks: string[] } }
102
+ * }
103
+ * ```
104
+ *
105
+ * From then on every claim surface reads this field as that shape and no
106
+ * read of it needs a `typeof` guard. The `M` parameter remains for a program
107
+ * carrying more than one meta shape — `claim.state<OtherMeta>({ id })`
108
+ * overrides the registration for that one call.
109
+ */
110
+ readonly meta?: M;
105
111
  }
106
112
  /**
107
113
  * A pointer to the entity a participant is acting on. Either a
@@ -146,7 +152,7 @@ export interface PresenceStream {
146
152
  *
147
153
  * You can drop `presence.others` into an LLM's system prompt so the model
148
154
  * reasons about what other agents are doing right now — for example,
149
- * "copy-bot is generating a new title for slide 5; don't duplicate that work."
155
+ * "copy-bot is generating a new title for section 5; don't duplicate that work."
150
156
  */
151
157
  readonly others: readonly Peer[];
152
158
  /** Subset of `others` filtered to a specific sync group. */
@@ -203,7 +209,7 @@ export interface PresenceStream {
203
209
  * participants see the change in real time.
204
210
  */
205
211
  export interface Activity {
206
- /** Entity type the participant is focused on (e.g. "Slide", "Document"). */
212
+ /** Entity type the participant is focused on (e.g. "Section", "Document"). */
207
213
  readonly entityType: string;
208
214
  /** Specific entity id. */
209
215
  readonly entityId: string;
@@ -213,6 +219,14 @@ export interface Activity {
213
219
  readonly range?: TargetRange;
214
220
  /** Optional field/property path for field-level coordination. */
215
221
  readonly field?: string;
222
+ /**
223
+ * Several named parts of the row at once — the same member
224
+ * {@link ClaimTarget} carries, and the one the presence frame has always
225
+ * declared. It was missing here, so a set-scoped participant announced
226
+ * itself as holding the whole row and the overlap filter compared it as if
227
+ * it named no parts at all.
228
+ */
229
+ readonly fields?: readonly string[];
216
230
  /** App-defined structured metadata. Display-only unless app policy uses it. */
217
231
  readonly meta?: Record<string, unknown>;
218
232
  /**
@@ -222,7 +236,7 @@ export interface Activity {
222
236
  * phases.
223
237
  */
224
238
  readonly action: string;
225
- /** Human-readable detail — "slide 3", "cell A1:B5", etc. */
239
+ /** Human-readable detail — "section 3", "cell A1:B5", etc. */
226
240
  readonly detail?: string;
227
241
  /**
228
242
  * A backpressure signal in the range `[0.0, 1.0]`. When set, orchestrator
@@ -257,12 +271,6 @@ export interface Peer {
257
271
  /** The claims this participant currently holds. */
258
272
  readonly activeClaims?: readonly Claim[];
259
273
  }
260
- /** Outbound `presence_update` payload. */
261
- export interface PresenceUpdatePayload {
262
- readonly status: 'online' | 'away' | 'offline' | (string & {});
263
- readonly activity?: Activity;
264
- readonly isAgent?: boolean;
265
- }
266
274
  /**
267
275
  * A claim is a broadcast that says "I'm about to work on this entity." Claims
268
276
  * travel on the same connection as presence, so every participant sees them in
@@ -296,6 +304,16 @@ export interface ClaimOptions extends ClaimLeaseOptions {
296
304
  * blocked writer receives. Defaults to `'editing'`.
297
305
  */
298
306
  readonly description?: string;
307
+ /**
308
+ * @deprecated Renamed to {@link ClaimOptions.description}. Still accepted —
309
+ * `description` wins when both are given — and removed in 0.36.0.
310
+ *
311
+ * The rename shipped without this line, so the server went on accepting
312
+ * `reason` while the type stopped offering it. Code written against the older
313
+ * shape kept working at runtime and stopped type-checking, with nothing
314
+ * saying why.
315
+ */
316
+ readonly reason?: string;
299
317
  /**
300
318
  * On contention, join the server's fair first-in-first-out queue instead of
301
319
  * being rejected. The grant then arrives asynchronously — immediately if the
@@ -385,14 +403,14 @@ export interface ClaimStream {
385
403
  * `position`. The remaining states are terminal and drop the claim from the
386
404
  * synced set.
387
405
  */
388
- export type ClaimStatus = 'active' | 'queued' | 'committed' | 'expired' | 'canceled';
406
+ export type ClaimStatus = PublicClaimStatus;
389
407
  /** Options for waiting on a target to become free. */
390
408
  export interface ClaimWaitOptions {
391
409
  readonly timeout?: number;
392
410
  readonly pollInterval?: number;
393
411
  readonly signal?: AbortSignal;
394
412
  }
395
- export interface Claim<T = Record<string, unknown>> {
413
+ export interface Claim<T = Record<string, unknown>, M = ResolveClaimMeta> {
396
414
  readonly object: 'claim';
397
415
  /** This claim's id. */
398
416
  readonly id: string;
@@ -403,7 +421,7 @@ export interface Claim<T = Record<string, unknown>> {
403
421
  */
404
422
  readonly status?: ClaimStatus;
405
423
  /** What is being coordinated. */
406
- readonly target: ClaimTarget;
424
+ readonly target: ClaimTarget<M>;
407
425
  /**
408
426
  * Peer-visible description of the work being done — the same field on every
409
427
  * claim surface. Always present: the SDK resolves it as it decodes the frame,
@@ -509,7 +527,7 @@ export interface ClaimHeartbeat {
509
527
  * typecheck, since `Claim`'s optional dispose hook is not assignable to
510
528
  * `AsyncDisposable`.
511
529
  */
512
- export type HeldClaim<T = Record<string, unknown>> = Claim<T> & Required<Pick<Claim<T>, 'data' | 'release' | 'revoke' | 'heartbeat' | typeof Symbol.asyncDispose>>;
530
+ export type HeldClaim<T = Record<string, unknown>, M = ResolveClaimMeta> = Claim<T, M> & Required<Pick<Claim<T, M>, 'data' | 'release' | 'revoke' | 'heartbeat' | typeof Symbol.asyncDispose>>;
513
531
  /**
514
532
  * A held advisory lease you took on a key whose row Ablo does not hold — the
515
533
  * resolved value of the row-free `ablo.<model>.claim(id)` overload. It is a
@@ -28,6 +28,24 @@
28
28
  * `text` column instead of `jsonb` — Ablo's adaptive codec serializes verbatim
29
29
  * there, matching Postgres's `json` type behavior.)
30
30
  */
31
+ import type { JsonValue } from '../types/streams.js';
32
+ /**
33
+ * Takes an immutable, plain snapshot at a JSON persistence/wire boundary.
34
+ *
35
+ * Traversal intentionally creates fresh objects and arrays instead of relying
36
+ * on a framework-specific unwrapping API. That makes Proxy-wrapped plain data
37
+ * (including MobX observables) safe for IndexedDB's structured-clone algorithm
38
+ * while keeping the settlement core independent of any reactive framework.
39
+ *
40
+ * The accepted contract is deliberately narrower than `JSON.stringify`:
41
+ * values that JSON would silently corrupt (`NaN` to `null`, `Map` to `{}`) or
42
+ * cannot encode are rejected with a stable, path-aware validation error.
43
+ * Valid dates retain normal JSON semantics and become ISO strings. Undefined
44
+ * object properties are omitted for compatibility with optional object keys;
45
+ * root/array `undefined` and sparse arrays are rejected rather than becoming
46
+ * an ambiguous `null`.
47
+ */
48
+ export declare function snapshotJsonValue(value: unknown, path?: string): JsonValue;
31
49
  /** Structural equality for JSON-shaped values (scalars, arrays, plain objects); key order is ignored. */
32
50
  export declare function deepEqual(a: unknown, b: unknown): boolean;
33
51
  /**