@abloatai/ablo 0.26.0 → 0.28.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 (418) hide show
  1. package/CHANGELOG.md +42 -2
  2. package/README.md +102 -86
  3. package/dist/BaseSyncedStore.d.ts +85 -88
  4. package/dist/BaseSyncedStore.js +134 -151
  5. package/dist/Database.d.ts +68 -69
  6. package/dist/Database.js +316 -135
  7. package/dist/{ObjectPool.d.ts → InstanceCache.d.ts} +10 -13
  8. package/dist/{ObjectPool.js → InstanceCache.js} +85 -83
  9. package/dist/LazyReferenceCollection.d.ts +11 -15
  10. package/dist/LazyReferenceCollection.js +12 -16
  11. package/dist/Model.d.ts +54 -52
  12. package/dist/Model.js +78 -62
  13. package/dist/ModelRegistry.d.ts +21 -19
  14. package/dist/ModelRegistry.js +23 -27
  15. package/dist/NetworkMonitor.d.ts +5 -6
  16. package/dist/NetworkMonitor.js +5 -6
  17. package/dist/SyncClient.d.ts +122 -118
  18. package/dist/SyncClient.js +541 -245
  19. package/dist/adapters/alwaysOnline.d.ts +6 -8
  20. package/dist/adapters/alwaysOnline.js +6 -8
  21. package/dist/adapters/inMemoryStorage.d.ts +10 -9
  22. package/dist/adapters/inMemoryStorage.js +21 -9
  23. package/dist/agent/Agent.d.ts +27 -32
  24. package/dist/agent/Agent.js +18 -19
  25. package/dist/agent/index.d.ts +4 -4
  26. package/dist/agent/index.js +5 -5
  27. package/dist/agent/session.d.ts +47 -44
  28. package/dist/agent/session.js +37 -48
  29. package/dist/agent/types.d.ts +26 -31
  30. package/dist/agent/types.js +6 -7
  31. package/dist/ai-sdk/coordinatedTool.d.ts +108 -0
  32. package/dist/ai-sdk/{coordinated-tool.js → coordinatedTool.js} +44 -38
  33. package/dist/ai-sdk/coordinationContext.d.ts +46 -0
  34. package/dist/ai-sdk/{coordination-context.js → coordinationContext.js} +26 -33
  35. package/dist/ai-sdk/index.d.ts +25 -22
  36. package/dist/ai-sdk/index.js +25 -22
  37. package/dist/ai-sdk/wrap.d.ts +6 -7
  38. package/dist/ai-sdk/wrap.js +1 -1
  39. package/dist/auth/credentialPolicy.d.ts +69 -74
  40. package/dist/auth/credentialPolicy.js +51 -56
  41. package/dist/auth/credentialSource.d.ts +6 -5
  42. package/dist/auth/credentialSource.js +9 -10
  43. package/dist/auth/index.d.ts +59 -58
  44. package/dist/auth/index.js +31 -37
  45. package/dist/auth/schemas.d.ts +5 -4
  46. package/dist/auth/schemas.js +5 -4
  47. package/dist/batching/index.d.ts +19 -21
  48. package/dist/batching/index.js +14 -17
  49. package/dist/cli.cjs +173 -121
  50. package/dist/client/Ablo.d.ts +97 -74
  51. package/dist/client/Ablo.js +129 -163
  52. package/dist/client/ApiClient.d.ts +30 -19
  53. package/dist/client/ApiClient.js +442 -81
  54. package/dist/client/auth.d.ts +47 -47
  55. package/dist/client/auth.js +108 -117
  56. package/dist/client/claimHeartbeatLoop.d.ts +50 -0
  57. package/dist/client/claimHeartbeatLoop.js +88 -0
  58. package/dist/client/consoleLogger.d.ts +5 -6
  59. package/dist/client/consoleLogger.js +5 -6
  60. package/dist/client/createInternalComponents.d.ts +16 -17
  61. package/dist/client/createInternalComponents.js +26 -31
  62. package/dist/client/createModelProxy.d.ts +130 -120
  63. package/dist/client/createModelProxy.js +152 -122
  64. package/dist/client/credentialEndpoint.d.ts +40 -42
  65. package/dist/client/credentialEndpoint.js +35 -36
  66. package/dist/client/functionalUpdate.d.ts +29 -27
  67. package/dist/client/functionalUpdate.js +21 -21
  68. package/dist/client/hostedEndpoints.d.ts +9 -12
  69. package/dist/client/hostedEndpoints.js +9 -12
  70. package/dist/client/httpClient.d.ts +59 -53
  71. package/dist/client/httpClient.js +29 -31
  72. package/dist/client/identity.d.ts +15 -20
  73. package/dist/client/identity.js +47 -58
  74. package/dist/client/modelRegistration.d.ts +5 -9
  75. package/dist/client/modelRegistration.js +78 -87
  76. package/dist/client/options.d.ts +157 -157
  77. package/dist/client/options.js +3 -7
  78. package/dist/client/registerDataSource.d.ts +9 -9
  79. package/dist/client/registerDataSource.js +15 -16
  80. package/dist/client/resourceTypes.d.ts +64 -75
  81. package/dist/client/resourceTypes.js +4 -10
  82. package/dist/client/schemaConfig.d.ts +31 -43
  83. package/dist/client/schemaConfig.js +38 -50
  84. package/dist/client/sessionMint.d.ts +16 -12
  85. package/dist/client/sessionMint.js +26 -31
  86. package/dist/client/validateAbloOptions.d.ts +12 -14
  87. package/dist/client/validateAbloOptions.js +8 -9
  88. package/dist/client/writeOptionsSchema.d.ts +18 -16
  89. package/dist/client/writeOptionsSchema.js +23 -20
  90. package/dist/client/wsMutationExecutor.d.ts +16 -20
  91. package/dist/client/wsMutationExecutor.js +18 -23
  92. package/dist/commit/contract.d.ts +493 -0
  93. package/dist/commit/contract.js +187 -0
  94. package/dist/commit/index.d.ts +6 -0
  95. package/dist/commit/index.js +5 -0
  96. package/dist/context.d.ts +6 -4
  97. package/dist/context.js +6 -4
  98. package/dist/coordination/index.d.ts +10 -8
  99. package/dist/coordination/index.js +14 -12
  100. package/dist/coordination/schema.d.ts +176 -128
  101. package/dist/coordination/schema.js +197 -133
  102. package/dist/coordination/trace.d.ts +9 -10
  103. package/dist/coordination/trace.js +13 -14
  104. package/dist/core/DatabaseManager.d.ts +5 -7
  105. package/dist/core/DatabaseManager.js +15 -19
  106. package/dist/core/QueryProcessor.d.ts +7 -9
  107. package/dist/core/QueryProcessor.js +22 -28
  108. package/dist/core/QueryView.d.ts +8 -8
  109. package/dist/core/QueryView.js +2 -2
  110. package/dist/core/StoreManager.d.ts +14 -14
  111. package/dist/core/StoreManager.js +33 -24
  112. package/dist/core/ViewRegistry.d.ts +5 -5
  113. package/dist/core/ViewRegistry.js +4 -4
  114. package/dist/core/index.d.ts +17 -12
  115. package/dist/core/index.js +32 -26
  116. package/dist/core/openIDBWithTimeout.d.ts +38 -36
  117. package/dist/core/openIDBWithTimeout.js +42 -43
  118. package/dist/core/queryUtils.d.ts +45 -0
  119. package/dist/core/queryUtils.js +69 -0
  120. package/dist/core/storeContract.d.ts +63 -61
  121. package/dist/core/storeContract.js +8 -12
  122. package/dist/environment.d.ts +28 -0
  123. package/dist/environment.js +21 -0
  124. package/dist/errorCodes.d.ts +107 -99
  125. package/dist/errorCodes.js +137 -134
  126. package/dist/errors.d.ts +160 -166
  127. package/dist/errors.js +155 -158
  128. package/dist/index.d.ts +36 -27
  129. package/dist/index.js +91 -86
  130. package/dist/interfaces/index.d.ts +102 -113
  131. package/dist/interfaces/index.js +5 -4
  132. package/dist/keys/index.d.ts +27 -29
  133. package/dist/keys/index.js +41 -40
  134. package/dist/mutators/RecordingTransaction.d.ts +16 -16
  135. package/dist/mutators/RecordingTransaction.js +31 -37
  136. package/dist/mutators/Transaction.d.ts +18 -26
  137. package/dist/mutators/Transaction.js +14 -20
  138. package/dist/mutators/UndoManager.d.ts +124 -131
  139. package/dist/mutators/UndoManager.js +177 -156
  140. package/dist/mutators/defineMutators.d.ts +23 -34
  141. package/dist/mutators/defineMutators.js +14 -20
  142. package/dist/mutators/inverseOp.d.ts +12 -15
  143. package/dist/mutators/inverseOp.js +12 -15
  144. package/dist/mutators/mutateActions.d.ts +10 -9
  145. package/dist/mutators/mutateActions.js +1 -1
  146. package/dist/mutators/readerActions.d.ts +9 -8
  147. package/dist/mutators/readerActions.js +2 -2
  148. package/dist/mutators/undoApply.d.ts +31 -27
  149. package/dist/mutators/undoApply.js +26 -24
  150. package/dist/policy/index.d.ts +5 -3
  151. package/dist/policy/index.js +5 -3
  152. package/dist/policy/types.d.ts +104 -100
  153. package/dist/policy/types.js +67 -66
  154. package/dist/query/client.d.ts +28 -23
  155. package/dist/query/client.js +45 -43
  156. package/dist/query/types.d.ts +37 -60
  157. package/dist/query/types.js +13 -33
  158. package/dist/react/AbloProvider.d.ts +1 -1
  159. package/dist/react/AbloProvider.js +2 -2
  160. package/dist/react/context.d.ts +25 -28
  161. package/dist/react/context.js +9 -10
  162. package/dist/react/index.d.ts +41 -42
  163. package/dist/react/index.js +37 -38
  164. package/dist/react/internalContext.d.ts +17 -19
  165. package/dist/react/useAblo.d.ts +28 -25
  166. package/dist/react/useAblo.js +41 -17
  167. package/dist/react/useCurrentUserId.d.ts +8 -7
  168. package/dist/react/useCurrentUserId.js +8 -7
  169. package/dist/react/useErrorListener.d.ts +7 -7
  170. package/dist/react/useErrorListener.js +10 -11
  171. package/dist/react/useMutationFailureListener.d.ts +8 -8
  172. package/dist/react/useMutationFailureListener.js +8 -8
  173. package/dist/react/useMutators.d.ts +11 -11
  174. package/dist/react/useMutators.js +3 -3
  175. package/dist/react/useReactive.js +2 -2
  176. package/dist/react/useSyncStatus.d.ts +4 -6
  177. package/dist/react/useUndoScope.d.ts +7 -9
  178. package/dist/react/useUndoScope.js +1 -1
  179. package/dist/schema/coordination.d.ts +21 -25
  180. package/dist/schema/coordination.js +21 -25
  181. package/dist/schema/ddl.d.ts +43 -39
  182. package/dist/schema/ddl.js +75 -68
  183. package/dist/schema/ddlLock.d.ts +20 -24
  184. package/dist/schema/ddlLock.js +18 -23
  185. package/dist/schema/diff.d.ts +99 -61
  186. package/dist/schema/diff.js +43 -34
  187. package/dist/schema/field.d.ts +37 -42
  188. package/dist/schema/field.js +35 -48
  189. package/dist/schema/generate.d.ts +12 -12
  190. package/dist/schema/generate.js +12 -12
  191. package/dist/schema/index.d.ts +3 -3
  192. package/dist/schema/index.js +21 -23
  193. package/dist/schema/model.d.ts +118 -143
  194. package/dist/schema/model.js +22 -33
  195. package/dist/schema/openapi.d.ts +10 -9
  196. package/dist/schema/openapi.js +5 -3
  197. package/dist/schema/queries.d.ts +29 -31
  198. package/dist/schema/queries.js +23 -25
  199. package/dist/schema/relation.d.ts +89 -99
  200. package/dist/schema/relation.js +13 -13
  201. package/dist/schema/residency.d.ts +16 -13
  202. package/dist/schema/residency.js +16 -13
  203. package/dist/schema/roles.d.ts +36 -43
  204. package/dist/schema/roles.js +31 -37
  205. package/dist/schema/schema.d.ts +64 -43
  206. package/dist/schema/schema.js +31 -32
  207. package/dist/schema/select.d.ts +13 -13
  208. package/dist/schema/select.js +13 -13
  209. package/dist/schema/serialize.d.ts +28 -31
  210. package/dist/schema/serialize.js +27 -31
  211. package/dist/schema/sugar.d.ts +17 -32
  212. package/dist/schema/sugar.js +14 -29
  213. package/dist/schema/{sync-delta-row.d.ts → syncDeltaRow.d.ts} +26 -49
  214. package/dist/schema/syncDeltaRow.js +89 -0
  215. package/dist/schema/tenancy.d.ts +44 -46
  216. package/dist/schema/tenancy.js +46 -48
  217. package/dist/server/adapter.d.ts +58 -58
  218. package/dist/server/adapter.js +13 -14
  219. package/dist/server/commit.d.ts +60 -64
  220. package/dist/server/index.d.ts +9 -10
  221. package/dist/server/index.js +1 -1
  222. package/dist/server/readConfig.d.ts +70 -0
  223. package/dist/server/readConfig.js +8 -0
  224. package/dist/server/storageMode.d.ts +23 -0
  225. package/dist/server/storageMode.js +17 -0
  226. package/dist/source/adapter.d.ts +30 -25
  227. package/dist/source/adapter.js +10 -10
  228. package/dist/source/adapters/drizzle.d.ts +28 -23
  229. package/dist/source/adapters/drizzle.js +30 -25
  230. package/dist/source/adapters/kysely.d.ts +27 -25
  231. package/dist/source/adapters/kysely.js +24 -23
  232. package/dist/source/adapters/memory.d.ts +8 -7
  233. package/dist/source/adapters/memory.js +9 -8
  234. package/dist/source/adapters/prisma.d.ts +13 -12
  235. package/dist/source/adapters/prisma.js +22 -25
  236. package/dist/source/conformance.d.ts +18 -11
  237. package/dist/source/conformance.js +17 -11
  238. package/dist/source/connector.d.ts +31 -32
  239. package/dist/source/connector.js +28 -28
  240. package/dist/source/connectorProtocol.d.ts +160 -0
  241. package/dist/source/connectorProtocol.js +162 -0
  242. package/dist/source/contract.d.ts +26 -27
  243. package/dist/source/contract.js +28 -29
  244. package/dist/source/factory.d.ts +46 -58
  245. package/dist/source/factory.js +22 -27
  246. package/dist/source/index.d.ts +7 -9
  247. package/dist/source/index.js +12 -14
  248. package/dist/source/migrations.d.ts +9 -9
  249. package/dist/source/migrations.js +9 -9
  250. package/dist/source/next.d.ts +9 -10
  251. package/dist/source/next.js +6 -7
  252. package/dist/source/pushQueue.d.ts +69 -47
  253. package/dist/source/pushQueue.js +32 -28
  254. package/dist/source/signing.d.ts +46 -17
  255. package/dist/source/signing.js +28 -11
  256. package/dist/source/types.d.ts +121 -104
  257. package/dist/source/types.js +13 -14
  258. package/dist/stores/ObjectStore.d.ts +24 -12
  259. package/dist/stores/ObjectStore.js +38 -16
  260. package/dist/stores/ObjectStoreContract.d.ts +14 -15
  261. package/dist/stores/SyncActionStore.d.ts +7 -11
  262. package/dist/stores/SyncActionStore.js +13 -17
  263. package/dist/surface.d.ts +28 -21
  264. package/dist/surface.js +29 -20
  265. package/dist/sync/{BootstrapHelper.d.ts → BootstrapFetcher.d.ts} +36 -42
  266. package/dist/sync/{BootstrapHelper.js → BootstrapFetcher.js} +76 -76
  267. package/dist/sync/ConnectionManager.d.ts +39 -50
  268. package/dist/sync/ConnectionManager.js +55 -66
  269. package/dist/sync/NetworkProbe.d.ts +24 -29
  270. package/dist/sync/NetworkProbe.js +63 -69
  271. package/dist/sync/{HydrationCoordinator.d.ts → OnDemandLoader.d.ts} +42 -41
  272. package/dist/sync/{HydrationCoordinator.js → OnDemandLoader.js} +59 -54
  273. package/dist/sync/{AreaOfInterestManager.d.ts → SubscriptionManager.d.ts} +43 -57
  274. package/dist/sync/{AreaOfInterestManager.js → SubscriptionManager.js} +43 -51
  275. package/dist/sync/SyncWebSocket.d.ts +141 -166
  276. package/dist/sync/SyncWebSocket.js +191 -223
  277. package/dist/sync/awaitClaimGrant.d.ts +18 -18
  278. package/dist/sync/awaitClaimGrant.js +11 -11
  279. package/dist/sync/bootstrapApply.d.ts +34 -24
  280. package/dist/sync/bootstrapApply.js +27 -19
  281. package/dist/sync/commitFrames.d.ts +21 -20
  282. package/dist/sync/commitFrames.js +18 -18
  283. package/dist/sync/createClaimStream.d.ts +23 -22
  284. package/dist/sync/createClaimStream.js +105 -23
  285. package/dist/sync/createPresenceStream.d.ts +19 -18
  286. package/dist/sync/createPresenceStream.js +25 -26
  287. package/dist/sync/createSnapshot.d.ts +12 -14
  288. package/dist/sync/createSnapshot.js +20 -26
  289. package/dist/sync/credentialLifecycle.d.ts +104 -104
  290. package/dist/sync/credentialLifecycle.js +140 -147
  291. package/dist/sync/deltaPipeline.d.ts +36 -34
  292. package/dist/sync/deltaPipeline.js +64 -65
  293. package/dist/sync/groupChange.d.ts +63 -61
  294. package/dist/sync/groupChange.js +74 -78
  295. package/dist/sync/heartbeat.d.ts +34 -33
  296. package/dist/sync/heartbeat.js +31 -31
  297. package/dist/sync/participants.d.ts +19 -19
  298. package/dist/sync/persistedPrefix.d.ts +12 -0
  299. package/dist/sync/persistedPrefix.js +22 -0
  300. package/dist/sync/schemas.d.ts +3 -2
  301. package/dist/sync/schemas.js +14 -10
  302. package/dist/sync/syncCursor.d.ts +17 -21
  303. package/dist/sync/syncCursor.js +17 -21
  304. package/dist/sync/syncPlan.d.ts +28 -36
  305. package/dist/sync/syncPlan.js +18 -19
  306. package/dist/sync/syncPosition.d.ts +54 -49
  307. package/dist/sync/syncPosition.js +57 -52
  308. package/dist/sync/wsFrameHandlers.d.ts +35 -36
  309. package/dist/sync/wsFrameHandlers.js +63 -67
  310. package/dist/testing/fixtures/bootstrap.d.ts +12 -6
  311. package/dist/testing/fixtures/bootstrap.js +12 -6
  312. package/dist/testing/fixtures/deltas.d.ts +30 -33
  313. package/dist/testing/fixtures/deltas.js +30 -33
  314. package/dist/testing/fixtures/models.d.ts +11 -10
  315. package/dist/testing/fixtures/models.js +11 -10
  316. package/dist/testing/helpers/{react-wrapper.d.ts → reactWrapper.d.ts} +13 -10
  317. package/dist/testing/helpers/{react-wrapper.js → reactWrapper.js} +15 -12
  318. package/dist/testing/helpers/{sync-engine-harness.d.ts → syncEngineHarness.d.ts} +17 -15
  319. package/dist/testing/helpers/{sync-engine-harness.js → syncEngineHarness.js} +12 -10
  320. package/dist/testing/helpers/wait.d.ts +13 -8
  321. package/dist/testing/helpers/wait.js +13 -8
  322. package/dist/testing/index.d.ts +5 -3
  323. package/dist/testing/index.js +3 -2
  324. package/dist/testing/mocks/FakeDatabase.d.ts +18 -0
  325. package/dist/testing/mocks/FakeDatabase.js +10 -0
  326. package/dist/testing/mocks/MockMutationExecutor.d.ts +18 -17
  327. package/dist/testing/mocks/MockMutationExecutor.js +15 -14
  328. package/dist/testing/mocks/MockNetworkMonitor.d.ts +8 -8
  329. package/dist/testing/mocks/MockNetworkMonitor.js +8 -8
  330. package/dist/testing/mocks/MockSyncContext.d.ts +20 -17
  331. package/dist/testing/mocks/MockSyncContext.js +15 -13
  332. package/dist/testing/mocks/MockSyncStore.d.ts +10 -10
  333. package/dist/testing/mocks/MockSyncStore.js +11 -11
  334. package/dist/testing/mocks/MockWebSocket.d.ts +28 -23
  335. package/dist/testing/mocks/MockWebSocket.js +22 -21
  336. package/dist/transactions/TransactionQueue.d.ts +244 -181
  337. package/dist/transactions/TransactionQueue.js +929 -423
  338. package/dist/transactions/TransactionStore.d.ts +6 -4
  339. package/dist/transactions/TransactionStore.js +6 -4
  340. package/dist/transactions/UnconfirmedWrites.d.ts +82 -0
  341. package/dist/transactions/UnconfirmedWrites.js +104 -0
  342. package/dist/transactions/coalesceRules.d.ts +41 -17
  343. package/dist/transactions/coalesceRules.js +40 -17
  344. package/dist/transactions/commitEnvelope.d.ts +132 -0
  345. package/dist/transactions/commitEnvelope.js +139 -0
  346. package/dist/transactions/commitOutboxStore.d.ts +32 -0
  347. package/dist/transactions/commitOutboxStore.js +26 -0
  348. package/dist/transactions/commitPayload.d.ts +63 -52
  349. package/dist/transactions/commitPayload.js +54 -57
  350. package/dist/transactions/deltaConfirmation.d.ts +20 -22
  351. package/dist/transactions/deltaConfirmation.js +37 -45
  352. package/dist/transactions/httpCommitEnvelope.d.ts +43 -0
  353. package/dist/transactions/httpCommitEnvelope.js +179 -0
  354. package/dist/transactions/optimisticApply.d.ts +49 -0
  355. package/dist/transactions/optimisticApply.js +65 -0
  356. package/dist/transactions/replayValidation.d.ts +182 -0
  357. package/dist/transactions/replayValidation.js +156 -0
  358. package/dist/types/global.d.ts +46 -41
  359. package/dist/types/global.js +20 -19
  360. package/dist/types/index.d.ts +71 -77
  361. package/dist/types/index.js +22 -22
  362. package/dist/types/modelData.d.ts +6 -8
  363. package/dist/types/modelData.js +5 -7
  364. package/dist/types/participant.d.ts +10 -11
  365. package/dist/types/participant.js +6 -8
  366. package/dist/types/streams.d.ts +208 -195
  367. package/dist/types/streams.js +7 -7
  368. package/dist/utils/asyncIterator.d.ts +25 -32
  369. package/dist/utils/asyncIterator.js +25 -32
  370. package/dist/utils/duration.d.ts +12 -15
  371. package/dist/utils/duration.js +12 -15
  372. package/dist/utils/mobxSetup.d.ts +53 -0
  373. package/dist/utils/{mobx-setup.js → mobxSetup.js} +42 -98
  374. package/dist/webhooks/events.d.ts +21 -16
  375. package/dist/webhooks/events.js +10 -8
  376. package/dist/webhooks/index.d.ts +5 -7
  377. package/dist/webhooks/index.js +5 -7
  378. package/dist/wire/bootstrapReason.d.ts +9 -0
  379. package/dist/wire/bootstrapReason.js +8 -0
  380. package/dist/{schema/sync-delta-wire.d.ts → wire/delta.d.ts} +58 -41
  381. package/dist/wire/delta.js +114 -0
  382. package/dist/wire/errorEnvelope.d.ts +30 -31
  383. package/dist/wire/errorEnvelope.js +34 -40
  384. package/dist/wire/frames.d.ts +315 -86
  385. package/dist/wire/frames.js +47 -33
  386. package/dist/wire/index.d.ts +18 -14
  387. package/dist/wire/index.js +32 -27
  388. package/dist/wire/listEnvelope.d.ts +16 -23
  389. package/dist/wire/listEnvelope.js +7 -6
  390. package/dist/wire/protocol.d.ts +25 -32
  391. package/dist/wire/protocol.js +25 -32
  392. package/dist/wire/protocolVersion.d.ts +44 -40
  393. package/dist/wire/protocolVersion.js +44 -40
  394. package/docs/api.md +10 -10
  395. package/docs/coordination.md +59 -0
  396. package/docs/mcp.md +1 -1
  397. package/package.json +17 -11
  398. package/dist/ai-sdk/coordinated-tool.d.ts +0 -101
  399. package/dist/ai-sdk/coordination-context.d.ts +0 -52
  400. package/dist/core/query-utils.d.ts +0 -34
  401. package/dist/core/query-utils.js +0 -59
  402. package/dist/schema/sync-delta-row.js +0 -103
  403. package/dist/schema/sync-delta-wire.js +0 -102
  404. package/dist/server/read-config.d.ts +0 -67
  405. package/dist/server/read-config.js +0 -8
  406. package/dist/server/storage-mode.d.ts +0 -8
  407. package/dist/server/storage-mode.js +0 -28
  408. package/dist/source/connector-protocol.d.ts +0 -159
  409. package/dist/source/connector-protocol.js +0 -161
  410. package/dist/transactions/OptimisticEchoTracker.d.ts +0 -82
  411. package/dist/transactions/OptimisticEchoTracker.js +0 -104
  412. package/dist/transactions/mutation-error-handler.d.ts +0 -5
  413. package/dist/transactions/mutation-error-handler.js +0 -39
  414. package/dist/transactions/optimistic.d.ts +0 -24
  415. package/dist/transactions/optimistic.js +0 -45
  416. package/dist/transactions/persistedReplay.d.ts +0 -93
  417. package/dist/transactions/persistedReplay.js +0 -105
  418. package/dist/utils/mobx-setup.d.ts +0 -42
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @abloatai/ablo — The Collaboration Layer for AI and Humans
2
+ * @abloatai/ablo — the collaboration layer for AI agents and people.
3
3
  *
