@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
@@ -1,30 +1,24 @@
1
1
  /**
2
- * `@abloatai/ablo/wire` canonical COMMIT-PATH frame contract.
2
+ * The write-path message shapes for the sync protocol. These cover the frames
3
+ * a client sends to commit work — {@link CommitMessage} (a batch of raw
4
+ * operations) and {@link MutationMessage} (a single named mutation) — and the
5
+ * server's {@link MutationResultMessage} acknowledgement. The same frames flow
6
+ * over a WebSocket connection and over the HTTP commit endpoint.
3
7
  *
4
- * These are the WebSocket (and HTTP-fallback) message shapes for the
5
- * write path: the client's `commit` / `mutation` frames and the server's
6
- * `mutation_result` ack. They live here not in the server app and not
7
- * inlined in the SDK's `SyncWebSocket` so the client, the server, and
8
- * any future `@abloatai/ablo/server` host all import ONE definition
9
- * and cannot drift.
10
- *
11
- * Scope note: the delta/sync frames (`sync_response`, `delta`) are NOT
12
- * here yet — they reference `SyncDelta`, which currently has two
13
- * definitions (server `db/deltas` vs package `core`) pending unification.
14
- * They stay server-local until that lands. Everything in this file
15
- * depends only on package-canonical types (`OnStaleMode`, `ErrorCode`,
16
- * `RequiredCapability`), so it is safe to share today.
17
- *
18
- * Changing any shape here is a wire-contract change — it requires
19
- * coordinated client + server updates.
8
+ * Both the client and the server import these definitions from here, so the two
9
+ * sides cannot drift. Each interface is paired with a Zod validator
10
+ * ({@link commitOperationSchema}, {@link commitPayloadSchema}) pinned to it at
11
+ * compile time, so the runtime check and the type stay in lockstep. Changing
12
+ * any shape in this file changes the wire contract and requires the client and
13
+ * server to update together.
20
14
  */
21
15
  import { z } from 'zod';
22
16
  import type { OnStaleMode, StaleNotification, ReadDependency } from '../coordination/index.js';
23
17
  import type { ErrorCode, RequiredCapability } from '../errors.js';
24
18
  /**
25
- * A single operation within a {@link CommitMessage} batch. The atomic unit
26
- * the server's commit executor applies (and, once the mutator seam lands,
27
- * the raw-op fallback path when no named mutator is registered).
19
+ * A single operation within a {@link CommitMessage} batch. Each operation is
20
+ * the smallest unit the server applies atomically one create, update,
21
+ * delete, archive, or unarchive against one model row.
28
22
  */
