@abloatai/ablo 0.34.1 → 0.36.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (536) hide show
  1. package/AGENTS.md +2 -1
  2. package/CHANGELOG.md +758 -5
  3. package/README.md +56 -502
  4. package/bin/ablo.cjs +39 -0
  5. package/dist/BaseSyncedStore.d.ts +176 -48
  6. package/dist/BaseSyncedStore.js +346 -214
  7. package/dist/Database.d.ts +17 -44
  8. package/dist/Database.js +96 -79
  9. package/dist/InstanceCache.d.ts +31 -6
  10. package/dist/InstanceCache.js +65 -30
  11. package/dist/LazyReferenceCollection.d.ts +3 -3
  12. package/dist/LazyReferenceCollection.js +4 -4
  13. package/dist/Model.d.ts +23 -13
  14. package/dist/Model.js +27 -17
  15. package/dist/ModelRegistry.d.ts +8 -4
  16. package/dist/ModelRegistry.js +20 -18
  17. package/dist/NetworkMonitor.d.ts +3 -1
  18. package/dist/NetworkMonitor.js +7 -5
  19. package/dist/{SyncEngineContext.d.ts → RuntimeContext.d.ts} +20 -13
  20. package/dist/{SyncEngineContext.js → RuntimeContext.js} +11 -12
  21. package/dist/SyncClient.d.ts +47 -47
  22. package/dist/SyncClient.js +215 -156
  23. package/dist/ai-sdk/coordinatedTool.d.ts +2 -2
  24. package/dist/ai-sdk/coordinatedTool.js +1 -1
  25. package/dist/ai-sdk/coordinationContext.d.ts +2 -2
  26. package/dist/ai-sdk/coordinationContext.js +1 -1
  27. package/dist/ai-sdk/wrap.d.ts +3 -3
  28. package/dist/ai-sdk/wrap.js +2 -2
  29. package/dist/auth/index.d.ts +1 -156
  30. package/dist/auth/index.js +8 -301
  31. package/dist/client/Ablo.d.ts +42 -287
  32. package/dist/client/Ablo.js +129 -963
  33. package/dist/client/abloClient.d.ts +309 -0
  34. package/dist/client/abloClient.js +13 -0
  35. package/dist/client/clientPrelude.d.ts +52 -0
  36. package/dist/client/clientPrelude.js +60 -0
  37. package/dist/client/consoleLogger.d.ts +2 -2
  38. package/dist/client/coreClient.d.ts +60 -0
  39. package/dist/client/coreClient.js +118 -0
  40. package/dist/client/createInternalComponents.d.ts +8 -4
  41. package/dist/client/createInternalComponents.js +17 -10
  42. package/dist/client/createModelProxy.d.ts +98 -373
  43. package/dist/client/createModelProxy.js +233 -139
  44. package/dist/client/humans.d.ts +69 -0
  45. package/dist/client/humans.js +78 -0
  46. package/dist/client/modelRegistration.d.ts +1 -1
  47. package/dist/client/modelRegistration.js +9 -9
  48. package/dist/client/options.d.ts +73 -17
  49. package/dist/client/reactiveEngine.d.ts +53 -0
  50. package/dist/client/reactiveEngine.js +688 -0
  51. package/dist/client/resourceTypes.d.ts +9 -250
  52. package/dist/client/resourceTypes.js +8 -5
  53. package/dist/client/schemaConfig.d.ts +4 -4
  54. package/dist/client/schemaConfig.js +6 -2
  55. package/dist/client/storeCluster.d.ts +47 -0
  56. package/dist/client/storeCluster.js +118 -0
  57. package/dist/client/storeLifecycle.d.ts +61 -0
  58. package/dist/client/storeLifecycle.js +231 -0
  59. package/dist/client/validateAbloOptions.d.ts +3 -2
  60. package/dist/client/validateAbloOptions.js +1 -1
  61. package/dist/client/wsMutationExecutor.d.ts +3 -3
  62. package/dist/client/wsMutationExecutor.js +3 -3
  63. package/dist/context.d.ts +22 -9
  64. package/dist/context.js +33 -9
  65. package/dist/coordination/ClaimLog.d.ts +26 -0
  66. package/dist/coordination/ClaimLog.js +32 -0
  67. package/dist/coordination/index.d.ts +1 -15
  68. package/dist/coordination/index.js +8 -31
  69. package/dist/core/index.d.ts +3 -3
  70. package/dist/core/index.js +2 -2
  71. package/dist/docs/catalog.d.ts +72 -0
  72. package/dist/docs/catalog.js +230 -0
  73. package/dist/docs/index.d.ts +10 -0
  74. package/dist/docs/index.js +10 -0
  75. package/dist/environment.d.ts +1 -40
  76. package/dist/environment.js +8 -37
  77. package/dist/index.d.ts +44 -36
  78. package/dist/index.js +30 -22
  79. package/dist/interfaces/index.d.ts +44 -134
  80. package/dist/keys/index.d.ts +1 -77
  81. package/dist/keys/index.js +8 -190
  82. package/dist/mutators/{RecordingTransaction.d.ts → RecordingMutation.d.ts} +4 -4
  83. package/dist/mutators/{RecordingTransaction.js → RecordingMutation.js} +2 -2
  84. package/dist/mutators/Transaction.d.ts +1 -1
  85. package/dist/mutators/Transaction.js +1 -1
  86. package/dist/mutators/UndoManager.d.ts +6 -6
  87. package/dist/mutators/UndoManager.js +5 -5
  88. package/dist/mutators/defineMutators.d.ts +3 -3
  89. package/dist/mutators/defineMutators.js +1 -1
  90. package/dist/mutators/inverseOp.js +2 -2
  91. package/dist/mutators/mutateActions.d.ts +3 -3
  92. package/dist/mutators/mutateActions.js +1 -1
  93. package/dist/mutators/readerActions.d.ts +1 -1
  94. package/dist/mutators/undoApply.d.ts +1 -1
  95. package/dist/mutators/undoApply.js +1 -1
  96. package/dist/policy/index.d.ts +2 -2
  97. package/dist/policy/index.js +1 -1
  98. package/dist/query/client.d.ts +5 -2
  99. package/dist/query/client.js +10 -9
  100. package/dist/query/types.d.ts +6 -41
  101. package/dist/query/types.js +2 -2
  102. package/dist/react/AbloProvider.d.ts +18 -8
  103. package/dist/react/AbloProvider.js +10 -9
  104. package/dist/react/context.d.ts +3 -3
  105. package/dist/react/context.js +1 -1
  106. package/dist/react/createAbloReact.d.ts +56 -0
  107. package/dist/react/createAbloReact.js +51 -0
  108. package/dist/react/index.d.ts +6 -5
  109. package/dist/react/index.js +6 -3
  110. package/dist/react/internalContext.d.ts +1 -1
  111. package/dist/react/useAblo.d.ts +12 -5
  112. package/dist/react/useAblo.js +26 -8
  113. package/dist/react/useCurrentUserId.js +1 -1
  114. package/dist/react/useErrorListener.js +1 -1
  115. package/dist/react/useMutationFailureListener.d.ts +2 -2
  116. package/dist/react/useMutationFailureListener.js +1 -1
  117. package/dist/react/useMutators.d.ts +3 -3
  118. package/dist/react/useMutators.js +3 -3
  119. package/dist/react/useUndoScope.d.ts +5 -5
  120. package/dist/react/useUndoScope.js +1 -1
  121. package/dist/schema/coordination.d.ts +69 -10
  122. package/dist/schema/coordination.js +90 -9
  123. package/dist/schema/ddl.js +2 -2
  124. package/dist/schema/diff.d.ts +1 -1
  125. package/dist/schema/generate.js +1 -1
  126. package/dist/schema/index.d.ts +11 -10
  127. package/dist/schema/index.js +22 -18
  128. package/dist/schema/queries.d.ts +27 -27
  129. package/dist/schema/queries.js +23 -23
  130. package/dist/schema/select.d.ts +3 -3
  131. package/dist/schema/select.js +6 -3
  132. package/dist/schema/serialize.d.ts +15 -6
  133. package/dist/schema/serialize.js +20 -3
  134. package/dist/schema/sugar.d.ts +6 -7
  135. package/dist/schema/sugar.js +9 -12
  136. package/dist/schema/syncDeltaRow.d.ts +4 -152
  137. package/dist/schema/syncDeltaRow.js +4 -105
  138. package/dist/server/adapter.d.ts +18 -1
  139. package/dist/server/commit.d.ts +10 -16
  140. package/dist/server/index.d.ts +1 -1
  141. package/dist/server/index.js +1 -1
  142. package/dist/server/readConfig.d.ts +1 -1
  143. package/dist/source/adapter.d.ts +7 -5
  144. package/dist/source/adapter.js +7 -5
  145. package/dist/source/adapters/drizzle.d.ts +1 -1
  146. package/dist/source/adapters/drizzle.js +2 -2
  147. package/dist/source/adapters/kysely.d.ts +1 -1
  148. package/dist/source/adapters/kysely.js +1 -1
  149. package/dist/source/adapters/kyselyMutationCore.d.ts +1 -1
  150. package/dist/source/adapters/kyselyMutationCore.js +2 -2
  151. package/dist/source/adapters/memory.js +1 -1
  152. package/dist/source/adapters/prisma.d.ts +8 -3
  153. package/dist/source/adapters/prisma.js +1 -1
  154. package/dist/source/connector.js +1 -1
  155. package/dist/source/connectorProtocol.d.ts +2 -8
  156. package/dist/source/connectorProtocol.js +3 -2
  157. package/dist/source/contract.d.ts +29 -17
  158. package/dist/source/contract.js +27 -22
  159. package/dist/source/factory.d.ts +1 -1
  160. package/dist/source/idempotency.js +2 -2
  161. package/dist/source/index.d.ts +1 -0
  162. package/dist/source/index.js +3 -0
  163. package/dist/source/next.d.ts +1 -1
  164. package/dist/source/signing.d.ts +9 -2
  165. package/dist/source/signing.js +4 -1
  166. package/dist/source/types.d.ts +6 -4
  167. package/dist/source/types.js +1 -1
  168. package/dist/{core/storeContract.d.ts → storeContract.d.ts} +6 -6
  169. package/dist/{core → stores}/DatabaseManager.d.ts +3 -1
  170. package/dist/{core → stores}/DatabaseManager.js +14 -13
  171. package/dist/stores/ObjectStore.d.ts +1 -1
  172. package/dist/{core → stores}/StoreManager.d.ts +9 -26
  173. package/dist/{core → stores}/StoreManager.js +29 -77
  174. package/dist/stores/SyncActionStore.d.ts +4 -2
  175. package/dist/stores/SyncActionStore.js +11 -17
  176. package/dist/stores/syncAction.d.ts +26 -0
  177. package/dist/stores/syncAction.js +16 -0
  178. package/dist/surface.d.ts +3 -3
  179. package/dist/surface.js +6 -4
  180. package/dist/sync/BootstrapFetcher.d.ts +127 -6
  181. package/dist/sync/BootstrapFetcher.js +511 -83
  182. package/dist/sync/ConnectionManager.d.ts +6 -198
  183. package/dist/sync/ConnectionManager.js +6 -677
  184. package/dist/sync/OnDemandLoader.d.ts +5 -2
  185. package/dist/sync/OnDemandLoader.js +61 -21
  186. package/dist/sync/SubscriptionManager.d.ts +13 -2
  187. package/dist/sync/SubscriptionManager.js +23 -5
  188. package/dist/sync/SyncWebSocket.d.ts +27 -510
  189. package/dist/sync/SyncWebSocket.js +76 -954
  190. package/dist/sync/awaitClaimGrant.d.ts +4 -44
  191. package/dist/sync/awaitClaimGrant.js +4 -109
  192. package/dist/sync/bootstrapApply.d.ts +3 -0
  193. package/dist/sync/bootstrapApply.js +2 -2
  194. package/dist/sync/commitFrames.d.ts +6 -40
  195. package/dist/sync/commitFrames.js +6 -97
  196. package/dist/sync/contextPorts.d.ts +18 -0
  197. package/dist/sync/contextPorts.js +31 -0
  198. package/dist/sync/createClaimStream.d.ts +5 -49
  199. package/dist/sync/createClaimStream.js +5 -469
  200. package/dist/sync/createPresenceStream.d.ts +26 -4
  201. package/dist/sync/createPresenceStream.js +28 -20
  202. package/dist/sync/createSnapshot.d.ts +2 -2
  203. package/dist/sync/createSnapshot.js +1 -1
  204. package/dist/sync/credentialLifecycle.d.ts +5 -173
  205. package/dist/sync/credentialLifecycle.js +5 -320
  206. package/dist/sync/deltaPipeline.d.ts +13 -12
  207. package/dist/sync/deltaPipeline.js +21 -4
  208. package/dist/sync/groupChange.d.ts +3 -0
  209. package/dist/sync/groupChange.js +16 -14
  210. package/dist/sync/participants.d.ts +24 -6
  211. package/dist/sync/participants.js +32 -23
  212. package/dist/sync/schemaDrift.d.ts +55 -0
  213. package/dist/sync/schemaDrift.js +53 -0
  214. package/dist/sync/schemas.d.ts +23 -33
  215. package/dist/sync/schemas.js +29 -20
  216. package/dist/sync/syncPlan.d.ts +3 -3
  217. package/dist/sync/wsFrameHandlers.d.ts +6 -114
  218. package/dist/sync/wsFrameHandlers.js +6 -392
  219. package/dist/syncLog/contract.d.ts +20 -0
  220. package/dist/syncLog/contract.js +19 -0
  221. package/dist/syncLog/index.d.ts +1 -0
  222. package/dist/syncLog/index.js +1 -0
  223. package/dist/transaction/ablo.d.ts +88 -0
  224. package/dist/transaction/ablo.js +33 -0
  225. package/dist/{client/auth.d.ts → transaction/auth/apiKey.d.ts} +43 -8
  226. package/dist/{client/auth.js → transaction/auth/apiKey.js} +19 -0
  227. package/dist/transaction/auth/bootstrapScope.d.ts +15 -0
  228. package/dist/transaction/auth/bootstrapScope.js +1 -0
  229. package/dist/transaction/auth/capability.d.ts +212 -0
  230. package/dist/transaction/auth/capability.js +224 -0
  231. package/dist/{auth → transaction/auth}/credentialSource.d.ts +8 -1
  232. package/dist/{client → transaction/auth}/identity.d.ts +8 -7
  233. package/dist/{client → transaction/auth}/identity.js +1 -1
  234. package/dist/transaction/auth/index.d.ts +162 -0
  235. package/dist/transaction/auth/index.js +304 -0
  236. package/dist/{auth → transaction/auth}/schemas.d.ts +1 -1
  237. package/dist/{auth → transaction/auth}/schemas.js +13 -13
  238. package/dist/{client → transaction/auth}/sessionMint.d.ts +8 -8
  239. package/dist/{client → transaction/auth}/sessionMint.js +4 -7
  240. package/dist/transaction/coordination/awaitClaimGrant.d.ts +56 -0
  241. package/dist/transaction/coordination/awaitClaimGrant.js +124 -0
  242. package/dist/{client → transaction/coordination}/claimHeartbeatLoop.d.ts +34 -0
  243. package/dist/{client → transaction/coordination}/claimHeartbeatLoop.js +20 -0
  244. package/dist/transaction/coordination/claimMeta.d.ts +49 -0
  245. package/dist/transaction/coordination/claimMeta.js +52 -0
  246. package/dist/transaction/coordination/createClaimStream.d.ts +64 -0
  247. package/dist/transaction/coordination/createClaimStream.js +475 -0
  248. package/dist/transaction/coordination/events.d.ts +74 -0
  249. package/dist/transaction/coordination/events.js +7 -0
  250. package/dist/transaction/coordination/index.d.ts +19 -0
  251. package/dist/transaction/coordination/index.js +45 -0
  252. package/dist/transaction/coordination/locator.d.ts +104 -0
  253. package/dist/transaction/coordination/locator.js +102 -0
  254. package/dist/transaction/coordination/schema.d.ts +1536 -0
  255. package/dist/transaction/coordination/schema.js +1177 -0
  256. package/dist/transaction/coordination/targetConflict.d.ts +2 -0
  257. package/dist/transaction/coordination/targetConflict.js +107 -0
  258. package/dist/{coordination → transaction/coordination}/trace.d.ts +7 -18
  259. package/dist/{coordination → transaction/coordination}/trace.js +18 -25
  260. package/dist/transaction/durableWrites.d.ts +62 -0
  261. package/dist/{client → transaction}/durableWrites.js +28 -3
  262. package/dist/transaction/environment.d.ts +105 -0
  263. package/dist/transaction/environment.js +108 -0
  264. package/dist/{errorCodes.d.ts → transaction/errorCodes.d.ts} +12 -12
  265. package/dist/{errorCodes.js → transaction/errorCodes.js} +45 -18
  266. package/dist/{errors.d.ts → transaction/errors.d.ts} +37 -13
  267. package/dist/{errors.js → transaction/errors.js} +85 -16
  268. package/dist/transaction/footprint.d.ts +111 -0
  269. package/dist/transaction/footprint.js +0 -0
  270. package/dist/transaction/index.d.ts +20 -0
  271. package/dist/transaction/index.js +20 -0
  272. package/dist/transaction/keys/index.d.ts +87 -0
  273. package/dist/transaction/keys/index.js +207 -0
  274. package/dist/transaction/log/syncDeltaRow.d.ts +158 -0
  275. package/dist/transaction/log/syncDeltaRow.js +95 -0
  276. package/dist/{sync/syncPosition.d.ts → transaction/logPosition.d.ts} +22 -8
  277. package/dist/{sync/syncPosition.js → transaction/logPosition.js} +15 -6
  278. package/dist/transaction/logger.d.ts +16 -0
  279. package/dist/transaction/logger.js +7 -0
  280. package/dist/transaction/observability.d.ts +53 -0
  281. package/dist/transaction/observability.js +19 -0
  282. package/dist/transaction/plugin.d.ts +285 -0
  283. package/dist/transaction/plugin.js +106 -0
  284. package/dist/{policy → transaction/policy}/types.d.ts +3 -3
  285. package/dist/{policy → transaction/policy}/types.js +2 -0
  286. package/dist/transaction/resources/httpResources.d.ts +321 -0
  287. package/dist/transaction/resources/httpResources.js +7 -0
  288. package/dist/transaction/resources/modelOperations.d.ts +427 -0
  289. package/dist/transaction/resources/modelOperations.js +12 -0
  290. package/dist/transaction/resources/mutationOptions.d.ts +66 -0
  291. package/dist/transaction/resources/mutationOptions.js +9 -0
  292. package/dist/transaction/resources/where.d.ts +101 -0
  293. package/dist/transaction/resources/where.js +115 -0
  294. package/dist/{client → transaction/resources}/writeOptionsSchema.d.ts +2 -6
  295. package/dist/{client → transaction/resources}/writeOptionsSchema.js +9 -5
  296. package/dist/{schema → transaction/schema}/field.d.ts +17 -23
  297. package/dist/{schema → transaction/schema}/field.js +5 -5
  298. package/dist/transaction/schema/fieldRef.d.ts +38 -0
  299. package/dist/transaction/schema/fieldRef.js +11 -0
  300. package/dist/transaction/schema/loadStrategy.d.ts +45 -0
  301. package/dist/transaction/schema/loadStrategy.js +46 -0
  302. package/dist/{schema → transaction/schema}/model.d.ts +50 -35
  303. package/dist/{schema → transaction/schema}/model.js +30 -20
  304. package/dist/transaction/schema/openapi.d.ts +58 -0
  305. package/dist/transaction/schema/openapi.js +501 -0
  306. package/dist/{schema → transaction/schema}/relation.d.ts +21 -16
  307. package/dist/{schema → transaction/schema}/relation.js +7 -7
  308. package/dist/{schema → transaction/schema}/residency.d.ts +0 -9
  309. package/dist/{schema → transaction/schema}/residency.js +0 -5
  310. package/dist/{schema → transaction/schema}/roles.d.ts +5 -5
  311. package/dist/{schema → transaction/schema}/roles.js +5 -5
  312. package/dist/{schema → transaction/schema}/schema.d.ts +39 -10
  313. package/dist/{schema → transaction/schema}/schema.js +24 -3
  314. package/dist/{schema → transaction/schema}/tenancy.d.ts +1 -1
  315. package/dist/{schema → transaction/schema}/tenancy.js +7 -4
  316. package/dist/transaction/transactionLayer.d.ts +82 -0
  317. package/dist/transaction/transactionLayer.js +24 -0
  318. package/dist/{transactions → transaction/transactions/settlement}/commitEnvelope.d.ts +5 -6
  319. package/dist/{transactions → transaction/transactions/settlement}/commitEnvelope.js +9 -13
  320. package/dist/{transactions → transaction/transactions/settlement}/httpCommitEnvelope.d.ts +9 -2
  321. package/dist/{transactions → transaction/transactions/settlement}/httpCommitEnvelope.js +5 -9
  322. package/dist/{transactions/durableWriteStore.d.ts → transaction/transactions/settlement/pendingWrite.d.ts} +11 -37
  323. package/dist/transaction/transactions/settlement/pendingWrite.js +20 -0
  324. package/dist/transaction/transport/commitFrames.d.ts +90 -0
  325. package/dist/transaction/transport/commitFrames.js +134 -0
  326. package/dist/transaction/transport/connectionManager.d.ts +215 -0
  327. package/dist/transaction/transport/connectionManager.js +673 -0
  328. package/dist/transaction/transport/credentialLifecycle.d.ts +177 -0
  329. package/dist/transaction/transport/credentialLifecycle.js +324 -0
  330. package/dist/{sync → transaction/transport}/heartbeat.d.ts +3 -1
  331. package/dist/{sync → transaction/transport}/heartbeat.js +6 -4
  332. package/dist/transaction/transport/httpClient.d.ts +131 -0
  333. package/dist/{client → transaction/transport}/httpClient.js +6 -5
  334. package/dist/transaction/transport/httpOptions.d.ts +33 -0
  335. package/dist/transaction/transport/httpOptions.js +12 -0
  336. package/dist/{client → transaction/transport}/httpTransport.js +295 -97
  337. package/dist/{sync/NetworkProbe.d.ts → transaction/transport/networkProbe.d.ts} +7 -4
  338. package/dist/{sync/NetworkProbe.js → transaction/transport/networkProbe.js} +14 -13
  339. package/dist/transaction/transport/wsFrameHandlers.d.ts +128 -0
  340. package/dist/transaction/transport/wsFrameHandlers.js +429 -0
  341. package/dist/transaction/transport/wsTransport.d.ts +574 -0
  342. package/dist/transaction/transport/wsTransport.js +1023 -0
  343. package/dist/transaction/types/assertExact.d.ts +17 -0
  344. package/dist/transaction/types/assertExact.js +1 -0
  345. package/dist/{types → transaction/types}/global.d.ts +17 -2
  346. package/dist/{types → transaction/types}/global.js +2 -1
  347. package/dist/{types → transaction/types}/index.d.ts +14 -46
  348. package/dist/{types → transaction/types}/index.js +7 -16
  349. package/dist/{types → transaction/types}/streams.d.ts +73 -45
  350. package/dist/transaction/utils/duration.d.ts +50 -0
  351. package/dist/{utils → transaction/utils}/duration.js +32 -0
  352. package/dist/{utils → transaction/utils}/json.d.ts +18 -0
  353. package/dist/transaction/utils/json.js +276 -0
  354. package/dist/transaction/wire/accountResponses.d.ts +420 -0
  355. package/dist/transaction/wire/accountResponses.js +290 -0
  356. package/dist/transaction/wire/auth.d.ts +56 -0
  357. package/dist/transaction/wire/auth.js +63 -0
  358. package/dist/transaction/wire/claimEvent.d.ts +76 -0
  359. package/dist/transaction/wire/claimEvent.js +73 -0
  360. package/dist/transaction/wire/claims.d.ts +530 -0
  361. package/dist/transaction/wire/claims.js +327 -0
  362. package/dist/{wire → transaction/wire}/commit.d.ts +125 -193
  363. package/dist/{wire → transaction/wire}/commit.js +68 -47
  364. package/dist/{wire → transaction/wire}/delta.d.ts +66 -17
  365. package/dist/{wire → transaction/wire}/delta.js +37 -13
  366. package/dist/transaction/wire/errorEnvelope.d.ts +72 -0
  367. package/dist/{wire → transaction/wire}/errorEnvelope.js +36 -5
  368. package/dist/transaction/wire/feedCursor.d.ts +60 -0
  369. package/dist/transaction/wire/feedCursor.js +82 -0
  370. package/dist/transaction/wire/feedEvent.d.ts +204 -0
  371. package/dist/transaction/wire/feedEvent.js +65 -0
  372. package/dist/transaction/wire/frames.d.ts +194 -0
  373. package/dist/transaction/wire/frames.js +50 -0
  374. package/dist/transaction/wire/inboundFrames.d.ts +562 -0
  375. package/dist/transaction/wire/inboundFrames.js +116 -0
  376. package/dist/transaction/wire/index.d.ts +54 -0
  377. package/dist/transaction/wire/index.js +83 -0
  378. package/dist/{wire → transaction/wire}/listEnvelope.d.ts +13 -14
  379. package/dist/transaction/wire/listEnvelope.js +42 -0
  380. package/dist/transaction/wire/modelMutations.d.ts +31 -0
  381. package/dist/transaction/wire/modelMutations.js +52 -0
  382. package/dist/transaction/wire/modelResponses.d.ts +85 -0
  383. package/dist/transaction/wire/modelResponses.js +43 -0
  384. package/dist/transaction/wire/modelShape.d.ts +78 -0
  385. package/dist/transaction/wire/modelShape.js +74 -0
  386. package/dist/transactions/{TransactionQueue.d.ts → mutations/MutationQueue.d.ts} +85 -38
  387. package/dist/transactions/{TransactionQueue.js → mutations/MutationQueue.js} +141 -80
  388. package/dist/transactions/{TransactionStore.d.ts → mutations/MutationStore.d.ts} +8 -8
  389. package/dist/transactions/{TransactionStore.js → mutations/MutationStore.js} +2 -2
  390. package/dist/transactions/{coalesceRules.d.ts → mutations/coalesceRules.d.ts} +10 -10
  391. package/dist/transactions/{coalesceRules.js → mutations/coalesceRules.js} +1 -1
  392. package/dist/transactions/mutations/commitLatency.d.ts +52 -0
  393. package/dist/transactions/mutations/commitLatency.js +130 -0
  394. package/dist/transactions/{commitOutboxStore.d.ts → mutations/commitOutboxStore.d.ts} +1 -5
  395. package/dist/transactions/{commitOutboxStore.js → mutations/commitOutboxStore.js} +1 -1
  396. package/dist/transactions/{commitPayload.d.ts → mutations/commitPayload.d.ts} +18 -16
  397. package/dist/transactions/{commitPayload.js → mutations/commitPayload.js} +15 -15
  398. package/dist/transactions/{deltaConfirmation.d.ts → mutations/deltaConfirmation.d.ts} +15 -11
  399. package/dist/transactions/{deltaConfirmation.js → mutations/deltaConfirmation.js} +14 -12
  400. package/dist/transactions/mutations/durableWriteStore.d.ts +14 -0
  401. package/dist/transactions/mutations/durableWriteStore.js +12 -0
  402. package/dist/transactions/{optimisticApply.d.ts → mutations/optimisticApply.d.ts} +7 -7
  403. package/dist/transactions/{replayValidation.d.ts → mutations/replayValidation.d.ts} +4 -3
  404. package/dist/transactions/{replayValidation.js → mutations/replayValidation.js} +7 -5
  405. package/dist/utils/mobxSetup.d.ts +1 -1
  406. package/dist/utils/mobxSetup.js +5 -2
  407. package/dist/{core → views}/QueryView.d.ts +2 -2
  408. package/dist/{core → views}/QueryView.js +2 -2
  409. package/dist/{core → views}/ViewRegistry.d.ts +1 -1
  410. package/dist/{core/queryUtils.d.ts → views/incrementalView.d.ts} +6 -6
  411. package/dist/{core/queryUtils.js → views/incrementalView.js} +6 -6
  412. package/dist/webhooks/events.d.ts +2 -2
  413. package/dist/wire/index.d.ts +1 -34
  414. package/dist/wire/index.js +8 -49
  415. package/docs/agent-messaging.md +3 -3
  416. package/docs/agents.md +20 -13
  417. package/docs/api-keys.md +14 -10
  418. package/docs/api.md +27 -61
  419. package/docs/audit.md +6 -3
  420. package/docs/cli.md +41 -13
  421. package/docs/client-behavior.md +11 -9
  422. package/docs/concurrency-convention.md +49 -57
  423. package/docs/coordination.md +283 -121
  424. package/docs/data-sources.md +7 -5
  425. package/docs/debugging.md +39 -15
  426. package/docs/deployment.md +267 -0
  427. package/docs/examples/agent-human.md +49 -42
  428. package/docs/examples/ai-sdk-tool.md +69 -44
  429. package/docs/examples/existing-python-backend.md +8 -6
  430. package/docs/examples/nextjs.md +129 -47
  431. package/docs/examples/scoped-agent.md +46 -45
  432. package/docs/examples/server-agent.md +46 -26
  433. package/docs/groups.md +87 -30
  434. package/docs/guarantees.md +41 -12
  435. package/docs/how-it-works.md +38 -12
  436. package/docs/idempotency.md +126 -0
  437. package/docs/identity.md +77 -74
  438. package/docs/index.md +172 -86
  439. package/docs/integration-guide.md +31 -19
  440. package/docs/mcp.md +46 -21
  441. package/docs/migration.md +95 -18
  442. package/docs/operating-on-your-database.md +3 -1
  443. package/docs/projects.md +3 -1
  444. package/docs/quickstart.md +22 -5
  445. package/docs/react.md +31 -18
  446. package/docs/schema-contract.md +5 -3
  447. package/docs/session-settings.md +108 -0
  448. package/docs/sessions.md +4 -2
  449. package/docs/webhooks.md +12 -10
  450. package/llms.txt +48 -18
  451. package/package.json +21 -26
  452. package/dist/agent/Agent.d.ts +0 -366
  453. package/dist/agent/Agent.js +0 -514
  454. package/dist/agent/index.d.ts +0 -115
  455. package/dist/agent/index.js +0 -128
  456. package/dist/agent/session.d.ts +0 -93
  457. package/dist/agent/session.js +0 -149
  458. package/dist/agent/types.d.ts +0 -68
  459. package/dist/agent/types.js +0 -9
  460. package/dist/cli.cjs +0 -286329
  461. package/dist/client/durableWrites.d.ts +0 -21
  462. package/dist/client/httpClient.d.ts +0 -80
  463. package/dist/coordination/schema.d.ts +0 -722
  464. package/dist/coordination/schema.js +0 -578
  465. package/dist/schema/openapi.d.ts +0 -29
  466. package/dist/schema/openapi.js +0 -124
  467. package/dist/testing/fixtures/bootstrap.d.ts +0 -49
  468. package/dist/testing/fixtures/bootstrap.js +0 -59
  469. package/dist/testing/fixtures/deltas.d.ts +0 -83
  470. package/dist/testing/fixtures/deltas.js +0 -136
  471. package/dist/testing/fixtures/models.d.ts +0 -83
  472. package/dist/testing/fixtures/models.js +0 -272
  473. package/dist/testing/helpers/reactWrapper.d.ts +0 -69
  474. package/dist/testing/helpers/reactWrapper.js +0 -67
  475. package/dist/testing/helpers/syncEngineHarness.d.ts +0 -54
  476. package/dist/testing/helpers/syncEngineHarness.js +0 -73
  477. package/dist/testing/helpers/wait.d.ts +0 -30
  478. package/dist/testing/helpers/wait.js +0 -49
  479. package/dist/testing/index.d.ts +0 -23
  480. package/dist/testing/index.js +0 -33
  481. package/dist/testing/mocks/FakeDatabase.d.ts +0 -18
  482. package/dist/testing/mocks/FakeDatabase.js +0 -10
  483. package/dist/testing/mocks/MockMutationExecutor.d.ts +0 -87
  484. package/dist/testing/mocks/MockMutationExecutor.js +0 -192
  485. package/dist/testing/mocks/MockNetworkMonitor.d.ts +0 -20
  486. package/dist/testing/mocks/MockNetworkMonitor.js +0 -46
  487. package/dist/testing/mocks/MockSyncContext.d.ts +0 -51
  488. package/dist/testing/mocks/MockSyncContext.js +0 -71
  489. package/dist/testing/mocks/MockSyncStore.d.ts +0 -88
  490. package/dist/testing/mocks/MockSyncStore.js +0 -171
  491. package/dist/testing/mocks/MockWebSocket.d.ts +0 -71
  492. package/dist/testing/mocks/MockWebSocket.js +0 -118
  493. package/dist/transactions/durableWriteStore.js +0 -30
  494. package/dist/utils/duration.d.ts +0 -25
  495. package/dist/utils/json.js +0 -88
  496. package/dist/wire/errorEnvelope.d.ts +0 -55
  497. package/dist/wire/frames.d.ts +0 -197
  498. package/dist/wire/frames.js +0 -49
  499. package/dist/wire/listEnvelope.js +0 -18
  500. package/docs/interaction-model.md +0 -97
  501. /package/dist/{core → query}/QueryProcessor.d.ts +0 -0
  502. /package/dist/{core → query}/QueryProcessor.js +0 -0
  503. /package/dist/{core/storeContract.js → storeContract.js} +0 -0
  504. /package/dist/{core → stores}/openIDBWithTimeout.d.ts +0 -0
  505. /package/dist/{core → stores}/openIDBWithTimeout.js +0 -0
  506. /package/dist/{client → transaction/auth}/credentialEndpoint.d.ts +0 -0
  507. /package/dist/{client → transaction/auth}/credentialEndpoint.js +0 -0
  508. /package/dist/{auth → transaction/auth}/credentialPolicy.d.ts +0 -0
  509. /package/dist/{auth → transaction/auth}/credentialPolicy.js +0 -0
  510. /package/dist/{auth → transaction/auth}/credentialSource.js +0 -0
  511. /package/dist/{client → transaction/auth}/hostedEndpoints.d.ts +0 -0
  512. /package/dist/{client → transaction/auth}/hostedEndpoints.js +0 -0
  513. /package/dist/{client → transaction}/persistence.d.ts +0 -0
  514. /package/dist/{client → transaction}/persistence.js +0 -0
  515. /package/dist/{client → transaction/resources}/functionalUpdate.d.ts +0 -0
  516. /package/dist/{client → transaction/resources}/functionalUpdate.js +0 -0
  517. /package/dist/{transactions → transaction/transactions/settlement}/idempotencyKey.d.ts +0 -0
  518. /package/dist/{transactions → transaction/transactions/settlement}/idempotencyKey.js +0 -0
  519. /package/dist/{client → transaction/transport}/httpTransport.d.ts +0 -0
  520. /package/dist/{types → transaction/types}/modelData.d.ts +0 -0
  521. /package/dist/{types → transaction/types}/modelData.js +0 -0
  522. /package/dist/{types → transaction/types}/participant.d.ts +0 -0
  523. /package/dist/{types → transaction/types}/participant.js +0 -0
  524. /package/dist/{types → transaction/types}/streams.js +0 -0
  525. /package/dist/{utils → transaction/utils}/asyncIterator.d.ts +0 -0
  526. /package/dist/{utils → transaction/utils}/asyncIterator.js +0 -0
  527. /package/dist/{wire → transaction/wire}/bootstrapReason.d.ts +0 -0
  528. /package/dist/{wire → transaction/wire}/bootstrapReason.js +0 -0
  529. /package/dist/{wire → transaction/wire}/protocol.d.ts +0 -0
  530. /package/dist/{wire → transaction/wire}/protocol.js +0 -0
  531. /package/dist/{wire → transaction/wire}/protocolVersion.d.ts +0 -0
  532. /package/dist/{wire → transaction/wire}/protocolVersion.js +0 -0
  533. /package/dist/transactions/{UnconfirmedWrites.d.ts → mutations/UnconfirmedWrites.d.ts} +0 -0
  534. /package/dist/transactions/{UnconfirmedWrites.js → mutations/UnconfirmedWrites.js} +0 -0
  535. /package/dist/transactions/{optimisticApply.js → mutations/optimisticApply.js} +0 -0
  536. /package/dist/{core → views}/ViewRegistry.js +0 -0