4
4
  * ```ts
5
5
  * import Ablo from '@abloatai/ablo';
@@ -14,135 +14,140 @@
14
14
  * type Entry = Ablo.Peer;
15
15
  * ```
16
16
  *
17
- * `Ablo({ schema, apiKey })` gives typed model clients. `Ablo({ apiKey })`
18
- * gives the HTTP model/commit client for agents, MCP routes, and custom
19
- * runtimes.
17
+ * `Ablo({ schema, apiKey })` returns typed model clients. `Ablo({ apiKey })`
18
+ * returns the stateless HTTP model and commit client, which suits agents, MCP
19
+ * route handlers, and custom runtimes.
20
20
  *
21
- * Stripe / Anthropic / OpenAI all do this: one import, model clients
22
- * reached via dot-access on the engine, types via namespace dots.
21
+ * The whole package reaches you through one name: `Ablo` is at once a factory
22
+ * function, a type, and a namespace. You call model clients with dot access on
23
+ * the instance (`ablo.reports.retrieve(...)`) and reach every supporting type
24
+ * through the namespace (`Ablo.Peer`, `Ablo.Claim`).
23
25
  *
24
- * Public subpaths:
26
+ * Related surfaces live on their own import subpaths:
25
27
  * @abloatai/ablo/schema — defineSchema, model, z (Zod)