29
23
  export interface CommitOperation {
30
24
  type: 'CREATE' | 'UPDATE' | 'DELETE' | 'ARCHIVE' | 'UNARCHIVE';
@@ -32,45 +26,44 @@ export interface CommitOperation {
32
26
  id?: string | null;
33
27
  input?: Record<string, unknown> | null;
34
28
  /**
35
- * Per-op client transaction id. Stamped onto `sync_deltas.transaction_id`
36
- * so the originating client can recognize the broadcast as an echo of its
37
- * own optimistic mutation. Distinct from the batch-level `clientTxId`
38
- * (which keys `mutation_log` for retry idempotency).
29
+ * A client-generated transaction id for this one operation. The server
30
+ * stamps it onto the `sync_deltas.transaction_id` column so the originating
31
+ * client can recognize the resulting broadcast as an echo of its own
32
+ * optimistic write. This is distinct from the batch-level `clientTxId` on
33
+ * {@link CommitMessage}, which the server uses to deduplicate retried batches.
39
34
  */
40
35
  transactionId?: string | null;
41
36
  /**
42
- * Watermark from `context.capture`. The server checks whether the target
43
- * has received deltas since this id; if so the operation's `onStale` mode
44
- * applies.
37
+ * A read watermark captured when the client last read this row. The server
38
+ * checks whether the target has changed since this point; if it has, the
39
+ * operation's {@link CommitOperation.onStale} mode decides what happens.
45
40
  */
46
41
  readAt?: number | null;
47
42
  /**
48
- * Mode on stale detection (non-coercion). `'reject'` (default) throws
49
- * AbloStaleContextError; `'overwrite'` applies unconditionally (blind LWW);
50
- * `'notify'` holds the write and returns a `StaleNotification` for the actor
51
- * to resolve.
43
+ * What to do when the server detects the row changed since
44
+ * {@link CommitOperation.readAt}. `'reject'` (the default) fails the
45
+ * operation with a stale-context error; `'overwrite'` applies the write
46
+ * regardless; `'notify'` holds the write and returns a
47
+ * {@link StaleNotification} for the caller to resolve.
52
48
  */
53
49
  onStale?: OnStaleMode | null;
54
50
  /**
55
- * Write even if another participant holds a claim on this entity. The
56
- * default (`false`) rejects with `AbloClaimedError` when claimed `bypass`
57
- * is the explicit, recorded override, honored only for participants the
58
- * claim guard trusts (humans / framework identities; agent `bypass` is
59
- * ignored). Previously honored by the server's commit executor without
60
- * being declared here — the exact contract drift this file exists to
61
- * prevent.
51
+ * Write even when another participant holds a claim on this row. The default
52
+ * (`false`) rejects the operation with a claimed-entity error while a claim
53
+ * is held. Setting `bypass` overrides that, and the override is recorded. It
54
+ * is honored only for participants the claim guard trusts, such as human and
55
+ * framework identities; a bypass requested by an agent is ignored.
62
56
  */
63
57
  bypass?: boolean | null;
64
58
  }
65
59
  /**
66
- * Runtime validator for {@link CommitOperation} the per-op ingest gate both
67
- * commit transports (WS `commit` frame, HTTP `/v1/commits`) run before an
68
- * operation reaches the executor. Extends the canonical coordination-layer
69
- * schema (writeGuard `readAt`/`onStale`/`bypass` + op identity), widening only
70
- * `bypass` to `nullish` to match the interface (`boolean | null`).
71
- *
72
- * `readAt` is `z.number()` — a string watermark previously flowed into the
73
- * stale-guard SQL (`id > $3`) unvalidated.
60
+ * Runtime validator for {@link CommitOperation}. Both commit transports the
61
+ * WebSocket `commit` frame and the HTTP `/v1/commits` endpoint — run this check
62
+ * on every operation before it is applied, so a malformed operation is rejected
63
+ * at the edge. It builds on the shared coordination schema, widening `bypass`
64
+ * to also accept `null` so the validator and the interface match exactly. Note
65
+ * that `readAt` must be a number: it feeds the server's stale-check comparison,
66
+ * so a non-numeric watermark is refused here.
74
67
  */
75
68
  export declare const commitOperationSchema: z.ZodObject<{
76
69
  readAt: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
@@ -93,10 +86,10 @@ export declare const commitOperationSchema: z.ZodObject<{
93
86
  bypass: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
94
87
  }, z.core.$strip>;
95
88
  /**
96
- * Client Server single named-mutation frame. The named-mutator write
97
- * primitive (claim + args), as opposed to the raw-op {@link CommitMessage}
98
- * batch. Server-side mutator dispatch resolves `mutatorName` against the
99
- * host-provided registry.
89
+ * A client-to-server frame that invokes a single named mutation by name and
90
+ * arguments, as opposed to the raw operation batch in {@link CommitMessage}.
91
+ * The server resolves `mutatorName` against the set of mutations registered on
92
+ * it and runs the matching one.
100
93
  */
101
94
  export interface MutationMessage {
102
95
  type: 'mutation';
@@ -107,10 +100,10 @@ export interface MutationMessage {
107
100
  };
108
101
  }
109
102
  /**
110
- * Client Server "commit this batch of operations" frame. Formerly named
111
- * `batch_ack` / `BatchAckMessage` renamed pre-stable to the customer-facing
112
- * verb (`commit`) consistently across the wire and the SDK method
113
- * (`MutationExecutor.commit`).
103
+ * A client-to-server frame that asks the server to commit a batch of operations
104
+ * atomically. This is the raw-operation counterpart to {@link MutationMessage};
105
+ * it carries a list of {@link CommitOperation} entries plus the batch metadata
106
+ * below.
114
107
  */
115
108
  export interface CommitMessage {
116
109
  type: 'commit';
@@ -118,30 +111,28 @@ export interface CommitMessage {
118
111
  operations: CommitOperation[];
119
112
  clientTxId: string;
120
113
  /**
121
- * Dormant agent-task lineage field. The SDK no longer populates it
122
- * turns/tasks were removed and write attribution now rides on the
123
- * claim (`claim`) id plus the server-stamped actor/capability. Kept
124
- * optional for wire-compat; when present the Hub still validates and
125
- * threads it onto `caused_by_task_id`, but client writes leave it
126
- * `null` (the audit pane treats null as "no prompt-side context").
114
+ * Optional lineage id linking this batch to the task that caused it. When
115
+ * present, the server validates it and records it on the delta's
116
+ * `caused_by_task_id` column for audit trails; when omitted or `null`, the
117
+ * batch simply carries no task attribution.
127
118
  */
128
119
  causedByTaskId?: string | null;
129
120
  /**
130
- * Batch-level read dependencies (the STORM "did anything I looked at
131
- * change?" layer). Each entry is a row (`{model,id,readAt,fields?}`) or a
132
- * sync group (`{group,readAt}`) the batch's writes were premised on; the
133
- * server validates none moved since `readAt` and fires the entry's
134
- * `onStale` disposition over the batch. Omitted only write-targets are
135
- * checked (legacy behavior).
121
+ * The reads this batch's writes were premised on. Each entry names either a
122
+ * specific row (`{ model, id, readAt, fields? }`) or a sync group
123
+ * (`{ group, readAt }`) that must not have changed since its `readAt`
124
+ * watermark. The server checks every entry and applies its `onStale`
125
+ * disposition to the whole batch if one moved. When omitted, only the rows
126
+ * being written are checked for staleness.
136
127
  */
137
128
  reads?: ReadDependency[] | null;
138
129
  };
139
130
  }
140
131
  /**
141
- * Runtime validator for {@link CommitMessage}'s payload every field the
142
- * server's commit path actually honors (`operations`, `clientTxId`,
143
- * `causedByTaskId`, `reads`), each entry validated by
144
- * {@link commitOperationSchema} / the canonical `readDependencySchema`.
132
+ * Runtime validator for the payload of {@link CommitMessage}. It checks every
133
+ * field the server acts on `operations`, `clientTxId`, `causedByTaskId`, and
134
+ * `reads` — validating each operation with {@link commitOperationSchema} and
135
+ * each read dependency with the shared read-dependency schema.
145
136
  */
146
137
  export declare const commitPayloadSchema: z.ZodObject<{
147
138
  operations: z.ZodArray<z.ZodObject<{
@@ -187,13 +178,13 @@ export declare const commitPayloadSchema: z.ZodObject<{
187
178
  }, z.core.$strip>]>>>>;
188
179
  }, z.core.$strip>;
189
180
  /**
190
- * Wire ack for a `commit` frame. Payload mirrors the canonical
191
- * `CommitReceipt` shape so WebSocket, HTTP `/v1/commits`, and persisted
192
- * `AgentJob.result.receipt` all carry identical fields.
181
+ * The server's acknowledgement of a {@link CommitMessage}. Its payload mirrors
182
+ * the commit-receipt shape, so a commit acknowledged over a WebSocket, over the
183
+ * HTTP `/v1/commits` endpoint, or read back from a persisted job result all
184
+ * carry the same fields.
193
185
  *
194
- * `object`, `status`, and `ops` are typed optional because pre-unification
195
- * WS clients didn't ship them; servers always populate them on the way out.
196
- * New clients can rely on them.
186
+ * `object`, `status`, and `ops` are optional in the type but the server always
187
+ * populates them, so a current client can rely on them being present.
197
188
  */
198
189
  export interface MutationResultMessage {
199
190
  type: 'mutation_result';
@@ -206,26 +197,264 @@ export interface MutationResultMessage {
206
197
  lastSyncId?: number;
207
198
  ops?: number;
208
199
  /**
209
- * Stale-context notifications for `onStale: 'notify' ops whose
210
- * premise moved concurrently. Present only on a successful ack that hit a
211
- * notify-resolved conflict; the client surfaces these via the
212
- * `conflict:notified` event and the commit receipt instead of rejecting.
200
+ * Notifications for operations that used `onStale: 'notify'` and whose
201
+ * premise changed while the batch was being applied. Present only on a
202
+ * successful acknowledgement that resolved such a conflict; the client
203
+ * surfaces each one through its `conflict:notified` event and the commit
204
+ * receipt rather than failing the write.
213
205
  */
214
206
  notifications?: StaleNotification[];
215
207
  /**
216
- * Ids of UPDATE/DELETE targets that matched ZERO rows (don't exist or are
217
- * outside the org). Present (non-empty) only when a write missed. The
218
- * client turns this into a loud `AbloNotFoundError` for the affected
219
- * caller instead of treating the no-op as success.
208
+ * Ids of update or delete targets that matched no rows because they do
209
+ * not exist or fall outside the caller's organization. Present and
210
+ * non-empty only when a write missed. The client raises a not-found error
211
+ * for the affected caller rather than treating the no-op as a success.
220
212
  */
221
213
  missingIds?: string[];
222
214
  error?: {
223
215
  code: ErrorCode;
224
216
  message: string;
225
217
  field?: string;
226
- /** Structured rejection body (x402-style) emitted when the cap
227
- * verifier denies the commit. */
218
+ /** The capability the commit required but the caller lacked. Present when
219
+ * the commit was denied for want of a capability, so the client can tell
220
+ * the caller exactly what to obtain. */
228
221
  requiredCapability?: RequiredCapability;
229
222
  };
230
223
  };
231
224
  }
225
+ /**
226
+ * A transport frame carrying the Zod-first v2 commit request. The payload's
227
+ * `schemaVersion` distinguishes it from the legacy `commit` payload during the
228
+ * migration window; the transport does not duplicate the commit contract.
229
+ */
230
+ export declare const commitRequestMessageSchema: z.ZodObject<{
231
+ type: z.ZodLiteral<"commit">;
232
+ payload: z.ZodObject<{
233
+ idempotencyKey: z.core.$ZodBranded<z.ZodString, "IdempotencyKey", "out">;
234
+ schemaVersion: z.ZodLiteral<2>;
235
+ operations: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
236
+ type: z.ZodLiteral<"create">;
237
+ value: z.ZodRecord<z.ZodString, z.ZodJSONSchema>;
238
+ operationId: z.core.$ZodBranded<z.ZodString, "OperationId", "out">;
239
+ target: z.ZodObject<{
240
+ model: z.ZodString;
241
+ id: z.ZodString;
242
+ }, z.core.$strict>;
243
+ preconditions: z.ZodDefault<z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
244
+ type: z.ZodLiteral<"unchanged_since">;
245
+ cursor: z.core.$ZodBranded<z.ZodString, "SyncOffset", "out">;
246
+ fields: z.ZodOptional<z.ZodArray<z.ZodString>>;
247
+ }, z.core.$strict>, z.ZodObject<{
248
+ type: z.ZodLiteral<"version_matches">;
249
+ version: z.ZodNumber;
250
+ }, z.core.$strict>, z.ZodObject<{
251
+ type: z.ZodLiteral<"claim_fence">;
252
+ claimId: z.core.$ZodBranded<z.ZodString, "ClaimId", "out">;
253
+ generation: z.ZodNumber;
254
+ }, z.core.$strict>], "type">>>;
255
+ }, z.core.$strict>, z.ZodObject<{
256
+ type: z.ZodLiteral<"patch">;
257
+ changes: z.ZodRecord<z.ZodString, z.ZodJSONSchema>;
258
+ operationId: z.core.$ZodBranded<z.ZodString, "OperationId", "out">;
259
+ target: z.ZodObject<{
260
+ model: z.ZodString;
261
+ id: z.ZodString;
262
+ }, z.core.$strict>;
263
+ preconditions: z.ZodDefault<z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
264
+ type: z.ZodLiteral<"unchanged_since">;
265
+ cursor: z.core.$ZodBranded<z.ZodString, "SyncOffset", "out">;
266
+ fields: z.ZodOptional<z.ZodArray<z.ZodString>>;
267
+ }, z.core.$strict>, z.ZodObject<{
268
+ type: z.ZodLiteral<"version_matches">;
269
+ version: z.ZodNumber;
270
+ }, z.core.$strict>, z.ZodObject<{
271
+ type: z.ZodLiteral<"claim_fence">;
272
+ claimId: z.core.$ZodBranded<z.ZodString, "ClaimId", "out">;
273
+ generation: z.ZodNumber;
274
+ }, z.core.$strict>], "type">>>;
275
+ }, z.core.$strict>, z.ZodObject<{
276
+ type: z.ZodLiteral<"delete">;
277
+ operationId: z.core.$ZodBranded<z.ZodString, "OperationId", "out">;
278
+ target: z.ZodObject<{
279
+ model: z.ZodString;
280
+ id: z.ZodString;
281
+ }, z.core.$strict>;
282
+ preconditions: z.ZodDefault<z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
283
+ type: z.ZodLiteral<"unchanged_since">;
284
+ cursor: z.core.$ZodBranded<z.ZodString, "SyncOffset", "out">;
285
+ fields: z.ZodOptional<z.ZodArray<z.ZodString>>;
286
+ }, z.core.$strict>, z.ZodObject<{
287
+ type: z.ZodLiteral<"version_matches">;
288
+ version: z.ZodNumber;
289
+ }, z.core.$strict>, z.ZodObject<{
290
+ type: z.ZodLiteral<"claim_fence">;
291
+ claimId: z.core.$ZodBranded<z.ZodString, "ClaimId", "out">;
292
+ generation: z.ZodNumber;
293
+ }, z.core.$strict>], "type">>>;
294
+ }, z.core.$strict>, z.ZodObject<{
295
+ type: z.ZodLiteral<"archive">;
296
+ operationId: z.core.$ZodBranded<z.ZodString, "OperationId", "out">;
297
+ target: z.ZodObject<{
298
+ model: z.ZodString;
299
+ id: z.ZodString;
300
+ }, z.core.$strict>;
301
+ preconditions: z.ZodDefault<z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
302
+ type: z.ZodLiteral<"unchanged_since">;
303
+ cursor: z.core.$ZodBranded<z.ZodString, "SyncOffset", "out">;
304
+ fields: z.ZodOptional<z.ZodArray<z.ZodString>>;
305
+ }, z.core.$strict>, z.ZodObject<{
306
+ type: z.ZodLiteral<"version_matches">;
307
+ version: z.ZodNumber;
308
+ }, z.core.$strict>, z.ZodObject<{
309
+ type: z.ZodLiteral<"claim_fence">;
310
+ claimId: z.core.$ZodBranded<z.ZodString, "ClaimId", "out">;
311
+ generation: z.ZodNumber;
312
+ }, z.core.$strict>], "type">>>;
313
+ }, z.core.$strict>, z.ZodObject<{
314
+ type: z.ZodLiteral<"unarchive">;
315
+ operationId: z.core.$ZodBranded<z.ZodString, "OperationId", "out">;
316
+ target: z.ZodObject<{
317
+ model: z.ZodString;
318
+ id: z.ZodString;
319
+ }, z.core.$strict>;
320
+ preconditions: z.ZodDefault<z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
321
+ type: z.ZodLiteral<"unchanged_since">;
322
+ cursor: z.core.$ZodBranded<z.ZodString, "SyncOffset", "out">;
323
+ fields: z.ZodOptional<z.ZodArray<z.ZodString>>;
324
+ }, z.core.$strict>, z.ZodObject<{
325
+ type: z.ZodLiteral<"version_matches">;
326
+ version: z.ZodNumber;
327
+ }, z.core.$strict>, z.ZodObject<{
328
+ type: z.ZodLiteral<"claim_fence">;
329
+ claimId: z.core.$ZodBranded<z.ZodString, "ClaimId", "out">;
330
+ generation: z.ZodNumber;
331
+ }, z.core.$strict>], "type">>>;
332
+ }, z.core.$strict>], "type">>;
333
+ metadata: z.ZodOptional<z.ZodObject<{
334
+ label: z.ZodOptional<z.ZodString>;
335
+ causedByTaskId: z.ZodOptional<z.ZodString>;
336
+ }, z.core.$strict>>;
337
+ }, z.core.$strict>;
338
+ }, z.core.$strict>;
339
+ export type CommitRequestMessage = z.output<typeof commitRequestMessageSchema>;
340
+ /** A transport frame carrying one terminal, status-discriminated v2 receipt. */
341
+ export declare const commitResultMessageSchema: z.ZodObject<{
342
+ type: z.ZodLiteral<"commit_result">;
343
+ payload: z.ZodDiscriminatedUnion<[z.ZodObject<{
344
+ status: z.ZodLiteral<"committed">;
345
+ syncCursor: z.core.$ZodBranded<z.ZodString, "SyncCursor", "out">;
346
+ operationCount: z.ZodNumber;
347
+ object: z.ZodLiteral<"commit_receipt">;
348
+ schemaVersion: z.ZodLiteral<2>;
349
+ idempotencyKey: z.core.$ZodBranded<z.ZodString, "IdempotencyKey", "out">;
350
+ commitId: z.core.$ZodBranded<z.ZodUUID, "CommitId", "out">;
351
+ }, z.core.$strict>, z.ZodObject<{
352
+ status: z.ZodLiteral<"conflicted">;
353
+ syncCursor: z.core.$ZodBranded<z.ZodString, "SyncCursor", "out">;
354
+ conflicts: z.ZodArray<z.ZodObject<{
355
+ operationId: z.core.$ZodBranded<z.ZodString, "OperationId", "out">;
356
+ target: z.ZodObject<{
357
+ model: z.ZodString;
358
+ id: z.ZodString;
359
+ }, z.core.$strict>;
360
+ fields: z.ZodArray<z.ZodString>;
361
+ currentValues: z.ZodRecord<z.ZodString, z.ZodJSONSchema>;
362
+ observedAt: z.core.$ZodBranded<z.ZodString, "SyncOffset", "out">;
363
+ }, z.core.$strict>>;
364
+ object: z.ZodLiteral<"commit_receipt">;
365
+ schemaVersion: z.ZodLiteral<2>;
366
+ idempotencyKey: z.core.$ZodBranded<z.ZodString, "IdempotencyKey", "out">;
367
+ commitId: z.core.$ZodBranded<z.ZodUUID, "CommitId", "out">;
368
+ }, z.core.$strict>, z.ZodObject<{
369
+ status: z.ZodLiteral<"rejected">;
370
+ error: z.ZodObject<{
371
+ code: z.ZodUnion<readonly [z.ZodEnum<{}>, z.ZodCustom<`policy:${string}`, `policy:${string}`>]>;
372
+ message: z.ZodString;
373
+ field: z.ZodOptional<z.ZodString>;
374
+ requiredCapability: z.ZodOptional<z.ZodObject<{
375
+ scope: z.ZodString;
376
+ constraints: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>>;
377
+ issuer: z.ZodOptional<z.ZodString>;
378
+ ttlSeconds: z.ZodOptional<z.ZodNumber>;
379
+ nonce: z.ZodOptional<z.ZodString>;
380
+ }, z.core.$strict>>;
381
+ details: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodJSONSchema>>;
382
+ }, z.core.$strict>;
383
+ object: z.ZodLiteral<"commit_receipt">;
384
+ schemaVersion: z.ZodLiteral<2>;
385
+ idempotencyKey: z.core.$ZodBranded<z.ZodString, "IdempotencyKey", "out">;
386
+ commitId: z.core.$ZodBranded<z.ZodUUID, "CommitId", "out">;
387
+ }, z.core.$strict>], "status">;
388
+ }, z.core.$strict>;
389
+ export type CommitResultMessage = z.output<typeof commitResultMessageSchema>;
390
+ /** Explicit compatibility name for the v1 uppercase operation schema. */
391
+ export declare const legacyCommitOperationSchema: z.ZodObject<{
392
+ readAt: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
393
+ onStale: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
394
+ reject: "reject";
395
+ overwrite: "overwrite";
396
+ notify: "notify";
397
+ }>>>;
398
+ type: z.ZodEnum<{
399
+ CREATE: "CREATE";
400
+ UPDATE: "UPDATE";
401
+ DELETE: "DELETE";
402
+ ARCHIVE: "ARCHIVE";
403
+ UNARCHIVE: "UNARCHIVE";
404
+ }>;
405
+ model: z.ZodString;
406
+ id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
407
+ input: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
408
+ transactionId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
409
+ bypass: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
410
+ }, z.core.$strip>;
411
+ /** Explicit compatibility name for the v1 `clientTxId` payload schema. */
412
+ export declare const legacyCommitPayloadSchema: z.ZodObject<{
413
+ operations: z.ZodArray<z.ZodObject<{
414
+ readAt: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
415
+ onStale: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
416
+ reject: "reject";
417
+ overwrite: "overwrite";
418
+ notify: "notify";
419
+ }>>>;
420
+ type: z.ZodEnum<{
421
+ CREATE: "CREATE";
422
+ UPDATE: "UPDATE";
423
+ DELETE: "DELETE";
424
+ ARCHIVE: "ARCHIVE";
425
+ UNARCHIVE: "UNARCHIVE";
426
+ }>;
427
+ model: z.ZodString;
428
+ id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
429
+ input: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
430
+ transactionId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
431
+ bypass: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
432
+ }, z.core.$strip>>;
433
+ clientTxId: z.ZodString;
434
+ causedByTaskId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
435
+ reads: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodUnion<readonly [z.ZodObject<{
436
+ model: z.ZodString;
437
+ id: z.ZodString;
438
+ readAt: z.ZodNumber;
439
+ fields: z.ZodOptional<z.ZodArray<z.ZodString>>;
440
+ onStale: z.ZodOptional<z.ZodEnum<{
441
+ reject: "reject";
442
+ overwrite: "overwrite";
443
+ notify: "notify";
444
+ }>>;
445
+ }, z.core.$strip>, z.ZodObject<{
446
+ group: z.ZodString;
447
+ readAt: z.ZodNumber;
448
+ onStale: z.ZodOptional<z.ZodEnum<{
449
+ reject: "reject";
450
+ overwrite: "overwrite";
451
+ notify: "notify";
452
+ }>>;
453
+ }, z.core.$strip>]>>>>;
454
+ }, z.core.$strip>;
455
+ /** Explicit compatibility alias for the v1 uppercase operation shape. */
456
+ export type LegacyCommitOperation = CommitOperation;
457
+ /** Explicit compatibility alias for the v1 `clientTxId` commit frame. */
458
+ export type LegacyCommitMessage = CommitMessage;
459
+ /** Explicit compatibility alias for the v1 boolean-style mutation receipt. */
460
+ export type LegacyMutationResultMessage = MutationResultMessage;
@@ -1,48 +1,42 @@
1
1
  /**
2
- * `@abloatai/ablo/wire` canonical COMMIT-PATH frame contract.
2
+ * The write-path message shapes for the sync protocol. These cover the frames
3
+ * a client sends to commit work — {@link CommitMessage} (a batch of raw
4
+ * operations) and {@link MutationMessage} (a single named mutation) — and the
5
+ * server's {@link MutationResultMessage} acknowledgement. The same frames flow
6
+ * over a WebSocket connection and over the HTTP commit endpoint.
3
7
  *
4
- * These are the WebSocket (and HTTP-fallback) message shapes for the
5
- * write path: the client's `commit` / `mutation` frames and the server's
6
- * `mutation_result` ack. They live here not in the server app and not
7
- * inlined in the SDK's `SyncWebSocket` so the client, the server, and
8
- * any future `@abloatai/ablo/server` host all import ONE definition
9
- * and cannot drift.
10
- *
11
- * Scope note: the delta/sync frames (`sync_response`, `delta`) are NOT
12
- * here yet — they reference `SyncDelta`, which currently has two
13
- * definitions (server `db/deltas` vs package `core`) pending unification.
14
- * They stay server-local until that lands. Everything in this file
15
- * depends only on package-canonical types (`OnStaleMode`, `ErrorCode`,
16
- * `RequiredCapability`), so it is safe to share today.
17
- *
18
- * Changing any shape here is a wire-contract change — it requires
19
- * coordinated client + server updates.
8
+ * Both the client and the server import these definitions from here, so the two
9
+ * sides cannot drift. Each interface is paired with a Zod validator
10
+ * ({@link commitOperationSchema}, {@link commitPayloadSchema}) pinned to it at
11
+ * compile time, so the runtime check and the type stay in lockstep. Changing
12
+ * any shape in this file changes the wire contract and requires the client and
13
+ * server to update together.
20
14
  */