@@ -1,722 +0,0 @@
1
- import { z } from 'zod';
2
- /**
3
- * The wire schemas for coordination — the shapes that keep humans and agents
4
- * from overwriting each other on a shared row. Coordination works in three
5
- * layers, from outermost to innermost:
6
- *
7
- * 1. Presence (observation): who is working where. It reports, never blocks.
8
- * 2. Claims (pessimistic leases): `claim_begin` / `claim_abandon` grant one
9
- * participant exclusive intent on a target while others wait.
10
- * 3. Stale-context (optimistic): a `readAt` watermark plus an `onStale` write
11
- * guard that catches a lost update when the row moved after you read it.
12
- *
13
- * These Zod schemas are the single definition of each shape. Both the client
14
- * SDK and the server derive their TypeScript types from them with `z.infer`
15
- * rather than re-declaring the shapes, and the server validates inbound frames
16
- * against them at runtime.
17
- */
18
- /** A line/column span within a text-bearing field (slide body, doc, cell). */
19
- export declare const targetRangeSchema: z.ZodObject<{
20
- startLine: z.ZodNumber;
21
- endLine: z.ZodNumber;
22
- startColumn: z.ZodOptional<z.ZodNumber>;
23
- endColumn: z.ZodOptional<z.ZodNumber>;
24
- }, z.core.$strip>;
25
- export type TargetRange = z.infer<typeof targetRangeSchema>;
26
- export declare const participantKindSchema: z.ZodEnum<{
27
- user: "user";
28
- agent: "agent";
29
- system: "system";
30
- }>;
31
- export type ParticipantKind = z.infer<typeof participantKindSchema>;
32
- /**
33
- * Parses a participant kind from an inbound frame, tolerating an older wire
34
- * dialect. Some presence and claim frames label a non-agent participant
35
- * `'human'`, while the rest of the surface uses `'user'` for the same
36
- * participant. This normalizes `'human'` to `'user'` on read so every consumer
37
- * switches on one vocabulary. Producers emit the canonical
38
- * {@link participantKindSchema} values, and the output union is never widened.
39
- */
40
- export declare const wireParticipantKindSchema: z.ZodPreprocess<z.ZodEnum<{
41
- user: "user";
42
- agent: "agent";
43
- system: "system";
44
- }>>;
45
- /**
46
- * Resolves a peer's kind from an inbound presence or claim frame. It prefers
47
- * the server-stamped `participantKind` (normalized through
48
- * {@link wireParticipantKindSchema}). A frame from an older server that omits
49
- * that field falls back to the `isAgent` boolean, which can tell 'agent' from
50
- * 'user' but can never report 'system'.
51
- */
52
- export declare function participantKindFromWire(wireKind: unknown, isAgent: boolean | undefined): ParticipantKind;
53
- /**
54
- * Reads the peer-visible description a claim or presence frame carries in its
55
- * opaque `meta.description`. This is the single place that unpacks that field.
56
- * A caller that has an explicit `description` should prefer it
57
- * (`explicit ?? fromMeta`).
58
- */
59
- export declare function descriptionFromMeta(meta: Record<string, unknown> | undefined | null): string | undefined;
60
- /**
61
- * What a coordination event points at — the locator shared by all three
62
- * layers. It names an entity, optionally narrowed to a path, range, or field,
63
- * and carries opaque application metadata.
64
- */
65
- export declare const targetRefSchema: z.ZodObject<{
66
- entityType: z.ZodString;
67
- entityId: z.ZodString;
68
- path: z.ZodOptional<z.ZodString>;
69
- range: z.ZodOptional<z.ZodObject<{
70
- startLine: z.ZodNumber;
71
- endLine: z.ZodNumber;
72
- startColumn: z.ZodOptional<z.ZodNumber>;
73
- endColumn: z.ZodOptional<z.ZodNumber>;
74
- }, z.core.$strip>>;
75
- field: z.ZodOptional<z.ZodString>;
76
- meta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
77
- }, z.core.$strip>;
78
- export type TargetRef = z.infer<typeof targetRefSchema>;
79
- /**
80
- * How the server treats a write whose snapshot watermark (`readAt`) is older
81
- * than the target row's latest change. There are three dispositions:
82
- * • `notify` — hold the write and return a {@link StaleNotification}
83
- * carrying the current value, so the actor (agent or human)
84
- * can resolve it.
85
- * • `reject` — throw `AbloStaleContextError`, the default when `readAt`
86
- * is present.
87
- * • `overwrite` — apply the write blindly, last write wins, with no signal.
88
- */
89
- export declare const onStaleModeSchema: z.ZodEnum<{
90
- reject: "reject";
91
- overwrite: "overwrite";
92
- notify: "notify";
93
- }>;
94
- export type OnStaleMode = z.infer<typeof onStaleModeSchema>;
95
- /**
96
- * The optimistic guard carried on a commit operation. `readAt` is the
97
- * snapshot watermark from `context.capture` (null/absent ⇒ unguarded write).
98
- * `bypass` is the explicit, recorded override of a *foreign* pessimistic
99
- * claim — see the claim layer below.
100
- */
101
- export declare const writeGuardSchema: z.ZodObject<{
102
- readAt: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
103
- onStale: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
104
- reject: "reject";
105
- overwrite: "overwrite";
106
- notify: "notify";
107
- }>>>;
108
- bypass: z.ZodOptional<z.ZodBoolean>;
109
- }, z.core.$strip>;
110
- export type WriteGuard = z.infer<typeof writeGuardSchema>;
111
- /**
112
- * The advisory returned to a committer whose write hit a stale-context
113
- * conflict under `onStale: 'notify'` — it reports that the value the committer
114
- * reasoned against changed while they were away. Rather than throwing, the
115
- * server hands back the conflicting field's current value as data so the
116
- * actor — an agent or a human — can reconcile and re-commit. A claim is the
117
- * prospective form of the same idea (coordinate before acting); this
118
- * notification is the in-flight form (here is what changed, you resolve). It
119
- * rides on the commit acknowledgement alongside `lastSyncId`; an empty or
120
- * absent array means nothing the committer depended on moved.
121
- *
122
- * Only `onStale: 'notify'` produces this. The conflicting operation was held,
123
- * not written, and the actor reconciles against `currentValues` and
124
- * re-commits. `reject` throws instead, and `overwrite` proceeds silently —
125
- * neither notifies.
126
- */
127
- export declare const staleNotificationSchema: z.ZodObject<{
128
- object: z.ZodOptional<z.ZodLiteral<"stale_notification">>;
129
- model: z.ZodString;
130
- id: z.ZodString;
131
- readAt: z.ZodNumber;
132
- observedSyncId: z.ZodNumber;
133
- conflictingFields: z.ZodArray<z.ZodString>;
134
- currentValues: z.ZodRecord<z.ZodString, z.ZodUnknown>;
135
- writtenBy: z.ZodObject<{
136
- kind: z.ZodEnum<{
137
- user: "user";
138
- agent: "agent";
139
- system: "system";
140
- }>;
141
- id: z.ZodString;
142
- }, z.core.$strip>;
143
- group: z.ZodOptional<z.ZodString>;
144
- }, z.core.$strip>;
145
- export type StaleNotification = z.infer<typeof staleNotificationSchema>;
146
- /**
147
- * A read that a commit declares it depended on, so the server can ask "did
148
- * anything I looked at change?" — broader than the write-target check, which
149
- * only validates the rows being written. The server re-runs stale detection
150
- * against each declared read at its `readAt`; a moved premise fires the entry's
151
- * `onStale` disposition (default `reject`) across the whole batch (`notify`
152
- * holds every write and notifies, `reject` aborts, `overwrite` proceeds
153
- * silently). A dependency comes at one of two granularities:
154
- *
155
- * • Row — `{ model, id, readAt, fields? }`: did this specific row, or these
156
- * specific fields, change?
157
- * • Group — `{ group, readAt }`: did anything in this sync group change?
158
- * `group` is a sync-group key such as `deck:abc` or `slide:s1`, the
159
- * same unit a participant watches and claims.
160
- *
161
- * See `packages/sync-engine/docs/concurrency-convention.md` (§4) for the
162
- * governing convention and the receive → reconcile loop.
163
- */
164
- export declare const readDependencySchema: z.ZodUnion<readonly [z.ZodObject<{
165
- model: z.ZodString;
166
- id: z.ZodString;
167
- readAt: z.ZodNumber;
168
- fields: z.ZodOptional<z.ZodArray<z.ZodString>>;
169
- onStale: z.ZodOptional<z.ZodEnum<{
170
- reject: "reject";
171
- overwrite: "overwrite";
172
- notify: "notify";
173
- }>>;
174
- }, z.core.$strip>, z.ZodObject<{
175
- group: z.ZodString;
176
- readAt: z.ZodNumber;
177
- onStale: z.ZodOptional<z.ZodEnum<{
178
- reject: "reject";
179
- overwrite: "overwrite";
180
- notify: "notify";
181
- }>>;
182
- }, z.core.$strip>]>;
183
- export type ReadDependency = z.infer<typeof readDependencySchema>;
184
- /**
185
- * A durable read-dependency — what a participant is watching so that a later
186
- * change to it opens a {@link StaleNotification}. It is the persisted sibling of
187
- * a {@link ReadDependency}: the same reference shape, minus the disposition (a
188
- * track always notifies — that is what tracking is), with an optional `readAt`
189
- * that defaults to the watermark of the commit that registered it. The row form
190
- * watches one object; the group form watches a whole sync group ("anything in
191
- * `deck:abc`"). Where a `ReadDependency` is checked once at commit and discarded,
192
- * a `TrackDependency` is kept and re-checked against every future delta. See
193
- * `packages/sync-engine/docs/groups.md` for how it drives change propagation.
194
- */
195
- export declare const trackDependencySchema: z.ZodUnion<readonly [z.ZodObject<{
196
- model: z.ZodString;
197
- id: z.ZodString;
198
- readAt: z.ZodOptional<z.ZodNumber>;
199
- }, z.core.$strip>, z.ZodObject<{
200
- group: z.ZodString;
201
- readAt: z.ZodOptional<z.ZodNumber>;
202
- }, z.core.$strip>]>;
203
- export type TrackDependency = z.infer<typeof trackDependencySchema>;
204
- /**
205
- * The lifecycle of a claim. When absent on the wire it means `'active'` (an
206
- * additive back-compat default). The server stamps `'active'` on `claim_begin`
207
- * and emits one terminal frame — `committed`, `canceled`, or `expired` — as the
208
- * claim ends, so contenders learn how it resolved, not merely that it vanished.
209
- */
210
- export declare const claimStatusSchema: z.ZodEnum<{
211
- active: "active";
212
- committed: "committed";
213
- expired: "expired";
214
- canceled: "canceled";
215
- }>;
216
- export type ClaimStatus = z.infer<typeof claimStatusSchema>;
217
- export declare const wireClaimSummarySchema: z.ZodObject<{
218
- field: z.ZodOptional<z.ZodString>;
219
- description: z.ZodOptional<z.ZodString>;
220
- entityType: z.ZodString;
221
- entityId: z.ZodString;
222
- meta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
223
- claimId: z.ZodString;
224
- declaredAt: z.ZodNumber;
225
- expiresAt: z.ZodNumber;
226
- }, z.core.$strip>;
227
- export type WireClaimSummary = z.infer<typeof wireClaimSummarySchema>;
228
- /** Why a claim ended in a non-success terminal state. */
229
- export declare const claimErrorSchema: z.ZodObject<{
230
- code: z.ZodString;
231
- message: z.ZodOptional<z.ZodString>;
232
- heldBy: z.ZodOptional<z.ZodString>;
233
- heldByClaimId: z.ZodOptional<z.ZodString>;
234
- heldByExpiresAt: z.ZodOptional<z.ZodNumber>;
235
- heldByClaim: z.ZodOptional<z.ZodObject<{
236
- field: z.ZodOptional<z.ZodString>;
237
- description: z.ZodOptional<z.ZodString>;
238
- entityType: z.ZodString;
239
- entityId: z.ZodString;
240
- meta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
241
- claimId: z.ZodString;
242
- declaredAt: z.ZodNumber;
243
- expiresAt: z.ZodNumber;
244
- }, z.core.$strip>>;
245
- policyReason: z.ZodOptional<z.ZodString>;
246
- }, z.core.$strip>;
247
- export type ClaimError = z.infer<typeof claimErrorSchema>;
248
- /**
249
- * A declared, pending-mutation claim — the unit broadcast inside a presence
250
- * frame's `activeClaims`. The client supplies the descriptive `targetRef`
251
- * fields, a `description` of the work, and a chosen `claimId`; the server stamps
252
- * `declaredAt` and `expiresAt` and may set `status` and `error`. Those last
253
- * two are optional, so one shape serves both the server, which sets them, and
254
- * the leaner SDK view, which reads a claim without them.
255
- */
256
- export declare const wireClaimSchema: z.ZodObject<{
257
- entityType: z.ZodString;
258
- entityId: z.ZodString;
259
- path: z.ZodOptional<z.ZodString>;
260
- range: z.ZodOptional<z.ZodObject<{
261
- startLine: z.ZodNumber;
262
- endLine: z.ZodNumber;
263
- startColumn: z.ZodOptional<z.ZodNumber>;
264
- endColumn: z.ZodOptional<z.ZodNumber>;
265
- }, z.core.$strip>>;
266
- field: z.ZodOptional<z.ZodString>;
267
- meta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
268
- fenceToken: z.ZodOptional<z.ZodNumber>;
269
- acquiredAt: z.ZodOptional<z.ZodNumber>;
270
- claimId: z.ZodString;
271
- description: z.ZodOptional<z.ZodString>;
272
- declaredAt: z.ZodNumber;
273
- expiresAt: z.ZodNumber;
274
- status: z.ZodOptional<z.ZodEnum<{
275
- active: "active";
276
- committed: "committed";
277
- expired: "expired";
278
- canceled: "canceled";
279
- }>>;
280
- error: z.ZodOptional<z.ZodObject<{
281
- code: z.ZodString;
282
- message: z.ZodOptional<z.ZodString>;
283
- heldBy: z.ZodOptional<z.ZodString>;
284
- heldByClaimId: z.ZodOptional<z.ZodString>;
285
- heldByExpiresAt: z.ZodOptional<z.ZodNumber>;
286
- heldByClaim: z.ZodOptional<z.ZodObject<{
287
- field: z.ZodOptional<z.ZodString>;
288
- description: z.ZodOptional<z.ZodString>;
289
- entityType: z.ZodString;
290
- entityId: z.ZodString;
291
- meta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
292
- claimId: z.ZodString;
293
- declaredAt: z.ZodNumber;
294
- expiresAt: z.ZodNumber;
295
- }, z.core.$strip>>;
296
- policyReason: z.ZodOptional<z.ZodString>;
297
- }, z.core.$strip>>;
298
- }, z.core.$strip>;
299
- export type WireClaim = z.infer<typeof wireClaimSchema>;
300
- export declare const claimRejectionSchema: z.ZodObject<{
301
- claimId: z.ZodString;
302
- reason: z.ZodString;
303
- target: z.ZodOptional<z.ZodObject<{
304
- entityType: z.ZodString;
305
- entityId: z.ZodString;
306
- path: z.ZodOptional<z.ZodString>;
307
- range: z.ZodOptional<z.ZodObject<{
308
- startLine: z.ZodNumber;
309
- endLine: z.ZodNumber;
310
- startColumn: z.ZodOptional<z.ZodNumber>;
311
- endColumn: z.ZodOptional<z.ZodNumber>;
312
- }, z.core.$strip>>;
313
- field: z.ZodOptional<z.ZodString>;
314
- meta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
315
- }, z.core.$strip>>;
316
- heldBy: z.ZodOptional<z.ZodString>;
317
- heldByClaimId: z.ZodOptional<z.ZodString>;
318
- heldByExpiresAt: z.ZodOptional<z.ZodNumber>;
319
- heldByClaim: z.ZodOptional<z.ZodObject<{
320
- field: z.ZodOptional<z.ZodString>;
321
- description: z.ZodOptional<z.ZodString>;
322
- entityType: z.ZodString;
323
- entityId: z.ZodString;
324
- meta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
325
- claimId: z.ZodString;
326
- declaredAt: z.ZodNumber;
327
- expiresAt: z.ZodNumber;
328
- }, z.core.$strip>>;
329
- policyReason: z.ZodOptional<z.ZodString>;
330
- }, z.core.$strip>;
331
- export type ClaimRejection = z.infer<typeof claimRejectionSchema>;
332
- /**
333
- * The point-to-point notification sent to a holder whose lease ended without
334
- * a successful commit. This remains a wire-shaped target because it arrives
335
- * directly from the WebSocket; the schema is the single validation boundary
336
- * before the event reaches public `claims.onLost` listeners.
337
- */
338
- export declare const claimLostSchema: z.ZodObject<{
339
- claimId: z.ZodString;
340
- reason: z.ZodEnum<{
341
- expired: "expired";
342
- preempted: "preempted";
343
- }>;
344
- target: z.ZodObject<{
345
- entityType: z.ZodString;
346
- entityId: z.ZodString;
347
- path: z.ZodOptional<z.ZodString>;
348
- range: z.ZodOptional<z.ZodObject<{
349
- startLine: z.ZodNumber;
350
- endLine: z.ZodNumber;
351
- startColumn: z.ZodOptional<z.ZodNumber>;
352
- endColumn: z.ZodOptional<z.ZodNumber>;
353
- }, z.core.$strip>>;
354
- field: z.ZodOptional<z.ZodString>;
355
- meta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
356
- }, z.core.$strip>;
357
- }, z.core.$strip>;
358
- export type ClaimLost = z.infer<typeof claimLostSchema>;
359
- /**
360
- * What a {@link ModelClaim} points at — the target locator as SDK callers see
361
- * it, keyed by `model` and `id` rather than the wire schema's `entityType` and
362
- * `entityId`. This is the public `ModelTarget` shape.
363
- */
364
- export declare const modelTargetSchema: z.ZodReadonly<z.ZodObject<{
365
- model: z.ZodString;
366
- id: z.ZodString;
367
- path: z.ZodOptional<z.ZodString>;
368
- range: z.ZodOptional<z.ZodObject<{
369
- startLine: z.ZodNumber;
370
- endLine: z.ZodNumber;
371
- startColumn: z.ZodOptional<z.ZodNumber>;
372
- endColumn: z.ZodOptional<z.ZodNumber>;
373
- }, z.core.$strip>>;
374
- field: z.ZodOptional<z.ZodString>;
375
- meta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
376
- }, z.core.$strip>>;
377
- export type ModelTarget = z.infer<typeof modelTargetSchema>;
378
- /**
379
- * A claim as SDK callers and the HTTP claim routes see it
380
- * (`ablo.<model>.claim.state`, `/v1/claims`) — the resolved, peer-readable view
381
- * of one active or queued claim. The client's `ModelClaim` type derives from
382
- * this shape.
383
- *
384
- * `expiresAt` is epoch milliseconds (a number), the same encoding as the
385
- * WebSocket {@link WireClaim}, so one timestamp representation spans the wire,
386
- * the SDK, HTTP, and errors — there is no ISO string anywhere.
387
- * `participantKind` is parsed through {@link wireParticipantKindSchema}, so a
388
- * legacy `'human'` frame normalizes to `'user'`.
389
- */
390
- export declare const modelClaimSchema: z.ZodReadonly<z.ZodObject<{
391
- id: z.ZodString;
392
- actor: z.ZodString;
393
- participantKind: z.ZodPreprocess<z.ZodEnum<{
394
- user: "user";
395
- agent: "agent";
396
- system: "system";
397
- }>>;
398
- description: z.ZodOptional<z.ZodString>;
399
- field: z.ZodOptional<z.ZodString>;
400
- status: z.ZodOptional<z.ZodEnum<{
401
- active: "active";
402
- queued: "queued";
403
- }>>;
404
- position: z.ZodOptional<z.ZodNumber>;
405
- expiresAt: z.ZodNumber;
406
- fenceToken: z.ZodOptional<z.ZodNumber>;
407
- target: z.ZodReadonly<z.ZodObject<{
408
- model: z.ZodString;
409
- id: z.ZodString;
410
- path: z.ZodOptional<z.ZodString>;
411
- range: z.ZodOptional<z.ZodObject<{
412
- startLine: z.ZodNumber;
413
- endLine: z.ZodNumber;
414
- startColumn: z.ZodOptional<z.ZodNumber>;
415
- endColumn: z.ZodOptional<z.ZodNumber>;
416
- }, z.core.$strip>>;
417
- field: z.ZodOptional<z.ZodString>;
418
- meta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
419
- }, z.core.$strip>>;
420
- }, z.core.$strip>>;
421
- export type ModelClaim = z.infer<typeof modelClaimSchema>;
422
- /**
423
- * The `claim_begin` payload a client sends. It carries the descriptive target
424
- * and a `description` of the work, an optional duration hint, and the opt-in
425
- * fair-queue flag. The server stamps the lifecycle and timestamp fields, so they
426
- * are not part of this inbound shape — this is exactly what the server validates
427
- * on ingest.
428
- */
429
- export declare const claimBeginPayloadSchema: z.ZodObject<{
430
- entityType: z.ZodString;
431
- entityId: z.ZodString;
432
- path: z.ZodOptional<z.ZodString>;
433
- range: z.ZodOptional<z.ZodObject<{
434
- startLine: z.ZodNumber;
435
- endLine: z.ZodNumber;
436
- startColumn: z.ZodOptional<z.ZodNumber>;
437
- endColumn: z.ZodOptional<z.ZodNumber>;
438
- }, z.core.$strip>>;
439
- field: z.ZodOptional<z.ZodString>;
440
- meta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
441
- claimId: z.ZodString;
442
- description: z.ZodOptional<z.ZodString>;
443
- estimatedMs: z.ZodOptional<z.ZodNumber>;
444
- queue: z.ZodOptional<z.ZodBoolean>;
445
- }, z.core.$strip>;
446
- export type ClaimBeginPayload = z.infer<typeof claimBeginPayloadSchema>;
447
- /**
448
- * The `claim_abandon` payload a client sends. `entityType` and `entityId` let
449
- * the server dequeue a claim that is still waiting (not yet held) from the FIFO
450
- * line; abandoning a claim that is already held needs only `claimId`.
451
- */
452
- export declare const claimAbandonPayloadSchema: z.ZodObject<{
453
- claimId: z.ZodString;
454
- entityType: z.ZodOptional<z.ZodString>;
455
- entityId: z.ZodOptional<z.ZodString>;
456
- }, z.core.$strip>;
457
- export type ClaimAbandonPayload = z.infer<typeof claimAbandonPayloadSchema>;
458
- /**
459
- * The `claim_reorder` payload a client sends. A privileged participant, such as
460
- * a supervisor over its sub-agents, re-ranks the FIFO wait queue for an entity:
461
- * `order` lists waiters by `heldBy` and `claimId` in the desired priority, and
462
- * any waiter not listed keeps its relative order behind those that are. The
463
- * server gates who may call this and drops an unauthorized sender. Where
464
- * `claim_abandon` acts on the caller's own entry, a reorder acts on other
465
- * participants' queue positions — which is why it is gated.
466
- */
467
- export declare const claimReorderPayloadSchema: z.ZodObject<{
468
- entityType: z.ZodString;
469
- entityId: z.ZodString;
470
- order: z.ZodArray<z.ZodObject<{
471
- heldBy: z.ZodString;
472
- claimId: z.ZodString;
473
- }, z.core.$strip>>;
474
- }, z.core.$strip>;
475
- export type ClaimReorderPayload = z.infer<typeof claimReorderPayloadSchema>;
476
- /**
477
- * The `claim_heartbeat` payload a client sends to extend a lease it holds (or
478
- * refresh its slot in the wait queue) past the liveness window — the
479
- * work-duration signal for long-running holders, distinct from the connection
480
- * keepalive.
481
- *
482
- * The claim is identified either way: by `claimId`, or — since a claim is
483
- * singular per (actor, entity) — by the full `entityType`/`entityId` target
484
- * ("my claim on this row"). At least one of the two must be present. The
485
- * target also lets the server resolve without a scan and is required to
486
- * refresh a *queued* claim (a waiter is not in the holder set the server
487
- * would otherwise search).
488
- */
489
- export declare const claimHeartbeatPayloadSchema: z.ZodObject<{
490
- claimId: z.ZodOptional<z.ZodString>;
491
- entityType: z.ZodOptional<z.ZodString>;
492
- entityId: z.ZodOptional<z.ZodString>;
493
- ttlMs: z.ZodOptional<z.ZodNumber>;
494
- details: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
495
- }, z.core.$strip>;
496
- export type ClaimHeartbeatPayload = z.infer<typeof claimHeartbeatPayloadSchema>;
497
- /**
498
- * The server's reply to a `claim_heartbeat`. For a socketless worker the
499
- * heartbeat reply is the only inbound signal path, so it carries the lease's
500
- * fate rather than a bare ok: `held` (extended to `expiresAt`), `queued`
501
- * (slot refreshed; `position` is the current place in line), or `lost` (the
502
- * lease expired and the queue moved on — the worker should abandon or
503
- * re-queue, and any write it still attempts is caught by its `readAt` guard).
504
- */
505
- export declare const claimHeartbeatAckPayloadSchema: z.ZodObject<{
506
- claimId: z.ZodString;
507
- status: z.ZodEnum<{
508
- queued: "queued";
509
- held: "held";
510
- lost: "lost";
511
- }>;
512
- expiresAt: z.ZodOptional<z.ZodNumber>;
513
- position: z.ZodOptional<z.ZodNumber>;
514
- queueDepth: z.ZodOptional<z.ZodNumber>;
515
- }, z.core.$strip>;
516
- export type ClaimHeartbeatAckPayload = z.infer<typeof claimHeartbeatAckPayloadSchema>;
517
- /**
518
- * The batched heartbeat — one request extends every lease the caller holds
519
- * on its plane (the socketless twin of the WebSocket keepalive, which renews
520
- * all held leases on every ping). For a worker holding many rows this is one
521
- * round trip per cadence instead of one per claim. Queued slots are not
522
- * batch-refreshed: a waiter knows its target and beats it directly.
523
- */
524
- export declare const claimHeartbeatBatchPayloadSchema: z.ZodObject<{
525
- ttlMs: z.ZodOptional<z.ZodNumber>;
526
- }, z.core.$strip>;
527
- export type ClaimHeartbeatBatchPayload = z.infer<typeof claimHeartbeatBatchPayloadSchema>;
528
- /** Reply to a batched heartbeat: one ack entry per lease that was extended. */
529
- export declare const claimHeartbeatBatchAckPayloadSchema: z.ZodObject<{
530
- results: z.ZodArray<z.ZodObject<{
531
- claimId: z.ZodString;
532
- status: z.ZodEnum<{
533
- queued: "queued";
534
- held: "held";
535
- lost: "lost";
536
- }>;
537
- expiresAt: z.ZodOptional<z.ZodNumber>;
538
- position: z.ZodOptional<z.ZodNumber>;
539
- queueDepth: z.ZodOptional<z.ZodNumber>;
540
- }, z.core.$strip>>;
541
- }, z.core.$strip>;
542
- export type ClaimHeartbeatBatchAckPayload = z.infer<typeof claimHeartbeatBatchAckPayloadSchema>;
543
- /**
544
- * The `update_subscription` payload a client sends. It replaces the
545
- * connection's read interest with the complete set of sync groups — the read
546
- * counterpart to a claim, with no write lock and no TTL. Each entry is a
547
- * {@link syncGroupInputSchema} (`'default'` or a branded `kind:id`), so a
548
- * malformed group is rejected on ingest rather than silently indexed. The
549
- * element type is strict because this is untrusted client input.
550
- */
551
- export declare const updateSubscriptionPayloadSchema: z.ZodObject<{
552
- syncGroups: z.ZodArray<z.ZodUnion<readonly [z.ZodLiteral<"default">, z.core.$ZodBranded<z.ZodTemplateLiteral<`${string}:${string}`>, "SyncGroup", "out">]>>;
553
- }, z.core.$strip>;
554
- export type UpdateSubscriptionPayload = z.infer<typeof updateSubscriptionPayloadSchema>;
555
- /**
556
- * `subscription_ack` payload (server → client). Echoes the connection's
557
- * effective read set after the update (unchanged on rejection — the update is
558
- * atomic). `error` is present iff `success` is false (e.g. a scoped key
559
- * requesting a group outside its grant). `syncGroups` is lenient
560
- * (`z.string()`) here, not branded: it is the server's own echo for display,
561
- * not untrusted input, and includes base anchors like `org:<id>`.
562
- */
563
- export declare const subscriptionAckPayloadSchema: z.ZodObject<{
564
- success: z.ZodBoolean;
565
- syncGroups: z.ZodArray<z.ZodString>;
566
- error: z.ZodOptional<z.ZodObject<{
567
- code: z.ZodString;
568
- message: z.ZodString;
569
- }, z.core.$strip>>;
570
- }, z.core.$strip>;
571
- export type SubscriptionAckPayload = z.infer<typeof subscriptionAckPayloadSchema>;
572
- export declare const commitOperationTypeSchema: z.ZodEnum<{
573
- CREATE: "CREATE";
574
- UPDATE: "UPDATE";
575
- DELETE: "DELETE";
576
- ARCHIVE: "ARCHIVE";
577
- UNARCHIVE: "UNARCHIVE";
578
- }>;
579
- export type CommitOperationType = z.infer<typeof commitOperationTypeSchema>;
580
- /**
581
- * A single mutation in a commit batch, as it arrives on the wire. Extends the
582
- * optimistic `writeGuard` (`readAt`/`onStale`/`bypass`) — the structural link
583
- * that makes "every write is stale-guarded" legible in the type, not just in
584
- * prose.
585
- */
586
- export declare const commitOperationSchema: z.ZodObject<{
587
- readAt: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
588
- onStale: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
589
- reject: "reject";
590
- overwrite: "overwrite";
591
- notify: "notify";
592
- }>>>;
593
- bypass: z.ZodOptional<z.ZodBoolean>;
594
- type: z.ZodEnum<{
595
- CREATE: "CREATE";
596
- UPDATE: "UPDATE";
597
- DELETE: "DELETE";
598
- ARCHIVE: "ARCHIVE";
599
- UNARCHIVE: "UNARCHIVE";
600
- }>;
601
- model: z.ZodString;
602
- id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
603
- input: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
604
- transactionId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
605
- fenceToken: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
606
- }, z.core.$strip>;
607
- export type CommitOperation = z.infer<typeof commitOperationSchema>;
608
- /**
609
- * Any commit operation on the wire — the runtime-validated ingest contract.
610
- * Commit operations carry replace (last-write-wins) semantics, guarded by the
611
- * optimistic write guard. It is a distinct alias from {@link CommitOperation}
612
- * so the server's ingest boundary reads as "any op on the wire", even though
613
- * the two shapes are identical.
614
- */
615
- export type AnyCommitOperation = CommitOperation;
616
- export declare const presenceKindSchema: z.ZodEnum<{
617
- enter: "enter";
618
- update: "update";
619
- leave: "leave";
620
- }>;
621
- export type PresenceKind = z.infer<typeof presenceKindSchema>;
622
- /** What a participant is actively working on (agents fill this in). */
623
- export declare const presenceActivitySchema: z.ZodObject<{
624
- entityType: z.ZodString;
625
- entityId: z.ZodString;
626
- path: z.ZodOptional<z.ZodString>;
627
- range: z.ZodOptional<z.ZodObject<{
628
- startLine: z.ZodNumber;
629
- endLine: z.ZodNumber;
630
- startColumn: z.ZodOptional<z.ZodNumber>;
631
- endColumn: z.ZodOptional<z.ZodNumber>;
632
- }, z.core.$strip>>;
633
- field: z.ZodOptional<z.ZodString>;
634
- meta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
635
- action: z.ZodString;
636
- detail: z.ZodOptional<z.ZodString>;
637
- }, z.core.$strip>;
638
- export type PresenceActivity = z.infer<typeof presenceActivitySchema>;
639
- /**
640
- * Full `presence_update` frame as the server broadcasts it. The activity +
641
- * `activeClaims` are the observation surface for the other two layers —
642
- * rendered, never acted on as enforcement.
643
- */
644
- export declare const presenceUpdateFrameSchema: z.ZodObject<{
645
- kind: z.ZodEnum<{
646
- enter: "enter";
647
- update: "update";
648
- leave: "leave";
649
- }>;
650
- userId: z.ZodOptional<z.ZodString>;
651
- syncGroups: z.ZodOptional<z.ZodArray<z.ZodString>>;
652
- timestamp: z.ZodOptional<z.ZodNumber>;
653
- status: z.ZodString;
654
- timezone: z.ZodOptional<z.ZodString>;
655
- customStatus: z.ZodOptional<z.ZodString>;
656
- activity: z.ZodOptional<z.ZodObject<{
657
- entityType: z.ZodString;
658
- entityId: z.ZodString;
659
- path: z.ZodOptional<z.ZodString>;
660
- range: z.ZodOptional<z.ZodObject<{
661
- startLine: z.ZodNumber;
662
- endLine: z.ZodNumber;
663
- startColumn: z.ZodOptional<z.ZodNumber>;
664
- endColumn: z.ZodOptional<z.ZodNumber>;
665
- }, z.core.$strip>>;
666
- field: z.ZodOptional<z.ZodString>;
667
- meta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
668
- action: z.ZodString;
669
- detail: z.ZodOptional<z.ZodString>;
670
- }, z.core.$strip>>;
671
- isAgent: z.ZodOptional<z.ZodBoolean>;
672
- participantKind: z.ZodOptional<z.ZodPreprocess<z.ZodEnum<{
673
- user: "user";
674
- agent: "agent";
675
- system: "system";
676
- }>>>;
677
- activeClaims: z.ZodOptional<z.ZodArray<z.ZodObject<{
678
- entityType: z.ZodString;
679
- entityId: z.ZodString;
680
- path: z.ZodOptional<z.ZodString>;
681
- range: z.ZodOptional<z.ZodObject<{
682
- startLine: z.ZodNumber;
683
- endLine: z.ZodNumber;
684
- startColumn: z.ZodOptional<z.ZodNumber>;
685
- endColumn: z.ZodOptional<z.ZodNumber>;
686
- }, z.core.$strip>>;
687
- field: z.ZodOptional<z.ZodString>;
688
- meta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
689
- fenceToken: z.ZodOptional<z.ZodNumber>;
690
- acquiredAt: z.ZodOptional<z.ZodNumber>;
691
- claimId: z.ZodString;
692
- description: z.ZodOptional<z.ZodString>;
693
- declaredAt: z.ZodNumber;
694
- expiresAt: z.ZodNumber;
695
- status: z.ZodOptional<z.ZodEnum<{
696
- active: "active";
697
- committed: "committed";
698
- expired: "expired";
699
- canceled: "canceled";
700
- }>>;
701
- error: z.ZodOptional<z.ZodObject<{
702
- code: z.ZodString;
703
- message: z.ZodOptional<z.ZodString>;
704
- heldBy: z.ZodOptional<z.ZodString>;
705
- heldByClaimId: z.ZodOptional<z.ZodString>;
706
- heldByExpiresAt: z.ZodOptional<z.ZodNumber>;
707
- heldByClaim: z.ZodOptional<z.ZodObject<{
708
- field: z.ZodOptional<z.ZodString>;
709
- description: z.ZodOptional<z.ZodString>;
710
- entityType: z.ZodString;
711
- entityId: z.ZodString;
712
- meta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
713
- claimId: z.ZodString;
714
- declaredAt: z.ZodNumber;
715
- expiresAt: z.ZodNumber;
716
- }, z.core.$strip>>;
717
- policyReason: z.ZodOptional<z.ZodString>;
718
- }, z.core.$strip>>;
719
- }, z.core.$strip>>>;
720
- delegatedFrom: z.ZodOptional<z.ZodNullable<z.ZodString>>;
721
- }, z.core.$strip>;
722
- export type PresenceUpdateFrame = z.infer<typeof presenceUpdateFrameSchema>;