26
28
  * @abloatai/ablo/react — <AbloProvider>, useQuery, useMutate
27
- * @abloatai/ablo/testing — test harnesses + mocks
29
+ * @abloatai/ablo/testing — test harnesses and fixtures
28
30
  *
29
- * Reads split by where the data comes from. `ablo.<model>.retrieve({ id })` and
30
- * `.list({ where })` are the async **server** reads (pool → IDB → network via
31
- * the `HydrationCoordinator`, single-flight deduped); they're the default and
32
- * what hosted/stateless callers want, since their local graph starts empty.
33
- * `ablo.<model>.get(id)` / `.getAll(...)` / `.getCount(...)` are synchronous
34
- * **local-graph** snapshots with no network round-trip — for reactive React
35
- * selectors (`useAblo((ablo) => ablo.<model>.get(id))`) once the graph is warm.
31
+ * Reads come in two flavors, distinguished by where the data is fetched from.
32
+ * `ablo.<model>.retrieve({ id })` and `.list({ where })` are asynchronous reads
33
+ * that consult the local cache first and fall back to the network, de-duplicating
34
+ * concurrent requests for the same row. They are the default, and the right
35
+ * choice for stateless callers whose local graph starts empty.
36
+ * `ablo.<model>.get(id)`, `.getAll(...)`, and `.getCount(...)` are synchronous
37
+ * snapshots of the already-loaded local graph with no network round-trip — use
38
+ * them in reactive React selectors (`useAblo((ablo) => ablo.<model>.get(id))`)
39
+ * once the graph is warm.
36
40
  *