21
15
  import { z } from 'zod';
22
- // Runtime schema primitives come from the coordination LEAF module (a pure
23
- // zod file), not the barrel keeps `wire/` lean (zod-leaf runtime deps only).
16
+ // The runtime schema primitives are imported straight from the coordination
17
+ // schema module to keep this file's runtime dependencies limited to Zod.
24
18
  import { commitOperationSchema as coordinationCommitOperationSchema, readDependencySchema, } from '../coordination/schema.js';
19
+ import { commitReceiptSchema as commitReceiptV2Schema, commitRequestSchema as commitRequestV2Schema, } from '../commit/contract.js';
25
20
  /**
26
- * Runtime validator for {@link CommitOperation} the per-op ingest gate both
27
- * commit transports (WS `commit` frame, HTTP `/v1/commits`) run before an
28
- * operation reaches the executor. Extends the canonical coordination-layer
29
- * schema (writeGuard `readAt`/`onStale`/`bypass` + op identity), widening only
30
- * `bypass` to `nullish` to match the interface (`boolean | null`).
31
- *
32
- * `readAt` is `z.number()` — a string watermark previously flowed into the
33
- * stale-guard SQL (`id > $3`) unvalidated.
21
+ * Runtime validator for {@link CommitOperation}. Both commit transports the
22
+ * WebSocket `commit` frame and the HTTP `/v1/commits` endpoint — run this check
23
+ * on every operation before it is applied, so a malformed operation is rejected
24
+ * at the edge. It builds on the shared coordination schema, widening `bypass`
25
+ * to also accept `null` so the validator and the interface match exactly. Note
26
+ * that `readAt` must be a number: it feeds the server's stale-check comparison,
27
+ * so a non-numeric watermark is refused here.
34
28
  */