37
- * ── What to import (read this first) ────────────────────────────────
38
- * Default path this is all most apps and agents ever need:
39
- * `Ablo` (default export) + `AbloOptions` + the `Model*Params` bags
40
- * • the `Ablo*Error` classes, to discriminate failures in catch blocks
41
- * That's it. If you're reaching past those, you're in advanced territory.
41
+ * What to import, in short:
42
+ * `Ablo` (the default export), `AbloOptions`, and the `Model*Params` option
43
+ * bags cover what most applications and agents ever need.
44
+ * • the `Ablo*Error` classes let you discriminate failures in catch blocks.
42
45
  *
43
- * Advanced opt-in, most apps never import these (each is tagged
44
- * "Advanced —" at its export below, with the one situation it's for):
45
- * • `dataSource` / `abloSource` — only if your own DB stays canonical
46
- * • `defaultPolicy` — only to customize conflict resolution
47
- * • `defineMutators` / `createTransaction` — only for custom mutators
48
- * If you don't recognize one, you don't need it — the default path covers you.
46
+ * A handful of exports are for advanced use and are marked "Advanced" at their
47
+ * declaration below, each with the one situation it is for:
48
+ * • `dataSource` / `abloSource` — when your own database stays canonical.
49
+ * • `defaultPolicy` — when you customize conflict resolution.
50
+ * • `defineMutators` / `createTransaction` — when you write custom mutators.
51
+ * If you don't recognize one of these, you don't need it.
49
52
  */
50
53
  // ── Consumer API ──────────────────────────────────────────────────────────
51
54
  // These are the only symbols external consumers should need from this path.
52
55
  // Everything else is in a subpath.
53
- // The canonical surface `Ablo` is a function, type, and namespace under
54
- // one name. Matches `Stripe`, `OpenAI`, `Anthropic`. Default export so
55
- // `import Ablo from '@abloatai/ablo'` works; named export so
56
- // `import { Ablo }` also compiles.
56
+ // The primary surface. `Ablo` is a function, a type, and a namespace sharing
57
+ // one name. It is the default export, so `import Ablo from '@abloatai/ablo'`
58
+ // works, and a named export, so `import { Ablo }` compiles too.
57
59
  export { Ablo } from './client/Ablo.js';
58
60
  export { DEFAULT_CONTENTION_RETRIES } from './client/functionalUpdate.js';
59
- // The stateless HTTP client is constructed ONLY via `Ablo({ transport: 'http' })`
60
- // (one factory, explicit transport). The `createAbloHttpClient` function stays
61
- // internal the factory calls it but is NOT a public export. Consumers still
62
- // annotate with the `AbloHttpClient` type (the narrowed return of `transport:'http'`).
61
+ // The stateless HTTP client is constructed through `Ablo({ transport: 'http' })`.
62
+ // There is no separate constructor to import; annotate values with the
63
+ // `AbloHttpClient` type, which is the return type of that call.
63
64
  export {} from './client/httpClient.js';
64
65
  export { ABLO_DEFAULT_BASE_URL, ABLO_HOSTED_API_DOMAIN, ABLO_HOSTED_HTTP_BASE_URL, normalizeAbloHostedBaseUrl, } from './client/auth.js';
66
+ export { durableCommitEnvelopeSchema, } from './transactions/commitEnvelope.js';
67
+ export { durableHttpCommitEnvelopeSchema, } from './transactions/httpCommitEnvelope.js';
65
68
  // Participant types live under `Ablo.Participant.*` —
66
69
  // `Ablo.Participant.Joined`, `Ablo.Participant.Manager`,
67
70
  // `Ablo.Participant.JoinOptions`, etc. Same dot-access shape as
68
71
  // `Ablo.Peer`, `Ablo.Claim`. No flat re-exports.
69
72
  import { Ablo } from './client/Ablo.js';
70
73
  export default Ablo;
71
- // Advanced most apps never import this. Customer-owned storage adapter
72
- // for Data Source mode: only when Ablo Cloud coordinates state while
73
- // canonical rows stay in YOUR database. The default is Ablo-managed
74
- // storage — if you haven't deliberately chosen to keep your own DB
75
- // canonical, skip this entirely. Type counterparts live under
76
- // `Ablo.Source.*` (`Ablo.Source.Operation`, `Ablo.Source.Commit.Params`).
74
+ // Advanced, and rarely imported. The storage adapter for Data Source mode,
75
+ // where Ablo coordinates state while the canonical rows stay in your own
76
+ // database. The default is Ablo-managed storage; reach for this only when you
77
+ // have deliberately chosen to keep your database canonical. The matching types
78
+ // live under `Ablo.Source.*` (`Ablo.Source.Operation`, `Ablo.Source.Commit.Params`).
77
79
  export { dataSource, abloSource, sourceEventForOperation, signAbloSourceRequest, verifyAbloSourceRequest, } from './source/index.js';
78
- // Reverse-channel connector: serve the Data Source `commit`/`load`/`list` leg
79
- // over an OUTBOUND WebSocket (localhost / locked-down VPC, no public inbound
80
- // URL). The dial-out counterpart to `createPushQueue` for the `events` leg.
80
+ // Serves the Data Source `commit`, `load`, and `list` operations over an
81
+ // outbound WebSocket, so a database with no public inbound URL (running on a
82
+ // developer's machine or inside a locked-down network) can still be reached by
83
+ // dialing out to Ablo rather than accepting an inbound connection.
81
84
  export { createSourceConnector, } from './source/connector.js';
82
85
  // Schema DSL is intentionally published from `@abloatai/ablo/schema`.
83
86
  // Keeping it out of the root import preserves one clean runtime surface:
84
87
  // `import Ablo from '@abloatai/ablo'`.
85
- // Advanced most apps never import this. Conflict policy: `defaultPolicy`
86
- // (reject-on-stale) is already applied server-side, so you only import it
87
- // to COMPOSE a custom policy. Leave it alone and stale writes are rejected
88
- // safely by default. Type counterparts live under `Ablo.Conflict.*`.
88
+ // Advanced, and rarely imported. The default conflict policy rejects writes
89
+ // premised on stale data and is already applied on the server, so import
90
+ // `defaultPolicy` only to build a custom policy on top of it. Leave it be and
91
+ // stale writes are rejected safely. The matching types live under `Ablo.Conflict.*`.
89
92
  export { defaultPolicy, capabilityPreemptPolicy, interpretConflictAxis } from './policy/index.js';
90
- // Typed error hierarchy — Stripe-style. One import gets every class
91
- // consumers need to discriminate failures (`e instanceof AbloX` or
92
- // `e.type === 'AbloX'`) plus the HTTP-response translator.
93
+ // The typed error hierarchy. One import brings in every class you need to
94
+ // tell failures apart by `e instanceof AbloX` or `e.type === 'AbloX'` — along
95
+ // with the helper that translates an HTTP response into the right class.
93
96
  export { SyncSessionError, AbloError, AbloAuthenticationError, AbloPermissionError, AbloRateLimitError, AbloIdempotencyError, AbloConnectionError, AbloValidationError, AbloNotFoundError, AbloServerError, AbloStaleContextError, AbloClaimedError, AbloContentionError, CapabilityError, translateHttpError, hasWireCode, errorFromWire, toAbloError, ERROR_CODES, ERROR_CONTRACT_VERSION, errorCodeSpec, isRetryableCode, classifyRecovery, recoveryClassSchema, RECOVERY_CLASSES, } from './errors.js';
94
- // Canonical wire-egress contract (dependency-free): the error envelope shape +
95
- // the AbloError-subclassHTTP-status table. Re-exported so server consumers
96
- // (e.g. apps/sync-server, which keeps its own self-contained copy) can assert
97
- // against the ONE source instead of silently drifting. See wire/errorEnvelope.ts.
97
+ // The wire contract for errors, with no dependencies: the JSON envelope shape
98
+ // plus the table mapping each AbloError subclass to an HTTP status. A server
99
+ // that returns Ablo errors can assert against these so its responses never
100
+ // drift from what the client expects.
98
101
  export { errorEnvelope, statusForType } from './wire/errorEnvelope.js';
99
102
  export { WS_BEARER_SUBPROTOCOL_PREFIX, WS_SYNC_SUBPROTOCOL } from './auth/credentialSource.js';
100
103
  export { ENVIRONMENTS, environmentSchema, normalizeEnvironment, environmentFromKeyPrefix, environmentToKeyPrefix, isSandboxEnvironment, } from './environment.js';
101
- // THE write-options contract the one Zod schema for the option bag every
102
- // write door accepts (`ablo.<model>.create/update/delete`, `commits.create`,
103
- // the HTTP model routes). The SDK validates against it at each boundary;
104
- // it's exported so consumers can validate/compose options ahead of a call
105
- // (e.g. an agent tool's input schema). Runtime twin of `MutationOptions`,
106
- // drift-guarded at compile time.
104
+ // The write-options contract: the single Zod schema for the option bag every
105
+ // write accepts (`ablo.<model>.create/update/delete`, `commits.create`, and the
106
+ // HTTP model routes). The SDK validates against it at each boundary, and it is
107
+ // exported so you can validate or assemble options before a call — for example,
108
+ // as the input schema of an agent tool. It is the runtime counterpart of the
109
+ // `MutationOptions` type.
107
110
  export { writeOptionsSchema, onStaleModeSchema, assertWriteOptions, } from './client/writeOptionsSchema.js';
108
- // Notify-instead-of-abort signal: the value handed back to a committer whose
109
- // write hit a stale-context conflict under `onStale: 'notify' so its
110
- // agent can self-heal rather than discard work (see coordination/schema.ts and
111
- // docs/coordination.md "Notify, do not abort").
111
+ // The value handed back to a writer whose change hit a stale-context conflict
112
+ // under `onStale: 'notify'`. Instead of throwing, the commit succeeds and
113
+ // returns this notification so the caller can reconcile against the current
114
+ // value and retry rather than discard its work.
112
115
  export { staleNotificationSchema, readDependencySchema } from './coordination/schema.js';
113
- // Claim log — collect claim events + stale-write collisions into an ordered list
114
- // you can print for eyeballing or collisions() for evals assertions. Hand
115
- // `new ClaimLog()` to `Ablo({ observability })`.
116
+ // Collects claim events and stale-write collisions into an ordered list you can
117
+ // print to inspect coordination, or read through `collisions()` to assert on in
118
+ // tests. Pass `new ClaimLog()` as `Ablo({ observability })`.
116
119
  export { ClaimLog, formatClaim, formatConflict } from './coordination/trace.js';
117
120
  // Spread this to provide a custom `observability` that overrides only the hooks
118
121
  // you care about (e.g. captureClaim) and no-ops the rest.
119
122
  export { noopObservability } from './SyncEngineContext.js';
120
- // Storage-wedge detection lets app shells render a recovery screen when the
121
- // IndexedDB backing store is stuck (see core/openIDBWithTimeout.ts).
123
+ // Detects a stuck local store: use these to recognize when the browser's
124
+ // IndexedDB backing store fails to open in time, so your app can show a
125
+ // recovery screen instead of hanging.
122
126
  export { IDBOpenTimeoutError, isStorageOpenTimeout } from './core/openIDBWithTimeout.js';
123
- // Machine-checked surface manifest the SDK's own description of its public
124
- // verb/option names, compile-time-bound to the real types (see surface.ts).
125
- // The MCP `get_api_surface` imports these so docs can't name a phantom verb.
127
+ // A machine-readable manifest of the SDK's public verb and option names, bound
128
+ // at compile time to the real types so the lists can never name a method or
129
+ // option the API doesn't have. Useful for generating documentation or tooling
130
+ // that needs to enumerate the surface.
126
131
  export { PUBLIC_MODEL_VERBS, PUBLIC_LIST_OPTION_KEYS, PUBLIC_ABLO_OPTION_KEYS, } from './surface.js';
127
- // Advanced most apps never import this. Custom (Zero-style) mutators:
128
- // `ablo.<model>.create/update/delete` already covers normal writes. Reach
129
- // for `defineMutators` only when you need a named, multi-step mutation with
130
- // custom undo. Type counterparts live under the `Ablo` namespace:
132
+ // Advanced, and rarely imported. Custom mutators. Ordinary writes go through
133
+ // `ablo.<model>.create/update/delete`; reach for `defineMutators` only when you
134
+ // need a named, multi-step mutation with its own undo behavior. The matching
135
+ // types live under the `Ablo` namespace:
131
136
  // Ablo.Mutator.Fn, Ablo.Transaction
132
137
  // Ablo.Mutator.UndoEntry, Ablo.Mutator.InverseOp
133
138
  // Ablo.Query, Ablo.QueryBatch, Ablo.QueryBatchResult
134
139
  export { defineMutators } from './mutators/defineMutators.js';
135
- // `createTransaction` is exposed so non-React callers (the sandbox AI
136
- // executor, server-side workers) can invoke `defineMutators`-style
137
- // custom mutators without going through `useMutators`. Construct a tx
138
- // against `ablo.schema` + `ablo._store` + `ablo.organizationId` and
139
- // pass it as `{ tx, args }` to the mutator function.
140
+ // `createTransaction` lets callers outside React server-side workers, agent
141
+ // runtimes run custom mutators without the `useMutators` hook. Build a
142
+ // transaction from the client's schema, store, and organization id, then pass
143
+ // it to your mutator function as `{ tx, args }`.
140
144
  export { createTransaction } from './mutators/Transaction.js';
141
145
  // Undo runtime is intentionally not part of the public root surface. App code
142
146
  // uses `useUndoScope` from `@abloatai/ablo/react`.
143
- // JSON comparison helpers. A `field.json()` value backed by a Postgres `jsonb`
144
- // column round-trips with reordered object keys (jsonb doesn't preserve key
145
- // order), so a naive `JSON.stringify(a) === JSON.stringify(b)` guard misfires
146
- // when an app reconciles an Ablo row against external editor state. Use these
147
- // (key-order-insensitive) instead. See `utils/json.ts` for the full rationale.
147
+ // JSON comparison helpers. A `field.json()` value stored in a Postgres `jsonb`
148
+ // column can come back with its object keys reordered, because jsonb does not
149
+ // preserve key order. A naive `JSON.stringify(a) === JSON.stringify(b)` check
150
+ // then reports a difference that isn't real a common trap when reconciling an
151
+ // Ablo row against external editor state. These compare independent of key
152
+ // order, so use them instead.
148
153
  export { deepEqual, stableStringify } from './utils/json.js';
@@ -1,9 +1,10 @@
1
1
  /**
2
- * Sync Engine SDK Dependency Injection Interfaces
2
+ * The interfaces you implement to plug the SDK into your own environment.
3
3
  *
4
- * These interfaces decouple the SDK from any specific app framework.
5
- * Consumers implement them to wire in their own logging, observability,
6
- * GraphQL client, session handling, and analytics.
4
+ * The SDK depends on these contracts rather than any specific framework, so you
5
+ * provide the concrete implementations logging, observability, analytics,
6
+ * session-error detection, online-status checks, and the transport that carries
7
+ * mutations to your backend. The SDK ships sensible no-op defaults where it can.
7
8
  */
8
9
  import type { StaleNotification, ReadDependency, ParticipantKind } from '../coordination/schema.js';
9
10
  export interface SyncLogger {
@@ -69,10 +70,11 @@ export interface CommitZeroSyncIdDetails {
69
70
  operations: string[];
70
71
  }
71
72
  /**
72
- * One thing that happened to a claim. `phase` is the past-tense state it just
73
- * entered the trail you follow to see WHY two participants collided on a row:
74
- * who asked, who waited behind whom, who was turned away, whose lease lapsed.
75
- * Each phase mirrors a `claim_*` wire frame.
73
+ * A single event in the life of a claim. `phase` is the state the claim has just
74
+ * entered, and the sequence of phases is the trail you follow to see how two
75
+ * participants collided on a row — who asked for it, who waited behind whom, who
76
+ * was turned away, and whose lease lapsed. Each phase corresponds to a `claim_*`
77
+ * frame on the wire.
76
78
  */
77
79
  export interface ClaimEvent {
78
80
  phase: 'acquired' | 'queued' | 'granted' | 'lost' | 'rejected' | 'expired';
@@ -91,10 +93,10 @@ export interface ClaimEvent {
91
93
  reason?: string;
92
94
  }
93
95
  /**
94
- * A committed `onStale: 'notify'` write whose premise moved the in-flight twin
95
- * of a claim collision. The commit SUCCEEDED, but the guarded ops weren't written
96
- * because the row changed since the caller's `readAt`; the engine handed back the
97
- * live value so the actor can self-heal. Records WHICH rows and fields collided.
96
+ * A committed `onStale: 'notify'` write whose premise had moved. The commit
97
+ * succeeded, but the guarded operations were not written because the row had
98
+ * changed since the caller's `readAt`, and the engine returned the current value
99
+ * so the caller can reconcile. Records which rows and fields collided.
98
100
  */
99
101
  export interface ConflictEvent {
100
102
  /** The client idempotency key whose write was notified. */
@@ -110,8 +112,9 @@ export interface ConflictEvent {
110
112
  /** Span attributes for performance monitoring */
111
113
  export type SpanAttributes = Record<string, string | number | boolean | undefined>;
112
114
  /**
113
- * Observability provider replaces direct Sentry dependency.
114
- * SDK ships a no-op default; consumers provide their own (e.g., Sentry, Datadog, OpenTelemetry).
115
+ * The observability hooks the SDK calls to report its own lifecycle. The SDK
116
+ * ships a no-op default; provide your own to forward these events to a monitoring
117
+ * tool such as Sentry, Datadog, or OpenTelemetry.
115
118
  */
116
119
  export interface SyncObservabilityProvider {
117
120
  /** Set user/org context for error grouping */
@@ -178,30 +181,29 @@ export interface ModelDebugLoggerContract {
178
181
  export interface CommitResult {
179
182
  lastSyncId: number;
180
183
  /**
181
- * Stale-context notifications (CoAgent/MTPO notify-instead-of-abort). Present
182
- * only when a write guarded with `onStale: 'notify' collided with a
183
- * concurrent change; the committer self-heals from these rather than
184
- * receiving an `AbloStaleContextError`. See `StaleNotification`.
184
+ * Stale-context notifications. Present only when a write guarded with
185
+ * `onStale: 'notify'` collided with a concurrent change: rather than throwing
186
+ * an `AbloStaleContextError`, the commit succeeds and reports the collision
187
+ * here so the caller can reconcile. See {@link StaleNotification}.
185
188
  */
186
189
  notifications?: StaleNotification[];
187
190
  /**
188
- * Ids of UPDATE/DELETE targets that matched ZERO rows (loud 0-row writes).
189
- * Present (non-empty) only when a write missed.
191
+ * Ids of update or delete targets that matched no rows. Present, and non-empty,
192
+ * only when a write missed the row it addressed.
190
193
  */
191
194
  missingIds?: string[];
192
195
  }
193
196
  /**
194
- * Per-call knobs attached to any mutation. Mirrors Stripe's options
195
- * object the last argument of every `stripe.X.Y(...)` call. Optional
196
- * everywhere; omitted fields fall back to sensible defaults.
197
+ * Per-call options accepted by any mutation, passed as the last argument.
198
+ * Every field is optional; omitted fields fall back to sensible defaults.
197
199
  *
198
- * - `idempotencyKey` — when set, the server caches the response for 24h
199
- * and returns the cached value on retries with the same key.
200
- * When omitted, the SDK auto-generates a UUIDv4 per mutation so every
201
- * call is retry-safe by default. Opt out with `{ idempotencyKey: null }`
202
- * if you genuinely want retry-unsafe writes (rare).
203
- * - `label` — human-readable audit tag. Flows to `mutation_log.label`
204
- * server-side for operator debugging ("nightly cleanup", "user click").
200
+ * - `idempotencyKey` — when set, the server caches the response for 24 hours and
201
+ * returns the cached result on any retry using the same key. When omitted, the
202
+ * SDK generates a fresh UUID per mutation, so every call is retry-safe by
203
+ * default. `null` is retained for source compatibility and is treated like
204
+ * omission; write retries never opt out of request identity.
205
+ * - `label` — a human-readable tag recorded with the mutation for debugging, such
206
+ * as "nightly cleanup" or "user click".
205
207
  */
206
208
  export interface MutationOptions {
207
209
  idempotencyKey?: string | null;
@@ -209,86 +211,76 @@ export interface MutationOptions {
209
211
  wait?: 'queued' | 'confirmed';
210
212
  readAt?: number | null;
211
213
  onStale?: 'reject' | 'overwrite' | 'notify' | null;
212
- /** Claim-pin attribution: the id (or `{ id }`) of the claim this write
213
- * belongs to. Distinct from the `claim` HANDLE on the model write params
214
- * this is the low-level reference the commit carries to bypass the holder's
215
- * own pin. (Was `intent` before the claim-vocabulary unification.) */
214
+ /** The id (or `{ id }`) of the claim this write belongs to. This is the
215
+ * low-level reference the commit carries so the write is attributed to a claim
216
+ * and can pass the holder's own lock. It is distinct from the `claim` handle on
217
+ * the model write parameters, which is the higher-level object you usually pass. */
216
218
  claimRef?: string | {
217
219
  readonly id: string;
218
220
  } | null;
219
221
  /**
220
- * Dormant agent-task lineage field, forwarded as the wire-level
221
- * `causedByTaskId`. Turns/tasks were removed from the SDK; nothing
222
- * populates this anymore (write attribution rides on the claim
223
- * id). Kept optional for wire-compat; always `null` from the client.
222
+ * Reserved lineage field, forwarded on the wire as `causedByTaskId`. The client
223
+ * always sends `null`; write attribution now travels on the claim id instead.
224
224
  */
225
225
  causedByTaskId?: string | null;
226
226
  /**
227
- * Batch-level read dependencies (the STORM "did anything I looked at change?"
228
- * layer). Each entry is a row (`{model,id,readAt,fields?}`) or a sync group
229
- * (`{group,readAt}`) this write was premised on; the server validates none
230
- * moved since `readAt` and fires the entry's `onStale` over the batch.
231
- * Distinct from per-op `readAt` (which guards only the row being written).
227
+ * Batch-level read dependencies the answer to "did anything I looked at
228
+ * change?" Each entry is a row (`{ model, id, readAt, fields? }`) or a sync
229
+ * group (`{ group, readAt }`) that this write was premised on. The server
230
+ * checks that none of them moved since their `readAt` and applies the entry's
231
+ * `onStale` behavior to the whole batch. This is distinct from the per-operation
232
+ * `readAt`, which guards only the row being written.
232
233
  */
233
234
  reads?: ReadDependency[] | null;
234
235
  }
235
236
  /**
236
- * The `MutationOptions` subset carried per-write through the offline
237
- * transaction lane (SyncClient TransactionQueue wire operation).
238
- * ONE shared type so the proxy's public params, the queue, and the wire
239
- * can never narrow each other silently again `wait` and `claim` are
240
- * deliberately absent because they resolve client-side before staging
241
- * (`wait` at the proxy's confirmation await, `claim` server-side via
242
- * the active lease on the entity).
237
+ * The subset of {@link MutationOptions} that travels with each write as it is
238
+ * queued offline and sent on the wire. A single shared type keeps the public
239
+ * parameters, the offline queue, and the wire format from diverging. `wait` and
240
+ * `claim` are deliberately absent: both are resolved on the client before a write
241
+ * is staged, so neither reaches this layer.
243
242
  */
244
243
  export type WriteOptions = Pick<MutationOptions, 'readAt' | 'onStale' | 'idempotencyKey' | 'label'>;
245
- /** A single mutation operation in a batch. `options` rides along so the
246
- * server can cache+replay via `mutation_log`. */
244
+ /** A single mutation within a batch. Its `options` travel with it so the server
245
+ * can cache and replay the operation for idempotent retries. */
247
246
  export interface MutationOperation {
248
247
  type: string;
249
248
  model: string;
250
249
  id: string;
251
250
  input?: Record<string, unknown>;
252
251
  /**
253
- * Client-side transaction id for THIS operation. The server stamps
254
- * it onto the resulting `sync_deltas.transaction_id` so the
255
- * confirming delta can be recognized as an echo of the local
256
- * optimistic mutation (echo detection at the receive layer drains
257
- * the matching id via `OptimisticEchoTracker` and skips the pool
258
- * mutation — see `SyncClient.applyDeltaBatchToPool`).
252
+ * A client-side id for this single operation. The server stamps it onto the
253
+ * resulting `sync_deltas.transaction_id`, so when the confirming delta arrives
254
+ * back over the sync stream the client can recognize it as an echo of its own
255
+ * optimistic write and skip re-applying it locally.
259
256
  *
260
- * Distinct from the batch-level `client_tx_id` used by
261
- * `mutation_log` for idempotency. The mutation_log key dedupes a
262
- * RETRIED batch (request-level cache); this transactionId
263
- * identifies a specific MUTATION within a batch (per-row identity
264
- * for echo matching). Both can coexist on the wire.
257
+ * This is distinct from the batch-level `client_tx_id` that idempotency uses:
258
+ * that key de-duplicates a retried batch (a request-level cache), whereas this
259
+ * id identifies one row within a batch (for echo matching). Both can appear on
260
+ * the wire at once.
265
261
  */
266
262
  transactionId?: string;
267
263
  readAt?: number | null;
268
264
  onStale?: 'reject' | 'overwrite' | 'notify' | null;
269
265
  /**
270
- * Per-op idempotency + audit metadata. `idempotencyKey` doubles as
271
- * the `mutation_log.client_tx_id` cache key; `label` is persisted to
272
- * `mutation_log.label` for debugging. These are the only `MutationOptions`
273
- * fields carried over the wire.
266
+ * Per-operation idempotency and audit metadata. `idempotencyKey` is also the
267
+ * cache key the server uses to de-duplicate retries; `label` is stored for
268
+ * debugging. These are the only {@link MutationOptions} fields sent on the wire.
274
269
  */
275
270
  options?: Pick<MutationOptions, 'idempotencyKey' | 'label'>;
276
271
  }
277
272
  /**
278
- * Executes mutations against the backend.
279
- * The SDK calls this interface; consumers implement it with their
280
- * specific GraphQL client, REST API, or other transport.
273
+ * The transport that carries mutations to your backend. The SDK calls the
274
+ * methods on this interface; you implement them over whatever transport you use —
275
+ * an HTTP API, a WebSocket, or something else.
281
276
  */
282
277
  export interface MutationExecutor {
283
278
  /**
284
- * Commit a batch of mutations atomically, returning the sync ack.
285
- * `options` apply to the whole batch (timeout, retries) — per-op
286
- * idempotencyKey/label live on each `MutationOperation`.
287
- *
288
- * Name matches the wire frame (`{ type: 'commit' }`) and the
289
- * universal mental model for atomic writes (DB transactions, git,
290
- * Firestore). Replaces the older `batchAck` name from the retired
291
- * GraphQL path.
279
+ * Commits a batch of mutations atomically and returns the sync
280
+ * acknowledgement. The `options` argument applies to the whole batch, while
281
+ * per-operation `idempotencyKey` and `label` live on each
282
+ * {@link MutationOperation}. The method name matches the `{ type: 'commit' }`
283
+ * frame on the wire.
292
284
  */
293
285
  commit(operations: MutationOperation[], options?: MutationOptions): Promise<CommitResult>;
294
286
  /** Execute a create mutation for a specific model */
@@ -321,63 +313,60 @@ export interface MutationExecutor {
321
313
  onSessionExpired?(callback: () => void): void;
322
314
  }
323
315
  /**
324
- * Application-specific configuration for the sync engine.
325
- * Replaces the 6 hardcoded config maps that were previously
326
- * embedded in TransactionQueue, Database, and Model.
316
+ * Application-specific configuration for the sync engine, describing how your
317
+ * models relate so the engine can order and merge writes correctly.
327
318
  */
328
319
  export interface SyncEngineConfig {
329
320
  /**
330
- * FK-ordered create priority, keyed by the typename each model reports
331
- * via {@link Model.getModelName}. `TransactionQueue` consults this at
332
- * enqueue time and when sorting groups inside a batch lower numbers
333
- * execute first, so parents precede children.
334
- *
335
- * `createSyncEngine` populates this automatically by topologically
336
- * walking `belongsTo` relations: a model with no FK parents gets 10, a
337
- * child gets 20, a grandchild 30, and so on (step = 10 to leave room
338
- * for consumer overrides). Apps rarely need to touch this — override
339
- * through `configOverrides.modelCreatePriority` only when the schema's
340
- * declared relations don't reflect an operational constraint (e.g. a
341
- * polymorphic FK the SDK can't see).
321
+ * The order in which to create models, so a row is never inserted before the
322
+ * parent row its foreign key points at. Keyed by each model's type name, with
323
+ * lower numbers created first, so parents precede children. The engine fills
324
+ * this in automatically by walking the schema's `belongsTo` relations — a model
325
+ * with no parents gets 10, its children 20, their children 30, and so on,
326
+ * stepping by 10 to leave room for overrides. You rarely set this by hand;
327
+ * override it only when a relation the schema can't see (such as a polymorphic
328
+ * foreign key) imposes an ordering the engine wouldn't otherwise know about.
342
329
  */
343
330
  modelCreatePriority: ReadonlyMap<string, number>;
344
331
  /**
345
- * Priority assigned to CREATE ops for models missing from
346
- * {@link modelCreatePriority}. Falls between the typical top and bottom
347
- * of the FK chain, so an unregistered model ends up later than declared
348
- * parents but earlier than declared grandchildren — a safe middle.
332
+ * The create priority for a model not listed in {@link modelCreatePriority}.
333
+ * It sits in the middle of the range, so an unlisted model is created after
334
+ * declared parents but before declared grandchildren a safe default.
349
335
  */
350
336
  defaultCreatePriority: number;
351
337
  /**
352
- * Priority for UPDATE/DELETE/ARCHIVE/UNARCHIVE ops, which don't need FK
353
- * ordering (the row already exists by the time they run). Must be higher
354
- * than any realistic CREATE priority so creates drain first.
338
+ * The priority for update, delete, archive, and unarchive operations. These
339
+ * need no ordering among themselves — the row already exists when they run
340
+ * so this is set higher than any create priority to ensure creates go first.
355
341
  */
356
342
  defaultNonCreatePriority: number;
357
343
  /**
358
- * Essential fields preserved during partial UPDATE merges in IndexedDB.
359
- * Prevents losing critical fields when a delta only contains changed fields.
360
- * e.g., { Task: ['title', 'projectId'], Slide: ['deckId', 'order'] }
344
+ * Fields to preserve when merging a partial update into the local store. A
345
+ * change usually carries only the fields that changed; listing a model's
346
+ * essential fields here keeps them from being dropped during that merge.
347
+ * For example: `{ Task: ['title', 'projectId'], Slide: ['deckId', 'order'] }`.
361
348
  */
362
349
  essentialFields: Readonly<Record<string, readonly string[]>>;
363
350
  /**
364
- * Fallback class name model name mapping for Model.getModelName().
365
- * Used when the ModelRegistry lookup fails (e.g., minified class names).
366
- * e.g., { TaskModel: 'Task', ProjectModel: 'Project' }
351
+ * A fallback map from class name to model name, used to resolve a model's name
352
+ * when the usual lookup fails for instance, when a bundler has minified the
353
+ * class names. For example: `{ TaskModel: 'Task', ProjectModel: 'Project' }`.
367
354
  */
368
355
  classNameFallbackMap: Readonly<Record<string, string>>;
369
356
  /**
370
- * Content hash of the schema THIS client was built against (the same
371
- * `schemaHash()` the CLI push + server compute). Used purely to detect
372
- * schema drift: when the server reports a different active hash on bootstrap,
373
- * the SDK warns the developer to run `ablo push` otherwise drift only
374
- * surfaces later as an opaque DB constraint error. Advisory, not enforced.
357
+ * The content hash of the schema this client was built against the same hash
358
+ * the `ablo push` command and the server compute. It exists only to detect
359
+ * schema drift: if the server reports a different active hash when the client
360
+ * connects, the SDK warns you to run `ablo push`, so drift surfaces as a clear
361
+ * message rather than a confusing database error later. It is advisory, not
362
+ * enforced.
375
363
  */
376
364
  expectedSchemaHash?: string;
377
365
  }
378
366
  /**
379
- * Allows consumers to extend the WebSocket event map with
380
- * application-specific collaboration events (cursors, selections, etc.).
367
+ * Extends the WebSocket event map with your own collaboration events, such as
368
+ * cursor positions or selections, beyond the core delta, presence, and
369
+ * bootstrap events.
381
370
  */
382
371
  export interface WebSocketEventConfig {
383
372
  /** Additional event type names beyond the core delta/presence/bootstrap events */
@@ -1,8 +1,9 @@
1
1
  /**
2
- * Sync Engine SDK Dependency Injection Interfaces
2
+ * The interfaces you implement to plug the SDK into your own environment.
3
3
  *
4
- * These interfaces decouple the SDK from any specific app framework.
5
- * Consumers implement them to wire in their own logging, observability,
6
- * GraphQL client, session handling, and analytics.
4
+ * The SDK depends on these contracts rather than any specific framework, so you
5
+ * provide the concrete implementations logging, observability, analytics,
6
+ * session-error detection, online-status checks, and the transport that carries
7
+ * mutations to your backend. The SDK ships sensible no-op defaults where it can.
7
8
  */
8
9
  export {};