35
29
  export const commitOperationSchema = coordinationCommitOperationSchema.extend({
36
30
  bypass: z.boolean().nullish(),
37
31
  });
38
- // z.infer-bound: the schema and the interface cannot drift in either direction.
32
+ // Pins the schema to the interface: this fails to compile if either side drifts.
39
33
  const _commitOperationContract = true;
40
34
  void _commitOperationContract;
41
35
  /**
42
- * Runtime validator for {@link CommitMessage}'s payload every field the
43
- * server's commit path actually honors (`operations`, `clientTxId`,
44
- * `causedByTaskId`, `reads`), each entry validated by
45
- * {@link commitOperationSchema} / the canonical `readDependencySchema`.
36
+ * Runtime validator for the payload of {@link CommitMessage}. It checks every
37
+ * field the server acts on `operations`, `clientTxId`, `causedByTaskId`, and
38
+ * `reads` — validating each operation with {@link commitOperationSchema} and
39
+ * each read dependency with the shared read-dependency schema.
46
40
  */
47
41
  export const commitPayloadSchema = z.object({
48
42
  operations: z.array(commitOperationSchema),
@@ -50,6 +44,26 @@ export const commitPayloadSchema = z.object({
50
44
  causedByTaskId: z.string().nullish(),
51
45
  reads: z.array(readDependencySchema).nullish(),
52
46
  });
53
- // z.infer-bound: payload schema and CommitMessage['payload'] cannot drift.
47
+ // Pins the schema to the payload type: fails to compile if either side drifts.
54
48
  const _commitPayloadContract = true;
55
49
  void _commitPayloadContract;
50
+ // ── Commit contract v2 ───────────────────────────────────────────────────
51
+ /**
52
+ * A transport frame carrying the Zod-first v2 commit request. The payload's
53
+ * `schemaVersion` distinguishes it from the legacy `commit` payload during the
54
+ * migration window; the transport does not duplicate the commit contract.
55
+ */
56
+ export const commitRequestMessageSchema = z.strictObject({
57
+ type: z.literal('commit'),
58
+ payload: commitRequestV2Schema,
59
+ });
60
+ /** A transport frame carrying one terminal, status-discriminated v2 receipt. */
61
+ export const commitResultMessageSchema = z.strictObject({
62
+ type: z.literal('commit_result'),
63
+ payload: commitReceiptV2Schema,
64
+ });
65
+ // ── Explicit v1 compatibility names ─────────────────────────────────────
66
+ /** Explicit compatibility name for the v1 uppercase operation schema. */
67
+ export const legacyCommitOperationSchema = commitOperationSchema;
68
+ /** Explicit compatibility name for the v1 `clientTxId` payload schema. */
69
+ export const legacyCommitPayloadSchema = commitPayloadSchema;